Milos Raonic saved three match points to beat Rafael Nadal in the quarter-finals of the BNP Paribas Open in Indian Wells.
The Canadian lost the first set but fought back to win the match 4-6 7-6 (12-10) 7-5 in just under three hours.
Raonic will now play four-time champion Roger Federer in Saturday's semi-final after the Swiss comfortably beat Czech Tomas Berdych 6-4 6-0.
In the other semi-final, Britain's Andy Murray plays top seed Novak Djokovic.
Murray's match starts at 18:00 GMT with the Raonic-Federer following, but not starting before 20:00.
Raonic fired 18 aces and hit 48 winners, to Nadal's 25, to beat the three-time Indian Wells champion.
"I'm very happy with it, but I don't let myself get caught up because this isn't where it ends," said the 24-year-old. "There is a lot more that I want to achieve this week."
Meanwhile, Nadal, 28, took positives from the defeat. He said: "I was able to be very focused, playing with positive energy for three hours, so that's great news for me, because that's the way I competed during all of my career."
Raonic's semi-final opponent Federer, 33, is chasing a record fifth title in the desert.
Federer won 13 of 14 points at the net, never faced a break point on his serve, and broke Berdych four times in the match, including three times in the second set.