A late goal from Aiden O'Brien condemned Sheffield United to a frustrating home defeat at Bramall Lane this afternoon.
The former Republic of Ireland under-21 international pounced twice either side of substitute Jose Baxter's equaliser to ensure a match Nigel Adkins team will view as one that got away.
O'Brien converted, seemingly off his shoulder, from Shane Cumming's cross to give Millwall the lead before United hit the target with 19 minutes left. However, a point, or even the possibility of all three, slipped away when O'Brien scrambled home beyond Mark Howard during the closing stages.
United created numerous openings and potential opportunities but after conceding in the first-half, were forced to wait until the second before deservedly dragging themselves back on level terms.
Che Adams saw an early shot cannon back off the woodwork while Billy Sharp and Jamal Campbell-Ryce probed. Neill Harris' side, though, were tenacious and well-drilled. They survived plenty of scares but managed to avoid, for the most part at least, allowing the hosts the number of clear attempts on goal their possession would usually guarantee until Baxter pounced.
If United thought the stage was set for a comeback, though, they were mistaken. With nine minutes remaining, some slipshod defending allowed Millwall to snake into position, substitutre Shane Ferguson to cross and O'Brien to claim his second of the afternoon from close-range although Kieran Wallace may, or may not, have got the decisive touch.
Millwall, with former Sheffield Wednesday defender Mark Beevers featuring in their starting eleven, made a positive start with Mark Howard's goal, despite not coming under serious pressure, peppered with some snap-shots. But it was United, thanks to Sharp's invention and persistence, who came closest to breaking the deadock when Adams, peeling away to receive the centre-forward's pass, struck a post.
The move ended in frustration but sparked United's attack into life with another incisive piece of play, this time instigated by Campbell-Ryce, ending with Chris Basham seeing a goalbound effort bravely blocked. Millwall continued to respond - Kieran Wallace doing well to prevent Fred Onyedinma a clear route through from Jordan Archer's quick throw - but the pace of United's darts into opposition territory was causing them a huge problem.
First Matt Done and then Sharp, nearly wriggling his way through a block of four blue and white shirts, came close to underlocking Millwall's defence. At the midway point of the first-half, Campbell-Ryce showed Joe Martin a clean pair of heels but his cross was nodded away by Beevers as Sharp, who had taken a step off his shoulder, prepared to pounce.
Then out of nothing, in the 31st minute, Millwall took the lead in slightly fortuitous fashion when the ball bounced off O'Brien's shoulder and looped into the top corner of Howard's net. An opportunity presented itself for Done straight from the re-start but the United man, unusually, dithered in possession and was eventually crowded-out inside the penalty box.
Howard scrambled across his line to palm George Saville's shot creeping into the back of his net as the contest became increasingly stretched. Baxter, who replaced Done at the start of the second-period, announced his presence by sweeping an excellent free-kick into the penalty area but Neill Collins' header flew over the crossbar.
Baxter, busy and determined in midfield, flashed a first time effort wide of Archer's right hand post before picking his sport perfectly in the 71st minute after Sharp and Adams had worked the ball forward. However, the wind was sucked from United's sails when O'Brien turned home again to seal victory for Millwall.
Sheffield United: Howard, Freeman (Flynn 86), Basham, Sharp, Done (Baxter 46), Collins, Campbell-Ryce (Sammon 67), Adams, K Wallace, McGahey, Hammond. Not used: Coutts, Woolford, Long, Kennedy.
Millwall: Archer, Cummings, Martin, Craig, Gregory (Ferguson 73), Onyedinma (Webster 90), Beevers,
Morison, Saville, O'Brien (L Martin 87), Thompson. Not used: Forde, Powell, Romeo, Pavey.
Referee: Andy Haines.