Manchester City came from behind to win a record-equalling 13th Premier League match in a row with victory over stubborn West Ham at Etihad Stadium.
Angelo Ogbonna’s header on the stroke of half-time put the lowly Hammers ahead, but Nicolas Otamendi responded with a predatory finish shortly after the break.
David Silva won it for City, acrobatically converting a Kevin de Bruyne pass with seven minutes left.
Victory meant Pep Guardiola’s side re-established their eight-point lead over Manchester United, who they play at Old Trafford next Sunday (16:30 GMT).
They also equalled the longest winning run within a top-flight season, matching Sunderland and Preston (1891-92), Arsenal (2001-02) and Chelsea (2016-17).
West Ham, though, have set a club record for the fewest points after 15 Premier League matches – they have just 10.
The Londoners had their chances – as well as Ogbonna’s goal, Michail Antonio almost pounced when Ederson spilled the ball, and Manuel Lanzini forced the goalkeeper to save at his near post.
But it always looked as though City’s pressure would tell and, shortly after De Bruyne’s free-kick was palmed away, Gabriel Jesus skipped through and slid the ball to Otamendi, who scored.
Leroy Sane, Raheem Sterling, De Bruyne and Jesus had further chances before Silva won it for the home side, but there was still time for the Hammers to go close, with Diafra Sakho shooting just wide after Marko Arnautovic pulled the ball back.
Silva’s strike made this the fourth game in a row City have won thanks to a goal scored in or after the 83rd minute. Sterling had scored the past three, having also hit an injury-time winner at Bournemouth in August.
A home victory always looked the likeliest result, with City extending their unbeaten run in all competitions to 28 matches.
They were made to fight for the points, though, and Silva’s late winner was one of 18 shots they had in the second half.
While City have been in full flow for much of the season, they have also shown their resilience – taking a league-high 10 points from losing positions.
Prior to their late winners against Huddersfield last month and now West Ham, City had won only one of their past 30 games in which they had been behind at half-time.
That combination of silk and steel has taken them eight points clear at the top, and it will take something special to stop them.
Despite the defeat, there was plenty for Hammers boss David Moyes to take heart from as his side kept the league leaders at bay for almost an hour.
The first half was particularly encouraging and, though a deflected strike from Silva extended Adrian, West Ham had better chances through Antonio and Lanzini.
They looked defensively solid and confident in their gameplan, and Moyes’ only disappointment will be they could not keep it up.
Jesus’ half-time introduction made a difference, but Sane, De Bruyne and Silva – who had not been at their best in the first half – also began to influence things.
City had had six shots to the Hammers’ four prior to that, but Adrian was forced into a string of saves as the hosts bombarded his goal in search of a winner.
Adrian, who came in as Joe Hart was unable to face his parent club, was a standout performer but the Hammers had opportunities of their own despite the absence of strikers Andy Carroll and Javier Hernandez.
And the agonising nature of this defeat was summed up by the reaction of former City defender Pablo Zabaleta when Silva’s shot hit the back of the net.