Novak Djokovic extended his winning streak to 17 matches by beating Juan Martin del Potro 6-3 7-6 in the Dubai tennis championship semi-finals on Friday.
Djokovic, unbeaten since October in a run that includes a third straight Australian Open title, will play Tomas Berdych in the final after the Czech got the better of second seed Roger Federer.
Berdych saved three match points and fought back from a set down to win 3-6, 7-6, 6-4.
Federer surged from 5-2 down in the second set but then fluffed three match points in the tiebreak before Berdych forced a deciding set with a bludgeoned return winner.
In the final set, two miscued forehands and a double fault from Federer gave Berdych two break points at 2-2.
The Swiss saved the first with an ace but skewed another forehand wide to fall 3-2 behind and Berdych was able to serve out the match for a fifth win in his past eight meetings with Federer.
The world number one's all-round game eventually proved too much for a defiant Del Potro.
"I played a poor game when I needed to close it out but he's a great player, so it was always going to be challenging"
The Serbian had breezed through the opening three rounds without dropping a set but Del Potro - the only man outside of the men's 'big four' to win a Grand Slam since 2005 - was a different prospect.
The former U.S. Open champion squandered a 3-0 second-set lead only to then break back when Djokovic was serving for the match at 5-4 up in the second, with the Argentine forcing a tiebreak.
Djokovic ultimately triumphed, a forehand winner from mid-court the only point in the tiebreak going against serve.
"His serve is very powerful, his forehand from the back of the court he can do anything with - I needed to stay in it when I was a break down," Djokovic said in a courtside interview.
"I played a poor game when I needed to close it out but he's a great player, so it was always going to be challenging."
The three-time Dubai champion did not start with his usual fluency but he improved as the sun set and the temperature fell.
Djokovic claimed the first break point with Del Potro serving at 2-3, the Argentine drifting a forehand long from mid-court.
The Serbian seized the chance, pushing his opponent wide with an angled drive that found Del Potro wanting and went 4-2 up.
Djokovic dictated play from the baseline, exploiting every short ball and finding angles that had the towering Del Potro scrambling in vain to counter and he sealed the first set in 35 minutes.
Djokovic is a crowd favourite but the Argentines in the stands, dressed in the national team's colours, cheered their man's every point, chanting his name at end-changes.
That seemed to inspire him and he held to love in the second set's opening game before going 0-40 up in the next.
Djokovic saved the first two break points with successive aces but the third saw him drag a cross-court backhand wide to fall 2-0 behind.
Serving at 3-1, Del Potro scuffed a backhand into the net to give Djokovic a break point.
Preparing to serve, Del Potro was given a time violation which was met with a cacophony of boos from the stands. When the point was played, the Argentine mis-hit to gift a break back.
Djokovic raced into a 5-3 lead, faltered, then showed his class to book a place in his fourth Dubai final in five years.