Edin Dzeko scored a minute after coming off the bench to give Manchester City a dramatic late win over Fulham.
The Cottagers took an early lead when Pablo Zabaleta was adjudged to have fouled John Arne Riise in the area and Mladen Petric slammed home the penalty.
Fulham keeper Mark Schwarzer made a series of fine saves before Sergio Aguero levelled from close range.
And City were unable to turn pressure into chances before Dzeko slammed home a Gael Clichy cross in the 87th minute.
The champions had failed to triumph in their four previous games in all competitions, so this was a welcome return to winning ways for Roberto Mancini's men - especially because it seemed victory was set to elude them again.
City's super sub
Manchester City striker Edin Dzeko has now scored six Premier League goals as a substitute since the start of last season, more than any other player.
There was minimal contact from Zabaleta's hand on Riise's midriff as the Fulham defender cut into the area, but it was enough to send Riise tumbling to the ground and, after Halsey pointed to the spot, Petric made no mistake with his penalty.
Mancini pleased with City win
Any sense of injustice over that decision did not fuel an immediate response from City, who saw plenty of the ball but made few inroads into the Fulham area as they searched for a leveller.
In fact, the Cottagers were looking more dangerous on the break, with Petric wasting a decent sight of goal when he blazed over from the edge of the box after good work by Hugo Rodallega down the left.
Only around the half-hour mark did City begin to seriously threaten and Aguero should have done better when David Silva's corner was flicked on to him at the back post, only to nod into the side netting.
One of Mancini's problems with his side this season has been their failure to take chances like that one, but the main reason City had to wait to equalise was the form of Schwarzer rather than any more poor finishing.
Jol admits City 'deserved win'
Clichy fired a rasping shot at the veteran Fulham keeper from the edge of the area, the Australian denied Tevez by diving to recover the ball on his line after a goalmouth scramble, and was at full length to keep out Silva's low shot.
Even for City's goal, Schwarzer made another inspired stop to keep out the touch Silva got on Tevez's deflected strike, but he could do nothing to stop Aguero following up to tap home from close range.
The visitors continued to dominate possession after the break but the chances dried up.
Aguero saw a glancing header drift wide and Zabaleta and substitute Mario Balotelli both curled efforts just off target, and it appeared Fulham's well-organised defence would hold out for a point until Dzeko replaced Javi Garcia with four minutes left.
Sixty-six seconds later, Clichy sent over a dangerous cross from the left and Riise's attempt to clear only succeeded in finding Dzeko, who took a touch before firing a powerful shot into the roof of the net.
Fulham boss Martin Jol on Riise's mistake for City's winner:
"It was a mistimed ball. I would hit it with my right foot instead of trying to head it. It was a bad clearance.
"I think he will be disappointed because the mistake he made they punished.
"They are a very good team but there is always a possibility against them to play your football like, for example, Arsenal did last week.
"We couldn't play our style, especially in the second half. We couldn't keep the ball, they were stronger than us and more eager to score.
"The only thing we could do was defend, defend, defend and that is probably not enough if you would like a result against them."
Free kick awarded for an unfair challenge on Vincent Kompany by Hugo Rodallega.
Effort on goal by Sergio Aguero from just inside the penalty area goes over the target.
Mario Balotelli takes a shot. Blocked by Aaron Hughes.
Sergio Aguero takes a shot. Brede Hangeland gets a block in. Yaya Toure takes a shot. Save made by Mark Schwarzer.
The assist for the goal came from Mario Balotelli.
86:22 Goal scored
Goal! - Edin Dzeko - Fulham 1 - 2 Man City Edin Dzeko gets on the score sheet with a goal from inside the box to the top right corner of the goal. Fulham 1-2 Man City.
John Arne Riise restarts play with the free kick.
Substitution Edin Dzeko replaces Francisco Javi Garcia.
Unfair challenge on Giorgos Karagounis by Pablo Zabaleta results in a free kick.
Giorgos Karagounis gives away a free kick for an unfair challenge on Sergio Aguero. Shot comes in from Mario Balotelli from the free kick, blocked by Bryan Ruiz.
Substitution Chris Baird goes off and Giorgos Karagounis comes on.
Mario Balotelli produces a right-footed shot from outside the penalty box and misses right.
Unfair challenge on Sascha Riether by Gael Clichy results in a free kick. Direct free kick taken by Sascha Riether.
Substitution Samir Nasri comes on in place of Gareth Barry.
72:59 Full time
Full Time The referee blows for the end of the match.
Bryan Ruiz takes a shot. Save by Joe Hart.
Mario Balotelli has an effort at goal from outside the penalty box missing to the wide right of the goal. Free kick awarded for a foul by Steve Sidwell on Gareth Barry. Gareth Barry takes the free kick. Mario Balotelli is flagged offside by the assistant referee. Free kick taken by Mark Schwarzer.
Vincent Kompany challenges Hugo Rodallega unfairly and gives away a free kick. John Arne Riise restarts play with the free kick.
Substitution Alex Kacaniklic comes on in place of Mladen Petric.
Substitution Carlos Tevez leaves the field to be replaced by Mario Balotelli.
Inswinging corner taken by David Silva from the right by-line. Pablo Zabaleta produces a left-footed shot from just outside the area that goes harmlessly over the bar.
Short corner worked by Carlos Tevez. Hugo Rodallega challenges Carlos Tevez unfairly and gives away a free kick. David Silva takes the free kick. Bryan Ruiz takes a corner. Headed effort from deep inside the area by Sergio Aguero misses to the left of the goal. Inswinging corner taken by David Silva, Carlos Tevez takes a shot. Save made by Mark Schwarzer.
Inswinging corner taken by Damien Duff from the right by-line, Joe Hart makes a save.
Gareth Barry challenges Damien Duff unfairly and gives away a free kick. Free kick taken by Sascha Riether.
Foul by Gael Clichy on Sascha Riether, free kick awarded. Bryan Ruiz produces a cross, Brede Hangeland has a headed effort at goal from deep inside the area missing to the right of the goal.
45:01 Half time
Half Time The referee blows for half time.
Assist on the goal came from David Silva.
42:33 Goal scored
Goal! - Sergio Aguero - Fulham 1 - 1 Man City Sergio Aguero scores a goal from inside the six-yard box to the bottom left corner of the goal. Fulham 1-1 Man City.
Carlos Tevez takes a shot. David Silva takes a shot. Save by Mark Schwarzer.
Gael Clichy is flagged offside by the assistant referee. Indirect free kick taken by Mark Schwarzer.
Gael Clichy delivers the ball, Bryan Ruiz makes a clearance.
David Silva takes a shot. Mark Schwarzer makes a save.
Shot comes in from Hugo Rodallega from the free kick, blocked by Carlos Tevez. Effort from the edge of the area by Bryan Ruiz goes wide of the left-hand upright.
Booking The referee cautions Vincent Kompany for unsporting behaviour.
Unfair challenge on Mladen Petric by Vincent Kompany results in a free kick.
Gael Clichy takes a shot. Save by Mark Schwarzer.
The offside flag is raised against Damien Duff. Matija Nastasic takes the free kick.
Effort from the edge of the area by Carlos Tevez goes wide of the left-hand upright.
David Silva takes a shot. Blocked by John Arne Riise.
Shot from just outside the box by Steve Sidwell goes over the bar. Sergio Aguero gives away a free kick for an unfair challenge on Mark Schwarzer. Mark Schwarzer takes the free kick.
Matija Nastasic delivers the ball, clearance made by Sascha Riether.
The ball is sent over by Pablo Zabaleta, clearance made by John Arne Riise. Corner taken left-footed by David Silva from the right by-line, Header from close range by Sergio Aguero misses to the right of the goal.
Vincent Kompany gives away a free kick for an unfair challenge on Hugo Rodallega. John Arne Riise shoots direct from the free kick, save by Joe Hart.
Steve Sidwell concedes a free kick for a foul on Yaya Toure. David Silva takes the free kick.
The ball is delivered by Pablo Zabaleta, Brede Hangeland manages to make a clearance.
The ball is crossed by Gael Clichy, blocked by Chris Baird.
Foul by Sascha Riether on Gael Clichy, free kick awarded. Direct free kick taken by Gael Clichy.
Foul by David Silva on Steve Sidwell, free kick awarded. Mark Schwarzer takes the direct free kick.
The ball is crossed by Sascha Riether.
A cross is delivered by John Arne Riise, clearance made by Vincent Kompany.
A cross is delivered by Gael Clichy, Aaron Hughes makes a clearance.
Effort on goal by Mladen Petric from just inside the box goes harmlessly over the target.
Carlos Tevez takes a shot. Save by Mark Schwarzer.
John Arne Riise provided the assist for the goal.
9:18 Goal scored
Goal! - Mladen Petric - Fulham 1 - 0 Man City Mladen Petric scores a power penalty. Fulham 1-0 Man City.
Unfair challenge on John Arne Riise by Pablo Zabaleta results in a Penalty.
Sascha Riether crosses the ball, Vincent Kompany makes a clearance.
Yaya Toure has an effort at goal from outside the area which goes wide left of the target.
Bryan Ruiz fouled by Francisco Javi Garcia, the ref awards a free kick. Direct free kick taken by Aaron Hughes.
Free kick awarded for an unfair challenge on Mladen Petric by Matija Nastasic. Sascha Riether takes the direct free kick.
Unfair challenge on Francisco Javi Garcia by Bryan Ruiz results in a free kick. Gael Clichy restarts play with the free kick.
This page is best viewed in an up-to-date web browser with style sheets (CSS) enabled. While you will be able to view the content of this page in your current browser, you will not be able to get the full visual experience. Please consider upgrading your browser software or enabling style sheets (CSS) if you are able to do so.