Lewis Hamilton took the world championship lead from Mercedes team-mate Nico Rosberg with a closely fought victory in the Spanish Grand Prix.
Hamilton leads Rosberg by three points as his fourth win in a row finally made up the ground he lost by retiring from the season-opening Australian GP.
The Briton led from start to finish to win a tense battle with Rosberg, with the rest of the field far behind.
Red Bull's Daniel Ricciardo was third and team-mate Sebastian Vettel fourth.
The world champion produced a superb recovery drive from 15th on the grid to finish ahead of Williams' Valtteri Bottas and the Ferraris of Fernando Alonso and Kimi Raikkonen.
Hamilton converted his pole position into a lead at the first corner and built a 2.6-second lead over Rosberg by lap 13.
But the German closed in to within 1.6secs over the next four laps until Hamilton made his first pit stop on lap 18.
When Rosberg stopped three laps later, Mercedes split the tyre strategies between both cars, just as they had in their close battle in Bahrain two races ago, putting Rosberg on the 'hard' tyre whereas Hamilton had been fitted with the 'medium'.
Hamilton was told he needed to maintain a four-second gap by the time of his second pit stop, while Rosberg was told he had to get the margin down to two seconds if he wanted to win the race.
Hamilton made his final pit stop on lap 43, fitting the hard tyres. And despite a delay fitting a rear wheel, he was a comfortable 4.8 seconds ahead when Rosberg emerged from his final stop on the medium tyre two laps later.
Rosberg inexorably closed on Hamilton through the final stint and was close enough to be able to use his DRS overtaking aid as they entered the penultimate lap, but was unable to pass.
Hamilton had to lap Raikkonen as they headed down the straight into the final lap but was able to retain the lead.
"I wasn't fast enough really today," said Hamilton. "Nico was quicker. I had to rely on my engineers to tell me where I could find time and what the gap was.
"One more lap and I would have been close enough to give it a good go," said Rosberg. "I'm a bit gutted, but still second place and in a good position in the championship. There are many races to go."
Behind the dominant Mercedes cars, Ricciardo lost a place to Bottas at the start but the Red Bull was much faster and leapfrogged ahead at the first stops.
Vettel was in excellent form as he recovered from a gearbox failure in qualifying and consequent five-place grid penalty for changing the part.
Red Bull put the world champion on a three-stop race, and after his final stop on lap 52 he quickly passed Ferrari's Kimi Raikkonen and closed in on Bottas and passed the Finn on lap 63.
Alonso, initially planning two stops, switched to a three-stop strategy in a successful attempt to beat Raikkonen, who led him in the first part of the race.
Alonso had spent the first stint of the race stuck at the back of a three-car train led by Lotus' Romain Grosjean and Raikkonen.
Against the usual protocol, which dictates the driver leading on the track out of two team-mates gets first-call on pit-stop timing, Alonso made his first stop a lap earlier in an attempt to pass Raikkonen. It failed when Alonso hit traffic on his out lap.
During the second stint, Ferrari switched Alonso to a three-stop strategy in what the Spaniard said was an attempt to prevent them being passed by Vettel, who was doing the same.
But it failed - Alonso rejoined after his final stop right behind Vettel and while he was unable to keep pace with the German, who passed Raikkonen on lap 56 before setting off after Bottas, Alonso did close on Raikkonen.
After a couple of laps failing to get past on the main straight, Alonso tried the outside of Turn One on lap 64, cut back into Turn Two, followed Raikkonen closely through the difficult and fast Turn Three and out-braked his team-mate into Turn Four, to the delight of his adoring home fans.
Raikkonen appeared to question Ferrari's strategy on the radio on the slowing-down lap, asking "who made these calls' and suggesting he "seemed to be getting second choice". Afterwards, Raikkonen admitted he had "wanted to clarify a few things".
Behind the Ferraris, Grosjean took Lotus' first points of the season in eighth, ahead of the Force Indias of Sergio Perez and Nico Hulkenberg.
Jenson Button beat McLaren team-mate Kevin Magnussen to 11th place.
The Dane lost a place to Vettel on the first lap when he had to pull out of an attempt to pass Button at the chicane, but fought back to finish just 0.6secs behind his team-mate.