Promotion, relegation, and play-off places were all decided during a gripping final day of a prolonged Sky Bet Championship season.
West Brom took the final automatic spot to join champions Leeds in the Premier League, leaving Brentford and Fulham in the play-offs.
Swansea snatched the final play-off place from Nottingham Forest, joining rivals Cardiff in the top six.
At the bottom, Wigan were relegated subject to an appeal against their 12-point deduction for entering administration, along with Charlton and Hull. Barnsley, Luton, Birmingham and Middlesbrough toasted survival.
Here’s how a dramatic evening unfolded.
Remarkably, 10 of the 12 fixtures involved teams who still had something to play for. Bristol City’s home game against Preston and Huddersfield’s trip to Millwall were the only dead rubbers.
The first meaningful goal of the evening came at St Andrew’s where struggling Birmingham made a dismal start, falling behind to Derby following a strike from Graeme Shinnie.
There was soon better news for Birmingham as Adam Armstrong put Blackburn ahead at Luton. Meanwhile, Middlesbrough conceded at Sheffield Wednesday, with Jacob Murphy firing home a deflected strike.
Charlton’s hopes of survival were dealt a blow at Elland Road as Ben White superbly fired home his first Leeds goal to put the champions in front.
In the race for play-offs, there was an action-packed few minutes. Swansea boosted their outside hopes of scraping a top-six finish as Rhian Brewster put them ahead at Reading, just before Nottingham Forest fell behind to a goal from Stoke defender Danny Batth and Junior Hoilett put Cardiff ahead against bottom club Hull.
Paddy McNair, who earlier hit a post, put a little bit of breathing space between Neil Warnock’s Boro and the drop zone by equalising at Hillsborough.
Luton climbed out of the bottom three at Charlton’s expense after a Hayden Carter own goal drew them level against Blackburn. At the same time, Lee Bowyer’s Addicks went 2-0 down at Elland Road after conceding to Stuart Dallas.
In a big game at both ends of the table, Wigan, who have appealed against their points deduction, went ahead at home to promotion-chasing Fulham through Kieffer Moore.
West Brom dropped out of the top two after Ryan Manning put QPR ahead at The Hawthorns. Brentford, who were being held by Barnsley, took their place. Meanwhile, Hull’s plight worsened as Sean Morrison doubled Cardiff’s lead.
Another Blackburn own goal, this time from Bradley Johnson, strengthened Luton’s survival bid as they came from behind to lead at Kenilworth Road.
Brentford’s stay in the promotion places proved to be brief. Barnsley, desperate for points to prevent an immediate return to League One, went ahead at Griffin Park thanks to Callum Styles’ first Tykes goal.
West Brom boss Slaven Bilic breathed a sigh of relief as the Baggies capitalised on the Bees falling behind by levelling through Grady Diangana. Elsewhere, just three minutes after Yakou Meite was sent off for an altercation with Mike Van Der Hoorn, 10-man Reading harmed Swansea’s top-six hopes by levelling at 1-1 thanks to George Puscas’ penalty.
After goals in each of the games during the opening 45 minutes, West Brom were in position to join Leeds in the top flight. Brentford and Fulham occupied play-off places, along with Cardiff and Forest. Barnsley, Charlton and Hull were in the bottom three.
Wigan fell into the relegation zone after Neeskens Kebano’s free-kick drew Fulham level at the DW Stadium. Barnsley were the team to benefit. Simultaneously, West Brom tightened their grip on second place, Callum Robinson putting them 2-1 ahead.
Ivan Sunjic eased Birmingham’s concerns with an equaliser against Derby.
Luton were able to relax slightly after James Collins’ penalty – their first shot on target after two own goals – made it 3-1 against Blackburn.
The Baggies were pegged back to 2-2 by QPR forward Eberechi Eze, while Forest tightened their grip on a top-six spot after Tobias Figueiredo levelled against Stoke.
Charlton’s survival hopes were left hanging by a thread after Leeds, who went three goals ahead through early in the second period thanks to Tyler Roberts, added a fourth through Jamie Shackleton. Despite the scores in Cardiff and Nottingham, Swansea did their best to keep alive their play-off hopes as Wayne Routledge put them 2-1 in front at the Madejski Stadium.
In west London, Josh Dasilva’s 10th goal of the season put pressure on West Brom as Brentford restored parity against Barnsley to move within a point of second place. The goal dropped the Tykes into the relegation places. Charlton, who were being thumped, moved into the safe zone. Forest again went behind against Stoke, James McClean’s goal meaning they remained above Swansea on goal difference only.
Blackburn striker Sam Gallagher pulled a goal back against Luton to make it 3-2 and set up a nervy finish for the hosts.
Forest’s play-off hope were left hanging by a thread after Lee Gregory put Stoke 3-1 ahead at the City Ground. Minutes later, Swansea put more pressure on them, moving within a one-goal swing of sixth spot after Liam Cullen put them 3-1 up. Elsewhere, Hull’s demise was almost certainly confirmed after Danny Ward fired Cardiff 3-0 in front.
There was drama aplenty in stoppage time. Barnsley pushed themselves safe after Clarke Oduor’s first senior goal ended Brentford’s automatic promotion hopes. Charlton slipped below the line. Meanwhile, Routledge’s second of the evening remarkably propelled the Swans ahead of Forest on goals scored. Derby went 3-1 in front at Birmingham thanks to late goals from Morgan Whittaker and Louie Sibley.
Britt Assombalonga banished any lingering fears for Middlesbrough by putting them 2-1 ahead at Sheffield Wednesday.
Forest’s misery was complete deep into stoppage time. Nuno Da Costa’s own goal made it 4-1 to Stoke, prompting wild Swansea celebrations.
A 2-2 draw was sufficient for West Brom to be promoted, while Brentford and Fulham had to settle for play-off places alongside Cardiff and Swansea. Charlton and Hull were relegated. Subject to appeal, Wigan will join them in League One next term. Barnsley celebrated a great escape wildly in the last game to be played at Griffin Park and champagne also flowed at Elland Road as Leeds lifted the title.