Grigor Dimitrov came back to beat second-seeded Andy Murray 4-6, 7-6 (5), 7-6 (3) in a marathon match that ended early Saturday to book a spot in the Mexican Open final.
The 22 year-old Bulgarian needed nearly three hours to eliminate the heavily-favored 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.
Dolgopolov lost to Rafael Nadal in the Rio de Janeiro Open final last week.
"I've been working hard for this", said Anderson. "I'm very happy to be in an Open 500 final, it's a step forward for me. I want to win it now".
Anderson downed Frenchman Stephane Robertson and American Sam Querrey en route the to the Mexican Open quarterfinals, where his opponent David Ferrer with a left leg injury.
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.
Cibulkova, 13th in the WTA rankings, was leading 4-2 in the first set when her Chinese opponent decided to quit.
"This is awesome, I came to Mexico looking for a couple of victories to get back on track, and I will be playing for a title", Cibulkova said.
The Slovakian was beat by Li Na in the Australian Open final, then lost her next three matches, including a first round exit in Qatar.