Marc Marquez took victory on his return to Moto2 after last year's injury, winning a spectacular race in Qatar.
The season-opener was action-packed from the outset, with a huge train of bikes fighting for the lead throughout, before a final-lap showdown between Marquez, Thomas Luthi and Andrea Iannone.
Poleman Luthi had led at first, before being attacked by Pol Espargaro starting lap two. Both ran a little wide, allowing Marquez to slip through into the lead, as Luthi started a temporary slump down the order.
Espargaro, Iannone and Marquez then swapped the lead for a while, although the latter pair made life harder for themselves by running wide at Turn 1 on consecutive laps around half-distance and losing several places.
That gave Espargaro another shot at leading, until Luthi worked his way back to the front on lap 14.
Marquez was soon back on Luthi's tail, with Iannone right behind them. It seemed as though Marquez was biding his time, and sure enough he attacked starting the final lap, edging Luthi onto the kerb and sending him very wide.
Iannone capitalised and briefly claimed the lead, but Marquez was able to slipstream back past on the run to the finish line, claiming victory in his comeback race by just 0.061 seconds.
Espargaro beat Esteve Rabat to the final podium position, with Luthi only able to salvage fifth.
Scott Redding battled through to sixth, just ahead of Mike di Meglio and Simone Corsi.
Results - 20 laps:
Pos Rider Team/Bike Time/Gap
1. Marc Marquez Monlau Suter 40m34.225s
2. Andrea Iannone Speed Master Speed Up + 0.061s
3. Pol Espargaro Pons Kalex + 1.412s
4. Esteve Rabat Pons Kalex + 1.639s
5. Thomas Luthi Interwetten Suter + 3.981s
6. Scott Redding Marc VDS Kalex + 6.768s
7. Mike di Meglio Speed Master Speed Up + 6.794s
8. Simone Corsi Ioda FTR + 6.986s
9. Bradley Smith Tech 3 + 10.828s
10. Mika Kallio Marc VDS Kalex + 11.379s
11. Randy Krummenacher Switzerland Kalex + 12.750s
12. Johann Zarco JIR Motobi + 14.121s
13. Toni Elias Aspar Suter + 17.634s
14. Takaaki Nakagami Italtrans Kalex + 17.875s
15. Julian Simon Avintia FTR + 17.894s
16. Claudio Corti Italtrans Kalex + 19.014s
17. Xavier Simeon Tech 3 + 19.114s
18. Dominique Aegerter Technomag-CIP Suter + 28.802s
19. Yuki Takahashi Forward Suter + 36.598s
20. Angel Rodriguez SAG FTR + 36.738s
21. Ratthapark Wilairot Gresini Moriwaki + 37.147s
22. Axel Pons Pons Kalex + 37.443s
23. Nicolas Terol Aspar Suter + 39.523s
24. Ricard Cardus Arguinano AJR + 45.260s
25. Anthony West QMMF Moriwaki + 53.786s
26. Gino Rea Gresini Moriwaki + 54.008s
27. Marco Colandrea SAG FTR + 1m19.054s
28. Alexander Lundh MZ FTR + 1m19.071s
29. Elena Rosell QMMF Moriwaki + 1m35.150s
30. Max Neukirchner Kiefer Kalex + 1 lap
Alex de Angelis Forward Suter 18 laps
Nasser Hasan Al Malki QMMF Moriwaki 10 laps
Roberto Rolfo Technomag-CIP Suter 3 laps