Manchester City closed the gap on Premier League leaders Arsenal by winning a tightly fought contest with Chelsea 1-0 at Stamford Bridge on Thursday night thanks to Riyad Mahrez's strike.
Graham Potters' hosts responded well to a pair of injury setbacks to create decent moments in the first half, but Jack Grealish's low ball across the box picked out fellow substitute Mahrez to tap in at the back post in the 63rd minute.
Raheem Sterling's evening against his old teammates ended early on due to injury before Christian Pulisic suffered a similar fate, forcing substitutes Pierre-Emerick Aubameyang and Carney Chukwuemeka to be introduced earlier than expected.
John Stones produced a pair of excellent blocks to prevent Chelsea going ahead in the first half, halting efforts from both Pulisic before the injury and Chukwuemeka after.
Erling Haaland lifted his first chance over the bar while Chukwuemeka continued to look dangerous, striking the post. An immediate City counter-attack saw Kevin De Bruyne's strike saved by Arrizabalaga.
Pep Guardiola's visitors were much improved after the break, having had their rhythm stunted by a decent Chelsea defensive effort, and eventually took the lead minutes after the introduction of substitutes Mahrez and Grealish.
It was Grealish who drifted wide and delivered the ball on a plate for Mahrez, who just had to evade Marc Cucurella and steer in at the back post.
City came close to doubling their advantage when De Bruyne crossed for Haaland, but not even the Norwegian's behemoth frame could get on the end of it.
The hosts struggled for clear chances and when Lewis Hall skewed wide deep into the second half, it seemed clear the points would be heading north with Guardiola and City.
Chelsea player ratings (4-2-3-1)
GK: Kepa Arrizabalaga - 6/10 - Couple of saves to make but was taken out of the equation for City's winner.
RB: Cesar Azpilicueta - 6/10 - Looked a little slow on the draw but also dished out some meaty challenges.
CB: Kalidou Koulibaly - 6/10 - Held up to the challenge of Haaland alongside Silva.
CB: Thiago Silva - 7/10 - Continues to pretty comfortably be Chelsea's best defender.
LB: Marc Cucurella - 6/10 - Terrific energy, though sometimes his erratic nature saw him caught out.
CM: Mateo Kovacic - 6/10 - No doubting any skill or effort on his side, but once City took control in midfield there wasn't too much Kovacic nor his teammates could do.
CM: Denis Zakaria - 7/10 - Displayed some incredibly twinkling feet throughout the game. Confidence seems to be growing.
AM: Hakim Ziyech - 5/10 - Not at his creative or mercurial best in a game that was never likely to get the best out of him.
RW: Raheem Sterling - N/A - Premature ending to his outing against his former club, coming off injured within five minutes.
ST: Kai Havertz - 6/10 - Involved in some nice moments of build up for Chelsea, though a finishing touch never appeared likely.
LW: Christian Pulisic - N/A - Took a whack from Stones in a challenge near the City goal and had to come off shortly after Sterling.
Pierre-Emerick Aubameyang (5' for Sterling) - 2/10 - Subbed on early, subbed off with over 20 minutes left. That's a tough night.
Carney Chukwuemeka (22' for Pulisic) - 7/10 - Looked the most likely of Chelsea's attackers to break the deadlock, hitting the post before the break.
Omari Hutchinson (68' for Aubameyang) - 6/10 - Looks like he can contribute more than some of his teammates.
Lewis Hall (68' for Cucurella) - 6/10 - Capable second-half cameo filled some nice moments of interplay.
Conor Gallagher (69' for Ziyech) - 6/10 - Charged around the turf much to the delight of the home fans.
Graham Potter - 3/10 - Tough task to stop his side's rot against one of the best teams in Europe and not helped by injuries. Ultimately it's another loss that makes Chelsea's task in the second half of the season even tougher.
Manchester City player ratings (3-2-4-1)
GK: Ederson - 6/10 - Made a couple of simple saves. Almost involved in a collision outside his box but the danger was averted.
CB: Kyle Walker - 6/10 - Only played the first 45 minutes, looking steady enough.
CB: John Stones - 8/10 - Made a couple of really important blocks and distributed the ball well throughout.
CB: Nathan Ake - 7/10 - Came close to netting when he hit the woodwork. High work rate in defence.
DM: Bernardo Silva - 6/10 - Helped City remain as tidy as ever but there was no real spark to Silva's play before he came off.
DM: Rodri - 7/10 - Controlled the tempo of the game with excellent passing and broke up Chelsea attacks while defending, legally and otherwise.
RW: Joao Cancelo - 6/10 - Deployed incredibly far forward during the first half but the experiment didn't seem to work and he was soon withdrawn.
CM: Kevin De Bruyne - 7/10 - Looked dangerous whenever he got on the half-turn and surged towards Chelsea's goal.
CM: Ilkay Gundogan - 8/10 - Created two chances and made four successful tackles, establishing City's platform in midfield.
LW: Phil Foden - 5/10 - Disappointingly quiet before being replaced by the subs who won City the game.
ST: Erling Haaland - 6/10 - A game without a goal for the big Norwegian beast. None of his three shots were on target.
Manuel Akanji (46' for Walker) - 6/10 - Helped settle City's backline after a tricky first half.
Rico Lewis (46' for Cancelo) - 6/10 - A little wasteful in the second half but was no less persistent and snappy in the tackle.
Jack Grealish (60' for Foden) - 7/10 - Inch-perfect cross set up Mahrez to net the only goal of the game.
Riyad Mahrez (60' for Silva) - /10 - On hand at the back post to tap in Grealish's cross.
Kalvin Phillips (86' for Rodri) - N/A - A late runout.
Pep Guardiola - 7/10 - Not his side's most efficient or glistening display, but Guardiola made positive changes and was rewarded with a winner.