Britain's Cameron Norrie put in a superb display to beat top seed Andrey Rublev of Russia and reach the San Diego Open final.
Norrie recovered from losing the opening set to win 3-6 6-3 6-4.
Rublev was the stronger player in the opening set but once Norrie improved his serving in the second, he looked dangerous.
He used his forehand to good effect, dragging the world number four around the court to seal victory.
"This is a match I will remember for a long time - it is such a big win for me," said Norrie.
"Andrey came out firing and played some big tennis at the start, but I managed to weather the storm."
Norrie, the world number 28, will face either Bulgarian Grigor Dimitrov or second seed Casper Ruud of Norway in Sunday's final.
"I'm going to enjoy today, but I'm looking forward to tomorrow," he added.
Norrie started the match well but Rublev broke to go 3-1 up and maintained his advantage after that, taking the set on his third set point.
But Norrie roared back in the second set, taking a 4-1 lead which he never lost.
Norrie was the first to break in the decider and although Rublev threw everything at his opponent, the Briton held firm, clinching the win with a forehand winner for his second career win over a top-five player.