The Stormers took control of the South African Super Rugby conference thanks to a 15-13 win over the Bulls at Newlands on Saturday.
The home side led from start to finish, despite the Bulls scoring the only try of the game, early in the second-half through wing Bjorn Basson.
The result means the Stormers move one point clear of the Bulls at the top of the SA Conference, but trail the competition-leading Chiefs by seven.
With little attacking creativity on show, the result hinged largely on referee Jaco Peyper's rulings at scrum time, but the Stormers probably deserved their four points, having controlled most of the game.
A try-less first-half came to an end with the hosts leading 12-3 courtesy of their dominant scrum and the accurate boot of Demetri Catrakilis.
Scoring opportunities were few and far between in Cape Town but the Stormers were good value for their lead having dominated both in terms of territory and possession.
Bulls fly-half Handré Pollard hardly saw the ball in the first-half and his opposite number left most of the playmaking to scrum-half Nic Groom in a first period characterised by massive hits and handling errors in the face a fierce defence.
Unlike their scrum, the Stormers' line-out misfired, robbing the hosts of momentum to key parts of the game. Schalk Burger and Damian de Allende regularly got over the gainline though.
As a sign of things to come, the Stormers won a penalty at the first scrum. From the ensuing attack off their line-out, another penalty – this time for not rolling away at a ruck – gave the hosts the early lead as Catrakilis slotted the easy kick.
It was all Stormers in the opening minutes and Duane Vermeulen looked in for all money after a wonderful offload from Burger but Pierre Spies made a try-saving tackle that dislodged the ball.
The Stormers nevertheless doubled their lead as Catrakilis was handed another easy shot at goal after the Bulls prop Dean Greyling was penalised once again at scrum time.
The Bulls had hardly left their half when Catrakilis landed his third penalty – for offside – to leave the Stormers sitting pretty at the end of the first quarter.
Pollard opened the Bulls account when a scrum penalty went the other way.
The pattern for scrum penalties would continue as Catrakilis landed his fourth seconds before the half-time hooter after the Stormers were denied what would have been the opening try due to a forward pass.
The first try of the game came shortly after the restart as Basson raced home. In-form Francois Hougaard should get the credit though, as he created the chance by counter attacking from a turnover deep in his own half. JJ Engelbrecht provided the link and Basson bolted away down the touchline.
Pollard's conversion narrowed the gap to just two points but Catrakilis replied soon after with a penalty – against Grant Hattingh for straying offside – to leave the Stormers 15-10 up with 30 minutes left on the clock.
The scrum penalties kept flowing and Polland's second three-pointer of the night cut the deficit once again. But the Bulls failed to get close to scoring the try needed to snatch victory and so resorted to a drop-goal attempt, which was charged down by the onrushing defence.
Pens: Catrakilis 5
Pens: Pollard 2
Stormers: 15 Cheslin Kolbe, 14 Johnny Kotze, 13 Juan de Jongh, 12 Damian de Allende, 11 Pat Howard, 10 Demetri Catrakilis, 9 Nic Groom, 8 Duane Vermeulen, 7 Siya Kolisi, 6 Schalk Burger, 5 Ruan Botha, 4 Eben Etzebeth, 3 Frans Malherbe, 2 Bongi Mbonambi, 1 Steven Kitshoff.
Replacements: 16 Scarra Ntubeni, 17 Oli Kebble, 18 Vincent Koch, 19 Jean Kleyn, 20. Nizaam Carr, 21 Louis Schreuder, 22 Kurt Coleman, 23 Huw Jones.
Bulls: 15 Jesse Kriel, 14 Francois Hougaard, 13 JJ Engelbrecht, 12 Burger Odendaal, 11 Bjorn Basson, 10 Handré Pollard, 9 Piet van Zyl, 8 Pierre Spies (c), 7 Jacques du Plessis, 6 Deon Stegmann, 5 Grant Hattingh, 4 Flip van der Merwe, 3 Marcel van der Merwe, 2 Adriaan Strauss, 1 Dean Greyling.
Replacements: 16 Callie Visagie, 17 Morné Mellett, 18 Trevor Nyakane, 19 Arno Botha, 20 Lappies Labuschagne, 21 Akona Ndungane, 22 Tian Schoeman, 23 Jurgen Visser.
Venue: DHL Newlands, Cape Town
Referee: Jaco Peyper
Assistant referees: Quinton Immelman, Pro Legoete
TMO: Johan Greeff
By Ross Hastie at Newlands