Northampton Saints moved up to fifth in the Premiership as they secured a 39-22 bonus-point win over Bristol.
Tom Collins, Rory Hutchinson and Lewis Ludlum gave Saints a 24-17 half-time lead as the two sides traded tries, but Semi Radradra, Callum Sheedy and Yann Thomas kept Bristol in it at the break.
But second-half scores from Tommy Freeman and Collins sealed the win before Alapati Leiua's consolation try.
Northampton are now unbeaten in five matches in all competitions.
While Bristol's form has been inconsistent this season, they were unbeaten in their last three matches at Franklin Gardens and made the better start, Harry Thacker setting up Radradra to score first, in a two-against-one overlap in the corner.
The TMO was kept busy as he ruled out tries for Saints captain Ludlum after Leuia's tackle, Bears hooker Harry Thacker for a forward pass, and for Freeman, whose heel was agonisingly in touch in collecting Dan Biggar's superb cross-field kick.
Collins finally broke through for Northampton, scoring in acres of space, after Hutchinson brilliantly found a gap in the Bristol defence.
Hutchinson then got his own name on the scoresheet minutes later, finding another hole to drift through and go over under the posts and make it 17-5.
Sheedy touched down in the corner to reduce the Bears' deficit, but the first-half tries kept changing hands as skipper Ludlum was next to go over, before Thomas scored from close range to keep Bristol within seven at half-time.
Wins in their last two Premiership matches had seen Northampton reignite their chase for play-off places, but with Exeter, Gloucester, Sale and London Irish all in contention, the home side needed maximum points.
Biggar kicked another penalty in a 14-point haul, and Freeman secured the bonus point capitalising on a line-out drive to dive over.
The win was all-but assured after Radradra and Fitz Harding were both sent to the bin for poor tackles, and Collins used Saints' two-man advantage to score his second as the hosts closed to within four points of fourth-placed Exeter with a game in hand.
Leiua scored a late consolation to earn a losing bonus point for Bristol, who have now lost nine of 10 away matches this season and sit 10th.
Northampton director of rugby Chris Boyd told BBC Radio Northampton:
"We were a little bit grumpy at half-time because we created, we felt, about eight opportunities and converted three. Converting the three was OK, but another four or five there went begging.
"We coughed up some really soft tries. We just knew that if we stuck to it we hoped we'd get the result in the end.
"We've talked a lot as a team about the silent work, all the preps that punters don't see around the work rate, the effort and the commitment.
"All three of them were good [the back row], but it would be unfair to single anybody out - I thought they were just all pretty decent today."
Bristol director of rugby Pat Lam told BBC Radio Bristol:
"We talked about it, they're a dangerous side so we need to keep the ball. We scored a good try at the start, we left some points out there, other opportunities, then we just turned some ball over and they came through.
"At 24-17 we were right in the game, then again, baffling decisions, consistency... we keep seeming to get yellow cards and red cards [against us] but we don't get any for ourselves.
"I thought the hit on Semi we might have got one there, but then we lost two. Down to 13 men, we conceded two tries and the game was just hanging in there to get the bonus point. The boys did that.
"All in all, a frustrating game."
Northampton: Furbank; Freeman, Dingwall, Hutchinson, Collins; Biggar, Mitchell; Waller, Matavesi, Hill, Ribbans, Ratuniyarawa, Lawes, Ludlam (capt), Augustus.
Replacements: Haywood, Auterac, Carey, Moon, Coles, James, Proctor, Hendy.
Sin bin: Paul Hill (66)
Bristol: Piutau; Naulago, Radradra, Frisch, Leiua; Sheedy, Uren; Y Thomas, Thacker, Afoa, Attwood, Joyce (capt), Vui, Heenan, Harding.
Replacements: Kerr, Salomon, Armstrong, Jeffries, Randall, Eden, O'Conor, Morahan.
Sin bin: Semi Radradra (55), Fitz Harding (59)
Referee: Karl Dickson (RFU).