World No 1 Novak Djokovic was made to work hard at the French Open before emerging victorious 6-3 7-6 (7-5) 7-5 over dogged German Tommy Haas.
Victory booked a 12th major semi-final in a row and Djokovic will face Rafael Nadal in the last four in a repeat of last year's Roland Garros decider.
Djokovic was knocked out of the Sony Open by Haas two months ago in Miami but all looked to be going to plan for the Serbian when he won the first set after breaking Haas in games seven and 10.
But with no breaks of serve in the second, the 12th seed handed his opponent the second set in the tie-breaker despite three times taking a mini break.
The German warrior sent a wild backhand well wide and Djokovic's early break in the third game of the third set looked to have signalled the beginning of the end.
However, the 35-year-old surprisingly broke straight back to level before the top seed eventually broke again and earned a match point in Haas's next service game.
But the veteran found another gear to not only survive but break back and level the set at 5-5 before visibly tiring on the red Paris clay.
The Serb broke for the third and final time and served out to love to progress.
Friday's clash will be the 35th meeting between the Serb and Nadal with the latter holding a 12-3 lead on clay.
Djokovic beat the Spaniard in the Monte Carlo Masters final in April in their most recent meeting.
"I will have to raise my game. Nadal is in great form but the win in Monte Carlo has given me great confidence. I will be positive," said Djokovic.
"Playing Rafa at Roland Garros is the biggest challenge on clay. I am ready to play five sets."