Defending champion Aryna Sabalenka produced a stunning comeback against Elena Rybakina to set up a Madrid Open final with Iga Swiatek.
The Belarusian second seed fought back from a set and a break down to win 1-6 7-5 7-6 (7-5).
A two-time winner in the Spanish capital, Sabalenka will face world number one Swiatek in a repeat of last year’s final.
Poland’s Swiatek breezed into the Madrid showpiece earlier on Thursday with a 6-1 6-3 victory over Madison Keys.
“It’s definitely going to be a great battle,” Sabalenka said in her post-match interview.
“We always fight as hard as we can, always incredible matches. I’m really looking forward to this final and I’m going to do everything I can to get this win.”
Swiatek, a clay-court specialist, dominated throughout her match with Keys, needing just 70 minutes to secure a place in her third WTA 1,000 final this season.
A US Open finalist in 2017, Keys could not capitalise on the few chances she had, missing out on three break points and making 28 unforced errors to Swiatek’s eight.
Madrid a ‘super special place’ for Sabalenka
Sabalenka’s title defence appeared to be on the brink after Rybakina, the fourth seed from Kazakhstan, stormed through the opening set in just 25 minutes before going a break up in the second.
But Sabalenka’s fiery forehand eventually clicked into gear as she made a late charge to stay in the contest, breaking three times in a row to force a decider.
A third-set tie-break was required to separate the pair, but it was Sabalenka who came out on top to reach her first final since her Australian Open triumph in January.
Sabalenka is bidding to become just the second player to win three women’s singles titles in Madrid after Petra Kvitova.
The two-time major winner said: “It’s a super special place for me, I feel the support and today, honestly, if not for the people I would probably leave this court with a 6-1 6-1 [defeat] and be very sad.”
The victory ensures Sabalenka remains world number two ahead of America’s Coco Gauff.
Medvedev retires from quarter-final
The only men’s singles match of the day came to an abrupt end when Daniil Medvedev retired early with an injury to his right leg.
Medvedev required a medical timeout after going 3-2 up in the opening set of his quarter-final against Jiri Lehecka of the Czech Republic.
The Russian third seed, who was the highest-ranked player left in the men’s draw, returned to the court but was moving gingerly as Lehecka won the first set 6-4, at which point Medvedev decided to call it a day.
“It’s never easy in a match like this,” Lehecka told Sky Sports.
“If I were to choose the way how to win this match, it wouldn’t be like that.”
World number 31 Lehecka will play Felix Auger-Aliassime after the Canadian’s last-eight opponent Jannik Sinner, the Italian top seed, withdrew with a hip injury.
Medvedev is the defending champion at the Italian Open, the next ATP Masters 1,000 tournament which starts on 8 May.