Yaya Toure and Sergio Aguero struck late on to secure a hard-fought win for Manchester City over Aston Villa.
The champions were at risk of losing further ground in the title race ahead of leaders Chelsea hosting Arsenal on Sunday.
But Toure, who once again looked some distance below his best form at Villa Park, broke the deadlock after 82 minutes.
Aguero, who like Aleksandar Kolarov hit the post earlier in the contest, rifled home a second to make the points safe and place the onus back on Jose Mourinho's side, with the gap at the summit reduced to two points.
Andreas Weimann scored a dramatic winner in this fixture last year, but was set to be restricted to a place on the Villa bench alongside the returning Christian Benteke until he was promoted into the starting XI to replace Gabriel Agbonlahor, who fell ill during the warm-up.
James Milner came back into the City line-up against his former club alongside defensive duo Eliaquim Mangala and Kolarov as Manuel Pellegrini tinkered with the side that drew with Roma in midweek in the Champions League.
Nathan Baker flung himself to block a sixth-minute strike by Toure after an ambitious effort from Kolarov was partially cleared.
Kolarov found himself in a more favourable position five minutes later and rattled Brad Guzan's near post from the left-hand side of Villa's box.
Aguero glanced wide from a devilish Kolarov cross and strike partner Edin Dzeko lashed into the Holte End when well placed.
Villa refused to buckle under intense pressure at the end of the first half as Milner and Kolarov saw shots deflected narrowly wide before Aly Cissokho cleared Dzeko's goalbound header.
The second half began in dramatic fashion as Milner played through Aguero to strike the base of the post.
The rebound fell favourably for the hosts, who surged forward and a brilliant last-ditch challenge was required from City full-back Pablo Zabaleta to stop Kieran Richardson beating Joe Hart.
Hart's opposite number Guzan produced the save of the match in the 48th minute, plunging to keep out David Silva's shot on the turn having been unsighted.
But Villa were increasingly looking dangerous on the break, with City captain Vincent Kompany required to intervene after Charles N'Zogbia slalomed past Mangala and Fernandinho - the latter hobbling off in the 56th minute to be replaced by Frank Lampard.
The Brazilian's departure saw Villa enjoy a sustained spell of possession for the first time in the contest and Weimann should have done better when he glanced off target from Tom Cleverley's 60th-minute cross.
It was his last act as Benteke came on for his first action since March due to an Achilles injury.
Fernando's introduction for Dzeko allowed City to regain control of central areas and Silva stabbed wide from Milner's low 70th-minute cross.
Aguero, Mangala and Lampard all went on to test Guzan's sound handling, but he had no chance when Toure was allowed room to shimmy past Fabian Delph and caress a left-footed shot into the bottom corner.
Milner fired a pass into Aguero two minutes from time and the tireless Argentine held off Baker and Philippe Senderos to finish and condemn seventh-place Villa to a third consecutive loss.
Copyright © 2021 Goal.com All rights reserved.