Spain's Jorge Lorenzo came from fifth place on the grid to clinch victory in the Italian MotoGP at Mugello.
The reigning world champion rode an immaculate race to lead home Andrea Dovizioso, who pipped pole-sitter Casey Stoner for second place.
Australian Stoner led for the opening 17 laps but was caught with six laps to go, Lorenzo overtaking brilliantly on the inside before stretching clear.
On the final lap, Italian Dovizioso relegated Stoner to third place.
Lorenzo's victory means he cuts Stoner's lead at the top of the standings to 19 points after eight races of the season, while Dovizioso remains third.
"I'm so happy," Lorenzo told BBC Sport. "Casey was so quick but little by little, lap by lap I managed to catch him. I saw the opportunity [to take Stoner] on the downhill."
Stoner blamed the hotter conditions for playing havoc with his tyre grip, which resulted in him noticeably slowing down in the latter stages.
"I did everything I could," he said. "The tyre pressure went up too high and I lost all grip in the rear and you can't do anything without it.
"I tried to keep a consistent pace but it was just too slow."
Dovizioso was delighted with his second place.
"To be the first Italian home in Mugello is something special," he said. "Last year I was third. It's something not many people in the world can feel."
Italian legend Valentino Rossi, in his first race in front of his home fans since joining Ducati, came sixth as he continued to struggle with his new bike.
Yamaha's American, Ben Spies, who won in Assen last weekend to break Stoner's series of three straight wins, finished fourth.
Britain's Cal Crutchlow failed to finish because of set-up problems with his bike which he told BBC Sport made him convinced he would crash if he did not retire.
"We have struggled for a set-up all weekend and I was wide at every single corner out there," he said.
"In the end I decided to pit. It is devastating for me because I never give in, but I have a career to think about and I didn't want to crash."
Italian MotoGP results:
Grand Prix from Mugello on Sunday:
1. Jorge Lorenzo (Spain) Yamaha 41:50.089
2. Andrea Dovizioso (Italy) Honda 41:51.086
3. Casey Stoner (Australia) Honda 41:51.232
4. Ben Spies (US) Yamaha 41:59.069
5. Marco Simoncelli (Italy) Honda 41:59.165
6. Valentino Rossi (Italy) Ducati 42:16.539
7. Hector Barbera (Spain) Ducati 42:18.834
8. Dani Pedrosa (Spain) Honda 42:22.132
9. Colin Edwards (US) Yamaha 42:23.510
10. Nicky Hayden (US) Ducati 42:24.813
11. Hiroshi Aoyama (Japan) Honda 42:27.448
12. Karel Abraham (Czech Republic) Ducati 42:34.053
13. Alvaro Bautista (Spain) Suzuki 42:37.743
14. Randy de Puniet (France) Ducati 42:38.929
15. Toni Elias (Spain) Honda 43:05.288
1. Casey Stoner (Australia) Honda 152
2. Jorge Lorenzo (Spain) Yamaha 133
3. Andrea Dovizioso (Italy) Honda 119
4. Valentino Rossi (Italy) Ducati 91
5. Nicky Hayden (US) Ducati 77
6. Ben Spies (US) Yamaha 74
7. Dani Pedrosa (Spain) Honda 69
8. Hiroshi Aoyama (Japan) Honda 56
9. Colin Edwards (US) Yamaha 53
10. Marco Simoncelli (Italy) Honda 50
11. Hector Barbera (Spain) Ducati 44
12. Karel Abraham (Czech Republic) Ducati 37
13. Toni Elias (Spain) Honda 35
14. Cal Crutchlow (Britain) Yamaha 32
15. Alvaro Bautista (Spain) Suzuki 30