Manchester City preserved their 100% home record in the Premier League by overcoming a determined Bolton side.
Vassell (left) was a constant danger to Bolton
Rolando Bianchi slotted in from six yards after a Ricardo Garner mistake to put City ahead before El-Hadji Diouf steered in a shot to level.
A Kevin Nolan strike put Bolton ahead but Lubo Michalik deflected in Dietmar Hamann's shot as City hit back.
Darius Vassell's clever finish put the hosts back in front and Kelvin Etuhu's injury-time shot secured the points.
Their ninth successive home league victory lifted City back into the top four, just four points behind current leaders Arsenal.
Bolton signalled their intention of blighting City's home record, which had brought them eight wins out of eight, when they created two early sights of goal for Nicolas Anelka.
But the Frenchman's control let him down for the first and his normal clinical edge in front of goal deserted him when he mistimed his effort in trying to flick a high ball into the net.
City were on the backfoot but were gifted the lead after a mistake by Gardner, who missed an attempted clearance and Vassell pounced only for his angled shot to parried by keeper Jussi Jaaskelainen.
But Vassell quickly gathered the loose ball and his low cross was steered on by Michael Johnson to leave the unmarked Bianchi to side-foot into an empty net.
City were buoyed by the goal and threatened to add to their lead before Anelka responded for the visitors with an angled strike which hit the face of the post.
Bolton stuck to their task and were rewarded with two well-worked goals in seven minutes.
Nolan scored an excellent goal to put his side ahead
The equaliser came when Anelka back-heeled to Diouf, who spread the ball wide to Kevin Davies and then diverted his team-mates low angled cross into the top corner form eight yards.
And Gardner atoned for his earlier error when he helped set up Bolton's second with a cut back that was expertly fired past keeper Andreas Isaksson by Nolan with the outside of his right foot five minutes before the break.
City boss Sven-Goran Eriksson took off Gelson Fernandes at the break and brought on Etuhu and the move had an immediate impact.
The substitute did well to keep possession in the Bolton box before finding a pass to Hamann, whose shot was deflected in off the head of Michalik.
City looked the most likely winners from then on and Johnson thought he had given the home side the lead only to see his side-footed shot come back off the post.
But Vassell was on hand to turn in Petrov's low cross after 77 minutes and Etuhu side-footed just before the whistle to round off a hard-fought win.
Man City boss Sven-Goran Eriksson:
"When I looked at the players as they were about to come out for the second half, they looked a bit like a defeated team.
"Their heads were down and I said if they carry on looking like that we would not win the game.
"It changed them and after that they were a lot more positive."
Bolton boss Gary Megson:
"We lost because we didn't defend properly at important times.
"We've beat ourselves. They haven't had to work hard enough for their goals. We can't get anywhere doing that.
"We've let in eight goals in our last two away games. That's an absolute nonsense at the level we are at and if we don't put it right we will go down."
Man City: Isaksson, Corluka, Richards, Dunne, Ball, Gelson (Etuhu 46), Hamann, Johnson, Petrov (Garrido 83), Bianchi (Mpenza 87), Vassell.
Subs Not Used: Hart, Geovanni.
Goals: Bianchi 7, Michalik 48 og, Vassell 77, Etuhu 90.
Bolton: Jaaskelainen, Hunt (McCann 85), Meite, Michalik, Gardner, Nolan, Campo (Giannakopoulos 86), Guthrie, Diouf, Davies, Anelka.
Subs Not Used: Al Habsi, Samuel, Speed.
Goals: Diouf 31, Nolan 40.
Ref: Peter Walton (Northamptonshire).