Jorge Lorenzo claimed a second consecutive MotoGP victory to close the gap on championship leader Marc Marquez.
The Spaniard came home second after prevailing in a tense fight with Honda team-mate Dani Pedrosa, while Valentino Rossi picked up a fourth consecutive fourth-place finish.
The tone of the race was set at the start, as Lorenzo once again put the hammer down and escaped out front, building a lead of more than two seconds over the opening two laps.
Poleman Marquez went the other way, losing out to Pedrosa away from the line and then also dropping behind Rossi when he ran too deep into Turn 8 early on.
For a while the top four stayed in that order, Pedrosa checking Lorenzo at 2.5s, before Marquez initiated a charge at the half-way mark.
He first passed Rossi with a typically bold move at Turn 10 before racing away from the Italian and onto the back of Pedrosa, whom he picked off at Turn 2.
Pedrosa though was able to stick with Marquez and with six laps to go launched his own attack, repassing him at Turn 10.
His advantage lasted all of four turns before Marquez surged back ahead with a block pass, and this time he was able to break Pedrosa and settle the fight in his favour.
Lorenzo though was untouchable, and as the Hondas battled his relentless pace earned him a dominant margin out front. He was able to celebrate victory on his final lap.
Rossi eventually finished a lonely fourth, in stark contrast to a fight for fifth which raged for the entire race.
There was nothing to choose between satellite riders Cal Crutchlow and Stefan Bradl throughout, with the Briton leading the German from the first lap to the start of the last.
Bradl found a way through on that final tour however to steal fifth by just two tenths of a second.
Alvaro Bautista had a quiet ride to seventh, while Andrea Dovizioso finally defeated Ducati stable-mate Nicky Hayden in the scrap for eighth.
Marquez now leads Lorenzo by 34 points with fives races to run, with Pedrosa a further five points back in third.
Results - 28 laps:
Pos Rider Bike Time/Gap
1. Jorge Lorenzo Yamaha 44m05.522s
2. Marc Marquez Honda +3.379s
3. Dani Pedrosa Honda +7.368s
4. Valentino Rossi Yamaha +15.062s
5. Stefan Bradl LCR Honda +22.355s
6. Cal Crutchlow Tech 3 Yamaha +22.599s
7. Alvaro Bautista Gresini Honda +31.059s
8. Andrea Dovizioso Ducati +42.702s
9. Nicky Hayden Ducati +44.858s
10. Michele Pirro Pramac Ducati +47.818s
11. Bradley Smith Tech 3 Yamaha +48.011s
12. Colin Edwards Forward FTR-Kawasaki +1m03.154s
13. Aleix Espargaro Aspar Aprilia +1m07.600s
14. Hiroshi Aoyama Avintia FTR-Kawasaki +1m15.528s
15. Danilo Petrucci Ioda-Suter-BMW +1m17.907s
16. Claudio Corti Forward FTR-Kawasaki +1m29.655s
17. Randy de Puniet Aspar Aprilia +1m33.990s
18. Michael Laverty PBM-Aprilia +1m36.860s
Bryan Staring Gresini FTR-Honda 24 laps
Hector Barbera Avintia FTR-Kawasaki 21 laps
Yonny Hernandez PBM Aprilia 9 laps
Karel Abraham Cardion Aprilia 7 laps
Andrea Iannone Pramac Ducati 3 laps
Lukas Pesek Ioda-Suter-BMW 3 laps