Dylan Groenewegen snatched his second win in a row on the Tour de France, while Australian contender Richie Porte has edged into the top 10 for the first time.
The Dutchman needed no help from his team mates in the final straight as he slalomed through his rivals to beat German Andre Greipel by almost a bike length after 181 kms from Dreux on Saturday.
Porte finished the stage in 40th place to edge into the general classification top 10 for the first time since the start of the race.
Colombian Fernando Gaviria finished third and Porte's BMC Racing teammate Belgian Greg van Avermaet retained the overall leader's yellow jersey.
Gaviria was boxed in by Greipel in the final 200 metres and the Colombian appeared to headbutt his rival's lower back in retaliation.
One of the overall favourites, Ireland's Dan Martin who won the sixth stage on Thursday, crashed with 17 kms left and lost one minute 15 seconds, according to provisional results.