The Bulls kept themselves firmly in United Rugby Championship title contention by defeating fierce South African rivals the Stormers 40-22 at a sold-out Loftus Versfeld.
Hooker Johan Grobbelaar scored two tries, and there were also touchdowns for wing Canan Moodie and scrum-half Embrose Papier as the Bulls recorded an eighth league win from 11 starts this season in bonus-point fashion.
Fly-half Johan Goosen complemented those scores by kicking 20 points from four penalties and four conversions, with the Bulls repeatedly punishing poor Stormers discipline.
Wing Ben Loader, flanker Evan Roos and replacement hooker Andre-Hugo Venter crossed for the Stormers, while Manie Libbok booted a penalty and two conversions, but they were unable to threaten a Bulls team that always had control up-front.
Kick-off was delayed by an hour due to thunderstorms in the Pretoria area, but the Bulls made a flying start as they took a second-minute lead following outstanding work by their forwards that was finished off by Grobbelaar, with Goosen converting.
Goosen then kicked two penalties in three minutes to compound Stormers' early problems, yet the visitors stirred after 16 minutes, showcasing their quality through a flowing move from deep before centre Dan du Plessis put Loader over for an outstanding score.
Goosen soon completed a penalty hat-trick, and with Stormers' woeful discipline continuing to offer him chances, he struck another three-pointer from just inside his own half to open up a 14-point lead.
The Stormers looked dangerous with ball in hand, and their cause was helped by a yellow card for Bulls centre Stedman Gans following a deliberate knock-on.
As the Bulls regrouped, a powerful Stormers lineout drive created a platform for Roos to touch down, and Libbok's conversion meant they were firmly back in the contest before he landed a penalty that made it 19-15 at half-time.
The Bulls had lost much of their early momentum and looked edgy under pressure, only for the Stormers to lose full-back Warrick Gelant, when he was yellow-carded after head-on-head contact with Kurt-Lee Arendse.
And Bulls immediately made their numerical advantage count as Grobbelaar pounced for his second try - converted by Goosen - to leave the Stormers once again contemplating poor discipline before Moodie crossed and Goosen again added the extras.
Venter's try 19 minutes from time, which Libbok converted, gave Stormers a glimmer of hope, but that was extinguised by Papier's try during the closing stages.
Point-scorers
Bulls 40 — Tries: Johan Grobbelaar (2), Canan Moodie, Embrose Papier; Conversions: Johan Goosen (4), Penalties: Goosen (4)
Stormers 22 — Tries: Ben Loader, Evan Roos, Andre-Hugo Venterl Conversions: Manie Libbok (2); Penalties: Libbok