World number two Simona Halep stayed on course to win her first Italian Open title after beating Garbine Muguruza 6-3 4-6 6-4 in the semi-finals in Rome.
Top seed Halep, 28, overpowered her 26-year-old opponent in the first set.
The pair then traded several breaks in the second set before Spain's Muguruza forced a decider.
Romania's Halep edged the third set and will play Marketa Vondrousova or a Karolína Pliskova in her third Italian Open final appearance on Monday.
Australian Open runner-up Muguruza, who beat Britain's Johanna Konta in the quarter-finals, took a medical time-out at the end of the first set and appeared to be moving more freely afterwards.
The resilient ninth seed recovered from a set and break down and won the final four games in the second, before breaking Halep again when she was serving for the match in the third set.
But the world number 17 was unable to hold on to her serve in the next game with two double faults, gifting two-time Grand Slam champion Halep victory.