Dani Pedrosa claimed his first MotoGP victory since Estoril by winning a thrilling German Grand Prix at the Sachsenring.
The Honda rider battled past Yamaha's Jorge Lorenzo with nine laps to go, and then held on as the reigning champion and current points leader Casey Stoner embarked on a huge battle for second just behind him, with Lorenzo eventually coming out on top.
Pedrosa had jumped into the lead at the start from second on the grid, with Lorenzo trying to go around the outside of both Yamahas but having to settle for second - not that he stayed there long before diving inside Pedrosa to take the race lead.
Poleman Stoner fell as low as fourth as third works Honda rider Andrea Dovizioso went on an early charge that brought him as high as second, but by lap four Stoner was picking his way back to the front - overtaking both his team-mates then Lorenzo in quick succession.
He could not pull away, though, with Lorenzo, Pedrosa, Dovizioso and Marco Simoncelli all hanging on to his tail through the first half of the race.
On lap 13 out of 30, Lorenzo dived back past Stoner into Turn 12, with Pedrosa further demoting the Australian into the first corner shortly afterwards.
Pedrosa then chased down Lorenzo, and having grabbed the lead was able to edge away while the title rivals got stuck into a dice that was ultimately resolved by just 0.091 seconds in Lorenzo's favour.
Dovizioso slipped back to finish just ahead of Ben Spies' Yamaha and Simoncelli's Gresini Honda in fourth.
Another massive fight took place for seventh place, won by Suzuki rider Alvaro Bautista ahead of the Ducatis of Nicky Hayden and Valentino Rossi, with the latter making good early progress from his disastrous 16th place on the grid but unable to get higher than ninth.
Results - 30 laps:
Pos Rider Team/Bike Time/Gap
1. Dani Pedrosa Honda 41m12.482s
2. Jorge Lorenzo Yamaha + 1.477s
3. Casey Stoner Honda + 1.568s
4. Andrea Dovizioso Honda + 10.513s
5. Ben Spies Yamaha + 10.719s
6. Marco Simoncelli Gresini Honda + 10.923s
7. Alvaro Bautista Suzuki + 27.451s
8. Nicky Hayden Ducati + 27.510s
9. Valentino Rossi Ducati + 27.576s
10. Colin Edwards Tech 3 Yamaha + 33.491s
11. Hector Barbera Aspar Ducati + 38.944s
12. Karel Abraham Cardion Ducati + 39.148s
13. Randy de Puniet Pramac Ducati + 39.415s
14. Cal Crutchlow Tech 3 Yamaha + 39.477s
15. Hiroshi Aoyama Gresini Honda + 54.516s
16. Toni Elias LCR Honda + 1m12.335s
17. Sylvain Guintoli Pramac Ducati + 1 lap