Marc Marquez made it four MotoGP race wins in a row with victory at the Czech Grand Prix to extend his lead in the world championships to 26 points.
The Repsol Honda rider bided his time at Brno before making the decisive move on defending champion Jorge Lorenzo in the closing stages.
The factory Yamaha rider was also passed late on by Marquez's team-mate Dani Pedrosa and had to settle for third on the podium.
Lorenzo had grabbed the lead off the start despite being fifth on the grid as he led the field into the first turn.
Marquez slotted in behind and fought off the attentions of Pedrosa as the three Spanish riders disputed the race lead.
Lorenzo started to pull clear early in the race before he was hauled back in by the Honda pair.
Marquez and Lorenzo then swapped the lead several times before the Honda rider made the decisive move and was followed by his team-mate as Lorenzo was relegated to third.
Alvaro Bautista, on the Gresini Honda, fought for fourth with Valentino Rossi after both benefited from a crash by Cal Crutchlow on the Monster Tech 3 Yamaha.
Crutchlow, who started the race from pole position, had fought off Bautista and was pulling away before he slid off. The British rider remounted but could only recover to finish 17th.
Rossi edged Bautista for fourth with the LCR Honda of Stefan Bradl in sixth ahead of Ducati pair Andrea Dovizioso and Nicky Hayden.
Marquez admitted it was the first time he had had such a battle since moving up to the MotoGP class.
He told BBC2: "The battle with Jorge was so nice, I enjoyed it a lot.
"I never had a fight like this in MotoGP but in the end I opened up a little gap."
Lorenzo said he did not have the answers when Marquez kept attacking him.
He said: "I am a little bit disappointed to be honest. When you try your best and you cannot win."