Championship leader Marc Marquez became the first rider to win five races in his debut MotoGP season with victory at Brno in the Czech Republic.
The 20-year-old Spaniard took his fourth win in a row to boost his bid to take the title at the first attempt.
He reeled in long-time leader Jorge Lorenzo, who had to settle for third after Dani Pedrosa also passed him.
Cal Crutchlow's hopes of a fifth podium finish of the season, after starting on pole, ended with a crash on lap eight.
The Briton was running in fourth place after seeing the fast-starting Lorenzo, plus Marquez and Pedrosa, pass him on the run-in to the first corner.
Marc Marquez revels in late overtake to win Czech
He was also briefly overtaken by Alvaro Bautista, but had re-established a small gap over the Spaniard when he lost control of his Tech 3 Yamaha.
"Alvaro came past and slowed the pace so much that I had to push hard," Crutchlow told BBC Sport. "I was trying to push to get back to the front guys but I made a mistake.
"We had some issues on the grid with the bike and it was important to get away from them [at the start], but Jorge [Lorenzo] did a fantastic first lap and put us all under pressure."
Crutchlow did manage to get his bike back on the track, restarting in 20th place, but was unable to get into the points after finishing 17th.
Marquez, meanwhile, extended his lead in the championship from 21 points at the outset to 26 - more than the allotted amount for a race win.
The Repsol Honda rider prevailed after a tit-for-tat tussle with Lorenzo's Yamaha in the later stages.
Marc Marquez - 213 points
Dani Pedrosa - 187 points
Jorge Lorenzo - 169 points
Valentino Rossi - 143 points
Cal Crutchlow - 127 points
Defending world champion Lorenzo, 35 points adrift in the standings beforehand, stormed through from fifth on the grid to take the lead at the first corner and established a healthy lead.
But Marquez and Pedrosa closed in with seven laps left to make it a three-way fight at the front.
Lorenzo repelled the first two attempts at a pass by Marquez, but could not resist the youngster's continued probing.
"I enjoyed the battle," the winner told BBC Sport. "It is the first time I have had a fight like this in MotoGP. In the beginning Jorge pushed quite a bit and made a big gap, but in the end I was a little bit stronger."
Lorenzo's hopes of defending his title suffered a further blow when Pedrosa also passed him, with three laps left, as he fell 44 points behind Marquez with seven rounds left.
"It is a bit disappointing because I almost had the race [in the bag] so to lose the first two positions in the last part of it is not the best," he conceded.
Meanwhile Britain's Scott Redding will take a 21-point lead in the Moto2 standings into next weekend's race at Silverstone after finishing eighth in Brno.
His closest rival, Spaniard Pol Espargaro, narrowed the gap after coming home fourth, with Finn Mika Kallio taking victory.
Czech Republic Grand Prix result:
1. Marc Marquez (Spa) Repsol Honda 42:50.729
2. Dani Pedrosa (Spa) Repsol Honda +0.313 secs
3. Jorge Lorenzo (Spa) Yamaha +2.277
4. Valentino Rossi (Ita) Yamaha +10.101
5. Alvaro Bautista (Spa) Gresini Honda +10.179
6. Stefan Bradl (Ger) LCR Honda +19.807
7. Andrea Dovizioso (Ita) Ducati +35.015
8. Nicky Hayden (US) Ducati +35.354
17. Cal Crutchlow (GB) Tech 3 Yamaha +1:20.640