Ducati's Andrea Dovizioso moved into second place in the MotoGP standings with victory in front of his home crowd at Mugello, Italy.
The 31-year-old won in 41 minutes 32.126 seconds, just over a second ahead of championship leader Maverick Vinales of Spain.
Another Italian, Danilo Petrucci, was third on his Ducati.
Yamaha's Valentino Rossi, who suffered a motocross training accident last month, finished fourth having led.
Three-time world champion Jorge Lorenzo also led in the opening laps before the Spaniard dropped off the pace as Dovizioso, Vinales and Petrucci took up the challenge.
Dovizioso grabbed the lead on lap 14 of 23 before Vinales zipped past Petrucci at Turn One to move into a position to challenge the Italian.
However, Dovizioso held off the Spaniard to become the fourth different winner in six races this season.
Vinales' second place saw him increase his championship lead to 26 points
Italy MotoGP results
1. Andrea Dovizioso (Italy) Ducati 41:32.126
2. Maverick Vinales (Spain) Yamaha 41:33.407
3. Danilo Petrucci (Italy) Ducati 41:34.460
4. Valentino Rossi (Italy) Yamaha 41:35.811
5. Alvaro Bautista (Spain) Ducati 41:37.928
6. Marc Marquez (Spain) Honda 41:38.011
7. Johann Zarco (France) Yamaha 41:45.331
8. Jorge Lorenzo (Spain) Ducati 41:46.519
9. Michele Pirro (Italy) Ducati 41:47.006
10. Andrea Iannone (Italy) Suzuki 41:47.628
1. Maverick Vinales (Spain) Yamaha 105
2. Andrea Dovizioso (Italy) Ducati 79
3. Valentino Rossi (Italy) Yamaha 75
4. Marc Marquez (Spain) Honda 68
5. Dani Pedrosa (Spain) Honda 68
6. Johann Zarco (France) Yamaha 64
7. Jorge Lorenzo (Spain) Ducati 46
8. Danilo Petrucci (Italy) Ducati 42
9. Jonas Folger (Germany) Yamaha 41
10. Cal Crutchlow (Britain) Honda 40