Fernando Alonso secured the 32nd win of his career at the Spanish Grand Prix.
Alonso started from fifth place but quickly passed Kimi Raikkonen and Lewis Hamilton.
Pole sitter Nico Rosberg led early on but his tyres soon faded. Having passed Sebastian Vettel during the pit stop phase, Alonso easily dispatched with Rosberg to take the lead.
Rosberg was soon demoted down the order as he was passed by Vettel, Felipe Massa and Raikkonen within the space of a few laps.
Raikkonen secured second place having stopped three times, rather than the conventional four. Massa took third place to register his first podium of the year.
Reigning champion Vettel could manage only fourth after being passed by Raikkonen, while team-mate Mark Webber recovered from a poor start to finish in fifth.
Rosberg finished over a minute behind Alonso but was able to fend off a charging Paul di Resta to finish in sixth.
McLaren managed eighth and ninth, with Jenson Button ahead of Sergio Perez, while Daniel Ricciardo took the final point for tenth.
Esteban Gutierrez put in the finest drive of his Formula 1 career, finishing just 0.3s down on Ricciardo. Hamilton endured a miserable race as he slipped from the front row of the grid to twelfth.
Three drivers failed to finish the race; Romain Grosjean suffered an early suspension failure while Giedo van der Garde's strong run was halted by a loose wheel.
Pirelli suffered another delamination on Jean-Eric Vergne's STR8 and the Frenchman was forced to retire. Vergne was also involved in a collision in the pits with Nico Hulkenberg as the Sauber driver was released into the path of the Toro Rosso.
The result leaves Vettel at the head of the championship, with Raikkonen four points behind and Alonso in third place.