Kevin De Bruyne and Raheem Sterling struck as Manchester City moved clear in Champions League Group F with a nervy 2-0 win over Shakhtar Donestsk.
De Bruyne broke the deadlock on what proved a testing night against the Ukrainian champions with a fine shot early in the second half before substitute Sterling wrapped up victory late on.
Sergio Aguero, one short of equalling the club's longstanding goalscoring record, endured a frustrating evening and had a second-half penalty saved by Andriy Pyatov.
The Argentinian will now have to wait until the weekend trip to Chelsea for another chance but that was a mere side issue as City claimed a hard-fought three points.
The difficulty they faced became clear early on as Shakhtar not only constricted the hosts' gameplan and forced errors, but attacked with plenty of confidence and pace themselves.
In the absence of the injured Benjamin Mendy, City deployed Fabian Delph as a makeshift left-back but it was on the opposite flank where Shakhtar made most headway. Kyle Walker found the going particularly tough as Shakhtar attacked down the left.
Gabriel Jesus made an early break for City but David Silva was unable to make the most of the opening and Aguero shot tamely at Pyatov. Jesus and Aguero both spurned further good opportunities by straying offside and Kevin De Bruyne dragged a gilt-edged chance wide. Leroy Sane shot across goal after jinking his way through the box.
Shakhtar threatened through Fred, one of five Brazilians in the Ukrainian champions' starting line-up, but countryman and former Donetsk player Fernandinho made a timely challenge.
Fernandinho was forced to put in a strong defensive effort as Shakhtar continued to push. Ederson denied another Brazilian, Marlos, by palming a curling effort around the post. Ederson was beaten to a free-kick but City were given a let-off as Ivan Ordets put his header wide.
City finally eased growing tension three minutes into the second half as Silva fed De Bruyne on the edge of the box and the Belgian curled a fine shot around defenders and into the top corner.
Aguero, sensing the record, was then denied on the volley by Pyatov before Sterling sliced wide with the goal at his mercy.
Silva thought he should have had a penalty after being felled in the area but the flag was already raised for offside.
Referee Manuel de Sousa did point to the spot after 70 minutes when Sane went down under pressure from Ordets but Aguero, with the crowd willing him on, saw his effort saved by Pyatov.
Aguero was not downbeat and drove a low effort wide but his night was soon over and he was replaced six minutes from time.
Sterling was also denied a penalty after going down in the area but atoned for his earlier miss when he turned home a Bernardo Silva pass in the last minute.