Niclas Eliasson's brilliant first-half goal proved the winner in a stirring FA Cup fourth-round tie as Bristol City edged out Bolton 2-1 at Ashton Gate.
The visitors took a sixth-minute lead when defender Mark Beevers was given the freedom of City's penalty area to shoot home unmarked with a sweet right-footed half-volley from a Luca Connell cross.
But the advantage lasted less than two minutes. City winger Callum O'Dowda was allowed time to control a chip to the edge of the box on his chest before sending a low volley past the diving Remi Matthews.
Lee Johnson's team went on to play some slick attacking football in the first half and took a deserved lead on the half hour just after Bolton's Joe Pritchard and Craig Noone had seen shots blocked in a crowded box.
The break out of defence saw O'Dowda race forward and when the ball reached Eliasson, the Swede danced past two defenders before planting a sweet left-footed shot into the top corner from just inside the penalty area.
The only surprise was that there were not more goals, with both sides committed to attack and Bolton playing a full part in the entertainment.
City could have been further in front by the break. Matthews made two diving saves to deny midfielder Joe Morrell.
Famara Diedhiou and Kasey Palmer shot wide from good positions, while at the other end Frank Fielding had to deal only with a deflected shot from distance by Josh Magennis.
Chelsea loanee Palmer was a constant threat with eye-catching forward runs from midfield and is already a firm favourite with Ashton Gate fans, having signed this month.
The second half saw City pour forward and Palmer had a shot saved from Diedhiou's 57th-minute pass.
But Wanderers stuck gamely to their task and Fielding had to be alert to parry Pawel Olkowski's shot from a narrow angle.
With his side enjoying a rare period of dominance, Bolton boss Phil Parkinson introduced Sammy Ameobi as a 63rd-minute substitute for Pritchard.
The final half hour brought goalmouth action at both ends, Bolton staging a grandstand finish that didn't prove quite enough to earn a replay.
Diedhiou had opportunities to extend City's lead as the hosts continued to create the better chances.
But Wanderers fought to the last and caused some panic in the penalty area themselves in the closing stages.
The result extended City's unbeaten run in all competitions to 12 matches.