Birthday boy Roger Federer needed three sets to see off David Ferrer at the Toronto tennis Masters and book a semi-final against another Spaniard, Feliciano Lopez, who upset Canadian Milos Raonic, also in three.
The just-turned 33-year-old Swiss ace won 6-3 4-6 6-3, and Federer will be favourite to get past Lopez and face either Bulgaria's Grigor Dimitrov or Frenchman Jo-Wilfried Tsonga for a third Rogers Cup title.
Lopez beat Raonic 6-4 6-7 6-3, while Dimitrov saw off South African Kevin Anderson 5-7 7-5 7-6.
Tsonga beat the Scot Andy Murray for the first time in six years, 7-6 4-6 6-4.
The victory, in just over two and a quarter hours, marked another disappointment for Murray, who has not won a title since his historic success at Wimbledon 13 months ago.
The American women's world number one Serena Williams and sister Venus face each other in their tournament in Montreal for a place in the final against either Poland's Agnieszka Radwanska or Russia's Ekaterina Makarova.