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 Monza, Italy; 53 laps; 306.720km; Weather: Sunny. Classified: 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 Not classified/retirements: Driver Team On lap Button McLaren-Mercedes 32 Vergne Toro Rosso-Ferrari 8 World Championship standings, round 13: Drivers: Constructors: 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 All timing unofficial