Red Bull's Sebastian Vettel took his second win in four races this year as he dominated the Bahrain Grand Prix.
The world champion headed Lotus drivers Kimi Raikkonen and Romain Grosjean, who denied Paul di Resta a first career podium in the closing laps.
The Scot had, like Raikkonen, done one fewer pit stops than the other leading runners but could not hold Grosjean.
Lewis Hamilton took fifth for Mercedes as Fernando Alonso rescued eighth after suffering a rear wing failure.
The Spaniard's wing panel twice became stuck open when he used his DRS overtaking aid, forcing him to pit both times for mechanics adjust it.
There were close on-track battles and plenty of overtaking between a number of drivers, including a bad-tempered tussle between McLaren's Jenson Button and Sergio Perez, but Vettel was in a league of his own.
"[It was a] faultless, seamless race from start to finish," said Vettel. "I knew it was crucial to get into the lead and look after the tyres, the pace was phenomenal, the car was great. I could push every single lap and look after the tyres.
"I lost out to Fernando at the first corner, but I could get him back. I saved some Kers and could out-accelerate him into Turn Six. Out of Turn four I did the same on Nico, a little bit of Kers and got him into Turn Five."
"[It was] incredible the pace we had today, we surely did not expect that."
His win extends his lead over Raikkonen in the championship to 10 points, with Hamilton third a further 13 behind and Alonso fourth, 30 behind Vettel.
The German held off a challenge from Alonso on the opening lap, losing out through Turns One and Two before re-passing the Ferrari with a brave move around the outside into Turn Five.
He then passed pole-winner Nico Rosberg's Mercedes, skilfully around the outside of Turn Five into Turn Six and drove away into a race of his own, making three stops on his way to a third consecutive victory in Bahrain.
Behind him, Raikkonen used a two-stop strategy to move up to from eighth on the grid to take second, while Grosjean, making three stops, passed Di Resta for third with six laps to go.
"Yesterday wasn't ideal so we'd planned on Friday to try a two-stop and today it worked well," said Raikkonen of Lotus's recovery. "I didn't have a strong first and second laps but after the first stop I was able to come back stronger so we had a good race in the end."
Behind them there was a Titanic race-long fight involving Mark Webber, Lewis Hamilton, Perez, Alonso, Nico Rosberg and Button, as their strategies brought various combinations of drivers together on track at various points of the race.
In the closing laps, Webber and Hamilton battled hard for fifth place, with Hamilton passing the Red Bull into Turn One at the start of the final lap to take fifth.
Webber then lost another place to Perez in the course of the last lap as Alonso took eighth ahead of Rosberg and Button.
Alonso - who had been without the use of the DRS since it failed on lap seven - just lost out in a battle with Perez.
Alonso had to make pit stops on laps seven and eight when the DRS stuck open. At the first, Ferrari mechanics banged it shut, but it stuck again as soon as he used it on the next lap and he had to stop again to have it knocked back into place.
In the circumstances, it was an impressive recovery from Alonso, who passed Perez for seventh with six laps to go, but was unable to fend the McLaren off when Perez came back at him three laps later.
The Mexican prevailed after passing Alonso into Turn Four and then forcing him off the circuit as the Ferrari driver tried to stay with him around the outside of Turn Five.
Earlier, Perez had angered Button as he hit the back of his team-mate and then banged wheels with him, Button saying on the team radio: "Calm him down, will you?"
Button dropped back out of contention in the closing laps to fall behind Rosberg, whose high tyre degradation meant he had to make four stops to change tyres.
1. Sebastian Vettel (Ger) Red Bull 1hr 36min 00.498secs
2. Kimi Raikkonen (Fin) Lotus +00:09.111
3. Romain Grosjean (Fra) Lotus 00:19.507
4. Paul Di Resta (GB) Force India 00:21.727
5. Lewis Hamilton (GB) Mercedes 00:35.230
6. Sergio Perez (Mex) McLaren 00:35.998
7. Mark Webber (Aus) Red Bull 00:37.244
8. Fernando Alonso (Spa) Ferrari 00:37.574
9. Nico Rosberg (Ger) Mercedes 00:41.126
10. Jenson Button (GB) McLaren 00:46.631
11. Pastor Maldonado (Ven) Williams 01:06.450
12. Nico Hulkenberg (Ger) Sauber 01:12.933
13. Adrian Sutil (Ger) Force India 01:16.719
14. Valtteri Bottas (Fin) Williams 01:21.511
15. Felipe Massa (Brz) Ferrari 01:26.364
16. Daniel Ricciardo (Aus) Toro Rosso +1 lap
17. Charles Pic (Fra) Caterham 1 lap
18. Esteban Gutierrez (Mex) Sauber 1 lap
19. Jules Bianchi (Fra) Marussia 1 lap
20. Max Chilton (GB) Marussia 1 lap
21. Giedo van der Garde (Ned) Caterham 2 laps
retd Jean-Eric Vergne (Fra) Toro Rosso 41 laps