Reading clinched just their fourth league win of the season with a battling performance against Bristol City at Madejski Stadium.
The Royals led twice through Yakou Meite and Liam Kelly but went into half-time all square with Marlon Pack and Josh Brownhill on target for the visitors.
But the home side recovered to get in front again midway through the second half when Leandro Bacuna guided into the bottom corner.
Bristol City put the pressure on in the closing stages, striking a post and also being denied by goalkeeper Sam Walker as the Royals held on for three massive points.
Paul Clement said picking the team for this weekend was keeping him awake at night and he opted for three changes from the defeat to Swansea. Walker replaced the injured Anssi Jaakkola in goal while Mo Barrow returned after missing the last three games due to a breach of club discipline with Garath McCleary dropping to the bench. The third change saw Andy Rinomhota handed his first ever Championship start, preferred to John Swift in midfield.
And Reading got off to a flying start, taking the lead in the eighth minute when Bacuna’s free-kick was cleared as far as Kelly to put the ball back in the box and Meite latched onto it to slam home.
The Royals were in confident mood and had the visitors penned back with Barrow and Tyler Blackett providing good delivery from the flanks.
But Lee Johnson’s Robins soaked up the pressure and equalised midway through the half as captain Pack broke the offside trap to latch onto Jack Hunt’s through ball and slide past Walker.
Bristol City had their tails up and were only denied a second goal by some last-ditch defending by John O’Shea before Walker thwarted Niclas Eliasson at his near post. Famara Diedhiou then went close, lashing over the crossbar before Reading were dealt another blow with goalscorer Meite forced off injured with McCleary taking his place.
Walker was again called into action after striker Matty Taylor ghosted into space but the goalkeeper made himself big to stop the header.
And Reading looked to have earned a half-time lead when Kelly collected the ball around 25 yards from goal in stoppage time and smashed into the top corner with a stunning strike.
But seconds later it was level again. Bristol City broke straight from the kick-off, down the right wing and after a Royals scramble, Brownhill headed in despite the best efforts of Blackett on the line.
It was a frantic start to the second half with a cross into the Reading box causing panic before Walker got behind Tomas Kalas’ strike.
At the other end Bacuna won the ball 25 yards from goal and drove into the box, but was denied by a sliding Adam Webster.
But the Curaçao international did not have to wait much longer to get himself on the score-sheet after a neat Reading move. McCleary played the ball down the line for Barrow, who composed himself before teeing up Bacuna to place an effort into the bottom corner to give the hosts the lead for the third time.
Having already battled back twice, Bristol City responded well for a third time and almost levelled when a deep cross found Brownhill, but his shot on the stretch hit the post.
A corner then caused problems with Walker flapping at the high ball, but Diedhiou got his feet tangled up as he looked to tap into the unguarded net.
The pressure continued as the minutes ticked down with substitute Andreas Weimann breaking into the box, but his shot was stopped by a vital Walker save.
There was one final chance for the Robins in the fourth minute of stoppage time when Liam Walsh fired off target from a 20-yard free-kick.
Despite the victory, Reading stay in the relegation zone but are now level with Preston, the side directly above them.
READING: Walker; Yiadom, O’Shea, Moore (c), Blackett; Liam
Kelly; Barrow (Gunter 87), Rinomhota (Swift 78), Bacuna, Baldock; Meite
(McCleary 37).
Subs not used: Legg, Ilori, Aluko, McNulty.
Goals: Meite (8), Kelly (45+1), Bacuna (66)
Yellow cards: Bacuna (59), Rinomhota (69), Yiadom (87), Gunter (90+6)
BRISTOL CITY: O’Leary; Hunt (Lloyd Kelly
74), Kalas, Webster, Dasilva; Brownhill, Walsh, Pack (c), Eliasson (Paterson
74); Diedhiou, Taylor (Weimann 63).
Subs not used: Maenpaa, Baker, Eisa, O’Dowda.
Goals: Pack (23), Brownhill (45+2)
Yellow cards: Walsh (59), Weimann (84)
Referee: James Linington
Attendance: 14,455 (inc. 2,162 away)