Johnny Cecotto Jr. 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 pit stops 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 pit stop 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 pit stop and quick laps thereafter allowed Lotus' James Calado to turn 13th on the grid into a seventh-place finish. Calado's teammate 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 pit stop 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
Esteban Gutierrez Lotus 37 laps
Nigel Melker Ocean 32 laps
Fabio Onidi Coloni 26 laps
Josef Kral Addax 0 laps