Tony Mowbray rang the changes, making six in all for the trip to Bristol City, but saw his side pick up arguably their best result of the season.

Bradley Johnson had Rovers ahead inside two minutes, firing home from a well-worked short corner, before having a key role to play in the second scored by substitute Adam Armstrong.

Rovers were good value for their win, a fifth in six matches, as they head in to back-to-back home games against Wigan and Birmingham City.

It was a first clean sheet on the road since August, and made it seven points from the last nine available on their travels.

Rovers had scored seven goals in the opening 15 minutes of matches this season, and added an eighth with just 90 seconds on the watch.

Two of the six changes combined as Lewis Holtby’s short corner found Johnson who thumped the ball beyond Dan Bentley as he peeled off the pack of players in the six yard box.

The hosts were soon coming in to the game though, and but for two excellent Darragh Lenihan blocks, would have levelled inside 10 minutes. The first saw him get in the way of a Niclas Eliasson shot before blocking an Ashley Williams goalbound effort from 10 yards that look destined for the net.

The game was becoming scrappy, Rovers looking to play on the counter-attack with Sam Gallagher and Ben Brereton operating as a front two.

A flash point came when the game was stopped for Gallagher to receive treatment, after a clash with Tomas Kalas, as Bristol City broke forward. Lee Johnson was booked for his protestations as things become heated on the touchline.

Williams had already had an excellent chance to level for the hosts, and would get an even better one midway through the half. Eliasson was putting in some dangerous deliveries on his left foot from the right, one finding the centre half unmarked at the far post, only to plant his header wide of the target. Andi Weimann was waiting at the far post should Williams have opted to square it in what was a big let off for Rovers.

Going with a front two though meant Rovers always had a presence at the top end of the field. Gallagher was able to pick up a Bennett header to test Bentley with a fizzing effort from 25 yards which the keeper did well to get down to, and palm away from the waiting Brereton.

And the hosts’ keeper was called in to action again 10 minutes before the break, denying Johnson this time as the midfielder shot too closely to him after being teed up by Brereton.

There was a real edge to a competitive edge, with a flashpoint as the half-time whistle went, with members of coaching staff from both teams involved in an altercation.

Continued free kicks kept breaking up play in the early stages of the second half with Rovers seemingly a little too keen to look for the killer ball when winning it back.

The hosts turned to their bench moments before the hour mark but neither side could gain any sort of control or momentum.

The game was crying out for some quality from either team, and when it arrived, the hosts should have levelled. They cut Rovers open down the right and sub Jack Hunt squared the ball along the six-yard box, but the stretching Famara Diedhou couldn’t turn home at the far post.

It was a Rovers substitute though who would make the biggest impact. Johnson picked the pocket of Massengo on halfway and played in Armstrong who was clean through. With only the keeper to beat, he rolled the ball under the advancing Bentley for 2-0.

Joe Rothwell tried to make the most of his opportunity in the final 10 minutes, driving at the heart of the defence to edge of the box where Kalas well placed to block his shot.

City were looking short of ideas, as a rare sight of goal four minutes from time saw Weimann hook well of the target with his shot on the turn.

The hosts didn’t trouble Rovers thereafter, it what turned out to be a well deserved three points on the road.

Bristol City: Bentley, Pereira (Hunt, 59), Kalas, Williams, Rowe (Szmodics, 69), Massengo, Nagy (O’Dowda, 59) , Brownhill, Weimann, Eliasson, Diedhou

Subs: Maenpaa, Baker, Smith, Semenyo

Rovers: Walton, Nyambe, Lenihan, Adarabioyo, Bell, Travis, Johnson, Bennett, Holtby (Rothwell, 79), Brereton (Armstrong, 69) Gallagher

Subs: Leutwiler, Downing, Evans, Buckley, Graham