Rio Haryanto survived the chaos caused by a late-race downpour to take his first GP3 win of the season at the Nurburgring.
The Indonesian took the lead from Lewis Williamson (MW Arden) as the rain that had been hovering around the track for most of the race started to get much heavier, and everyone tried to hang on to their cars on slick tyres.
Haryanto and Williamson swapped places three times in half a lap, with Valtteri Bottas then passing the Scot as well and challenging Haryanto at Turns 10 and 11.
As they all tried desperately to stay on the track, Williamson re-passed Bottas at the final corner. He attacked Haryanto into Turn 1 on the final lap, but the Manor driver hung on and brought his car home to win.
To illustrate how bad the conditions were, Haryanto and several of the leaders then went off at Turn 5 after the chequered flag.
After briefly challenging for the win, Bottas had to make do with just holding off ART team-mate James Calado for third at the line. The two green cars were followed home by Adrian Quaife-Hobbs (Manor) and first-time points scorer Conor Daly (Carlin).
The points were completed by Tech 1's Aaro Vainio and Tamas Pal Kiss, while further down the order there was disappointment for two of the title contenders.
Polesitter Mitch Evans (MW Arden) led the early laps in the dry, but he was given a drive-through penalty for not having all of his wheels fitted three minutes before the start of the race.
Pre-race championship leader Alexander Sims was on course for a handful of points in sixth, but he pitted four laps from the end and gambled on a switch to wet tyres. It did not pay off, as the Status driver could only recover to 12th place.
Results - 15 laps: Pos Driver Team Time/Gap 1. Rio Haryanto Manor 29m48.703s 2. Lewis Williamson MW Arden + 2.404s 3. Valtteri Bottas ART + 3.183s 4. James Calado ART + 3.611s 5. Adrian Quaife-Hobbs Manor + 4.948s 6. Conor Daly Carlin + 18.223s 7. Aaro Vainio Tech 1 + 19.692s 8. Tamas Pal Kiss Tech 1 + 21.387s 9. Simon Trummer MW Arden + 23.635s 10. Nigel Melker RSC Mucke + 32.818s 11. Ivan Lukashevich Status + 37.554s 12. Alexander Sims Status + 39.025s 13. Vittorio Ghirelli Jenzer + 44.359s 14. Matias Laine Manor + 47.159s 15. Nico Muller Jenzer + 51.928s 16. Nick Yelloly Atech CRS + 59.456s 17. Leonardo Cordeiro Carlin + 1m01.306s 18. Thomas Hylkema Tech 1 + 1m05.865s 19. Pedro Nunes ART + 1m09.296s 20. Mitch Evans MW Arden + 1m09.673s 21. Maxim Zimin Jenzer + 1m20.469s 22. Zoel Amberg Atech CRS + 1m22.044s 23. Tom Dillmann Addax + 1m22.921s 24. Dean Smith Addax + 1m39.214s 25. Luciano Bacheta RSC Mucke + 3m22.519s 26. Michael Christensen RSC Mucke + 1 lap 27. Gabby Chaves Addax + 1 lap 28. Antonio Felix da Costa Status + 1 lap 29. Callum MacLeod Carlin + 1 lap Retirements: Marlon Stockinger Atech CRS 11 laps