Lewis Hamilton dominated the Canadian Grand Prix as dramatic action behind allowed him to cut Sebastian Vettel's title lead to 12 points.
The Mercedes driver controlled the race from start to finish, leading home team-mate Valtteri Bottas.
Vettel, meanwhile, could finish only fourth in the Ferrari.
The German dropped to the back when he needed to change his front wing, damaged by Red Bull's Max Verstappen at the start.
He recovered well with some aggressive overtaking on a two-stop strategy and caught the battle for third place, in which Red Bull's Daniel Ricciardo was leading the Force Indias of Sergio Perez and Esteban Ocon, with seven laps to go.
Vettel passed Ocon in a touch-and-go move into Turn One with four laps to go. An off-track moment a few corners later dropped him back from Perez but he made a daring late pass into the last corner with two laps remaining.
It was a sixth win in 10 races in Canada for Hamilton, who on Saturday equalled his hero Ayrton Senna's mark of 65 pole positions.
"I had my first win here and my first pole," Hamilton said. "So to repeat it again 10 years later is incredibly special."
- Canadian GP results
- Win crucial to title hopes - Hamilton
- 'Senna gift more special than trophies' - Hamilton
Hamilton vs Vettel - a battle denied
Hamilton and Vettel qualified alongside each other on the front row and were expected to stage a close fight in the race for superiority in a race the Mercedes driver really needed to win to boost his title hopes.
But the grand prix fell into Hamilton's lap within a few seconds of the start.
Verstappen made an electrifying getaway from fifth place, threaded his way between the Ferrari of Kimi Raikkonen and Mercedes' Bottas and swept around the outside of Vettel into the first corner.
But the Dutchman slightly misjudged the move, and his left rear wheel clipped Vettel's front wing as he claimed the corner.
The chaos which shaped the race
Shortly afterwards, Toro Rosso's Carlos Sainz tangled with Haas' Romain Grosjean on the curving straight between Turns Two and Three.
The Spaniard lost control, spinning down the inside of the track and side-swiping Felipe Massa's Williams in Turn Three, forcing Fernando Alonso's McLaren on to the grass in avoidance.
That brought out the safety car for four laps but Ferrari waited until the restart on lap five to bring in Vettel and change his front wing and fit a set of super-soft tyres.
Vettel said he did not spot that the wing was badly damaged because the safety car came out before he had had a chance to get a proper feel for the car.
"I had a little bit of a feel out of Turn Six and then the safety car came," he said.
"But I wasn't sure because it was the first lap of the race, especially it was very windy today, so I thought it might have been a gust and for the first lap, the tyres are not there. We should have spotted that and got a free pit stop."
The plan may have been to try to get to the end on that set, but this was abandoned on lap 49, by which time Vettel was up to sixth place.
Ferrari chose to stop Vettel again in the hope he would have fresher tyres and be able to catch and pass the cars battling for third place behind Hamilton and Bottas.
Their predictions that he would catch Ricciardo, Perez and Ocon with eight laps to go were spot on and it led to an entertaining and frantic battle from which Vettel emerged the victor.
Hamilton in control
Vettel's problems left Hamilton in a league of his own.
He cruised away from Verstappen in the opening laps, and when the Red Bull retired with an engine problem on lap 11, Hamilton had a comfortable pace advantage over Bottas.
He simply drove away unchallenged to his third victory of the year, prompting team boss Toto Wolff to say it was a "stellar" drive and one of his best performances in more than four years with the team.
There may be recriminations at Force India as Perez refused requests to allow Ocon past in the closing stages so he could try to pass Ricciardo.
Perez spent the entire race behind Ricciardo without ever getting close enough to try a passing move.
It was decided by the team that Ocon, who appeared to have stronger pace, should be allowed to try to make progress. But Perez, who brings millions in sponsorship money to the team, had other ideas.
The Mexican demanded management "let them race" and it led to a heart-in-mouth climax to the race for the team.
There were several dicey moments as Vettel closed in, with Ocon's attempted pass into the final chicane allowing the Ferrari to close up and pass the Frenchman into the first corner on lap 65.
Ocon missed the corner, and took to the escape road, but charged back onto Perez's tail.
They raced side-by-side into the last corner on the last lap, Perez defending hard, and holding his team-mate off.
Ocon was not amused. "This is not fair, guys," he said over the radio. "He moved at the last minute. He cannot do that. This is not fair racing at all."
Stroll in the points, Alonso in the crowd
Behind the Force Indias, Raikkonen nursed his Ferrari home with brake problems in the closing stages, ahead of Renault's Nico Hulkenberg and Canadian Lance Stroll, who scored the first points of his debut season for Williams at his home race.
Stroll was holding off McLaren's Fernando Alonso in the closing laps. The Spaniard appeared set for the team's first point of the year for 10th place but he retired with yet another Honda engine failure with two laps to go.
The Spaniard threw his cockpit protection out of the car, got out and jumped straight into the crowd to pose for pictures with delighted fans.
That will only increase the tensions at McLaren, where divorce from Honda appears to be on the cards in just the third year of a long-term contract.
Driver of the day
The Azerbaijan Grand Prix in two weeks' time shares many characteristics with Montreal - long straights, slow corners and low-grip asphalt. Hamilton will go there determined to further eat into Vettel's lead and atone for the mess he made of that race last year.
What they said
Race winner Lewis Hamilton: "Big thank you to this crowd. Every year the energy grows. I had my first pole here and my first win here. To repeat it is incredibly special. Valtteri did fantastically well to get the points for the team. I am over the moon. "
Valtteri Bottas, who finished second: "Always good to be here. As a team we really needed this one-two to get the points. I am very, very proud to be a part of this team. I knew what I had to do in the end, this was good points for us."
Third place Daniel Ricciardo: "Today I only had fun when I saw the chequered flag. I couldn't afford to make any mistakes. Concentration was getting tough. It's great to be on the podium"