A Shaun Williams penalty was enough for Millwall to win against Aston Villa in the final league game of the Sky Bet Championship season.

The 31-year-old scored his second league goal this season after a foul in the area by defender Mile Jedinak on the half hour.

Late into the second half, Millwall were awarded a second spot-kick but substitute Lee Gregory was denied by shot-stopper Mark Bunn from 12 yards out.

While the Lions will not secure the final playoff spot, as results did not swing their way, they will begin their campaign in the division this coming August.

Neil Harris opted to start Ben Marshall at right back, Ryan Tunnicliffe in midfield alongside Williams, and Fred Onyedinma up top in a reshuffled Lions starting 11.

The match lacked quality throughout the first half but the Lions remained resolute as Shaun Hutchinson denied Jonathan Kodjia a scoring opportunity before Marshall made a goalline clearance on 17 minutes.

Aston Villa pressed with their multiple attackers, through Albert Adomah, Josh Onomah, and Scott Hogan but could not find a way through the hosts at the Den.

Onomah, on loan from Premier League club Tottenham Hotspur, tested goalkeeper Jordan Archer from range five minutes from the restart but it was a relatively easy save.

Williams was provided with an opportunity to score his third this season from a corner with a header but it grazed the crossbar and out on 49 minutes.

Captain Steve Morison played the role of creator-in-chief as he fed through Fred Onyedinma, however, his shot was both wide and off-target eight minutes into the second half.

The Villains sought to equalise, again and again, and Conor Hourihane found space outside the box to fire one from deep but Archer was there to deny what would have been a spectacular goal.

Both sides introduced changes later on into the second half - Aiden O'Brien and Ben Marshall were replaced by Gregory and Shane Ferguson, while Robert Snodgrass and Lewis Grabban came on for the visitors.

Grabban received a hostile reception from the supporters as he was brought on 74 minutes in, remembered for his spell with the club between 2008 and 2011.

While time elapsed the game was dominated by the away side but still did not show moments of great quality, but the game went from bad to worse when James Chester committed a foul inside the box less than ten minutes from time.

Substitute Lee Gregory, who was brought on for Aiden O'Brien, stepped up to take it but was denied by Bunn as the game drew to a close.

Millwall won their first league game against Villa at home for the first time since December 1989, while maintaining a nine-match unbeaten record at home on the last day in the league since 1999.