Aston Villa sealed a club-record 15th consecutive home league win in a row with a 1-0 victory against Arsenal on Saturday evening.
An early goal set the hosts on their way to victory, with Unai Emery's men moving a point behind the Gunners and sit just one further behind Premier League leaders Liverpool.
Mikel Arteta watched on from the stands as Villa frustrated his side for nearly 100 minutes of football and his men missed the chance to move back to the summit after the Reds' victory at Crystal Palace earlier in the day.
How the game unfolded
Villa started the game brightly but they nearly fell behind when Arsenal hit them with consecutive switches of play. Bukayo Saka crossed over to the left for Gabriel Martinelli, who returned the favour with a wonderful ball over the top of Lucas Digne, only for the England winger to scuff his effort.
And the hosts punished the Gunners by immediately going down the other end and scoring. Leon Bailey made a run to the byline and cut the ball back for John McGinn, who calmly turned and swivelled before picking out the top corner from 12 yards.
Arsenal were slowly growing in confidence as Villa started to sit off, with Martinelli beating Emiliano Martinez to a ball over the top and lobbing him, only for Diego Carlos to clear off the line. Replays suggested a goal may have been ruled out for offside anyways.
Martinelli then robbed Ezri Konsa of possession and fed through Kai Havertz, whose lay off to Gabriel Jesus was knocked onto Martin Odegaard, but his low strike was well held by Martinez.
A clever pass between the lines from Youri Tielemans found Ollie Watkins racing into the 18-yard box, but he was kept out by former Brentford teammate David Raya. The offside flag later went up but replays showed the decision was very tight.
Just after the break, Arsenal were furious they weren't awarded a penalty even after a lengthy VAR check when Douglas Luiz appeared to hook Jesus' ankle while trying to clear a high ball in his own box.
A corner from Saka was punched by Martinez against the head of Watkins and off the inside of his own post, with Carlos again coming to the rescue to deny William Saliba from heading in.
Odegaard spurned another great chance when he skewed a cut-back from Havertz, while Villa's first chance of the second half saw Raya make a low save to keep out Lucas Digne.
Arsenal found the net on the hour mark when Saka raced in behind to round Martinez and slot into an empty net, but he was denied an equaliser by a late offside flag.
Villa nearly caught Arsenal out with a quick counter which saw Diaby come inside and tee up Watkins, who again was thwarted by Raya.
In the final minute of regulation time, Arsenal bundled the ball across the line after Havertz converted a deep cross from Saka, but the ball bounced off his arm in the chaos and the goal was disallowed - a decision vindicated after a lengthy VAR review.
One final cross from Declan Rice found Eddie Nketiah's head, but his effort sailed into the Holte End and Villa held on to take the points.
Aston Villa player ratings (4-4-1-1)
GK: Emiliano Martinez - 7/10 - A mixed bag from Martinez, who looked shaky as much as he did sturdy. Ultimately though, he kept a clean sheet.
RB: Ezri Konsa - 5/10 - Put through his paces by the tricky Martinelli, even though the Brazilian wasn't at the races. Came off second-best quite a fair bit.
CB: Diego Carlos - 8/10 - Made crucial clearances at crucial times for Villa. Didn't bend or break under pressure.
CB: Pau Torres - 7/10 - Not the most physical of performances but an asset in trying to help Villa play from the back against a great Arsenal press.
LB: Lucas Digne - 6/10 - Given real problems by Saka at one end but was one of Villa's better attacking players down the other.
RM: Leon Bailey - 7/10 - Caused Arsenal all sorts of issues and set up the opener before being withdrawn through injury at the break.
CM: Boubacar Kamara - 5/10 - Calm if not a little wasteful in the midfield battle.
CM: Douglas Luiz - 5/10 - On another day would have conceded a penalty. Broke up Villa's own attacks as much as he did Arsenal's.
LM: John McGinn - 8/10 - Took his goal extremely well to get his side off to a flyer. INFLuence waned a little but fought for every inch.
AM: Youri Tielemans - 6/10 - Played close to Watkins in the first half before bouncing around all over the frontline in his brief time on the pitch during the second. Some neat passes here and there but not much of a sustained threat.
CF: Ollie Watkins - 6/10 - Spent the evening trying to duel Saliba. Lost a bit of his penalty-box threat in the process.
SUB: Moussa Diaby (46' for Bailey) - 6/10
SUB: Jacob Ramsey (56' for Tielemans) - 6/10
SUB: Matty Cash (66' for Konsa) - 6/10
SUB: Leander Dendoncker (66' for Kamara) - 5/10
SUB: Alex Moreno (78' for Digne) - 6/10
Subs not used: Filip Marshall (GK), Clement Lenglet, Alex Moreno, Nicolo Zaniolo, Jhon Duran
Unai Emery - 7/10 - It wasn't pretty, it wasn't perfect, but Villa got the job done.
Arsenal player ratings (4-3-3)
GK: David Raya - 6/10 - Targeted by Villa with high crosses and corners, but the Spaniard held his own for the most part.
RB: Ben White - 5/10 - A strange and disjointed performance from White, who seemed weirdly out-of-sync with his teammates.
CB: William Saliba - 6/10 - Given real running battles by the energetic Watkins but scarcely found himself in danger.
CB: Gabriel Magalhaes - 5/10 - Twisted and turned in the lead up to the winning goal. Played much of the match with confidence but the damage had been done.
LB: Oleksandr Zinchenko - 5/10 - Not much use at either end of the pitch, losing his concentration and nerve too often.
DM: Declan Rice - 6/10 - Did his defensive duties to his usual high standard but got a little carried away going forwards. Why was he taking a free-kick?
CM: Martin Odegaard - 5/10 - Seemed drained of confidence after missing a couple of great chances. Didn't want to get on the ball a great deal down the stretch.
CM: Kai Havertz - 6/10 - Crashed the box, showed bark and bite, created decent opportunities. It's slowly clicking.
RW: Bukayo Saka - 6/10 - Arsenal's most threatening attacker, though the bar was quite a low one to clear.
CF: Gabriel Jesus - 5/10 - A little unfortunate not to have won a penalty, but didn't provide enough menace in the box besides that moment.
LW: Gabriel Martinelli - 5/10 - Did well to get the better of Konsa but his final ball was lacking and decision-making questionable.
SUB: Leandro Trossard (70' for Martinelli) - 5/10
SUB: Eddie Nketiah (81' for Jesus) - 5/10
SUB: Reiss Nelson (90' for Zinchenko) - N/A
Subs not used: Aaron Ramsdale (GK), Reuell Walters, Jakub Kiwior, Cedric Soares, Mohamed Elneny, Jorginho, Reiss Nelson
Mikel Arteta - 6/10 - Had to watch the game from the stands due to a touchline ban. His side did the basics well but lacked that spark and magic needed to stage another late escape.
Player of the match - Diego Carlos (Aston Villa)
Mohamed Salah injury update: will he play for Liverpool against Chelsea in the Carabao Cup final?
Lionel Messi’s Inter Miami to go up against an old foe in tasty CONCACAF clash
Saturday English Premier League parlay 2/24 at +660 odds | Pickswise
Xavi pre-match press conference ahead of Barcelona’s LaLiga game against Getafe
Colombia - Brazil: date, kick-off time, how to watch on TV and stream online | W Gold Cup
Man Utd confirm Rasmus Hojlund injury blow in latest setback
Which national team could Pep Guardiola manage?
Inter Miami beat RSL, Chase Stadium rename, Lionel Messi is back