A late winner from John Marquis put Championship side Millwall into the fifth round of the FA Cup at the expense of Premier League Aston Villa.
Marquis headed in a rebound off the bar to knock Paul Lambert's side out of their second cup competition this week.
Darren Bent gave Villa a first-half advantage when his scuffed shot rolled in following a rapid counter-attack.
But Villa's vulnerability at set pieces saw their lead last five minutes, with Danny Shittu heading in from a corner.
The Midlands outfit were knocked out of the Capital One Cup by Bradford City of League Two on Tuesday, losing the semi-final 4-3 on aggregate, and are one place above the Premier League relegation zone following a run of six league games without a win.
Rare FA Cup joy for the Lions
Millwall lost 3-0 against Manchester United in the 2004 FA Cup final but this season is only the second time the Lions have reached the fifth round since then.
The London side also made the last 16 in 2011-12 but lost 2-0 at home against Bolton Wanderers.
Villa looked like a side under pressure in the early stages until Darren Bent, starting for the first time since the 2-1 FA Cup win over Ipswich earlier in the month, mis-kicked the ball into the net after Millwall goalkeeper David Forde had palmed away Andreas Weimann's effort.
Shittu then headed a corner onto the roof of Shay Given's net, but the Villa defence did not heed this warning as the hosts equalised only five minutes after Bent's opener.
James Henry's corner was met by Shittu at the back post and Given could not stop the defender's header from flying past him.
The hosts were on top for the rest of the first half and after the break, with Liam Feeney firing just wide at another corner where the Premier League side looked vulnerable.
Some Millwall supporters threw bottles in the direction of assistant referee Mark Scholes following a free-kick decision that went against their side, which held the game up for about five minutes.
Villa created little for much of the second half, and only Forde's save from Barry Bannan's shot gave the home fans any concern.
But Villa buckled in the closing stages, Marquis heading an Adam Smith cross onto the bar before pouncing on the rebound to nod the ball into an empty net for his first goal since August 2011.
The earlier stoppage saw six minutes added on but Villa could not claw back the deficit, and Kenny Jackett's side hung on for a deserved win.
- 01 Forde
- 03 Shittu
- 16 Beevers Booked
- 25 Smith
- 27 Osborne
- 06 Trotter
- 14 Henry
- 15 Feeney
- 26 Abdou
- 09 Marquis (Smith - 90' )
- 20 Keogh (N'Guessan - 82' )
- 33 M Taylor
- 02 Dunne
- 21 Smith
- 04 Wright
- 11 Batt
- 22 N'Guessan
- 38 Wilkinson
- 01 Given
- 04 Vlaar
- 06 Clark
- 27 Bennett Booked
- 30 Lichaj
- 34 Lowton
- 10 N'Zogbia
- 15 Westwood
- 16 Delph (Bannan - 39' )
- 09 Bent
- 26 Weimann (Bowery - 81' Booked )
- 22 Guzan
- 37 Williams
- 07 Ireland
- 25 Bannan
- 11 Agbonlahor
- 14 Holman
- 21 Bowery
Live Text Commentary
Full Time The referee signals the end of the game.90:00 +3:31
Dany N'Guessan is caught offside. Shay Given takes the indirect free kick.90:00 +1:10 Substitution
Substitution Jack Smith replaces John Marquis.88:22
The assist for the goal came from Adam Smith.88:22 Goal scored
Goal! - John Marquis - Millwall 2 - 1 A Villa John Marquis scores a headed goal from close in. Millwall 2-1 Aston Villa.88:18
John Marquis takes a shot.83:24
Free kick awarded for a foul by Dany N'Guessan on Ciaran Clark. Ciaran Clark restarts play with the free kick.81:33
Direct free kick taken by David Forde.81:33 Substitution
Substitution Dany N'Guessan on for Andy Keogh.81:33 Booking
Booking Jordan Bowery goes into the referee's book.81:27
Jordan Bowery gives away a free kick for an unfair challenge on Danny Shittu.80:39
Direct free kick taken by Matthew Lowton.80:39 Substitution
Substitution Jordan Bowery is brought on as a substitute for Andreas Weimann.80:39 Booking
Booking Mark Beevers receives a yellow card for unsporting behaviour.80:34
Mark Beevers gives away a free kick for an unfair challenge on Eric Lichaj.79:06
Adam Smith takes a shot. Shay Given makes a comfortable save.77:09
Barry Bannan takes a shot. Save made by David Forde.70:07
Free kick awarded for an unfair challenge on Danny Shittu by Charles N'Zogbia. David Forde restarts play with the free kick.69:03
The assistant referee flags for offside against Andy Keogh. Indirect free kick taken by Shay Given.67:46
Unfair challenge on Adam Smith by Charles N'Zogbia results in a free kick. Danny Shittu takes the free kick.
Ciaran Clark gives away a free kick for an unfair challenge on John Marquis. Strike comes in from James Henry from the free kick.63:05
James Henry takes a shot. Save by Shay Given.53:43
Nadjim Abdou concedes a free kick for a foul on Andreas Weimann. Free kick crossed left-footed by Charles N'Zogbia from right wing, clearance made by Danny Shittu.53:23
Ashley Westwood challenges Danny Shittu unfairly and gives away a free kick. James Henry takes the direct free kick.52:32
James Henry takes the direct free kick.52:32 Booking
Booking Joe Bennett booked.52:23
Joe Bennett challenges Adam Smith unfairly and gives away a free kick.51:24
Barry Bannan takes a outswinging corner.48:34
Effort from deep inside the area by Liam Feeney misses to the left of the target.47:03
Inswinging corner taken by James Henry, save by Shay Given.46:01
Unfair challenge on Adam Smith by Ciaran Clark results in a free kick. James Henry restarts play with the free kick.45:01
The second half begins.45:00 +2:17 Half time
Half Time The referee blows for half time.45:00 +2:00
Right-footed shot by James Henry went wide left of the net.45:00 +1:24
Foul by Matthew Lowton on John Marquis, free kick awarded. James Henry restarts play with the free kick.44:53
Corner taken left-footed by Barry Bannan, David Forde makes a save.42:08
Outswinging corner taken from the left by-line by Barry Bannan, clearance made by Liam Trotter.40:49
The referee blows for offside. Indirect free kick taken by Ciaran Clark.40:15
Ashley Westwood challenges Adam Smith unfairly and gives away a free kick. David Forde takes the direct free kick.39:10
Inswinging corner taken from the left by-line by Ashley Westwood.38:21 Substitution
Substitution Fabian Delph leaves the field to be replaced by Barry Bannan.36:09
Adam Smith takes a shot. Save by Shay Given.34:08
John Marquis is flagged offside by the assistant referee. Shay Given takes the indirect free kick.31:46
Andreas Weimann is ruled offside. Karleigh Osborne takes the free kick.29:58
John Marquis is flagged offside by the assistant referee. Joe Bennett takes the indirect free kick.29:03
Short corner taken by Liam Feeney.28:18
Free kick awarded for an unfair challenge on Adam Smith by Darren Bent. Direct free kick taken by James Henry.26:39
The assist for the goal came from James Henry.26:39 Goal scored
Goal! - Danny Shittu - Millwall 1 - 1 A Villa Danny Shittu scores a headed goal from inside the penalty box. Millwall 1-1 Aston Villa.26:18
Corner taken by James Henry from the right by-line,24:52
Outswinging corner taken from the right by-line by James Henry, Danny Shittu produces a header from inside the area that goes over the bar.24:12
Liam Feeney takes a shot. Shay Given makes a save.21:52
The assist for the goal came from Andreas Weimann.21:52 Goal scored
Goal! - Darren Bent - Millwall 0 - 1 A Villa Darren Bent gets on the score sheet with a goal from inside the box to the bottom right corner of the goal. Millwall 0-1 Aston Villa.21:49
Andreas Weimann takes a shot. Save made by David Forde.19:38
Nadjim Abdou concedes a free kick for a foul on Charles N'Zogbia. Direct free kick taken by Charles N'Zogbia.16:59
Foul by Joe Bennett on Adam Smith, free kick awarded. James Henry takes the direct free kick.15:16
Nadjim Abdou fouled by Fabian Delph, the ref awards a free kick. Direct free kick taken by Adam Smith.14:51
The offside flag is raised against John Marquis. Shay Given takes the free kick.12:06
James Henry takes a shot from inside the box clearing the bar.11:05
Unfair challenge on John Marquis by Ashley Westwood results in a free kick. Free kick taken by David Forde.8:44
John Marquis concedes a free kick for a foul on Ron Vlaar. Shay Given restarts play with the free kick.5:51
Unfair challenge on Andreas Weimann by Danny Shittu results in a free kick. Ashley Westwood takes the free kick.2:52
Free kick awarded for an unfair challenge on James Henry by Fabian Delph. Direct free kick taken by David Forde.2:22
Outswinging corner taken by Ashley Westwood, Danny Shittu makes a clearance.0:42
Charles N'Zogbia produces a left-footed shot from just outside the box that goes wide left of the goal.0:00
The referee gets the game started.
Live data and text provided by our data suppliers