Nico Terol extended his 125cc championship lead by denying Johann Zarco a maiden win within sight of the flag at Mugello.
The pair had dominated the race and run as one throughout, with Terol - who had hand surgery this week following the crash that forced him to sit out Assen - leading at first after a spectacular start from fifth on the grid.
Terol could not shake Zarco off, and just before half-distance the Frenchman slipped ahead as Terol went slightly wide.
But Terol tucked in behind Zarco and sat there for the rest of the race, confident that he could reclaim the lead whenever he pleased. He waited until the final run down the pits straight to the checkered flag before popping out of Zarco's slipstream and snatching the victory.
Maverick Vinales battled to the front of the next group and fended off Efren Vazquez and Hector Faubel for third.
Jonas Folgar - second in the championship going into this event - charged up from 21st on the grid to seventh only to crash when pushing to get even higher.
Having qualified on the front row, Luis Salom slipped back to sixth in the race, falling away from the podium battle but resisting late pressure from Sergio Gadea and Sandro Cortese.
Results - 20 laps:
Pos Rider Team/Bike Time/Gap
1. Nicolas Terol Aspar Aprilia 39m51.815s
2. Johann Zarco Ajo Derbi + 0.167s
3. Maverick Vinales Blusens Aprilia + 8.379s
4. Efren Vazquez Ajo Derbi + 8.491s
5. Hector Faubel Aspar Aprilia + 8.594s
6. Luis Salom RW Aprilia + 22.908s
7. Sergio Gadea Blusens Aprilia + 23.989s
8. Miguel Oliveira Andalucia Aprilia + 40.138s
9. Alberto Moncayo Andalucia Aprilia + 40.767s
10. Jakub Kornfeil Ongetta Aprilia + 41.198s
11. Marcel Schrotter Mahindra + 41.255s
12. Sandro Cortese Germany Aprilia + 43.999s
13. Simone Grotzkyj Phonica Aprilia + 46.172s
14. Jasper Iwema Ongetta Aprilia + 58.976s
15. Danny Kent Ajo Aprilia + 59.725s
16. Alexis Masbou Caretta KTM + 1m00.127s
17. Taylor Mackenzie Phonica Aprilia + 1m00.227s
18. Zulfahmi Khairuddin Ajo Derbi + 1m08.245s
19. Miroslav Popov Ellegi Aprilia + 1m10.593s
20. Alessandro Tonucci Italia FMI Aprilia + 1m13.662s
21. Francesco Mauriello WTR-Ten10 Aprilia + 1m23.949s
22. Niklas Ajo TT Motion Aprilia + 1m38.811s
23. Giulian Pedone Phonica Aprilia + 1m53.144s
Luigi Morciano Italia FMI Aprilia 19 laps
Kevin Calia MGP Aprilia 19 laps
Jonas Folger Ajo Aprilia 17 laps
Danny Webb Mahindra 9 laps
Peter Sebestyen Caretta KTM 9 laps
Louis Rossi Matteoni Aprilia 7 laps
Joan Perello Matteoni Aprilia 7 laps
Sturla Fagerhaug WTR-Ten10 Aprilia 7 laps
Massimo Parziani Faenza Aprilia 6 laps
Adrian Martin Aspar Aprilia 1 lap
Harry Stafford Ongetta Aprilia 1 lap