Andrea Iannone claimed his first Moto2 victory of the year with an excellent ride under heavy pressure at Catalunya, while Marc Marquez and erstwhile championship leader Pol Espargaro clashed in controversial manner three laps from the end.
Marquez and Espargaro had been two of the primary reasons Iannone could not be assured of victory despite leading for the majority of the race. Along with Thomas Luthi, the lead quartet was rarely separated by more than six tenths of a second.
While the lead occasionally changed hands at the first turn, the crucial moment of the race came three laps from the finish when Luthi (Paddock Suter) dived down the inside of Marquez at Turn 10.
Marquez (Monlau Suter) lost the front of his bike but was able to rescue the situation almost instantly, although he lost second and surrendered ground.
That invited his title rival Espargaro (Pons Kalex) to dive down the inside, but as Marquez pulled back onto line the pair touched. Espargaro crashed out, suffering a heavy high-side into the gravel, while Marquez was able to continue.
In contrast to his controversial move on Luthi at Qatar, Marquez seemed to know little about where Espargaro was, although race control is reviewing the incident.
The battle for the lead was still on, but Iannone managed to resist a final lap dive from Luthi to seal a first win of the year for his Speed Master Speed Up squad.
Luthi does however have the comfort of now leading the championship, two points ahead of Marquez.
It was similarly frantic behind the lead four, with a multitude of riders involved in the fight for fifth - which became fourth following Espargaro's crash.
Esteve Rabat (Pons Kalex) eventually claimed the position ahead of Simone Corsi (Ioda FTR) and Takaaki Nakagami (Italtrans Kalex), although Toni Elias (Aspar Suter) was also involved until he crashed out seven laps from the end.
Results - 23 laps: Pos Rider Team/Bike Time/Gap 1. Andrea Iannone Speed Master Speed Up 41m16.852s 2. Thomas Luthi Paddock Suter + 0.083s 3. Marc Marquez Monlau Suter + 1.137s 4. Esteve Rabat Pons Kalex + 12.516s 5. Simone Corsi Ioda FTR + 14.226s 6. Takaaki Nakagami Italtrans Kalex + 15.072s 7. Dominique Aegerter Technomag-Cip Suter + 16.255s 8. Randy Krummenacher Switzerland Kalex + 16.354s 9. Mika Kallio Marc VDS Kalex + 16.606s 10. Scott Redding Marc VDS Kalex + 16.793s 11. Johann Zarco JIR Motobi + 17.298s 12. Bradley Smith Tech 3 + 22.242s 13. Claudio Corti Italtrans Kalex + 23.763s 14. Alex de Angelis Forward Suter + 24.069s 15. Nicolas Terol Aspar Suter + 27.039s 16. Jordi Torres Tech 3 + 32.158s 17. Max Neukirchner Kiefer Kalex + 34.389s 18. Ratthapark Wilairot Gresini Suter + 35.387s 19. Ricard Cardus Arguinano AJR + 35.501s 20. Angel Rodriguez SAG Bimota + 35.623s 21. Yuki Takahashi Forward Suter + 35.803s 22. Axel Pons Pons Kalex + 36.903s 23. Anthony West QMMF Moriwaki + 52.636s 24. Alexander Lundh MZ + 1m16.309s 25. Marco Colandrea SAG FTR + 1m18.573s 26. Elena Rosell QMMF Moriwaki + 1m35.551s Retirements: Pol Espargaro Pons Kalex 20 laps Roberto Rolfo Technomag-Cip Suter 20 laps Toni Elias Aspar Suter 19 laps Julian Simon Avintia Suter 0 laps Gino Rea Gresini Suter 0 laps Mike di Meglio Speed Master Speed Up 0 laps