Tranmere Rovers crashed to only their third defeat of the season as they were twice punished for leaving their goal unprotected.
In the first half John Achterberg was caught off his line by a 40-yard volley from Bristol City's Australian midfielder Luke Wilkshire.
Then, just short of the hour, with Rovers pushing to get back into the game, City broke away and the keeper, running off his line, collided with defender Michael Jackson to leave Stephen Brooker a simple tap-in.
Brooker had got the game out of the blocks in the 19th minute with a close-range right-foot shot as Achterberg scrambled across his goal.
In their three previous visits, Tranmere had gone down 2-0 without scoring and knew they would have a hard task defending their second place in the table against a side unbeaten in ten league and cup games.
Passions quickly bubbled to the surface, but the only real skirmish produced yellows for City captain Tom Doherty and Rovers' Jason McAteer.
Tension between the two had been building up following an early Doherty tackle, but when they finally clashed, it was actually off the field, McAteer having run the ball out for a free-kick. Eight or nine other players got involved before referee Trevor Kettle quietened things.
City built an early advantage down the right where Scott Murray had too much speed for the Jamaican international Ian Goodison who never looked comfortable at left-back.
He didn't come out for the second half and neither did McAteer as his manager Brian Little moved to protect his most valuable asset.
As they chased the game, Tranmere could have lost leading scorer Iain Hume for handling in the home area after being booked in the first half.
Again Little threw out a protective arm and Hume soon made way for Simon Haworth, but the game had already gone well beyond them.
City's final goal came near the end from a twice-taken penalty by Wilkshire after young sub Stephen Gillespie had been brought down by Jackson.