Reading manager Jose Gomes paid tribute to his players - and those of Birmingham - after they formed a guard of honour for retiring defender John O'Shea when he came on as a substitute during the goalless draw.

The 38-year-old former Manchester United and Republic of Ireland centre-back has called it a day after a 20-year playing career.

"No, I've never seen anything like that before," Gomes said of O'Shea's guard of honour. "For me, it meant a lot. The respect that was shown to John.

"He is a very intelligent person. He's quiet, he doesn't speak too much. But when he talks, everybody listens.

"All the players respect him a lot. He won everything - he had a fantastic career - and deserved it.

"The guard of honour was the players' idea. All of them respect John a lot."

Derby seemed set to agonisingly miss out when Martyn Waghorn's 19th-minute header was cancelled out by West Brom midfielder Stefan Johansen's curling effort moments after the interval.

With Middlesbrough leading already-relegated Rotherham at the time, Derby could ill-afford to drop points and substitute Mason Bennett's goal and Harry Wilson's controversial penalty gave them a 3-1 win.

Tom Lawrence saw his strike saved but Bennett scored the rebound in the 70th minute and, moments later, Wilson netted from the spot after Lawrence went to ground despite minimal, if any, contact from Kyle Bartley.

Derby maintaining their one-point advantage over Boro - to set up a mouthwatering semi-final with Leeds - meant Tony Pulis' side finished in the undesired position of seventh though they closed their campaign with a 2-1 win at Rotherham

Britt Assombalonga's 28th-minute penalty, after he was clumsily fouled by Clark Robertson in the area, put them on their way.

John Obi Mikel then got on the scoresheet nine minutes later for his first goal in the English league since September 2013 - his first since arriving at the club.

Michael Smith pulled one back for the Millers four minutes from time from the penalty spot after Mikel's foul on Kyle Vassell in the box.

Mario Vrancic scored four minutes from time as Norwich made sure they capped promotion by winning the second tier title following a hard-fought 2-1 win at Aston Villa.

Teemu Pukki had put Norwich ahead in the seventh minute and though Jonathan Kodjia levelled just before the quarter of an hour mark, Vrancic ensured the Canaries left the Championship in style.

The result at Villa Park mattered little though as Sheffield United were unable to win at Stoke, who twice threw a one-goal lead away in a 2-2 draw at the bet365 Stadium.

Sam Vokes and Ryan Shawcross twice put the Potters one goal to the good but second-half substitute Kieran Dowell and Enda Stevens guaranteed a share of the spoils for the already-promoted Blades.

Leeds stayed third - but only because of West Brom's defeat - as Ipswich signed off in style from the Championship, defeating Marcelo Bielsa's men 3-2 at Portman Road.

The relegated Tractor Boys needed Collin Quaner's last-gasp strike to seal victory after Leeds had missed a penalty to go in front themselves, with Kemar Roofe unable to slot home after being fouled by Luke Chambers, who was dismissed.

Before the frantic finale, Ipswich's goals from Flynn Downes and Andre Dozzell were cancelled out by Mateusz Klich and Stuart Dallas.

Matt Smith struck in the third minute of time added-on as QPR overcame Sheffield Wednesday 2-1.

Josh Scowen's strike seemed set to prove the difference as Owls playmaker Fernando Forestieri and Rangers counterpart Eberechi Eze both missed penalties but Michael Hector levelled from the spot, only for Smith to score deep into the stoppage time.

Darragh Lenihan and Bradley Dack struck but Blackburn could only claim a 2-2 draw against Swansea, whose goals came from Courtney Baker-Richardson and Oliver McBurnie.

Markus Henriksen's added-time own goal saw Bristol City claim a 1-1 draw at Hull, who had gone ahead through Jackson Irvine in the 55th minute, while Joe Lolley's strike just before the half hour helped Nottingham Forest edge out Bolton 1-0.

Ezri Konsa, Neal Maupay and Marcus Forss were on-target as Brentford overcame Preston 3-0, Joe Garner's early effort ushered Wigan to a 1-0 win over Millwall.