Substitute Fernandinho struck a late winner as Manchester City killed off an Aston Villa comeback to claim a frantic 3-2 victory at the Etihad Stadium.
City looked to have thrown away victory as Villa recovered from 2-0 down with second-half goals from Tom Cleverley and Carlos Sanchez but Fernandinho had the final word in the 89th minute.
City had been gifted an early lead when Villa goalkeeper Brad Guzan blundered and Sergio Aguero pounced.
The hosts were far from convincing but looked to have the game wrapped up when Aleksandar Kolarov curled home an excellent free-kick after the break.
But FA Cup finalists Villa, initially flat after last week's Wembley exertions, hit back, showing plenty of urgency in what is still a fight against relegation for them.
Sanchez thought he had snatched a hard-earned point but City recovered to reclaim second place in the table ahead of the clash between rivals Arsenal and Manchester United later in the weekend.
City were unchanged and similar to last week - when West Ham's James Collins gifted them an opener - the hosts were handed an early goal.
This time goalkeeper Guzan erred when, seemingly under no pressure, he badly miskicked a Ron Vlaar backpass and effectively gave Aguero an open goal.
Naturally, City's ace marksman accepted the chance and slid home his 27th goal of the season with just three minutes on the clock.
If Guzan was hoping to force his way into manager Tim Sherwood's thinking for Wembley, having deferred to Shay Given so far in the cup run, it was the worst possible start.
Things almost got worse for the American too as he came out to claim a Kolarov free-kick but completely missed the ball. To his relief Fernando was unable to guide the ball into the empty net.
Guzan did deal with an Aguero shot from the edge of the area but Villa's sloppy start continued as an aimless Leandro Bacuna backpass played in the Argentinian yet again. This time Villa were able to scramble back and Jesus Navas' follow-up effort was blocked.
Sherwood looked far from happy on the Villa touchline but his team did eventually settle and start to control some possession.
A defensive lapse from City almost allowed them back into the game as the ball rebounded into Christian Benteke's path while the back line appealed for offside. Fortunately for City, goalkeeper Joe Hart blocked from the Belgian.
Toure looked laboured in the latter stages of the first half, clutching his hamstring at times. It was no surprise he was withdrawn at the interval with Fernandinho taking his place.
City showed more purpose after the restart, with Navas breaking to the byline but finding no-one has he pulled the ball back across goal.
Aguero went down in the area after tangling with Jores Okore but referee Mike Dean was not convinced.
City looked to have made the game safe with Kolarov's superb free-kick after Fernandinho was felled 30 yards from goal in the 66th minute.
The set-piece was cleverly disguised as Milner faked and Kolarov bent a low shot around the wall which gave Guzan no chance.
It seemed City had the game sewn up but Villa had other ideas and quickly responded.
A free-kick of their own caused problems in the City box and Jack Grealish's cross was only half-cleared. Cleverley came running onto the loose ball outside the area and drove a shot through several bodies and past Hart.
Another nightmare seemed to be unfolding for City when Hart flapped at a corner five minutes from time and Sanchez took full advantage.
They could even have lost the game and were thankful for a dubious offside flag against Benteke before he was tripped in the penalty box by Hart.
But there was still time for one final piece of drama and Fernandinho provided it at the other end as he controlled on his chest from a corner and drove home the winner.