Jannik Sinner, the only teenager in the world's top 100, recovered from losing eight straight games to beat French veteran Gilles Simon 6-3, 0-6, 6-4 on Friday and book a place in the Cologne ATP semi-finals.
The 19-year-old Italian, ranked at a career-high 46, was 0-2 down in the final set to an opponent 16 years his senior before fighting back.
Wild card Sinner, who saved 16 of 21 break points, will be playing in his second tour-level semi-final after making the last four in Antwerp in 2019.
"He didn't give me any angles and played down the middle. He was very solid and I tried to play more on his forehand," said Sinner of Simon, a former world number six.
He will next play top-seeded German Alexander Zverev who fired 16 aces past Adrian Mannarino of France on his way to a 6-4, 6-7 (5/7), 6-4 win.
Zverev won the first of back-to-back Cologne events last weekend.
He will be looking for revenge against Sinner who shocked him at Roland Garros in the last-16 earlier this month.
Sinner went on to the quarter-finals where he lost to Rafael Nadal.
Cologne ATP results on Friday (x denotes seeded player):
Alexander Zverev (GER x1) bt Adrian Mannarino (FRA x8) 6-4, 6-7 (5/7), 6-4
Jannik Sinner (ITA) bt Gilles Simon (FRA) 6-3, 0-6, 6-4
Felix Auger-Aliassime (CAN x5) bt Yoshihito Nishioka (JPN) 6-3, 6-4
Diego Schwartzman (ARG x2) bt Alejandro Davidovich Fokina (ESP) 2-6, 7-6 (7/3), 6-1