Carlos Alcaraz continued his impressive rise by shaking off injury to beat Rafael Nadal and set up a Madrid Open semi-final against Novak Djokovic.
The 19-year-old Spaniard produced some superb hitting to beat five-time champion Nadal 6-2 1-6 6-3.
Alcaraz was struggling to move after falling and injuring his right ankle in the second set but managed to regroup to close out a stunning win.
World number one Djokovic earlier beat Hubert Hurkacz 6-3 6-4.
Alcaraz has often been compared to Nadal during his meteoric rise, which has seen him win the Miami Open and break into the top 10 of the world rankings.
However, this is the first time in three meetings that Alcaraz has beaten the 21-time Grand Slam champion.
Watched on by a number of Real Madrid players after Nadal attended their Champions League semi-final, Alcaraz produced a blistering first-set performance.
The two traded breaks before Alcaraz reeled off five of the final six games, often out-hitting Nadal and out-foxing him with drop shots.
After saving three break points early in the second set Alcaraz fell heavily while sliding for a forehand and received a medical time out to get the injury taped up.
However, he was visibly struggling to put weight on his right foot which affected his serve, and Nadal duly broke and won four games in a row to force the third set.
Alcaraz left the court at the end of the second set and then returned with more of his form from the first set, breaking Nadal to love to get a 3-1 lead.
He then sealed the game in style, whipping a forehand past Nadal into the corner of the court before turning to face his box in disbelief.
He shared a warm handshake with Nadal at the net before writing 'que ha pasado' - 'what happened?' - on the camera.
It is just Nadal's second defeat of the year, with the Spaniard currently making his return from a rib injury.
Alcaraz will now face three-time champion Djokovic, who has reached the semi-finals of the tournament for a seventh time.
Serbia's Djokovic did not face a break point during his 78-minute victory over Poland's Hurkacz.
It is the 72nd time Djokovic has reached the semi-finals of a Masters 1000 tournament. Only Nadal, with 76, has reached the last four more often.
Djokovic reached his first final of the season at the Serbia Open in April but lost to Andrey Rublev.
Stefanos Tsitsipas will face defending champion Alexander Zverev in the other semi-final.
Greece's Tsitsipas beat Rublev 6-3 2-6 6-4, while Zverev fought past Felix Auger-Aliassime 6-3 7-5.