Antonio Felix da Costa completed a dominant Formula Renault 3.5 double at Barcelona, while Robin Frijns sealed the title after a collision with championship rival Jules Bianchi.
While da Costa sprinted away after passing polesitter Mikhail Aleshin at the start, Frijns and Bianchi slotted into third and fifth positions respectively.
They were then nose-to-tail after pitting together, with early fourth place man Arthur Pic dropping back in the stops.
Both title contenders were jumped by a late-stopping Aaro Vainio, who scrapped with RFR team-mate Aleshin for second for the rest of the race.
Behind them, Bianchi sat in Frijns' wheel tracks for several laps, before diving down the inside into Turn 1 on lap 21.
Frijns responded seconds later with a lunge of his own into Turn 4. They collided, with Bianchi sliding into the gravel and out of the race.
From there Frijns ran sixth after losing places in the scuffle to Kevin Magnussen and Alexander Rossi.
A recovering Pic passed him on the penultimate lap, but with Bianchi out and Sam Bird behind him, Frijns was safe to come home seventh and take the title, subject to an investigation by the stewards.
Up front, da Costa won for Arden Caterham by 27 seconds in the end, while Aleshin held on in a fierce scrap with Vainio to secure a double podium for RFR in its last FR3.5 race.
Results - 29 laps:
Pos Driver Team Time/Gap
1. Antonio Felix da Costa Arden Caterham 46m06.997s
2. Mikhail Aleshin RFR + 27.856s
3. Aaro Vainio RFR + 28.689s
4. Kevin Magnussen Carlin + 29.398s
5. Alexander Rossi Arden Caterham + 29.919s
6. Arthur Pic DAMS + 32.398s
7. Robin Frijns Fortec + 33.293s
8. Sam Bird ISR + 34.088s
9. Andre Negrao Draco + 36.224s
10. Will Stevens Carlin + 40.049s
11. Walter Grubmuller P1 + 42.532s
12. Jake Rosenzweig ISR + 43.998s
13. Tamas Pal Kiss BVM Target + 44.714s
14. Nick Yelloly Comtec + 54.282s
15. Nico Muller Draco + 1m05.300s
16. Daniil Move P1 + 1m31.146s
17. Kevin Korjus Lotus + 1m31.336s
18. Carlos Huertas Fortec + 1m33.132s
19. Vittorio Ghirelli Comtec + 1m46.192s
20. Nikolay Martsenko BVM Target + 1m46.429s
21. Yann Cunha Pons + 1m58.682s
22. Zoel Amberg Pons + 1 lap
Lucas Foresti DAMS 25 laps
Jules Bianchi Tech 1 20 laps
Daniel Abt Tech 1 8 laps
Marco Sorensen Lotus 2 laps