Match ends, Aston Villa 1, Reading 3.
Joseph Mendes scored early in each half as Reading climbed back up to fourth in the Championship by ending Aston Villa's five-match unbeaten run.
The Frenchman fired home his first after being played in by Lewis Grabban, but James Chester soon headed home Conor Hourihane's corner to equalise.
Mendes squandered an easy chance, but made no mistake after the break as he swept home his second of the game.
Grabban sealed the win from the spot after Leandro Bacuna fouled Liam Kelly.
The victory was Reading's first in a league game at Villa Park and put them just one point behind third-placed Huddersfield, but perhaps more importantly six points clear of Fulham in seventh, with just four games remaining.
It was a tremendous turnaround by Jaap Stam's side after a 7-1 defeat by Norwich in their previous game, and the Dutchman left top scorer Yann Kermorgant on the bench as one of four changes.
Villa had won their five previous home games without conceding a goal, but that record was soon ended as Mendes marked his first league start by firing past Sam Johnstone.
Reading keeper Ali Al-Habsi made a superb save from Mile Jedinak, only to let himself down from the resulting corner by failing to get anywhere near the ball as Chester levelled.
Johnstone twice denied Grabban before the interval but he could do nothing about Reading's second just a minute after the restart, as the forward produced a perfect ball for Mendes to restore their lead.
Sub Scott Hogan wasted Villa's best chance of the second half, and they remain 12th in the table after Grabban converted the penalty to make the points safe.
Aston Villa boss Steve Bruce: "I don't like getting beaten and I don't like getting beaten by sloppiness. I thought that was a thing of the past, a performance like that.
"I couldn't fault their effort but it was how they handled making a mistake, if you're going to play for a big club like this you've got to be able to handle that.
"We made more individual errors than we have done in the past three months. We have been punished and given really, really bad goals away."
Reading manager Jaap Stam: "I'm very happy with the character of my team throughout the whole season. Okay, sometimes we get defeats but we're not too worried about defeats.
"We're very confident in how the team can play. You can have an off day - look at PSG against Barcelona - but it's about what you do after.
"For Joseph it wasn't the easiest season because he came from France and had some injuries. He has worked hard in the last couple of months.
"As a player you can respond by talking in the press, by calling the manager certain names, but you can also respond by working hard in the game and scoring goals."
- 2BakerSubstituted forGrealishat 76'minutes
- 23AmaviSubstituted forHoganat 62'minutes
- 7BacunaBooked at 78mins
- 26Al Habsi
- 25PopaSubstituted forMcClearyat 65'minutes
- 8SwiftBooked at 86mins
- 38KellySubstituted forEvansat 87'minutes
- 23WilliamsBooked at 16mins
- 11ObitaBooked at 66mins
- 9MendesSubstituted forKermorgantat 69'minutes
- Scott Duncan
- Shots on Target
Second Half ends, Aston Villa 1, Reading 3.
Attempt saved. Yann Kermorgant (Reading) right footed shot from outside the box is saved in the bottom left corner.
Attempt missed. Jack Grealish (Aston Villa) right footed shot from the left side of the box is high and wide to the right. Assisted by Conor Hourihane.
Jonathan Kodjia (Aston Villa) wins a free kick in the attacking half.
Foul by George Evans (Reading).
Attempt missed. John Swift (Reading) right footed shot from outside the box is high and wide to the left. Assisted by Garath McCleary.
Attempt missed. James Chester (Aston Villa) header from the centre of the box is close, but misses to the right. Assisted by Conor Hourihane with a cross following a set piece situation.
Substitution, Reading. George Evans replaces Liam Kelly.
John Swift (Reading) is shown the yellow card for a bad foul.
Alan Hutton (Aston Villa) wins a free kick in the attacking half.
Foul by John Swift (Reading).
Corner, Reading. Conceded by Alan Hutton.
Attempt missed. Conor Hourihane (Aston Villa) left footed shot from outside the box is high and wide to the left. Assisted by Jonathan Kodjia.
Alan Hutton (Aston Villa) wins a free kick in the defensive half.
Foul by Yann Kermorgant (Reading).
Goal! Aston Villa 1, Reading 3. Lewis Grabban (Reading) converts the penalty with a right footed shot to the bottom right corner.
Leandro Bacuna (Aston Villa) is shown the yellow card for a bad foul.
Penalty conceded by Leandro Bacuna (Aston Villa) after a foul in the penalty area.
Penalty Reading. Liam Kelly draws a foul in the penalty area.