Glasgow Warriors narrowed the gap on their closest league rivals and hauled Ulster back towards the pack as the race to the play-offs in the RaboDirect PRO12 hots up.
The victory avenged the 18-10 defeat suffered on the opening day of the season at Ravenhill and went some way to addressing the two further defeats suffered at Ulster's hands in the Heineken Cup.
Mark Anscombe's team had only been defeated twice before this season and it trims their advantage at the summit to just three points.
Warriors head coach, Gregor Townsend, said afterwards: "I'm so proud of the players. To put in a shift like that in what was an incredible game of rugby was absolutely brilliant. I thought that, to a man, they were outstanding. The willingness to keep working even when they were out on their feet was a testament to the commitment and drive of this squad.
"Josh Strauss and the second-rows Tom Ryder and Tim Swinson I thought had their best games of the season. Niko was again, in parts, unplayable and the two props, Ed and Ofa, put in an incredible shift.
"We know that there's a lot of hard work to do as the season comes to a climax but this puts us within three points and is a huge boost of confidence having been on the losing side against Ulster already this season."
Springbok scrum-half Ruan Pienaar gave the visitors an early lead with a sixth-minute penalty but it wasn't long before Warriors lock Tim Swinson continued his scoring run, which began last week with a double against the Dragons.
Patient build up through the pack began to stretch the Ulster defence and when the overlap appeared, Mark Bennett was on hand to feed Swinson who dived over in the corner.
Pienaar threaded the posts again as the game stayed tight before a sublime bit of skill turned the match back in Glasgow's favour.
The Warriors repelled a lengthy spell of Ulster pressure, Pienaar missing a penalty before full-back Peter Murchie increased the hosts' advantage just seconds after half-time as he charged down an Ulster clearance and was first up to pounce on the loose ball.
But for the third time Horne missed the conversion, and Pienaar kept the visitors within a converted score with a third penalty.
There were some worrying moments as Warriors winger DTH van der Merwe was stretchered from the pitch after a head injury early in the half, his condition is being assessed in hospital though he was awake and responsive to medics in the immediate aftermath - a trip to the hospital a precautionary measure.
Robbie Diack finally broke the hosts' resolve after a solid spell of domination, but referee Nigel Owens, to the relief of Scotstoun, called play back for a forward pass.
Ulster were now starting to sense their rivals were feeling the tiring effects of their increasingly desperate defending.
And, in the 67th minute, the pressure finally told when centre Stuart Olding crashed over in the corner for his first senior try. Pienaar, crucially, missed the conversion from a tight angle as the Warriors maintained their lead by just solitary point with just 13 minutes remaining.
Ulster were now in the ascendancy but another moment of brilliance involving Matawalu established the home side's decisive advantage and secured an all-important bonus fourth try point.
He finished off a move that started with some clever work by Horne inside his own half, Graeme Morrison continued the good work and Matawalu was able to race behind the posts.
Warriors: Murchie, Seymour, Bennett, Dunbar, van der Merwe, Horne, Matawalu, Fainga'anuku, MacArthur, Kalman, Swinson, Ryder, Strauss, Barclay, Wilson.
Subs: Wight for Murchie (73), Morrison for Bennett (57), Kennedy for van der Merwe (49), Brown for MacArthur (70), Mountford for Kalman (78), Eddie for Barclay (62), Campbell for Wilson (70). Not Used: Pettie.
Ulster: Andrew, Allen, Trimble, Olding, Walsh, Wallace, Pienaar, Black, Brady, Afoa, McComb, Tuohy, Joyce, Birch, Diack.
Subs: P. Marshall for Wallace (51), Herring for Brady (49), McComish for Birch (49). Not Used: Lutton, Warwick, O'connor, Cave, Cochrane.
|5||Neath Swansea Ospreys||22||14||7||1||62|
|11||Newport Gwent Dragons||22||6||16||0||28|
|12||Zebre Rugby *||22||0||22||0||7|
* A points deduction has been applied.
|Ulster Rugby||37||v||13||Cardiff Blues|
|Connacht Rugby||3||v||20||Glasgow Warriors|
|Edinburgh Rugby||31||v||24||Newport Gwent Dragons|
|Leinster Rugby||37||v||19||Neath Swansea Ospreys|
|Llanelli Scarlets||17||v||41||Benetton Treviso|