Bernardo Silva fired Manchester City to the top of the Premier League for the first time since August 2019 as his late strike inspired a 2-0 win against Aston Villa on Wednesday.
Pep Guardiola's side found it hard work to pierce Villa's stubborn defence at the rain-lashed Etihad Stadium.
Silva finally made the breakthrough with 11 minutes left with his first Premier League goal since July.
Villa boss Dean Smith was sent to the stands after a furious complaint that Rodri should have been given offside in the build-up to Silva's goal.
Ilkay Gundogan's penalty ensured City made it nine successive wins in all competitions as they extended their unbeaten run to 16 matches.
They move above previous leaders Leicester on goal difference, but Manchester United would take over top spot if they win at Fulham later on Wednesday.
After a spluttering start to the season, City, last crowned champions in 2019, are hitting their stride at just the right time.
Plagued by defensive problems last season, they have been rock solid this term, conceding only once in the 11 matches John Stones and Ruben Dias have played together at centre-back.
The only worry for Guardiola was the sight of Kevin De Bruyne coming off in the second half with a possible injury after Kyle Walker limped off in the first half.
A significant coronavirus outbreak at Villa meant their first team had not played since they lost to Manchester United on New Year's Day, with the club fielding a youth side for their FA Cup defeat against Liverpool.
Villa had only three days of training before facing City and put up a brave fight before fading at the end.
With Sergio Aguero still in self-isolation and Gabriel Jesus on the bench, Phil Foden came into the front three in a move that left City without a recognised striker.
Silva started in the false nine role and the Portugal playmaker should have opened the scoring in the fourth minute.
When Rodri's header looped towards him, Silva's effort from virtually on the goalline was brilliantly saved by Emiliano Martinez before Matt Cash threw himself in the way of John Stones' shot from the rebound.
Smith had joked it was "nice to be out of the house" as he named all his returning stars, including Ross Barkley after two months out with a hamstring injury.
But Smith might have wished he was back on the sofa as Guardiola's men monopolised possession, with Foden and De Bruyne having shots blocked.
With Foden in fine form, City kept up the pressure, but another mazy run from the youngster ended with Rodri's goalbound shot hitting Raheem Sterling instead of the back of the net.
Villa finally came out of their shell as Barkley's curling strike from the edge of the area tested Ederson.
Gundogan went close with a curler, while Bertrand Traore's outrageous control took him into range for a strike that Ederson pushed away.
As the game became more open, City defender Joao Cancelo made an incisive raid into the Villa area before shooting against the bar.
When De Bruyne pulled up sharply, Guardiola sent on Jesus with half an hour left.
Villa nearly snatched the lead as Douglas Luiz's 20-yard blast was repelled by Ederson.
Gundogan's close-range shot was superbly stopped by Martinez, but City finally grabbed their controversial winner in the 79th minute.
Rodri, coming back from an offside position, nicked the ball off Tyrone Mings and found Silva on the edge of the Villa area.
Silva twisted into space before curling a fine finish into the top corner.
In stoppage-time, Jesus had a header blocked by Cash's hand and Gundogan stepped up to convert the spot-kick.