Match ends, Crewe Alexandra 1, Millwall 3.
Aiden O'Brien scored a hat-trick for Millwall as bottom club Crewe Alexandra suffered a third consecutive defeat.
O'Brien put the visitors in front when he turned in Carlos Edwards's cross at the back post.
Lauri Dalla Valle scored a fortuitous equaliser when Brad Inman's shot deflected off him and past goalkeeper Jordan Archer.
But O'Brien put Millwall back in front with a stunning 30-yard strike, before drilling in a third to seal victory.
Millwall manager Neil Harris told BBC London 94.9:
"I thought we were fantastic - first and foremost I need to talk about Aiden; what a hat-trick. He's got the ability and quality to do that. It wasn't just his goals, his all-round performance was good.
"The back four were much better, much more aware of danger.
"I thought all over the park, I thought the subs that came on played their part, I thought we managed the game really well and that's the pleasing thing."
- 4DavisBooked at 60mins
- 15FoxSubstituted forWilsonat 67'minutes
- 12Dalla ValleSubstituted forCooperat 80'minutes
- 15NelsonSubstituted forWebsterat 51'minutesBooked at 87mins
- 10OnyedinmaSubstituted forFergusonat 69'minutes
- 22O'BrienSubstituted forGregoryat 84'minutes
- Darren Handley
- Shots on Target
Second Half ends, Crewe Alexandra 1, Millwall 3.
Corner, Crewe Alexandra. Conceded by Jordan Archer.
Attempt saved. Ryan Colclough (Crewe Alexandra) right footed shot from outside the box is saved in the top right corner.
Mark Beevers (Millwall) is shown the yellow card for a bad foul.
Bradden Inman (Crewe Alexandra) wins a free kick on the right wing.
Foul by Mark Beevers (Millwall).
Attempt saved. Harry Wilson (Crewe Alexandra) left footed shot from outside the box is saved in the centre of the goal.
Attempt missed. Shaun Williams (Millwall) left footed shot from outside the box misses to the left.
Oliver Turton (Crewe Alexandra) wins a free kick in the attacking half.
Foul by Ed Upson (Millwall).
Attempt missed. Harry Wilson (Crewe Alexandra) left footed shot from outside the box is close, but misses to the right.
Attempt missed. Ed Upson (Millwall) right footed shot from outside the box is close, but misses to the left.
Substitution, Millwall. Lee Gregory replaces Aiden O'Brien.
Substitution, Crewe Alexandra. George Cooper replaces Lauri Dalla Valle.
Foul by Chris Atkinson (Crewe Alexandra).
Shaun Williams (Millwall) wins a free kick in the attacking half.
Attempt missed. Ryan Colclough (Crewe Alexandra) left footed shot from outside the box misses to the right.
Bradden Inman (Crewe Alexandra) wins a free kick in the defensive half.
Foul by Shane Ferguson (Millwall).