Andrea Dovizioso overcame pre-race sickness to win his home Italian Grand Prix for Ducati, while Spaniard Maverick Vinales finished second on a Yamaha to increase his MotoGP lead to 26 points.
Dovizioso became the fourth different winner in six races and moved up to second place overall, ahead of 38-year-old compatriot Valentino Rossi, who finished fourth for Yamaha.
Italian Danilo Petrucci came third, after starting ninth, on a non-works Ducati to make it two Italians on the podium at the Mugello circuit in the rolling countryside north of Florence.
"A lot of emotion during the race and before the race, my energy wasn't so good," said Dovizioso, who had plenty of fans in a crowd mainly cheering for Rossi.
"I really wanted this victory and it's a dream come true for every Italian rider."
The victory was his career third and the first in the top category by an Italian rider on an Italian bike, on home soil, since Gianfranco Bonera won the 500cc class on an MV Agusta at Imola in 1974.
It was also Ducati's first at Mugello since Australian Casey Stoner in 2009.
Vinales now has 105 points to Dovizioso's 79, with Rossi - who spent a night in hospital last week after a crash while riding a motocross bike - on 75.
"I didn't want to risk so much because I saw Valentino and Marc were quite far away, so I decided to stay at least in the second position," said Vinales.
"Dovi was so strong today. So difficult to catch and all the time he was really pushing me a lot."
Honda's reigning champion Marc Marquez finished sixth and is fourth overall with 68 points but teammate Dani Pedrosa slipped down the order after tangling with Britain's Cal Crutchlow and crashing out.
Australia's Jack Miller finished the race in 15th on his Honda.
A 69-second silence was held before the race for 2006 MotoGP champion Nicky Hayden, the American who raced with the number 69 and died last month after being hit by a car while training on a bicycle in eastern Italy.
Motorsport: Dovizioso claims Italian MotoGP
AdvertisementAdvertise with NZME.