Ulster suffered their first competitive defeat of the season as Northampton secured a shock victory in the Heineken Cup Pool Four game at Ravenhill.
Northampton led 10-6 at half-time thanks to a GJ van Velze try and five points from the boot of Steve Myler.
Paddy Jackson kicked two penalties in the first half and landed a further penalty in the second period.
It was a deserved win for the Saints over a lacklustre Ulster, who are still in control at the top of the pool.
Northampton came into the game determined to make amends for last week's heavy 25-6 defeat at the hands of the Irish province at Franklin's Gardens.
They would have been all-but out of the competition had they lost, but now they will be watching Sunday's match between Castres and Glasgow.
The English Premiership side enjoyed early territorial superiority, but their sustained pressure in front of the Ulster line failed to yield a try, as the Ulster defence held firm.
Myler kicked a seventh-minute penalty for the dominant Saints, who were proving a much different proposition than a week ago.
The visitors were rewarded when number eight Van Velze completed a fine move by shrugging off a weak challenge by Andrew Trimble and diving over in the corner for an 18th-minute try.
Myler added the difficult conversion from the touchline to extend his side's lead to 10 points.
Jackson replied with a penalty from in front of the posts after 31 minutes to record the home side's first points of the match.
Ulster came more into game and Jared Payne squandered a potential try-scoring opportunity when he dropped the ball following a break by flanker Nick Williams.
Jackson missed with his second penalty attempt, the ball drifting wide of the upright. but the fly-half made amends by successfully landing his third kick to reduce the deficit to four points.
A further Jackson penalty three minutes after half-time saw Ulster eat further into Northampton's advantage.
Samu Manoa almost scored his side's second touchdown, but was stopped just short of the line.
A minute later, centre Tom May knocked the ball forward with the try-line at his mercy.
Ruan Pienaar was off target with a long-range penalty attempt and then transferred to the number 10 position after Jackson was forced to retire hurt, Paul Marshall coming on as a replacement.
Charging back row forward Williams was held up just short of the line as Ulster pressed their opponents into a rearguard action.
A Myler drop-goal attempt was charged down and Ulster broke clear but were called back for an infringement when a try looked possible.
Marshall set off on another break from his own half and found Tommy Bowe, who fell short of the line with an injury, which forced him off the field with a serious-looking injury.
Three minutes from time, Ulster were awarded a penalty for a Northampton infringement but Pienaar skewed his kick wide of the posts and the chance to steal victory was gone, although the losing bonus-point was secured.
Northampton captain Phil Dowson told BBC Radio Northampton:
"We asked for a bit of character and I think we saw that in abundance. It doesn't mean we're out of the Heineken Cup group but it at least gives us a shot.
"It was difficult because they're going to try to defend that record. But all the guys responded.
"I think, in spells in the year, we've shown we're an outstanding side but it's that consistency to become a great side.
"We've got Harlequins at Franklin's Gardens and we've got to make sure we take all the intensity into that game."
Northampton coach Jim Mallinder: "We had the determination to put the last game right. We were bitterly disappointed with the first game and we got a lot of criticism from various places.
"The front five were outstanding. The set-piece went really well as did the breakdown. Last week we couldn't get any quick ball and we didn't get on the front foot at all.
"In this game from the start we were on the front foot with our forwards working really hard and we got some good width in our game.
"We could have possibly scored another couple of tries."
Ulster coach Mark Anscombe: "It's sad because it's our first loss but we got beaten by a better team. We're still a good team and we'll bounce back.
"It happens and you've got to acknowledge it and respect it as they did well and deserved their victory. We've got to go back and look at what we need to do better.
I think we created enough opportunities to score points and we weren't patient enough and didn't have enough composure at crucial times."
Ulster: Payne, Bowe, Cave, Wallace, Trimble, Jackson, Pienaar, Court, Best, Afoa, Henderson, Tuohy, Williams, Henry, Wilson.
Replacements: McComb for Bowe (78), P Marshall for Wallace (70), Gilroy for Trimble (58), L Marshall for Jackson (63), Black for Court (70), Lutton for Tuohy (80), Diack for Williams (75)
Not Used: Brady.
Northampton: Foden, K Pisi, G Pisi, May, Elliott, Myler, Dickson, Tonga'uiha, Haywood, Doran-Jones, Manoa, Clark, Wood, Dowson, van Velze.
Replacements: A Waller for Tonga'uiha (65), McMillian for Haywood (80), Mujati for Doran-Jones (54), Sorenson for Clark (64), Lawes for van Velze (26).
Not Used: Roberts, Lamb, Burrell.
Ref: Nigel Owens (Wales).