Barcelona came to Manchester on Tuesday night and found they had a battle on their hands against City, going ahead only to be 2-1 down at half time, then both sides hit the woodwork before City scored again. 3-1 final score.
It leaves Group C with the Spaniards on top, but chastened. City stay in second. Monchengladbach and Celtic drew 1-1, with the Scots rooted at the bottom.
In Group D PSV entertained Bayern Munich who beat the Dutch side 2-1. They are qualified, along with Atletico Madrid, who have maximum points from four games after beating Rostov with a last-minute goal.
In Group A PSG travelled to Switzerland and scored first against Basle, who equalised with barely 10 minutes on the clock before an injury time volley gave the French side the points. Ludogorets had their hearts broken by a stunning Mesut Ozul strike as Arsenal squeaked past 3-2.
Arsenal are qualified, along with PSG.
Naples and Besiktas shared the points in a one-all draw in Group B, while Benfica beat Dynamo Kyiv 1-0. The Ukrainians are out, but any two of the other three could still qualify in the tightest group.