Match ends, Fulham 2, Aston Villa 1.
Substitute Harry Arter scored moments after coming on to send Fulham into the fourth round of the FA Cup with victory over Premier League side Aston Villa.
Anthony Knockaert had put the Championship club ahead with a stunning strike before Anwar El Ghazi equalised less than 10 minutes later.
But Arter restored the hosts' lead with a blistering effort of his own from 30 yards - his first Fulham goal.
The Cottagers are into the fourth round for the first time in three seasons.
But Villa - who are 17th in the Premier League - have now gone four years without winning an FA Cup match.
They have been eliminated by sides from lower leagues in their past two ties in the competition.
- Live: Follow all of Saturday's FA Cup third-round action
- Watch all the latest FA Cup goals, highlights and reaction here
- Where will the shocks be? Ladhood star Liam Williams takes on Lawro
- How to follow the FA Cup third round on the BBC
In what was the first FA Cup meeting between the sides since 1999 - and their first encounter since the 2018 Championship play-off final - Knockaert opened the scoring after the break with a left-footed effort from outside the area.
But El Ghazi, who had gone close to opening the scoring for Dean Smith's Villa on the stroke of half-time only to be denied by Marek Rodak, cancelled out the Frenchman's goal by tapping in Jonathan Kodjia's goal-bound effort.
Fulham boss Scott Parker brought Arter on for Kevin McDonald and his switch was rewarded just one minute and 45 seconds later when the 30-year-old - on loan from Bournemouth - thumped the ball into the top corner for his first goal since November 2017.
Knockaert saw a chance to extend Fulham's lead go begging in the dying stages of the match, Jay Stansfield's cross passing just millimetres from his toe in front of goal.
The goals came following a cagey first half in which neither side had truly threatened with the exception of El Ghazi's last-ditch attempt.
Villa had seen both Marvelous Nakamba and Neil Taylor go into the book early on for ill-timed challenges, while Kodjia had scuppered the visitors' first chance to take the lead, firing over the bar after good play by El Ghazi to bring the ball into the box.
Ahmed El Mohamady and Jota also went close to opening the scoring for Villa, while Knockaert and Joe Bryan both had efforts on goal for Fulham.
After the break, Knockaert saw a blistering strike brush past the post before finally opening the scoring, while Bryan and Cyrus Christie also peppered Orjan Nyland's goal with shots as Fulham - now dominating the match - looked to hit the final nail in Villa's coffin.
Man of the match - Anthony Knockaert (Fulham)
'I thought the performance was outstanding' - what they said
Aston Villa manager Dean Smith, speaking to BBC Sport: "We had a much-changed team, we had to with the amount of games we've had.
"There wasn't an awful lot in the game - they scored two wonder goals and beat us.
"While the FA Cup means an awful lot to us, it's not top of our priority list given the injuries we've got and the games coming up.
"It was an opportunity for players to show me they want to be in the first time. Some did OK and some didn't deliver."
Fulham boss Scott Parker, speaking to BBC Sport: "The most important thing was the result - but, more importantly, I thought the performance was outstanding.
"We caused them a lot of problems; we got in the right areas.
"Winning becomes a habit like losing does. Ultimately, you need a winning mentality and a habit of being winners, and that is going to take time. You can't just click your fingers, but games like this help against very good opposition."
- 3HectorBooked at 90mins
- 25OnomahSubstituted forStansfieldat 82'minutes
- 6McDonaldBooked at 47minsSubstituted forArterat 72'minutes
- 24KnockaertBooked at 88mins
- 19CavaleiroSubstituted forDe La Torreat 84'minutes
- 36De La Torre
- 27El Mohamady
- 3TaylorBooked at 21mins
- 8LansburyBooked at 90mins
- 11NakambaBooked at 6minsSubstituted forVassilevat 80'minutes
- 23JotaSubstituted forTrézéguetat 76'minutes
- 21El GhaziSubstituted forRamseyat 86'minutes
- 28L Kalinic
- Craig Pawson
- Shots on Target
Second Half ends, Fulham 2, Aston Villa 1.
Michael Hector (Fulham) is shown the yellow card.
Henri Lansbury (Aston Villa) is shown the yellow card.
Attempt saved. Anthony Knockaert (Fulham) left footed shot from the centre of the box is saved in the top centre of the goal. Assisted by Joe Bryan.
Offside, Fulham. Marek Rodák tries a through ball, but Anthony Knockaert is caught offside.
Offside, Aston Villa. Björn Engels tries a through ball, but Jonathan Kodjia is caught offside.
Attempt missed. Anthony Knockaert (Fulham) left footed shot from very close range is close, but misses to the left. Assisted by Jay Stansfield with a cross.
Anthony Knockaert (Fulham) is shown the yellow card for a bad foul.
Foul by Anthony Knockaert (Fulham).
Jacob Ramsey (Aston Villa) wins a free kick in the defensive half.
Substitution, Aston Villa. Jacob Ramsey replaces Anwar El Ghazi.
Foul by Michael Hector (Fulham).
Neil Taylor (Aston Villa) wins a free kick in the defensive half.
Corner, Fulham. Conceded by Henri Lansbury.
Attempt blocked. Joe Bryan (Fulham) left footed shot from a difficult angle on the left is blocked. Assisted by Luca De La Torre.
Substitution, Fulham. Luca De La Torre replaces Ivan Cavaleiro.
Attempt missed. Ivan Cavaleiro (Fulham) right footed shot from outside the box is too high. Assisted by Harry Arter.
Substitution, Fulham. Jay Stansfield replaces Josh Onomah.
Offside, Fulham. Alfie Mawson tries a through ball, but Anthony Knockaert is caught offside.