Match ends, Reading 0, Birmingham City 2.
Birmingham City earned their first Championship away win since January with a comfortable victory at Reading.
Clayton Donaldson's header opened the scoring inside two minutes before on-loan defender Ryan Shotton slotted in his first Blues goal to make it two.
Reading struggled going forward despite seeing plenty of the ball, suffering a first home league loss since December.
Victory ended Birmingham's five-match winless run to leave them nine points off the top six, with a game in hand.
Reading, who had been bidding for a third straight win, slip to 14th in the table.
An unmarked Donaldson nodded in David Cotterill's cross for his eighth goal of the season in the early stages and the Wales winger was involved again for Birmingham's second, seeing his free-kick palmed into the path of Shotton by Ali al-Habsi.
Reading's Stephen Quinn headed wide and later volleyed over, but the hosts otherwise lacked ideas to break down the visitors, who drop a place to 14th.
Gary Rowett's side's hopes of a play-off spot remain slim, but were further boosted by losses for rivals Ipswich, Cardiff and Sheffield Wednesday.
Reading manager Brian McDermott:
"I really didn't see this coming. It was a difficult day. Losing the first goal as early as we did, it meant Birmingham could get behind the ball.
"Then they scored from a set-play and that was it really. We had a lot of the ball in the second half but just didn't create anything.
"We've had a really good 2016 as far as playing at the Madejski is concerned. We'd been unbeaten in the league. We'll have to put this one to bed as quickly as we possibly can.
"It's just a bad day. Bad days happen in football. We'll have to take that on the chin and go again at Middlesbrough on Tuesday."
Birmingham City manager Gary Rowett:
"It's funny. We'd ruled ourselves out of the play-offs, now suddenly all the other results are going for us. You win a game and all the lads are saying 'You know what, we've still got half a chance here'.
"But it's irrelevant really. We've got to try to win every game. We want players at this club who are going to give everything they can, whether it's a testimonial, a friendly or whatever.
"Mathematically, and if we win the game in hand - at home to Leeds on Tuesday night - then our situation could start to look a little bit different.
"We know what we're good at. We've got to work very hard and, when we're very organised and finish off one or two of the chances that we create, then we're an excellent team. I can't remember them having one meaningful chance."
- 26Al Habsi
- 2GunterSubstituted forMcClearyat 63'minutes
- 5McShaneBooked at 84mins
- 35CooperBooked at 57mins
- 17PiazonSubstituted forVydraat 45'minutes
- 31CoxSubstituted forJohnat 72'minutes
- 29KermorgantBooked at 42mins
- 28MorrisonBooked at 90mins
- 11CotterillSubstituted forSolomon-Otaborat 72'minutes
- 9DonaldsonBooked at 83mins
- 25LaffertySubstituted forMaghomaat 72'minutes
- Nigel Miller
- Shots on Target
Second Half ends, Reading 0, Birmingham City 2.
Attempt missed. Oliver Norwood (Reading) right footed shot from outside the box is close, but misses to the left from a direct free kick.
Michael Morrison (Birmingham City) is shown the yellow card.
Danny Williams (Reading) wins a free kick in the attacking half.
Foul by David Davis (Birmingham City).
Attempt missed. Ola John (Reading) right footed shot from outside the box misses to the left.
Attempt saved. Yann Kermorgant (Reading) header from the centre of the box is saved in the bottom left corner. Assisted by Garath McCleary with a cross.
Foul by Danny Williams (Reading).
Ryan Shotton (Birmingham City) wins a free kick in the defensive half.
Attempt blocked. Ola John (Reading) left footed shot from outside the box is blocked. Assisted by Oliver Norwood.
Foul by Stephen Quinn (Reading).
Clayton Donaldson (Birmingham City) wins a free kick on the right wing.
Foul by Matej Vydra (Reading).
Stephen Gleeson (Birmingham City) wins a free kick in the defensive half.
Stephen Quinn (Reading) wins a free kick in the defensive half.
Foul by Viv Solomon-Otabor (Birmingham City).
Paul McShane (Reading) is shown the yellow card.
Clayton Donaldson (Birmingham City) is shown the yellow card.
Hand ball by Stephen Quinn (Reading).