Morne Steyn kicked six penalties and a conversion to help the Bulls beat the Stormers 25-17 in their Super Rugby season opener at Loftus Versfeld.
The triple Super Rugby champions the Bulls were outscored two tries to one by the Stormers but Steyn's boot proved to be the difference in front of the 44 272 strong crowd.
Former Lions and now Stormers flyhalf Elton Jantjies had a shocker of a night with the boot as he missed four early penalties which allowed the Bulls to build their initial lead.
Flyhalf Morne Steyn was the leading man in the Bulls victory, contributing 20 points to the Bulls' score with six penalties and a conversion kick.
The match was evenly poised, however the Bulls converted their scoring opportunities into points as Steyn was on target with his placekicking.
His counterpart Elton Jantjies - playing in the Stormers colours for the first time - on the other hand struggled with his aim at goal.
The flyhalf, on loan from the Lions, missed three penalty kicks in the first half and one shortly after the restart.
The Bulls attacked the Stormers line with great intensity in the opening minutes of the match.
Steyn's accurate kicking out of hand also put the Bulls on the front foot as he forced the Capetonians to turn with kicks behind them.
While the hosts failed to convert their early advances into tries, Steyn obliged when he was asked to go for the three-pointer.
His drop in form in 2012 was a distant memory as he looked like the player of old, sending the ball through the uprights with pinpoint accuracy.
The hosts suffered from some early hiccups as hooker Chiliboy Rallepelle struggled to find his jumpers.
They were also found wanting at the breakdown area where the Stormers slowed the ball down.
Both sides suffered injury blows in the first half as JJ Engelbrecht, Werner Kruger, Dewald Potgieter of the Bulls and Steven Kitshoff and Gio Aplon for the Stormers had to leave the field.
The Bulls went into the half-time break with a nine-point lead, which was extended by three points courtesy of Steyn's fourth penalty conversion.
The visitors, however, clawed their way back when skipper Jean de Villiers scored a try in the 49th minute.
Bryan Habana got over the gainline but he was stopped short of the tryline, where a scramble for the ball ensued.
When the ball popped out, De Villiers pounced on it and dove over for the first try of the match.
With Jantjies having trouble with his kicking, Joe Pietersen took over from him and converted the try to bring his team within five points of the Bulls.
Five minutes later Pietersen succeeded with a penalty conversion to diminish the Bulls' lead to two points.
However, Steyn once again showed his worth as he converted two penalties within four minutes.
The Bulls then all but wrapped the match up with hooker Chiliboy Rallepele crossing the line after he collected a coontroversial grubber kick from Francois Hougaard five metres from the line and Steyn converted.
The Capetonians finished with a flourish when towering lock Andries Becker neatly stepped to the inside to beat his immediate opponent to score.
JP Pietersen converted the try but the Stormers were still eight points behind and their efforts were in vain as referee Jaco Peyper blew the full-time whistle three minutes later.
The victory is the Bulls first over the Stormers since 2011 and moves the Bulls provisionally into third place in the overall standings.
Final Score Bulls 25 (9) Stormers 17 (0)
Tries - C. Ralepelle
Pen - M Steyn 6
Con - M Steyn
Tries - J De Villiers, A Bekker
Pen - J Pietersen 2
Con - J Pietersen
Referee: Jaco Peyper
Assistant Ref 1:Rasta Rasivhenge
Assistant Ref 2:Stefan Breytenbach
TMO : Johan Greeff
Zane Kirchner, Lionel Mapoe, JJ Engelbrecht, Wynand Olivier, Bjorn Basson , Morne Steyn, Francois Hougaard, Pierre Spies (c), Dewald Potgieter, Deon Stegmann, Juandre Kruger, Flip van der Merwe,Werner Kruger, Chiliboy Ralepelle, Morne Mellett.
Replacements: Willie Wepener Frik Kirsten, Grant Hattingh, Arno Both, Jano Vermaak, Louis Fouche, Francois Venter.
15. Jaco Taute , 14. Gio Aplon , 13. Jean de Villiers (captain) , 12. Damian de Allende , 11. Bryan Habana , 10. Elton Jantjies , 9. Nic Groom , 8. Duane Vermeulen , 7. Rynhardt Elstadt , 6. Siya Kolisi , 5. Andries Bekker , 4. De Kock Steenkamp , 3. Pat Cilliers , 2. Deon Fourie , 1. Steven Kitshoff
Replacements : 16. Martin Bezuidenhout , 17. Frans Malherbe , 18. Don Armand , 19. Nizaam Carr , 20. Dewaldt Duvenage , 21. Gerhard van den Heever , 22. Joe Pietersen