Full-time | Millwall 1-1 Bradford City
Millwall booked their place in the League One Play-Off Final against Barnsley after a thrilling 1-1 draw with Bradford City at The Den to go through 4-2 on aggregate.
Lee Gregory kept his calm in a cauldron of noise to fire The Lions ahead on 33 minutes only for Jamie Proctor to level two minutes before the break.
Neil Harris' charges withstood some sustained pressure from the Bantams in the second-half but held firm for a draw on the night to book a fourth Wembley appearance in seven years.
The game kicked off to a backdrop of phenomenal noise from the crowd, and although the 1,800 travelling fans were loud, there is simply no match when The Den faithful are in full voice.
Those fans were in uproar twice within the opening 10 minutes when The Lions had two penalty appeals waved away by referee Tim Robinson.
The first came when Shane Ferguson did well to keep the ball in play and his low cross looked to be palmed away by Stephen Darby. Moments later Jimmy Abdou's penetrative run into the penalty area was brought to a halt and he went to ground after being caught by a stray boot.
Millwall created the first clear scoring chance of the game with 16 minutes on the clock when Lee Gregory did well to win possession in his own half, strode forward and picked his moment before slipping a perfectly weighted pass through to Ben Thompson. The onrushing midfielder took a couple of touches and took aim, but Josh Cullen got back just in time to divert his shot for a corner.
At the other end Lions keeper Jordan Archer comfortaby collected Billy Clarke's deep cross and then Joe Martin expertly headed a teasing Kyel Reid delivery away from the danger zone.
There was a collective sigh of relief on 33 minutes when Nathan Clarke stole in to power a header from McMahon's corner a yard wide of the upright.
How costly that miss proved to be, and with one sweeping forward move Millwall conjured up the game's opening goal to ease 4-1 ahead on aggregate.
It could have been 2-0 four minutes later with a near carbon copy free-kick from left-back Martin, who scored with a corker at the Coral Windows Stadium in the first leg.
On this occasion Martin's 25-yard free-kick curled up and over the wall, only to be tipped over the bar by Williams.
However Bradford regrouped and responded positively, hauling themselves level two minutes before the break courtesy of Proctor's effort from close range after his initial shot from Reid's cross had been blocked by Archer.
Then in the first minute of injury-time it was heart in mouth stuff when Billy Clarke threaded the ball to Proctor, but Mark Beevers recovered well and the opportunity was lost.
It was a nervy end to the first-half for The Lions, but important to tick off another 45 minutes with that precious two-goal advantage from the first leg still intact.
Not surprisingly the visitors tried to work up a head of steam straight after the restart, but it was The Lions who created the first of the scoring opportunities of the half with a Byron Webster header from Chris Taylor's corner flashing narrowly wide.
Abdou then lashed the ball into the CBL Upper after Morison's cross to Gregory eventually found its way to the midfielder and then Clarke cleared a huge Carlos Edwards' throw that caused chaos in the visiting defence.
Bradford, who had introduced Tom Thorpe at the start of the second-half, brought on Paul Anderson for McMahon for the final 22 minites to chants of 'Attack, attack, attack' from the Bradford fans.
But The Den crowd were not going to be outsung, and cranked up the volume another notch. At times, if you shut your eyes and closed your ears you could feel the vibration of the Monks' chant rise through your body.
Bantams boss Parkinson threw the last roll of his dice with 16 minutes remaining, replacing centre half Nathan Clarke with Stephen Davies and going for broke.
But hard as City tried to find a way through, Harris' men kept their shape and discipline to perfection to withstand a late onslaught and book a date at Wembley.
Archer, Edwards, Martin, Beevers, Webster (Craig, 90+3mins), Abdou, Thompson, Ferguson, Gregory (Williams, 88mins), Morison, Taylor. Subs not used: Forde, Upson, Onyedinma, Nelson, O'Brien.
Taylor (85mins), Ferguson (86mins)
Williams, Darby, Meredith, Evans, N.Clarke (Davies, 74mins), B.Clarke, Cullen (Thorpe, 46mins), Reid, Proctor, McArdle, McMahon (Anderson, 68mins). Subs not used: Cracknell, Marshall, Morris, Burke.
Evans (79mins), McArdle (84mins), Reid (88mins)
16,301 (away 1,718)
Tweets by @MillwallFC