World number one Simona Halep battled past Maria Sharapova 4-6 6-1 6-4 to set up a repeat of last year’s Italian Open final against defending champion Elina Svitolina.
Halep, whose only other title this year came in January, fell behind after an error-strewn first set in which there were nine breaks of serve in total.
The Romanian bounced back to seal victory in two and a half hours.
Earlier, world number four Svitolina overcame Anett Kontaveit 6-4 6-3.
“I’m very proud of myself already that I reached the final,” said the 23-year-old Ukrainian, who is aiming to win her third title of the year.
“You know, it was really tough from the first match. I work for these kind of matches, I work on it every day. When my opponent tries to hit everything, I have an answer.”
In the second semi-final, there were six breaks of serve before Sharapova held to take a 4-3 lead in the opening set. Two more breaks for both players followed before the 31-year-old Russian broke again to claim the advantage in the match.
But Halep, following courtside advice from her coach Darren Cahill, fought back to take the second set. And with momentum behind her she clinched victory by converting the first of two match points when Sharapova’s forehand found the net.