Andrea Dovizioso beat Ducati teammate Jorge Lorenzo in an epic battle to take victory in the Czech Grand Prix, while Marc Marquez extended his MotoGP points lead in third.
Valentino Rossi nailed his launch off the line to take the lead into Turn 1 at the start, with poleman Dovizioso and Marquez slotting in behind.
Dovizioso took the lead back from Rossi at Turn 3, and repelled an advance from the Yamaha man at Turn 13 at the end of the opening lap.
The lead group, which ran down to 11th-placed Tito Rabat, ran line astern for much of the first half of the race, with Marquez and Lorenzo trading third spot on lap two.
Rossi made his next play for the lead on Dovizioso on lap eight, and was successful in sezing the place from the Ducati rider at Turn 5.
Marquez managed to regain third from Lorenzo, and countered several more advances from the Ducati man before making a move stick on the sister factory GP18 of Dovizioso on lap 10.
Dovizioso hit the front once more on lap 11, with Rossi losing places to Marquez, LCR's Cal Crutchlow and Lorenzo, with Lorenzo usurping Crutchlow in the latter stages.
Lorenzo launched a daring raid for the lead, passing Marquez and teammate Dovizioso at Turns 3 and 4, but ran wide on the exit of Turn 4 and allowed Dovizioso back through.
The Spaniard made another assault on the lead at the last corner, but once again ran it wide and let Dovizioso back through.
The Ducati pair swapped positions at Turn 4 on laps 19 and 20, while Marquez muscled past Lorenzo at Turn 3 on the final tour.
Lorenzo barged past into Turn 5, and tried to chase down leader Dovizioso. But the Italian held enough advantage to claim his first win since the season-opening Qatar race, with Lorenzo keeping Marquez behind for second.
A last-corner lunge from Rossi on Crutchlow gave the Yamaha man fourth, though he still surrendered three points to Marquez, allowing the Honda rider to open up a 49-point lead in the championship.
Danilo Petrucci faded from the podium battle midway through and was sixth in the end, with Johann Zarco, Dani Pedrosa, Alvaro Bautista and Andrea Iannone completing the top 10.
Alex Rins shadowed his Suzuki teammate in 11th, with Jack Miller heading top rookie Franco Morbidelli, Hafizh Syahrin and Aleix Espargaro to complete the points.
Rabat's Avintia Ducati expired on lap nine while he was running 11th. Aprilia's Scott Redding fell early on, while a broken collarbone sustained in a crash in warm-up ruled Pol Espargaro out of the race.
Keen to make up for his lowly 12th on the grid, Rossi's Yamaha teammate Maverick Vinales was taken out in a collision involving sole KTM runner Bradley Smith and Honda wildcard Stefan Bradl at Turn 3.