Lewis Hamilton stayed safely clear of an incredible charge from Sergio Perez to win the Italian Grand Prix, as Fernando Alonso stretched his Formula 1 points lead by coming through from 10th on the grid to third.
Alonso benefited from his closest title rival Sebastian Vettel being penalised for forcing him off the road as they battled mid-race and later retiring with a mechanical problem.
For much of the distance it looked like a straightforward McLaren one-two was in prospect.
Although Felipe Massa made a great start to immediately pass Jenson Button for second and then pressure Hamilton into the first chicane, the poleman was soon able to ease away. Button then overtook the Ferrari for second just before their pitstops.
But with 19 laps to go, Button was forced to park his McLaren on the approach to the Parabolica, with what was initially diagnosed as a fuel pressure problem.
That brought Massa back up to second, but with Alonso catching him.
The championship leader had gained two places off the start, before overtaking Kamui Kobayashi and Kimi Raikkonen in quick succession.
Michael Schumacher and Sebastian Vettel then proved tougher opponents, though both were eventually conquered by the Ferrari. Along the way, Alonso ended up on the Curva Grande grass as Vettel defended - a move that would earn the champion a drivethrough penalty.
Vettel still looked set for sixth until being ordered to stop his car due to a developing technical problem five laps from home.
Massa gave Alonso an easy pass into second place, but by then a new threat was looming.
Unlike all the frontrunners, Perez had started on the hard tyres, allowng him to run until lap 29 before his first pitstop.
He rejoined in sixth, benefited from Vettel and Button's problems, and then started lapping 1.5 seconds faster than the hard-shod leaders as he thrived on the medium rubber.
Both Massa and Alonso were easily overtaken, and Perez then charged off after Hamilton.
The Mexican would run out of time to catch the McLaren, but still claimed his third podium of an excellent season.
Alonso and Massa finished third and fourth, ahead of Raikkonen's Lotus, which held off two-stopping Mercedes duo Schumacher and Nico Rosberg.
Mark Webber recovered from a slow start to get into the top six, only to spin his Red Bull out of the Ascari chicane in the final laps and then retire.
Force India's Paul di Resta took eighth, while his team-mate Nico Hulkenberg's charge from the back ended with a late technical problem.
Kamui Kobayashi in the second Sauber and Bruno Senna's Williams completed the points-scorers after a last-lap problem for Toro Rosso's Daniel Ricciardo. The latter's team-mate Jean-Eric Vergne retired in dramatic style with an apparent suspension breakage approaching the Rettifilo.
PROVISIONAL RACE RESULTS
The Italian Grand Prix
53 laps; 306.720km;
Pos Driver Team Time
1. Hamilton McLaren-Mercedes 1h19:41.221
2. Perez Sauber-Ferrari + 4.356
3. Alonso Ferrari + 20.594
4. Massa Ferrari + 29.667
5. Raikkonen Lotus-Renault + 30.881
6. Schumacher Mercedes + 31.259
7. Rosberg Mercedes + 33.550
8. Di Resta Force India-Mercedes + 41.057
9. Kobayashi Sauber-Ferrari + 43.898
10. Senna Williams-Renault + 48.144
11. Maldonado Williams-Renault + 48.682
12. Ricciardo Toro Rosso-Ferrari + 50.316
13. d'Ambrosio Lotus-Renault + 1:15.861
14. Kovalainen Caterham-Renault + 1 lap
15. Petrov Caterham-Renault + 1 lap
16. Pic Marussia-Cosworth + 1 lap
17. Glock Marussia-Cosworth + 1 lap
18. De la Rosa HRT-Cosworth + 1 lap
19. Karthikeyan HRT-Cosworth + 1 lap
20. Webber Red Bull-Renault + 2 laps
21. Hulkenberg Force India-Mercedes + 3 laps
22. Vettel Red Bull-Renault + 6 laps
Fastest lap: Rosberg, 1:27.239
Driver Team On lap
Button McLaren-Mercedes 32
Vergne Toro Rosso-Ferrari 8
World Championship standings, round 13:
1. Alonso 179 1. Red Bull-Renault 272
2. Hamilton 142 2. McLaren-Mercedes 243
3. Raikkonen 141 3. Ferrari 226
4. Vettel 140 4. Lotus-Renault 217
5. Webber 132 5. Mercedes 126
6. Button 101 6. Sauber-Ferrari 100
7. Rosberg 83 7. Force India-Mercedes 63
8. Grosjean 76 8. Williams-Renault 54
9. Perez 65 9. Toro Rosso-Ferrari 12
10. Massa 47
11. Schumacher 43
12. Kobayashi 35
13. Di Resta 32
14. Hulkenberg 31
15. Maldonado 29
16. Senna 25
17. Vergne 8
18. Ricciardo 4