Britain's Chris Froome bounced back from a disappointing day on Friday with victory in the toughest mountain stage of the Criterium du Dauphine.
The 30-year-old Team Sky rider had lost ground on Vincenzo Nibali on stage six as the Tour de France champion rode into the leader's jersey.
But the Italian suffered on Saturday and was well back as Froome raced to a 17-second win from Tejay van Garderen.
American Van Garderen now leads the race overall by 18 seconds from Froome.
Froome, who both won the Criterium and Tour de France in 2013, and BMC's Van Garderen rode alongside each other for most of the seventh stage, which featured five category one climbs.
The pair attacked on the final climb and went head to head up the mountain before Froome attacked decisively with less than a mile remaining.
Froome said: "I'm not quite at my best yet. I think I've still a bit of work to do between now and the Tour.
"That's one of the reasons we're here, to really test and see where we're at. I'm happy with where I'm at. It's a good place to be at his time of the season."
Race leader Van Garderen said: "My tactic was just to mark Froome and when he went there was no way I could follow him, but I'm very happy with the yellow jersey."
Nibali finished four minutes behind Froome and is out of the running for the race win, with only Sunday's final stage still to come.
It is another mountainous trek which finishes with a category one climb up to Modane Valfrejus.
After the race Froome was fined 200 Swiss francs (£138) and his prize money of 4,000 euros (£2,894) was held back for his "non-participation at the press conference", organisers said.
According to a source close to Team Sky, Froome was told he did not have to attend the conference, having spoken to the media soon after crossing the line. The British team intend to discuss the matter with organisers over the next couple of days.
Another Briton, Orica GreenEdge's Simon Yates, 22, is fifth overall at one minute and 29 seconds behind Van Garderen and retains the white jersey for the best young rider.
Elsewhere, Team Sky's Geraint Thomas finished seventh, seven seconds behind Dutch Giant rider Tom Dumoulin in the first stage of the Tour de Suisse.
Stage 7 results
1. Chris Froome (GB/Team Sky) 4hrs 24mins 17secs
2. Tejay van Garderen (US/BMC Racing) +17secs
3. Louis Meintjes (SA/Team MTN) +41secs
4. Benat Intxausti (Spa/Movistar) Same time
5. Joaquim Rodriguez (Spa/Katusha) +54secs
General Classification after stage 7:
1. Tejay van Garderen (US/ BMC Racing) 26hrs 59mins 27secs
2. Chris Froome (GB/Team Sky) +18secs
3. Benat Intxausti (Spa/Movistar) +45secs
4. Rui Costa (Por/Lampre) +1min 10secs
5. Simon Yates (GB/Orica) +1min 29secs
6. Alejandro Valverde (Spa/Movistar) +1mins 39secs
7. Romain Bardet (France/AG2R) +1mins 45secs
8. Daniel Martin (Ire/Cannondale) +2mins 29secs
9. Andrew Talansky (US/Cannondale) +2mins 39secs
10. Joaquim Rodriguez (Spa/Katusha) +2mins 45secs