Jack Sock will appear in his first ATP Masters 1000 semi-final after defeating Kei Nishikori 6-3 2-6 6-2 at the BNP Paribas Open, setting up a clash with Roger Federer.
Sock continued his fine start to 2017 - the world number 18 has already won titles in Auckland and Delray Beach - by beating a top-five opponent for the first time at the eighth attempt.
However, he will face a fresh Federer in the semis after the Swiss was given a walkover against Nick Kyrgios, who pulled out of their match through illness.
Sock had to fend off two break points in his opening service game, but Nishikori was unable to replicate the American's feat, falling 2-0 down and failing to recover until the second set.
The Japanese broke Sock twice to force a decider, but his frustrations returned when he dropped serve in the opening game.
Nishikori had five chances to try to restore parity, but Sock ground it out to hold and move 4-1 clear en route to a deserved triumph.