Maria Sharapova needed all her battling qualities to beat Eugenie Bouchard and reach a third successive French Open final.
The Russian came through 4-6 7-5 6-2 against the 20-year-old Canadian in two hours and 27 minutes.
She will face Romanian fourth seed Simona Halep in Saturday's final.
Halep beat Germany's Andrea Petkovic 6-2 7-6 (7-4) to reach her first Grand Slam final.
Sharapova had the more testing afternoon, recovering from a set down for the third match in a row.
"I don't feel that I played my best tennis today," she said.
"I felt my opponent played extremely well, exceptional tennis, and I didn't feel that I was playing my best.
"I fought, I scrambled, and I found a way to win. I'm happy and proud about that."
The Canadian's powerful, flat hitting off both wings had Sharapova scrambling from side to side and she broke for the second time at 4-4 on her way to clinching the opening set.
When Bouchard came back from 5-2 down to level in the second, after an extraordinary ninth game that saw Sharapova double-fault on two of three set points, a maiden Grand Slam final was within reach.
But while Sharapova's tennis might not always have hit the heights at Roland Garros this year, her renowned fighting spirit has been ever present.
The vulnerable serve improved sufficiently to take the pressure off and the Russian hammered away with her forehand to break at 6-5, forcing a decider.
Sharapova had dropped one game in her previous two final sets, and she set about this one in similar fashion, coming back from 40-0 down to break at 3-1.
Bouchard has shown her mettle by reaching two Grand Slam semi-finals this year and gamely saw off four match points on serve, but Sharapova simply would not be denied and converted her fifth with a forehand that clipped the baseline.
"I'm always disappointed with a loss," said Bouchard. "I expect a lot from myself. I felt like I was close today and just came up a bit short."
Halep continued her hugely impressive form in the second semi-final to reach her first major final without dropping a set.
The 22-year-old has won seven WTA titles since losing in the first round at Roland Garros last year as the world number 57.
She raced through the first set in 28 minutes against Petkovic, the 28th seed also playing her first Grand Slam semi-final.
The second set was a much more competitive affair as Petkovic broke early and had two points for 4-1, only to hand the advantage back with a double-fault and two errors.
Halep was under pressure serving second in the set but held her nerve before edging a nervous tie-break from both players.
"It's incredible to be in the final here in Paris," she said. "I think I was a little bit stronger in the end, I tried everything to win this match.
"I have a lot of confidence in myself now, I played really good here, but the next round with Maria will be really tough. She's a great champion."