Ruben Dias and John Stones struck as Premier League leaders Manchester City moved 13 points clear with a hard-fought 2-1 win over West Ham.
The defensive pairing netted either side of an equaliser from Michail Antonio, who had earlier hit the post for the determined visitors at the Etihad Stadium.
City’s victory was their 20th in succession as they chase glory on four fronts.
They also had the welcome sight of record goalscorer Sergio Aguero back in their starting-up for only the fourth time this season, even though the Argentinian had a quiet game.
On this occasion the lack of an effective striker did not matter as their in-form centre-backs delivered the goals.
They may have conceded a home goal in the Premier League for the first time since December 15, but they made up for that by demonstrating their potency up front.
City started slowly, looking to dominate possession and patiently carve out chances. West Ham saw little of the ball in the early stages and, even when they did, they repeatedly gave away possession.
Yet the openings did not come easily for City and it was West Ham who first created confusion in an opponents’ box when a Jesse Lingard shot took a deflection and looped into the air.
Tomas Soucek was the first to react to head across goal and Antonio collided with Ederson in the ensuing scramble. Lingard followed up with another shot but Stones blocked.
With Aguero quiet on his first start for four months after injury and illness, it was not until the half-hour mark that City first seriously threatened – and it brought them the lead.
Kevin De Bruyne had also looked off the pace in the opening stages, even uncharacteristically scuffing a free-kick, but he stamped his name on the game in emphatic fashion to tee up Dias.
The Belgian was wide on the right when he sent a left-footed cross into the box. Dias, who along with Stones was still forward after a set-piece, met it with a powerful header.
Darren Randolph, deputising for Lukasz Fabianski in the Hammers goal, got a hand to it but could not keep it out.
West Ham responded positively to the setback and almost grabbed an instant equaliser.
Lingard, enjoying a new lease of life on loan from Manchester United and clearly relishing a return to the city, broke down the right. His cross took a deflection but Antonio controlled well and shot on the turn, only for the ball to clip the base of the post.
Antonio’s reaction suggested he felt he should have scored, but he did not have long to wait. He got his goal just before the interval, this time after City lost possession and Vladimir Coufal broke into the area to pull back.
His intended target Lingard did not make clean contact with his shot but Antonio was on hand at the back post to tap in.
That opened the game up and both sides looked to attack in the second period, but City eventually reclaimed the initiative.
De Bruyne burst clear with a surge down the right and West Ham will have breathed a huge sigh of relief when his ball across the six-yard box missed everyone.
A fully match-fit Aguero might have turned that in but he was just behind the play and was replaced by Gabriel Jesus soon after.
City reclaimed the initiative in the 68th minute, again after a defender stayed forward following a corner.
This time Stones was the beneficiary, finishing superbly with a first-time shot from 10 yards after being picked out by Riyad Mahrez.
That proved the decisive moment, although Issa Diop almost snatched a point when he headed wide in injury time.