Johnny Cecotto resisted pressure from Marcus Ericsson to take the first win of his GP2 Series career in Monaco.
Addax driver Cecotto maintained his pole position at the start, but could never get more than two seconds ahead of Ericsson (iSport), who got particularly close around the pitstops and into the closing laps.
Although Ericsson took a few looks at passing as they diced through the traffic, Cecotto had things under control and held on to claim victory by half a second.
Giedo van der Garde had a lonely run to third for Caterham. The Dutchman looked like he would have to start at the back as he struggled to get off the dummy grid, but he managed to pull away before the final car passed so could reclaim his position.
Championship leader Davide Valsecchi (DAMS) left his pitstop later than most and was able to come through to fourth place from seventh on the grid.
Front row starter Max Chilton was passed by Ericsson and van der Garde into the first corner, then lost out to Valsecchi in the pits, but the Carlin driver was able to get away from iSport's Jolyon Palmer and secure fifth, as Palmer took his best GP2 result yet in sixth.
An early pitstop and quick laps thereafter allowed Lotus' James Calado to turn 13th on the grid into a seventh-place finish. Calado's team-mate Esteban Gutierrez looked set to claim reverse-grid pole in eighth until he damaged his car on the chicane barriers after launching over the kerbs amid confusion in traffic. Arden's title contender Luiz Razia also had to pit for repairs following the incident.
Trident's Stephane Richelmi was elevated to eighth following the incident so will start from pole on Saturday.
Nathanael Berthon (Racing Engineering) and Coloni driver Stefano Coletti - who left his mandatory pitstop until four laps from the finish but then lost a few seconds due to being released too soon - completed the top 10.
Results - 42 laps: Pos Driver Team Time/Gap 1. Johnny Cecotto Addax 59m42.521s 2. Marcus Ericsson iSport + 0.564s 3. Giedo van der Garde Caterham + 5.040s 4. Davide Valsecchi DAMS + 16.347s 5. Max Chilton Carlin + 17.378s 6. Jolyon Palmer iSport + 21.883s 7. James Calado Lotus + 25.685s 8. Stephane Richelmi Trident + 42.275s 9. Nathanael Berthon Racing Engineering + 45.319s 10. Stefano Coletti Coloni + 47.099s 11. Tom Dillmann Rapax + 51.285s 12. Simon Trummer Arden + 1m04.054s 13. Rodolfo Gonzalez Caterham + 1m21.395s 14. Rio Haryanto Carlin + 1m23.537s 15. Luiz Razia Arden + 1m23.639s 16. Victor Guerin Ocean + 1 lap 17. Felipe Nasr DAMS + 1 lap 18. Fabio Leimer Racing Engineering + 1 lap 19. Fabrizio Crestani Lazarus + 1 lap 20. Ricardo Teixeira Rapax + 1 lap 21. Julian Leal Trident + 2 laps 22. Giancarlo Serenelli Lazarus + 2 laps Retirements: Esteban Gutierrez Lotus 37 laps Nigel Melker Ocean 32 laps Fabio Onidi Coloni 26 laps Josef Kral Addax 0 laps