OXFORD United held their nerve to fend off ten-man Millwall and reach the Johnstone's Paint Trophy final at Wembley.

Kemar Roofe's double in the first leg of the area final ultimately proved enough as the Lions could only find the net once through Lee Gregory.

The visitors' hopes were seemingly dashed when Mark Beevers was sent off for a foul on Danny Hylton, leaving Millwall a player short for 26 minutes.

Despite their best efforts United could not find a way past Jordan Archer, but ultimately it did not matter.

The U's made three changes from the side that lost to Blackburn in the FA Cup.

Jonjoe Kenny was handed his first start at right-back, Danny Hylton replaced Jordan Bowery up front, while goalkeeper Benji Buchel came in for Sam Slocombe.

Chris Maguire didn't make the squad as his registration was not completed on time.

The visitors had a few early sighters, with Steve Morison seeing an effort blocked by Jake Wright, before heading a Shane Ferguson cross wide.

Millwall looked dangerous for the opening 15 minutes and Kenny made a vital header to prevent Aiden O'Brien meeting Jed Wallace's cross.

United rode the early pressure and Hylton was inches away from connecting with a Callum O'Dowda ball on 20 minutes, before Kemar Roofe fired into the side-netting from the edge of the area.

Buchel was then called into action on 27 minutes, but Wallace's curled effort was comfortable for the keeper.

The tie was ebbing and flowing and the atmosphere only added to the occasion.

Hylton took a tumble in the area on 37 minutes only for referee Scott Duncan to wave away the protests.

And the hosts ended the half with their first shot on target, with Roofe testing Jordan Archer at his near post.

United looked comfortable in the opening stages after the break, but a lapse in concentration at the back allowed Gregory to play in Morison, but Buchel was quick off his line to deny the striker.

Oxford went straight down the other end and Hylton headed straight at Archer from six yards after great work from O'Dowda.

But the miss proved costly as on 54 minutes O'Brien found space on the left and fed Gregory who turned on a sixpence and slotted past Buchel.

United looked to respond straight away and the ever willing O'Dowda breezed past Shaun Cummings, but Liam Sercombe could not connect with the ball on the edge of the area.

And suddenly the match swung in United's favour.

On 64 minutes, the ball was played into Hylton and the United forward, racing towards the area, was brought down by Mark Beevers, who was rightly shown a straight red.

Archer then brilliantly denied O'Dowda from the resulting free-kick, before Alex MacDonald headed a corner narrowly wide, with the keeper well beaten.

United had their tales up and Sercombe found Roofe in acres of space in the area only for the forward to completely miss kick the ball, before Hylton was foiled by Archer.

The tie had truly come to life, with United still needing a goal to make the game safe on aggregate.

Millwall were pushing for their second, but the hosts were so dangerous on the counter and this time Archer denied MacDonald after great work from Hylton.

The visitors continued to press, but United held strong, resisting everything the Sky Bet League One side threw at them in the final ten minutes.

They had one last go, with Archer coming up for a 94th minute free-kick, but United hacked clear and the referee's whistle was met with joyous celebrations.

Oxford United (4-4-2): Buchel, Kenny, Mullins, Wright, Skarz, MacDonald (Bowery 81), Sercombe, Lundstram, O'Dowda (Ismail 89), Roofe, Hylton.

Unused subs: Slocombe, Ruffels, Dunkley.

Booked: None.

Millwall (4-4-2): Archer, Cummings (Martin 68), Webster, Beevers, Ferguson, Wallace, Abdou, Upson (Onyedinma 82), O'Brien, Gregory, Morison.

Unused subs: Forde, Marquis, Thompson.

Booked: Cummings, Beevers.

Sent off: Beevers.

Referee: Scott Duncan (Northumberland).

Attendance: 10,138 (1,478 visitors).