Andrea Iannone mounted a late attack on Pol Espargaro to take a home Moto2 victory at Mugello.
Championship leader Marc Marquez could only finish fifth after a late mistake, behind Thomas Luthi and Bradley Smith.
Speed Master rider Iannone lurked within the lead pack throughout the race, then hunted down Espargaro - who had briefly escaped from his rivals - before taking first place into San Donato at the start of the final lap.
Espargaro tried his utmost but could not get back ahead of Iannone, crossing the line 0.09sec behind. The Pons rider had made his break with six laps to go, after grabbing the lead from Luthi (Paddock GP) in spectacular fashion - catching a wild slide into San Donato, then slipping past Luthi amid near-contact through the following Luco/Poggio Secco esses. But despite leading by a second for a spell, Espargaro was reeled in once Iannone triumphed in a protracted battle for second with Luthi.
Marquez (Monlau) led much of the early running before slipping back into the lead group and then losing momentum when he nearly lost his bike in a low-side late on. As Tech 3 rider Smith took a season-best fourth, just behind the leaders, fellow Briton Scott Redding (Marc VDS) nearly beat Marquez to fifth.
Seventh went to Italtrans' Takaaki Nakagami, who delivered one of his strongest Moto2 rides yet to lead for a while.
JIR rider Johann Zarco made it through to 10th after being demoted from third on the grid to 18th as a punishment for clashing with Espargaro in Saturday morning practice.
Retirements included fifth-place starter Alex de Angelis (Forward Racing) and former champion Toni Elias (Aspar), who both crashed without injury.
Results - 21 laps:
Pos Rider Team/Bike Time/Gap
1. Andrea Iannone Speed Master Speed Up 39m52.523s
2. Pol Espargaro Pons Kalex + 0.090s
3. Thomas Luthi Paddock Suter + 0.897s
4. Bradley Smith Tech 3 + 1.025s
5. Marc Marquez Monlau Suter + 3.796s
6. Scott Redding Marc VDS Kalex + 3.911s
7. Takaaki Nakagami Italtrans Kalex + 4.425s
8. Dominique Aegerter Technomag-CIP Suter + 11.366s
9. Claudio Corti Italtrans Kalex + 12.817s
10. Johann Zarco JIR Motobi + 13.031s
11. Mika Kallio Marc VDS Kalex + 13.129s
12. Randy Krummenacher Switzerland Kalex + 13.362s
13. Nicolas Terol Aspar Suter + 15.199s
14. Julian Simon Avintia FTR + 17.238s
15. Ricard Cardus Arguinano AJR + 36.556s
16. Ratthapark Wilairot Gresini Suter + 47.701s
17. Yuki Takahashi Forward FTR + 51.966s
18. Simone Corsi Ioda FTR + 53.969s
19. Gino Rea Gresini Moriwaki + 54.654s
20. Marco Colandrea SAG FTR + 1m08.279s
21. Eric Granado JIR Motobi + 1m14.807s
22. Mike di Meglio MZ + 1 lap
23. Anthony West QMMF Speed Up + 1 lap
Toni Elias Aspar Suter 14 laps
Roberto Rolfo Technomag-CIP Suter 12 laps
Esteve Rabat Pons Kalex 10 laps
Massimo Roccoli SAG Bimota 8 laps
Axel Pons Pons Kalex 7 laps
Xavier Simeon Tech 3 7 laps
Elena Rosell QMMF Moriwaki 6 laps
Alessandro Andreozzi Speed Master Speed Up 5 laps
Alex de Angelis Forward Suter 2 laps
Max Neukirchner Kiefer Kalex 1 lap