Nico Rosberg beat Mercedes team-mate Lewis Hamilton in a tense fight for victory in the Monaco Grand Prix.
Hamilton, still angry from what he saw as Rosberg's gamesmanship to seal pole in qualifying, tracked him for much of the race.
The Brit dropped back with an eye problem in the closing stages but held off Red Bull's Daniel Ricciardo.
Ferrari's Fernando Alonso was fourth in a race punctuated by two safety car periods.
The race was a slow-burner which came alive in the closing laps as Ricciardo challenged Hamilton, and a series of dramatic incidents led to constant changes for the lower points positions.
It started with enormous tension between Hamilton and Rosberg following the controversial outcome of qualifying.
Rosberg was cleared of wrongdoing on Saturday after a stewards' investigation into a trip into the escape road on his final qualifying lap, which prevented Hamilton completing his own lap and challenging him for pole position.
The stewards declared it an innocent driver error, caused by the German pushing too hard on his final qualifying lap. But Hamilton clearly believed that Rosberg had done it deliberately, a view that was shared by a number of ex-F1 drivers in the paddock.
Mercedes non-executive chairman Niki Lauda said before the race: "This thing we have with Lewis accusing the other of doing something stupid; I tried to fix this this morning with Lewis but I couldn't. If they hit each other at the first corner then they have a problem with me."
They didn't, Rosberg converting his pole into a comfortable lead as Ricciardo's slow getaway left Alonso boxed in behind him and team-mate Sebastian Vettel, and also hampered by a brief lack of electrical power from his hybrid system.
Raikkonen took advantage, slotting into fourth at the first corner behind Rosberg, Hamilton and Vettel and ahead of Ricciardo and Alonso.
The first safety car was employed on the opening lap after McLaren's Jenson Button knocked Sergio Perez's Force India into a spin on the exit of Mirabeau.
Vettel retired immediately with turbo failure as the race was re-started on lap four, and there was a typical Monaco stalemate until another safety car on lap 28 - triggered by a crash at the chicane by Sauber's Adrian Sutil.
Almost the whole field took the opportunity to make their pit stops, but Hamilton complained over the radio to the team, saying they should have brought him in immediately they saw the crash, rather than wait until the safety car was actually deployed.
"Why didn't we stop the lap before?" he asked, heightening the sense of paranoid competition building in the team. "I knew we should have pitted on that lap. I also knew you wouldn't call me in."
After the re-start on lap 31, Rosberg began to get messages that he was using too much fuel.
Hamilton tracked him closely, but was never able to get close enough to make an attempt to pass him.
He suddenly dropped back with 12 or so laps to go, coming on the radio to the team to say he "couldn't see out of his left eye - it's impossible".
But although the team prepared for a pit stop, he increased his pace.
In the closing stages, Ricciardo closed in quickly, catching Hamilton by lap 72, with six laps to go, but the Mercedes driver managed to hold him off until the end.
The result moves Rosberg back into the championship lead, four points clear of his team-mate.
"Lewis drove really well and pushed me massively hard but I was able to hold on," said Rosberg.
"I had great pace," Hamilton said. "I felt I was really strong today but it's a very difficult place to overtake."
Raikkonen ran third until the first pit stops, after which he needed to stop again on the next lap to replace a tyre punctured when he was hit by Marussia's Max Chilton, dropping him to 14th place.
Raikkonen recovered to challenge Magnussen for seventh place in the closing stages, only to try an over-ambitious move on the Dane into the Loews hairpin on lap 73.
Both ended up stuck in the barriers, dropping Magnussen to 10th and forcing Raikkonen to pit for a new nose cone. He finished 12th.
Button had passed Magnussen for sixth behind Force India's Nico Hulkenberg at the start of the same lap and he finished there ahead of Williams' Felipe Massa and Marussia's Jules Bianchi.
The Frenchman's eighth place was the best finish in the small team's four-year history and Bianchi managed to score their first points for ninth place despite a penalty for serving a previous punishment in an incorrect fashion.
Lotus's Romain Grosjean was promoted to eighth in the final standings, with Magnussen 10th.