Lewis Hamilton won an incident-packed Monaco Grand Prix on Sunday to get his Formula One championship bid back on track after a dismal run of eight races without a win.
Red Bull driver Daniel Ricciardo started from pole position and finished second - after a huge blunder from his team which failed to have his tires ready - with Mexican driver Sergio Perez third for Force India.
Hamilton, the defending F1 champion, started from third but soon overtook his Mercedes teammate Nico Rosberg, and then held off Ricciardo with a gritty blocking move midway through.
''It's been a long time coming to get this win - not only in the season but here at the Monaco Grand Prix,'' said Hamilton, whose only other Monaco win was in 2008 for McLaren. ''As soon as it rained I knew there was an opportunity, and fortunately I was quick enough in the wet.''
With Rosberg - the championship leader - finishing seventh, Hamilton moved up to second overall in the standings, closing the gap on Rosberg to 24 points, while Ricciardo is in third spot.
Because of poor visibility and a drenched circuit, the first few laps were a procession behind a safety car.
But once the racing began properly, it was a thriller featuring multiple crashes and the comical sight of Red Bull's pit crew not being ready for Ricciardo's tire change.
The Australian driver was unforgiving, saying ''everyone was running around like headless chucks (chickens).'' He added: ''It's massively disappointing.''
By contrast, Hamilton was delighted, jumping out of his car and throwing himself into the arms of his team engineers - and even getting congratulated by U.S. pop star Justin Bieber.
Hamilton, who had not won since clinching last season's United States Grand Prix, took his helmet off and then ran back to get more hugs from his pit crew.
Grabbing the race trophy from Monaco's Prince Albert, Hamilton then tossed it up in the air and just about caught it.
Ricciardo stood watching, glum-faced, but then went up to shake Hamilton's hand.
It was even worse for Rosberg, who seemed to receive team orders to let Hamilton go past him early on.
Winner of seven of the past eight races, including the first four this season, Rosberg's awful day was compounded when he was overtaken at the line by Nico Hulkenberg.
It was Hamilton's 44th career win - the same number as his car - and made up for last year when he finished third in Monaco after being caught behind a safety car following a late team order to pit.
This time, there were no such glitches for Hamilton.
After the track dried out, he came in for quicker ultra-soft tires on lap 32, with Ricciardo coming in a lap later to switch to the same tires.
But in an astonishing oversight, Red Bull's crew was not ready and this cost him valuable time as he came out behind Hamilton.
''I guess from the outside we put on a show but it shouldn't have been exciting. Two races in a row I've been screwed,'' said a dejected Ricciardo, whose team made an error when he finished fourth in Spain two weeks ago. ''They should have been ready. It hurts.''
Shortly after, a race engineer tried to reassure Ricciardo, saying ''get your head together, you're quicker than him, let's do it,'' but the error was a terrible one.
Five laps later, however, Ricciardo went close to overtaking Hamilton.
But Hamilton held his line at the Mirabeau turn, prompting an angry reaction from Ricciardo, who waved his right hand furiously.
''I forced him into the fence and by doing so he made a mistake and cut across the chicane,'' Ricciardo said. ''Obviously it was a chance to get the lead, so sure I questioned it.''
Perez was delighted with his seventh career podium.
''To have it here in Monaco is very special,'' Perez said. ''In these conditions it's one of my best races.''
Ferrari driver Sebastian Vettel was fourth, ahead of McLaren's Fernando Alonso and Hulkenberg, who capped a fine day for Force India.
Meanwhile, Ferrari's Kimi Raikkonen and Red Bull's Max Verstappen were among seven drivers who failed to finish a chaotic race.
Toro Rosso's Daniil Kvyat - the Russian driver who has twice been blamed for racing incidents with Vettel this season - ploughed into the turn at La Rascasse, taking Kevin Magnussen's Renaullt into the barriers with him. British driver Jolyon Palmer, Magnussen's teammate, had crashed early when the track was at its wettest.
But the most farcical incident involved Sauber teammates Felipe Nasr and Marcus Ericsson.
Nasr received team orders to let Ericsson through but apparently ignored them, so a determined Ericsson went for a gap that simply did not exist and they both collided at the Rascasse turn.
Ericsson quipped that his teammate's radio ''musn't be working.''
(For more sports news and updates, follow Ahram Online Sports on Twitter at @AO_Sports and on Facebook at AhramOnlineSports.)