Dani Pedrosa ended Jorge Lorenzo's run of Estoril victories by passing his countryman late in the Portuguese Grand Prix and going on to claim his first win of the season.
With qualifying star Marco Simoncelli's race ending in anti-climax when he crashed on the first lap, the GP became a tense battle between Lorenzo and Pedrosa.
For lap after lap, Honda rider Pedrosa stalked the leading Yamaha, with the gap between them rarely more than a tenth of a second.
But Pedrosa did not seem to have enough speed in hand to complete a move on Lorenzo, repeatedly looking to the inside on the pits straight without ever really threatening.
Then, out of the blue with four laps to go, Pedrosa got a better run out of the final corner and swept past Lorenzo into Turn 1. Once ahead, there was no stopping him, with a string of fastest laps allowing the Honda to edge away - as Pedrosa proved that his recent fitness issues were behind him by getting quicker and quicker going into the closing laps. He became the first man to beat Lorenzo at Estoril since the latter came into MotoGP and moved to within four points of the championship-leading Yamaha rider.
Second-place starter Simoncelli (Gresini Honda) lost out to Pedrosa off the line, and only got as far as Turn 4 before having a violent high-side that ended his promising weekend.
Avoiding that accident cost Casey Stoner a few tenths and allowed the top two to make a break from the second Honda. At first Stoner was able to match Lorenzo and Pedrosa's pace, but he later faded to finish a lonely third.
Valentino Rossi got up to fourth for Ducati on lap one and then spent the race fending off Honda's Andrea Dovizioso. It looked like the former champion had the place in the bag until Dovizioso ramped up his attack in the closing laps and finally snatched fourth in a drag race to the line.
Colin Edwards finished sixth for Tech 3 Yamaha, with Hiroshi Aoyama emerging from an early battle with Edwards' team-mate Cal Crutchlow and Rossi's team-mate Nicky Hayden to take seventh for Gresini.
Randy de Puniet completed the top 10 on the Pramac Ducati. His team-mate Loris Capirossi fleetingly held seventh following a good start but faded to 12th, while Alvaro Bautista heroically made it to the end for Suzuki in 13th just six weeks after breaking his leg in Qatar.
Yamaha's Ben Spies was among the retirements. He fell down the order running wide early on, and eventually crashed out when 10th just before half-distance.
Results - 28 laps: Pos Rider Team/Bike Time/Gap 1. Dani Pedrosa Honda 45m51.483s 2. Jorge Lorenzo Yamaha + 3.051s 3. Casey Stoner Honda + 7.658s 4. Andrea Dovizioso Honda + 16.530s 5. Valentino Rossi Ducati + 16.555s 6. Colin Edwards Tech 3 Yamaha + 32.575s 7. Hiroshi Aoyama Gresini Honda + 38.749s 8. Cal Crutchlow Tech 3 Yamaha + 40.912s 9. Nicky Hayden Ducati + 54.887s 10. Randy de Puniet Pramac Ducati + 59.697s 11. Toni Elias LCR Honda + 1m00.374s 12. Loris Capirossi Pramac Ducati + 1m01.793s 13. Alvaro Bautista Suzuki + 1m24.370s Retirements: Ben Spies Yamaha 12 laps Karel Abraham Cardion Ducati 1 lap Marco Simoncelli Gresini Honda 0 laps Hector Barbera Aspar Ducati 0 laps