Jimmy Eriksson scored his first GP3 win for over a year in race two in Sochi, as Esteban Ocon finished second for the ninth consecutive race to close within two points of the championship lead.
Eriksson held the lead from pole position until chequered flag, as his Koiranen team-mate Matt Parry was swamped off the line at the start of a nightmare first lap that ended in retirement.
Antonio Fuoco challenged Eriksson into Turn 2, but the Swede went off track and retained the lead while the Ferrari protege was passed by his Carlin team-mate Jann Mardenborough.
Ocon had climbed from seventh to fourth and then started putting pressure on Fuoco.
The Italian defended strongly but couldn’t stop Ocon eventually getting past, despite squeezing him close to the wall on the run to Turn 2.
Ocon quickly set about closing the gap to Mardenborough ahead, and managed to get by with an opportunistic move through Turns 15 and 16.
With Eriksson finishing 2.7 seconds up the road, Ocon claimed his ninth straight second-place finish and set a fastest lap on the final tour to pick up two crucial bonus points.
Those have moved him to just two points behind Luca Ghiotto, who followed his spectacular race one victory with a much quieter race two.
He damaged his front wing against the tyre of Emil Bernstorff going into Turn 2 for the first time, and although he had risen to sixth place he then lost that on lap three when an attempted move on Bernstorff saw him being edged off track at Turn 14.
That dropped the Italian down to ninth place and despite some intense fighting ahead of him, he was only able to nick eighth place and a point away from Alex Palou on the very last lap.
Bernstorff almost completed a move on Fuoco for fourth, only to run deep at Turn 2 and allow Artur Janosz to get by him instead, the Pole scoring his best GP3 result to-date in fifth.
Bernstorff survived another trip off-track to keep Marvin Kirchhofer behind and finish sixth.