Roberto Bautista Agut followed two sprints with a gruelling slog as he battled past Karen Khachanov to reach the final of the Qatar Open.
Spanish second seed Bautista Agut had dashed past Andy Murray and Alejandro Davidovich Fokina for the loss of just three games in Doha, but Khachanov proved far more obdurate.
After a slow start, eventually Bautista Agut picked up the pace and emerged a 2-6 6-3 7-5 winner in two hours and 24 minutes of toil, earning a shot at Georgia's Nikoloz Basilashvili in Saturday's final.
Bautista Agut praised Russian Khachanov for making him scrap for the win.
"He was playing very fast," said Bautista Agut, quoted on the ATP website. "He was playing very solidly, he was defending very well and he hit many unbelievable passing shots. I had to play incredibly well tonight. I enjoyed tonight so much."
Third seed Basilashvili is the defending champion this week and made light work of France's Arthur Rinderknech, tying up a 6-4 6-2 victory.
In Marseille, Greek top seed Stefanos Tsitsipas was stunned by Russian qualifier Roman Safiullin in the Open 13 quarter-finals. World number 163 Safiullin had a staggering 13 break points against the under-performing Tsitsipas serve, and although 11 of those were saved, the two that were not decided the match.
Safiullin, for his part, faced one break point and saved it on the way to a 6-4 6-4 victory. He made his presence felt at the ATP Cup in Australia at the start of the year and, although results have been disappointing since, the 24-year-old is doing well again in France this week.
Next for Safiullin will be last week's Rotterdam champion Felix Auger-Aliassime, who saw off Belarusian Ilya Ivashka 6-3 6-4 in the last match of the day. After losing his first eight finals on the ATP Tour, Auger-Aliassime may well be closing in on a second title in eight days.
Saturday's other semi-final will see Russian second seed Andrey Rublev tackle Frenchman Benjamin Bonzi, who reached the last four of a main-tour event for the first time by crushing Aslan Karatsev 6-1 6-3.
Rublev dug deep to edge out French wildcard and former top-10 player Lucas Pouille 6-3 1-6 6-2.