Dylan Groenewegen won a second consecutive stage at the Tour de France when he sprinted to the finish on Saturday, and Greg Van Avermaet kept the overall lead for a fifth consecutive day.
Dutch rider Groenewegen beat Andre Greipel and Fernando Gaviria to the line to win Stage 8 in more than four hours.
Four-time winner Chris Froome remained over a minute behind Van Avermaet, a support rider for BMC leading hope Richie Porte.
The 25-year-old Groenewegen entered the final meters behind Greipel, Gaviria and Peter Sagan, but the Team LottoNL-Jumbo rider timed his last surge perfectly, swinging around his hard-charging opponents to cross first.
Groenewegen joins Sagan and Gaviria as two-stage winners at this edition of the Tour.
The mostly flat 112-mile ride from Dreux to Amiens comes before the three-week race faces one of its most difficult legs when it hits the tricky and occasionally treacherous cobblestones.
Sunday's Stage 9 will take riders over 15 cobbled paths scattered along 13.5 miles of the 97.2-mile course from Arras to Roubaix, near the Belgian border.
That challenge will be followed by a rest day on Monday before the race shifts to its first mountain stages in the Alps.
Van Avermaet picked up a one-second bonus overall during an intermediate bonus sprint at 12 1/2 miles from the finish. That increased his lead over Froome's teammate Geraint Thomas to 7 seconds and his own BMC teammate Tejay Van Garderen to 9 seconds.
Fans helped celebrate Bastille Day by waving French flags along the side of road as the riders moved north of Paris through wheat fields to Amiens, the birthplace of French president Emmanuel Macron.
This was the second consecutive “transition” stage that shifts the race across flatter areas to reach more difficult terrain. The result was another mostly calm ride.
The only incident to interrupt the leg was a pile-up with just under 20K to go. UAE Emirates leader Daniel Martin, the winner of Stage 6, bloodied his left elbow and tore the back of his shirt.
Martin and 11 other riders couldn't reconnect and Martin lost more than a minute, falling from 21st to 31st place at 2:47 behind.