Marc Marquez escaped final lap contact from team-mate Dani Pedrosa to extend his 2014 winning run to seven races at the Grand Prix de Catalunya.
The reigning world champion produced yet another masterclass as he first came through a battle with Valentino Rossi for the lead before holding off Pedrosa in the final laps.
Pedrosa pushed his Honda team-mate all the way with the pair both enjoying spells in the lead on the final lap.
In the end, both were lucky to finish the race as Pedrosa clipped Marquez's rear wheel with just a handful of corners remaining.
Marquez held on despite the contact to extend his unbeaten run while Rossi snatched second from Pedrosa.
A fast start from Lorenzo saw him sweep into the lead as the field streamed into the first corner.
Pedrosa briefly moved into second before Rossi took the position away for the Spaniard while Marquez slotted into fourth.
Rossi continued to charge as he took the lead the lead from Lorenzo on lap five. Marquez also managed to move into third a couple of laps earlier and began to pile the pressure on Lorenzo in second.
LCR Honda's Stefan Bradl moved onto the back of the lead group in fifth.
The pressure on Lorenzo soon took its toll as Marquez swept into second at the Turn 10 hairpin. However, the Yamaha fought back and reclaimed the position before succumbing to the championship leader later on lap six.
Pedrosa capitalised on the situation and slipped through into third before he set his sights on Marquez and Rossi at the front.
Meanwhile, Cal Crutchlow's miserable season continued as a mechanical problem forced the British Ducati rider into retirement.
At the front, Rossi looked comfortable in the lead despite having to fend off both the Hondas of Marquez and Pedrosa.
Such was the pace of the trio, they soon dropped Lorenzo who appeared to struggled for rhythm on his Yamaha.
Marquez stalked leader Rossi for several laps until he struck with just seven laps remaining with a slick move into Turn 1.
However, his lead was short-lived as Pedrosa stormed passed the pair at the following corner just as rain started to fall.
A yellow flag caused confusion among the lead group but Marquez and Rossi continued to battle as they both moved around Pedrosa.
In the final laps Pedrosa managed to haul himself into second and a titanic scrap for the lead with Marquez broke out.
The pair swapped positions twice on the final lap before Pedrosa made a late lunge with just two corners of the final lap to go.
He made contact with Marquez and ran wide which allowed Rossi to claim second, while Marquez went on to take the chequered flag.
Lorenzo came home in fourth just ahead of the LCR Honda of Bradl.
The MotoGP series heads to Assen in The Netherlands for round eight of the championship on June 28.
MotoGP Grand Prix de Catalunya Results
Position | Rider | Bike | Time/Gap |
1 | Marc Marquez | Honda | 25 Laps |
2 | Valentino Rossi | Yamaha | +0.512s |
3 | Dani Pedrosa | Honda | +1.834s |
4 | Jorge Lorenzo | Yamaha | +4.540s |
5 | Stefan Bradl | LCR Honda | +11.148s |
6 | Aleix Espargaro | Forward Yamaha | +14.213s |
7 | Pol Espargaro | Tech 3 Yamaha | +16.127s |
8 | Andrea Dovizioso | Ducati | +16.175s |
9 | Andrea Iannone | Pramac Ducati | +18.040s |
10 | Bradley Smith | Tech 3 Yamaha | +24.781s |
11 | Yonny Hernandez | Pramac Ducati | +37.153s |
12 | Scott Redding | Gresini Honda | +42.921s |
13 | Nicky Hayden | Aspar Honda | +43.299s |
14 | Michele Pirro | Ducati | +55.157s |
15 | Hiroshi Aoyama | Aspar Honda | +59.191 |
16 | Broc Parkes | PBM Aprilia | +1m00.906s |
17 | Michael Laverty | PBM Aprilia | +1m01.284s |
18 | Colin Edwards | Forward Yamaha | +1m06.121s |
19 | Hector Barbera | Avintia FTR-Kawasaki | +1m25.195s |
20 | Michel Fabrizio | Ioda Aprilia | +1m40.665s |
RET | Mike di Meglio | Avintia FTR-Kawasaki | 8 laps |
RET | Cal Crutchlow | Ducati | 15 laps |
RET | Alvaro Bautista | Gresini Honda | 22 laps |
RET | Karel Abraham | Cardion Honda | 24 laps |