The defending world champion Jorge Lorenzo snatched the Italian MotoGP from Casey Stoner on Monday to close the gap on the current championship leader.
The Yamaha rider Lorenzo overtook the Australian six laps from the end at the Mugello circuit to claim his second win of the season, having previously won at Jerez.
Stoner, starting from pole for the fifth time this season, finished third after he also lost a place to his fellow Honda rider Andrea Dovizioso on the last lap.
Spaniard Lorenzo, second in the world championship, cut Stoner's lead to 19 points after eight of the 18 races in the season.
Dovizioso stayed third overall, a further 14 points adrift.
Stoner, world champion in 2007, was quick out of the blocks and built a lead of more than two seconds over Lorenzo and Dovizioso, who were locked in an enthralling battle for second.
However, the pair gradually closed the gap on the Australian before Lorenzo nipped past.
American Ben Spies, winner of the last race at Assen, took fourth place from Marco Simoncelli after repeatedly swapping places with the Italian throughout.