Valtteri Bottas fended off a late charge from Sebastian Vettel to secure the first Formula 1 victory of his career in the Russian Grand Prix at Sochi.
Mercedes driver Bottas crossed the line just 0.617 seconds ahead of Vettel's Ferrari with Kimi Raikkonen taking his first podium of the season with third.
Lewis Hamilton finished a muted fourth.
Bottas made a blistering start from third on the grid, benefiting from a slow-starting Raikkonen and then passing Vettel on the run to Turn 2 to take the lead.
The race was then neutralised shortly after when the safety car was deployed following a collision between Romain Grosjean and Jolyon Palmer at Turn 2.
At the restart, Bottas put the hammer down and gradually went about building up a lead over Vettel that grew to just over four seconds.
Bottas caught traffic ahead of the pitstops, allowing Vettel to cut the deficit to 2.5s before Mercedes called Bottas in at the end of lap 27 of 52 to swap ultra-softs for super-softs.
Vettel stayed out for an extra seven laps, with his pace remaining competitive, and rejoined just over four seconds adrift of Bottas following his stop for the super-softs.
Championship leader Vettel slowly chipped away at that deficit, getting the gap down to just under a second at one stage to set up a grandstand finish.
But Bottas, who asked for "less talking" on the team radio in the closing laps, kept his composure to fend off Vettel and take his first victory in his 81st F1 start.
Hamilton had a frustrating afternoon, making a good start initially but struggling in the second phase of acceleration as he stayed in fourth.
The three-time world champion complained consistently that his car was overheating in the first half of the race and after the stops, he was unable to catch Raikkonen and ended up a distant fourth.
Max Verstappen was out on his own, too, in fifth, well adrift of the leading quartet but comfortably ahead of Sergio Perez.
Verstappen's Red Bull team-mate Daniel Ricciardo retired with an early rear brake problem.
Force India scored points with both cars for the fourth race in succession as Esteban Ocon took seventh behind team-mate Perez.
Nico Hulkenberg was eighth, with Felipe Massa on-course for sixth before he was forced to make a second stop late on because of a slow puncture that dropped him to ninth.
Carlos Sainz Jr completed the top 10.
Rookie Lance Stroll finished his first grand prix, just missing out on a point in 11th after a first-lap spin..
It was a miserable weekend for McLaren, with Fernando Alonso failing to start the race after stopping his car at the entry to the pits on the formation lap.
Honda suspects the loss of power was down to an ERS issue, but is still investigating.
The other McLaren of Stoffel Vandoorne was 14th, ahead of the two Saubers of Marcus Ericsson and Pascal Wehrlein.
RESULTS - 52 LAPS:
|5||Max Verstappen||Red Bull/Renault||1m00.416s|
|6||Sergio Perez||Force India/Mercedes||1m26.788s|
|7||Esteban Ocon||Force India/Mercedes||1m35.004s|
|9||Felipe Massa||Williams/Mercedes||1 Lap|
|10||Carlos Sainz Jr.||Toro Rosso/Renault||1 Lap|
|11||Lance Stroll||Williams/Mercedes||1 Lap|
|12||Daniil Kvyat||Toro Rosso/Renault||1 Lap|
|13||Kevin Magnussen||Haas/Ferrari||1 Lap|
|14||Stoffel Vandoorne||McLaren/Honda||1 Lap|
|15||Marcus Ericsson||Sauber/Ferrari||1 Lap|
|16||Pascal Wehrlein||Sauber/Ferrari||2 Laps|
|-||Daniel Ricciardo||Red Bull/Renault||Brakes|
|-||Fernando Alonso||McLaren/Honda||Not started|
|9||Carlos Sainz Jr.||11|