Top seed and four-time champion Novak Djokovic survived a scare from Diego Schwartzman to set up an Internazionali d'Italia final against Rafael Nadal in Rome.
Having overcome Juan Martin del Potro in a gripping quarter-final, Djokovic had to get through another epic encounter in the last four of the ATP Masters 1000 event – the world number one prevailing 6-3 6-7 (2-7) 6-3 on Saturday.
After cruising in the first set, 15-time grand slam champion Djokovic – who is aiming for his fifth Rome title and third ATP triumph of 2019 – was pegged back in the second, Schwartzman coming out on top in a tie-breaker.
But Schwartzman's resistance was finally ended when Djokovic's quality came to the fore in the final set, and world number two Nadal – who the Serbian beat in January's Australian Open final – awaits on Sunday.
With eight-time winner Nadal breezing past Stefanos Tsitsipas 6-3 6-4 to claim the first final spot, Djokovic started strongly, despatching some typically composed shots to wrap up the first set, capping it off with a wonderful drop-shot in the final game following a terrific rally.
Schwartzman – buoyed by his 6-4 6-2 victory over Kei Nishikori in the last eight – responded well, though, breaking serve twice to force, and subsequently win, the tie-break.
However, that second-set resilience took too much out of Schwartzman's sails, and Djokovic broke serve when the Argentinian sent a short hit into the net following a brilliant cross-court effort from the Serb.
And after an awkward moment when a stray shot hit a ball boy, Djokovic – through to back-to-back Masters finals – made sure to make no further mistakes, breaking serve once more before forcing another error from his opponent to secure a hard-fought victory.