Pretoria - The Stormers brought the Bulls' impressive unbeaten record at Loftus Versfeld to an end with a 29-17 victory in their opening Super Rugby match on Saturday.
As it happened: Bulls v Stormers
The Bulls last tasted defeat at home in their semi-final defeat against the Brumbies back in 2013.
The Stormers' pack dominated the battle of the battle of the forwards while they gave the Bulls a lesson at scrum time.
Their dominant scrum performance completely took the wind out of the Bulls' sails as they had enough front-foot ball to do as they pleased.
The home side's much publicised shift from their traditional kick-and-suffocate approach to a more expansive style was only evident in the opening six minutes of the encounter.
During this period the Bulls enjoyed most of the possession although their scrum woes continued.
The hosts made a promising start to the match when they made an attack on the tryline thanks to a well-executed shift to Francois Hougaard, who got stopped short of goal.
The ruck metres from the line resulted in a penalty which saw the Bulls drive the ball up from a lineout with flank Deon Stegmann dotting down from the back of the rolling maul, with Pollard missing the conversion kick.
The Capetonians responded three minutes later with fleet-footed fullback Cheslin Kolbe launching an up-and-under which his opposite number Jurgen Visser fumbled.
Stormers wing Dillyn Leyds swooped on the loose ball and sprinted for the line beating the cover defence to claim the five-pointer, while flyhalf Demetri Catrakilis converted.
Five minutes later the sharp-shooting Catrakilis extended his side's lead to eight points with a penalty conversion.
In the 25th minute, Bulls centre JJ Engelbrecht was a tad lucky not to earn some time in the sin-bin when he got away with a late and high shoulder charge on Stormers scrumhalf Nic Groom.
Instead of having another look, match referee Jaco Peyper only awarded a penalty to the visitors.
The Stormers, however, made up for the referee's indiscretion with captain Duane Vermeulen taking an inside pass from Damian de Allende to score under the posts, with Catrakilis adding the extra two points (17-5).
The Bulls suffered an injury blow with Arno Botha leaving the field with what appeared to be a pectoral muscle injury.
The visitors added three more points to their scoresheet shortly before the half-time break with Catrakilis slotting a penalty goal.
The Bulls enjoyed a better second half with better ball retention helping their cause, while flyhalf Handre Pollard closed down the deficit courtesy of his place-kicking.
Pollard opened their second-half account with a penalty conversion in the 42nd minute before adding another six minutes later to see the Stormers' lead shrink to six points.
Catrakilis returned their advantage to nine points with a penalty goal in the 51st minute before Pollard responded with two more to get his side within three points.
The Bulls started to dominate the collisions and it seemed only a matter of time before they would regain the lead.
The Stormers, however, remained calm as they took the points when they came their way with Catrakilis kicking his last penalty of the night in the 66th minute.
His replacement Kurt Coleman continued where Catrakilis left off by first succeeding with a three-pointer seven minutes from time before rubbing salt in the Bulls' wounds with a drop goal three minutes from time.
Tries: Duane Vermeulen, Dillyn Leyds
Conversions: Demetri Catrakilis (2)
Penalties: Catrakilis (3), Coleman
Drop goal: Coleman
Try: Deon Stegmann
Penalties: Handre Pollard (4)
15. Jurgen Visser, 14. Bjorn Basson, 13. JJ Engelbrecht, 12. Jan Serfontein, 11. Francois Hougaard, 10. Handre Pollard, 9. Piet van Zyl, 8. Arno Botha, 7. Lappies Labuschagne, 6. Deon Stegmann, 5. Victor Matfield (captain), 4. Jacques du Plessis, 3. Werner Kruger, 2. Adriaan Strauss, 1. Trevor Nyakane
Substitutes: 16. Callie Visagie, 17. Morne Mellet, 18. Dayan vd Westhuizen/Neethling Fouche, 19. Grant Hattingh, 20. Pierre Spies, 21. Rudy Paige, 22. Jacques-Louis Potgieter, 23. Jesse Kriel
15. Cheslin Kolbe, 14. Johnny Kotze, 13. Juan de Jongh, 12. Damian de Allende, 11. Dillyn Leyds, 10. Demetri Catrakilis, 9. Nic Groom, 8. Duane Vermeulen (captain), 7. Michael Rhodes, 6. Rynhardt Elstadt, 5. Ruan Botha, 4. Jean Kleyn, 3. Vincent Koch, 2. Scarra Ntubeni, 1. Steven Kitshoff
Substitutes: 16. Bongi Mbonambi, 17. Oli Kebble, 18. Wilco Louw, 19. Jurie van Vuuren, 20. Nizaam Carr, 21. Louis Schreuder, 22. Kurt Coleman, 23. Huw Jones