Reading ended a five-match winless run with an impressive victory against top-six rivals Bristol City.
Ovie Ejaria gave the hosts a deserved lead, cutting inside and unleashing a low shot from the edge of the box which took a heavy deflection off Zak Vyner and beat City keeper Daniel Bentley.
Nahki Wells levelled with just City's second attempt on goal, pouncing on a loose ball from a free-kick and tucking the ball under Rafael Cabral.
But their parity was short lived when Michael Olise's superbly weighted through ball sent Yakou Meite clear to slot past Bentley before Lucas Joao sealed the points from close range after another quick counter-attack.
The Royals were full value for the points, which lifted them up to third, and would have won by a greater margin without a string of top saves from Bentley.
They showed almost all of the attacking intent in a cagey first half, with Bentley brilliantly turning away Meite's shot on the swivel and then tipping over a stinging long-range effort from Joao.
Bentley denied Meite again moments before City's run of three clean sheets came to an end, and then superbly clawed Tom Holmes' powerful header away from the top corner to prevent the hosts doubling their lead.
Meite went clear but saw his effort saved before Michael Morrison kicked fresh air when picked out unmarked four yards out as Reading continued to dominate at 1-0. It looked a decisive miss when Wells levelled despite strong claims for offside.
But Meite and Joao struck to consign City to a first defeat in five matches, with Meite also heading wide with the goal gaping after a deflected effort hit the bar.
As well as an impressive attacking display, Royals boss Veljko Paunovic will have been pleased to limit the Robins threat, having conceded 16 goals in their previous six games.