World number one Roger Federer survived a scare from unseeded Borna Coric to beat him 5-7 6-4 6-4 in the Indian Wells Masters and set up a final showdown with Juan Martin del Potro who cruised to a 6-2 6-3 win over Milos Raonic.
The victory kept Federer's hopes of winning a record sixth Indian Wells title alive but first he will have to get past the big-hitting Argentine, who got the better of the Swiss in the U.S. Open quarter-finals in September.
The partisan crowd erupted when Federer broke Coric at love to take the deciding set and end the unexpectedly competitive two hour twenty minute battle against the 21-year-old Croatian on a windy morning in the California desert.
An upset was on the cards when the speedy Coric used his ferocious backhand to take the first set off the Swiss, the first time defending champion Federer had dropped a set at Indian Wells in nine matches.
He then broke Federer to start the second set and silence the stunned crowd, which included Hall of Famers Rod Laver and Pete Sampras.
But despite playing below his usual standards, the 20-times grand slam champion was able to eek out victory by finding his serving rhythm and winning the biggest points of the match as nerves finally caught up with Coric.
"Those 10 minutes when he was up a set and a break were tough for me to accept," Federer said during an on-court interview.
"I had to move on with it and say that I was just happy to stay in the game. Maybe he's going to get a bit nervous and I think that's exactly what happened," he said.
"And I got a bit lucky too of course. It was a good match and a tough one for him."
The 36-year-old Federer improved to 17-0 for the year, his best ever start to a season.
Del Potro's one-sided win lacked the drama of the earlier match as Canadian Raonic put up little fight against the Argentine's powerful serve and punishing forehand in a contest that lasted just over an hour.
Del Potro won nearly 90 percent of his first service points and converted four of his five break point opportunities against Raonic, who never created a break point against the towering Argentine.
Victory was the 400th of the 29-year-old Del Potro's career, which has been interrupted by four wrist surgeries.
He considered retiring before slowly regaining his health and climbing the ATP rankings, where he now sits at number eight in the world.
"I'm healthy and that is the most important thing," Del Potro said. "I get on every court with a smile. I'm playing free of pain and am enjoying playing tennis again.
"I didn't expect to play at this level after all my surgeries but I'm here and I'm so happy."
Del Potro will look to win his first Indian Wells title after losing the 2013 final to Rafa Nadal but will have to defeat Federer, who holds an 18-6 lead in their career head-to-head meetings.