Gregor Dimitrov beat top seed Carlos Alcaraz in straight sets to book a place in the Miami Open semi-final.
The Bulgarian, seeded 11th, won 6-2 6-4 to book a last-four meeting with Germany's world number five Alexander Zverev.
Dimitrov made a fast start as he opened a 3-0 lead and Alcaraz, chasing back-to-back titles after winning in Indian Wells, was never able to get back on terms.
He fought back from 4-1 down in the second set, but Dimitrov broke again to seal his second successive win over the Spaniard.
"I think overall, to win against him, you have to play at your best; that’s just how it is," said Dimitrov. "I came into the match very focused and extremely clear what I had to do.
"Sometimes simplicity is genius. It’s very, very hard to do it, especially when you play against an opponent like that, but I was really able to dictate the game, read the game a little bit better than last time.
"Overall, I think a very great match on my end and I’m just happy I finished in straight sets."
Zverev ended unseeded Fabian Marozsan’s run with a 6-3 7-5 success.
The Hungarian had beaten top 10 pair Holger Rune and Alex de Minaur to reach the last eight, but could only muster two break points as Zverev won 80 per cent of points on his first serve.
"I’m happy to be back in these late stages of these tournaments, playing the best players in the world, I think there are only those left," said Zverev, who reached the final in Miami in 2018.
Defending champion Daniil Medvedev will meet Jannik Sinner in the other semi-final in a rematch of the Australian Open final.
Meanwhile World number four Elena Rybakina (above) admitted she was not at her best after beating number 27 seed Victoria Azarenka 6-4 0-6 7-6 (2) to advance to her second straight Miami Open final.
The Kazakhstani will play American Danielle Collins for the title after surviving a mid-match slump that saw her make 13 unforced errors in the second set.
Rybakina battled back after losing three straight games in the third set before winning 10 of the following 11 points to force the tiebreaker to book her place in Saturday's decider.
She told Sky Sports Tennis: "Physically I haven’t been at my best this tournament and I knew if I was negative there is no chance for me to win any match and honestly, I didn’t have any energy to cheer myself up and show it to the box.
"I was just trying to focus on myself and keep the energy for myself."
Collins reached her first WTA 1000 final, in what she says will be her final year on tour, with a 6-3 6-2 win over Ekaterina Alexandrova.
The former Australian Open finalist needed just 75 minutes to beat the 14th seed, who had beaten world number one Iga Swiatek on her way to the last four.
Collins has won 12 straight sets since she lost her first of the tournament.