Goals from centre-back pairing Ruben Dias and John Stones secured a 2-1 win for Manchester City over West Ham on Saturday afternoon, as Pep Guardiola's side extended their winning streak to 20 matches.
After a solid start from the visitors, it took a moment of magic from Kevin De Bruyne to unlock the West Ham backline. His sumptuous arrowed ball found Dias at the back post, with the Portuguese defender handed the simple task of powering a header past Darren Randolph.
Despite City continuing to press, the Hammers restored parity just before half-time. Vladimir Coufal showed excellent awareness to cut the ball back to Jesse Lingard, with the Manchester United loanee's strike helped home from close range by Michail Antonio.
The home side were back on the front foot in the second half, and eventually regained the lead after
some lovely wing play from Riyad Mahrez. The Algerian bamboozled young fullback Ben Johnson, before picking out Stones to slam the ball past Randolph.
Issa Diop had a glorious opportunity in the last minute of the game to grab West Ham a point, but he glanced his free header wide to continue Guardiola's march to another Premier League title.
Here's the all important ratings for City and West Ham.
Manchester City player ratings
1. Goalkeeper & Defenders
Ederson (GK) - 6/10 - Took an early knock after colliding with Antonio but picked himself up to continue. Nothing he could do about the West Ham equaliser and produced some quality handling despite some careless distribution.
Kyle Walker (RB) - 7/10 - Used his pace to good effect when challenging the rapid Antonio. A constant outlet down the City right and he put in a great shift for the team.
John Stones (CB) - 8/10 - Showed the nous of a centre-forward to hang back in the area before smashing home City's second. A superb display as his season continues to go from strength to strength.
Ruben Dias (CB) - 7/10 - Opened the scoring with a close-range header in the first half. Did a good job of shepherding Antonio and nullifying his threat on the counter.
Oleksandr Zinchenko (LB) - 6/10 - Adopted the Joao Cancelo role by moving into central midfield whenever City were in possession. Struggled to really have an impact on the game but was neat and tidy in possession.
Fernandinho (DM) - 5/10 - Given the nod ahead of Rodri at the base of the City midfield. Struggled with the pace of West Ham's counter-attacks and was caught out of position all too often.
Ilkay Gundogan (CM) - 6/10 - Didn't have the impact in the final third that we've come to expect from him in recent months, but kept things ticking over in the midfield.
Kevin De Bruyne (CM) - 7/10 - If you do nothing else with your weekend, make sure you check out his assist for Dias' goal. With his supposedly 'weaker' foot, the Belgian carved the Hammers open with an unbelievable cross-field ball and his all-round display was impressive.
Riyad Mahrez (RW) - 7/10 - Had Ben Johnson on toast every time he found himself one on one with the youngster. Produced a lovely bit of skill and composure to help his side regain the lead on the afternoon.
Sergio Aguero (ST) - 5/10 - His first Premier League appearance since 3 January and he looked far from his best. Some neat touches early on but was withdrawn with an hour gone.
Ferran Torres (LW) - 6/10 - Not noted for his defensive attributes but he showed a good desire to track back and help his team out when needed. Replaced by Phil Foden in the second half but a solid display.
Gabriel Jesus (ST) - 6/10
Phil Foden (LW) - 6/10
Rodri (CM) - N/A
West Ham player ratings
5. Goalkeeper & Defenders
Darren Randolph (GK) - 6/10 - Deputised in goal for the Hammers in place of the injured Lukasz Fabianski. Nothing he could do about either of the City goals and then looked to pick up an injury taking a goal kick early in the second half.
Vladimir Coufal (RB) - 7/10 - Showed a brilliant desire to get forward and help his team relieve the pressure they found themselves under. His work rate and energy was key to West Ham's equaliser and he defended well on the whole.
Craig Dawson (CB) - 7/10 - Repelled the majority of the crosses which came his way. Seems to be getting better with age and continued his fine season at the centre of the Hammers defence.
Issa Diop (CB) - 7/10 - Has done a good job of stepping in for Angelo Ogbonna since his injury. Possibly guilty of sitting a little too deep at times but defended really well.
Aaron Cresswell (CB) - 6/10 - Some unusually lacklustre distribution with his trusty left foot. Stuck to his task but there was little he could do about either of the City goals.
Ben Johnson (LB) - 5/10 - Struggled early on and was guilty of conceding possession needlessly and giving away free kicks. Couldn't cope with the quick feet of Mahrez and was beaten far too easily in the build-up to City's second of the afternoon.
Pablo Fornals (RM) - 6/10 - Showed a great work rate all game and wasn't afraid to get back and help out his team whenever City were in possession.
Tomas Soucek (CM) - 7/10 - Broke up play brilliantly in the centre of the pitch and had the composure to step forward and link up with Antonio where possible.
Declan Rice (CM) - 7/10 - Sat a little deeper than we're used to seeing but he was effective and made a number of smart interceptions. Seemed to tire as the game wore on but it was to be expected given the shift he put in.
Jesse Lingard (LM) - 7/10 - Showed brilliant movement to offer Coufal a cut-back in the build-up to West Ham's equaliser. Did a good job of carrying the ball and linking up play with Antonio. Unlucky to be on the losing side given his performance.
Michail Antonio (ST) - 6/10 - Did a good of keeping hold of the ball with City defenders around him but his distribution was very poor. Grabbed the equaliser just before half-time but West Ham really needed him to do a better job of bringing teammates into play if they were to take anything from the game.
Said Benrahma (LW) - N/A
Jarrod Bowen (RW) - N/A