The Stormers ended former Super Rugby champions the Bulls hopes of reaching the play offs when they beat the Pretoria franchise 16-0 at Newlands in Cape Town.
The Bulls needed to beat the Stormers with a bonus point for scoring four tries but instead they were kept scoreless in the contest held in front of 34000 fans.
The result is the fourth time in the Bulls Super Rugby history that they have been kept pointless in a match and the last time it happened was in 2011 against the Crusaders when they were beaten 27-0 in Timaru.
The Bulls were also beaten 23-0 by the Highlanders in 2005 and 29-0 by the Sharks in 1999.
The Stormers were already out of contention for the Super Rugby play off while the Sharks have already won the South African conference so they are the only team that will contest the play offs.
All of the points in the match were scored in the first half and the Bulls were kept to 27% territory and possession in the half and the Stormers were deserved winners on the back of that first half performance.
Playing without relegation fears or play-off anxiety brought out the best in the Stormers, as the Bulls were forced to settle for a largely defensive role for almost all of the first half.
The Bulls were forced into an 11th hour change after fullback Jurgen Visser withdrew during the warm-up and Ulrich Beyers was named as a late replacement.
Despite the heavy rainfall for the past two days, the teams were presented with a well-drained field at the kick-off.
Freezing temperatures were not enough to keep the crowd, who braved the conditions and soon warmed to the action as the Stormers dominated proceedings in the opening 10 minutes, when they threatened to score on a number of occasions.
Stormers flyhalf Kurt Coleman slotted a fourth minute penalty after his teammates impressed with strong ball carries into the Bulls 22m area.
The early pressure took its toll on the Bulls' defence when they leaked an inviting opening in midfield and Stormers fullback Jaco Taute streaked through for a 13th minute converted try.
The Bulls' defence was still under pressure in the ensuing stages but other than conceding another Coleman penalty in the 24th minute, they kept their lines intact.
As the half-time break approached, the Stormers continued to run hard at their visitors, but a combination of stout defence and poor decision-making denied them a deserved second try.
On the stroke of half-time, Coleman scored a third penalty to round off the first-half, and as it turned out, it was also to be the final score.
The Bulls secured more possession in the opening 10 minutes of the second half and their efforts were worth a reward.
Errors, however, crept into their game at crucial stages and they failed to exploit their early second-half territorial advantage.
Once the Stormers saw off the Bulls' early pressure, they managed to transfer play to their opponents' half on the hour but with it came a brief downpour, which made underfoot conditions slippery.
The hosts were never able to regain their momentum and were not able to string as many phases together, seldomly threatening the Bulls' tryline.
Stormers leftwing Cheslin Kolbe came close with a try in the 67th min but he was shepherded into touch by the cover defence.
Three minutes later, the Cape side decided to put the result beyond doubt when referee Craig Joubert awarded them a 70th minute penalty, but Coleman's kick attempt was thwarted by the upright.
Defeat for the Bulls means an end to their slender chance of reaching the play-offs and they will now finish the season in Pretoria with a match on Friday against the Melbourne Rebels.
Final Score Stormers 16 (16) Bulls 0 (0)
Tries - J,Taute
Pen - K.Coleman 3
Con - K.Coleman
Referee: Craig Joubert
Assistant Ref 1: Marius Jonker
Assistant Ref 2: Quinton Immelman
15. Jaco Taute , 14. Gio Aplon , 13. Sailosi Tagicakibau , 12. Juan de Jongh , 11. Cheslin Kolbe , 10. Kurt Coleman , 9. Nic Groom , 8. Duane Vermeulen , 7. Schalk Burger (captain) , 6. Nizaam Carr , 5. Ruan Botha , 4. Michael Rhodes , 3. Pat Cilliers , 2. Deon Fourie , 1. Alistair Vermaak
Replacements: 16. Tiaan Liebenberg , 17. Sti Sithole , 18. Martin Dreyer , 19. Manuel Carizza , 20. Siya Kolisi , 21. Louis Schreuder , 22. Peter Grant , 23. Seabelo Senatla (On Super Rugby debut for the Stormers)
Ulrich Beyers, Akona Ndungane, JJ Engelbrecht, Jan Serfontein, Bjorn Basson , Handre Pollard, Francois Hougaard , Grant Hattingh , Jacques Engelbrecht , Jono Ross , Victor Matfield (c), Paul Willemse, Werner Kruger, Callie Visagie , Dean Greyling.
Replacements: Bongi Mbonambi, Marcel van der Merwe , Morne Mellett , Marvin Orie, Roelof Smit, Piet van Zyl , Jacques-Louis Potgieter, William Small-Smith.