Match ends, Birmingham City 2, Reading 1.
Tomasz Kuszczak saved a last-minute penalty as Birmingham City held on to secure a dramatic victory against Reading at St Andrew's.
David Cotterill put Blues in front with a wildly deflected free-kick which beat Reading keeper Jonathan Bond.
Jon Toral doubled the hosts' advantage after the restart when he leapt to head home a Clayton Donaldson cross.
Nick Blackman nodded the visitors back in it, but Kuszczak saved Orlando Sa's penalty after Simon Cox was fouled.
Birmingham went ahead after Paul McShane brought down Clayton Donaldson and Cotterill fired home the free-kick.
Debutant Toral put Birmingham 2-0 up after smart link-up play with Donaldson allowed him to head past Bond.
Reading were back in it soon afterwards when Chris Gunter fired a cross towards Blackman, who headed the ball past Blues debutant Kuszczak.
Deep into added time, Cox was brought down by David Davis in the box and Kuszczak coolly saved Sa's weak spot-kick.
Afterwards, Reading manager Steve Clarke said an Aaron Tshibola effort should have stood. Tshibola's powerful shot from outside the box bounced down off the crossbar and back into play.
Birmingham manager Gary Rowett: "It was an amazing game. It had little bit of everything for the spectator.
"It is the sign of the Championship in some ways. People talk about it as the most unpredictable league in the world.
"I was not overly sure it was a penalty but then Tomasz Kuszczak came up with a moment of experience and brilliance to win the game."
Reading manager Steve Clarke on Tshibola's disputed 'goal': "I don't know if it was a goal. Why they don't have goal-line technology in the Championship, League One and Two I don't know because it is such a simple thing to do.
"Every club could have it. There is so much money in the game. The professional game could be covered from top to bottom instead of giving all the money to one big superstar player.
"It is a clear decision. It's either a goal or it isn't. It works in the Premier League so why not bring it in for the good of the game? Points are vital at every level so these sort of decisions are really important."
- 29KuszczakBooked at 90mins
- 6KieftenbeldBooked at 39minsSubstituted forDavisat 63'minutesBooked at 90mins
- 11CotterillSubstituted forRobinsonat 81'minutes
- 20ToralSubstituted forShinnieat 71'minutes
- 9DonaldsonBooked at 90mins
- 8HectorBooked at 90mins
- 11ObitaBooked at 61mins
- 22BlackmanSubstituted forRobson-Kanuat 79'minutes
- 18TshibolaBooked at 17minsSubstituted forSamuelat 86'minutes
- 6NorwoodBooked at 49mins
- 21QuinnSubstituted forCoxat 83'minutesBooked at 90mins
- 26Al Habsi
- Peter Bankes
- Shots on Target
Second Half ends, Birmingham City 2, Reading 1.
Clayton Donaldson (Birmingham City) is shown the yellow card.
Attempt missed. Simon Cox (Reading) right footed shot from the right side of the six yard box misses to the left following a set piece situation.
Penalty saved! Orlando Sá (Reading) fails to capitalise on this great opportunity, right footed shot saved in the bottom right corner.
Tomasz Kuszczak (Birmingham City) is shown the yellow card.
Penalty Reading. Simon Cox draws a foul in the penalty area.
Penalty conceded by David Davis (Birmingham City) after a foul in the penalty area.
Foul by Hal Robson-Kanu (Reading).
Stephen Gleeson (Birmingham City) wins a free kick in the defensive half.
Michael Hector (Reading) wins a free kick in the defensive half.
Foul by Clayton Donaldson (Birmingham City).
David Davis (Birmingham City) is shown the yellow card.
Michael Hector (Reading) is shown the yellow card for a bad foul.
Foul by Michael Hector (Reading).
Clayton Donaldson (Birmingham City) wins a free kick on the left wing.
Simon Cox (Reading) is shown the yellow card.
Simon Cox (Reading).
Tomasz Kuszczak (Birmingham City) wins a free kick in the defensive half.
Attempt missed. Demarai Gray (Birmingham City) right footed shot from the right side of the box misses to the left. Assisted by Paul Caddis.