Jorge Lorenzo's improved form continued as he collected a dramatic third win of the MotoGP season in Austria.
The Spaniard was frustrated as he failed to compete in his first campaign with Ducati last year, leading to him agreeing a move to join world champion Márc Marquez at Repsol Honda from 2019.
But Lorenzo's fortunes have improved since the announcement and, after back-to-back wins earlier in the season, he edged to another victory with Ducati after a compelling battle with Márquez in Spielberg.
Andrea Dovizioso had emerged from the first turn out in front, but he was soon forced wide and slipped behind Lorenzo and Marquez in a thrilling opening lap.
Márquez then accelerated away from Lorenzo at the start of the second lap, leaving the two Ducatis to jostle for position behind him.
The pair steadily closed on the leader though, and Lorenzo made his move with 11 laps remaining, passing his future team-mate at the second attempt.
Lorenzo looked to be cruising to victory before an error let Márquez nip in, prompting an incredible finale in which the two riders tore after one another, the Honda man wobbling on more than one occasion.
It was Márquez's turn for a costly error during the final lap, however, as he opted not to run Lorenzo wide and saw his press on to clinch victory.
Márquez's wait for a win at the Red Bull Ring goes on, but he extended his lead over nearest rival Valentino Rossi - who finished sixth - in the overall standings.