Britain's Simon Yates leads the Tour de Romandie heading into Sunday's individual time trial after winning Saturday's penultimate stage.
The 24-year-old Orica rider attacked with 15 kilometres left of the mountainous 163.5km stage from Domdidier to Leysin, and rode clear alongside BMC's Richie Porte.
The victory leaves Yates 19 seconds clear of Australian Porte overall.
Team Sky's Chris Froome is 75 seconds down on compatriot Yates in 33rd place.
Yates said: "On the final climb I knew Richie was coming across, so I didn't want to keep pushing as I knew that when he caught me I would be empty, so I took a bit easy and waited for him to get to me.
"I managed to get him in front into the final kilometre and I think that really saved me as the wind was quite strong in the finish. I am just really happy that I was able to come around him and take the victory."
The six-day, five-stage race - an early indicator of form before the Tour de France in July - ends with the 17.9km individual time trial in Lausanne on Sunday.
Meanwhile, Italian rider Gianni Moscon is facing disciplinary action from Team Sky after it emerged he used racially abusive language towards FDJ's Kevin Reza at the end of Friday's stage three.
Team Sky chose not to withdraw Moscon from the race following discussions with FDJ. Moscon has apologised to Frenchman Reza and his team-mates but the British team will consider what action to take after establishing all of the facts of the incident.
Tour de Romandie stage four result:
1. Simon Yates (GB/Orica) 4hrs 10mins 03secs
2. Richie Porte (Aus/BMC Racing) Same time
3. Emanuel Buchmann (Ger/BORA) +30secs
4. Tejay van Garderen (US/BMC Racing) +43secs
5. Rigoberto Uran (Col/Cannondale) +52secs
6. Diego Ulissi (Ita/UAE Team Emirates) Same time
7. Pierre Latour (Fra/AG2R)
8. Louis Meintjes (SA/UAE Team Emirates)
9. Damien Howson (Aus/Orica)
10. David Gaudu (Fra/FDJ)
Overall classification after stage four:
1. Simon Yates (GB/Orica) 16hrs 50mins 35secs
2. Richie Porte (Aus/BMC Racing) +19secs
3. Emanuel Buchmann (Ger/ BORA) +38secs
4. Fabio Felline (Ita/Trek) +44secs
5. Primoz Roglic (Svn/LottoNL) +53secs
6. Ion Izagirre (Spa/Bahrain) +56secs
7. Bob Jungels (Lux/Quick-Step) Same time
8. Diego Ulissi (Ita/UAE Team Emirates) +58secs
9. Damien Howson (Aus/Orica) +59secs
10. Jesus Herrada (Spa/Movistar) Same time
33. Chris Froome (GB/Team Sky) + 1min 36secs
64. Peter Kennaugh (GB/Team Sky) +8mins 47secs