Red Bull's Daniel Ricciardo won the Belgian Grand Prix after a second-lap clash between Lewis Hamilton and Nico Rosberg that could prove decisive in the race for the F1 world title.
Rosberg's front wing had to be changed before he fought back to second but Hamilton suffered a puncture that effectively put him out of the race.
Rosberg was later booed on the podium.
The German is now 29 points ahead of his Mercedes team-mate, equalling the biggest lead he has held this season.
Williams' Valtteri Bottas took third ahead of Ferrari's Kimi Raikkonen.
Rosberg passed both after a late pit stop to put pressure on Ricciardo, who gambled on staying out on older tyres and held on to take an unexpected win by three seconds - his second successive victory.
But the race will be remembered for the incident between Hamilton and Rosberg on the second lap - an incident team boss Toto Wolff blamed on Rosberg after the race, calling the manoeuvre "absolutely unacceptable".
Hamilton, starting second, had snatched the lead from his team-mate at the start, as Rosberg also lost a place to Red Bull's Sebastian Vettel.
Rosberg reclaimed second place from the world champion up the long Kemmel straight, and a lap later closed in on Hamilton in the same place.
The Englishman defended to the inside and Rosberg tried to pass him around the outside of the first right-handed part of Les Combes.
The move did not come off and as Hamilton turned into the left-handed part of the chicane, his left rear tyre was caught by Rosberg's front wing endplate, damaging the wing and puncturing Hamilton's tyre.
"Nico just hit me," Hamilton said over the radio, as he battled to get the car back to the pits.
He rejoined last, and with damaged parts on the rear floor and a huge gap to the rest of the field he could not make up ground. Mercedes eventually called him in to retire with five laps to go.
The incident between the Mercedes drivers played into the hands of Red Bull, who had been expected to struggle on this track because of their Renault engine's power deficit to the Mercedes.
The team tried to neutralise that by running a smaller rear wing than their rivals, relying on the car's standard-setting under-body downforce for grip.
When Vettel ran wide at the fast Pouhon left-hander on lap five - his second driving error in as many races - Ricciardo swooped past to move into second and put the pressure on Rosberg.
Rosberg made his first pit stop early, after just eight laps, because of the extra wear his loss of front downforce was causing his tyres and the time lost allowed Ricciardo into the lead.
The Australian drove superbly to build a lead for himself and seemed set for a comfortable win before Rosberg's late stop, with 10 laps to go, raised the possibility of the German catching him.
The stop dropped Rosberg to 20 seconds behind Ricciardo but he soon began closing at more than two seconds a lap. However, the Red Bull had enough to hold him off for his third victory of an increasingly impressive first season with a front-running team.
Bottas drove a measured race to pass Raikkonen for third in the closing laps, as the Ferrari driver finally found some of the form he has been lacking all season.
Raikkonen made ground with an early pit stop and ran in the top three most of the race before losing out to Bottas with eight laps to go.
In the second Ferrari, Fernando Alonso found himself having to fight back after being forced to serve a five-second penalty at his first pit stop.
That dropped him into a fight with the McLaren of Kevin Magnussen, who proved very difficult to pass as a result of the greater power of his Mercedes engine.
Magnussen's delaying of Alonso brought Vettel and Button on to their tail, and the Ferrari lost out, its front wing damaged on the back of Vettel's car, in a no-holds-barred four-way fight in the closing laps.
Alonso ended up eighth, behind Vettel, Magnussen and Button.
Magnussen was later handed a 20-second penalty and two driver penalty points for crowding Alonso off the circuit during the battle, which promoted Force India's Nico Hulkenberg to 10th, behind team-mate Sergio Perez and Toro Rosso's Daniil Kvyat.