Cape Town - The Stormers produced an inspired performance to upset the Bulls in their South African Super Rugby derby at Newlands on Saturday.
The hosts won 29-17, after leading 12-10 at half-time.
The Stormers started like a house on fire, taking an early 12-0 lead before the Pretoria side clawed their way back.
The Bulls briefly led 17-12 early in the second half, before the home side responded by scoring 17 unanswered points.
Inspired by vociferous home support, the Stormers had the upper hand at the scrums early on and bossed the contact situations to put the Bulls under severe pressure.
They scored early tries through flyhalf Damian Willemse and prop Wilco Louw.
However, the visitors gained momentum towards the latter part of the first half and were right back in the contest when lock Lood de Jager scored under the posts after running a great line in midfield.
A further penalty by Handre Pollard saw the Bulls trail by only two points at the break.
The Stormers were at this stage under pressure with hooker Ramone Samuels sent to the sin-bin for a late and dangerous tackle.
The Bulls took the lead in the 48th minute via try by flank Jason Jenkins.
But their advantage was short-lived when Stormers lock and man-of-the-match Pieter Steph-du Toit reclaimed possession from the subsequent kick-off, setting up a try for fullback SP Marais.
Samuels made amends for his earlier indiscretion when he barged over for the Stormers’ fourth try in the final quarter.
The Bulls threw everything they had at their hosts in the latter stages, but an improved Stormers defence allowed them to hang on for their most impressive win of the season.
Both sides will however rue ill discipline - the Stormers conceded 13 penalties and the Bulls 14, while the scrum penalties conceded were even at 4-apiece.
In next weekend's action, the Stormers host the Chiefs in Cape Town (Saturday, May 12 - 15:05), while the Bulls entertain the Sharks in Pretoria (Saturday, May 12 - 17:15).
Tries: Damian Willemse, Wilco Louw, SP Marais, Ramone Samuels
Conversions: Damian Willemse (3)
Tries: Lood de Jager, Jason Jenkins
Conversions: Handre Pollard (2)
15 SP Marais, 14 Dillyn Leyds, 13 JJ Engelbrecht, 12 Damian de Allende, 11 Raymond Rhule, 10 Damian Willemse, 9 Dewaldt Duvenage, 8 Sikhumbuzo Notshe, 7 Kobus van Dyk, 6 Siya Kolisi (captain), 5 Pieter-Steph du Toit, 4 Chris van Zyl, 3 Wilco Louw, 2 Ramone Samuels, 1 Steven Kitshoff
Substitutes: 16 Scarra Ntubeni, 17 JC Janse van Rensburg, 18 Frans Malherbe, 19 Cobus Wiese, 20 Nizaam Carr, 21 Paul de Wet, 22 Jean-Luc du Plessis, 23 Seabelo Senatla
15 Warrick Gelant, 14 Johnny Kotze, 13 Jesse Kriel, 12 Burger Odendaal (captain), 11 Divan Rossouw, 10 Handre Pollard, 9 Andre Warner, 8 Thembelani Bholi, 7 Jason Jenkins, 6 Marco van Staden, 5 Lood de Jager, 4 RG Snyman, 3 Conrad van Vuuren, 2 Adriaan Strauss, 1 Lizo Gqoboka
Substitutes: 16 Jaco Visagie, 17 Frans van Wyk, 18 Nqoba Mxoli, 19 Hendre Stassen, 20 Roelof Smit, 21 Ivan van Zyl, 22 Manie Libbok, 23 Travis Ismaiel