Roger Federer was made to work hard by world number 109 Denis Kudla as he moved to within one win of a 10th title at the Gerry Weber Open.
Federer, seeking his 99th tournament victory on the ATP World Tour with Wimbledon looming, started as a hot favourite in Saturday's first semi-final in Halle.
However, the veteran Swiss, who must retain this title to remain world number one, certainly did not have things all his own way as he battled to a 7-6 (7-1) 7-5 triumph - his 20th successive win on grass.
Kudla did not appear intimidated by the mighty challenge that faced him and caused problems for his illustrious opponent with a series of cleanly struck groundstrokes.
Federer cut a frustrated figure on several occasions, but ultimately came good when it mattered most to progress to Sunday's final, in which he will face either Roberto Bautista Agut or Borna Coric.
After performing so impressively to cancel out an early break and keep pace with Federer, Kudla failed to deliver in a first-set tie-break - losing the first six points, with predictable consequences..
Federer was arguably second-best for much of the following set and had to save three break points to hold for 4-4. Kudla was broken three games later, though, and the top seed clinically capitalised by serving out the match with ease.