Ulster lost their URC semi-final in the most dramatic fashion with a late converted try sending the DHL Stormers into the final against the Vodacom Bulls.
Having been knocked out of Europe thanks to a late Toulouse score in April, Dan McFarland's side were once again out of luck after leading for most of the encounter in Cape Town.
All of the scores came in a high-quality first half except for the winning try and conversion in the last play of the game.
Ulster, who were bidding to get to their third final, were holding on to a 15-10 lead against a home team that had been reduced to 14 men in the 70th minute following an Adre Smith red card.
However, the energy expended over the course of the game eventually told and Warrick Gelant’s late try, which was converted by Manie Libbok in the 86th minute, sent the home supporters wild.
With the Stormers also eyeing a home final, they burst out of the blocks and had crossed twice before Ulster had a chance to update their clocks to the local time.
James Hume got turned over by fit-again Damian Willemse and Manie Libbok's kick provided the platform for the forwards to do their work, hooker JJ Kotze getting the touchdown after a driving maul.
The out-half missed the extras but when Billy Burns’ restart went straight out the hosts had the momentum.
When they worked another lineout on the Ulster 22, scrum-half Herschel Jantjies worked a one-two with Springboks hopeful Evan Roos and the number 8 had an easy run-in.
Ulster looked spooked but responded with Robert Baloucoune getting on the end of a Stewart Moore pass to finish, the score awarded after a quick check for a forward pass.
"Flat," said referee Mike Adamson.
John Cooney missed the conversion from the sideline but Ulster had a foothold and found themselves ahead just before the half-hour mark.
Again, it was a backline move, used to such effect in the quarter-final win over Munster, that did the damage.
It came after a super Burns break where he twice collected his own kicks and Ulster were only denied when Seabelo Senatla's legs got in the way of an offload that Ethan McIlroy was set to take.
The move for the second try, when it came, wasn’t spectacular but it worked a treat, the quick movement of the ball negating the Stormers dominance at the breakdown.
Hume skipped Moore and found Baloucoune out wide and the Ireland winger busied his man before passing back inside for Moore to dot down with Cooney landing the kick.
The Stormers, who had won nine of their last ten games here, piled on the pressure but twice in quick succession, the Ulster defence stayed patient and buoyed by forcing a panicked drop-goal attempt by Libbok, went up-field to extend their lead.
Frans Malherbe jumped across the line from an Ulster throw-in and Cooney punched the penalty over to give McFarland’s men a 15-10 lead at the break.
The start of the second half was scrappy, with Moore and Cooney kicking the ball out on the full either side of a hip injury ending Baloucoune's day.
Still, twice the visitors worked territory with Burns, Stuart McCloskey and Cooney leading the charge, but a few moments later, Rob Herring sheared off a maul close to the line and knocked on. More patience would likely have resulted in a try.
The Western Province then let Ulster off with Libbok, poor out of hand all day, kicking a penalty for touch dead after declining a very kickable shot.
But Ulster couldn't extricate themselves and needed a huge jackal penalty from Duane Vermeulen, who had spent seven years at the South African club, to get out of their own half as John Dobson sent on four new forwards.
One of those, Adre Smith, then proceeded to interfere with Henderson’s eye in a maul, pawing twice at the Ireland lock; Adamson decreed that it was a red card offence and the Stormers had to engineer a comeback with 14 men for the last 10 minutes.
It made for a frenetic ending. Henderson carelessly gave away a penalty; Stormers mauled towards the line but got held up. Kieran Treadwell infringed at a lineout but Vermeulen got his hand to the throw in and bought Ulster some space.
Deep into overtime, Ulster were penalised under the posts as the hosts bashed at the line.
Opting for the scrum, they trucked the ball up before Libbok spun the ball wide for Gelant to dive over.
For once, the out-half found the target and once again it was heartbreak for Ulster, who would have hosted the Bulls in Belfast had they held out.
Instead the two new South African franchises in the competition will face off next Saturday and for the first time since 2007 there will be no Irish involvement in the final.
Stormers: Warrick Gelant; Seabelo Senatla, Ruhan Nel, Damian Willemse, Leolin Zas; Manie Libbok, Herschel Jantjies; Steven Kitshoff (c), JJ Kotze, Frans Malherbe; Salmaan Moerat, Marvin Orie; Deon Fourie, Hacjivah Dayimani, Evan Roos.
Replacements: Andre-Hugo Venter, Brok Harris, Neethling Fouche, Adre Smith, Ernst van Rhyn, Nama Xaba, Godlen Masimla, Sacha Mngomezulu.
Ulster: Stewart Moore; Rob Baloucoune, James Hume, Stuart McCloskey, Ethan McIlroy; Billy Burns, John Cooney; Andrew Warwick, Rob Herring, Tom O'Toole; Alan O'Connor, Iain Henderson (capt); Marcus Rea, Nick Timoney, Duane Vermeulen.
Replacements: John Andrew, Eric O'Sullivan, Gareth Milasinovich, Kieran Treadwell, Matty Rea, Nathan Doak, Ian Madigan, Ben Moxham.
Referee: Mike Adamson (SRU)