Sebastian Vettel finally won his home grand prix in Germany as he resisted big pressure from Lotus's Kimi Raikkonen and Romain Grosjean at the Nurburgring.
As the Lotus duo took turns to hound Vettel for most of the race, it looked unlikely that the Red Bull driver would be able to cling on for victory, but he ultimately managed to after a dogged drive.
Polesitter Lewis Hamilton's Mercedes was swamped by the faster-starting Red Bulls off the line, as Vettel and Mark Webber moved into an immediate one-two.
Webber stayed right with his team-mate until the first pitstops, when he was sent out before his right-rear wheel was fully attached.
The tyre shot off and hit a television cameraman further down the pitlane. The cameraman was taken to hospital for observation.
Hamilton lost ground with heavy tyre wear as the race progressed, but Lotus moved in the opposite direction.
Grosjean ran 13 laps on softs in his first stint - far better than anyone else managed - and that jumped him from fifth to second.
The Frenchman then chased Vettel down, though he could not get closer than two seconds behind.
A safety car just mid-distance closed things up and brought Raikkonen from 12s down into contention.
The caution period was required after Jules Bianchi's Marussia retired in a cloud of smoke and flames, and then began drifting back across the circuit on the chicane approach after its driver had got out.
The leaders made their second stops behind the safety car but could not make it from there to the end.
Grosjean was first to pit, with Vettel reacting on the next lap and staying ahead.
Raikkonen ran 10 laps further then pitted for softs, allowing him to charge back past Grosjean (who obeyed a team order to not delay the Finn) and then catch Vettel.
But the world champion had just enough in hand to hang on and win by a second.
Grosjean resisted a similar late surge from Fernando Alonso to keep third.
Alonso's Ferrari team-mate Felipe Massa spun out at the first corner just four laps in while running sixth.
Hamilton ended up fifth, passing two-stopper Jenson Button's McLaren on the last lap.
Webber was brought back to the Red Bull garage and given a new wheel, then recovered from a distant last to seventh, just ahead of McLaren's Sergio Perez.
Nico Rosberg could make little progress from 11th on the grid and finished ninth ahead of countryman Nico Hulkenberg's Sauber.
Daniel Ricciardo faded from sixth in qualifying to 12th, between the Force Indias.
Williams appeared to have a shot at points for a while, before pitstop delays hampered both its drivers.
PROVISIONAL RACE RESULTS
The German Grand Prix
Nurburgring, Germany;
60 laps; 306.458km;
Weather: Sunny.
Classified:
Pos Driver Team
1. Vettel Red Bull-Renault
2. Raikkonen Lotus-Renault
3. Grosjean Lotus-Renault
4. Alonso Ferrari
5. Hamilton Mercedes
6. Button McLaren-Mercedes
7. Webber Red Bull-Renault
8. Perez McLaren-Mercedes
9. Rosberg Mercedes
10. Hulkenberg Sauber-Ferrari
11. Di Resta Force India-Mercedes
12. Ricciardo Toro Rosso-Ferrari
13. Sutil Force India-Mercedes
14. Gutierrez Sauber-Ferrari
15. Maldonado Williams-Renault
16. Bottas Williams-Renault
17. Pic Caterham-Renault
18. van der Garde Caterham-Renault
19. Chilton Marussia-Cosworth
DNF. Vergne Toro Rosso-Ferrari
DNF. Bianchi Marussia-Cosworth
DNF. Massa Ferrari
World Championship standings, round 9:
Drivers: Constructors:
1. Vettel 157 1. Red Bull-Renault 250
2. Alonso 123 2. Mercedes 181
3. Raikkonen 118 3. Ferrari 180
4. Hamilton 97 4. Lotus-Renault 159
5. Webber 93 5. Force India-Mercedes 59
6. Rosberg 84 6. McLaren-Mercedes 49
7. Massa 57 7. Toro Rosso-Ferrari 24
8. Grosjean 41 8. Sauber-Ferrari 7
9. Di Resta 36
10. Button 33
11. Sutil 23
12. Perez 16
13. Vergne 13
14. Ricciardo 11
15. Hulkenberg 7