Football writer Sam Cunningham reviews Saturday's FA Cup third-round matches, with 13 Premier League clubs in action.
Macclesfield FC 2-1 Crystal Palace
FA Cup holders Crystal Palace were knocked out in stunning fashion by non-league Macclesfield in one of the greatest upsets in the competition’s history.
You have to go back 117 years for the last time a non-league side knocked out the FA Cup holders, when Palace were the underdogs who eliminated Wolverhampton Wanderers.
The gulf between the two sides on Saturday was enormous. Macclesfield play in the National League North – the sixth tier of the English football pyramid.
The 117 league places between the sides at kick-off represented the largest gap of any upset in FA Cup history and it was the first time a non-league side scored twice against the FA Cup holders since Runcorn v Preston North End in 1939.
It was the ninth game without a win for Palace in a run that has included five defeats, and compounded a difficult period.
“We missed any kind of quality today,” Palace manager Oliver Glasner said. “Conceding another set play goal, another header.
“If you can’t create clear chances, maybe one or two at the end, but everything else was a lack of quality.
“We lost and we deserved to lose.”
See: Palace line-up and report
Man City 10-1 Exeter City
Manchester City didn’t hold back against Exeter City, scoring a phenomenal 10 goals including one from Antoine Semenyo, who made his debut a day after signing from AFC Bournemouth.
Semenyo also set up Rico Lewis – making him the first player to score and assist on his Man City debut since Sergio Aguero, in 2011, in an impressive first game.
A top-flight team haven’t scored 10 or more goals in an FA Cup game since Tottenham Hotspur beat Crewe 13-2 in 1960.
Max Alleyne, the 20-year-old defender recalled early from a loan at Watford due to City’s defensive crisis, scored his first goal for the club to start the spree in the 12th minute. Rodri made it two with a 30-yard rocket on 24 minutes.
Exeter then scored two own goals to give Man City a four-goal lead at the break, and the hosts added another six in the second half. George Birch, a 19-year-old attacking midfielder, scored Exeter’s only goal.
See: Man City line-up and report
Newcastle 3-3 Bournemouth (Newcastle win 7-6 on penalties)
Newcastle United produced a second thriller in four days in an epic penalty shootout win against Bournemouth.
In midweek, Newcastle scored two goals in second-half stoppage time to beat Leeds United 4-3 in a dramatic league match. They took their FA Cup tie against fellow Premier League side Bournemouth into extra-time with an Anthony Gordon penalty to level at 2-2 in the fifth minute of added time.
Newcastle thought they had won it when Harvey Barnes scored with two minutes remaining of extra-time. But then it was Bournemouth’s turn to leave it late, Marcus Tavernier finding a desperate equaliser in the second minute of stoppage time.
The sides were almost inseparable in the shootout, too. Two penalties were missed apiece in the first 10 before the game was decided when Newcastle goalkeeper Aaron Ramsdale saved from Bafode Diakite in sudden death.
See: Newcastle line-up and report | Bournemouth line-up and report
Spurs 1-2 Aston Villa
The spotlight on Tottenham Hotspur head coach Thomas Frank was not eased after they were knocked out by Aston Villa.
Villa were two ahead in a dominant first half in which Emiliano Buendia and Morgan Rogers scored.
Spurs did rally after the break and kept alive the chance of a comeback when Wilson Odobert pulled a goal back. The second-half performance won around a tense home crowd and, though Spurs pushed for an equaliser, they couldn’t find one.
A cup run could have provided Frank with a route to success this season, with his side struggling in the Premier League. They have now only won once in seven games.
In another blow to Frank, Richarlison left the field in the first half with a suspected hamstring injury.
See: Spurs line-up and report | Villa line-up and report
Charlton Athletic 1-5 Chelsea
Liam Rosenior got his Chelsea reign off to a winning start with a five-star performance against Charlton Athletic at The Valley.
Rosenior was taking charge of his first match since replacing former head coach Enzo Maresca, and despite making wholesale changes, eight in total, the players on the pitch repaid him with a comfortable win against their Championship opponents.
Jorrel Hato, the 19-year-old defender signed from Ajax in the summer, scored the first goal of the Rosenior era with a well-taken half volley in first-half stoppage time. Tosin Adarabioyo added a second with a header from a set-piece just after the break.
Former Chelsea academy player Miles Leaburn gave Charlton hope of a comeback, smashing in a rebound from a corner on 57 minutes. But Marc Guiu restored the two-goal advantage five minutes later.
Rosenior then sent on several first-team regulars, and Pedro Neto and Enzo Fernandez added two more goals in the final five minutes.
See Chelsea line-up and report
Wolves 6-1 Shrewsbury Town
Jorgen Strand Larsen became the first Wolves player to score an FA Cup hat-trick since Steve Bull against Cheltenham Town in 1987 as the club thrashed Shrewsbury Town.
It was a fourth game unbeaten – and second win in that period – for manager Rob Edwards, appointed in November, after finally ending a 12-game losing streak on 30 December.
They remain bottom of the Premier League, 14 points from safety, but progressing to the fourth round of the FA Cup has provided some reprieve.
Norway forward Larsen had not scored for 13 games and only netted three goals all season, but doubled his total against the League Two side.
Wolves were 3-1 ahead at half-time, Larsen scoring two of his goals. John Marquis scored a 26th-minute penalty for Shrewsbury, but the 66 places between the teams proved too great in the second half.
Larsen completed his treble 13 minutes after the break and Rodrigo Gomes and Tolu Arokodare made it six late on.
See: Wolves line-up and report
Everton 1-1 Sunderland (Sunderland win 3-0 on penalties)
Sunderland goalkeeper Robin Roefs was the shootout hero – saving all three of the penalties he faced as the Black Cats beat Everton on penalties in this all-Premier League tie.
Luke O’Nien, a key figure in the club’s rise from League One to the top flight, capped his first start of the season with the winning penalty.
Sunderland took the lead after half-an-hour through Enzo Le Fee’s volley, making amends for his missed Panenka penalty in the midweek Premier League game against Brentford.
They were a minute plus stoppage time from going through but Everton won a late penalty that was scored by James Garner.
Garner, however, saw his penalty saved by Roefs in the shootout, alongside Thierno Barry and Beto.
It continues Sunderland’s brilliant season, defying expectations in the league after returning to the Premier League for the first time since 2016.
See: Everton line-up and report | Sunderland line-up and report
Burnley 5-1 Millwall
Burnley were another side to leave their Premier League struggles behind to thrash lower-league opposition in the FA Cup, knocking five past Millwall.
This was a potentially tricky tie. Millwall are fifth in the Championship and outsiders for promotion to the top flight, while Burnley are battling relegation a few places above them in the pyramid.
But Scott Parker's side, who have not won in the league in 12 games, made light work of the south London team, scoring three before half-time.
Ashley Barnes has barely played this season but in the 36-year-old’s first start of the campaign he scored twice, either side of half-time. Loum Tchaouna and Jaidon Anthony added two more, while Jaydon Banel came off the bench to score his first Burnley goal.
In stoppage time Josh Coburn scored a consolation goal for Millwall.
See: Burnley line-up and report
Fulham 3-1 Middlesbrough
Harry Wilson continued his hot streak with a third goal in three games – and five in nine – as Fulham came from behind to beat Middlesbrough.
The winger’s December form earned him a place on the EA SPORTS Player of the Month award shortlist and he has carried it into 2026.
After Championship side Middlesbrough took the lead through Hayden Hackney in the 30th minute, it took three second-half goals to avoid an upset.
Marco Silva, the Fulham head coach, turned to first-team regulars and introduced Wilson, Raul Jimenez and Tom Cairney in the 56th minute.
Wilson levelled four minutes after coming on, before Emile Smith Rowe added a second, with his fifth goal of the season, and Kevin secured the win in stoppage time.
See: Fulham line-up and report
Sheffield Wednesday 0-2 Brentford
Amid an afternoon of giant killings, thrashings and breathless FA Cup action, Brentford produced a drama-free victory against the Championship’s bottom side Sheffield Wednesday.
Resting key players after moving to fifth in the Premier League table in midweek, Keith Andrews, the Brentford head coach, made eight changes. Igor Thiago, the Brazilian striker who scored twice against Sunderland to notch 16 league goals for the season, was left out of the squad.
In his place played Keane Lewis-Potter, who scored the opening goal in the 27th minute, while Mathias Jensen added a second from the penalty spot just after the hour.
Brentford are now unbeaten in six games – and have won five of them.
See: Brentford line-up and report
FA Cup third-round results
Wrexham 3-3 Nottingham Forest (4-3 on pens)
Everton 1-1 Sunderland (0-3 on pens)
Macclesfield 2-1 Crystal Palace
Wolves 6-1 Shrewsbury
Burnley 5-1 Millwall
Fulham 3-1 Middlesbrough
Man City 10-1 Exeter
Newcastle 3-3 AFC Bournemouth (7-6 on pens)
Sheff Wed 0-2 Brentford
Spurs 1-2 Aston Villa
Charlton 1-5 Chelsea
Remaining third-round ties
Sunday 11 January
Derby 1-3 Leeds
Portsmouth 1-4 Arsenal
West Ham 2-1 QPR (aet)
Man Utd 1-2 Brighton
Monday 12 January
19:45 Liverpool v Barnsley
When is the fourth-round draw?
The draw will be made at around 18:35 GMT on Monday 12 January at Anfield, ahead of the final third-round tie between Liverpool and Barnsley. It will be shown live on TNT Sports 1, discovery+ and the TNT Sports YouTube channel.
The ball numbers for Premier League clubs are:
Arsenal: 17
Aston Villa: 3
Brentford: 11
Brighton: 31
Burnley: 15
Chelsea: 8
Fulham: 12
Leeds: 18
Liverpool*: 14
Man City: 9
Man Utd: 31
Newcastle: 24
Sunderland: 13
West Ham: 10
Wolves: 1
*Liverpool need to beat Barnsley on Monday night to reach the fourth round.