Dani Pedrosa led from pole to win the Spanish Grand Prix, as world championship leader Valentino Rossi finished 10th at Circuito de Jerez.
Pedrosa, 31, was more than six seconds ahead of MotoGP champion Marc Marquez to head a Repsol Honda one-two.
Ducati's Jorge Lorenzo was third to complete an all-Spanish podium despite starting from eighth.
Pramac's Scott Redding was the highest placed Briton, finishing 11th, as Cal Crutchlow crashed out after 22 laps.
It was MotoGP's 3,000th race and Pedrosa's first win on Spanish soil since he won at Jerez in 2013. It was also his first victory in MotoGP since San Marino last September.
Italian veteran Rossi, was more than 38 seconds behind Pedrosa. But the 38-year-old, who is chasing an eighth world title, keeps his place atop the standings with 62 points.
He is two points ahead of Yamaha team-mate Maverick Vinales in second with Marquez third on 52 points and Pedrosa fourth on 50.
Spanish MotoGP results:
1. Dani Pedrosa (Spain) Honda 45:26.827
2. Marc Marquez (Spain) Honda +6.136
3. Jorge Lorenzo (Spa) Ducati +14.767
4. Johann Zarco (Fra) Yamaha +17.601
5. Andrea Dovizioso (Ita) Ducati +22.913
6. Maverick Vinales (Spa) Yamaha +24.556
7. Danilo Petrucci (Ita) Ducati +24.959
8. Jonas Folger (Ger) Yamaha +27.721
9. Aleix Espargaro (Spa) Aprilia +31.233
10. Valentino Rossi (Ita) Yamaha +38.682
Moto GP standings
1 Valentino Rossi (Ita) Yamaha 62 points
2. Maverick Vinales (Spa) Yamaha 60
3. Marc Marquez (Spa) Honda 58
4. Dani Pedrosa (Spa) Honda 52
5. Andrea Dovizioso (Ita) Ducati 41
6. Johann Zarco (Fra) Yamaha 35
7. Cal Crutchlow (GB) Honda 29
7. Jonas Folger (Ger) Yamaha 29
9. Jorge Lorenzo (Spa) Ducati 28
10. Danilo Petrucci (Ita) Ducati 26