Grigor Dimitrov came back to beat second-seed Andy Murray 4-6, 7-6, 7-6 in a marathon match to book a spot in the Mexican Open final.
The 22 year-old Bulgarian needed nearly three hours to eliminate the heavily favoured Murray and set up a championship matchup with South Africa's Kevin Anderson, who earlier defeated Alexandr Dolgopolov of Ukraine 6-1, 5-7, 6-4.
"This has been my hardest match so far, Andy is a great fighter, it was very hard," Dimitrov said.
"But there's always one winner and it was my turn today, I'm very happy."
Murray was trying to reach his first final since undergoing back surgery in September.
"I knew that it was not going to be easy, he's a great competitor. Today it was a dog fight, I'm glad I came on top,'' added Dimitrov, who has a 3-1 career record against Anderson.
The fifth-seeded Anderson, runner up last week at Delray Beach, will be playing in back to back finals for the first time in his career.
On the women's side, top-seeded Dominika Cibulkova reached for her first final since the Australian Open after Zhang Shuai retired with a right biceps injury.
Cibulkova will play America's Christina McHale, who needed nearly three hours to beat Caroline Garcia of France, 3-6, 6-2, 7-5.