Match ends, Port Vale 0, Millwall 2.
Millwall moved up to 12th in League One after an impressive third away win of the season at Port Vale.
The Londoners had four great chances to take the lead inside the first quarter of an hour, but had to wait until the second half to break the deadlock.
Mark Beevers opened the scoring as he headed in a corner from eight yards.
Vale's Enoch Andoh had chances to score either side of Beevers' goal before Lee Gregory hit a stoppage time penalty after he was fouled by Jak Alnwick.
- 21AlnwickBooked at 90mins
- 4StreeteSubstituted forInnissat 45'minutes
- 42GrantBooked at 75mins
- 10DoddsSubstituted forLeitch-Smithat 63'minutes
- 11FoleySubstituted forMcCourtat 83'minutes
- 6WilliamsBooked at 16mins
- 17WebsterBooked at 67mins
- 10OnyedinmaSubstituted forFergusonat 76'minutes
- 20MorisonSubstituted forGregoryat 67'minutes
- 22O'BrienBooked at 66minsSubstituted forMarquisat 83'minutes
- Oliver Langford
- Shots on Target
Second Half ends, Port Vale 0, Millwall 2.
Shaun Williams (Millwall) wins a free kick in the attacking half.
Foul by Uche Ikpeazu (Port Vale).
Attempt missed. Ed Upson (Millwall) right footed shot from outside the box is close, but misses to the left.
Goal! Port Vale 0, Millwall 2. Lee Gregory (Millwall) converts the penalty with a right footed shot to the bottom left corner.
Jak Alnwick (Port Vale) is shown the yellow card for a bad foul.
Penalty Millwall. Lee Gregory draws a foul in the penalty area.
Penalty conceded by Jak Alnwick (Port Vale) after a foul in the penalty area.
Foul by Shaun Williams (Millwall).
Anthony Grant (Port Vale) wins a free kick on the right wing.
Attempt blocked. Anthony Grant (Port Vale) left footed shot from the centre of the box is blocked.
Attempt missed. Jak McCourt (Port Vale) right footed shot from outside the box misses to the left.
Substitution, Port Vale. Jak McCourt replaces Sam Foley.
Substitution, Millwall. John Marquis replaces Aiden O'Brien.
Attempt missed. Uche Ikpeazu (Port Vale) right footed shot from the centre of the box is too high.
Corner, Port Vale. Conceded by Shaun Williams.
Corner, Port Vale. Conceded by Jordan Archer.
Attempt saved. Sam Foley (Port Vale) right footed shot from the right side of the box is saved in the bottom right corner.
Substitution, Millwall. Shane Ferguson replaces Fred Onyedinma.