Mario Balotelli's last-minute penalty secured Manchester City a 1-1 Champions League draw with Borussia Dortmund that they scarcely deserved here on Wednesday.
A goal from Marco Reus looked to be enough to secure victory for Jurgen Klopp's team and leave a major dent in City's hopes of progressing from Group D and into the knock-out phase.
But with just two minutes left Neven Subotic was penalised for handball and Balotelli converted from the spot to earn City a point that could prove crucial.
They now face a double-header against Ajax before hosting Real Madrid and then travelling to Dortmund for their final match.
But on this evidence Dortmund must be strong favourites to progress along with Real.
Klopp was delighted with his side's vibrant display.
"I have congratulated the team," said Klopp.
"They produced a great game and it was fun to watch."
However, Reus was disappointed with the outcome.
"When you play like that you want to take away three points," he said.
"That is very bitter, when you concede a penalty in the last minute. I don't know if it should have been a penalty. We deserved to win the game."
On their last visit to England, Dortmund were easily beaten by Arsenal last season but Klopp's side looked a far more mature side in the opening period at the Etihad Stadium.
Samir Nasri had a shot saved by Roman Weidenfeller after just 25 seconds.
But the Germans were soon in the ascendancy.
Robert Lewandowski headed wide from a Marcel Schmelzer cross and did the same with a ball in from deep from fellow Pole Lukasz Piszcek.
David Silva has struggled since the turn of the year but the Spaniard looked on form again, clipping over the top for Sergio Aguero, who was denied by Weidenfeller before Pablo Zabaleta lifted over from Silva's pass.
After a rare mistake by Vincent Kompany in midfield, Lewandowski slid through for Gotze, whose shot was pushed on to the post by Hart.
City suffered a further blow just after the half-hour mark when Javier Garcia limped off to be replaced by Jack Rodwell.
Silva created another fine opportunity when he drifted in from the right and guided a pass through for Aguero, whose effort was blocked by the goalkeeper.
Yet another patient Dortmund passing move resulted in Gotze being played in behind the City defence and he was only denied by a fine block from Hart.
Seconds later the England goalkeeper pulled off another fine stop when he pushed on to the bar with yet another effort from Gotze.
But City almost struck just before the interval when Zabaleta's cross was missed by Edin Dzeko and, at full stretch, Silva volleyed over from a couple of yards out.
Dortmund that were creating the dangerous chances, with Piszczek clipping a ball back for Gotze to once again have a driven effort pushed wide by Hart.
Just after the hour they pulled ahead thanks to an error from Rodwell.
The England midfielder's weak pass to Matija Nastasic was easily cut out by Reus, who burst through and hit a shot with enough power to finally beat Hart.
They threatened once again when Jackub Blaszczykowski prodded a pass through for Reus and Hart came up with an impressive block.
Lewandowski should have killed the game with a quarter of an hour remaining but he prodded wide after he was picked out by Blaszczykowski.
Aguero had a header from Zabaleta's cross pushed away by Weidenfeller.
But with two minutes remaining, City got a reprieve when Aguero's flick hit Subotic's hand and referee Pavel Kralovec pointed to the spot.
Balotelli made no mistake from the spot to pull City level but Hart had to make another great save from Lewandowski to preserve the point.