McLaren took its second successive one-two finish as Lewis Hamilton led home Jenson Button in an action-packed Canadian Grand Prix in which high tyre wear played a pivotal role.
Ferrari's Fernando Alonso finished third, but would rue a potential lost victory, as he had been passed by both McLarens at different moments when wrong-footed by others cars.
Red Bull had to settle for fourth and fifth - Sebastian Vettel nursing a car problem for much of the distance, and Mark Webber losing the lead when his strategy of leaving the super soft tyres until the final laps failed to pay off.
It was immediately clear that the softer tyres were going to be very fragile, for while Hamilton held the lead off the start, within a few laps Vettel - on the harder rubber - was all over the back of him. Alonso ran just behind them, with fourth-placed Button fending off an equally menacing Webber until the Red Bull dived past into Turn 8 on lap five, just before Button pitted.
Webber then swiftly caught the Hamilton, Vettel, Alonso train at the front, lining up a move on the Ferrari just as it came in for harder tyres on lap seven. Hamilton pitted from the lead at the same moment, falling behind Alonso in the stop and coming off second best as they charged down the exit road side by side.
That moved Red Bull into one-two formation, but it was clear that even the medium compound tyre was not faring too well, as Alonso, Hamilton and Button started catching the lead duo at up to one second per lap on their fresh rubber.
The Red Bulls came in on laps 12 and 13 and split their strategies - Vettel taking the super soft tyres for his next stint while Webber postponed that task and stuck with mediums.
Fellow medium runner Sebastien Buemi, who had advanced up the order as those ahead stopped, then found himself leading for Toro Rosso for a lap, with the battling Alonso and Hamilton on his tail.
On that lap, Alonso's failed attempt to pass Buemi down the outside into the hairpin gave Hamilton a chance to draft the Ferrari on the next straight - moving the McLaren from third to first in the space of a few yards as Buemi immediately pitted.
Alonso stayed with Hamilton though, and as their next set of tyres started to wilt, he became ever more threatening. The Ferrari was just lining up a move for the lead on lap 26 when Hamilton decided to stop again, diving straight in to get another set of hard tyres. Alonso, Vettel and Button followed suit in quick succession, while Webber stayed out, assumed the lead and trying to keep his medium tyres intact as long as possible to shorten his stint on the fragile super softs.
At first the plan worked well, Webber pulling out a 10s lead over Hamilton, Alonso, Button and Vettel as they ran in fairly close company in second to fifth positions.
But by lap 39 Webber's tyres were going off too, and heavy traffic made life even tougher for him. Before long Hamilton was right back on his tail, taking the lead on lap 49 and encouraging Webber to pit next time around to finally take on super softs, dropping him to fifth.
Vettel was unable to keep pace with the McLarens and Alonso, the team speaking over the radio of a 'problem being managed', so it became a three-way battle for the lead going into the closing stages as the track rubbered in at last and the tyres gained durability.
Button made it a McLaren one-two with 15 laps to go when Alonso was trapped behind Karun Chandhok's Hispania and lost momentum. The champion set off after Hamilton and started to chip away at the leader's advantage, though a new fastest lap by Hamilton nine laps from the end sent a clear message to his team-mate. The top three then spread out, with McLaren cruising to another one-two and Alonso at least getting back on the podium after two tough races.
Nico Rosberg recovered from being pushed back into the midfield during a messy first lap to take sixth for Mercedes, ahead of Renault's Robert Kubica, who had a wheel-banging battle with Michael Schumacher in the early stages that saw both take to the grass.
Schumacher's tyre troubles were worse than most - the Mercedes pitting three times and still lapping 4s off the pace in the final stint. Buemi passed him for seventh, and he was then caught by Felipe Massa. The Brazilian and Tonio Liuzzi managed to tangle twice during the first two corners of the race, damaging both cars. After pitting for repairs, they charged back towards the points, only for Massa to lose his front wing when Schumacher sternly defended his position with six laps to go.
Liuzzi then took up the challenge of trying to overtake Schumacher, who slid over the final chicane and banged wheels with the Italian more than once as he fought mightily to at least hang on to ninth. He could not though, with a bruising last lap seeing the seven-time champion tumble to 11th behind both Liuzzi and his Force India team-mate Adrian Sutil.