Marc Marquez reduced Stefan Bradl's Moto2 championship lead to a mere six points by taking his seventh win of the season at Aragon, as a tyre problem for Bradl dropped him to eighth.
The title rivals had made a spectacular start to the race, launching into an immediate three-way battle with Scott Redding that included the lead being exchanged repeatedly on the first lap alone.
That level of frenetic dicing continued for the first two thirds of the race, with Andrea Iannone, Simone Corsi and Alex de Angelis joining in, and all taking a turn in the lead, as Aleix Espargaro, Julian Simon and Mike di Meglio started tagging onto the back of the train too.
Marquez kept fighting to the front of the pack but failing to break away - at one stage running wide off the track just as he seemed set to escape.
The crunch moment came on lap 14, when Speed Master rider Iannone made a big move on Marquez at the first corner, slid slightly off course, and narrowly avoided taking the race leader out while also breaking up the pack a little.
While Iannone accelerated back on in third place, Marquez got some clear air at last and started cruising away, going on to win by 2.466 seconds.
Iannone reclaimed second, with Corsi (Ioda) and de Angelis (JIR) chasing him home.
The rest of the erstwhile lead group became detached - and grew into an even bigger gaggle, with just 3.1s covering fifth to 17th places at the flag.
Bradl began to suffer a severe tyre problem with his Kiefer Kalex and drifted down the order to finish eighth, behind Espargaro, Bradley Smith and Thomas Luthi. Early leader Redding fell right back to 15th.
Results - 21 laps: Pos Rider Team/Bike Time/Gap 1. Marc Marquez Catalunya Suter 40m20.575s 2. Andrea Iannone Speed Master Suter + 2.466s 3. Simone Corsi Ioda FTR + 2.574s 4. Alex de Angelis JIR Motobi + 3.054s 5. Aleix Espargaro Pons Kalex + 10.831s 6. Bradley Smith Tech 3 + 10.870s 7. Thomas Luthi Interwetten Suter + 11.005s 8. Stefan Bradl Kiefer Kalex + 11.212s 9. Dominique Aegerter Technomag-CIP Suter + 11.810s 10. Mika Kallio Marc VDS Suter + 11.939s 11. Anthony West MZ + 12.108s 12. Mike di Meglio Tech 3 + 12.114s 13. Max Neukirchner MZ + 12.180s 14. Pol Espargaro Speed Up FTR + 12.908s 15. Scott Redding Marc VDS Suter + 13.329s 16. Esteve Rabat Blusens FTR + 13.875s 17. Julian Simon Aspar Suter + 13.954s 18. Xavier Simeon Tech 3 + 15.251s 19. Claudio Corti Italtrans Suter + 18.470s 20. Jordi Torres Aspar Suter + 20.128s 21. Randy Krummenacher Kiefer Kalex + 38.974s 22. Alex Baldolini Pons Kalex + 39.072s 23. Kenny Noyes Avintia FTR + 39.340s 24. Tomoyoshi Koyama Technomag-CIP Suter + 48.695s 25. Ricard Cardus QMMF Moriwaki + 48.843s 26. Santiago Hernandez SAG FTR + 1m02.670s 27. Sergio Gadea G22 Moriwaki + 1m05.633s 28. Joan Olive Castello FTR + 1m06.619s 29. Valentin Debise Speed Up FTR + 1m11.832s 30. Robertino Pietri Italtrans Suter + 1m27.512s 31. Yuki Takahashi Gresini Moriwaki + 1m31.402s 32. Mashel Al Naimi QMMF Moriwaki + 1m33.725s 33. Elena Rosell Aspar Suter + 1m36.548s Retirements: Michele Pirro Gresini Moriwaki 17 laps Jules Cluzel Forward Suter 9 laps Ratthapark Wilairot SAG FTR 9 laps Raffaele de Rosa Forward Suter 9 laps Mattia Pasini Ioda FTR 3 laps