Reading moved level with Sheffield United in the race for the play-off places after coming from behind to beat their visitors.
But they had to survive a storming finish from the Blades who threw everything on to attack in the closing stages with Ashley Ward watching in anguish as his header struck the right-hand upright and bounced clear.
The Blades struck first with a simple goal in the tenth minute.
A long throw by Robert Kozluk caused mass confusion in the crowded Reading goalmouth and enabled Andy Gray to score on his debut.
Gray joined United in midweek after signing form Bradford City for a fee of £100,000.
By half-time Reading were in the lead and both goals came from fouls by United players.
In the 24th minute James Harper was brought down by Carl Robinson. Steve Sidwell lined up over the ball but it was Nicky Shorey who took the kick, bending his left-foot effort into the corner of the net out of the reach Paddy Kenny.
In the 33rd minute Reading took a lead they were never to lose. Shorey sent Harper into the penalty area where his quick feet caused panic ending in him being brought down by Nick Montgomery.
Shaun Goater stepped up to send the penalty high to Kenny's right for his 10th goal of the season.
Sheffield boss Neil Warnock showed his intention by bringing on strikers Peter Ndlovu and Paul Peschisolido and nearer the end he added Wayne Allison to his strikeforce.
They put Reading under severe pressure, but Gray's header was the nearest they came to scoring.
As Sheffield stormed forward Reading also had a late chance when substitute Dave Kitson broke clear, but Kenny was able to block his shot.