A tense but enthralling rearranged fixture against Fulham ended in victory for the Royals as the hosts took all three points in a tale of two penalties.
John Swift saw his spotkick saved at the start of the second half, but Roy Beerens scored with the rebound, while Ali Al Habsi was the last minute hero when he saved a penalty at the other end to deny Chris Martin from the spot and Fulham anything from a very entertaining game.
Jaap Stam was forced to make changes to his starting eleven, bringing in Tyler Blackett for the suspended Jordan Obita at left-back. He also reinstated two Dutchmen to his starting line-up - Roy Beerens and Joey van den Berg coming into the team in place of Yann Kermorgant and Tiago Ilori. Fulham, meanwhile, had former Royals loanee Lucas Piazon on their bench.
The two teams took a little time to get to grips with each other's formation, but the first real threat on either penalty box came from a lofted ball from Williams which found McCleary racing in behind and chasing the ball down in the box. He looked to find one of two runners in the middle with a sidefooted pass, but David Button was alert to it and cut the cross out with ease.
Ali Al Habsi was forced into action was a comfortable stop of his own when Michael Madl stepped forward to chest down a Swift clearance and power a right-footed 25-yard drive at goal but straight down the Omani's throat.
The visitors were finding their flow though and McDonald sliced a volley well wide after McShane had charged down a Johansen drive to concede a corner with 15 minutes played.
At the other end, McCleary's cross from the right was headed behind before it could find Williams in the middle. And Kelly's floated set piece was met by McShane but hacked half clear by a Fulham body in the six yard box. Reading recycled it through Beerens who turned his marker inside out, but his cross looped off a Fulham head and behind for another corner.
Midway through the half, a brilliant sliding tackle from McShane took the ball off the toes of Fredericks who had run in behind Blackett from the right.
Then Swift forced a fabulous save from Button, low to his left, following excellent work from Beerens who escaped his man down the left flank to cut the ball back for the midfielder. His first time shot was well-struck but Button parried it and Beerens was offside when he squared it to the unmarked McCleary at the back post.
Aluko was next to spurn a chance, running in off the shoulder of McShane to control a threaded through ball but then stabbing over the crossbar with the outside of his right boot under pressure.
Van den Berg cut out a low Malone cross from the left as Slavisa Jokanovic's men started to gather some momentum near the end of the half, Stefan Johansen arrowing high over the bar from distance with eight minutes left to play before the break.
Reading responded well though and used the space well to set up a couple of good opportunities of their own. Beerens crossed for Swift who headed wide of the left upright, after Williams had turned well to take aim from the edge of the area - Button was equal to his low shot.
Button was down sharply to his right to turn a Beerens effort around his post, then some fancy footwork from Swift and then McCleary almost opened the Fulham defence up in added on time, only for the offside flag to go up.
Half-time: Reading 0-0 Fulham
With the second half only three minutes old, the Royals earned a penalty. Moore was blocked off by Ream as he looked to get on the end of a McShane hook high into the box and referee Stephen Martin pointed to the spot. Swift stepped up to take it, but - not for the first time this season - the keeper parried the penalty. Not for the first time though, Reading were not to be denied and Beerens followed in to convert the rebound, smashing it high into the Fulham net.
The home side came close to second soon after. Beerens found Kelly in space inside the box and the midfielder rolled the ball to his left for Swift to run onto. A timely tackle from Kalas was enough to deflect Swift's stabbed effort wide though.
Aluko arrowed an effort from the edge of the area over, but McCleary came closer to a second for the Royals just before the hour. He cut in from the left and pulled the trigger with a fierce right-footed shot that beat Button and cannoned into the crossbar.
A glorious chance to make it 2-0 went begging when McCleary broke at pace down the left. Two men joined him with only one defender back pedalling, but his pass into Beerens saw the Dutchman take aim but watch as his right-footed shot deflected off Kalas and flew wide.
Fulham were pressing hard for an equaliser and Reading were being forced further and further back. Moore strode out from the back to lead a counter attack with 20 minutes left however, and it ended with McCleary forcing another smart save from Button who gathered at the second attempt.
Fulham were not about to give up, but Reading were defending their lead well, soaking up the pressure and looking dangerous on the break and when we could work an opportunity in the final third.
But all Reading's hard work was almost undone when a penalty was awarded in the final minute of the ninety. A ball through the Royals back line found substitute Piazon in space and he was bundled over inside the box. Chris Martin placed the ball but Al Habsi leapt to his right and saved with his body. Reading shepherded the rebound behind for a goal kick and Reading's lead was in tact.
Five minutes of injury time were signalled and the visitors threw the kitchen sink at Jaap Stam's men, a Scott Parker effort deflecting wide and then another shot from the experienced midfielder gobbled up by Al Habsi low to his left.
The final whistle sounded and Madejski Stadium erupted. Reading players had little energy left to celebrate, but the Royals had won the rearranged tie and moved up to third with a fabulous result.
Full-time: Reading 1-0 Fulham
Reading: Al-Habsi, Gunter, Blackett (Ilori 68), McShane (c), Moore, Van den Berg, Swift, Williams, Kelly (Kermorgant 85), Beerens (Evans 85), McCleary.
Subs: Jaakkola, Meite, Mendes, Samuel.
Goals: Beerens (49)
Fulham: Button, Fredericks, Malone (Sessegnon 68), McDonald (Parker 83) Ream, Madl (Piazon HT), Cairney, Johansen, Kalas, Aluko, Martin.
Subs: Bettinelli, Odoi, Smith, Sigurdsson.
Att: 16,012 (2,452 away)