Shaun Williams' second goal of the season secured victory for Millwall in their final game of the Sky Bet Championship season against Aston Villa at The Den on Sunday afternoon.
The midfielder struck on the half-hour mark after Ryan Tunnicliffe was fouled, whilst Lee Gregory also had a late spot-kick saved.
Millwall boss Neil Harris made two changes to his starting line-up from last Saturday's 2-0 defeat at Middlesbrough, with Fred Onyedinma and Aiden O'Brien replacing the injured Mahlon Romeo and Gregory.
Ben Marshall reverted to right-back, whilst O'Brien took his place on the left wing and Onyedinma partnered Steve Morison in attack.
The first opportunity of the afternoon came on seven minutes and went the way of The Lions, but Jed Wallace could not prod Onyedinma's cross home following good work from the frontman and O'Brien. Johnathan Kodija blasted Villa's opening attempt well wide.
On 16 minutes O'Brien nearly fooled Mark Bunn with a cross that quickly became a shot, but the stopper was equal to it, tipping the ball over the crossbar. Marshall blazed over from the resulting corner-kick.
The visitors threatened for the first time just moments later but 2017/18 Player of the Year Shaun Hutchinson was on hand once more to make a superb block from Albert Adomah's shot - a follow-up was cleared to safety.
Smart play from Wallace and Morison set up Onyedinma shortly after the midway point of the first half, but the cross was blocked with the former waiting inside the penalty area.
On the half-hour mark The Lions were awarded a penalty after Ryan Tunnicliffe was pulled down inside the box. Williams stepped up to confidently strike home his second goal of the season to open the scoring.
Villa looked to level straight away and nearly did so through Josh Onomah, but Jordan Archer was equal to the attempt low down.
Five minutes into the second half Millwall looked to double their lead, but goal-scorer Williams nodded slightly over from Marshall's corner. Onyedinma really should have done better on 53 minutes, but after latching on to Morison's through-ball the attacker got his attempt horribly wrong.
Onomah fizzed an effort over the crossbar moments after that, whilst Conor Hourihane flashed a shot wide shortly after the 60-minute mark.
Onyedinma was just caught offside as he looked to bear down on goal via Williams' superb ball over the top on 66 minutes, but it was Villa who almost notched the second goal of the game at the other end - however, Archer tipped James Bree's shot around the post.
Steve Bruce executed a triple substitution 15 minutes from time as he looked for a way back into the match. Hourihane struck into the arms of Archer from distance following that, whilst substitute Shane Ferguson brilliantly threw his body on the line to block fellow sub Jack Grealish's close-range shot.
Five minutes from time The Lions were awarded another penalty, this time for handball as Onyedinma looked to steer the ball towards goal. Lee Gregory stepped up and struck well, but Bunn saved. The goalkeeper also incredibly saved the rebound before Morison failed to convert a third attempt.
After a period of stoppage-time the whistle was blown on Millwall's remarkable first campaign back in The Championship - and what a season it was!
Millwall: Archer, Meredith, Hutchinson, Williams, Onyedinma, Wallace, Tunnicliffe, Morison, O'Brien (Gregory 64'), Cooper, Marshall (Ferguson 79'). Subs not used: Martin, Shackell, Toffolo, Thompson, Elliott.
Scorer: Williams 30' (pen)
Aston Villa: Bunn, Chester, Lansbury, Hogan (Grealish 75'), Hourihane, Jedinak, Bree, Onomah, Hutton, Kodjia (Snodgrass 75'), Adomah (Grabban 74'). Subs not used: Sarkic, Whelan, Terry, Elmohamady.
Referee: Tim Robinson
Attendance: 17,195 (2,163)