KTM rider Brad Binder withstood late pressure from Speed Up's Jorge Navarro to win the Moto2 race at Aragon.
Championship leader Alex Marquez followed the pair home in third place, significantly extending his points advantage courtesy of a crash for Augusto Fernandez.
Marquez had started from pole but was passed by Binder even before the first corner, with Luca Marini then swooping around the outside to take second.
Yet Marquez's title hopes received an immediate boost as Fernandez, running right behind him in fourth, hit the deck through the 'reverse corkscrew', rejoining the race in 31st and last.
Binder was as many as seven tenths clear after the opening lap, but was swiftly reeled back in by Marini and Marquez, the latter successfully launching it down the inside of the former at Turn 1 on the sixth lap.
As Marquez and Marini scrapped away for second, with Marini soon retaliating with a Turn 1 move of his own, Binder rebuilt his lead to over a second.
The South African continued to streak away over the next few laps, and eventually more than doubled his lead by the time Marquez re-passed Marini at Turn 5.
Having weathered the Marini duel, and with Navarro then swiftly overtaking the Italian, Marquez set off after Binder in the final laps but struggled to make much progress and was passed by Navarro at Turn 1 with three laps to go.
Navarro, however, could still put Binder under some pressure, closing to within half a second of the South African heading onto the final lap, before ultimately yielding to finish 0.787s behind.
Marquez completed the podium two seconds behind the winner, and will take a lead of 38 points over his new nearest rival Navarro into Thailand.
Marini held off Sam Lowes for fourth, while Tom Luthi made up the top six to preserve his championship chances.
Iker Lecuona was seventh ahead of Lorenzo Baldassarri, who had spent much of the race outside of the top 10 but surged to eighth late on.
Moto3 champion Jorge Martin posted his third top-10 finish of the campaign in ninth, while Marquez's Marc VDS teammate Xavi Vierge made up the top 10.
Fernandez recovered to 22nd at the flag, while Joe Roberts and Tetsuta Nagashima joined him in suffering crashes.
The Petronas Sprinta team did not participate in the race, after Adam Norrodin - standing in for the still-injured Khairul Idham Pawi - withdrew following a practice crash.