Glasgow beat Ulster to move to within three points of the Pro12 leaders.
Tries by Tim Swinson and Tommy Seymour helped Glasgow into a 10-6 lead at the break, Ruan Pienaar kicking the visitors' first-half points.
Peter Murchie took advantage of Paddy Wallace's error to stretch the hosts' advantage but Stuart Olding responded with a score for Ulster.
Nikola Matawalu went over to create a six-point gap and Warriors endured a nervous finish to claim victory.
Mark Anscombe's Ulster went into the match at Scotstoun boasting a seven-point lead and both sides were without several players due to be involved in Six Nations matches over the weekend.
Pienaar was off target with his first kick but soon made amends to put Ulster three points ahead.
Glasgow responded and a concerted period of pressure resulted in a penalty but Peter Horne's effort fell short of the posts.
However, Warriors kept forcing the issue and, after several phases, Swinson crossed for the opening try. Horne was again unsuccessful with the boot.
Ulster's Michael Allen then broke through towards the try line but was impeded, giving Pienaar a simple kick right in front of the posts.
Impressive runs by Matawalu and DTH van der Merwe failed to yield a score for the hosts.
But another burst by the former opened up the space for Seymour to touch down in the corner. However, Horne's frustrating night continued with another miss.
Pienaar could have reduced the visitors' deficit but curled the final penalty of the first half wide.
Murchie capitalised on hesitancy by Wallace at the start of the second period, with the full-back charging down a kick and running in a simple try. Horne once again missed the conversion.
A penalty by Pienaar brought Ulster back to within six points and Glasgow were then dealt an injury blow as van der Merwe was stretchered off to be replaced by Sean Kennedy.
Ulster began to dominate and Robbie Diack touched down in the corner only for play to be brought back for a forward pass.
But Olding did cross to reduce Glasgow's lead to one point and Pienaar missed the chance to put Ulster ahead by kicking the conversion wide.
Graeme Morrison's introduction from the bench bolstered Glasgow's attack and the Scotland international and Kennedy combined to set up Matawalu's try, which ensured a bonus point for Gregor Townsend's side.
Another miss from Horne meant Ulster needed a converted try to win but Warriors held firm to leave the visitors with only a losing bonus point.
Glasgow: Murchie, Seymour, Bennett, Dunbar, van der Merwe, Horne, Matawalu, Fainga'anuku, MacArthur, Kalman, Swinson, Ryder, Strauss, Barclay, Wilson.
Replacements: 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.
Replacements: P. Marshall for Wallace (51), Herring for Brady (49), McComish for Birch (49). Not Used: Lutton, Warwick, O'connor, Cave, Cochrane.
Ref: Nigel Owens (Wales)