Connacht upset the odds with a stunning victory against Ulster in Belfast to advance to the semi-finals of the BKT United Rugby Championship.
Never beaten in a home knock-out match at the Kingspan, Ulster's season came to a jarring halt as the visitors booked an away date with either the Stormers or the Bulls, who meet tomorrow in Cape Town.
Jack Carty kicked all 15 points and despite a late period of pressure, Dan McFarland’s side left it too late and Connacht, who finished the regular season 18 points behind Ulster in the table, progressed with just a second win in their last 11 games against Irish opposition and their first win at the Kingspan since a Rainbow Cup game in 2021.
Having lost twice to Ulster during the season, Connacht were more disciplined and made the hosts pay for the concession of 18 penalties.
It was a tight and cagey opening quarter played mostly between the two 22s but, for all the errors, the high stakes nature of the game made it an entertaining fare.
There was an element of shadow boxing with Shamus Hurley-Langton's strong running on one side and Robert Balcoucoune's pace on the other creating half chances that neither team could take full advantage of.
A messed-up tap penalty close to the Ulster line led to a telling off for Cian Prendergast after his over-reaction led to pushing and shoving under the posts, and one of 14 first half penalties conceded between the teams.
Connacht should have taken the lead but, after a clever dummy in midfield, Tom Farrell inexplicably failed to pass inside to Caolin Blade who had a run-in and Ulster, who lost Michael Lowry to a HIA in the build-up, survived.
The hosts were keen to get Baloucoune involved and he created an extra man out wide that led to an Ulster breakout and when Prendergast got caught offside in midfield, John Cooney tapped over the penalty for the first score in the 21st minute.
That was soon cancelled out when Jeffrey Toomaga-Allen was too slow to roll away after a tackle inside the 22, with Carty levelling up.
Connacht had the upper hand at the scrum and Hurley-Langton was dominating the breakdown and it allowed Connacht to get into position to punish Ulster.
A clever Prendergast grubber saw a retreating Baloucoune outnumbered and another offside under the posts in first-half overtime gave Carty two simple kicks and Connacht had an unflattering 9-3 lead.
The Westerners, beaten in their last three games against Ulster, soon pushed further ahead with Carty adding his fourth penalty as the Ulster scrum continued to malfunction.
Indeed, they should have been even further ahead but for impatience while in good position close to the line and some poor handling, which allowed a shook-looking Ulster to clear.
A half-break by James Hume almost set Baloucoune clear but Hansen’s cover tackle halted the Ulster attack.
But the momentum had shifted and when Ulster got a lineout close to the Connacht line the result was almost inevitable.
Tom Stewart, the competition’s top try-scorer, was stopped just short of the line after breaking off the maul but captain Alan O’Connor was on hand to dot down, with Cooney converting to make it a two-point game.
Baloucoune spun out of a couple of tackles before Duane Vermeulen, playing his last game for Ulster, was pushed into touch in the corner, but the replay showed that the last touch came off a Connacht defender and Ulster looked poised to deliver the killer blow.
However, Connacht won a penalty at the breakdown and even when they failed to find touch, Ulster didn’t punish, sloppy again in the tackle area.
Kieran Marmion, bound for Bristol next season, beat two defenders and made 30 yards before Ulster went offside, allowing Carty to extend the lead to five with just five minutes left on the clock.
Ulster pressed but Connacht held their nerve and discipline to see out a famous victory.
Ulster: Mike Lowry; Rob Baloucoune, James Hume, Stuart McCloskey, Jacob Stockdale; Billy Burns, John Cooney; Rory Sutherland, Rob Herring, Jeffery Toomaga-Allen; Alan O'Connor (capt), Kieran Treadwell; Dave McCann, Nick Timoney, Duane Vermeulen.
Replacements: Tom Stewart, Eric O'Sullivan, Gareth Milasinovich, Sam Carter, Jordi Murphy, Nathan Doak, Stewart Moore, Craig Gilroy.
Connacht: Tiernan O'Halloran; John Porch, Tom Farrell, Bundee Aki, Mack Hansen; Jack Carty (capt), Caolin Blade; Denis Buckley, Dave Heffernan, Finlay Bealham; Josh Murphy, Niall Murray; Shamus Hurley-Langton, Conor Oliver, Cian Prendergast.
Replacements: Dylan Tierney-Martin, Jordan Duggan, Jack Aungier, Oisín Dowling, Jarrad Butler, Kieran Marmion, Tom Daly, Byron Ralston.
Referee: Andrew Brace (IRFU)