Sebastian Vettel has won the Hungarian Grand Prix for the first time in his career, finishing ahead of Red Bull's Daniil Kvyat and Daniel Ricciardo at the Hungaroring.
A slow start from Lewis Hamilton allowed his Mercedes teammate and both Ferrari drivers to pass him before the opening corner before the defending champion ran wide later on the opening lap, leaving him down in 10th.
Hamilton fought his way back up to fifth before Force India's Nico Hulkenberg suffered a front wing failure which brought out the safety car.
The Briton overtook Ricciardo for fourth on the restart, but he collided with the Red Bull, damaging his car and dropping back again, and handing him a drive-through penalty.
Kimi Raikkonen also lost out as the safety car pulled off the track, with a mechanical problem allowing Nico Rosberg and Ricciardo to pass the Finn, who later had to retire.
Ricciardo remained close to Rosberg, and tried to force his way past the German with just five laps remaining, catching the back of the Mercedes to leave the Silver Arrow with a puncture while also damaging the front wing of the Australian's Red Bull.
That collision moved Kvyat up into second on the track to give the Russian driver his first podium finish in Formula 1 while Ricciardo held on to third just ahead of Toro Rosso's Max Verstappen.
Rosberg slipped back to eighth following the crash, while Hamilton fought his way back to sixth after serving his penalty.
McLaren finished with both cars in the points for the first time this season as Fernando Alonso held off Hamilton for fifth, and Jenson Button clinched ninth.
Full standings
1. Sebastian Vettel (Ferrari)
2. Daniil Kvyat (Red Bull)
3. Daniel Ricciardo (Red Bull)
4. Max Verstappen (Toro Rosso)
5. Fernando Alonso (McLaren)
6. Lewis Hamilton (Mercedes)
7. Romain Grosjean (Lotus)
8. Nico Rosberg (Mercedes)
9. Jenson Button (McLaren)
10. Marcus Ericsson (Sauber)
11. Felipe Nasr (Sauber)
12. Felipe Massa (Williams)
13. Valtteri Bottas (Williams)
14. Pastor Maldonado (Lotus)
15. Roberto Merhi (Manor)
16. Will Stevens (Manor)
Did Not Finish: Nico Hulkenberg (Force India), Sergio Perez (Force India), Kimi Raikkonen (Ferrari), Carloz Sainz (Toro Rosso)