Shaun Williams' first half penalty secured a Millwall win against Aston Villa in the Lions' final game of the Sky Bet Championship season.

Jed Wallace went down inside the area leading to the Republic of Ireland international netting his second of the league season.

Substitute Lee Gregory almost doubled the lead but was denied late on by shot-stopper Mark Bunn as Neil Harris' men obtained all three points.

Wins elsewhere meant a sixth place finish was ultimately too elusive for them but the highly successful campaign exceeded most people's expectations.

Here are five things we learned...

Ben Marshall impresses again, and must be top of Harris' transfer list

The wide man, on loan from Premier League-bound Wolves, was News Shopper's man of the match while Mahlon Romeo missed out through injury.

He was impressive from start to finish, nearly delivering the assist for a second Williams goal, and was deservedly applauded for his performance when he was substituted.

Marshall may or may not return next season for Millwall but if his services could be secured then it would be a big coup for the club.

Was that one of Millwall's most impressive clean sheets this season?

Steve Bruce's Villa registered five shots on target out of the 14 they attempted, but they seldom looked like scoring the equaliser.

Conor Hourihane, Henri Lansbury, and Josh Onomah had cracks at goal but goalkeeper Jordan Archer was rarely troubled most of the game, with huge credit to his back four as well.

Villa have never scored against Millwall in the league this season but this felt like a defensive display which was right up there.

How does Fred Onyedinma improve for next season?

The 21-year-old was partnered up top with skipper Steve Morison in an attempt to hurt the visitors with his speed and directness of play.

However, what has been thematic of Onyedinma's season returned in this performance where his decision-making and finishing left a lot to be desired.

He clearly has room for potential and could become a very good player but this was an opportunity he didn't take well enough - and will need to build upon come August.

Despite the win, the game lacked quality from both sides

The first 30 minutes of the game were pretty dire, save for a goalline clearance by Ben Marshall and Williams' penalty.

Aston Villa made their intentions known but their execution in the final third was lacking, largely because of Millwall's defending.

But given it was the last day of the season, its ramifications meant little in the grand scheme of things.

Shaun Hutchinson - Millwall's Player of the Year

Harris briefly touched on it in his post-match press conference, and it was not a surprise to see Hutchinson scoop the award.

The 27-year-old, who joined the club from Fulham in 2016, has played every minute of the Lions' league season.

Byron Webster's injury forced him to step up with more responsibility but he has taken it with aplomb and deserves the recognition he's getting.