Reading boss Nigel Adkins tasted a first win in charge of the Royals as his relegated side beat Fulham.
Hal Robson-Kanu scored from the spot after being fouled by John Arne Riise to put the Royals ahead and added a second with a left-foot curler.
Bryan Ruiz pulled one back for Fulham but Adam Le Fondre's close-range effort added a third for Reading.
A Ruiz header gave the visitors another scare but Jem Karacan's late strike secured a Royals win.
Five goals in 21 second-half minutes ensured plenty of entertainment at Craven Cottage in a game between two teams on miserable runs of form.
For Reading, playing for pride after their relegation was confirmed last Sunday, victory was a first in 11 league games.
Fulham have managed just one point from their last six games and, while their tally of 40 points means they are very unlikely to be dragged into trouble, results elsewhere ensured an outside chance of relegation remains.
"There were five goals in just over 20 madcap second-half minutes as these two sides scored six between them for the second time this season. There could have been more but for Alex McCarthy in the Reading goal and Hugo Rodallega hitting the crossbar. Amazing afternoon!"
The home side failed to take an early chance when Ruiz had a far-post shot from Damien Duff's cross well saved by Alex McCarthy. They then found themselves behind from the spot.
Referee Neil Swarbrick decided Riise's challenge on Robson-Kanu was in the area and the Reading midfielder picked himself up to send keeper Mark Schwarzer the wrong way from the resulting penalty.
A lacklustre Fulham's struggles meant manager Martin Jol replaced midfielder Giorgos Karagounis with striker Hugo Rodallega before the game was half an hour old.
The Colombian quickly went close when he was denied by another smart McCarthy save, while Karacan saw a poked shot diverted wide by Schwarzer at the other end.
Fulham had a penalty shout of their own turned down for a challenge by old boy Stephen Kelly on Dimitar Berbatov and their frustration was compounded almost immediately when Reading extended their lead.
Fulham's Premier League run-in
- 12 May: Liverpool (h)
- 19 May: Swansea (a)
A Garath McCleary shot deflected to Robson-Kanu, who cut inside on the left flank and curled a shot past Schwarzer.
Ruiz gave Fulham hope when he played a one-two with Rodallega and slotted past McCarthy only for substitute Le Fondre to steal in front of Kieran Richardson and restore Reading's two-goal cushion.
However, an Alex Kacaniklic cross then allowed Ruiz to head in and make it 3-2, and the home side were only denied an equaliser when Rodallega's shot hit the crossbar.
Karacan finally eased the visiting side's nerves when he ran on to a loose ball to drive in an 18-yard effort and secure Reading and Adkins a rare but deserved win.
Fulham manager Martin Jol:
"The first half was not good enough by our standards. We wanted to take the initiative. We gave away easy and cheap goals and we have to change that. Although they played better, we were still in it.
"We haven't been that good recently since getting the 40 points. Today Reading was the game to gain something and get safe.
"We have to get some more points. We said our goal difference was probably a point but that has changed in the last few weeks so we need a couple more points."
Reading boss Nigel Adkins:
"There has been a good steady progression in every game [since I came here].
"To come away from home and score four is good. It was exciting for the supporters.
"The attitude and application has been first class from the players and all we can do is keep looking forward."
Live Text Commentary
Full Time The referee brings the game to a close.90:00 +3:12
Kieran Richardson concedes a free kick for a foul on Nick Blackman. Danny Guthrie restarts play with the free kick.90:00 +1:57
Effort from inside the area by Stephen Kelly misses to the right of the goal.90:00 +0:56
Unfair challenge on Adam Le Fondre by Urby Emanuelson results in a free kick. Free kick taken by Danny Guthrie.90:00 +0:24
Hugo Rodallega takes a shot. Save made by Alex McCarthy.88:55
Bryan Ruiz delivers the ball, Alex Kacaniklic takes a shot. Adrian Mariappa manages to make a clearance.87:43
Centre by Alex Kacaniklic, Effort on goal by Hugo Rodallega from deep inside the penalty area misses to the right of the goal.86:19
Sean Morrison takes the direct free kick.86:19 Booking
Booking Eyong Enoh is cautioned by the ref for unsporting behaviour.86:12
Eyong Enoh challenges Daniel Carrico unfairly and gives away a free kick.85:34
Bryan Ruiz takes the inswinging corner, Alex McCarthy makes a save.83:51
Direct effort from the free kick comes in from Bryan Ruiz.83:51 Booking
Booking Adrian Mariappa shown a yellow card.82:40
Assist by Adam Le Fondre. The referee penalises Adrian Mariappa for handball.82:40 Goal scored
Goal! - Jem Karacan - Fulham 2 - 4 Reading Jem Karacan fires in a goal from the edge of the penalty box to the bottom right corner of the goal. Fulham 2-4 Reading.82:29
Stephen Kelly delivers the ball, clearance by Philippe Senderos.80:40 Substitution
Substitution Daniel Carrico joins the action as a substitute, replacing Hal Robson-Kanu.79:46
Garath McCleary is adjudged to have handled the ball. The free kick is swung in left-footed by Bryan Ruiz, save by Alex McCarthy.79:11
The ball is delivered by Dimitar Berbatov, Hugo Rodallega takes a shot.78:44
Nick Blackman concedes a free kick for a foul on Kieran Richardson. Kieran Richardson takes the free kick.
Assist by Alex Kacaniklic. Hal Robson-Kanu produces a left-footed shot from just outside the area that goes harmlessly over the target. Free kick awarded for an unfair challenge on Hal Robson-Kanu by Eyong Enoh. Free kick taken by Adrian Mariappa.76:34 Goal scored
Goal! - Bryan Ruiz - Fulham 2 - 3 Reading Bryan Ruiz scores a headed goal from close range. Fulham 2-3 Reading.76:32
The ball is delivered by Alex Kacaniklic,74:56
Jem Karacan provided the assist for the goal.74:56 Goal scored
Goal! - Adam Le Fondre - Fulham 1 - 3 Reading Adam Le Fondre fires in a goal from close in low into the middle of the goal. Fulham 1-3 Reading.74:11
The referee gives a free kick against Dimitar Berbatov for handball. Sean Morrison takes the free kick.73:17
Shot by Garath McCleary from deep inside the penalty area misses to the right of the target.72:20 Substitution
Substitution Nick Blackman joins the action as a substitute, replacing Jobi McAnuff.71:55
Sascha Riether crosses the ball, clearance made by Adrian Mariappa.69:54 Substitution
Substitution Alex Kacaniklic joins the action as a substitute, replacing Damien Duff.69:54 Substitution
Substitution Adam Le Fondre comes on in place of Pavel Pogrebnyak.69:54
The assist for the goal came from Hugo Rodallega.69:54 Goal scored
Goal! - Bryan Ruiz - Fulham 1 - 2 Reading Bryan Ruiz scores a goal from inside the penalty area low into the middle of the goal. Fulham 1-2 Reading.68:56
Jobi McAnuff produces a cross, save by Mark Schwarzer.68:26
A cross is delivered by Bryan Ruiz.67:18
Unfair challenge on Jobi McAnuff by Eyong Enoh results in a free kick. Strike comes in from Danny Guthrie from the free kick, save made by Mark Schwarzer.66:44
Foul by Eyong Enoh on Garath McCleary, free kick awarded. Jem Karacan takes the direct free kick.66:06
The ball is crossed by Damien Duff, Chris Gunter gets a block in.64:01
Damien Duff takes a shot. Blocked by Sean Morrison. Corner taken by Bryan Ruiz from the left by-line. Urby Emanuelson takes a shot. Alex McCarthy makes a save.61:41
Assist by Garath McCleary. Damien Duff sends in a cross, save made by Alex McCarthy.61:41 Goal scored
Goal! - Hal Robson-Kanu - Fulham 0 - 2 Reading Hal Robson-Kanu grabs a goal from the edge of the penalty area to the bottom left corner of the goal. Fulham 0-2 Reading.60:49
Garath McCleary takes a shot. Blocked by Philippe Senderos.60:42
A cross is delivered by Garath McCleary.58:06
Pavel Pogrebnyak is caught offside. Mark Schwarzer takes the indirect free kick.57:55
The ball is swung over by Jobi McAnuff.55:14
Indirect free kick taken by Alex McCarthy.55:14 Substitution
Substitution Kieran Richardson joins the action as a substitute, replacing John Arne Riise.55:14
Damien Duff is ruled offside.53:36
Hal Robson-Kanu takes a shot. Blocked by Brede Hangeland.51:32
Jobi McAnuff fouled by Brede Hangeland, the ref awards a free kick. Danny Guthrie restarts play with the free kick.50:01
Garath McCleary takes a shot. Save by Mark Schwarzer.49:17
Bryan Ruiz crosses the ball, Sean Morrison makes a clearance.48:12
Hal Robson-Kanu takes a shot. Philippe Senderos gets a block in. Danny Guthrie takes a outswinging corner.47:43
The ball is sent over by Hal Robson-Kanu.47:26
Hugo Rodallega takes a shot. Save by Alex McCarthy.46:21
Jem Karacan takes a shot. Save by Mark Schwarzer. Corner taken right-footed by Danny Guthrie from the right by-line, clearance made by Philippe Senderos.45:31
Garath McCleary delivers the ball.45:01
The referee starts the second half.45:00 +1:10 Half time
Half Time The whistle is blown to end the first half.45:00 +0:45
A cross is delivered by Chris Gunter, John Arne Riise makes a clearance.42:50
Dimitar Berbatov delivers the ball, save made by Alex McCarthy.42:39
Urby Emanuelson sends in a cross.42:16
The ball is delivered by Damien Duff, save by Alex McCarthy.40:38
The ball is sent over by Damien Duff, Sean Morrison makes a clearance.38:22
John Arne Riise has an effort at goal from just inside the box that misses to the left of the target.37:51
Centre by Sascha Riether, clearance made by Adrian Mariappa.36:28
Free kick awarded for a foul by Garath McCleary on Urby Emanuelson. Free kick taken by Urby Emanuelson.35:40
Jobi McAnuff takes a shot. Save made by Mark Schwarzer.35:17
Bryan Ruiz takes a shot. Alex McCarthy makes a save.34:36
The ball is crossed by Stephen Kelly.33:15
Hal Robson-Kanu takes a shot. Brede Hangeland gets a block in.31:15
The ball is crossed by Dimitar Berbatov, Hugo Rodallega takes a shot. Save by Alex McCarthy.31:00
Centre by John Arne Riise, clearance by Sean Morrison.30:35
Free kick awarded for a foul by Jem Karacan on Bryan Ruiz. Bryan Ruiz restarts play with the free kick.29:57
John Arne Riise produces a cross, Bryan Ruiz takes a shot. Blocked by Sean Morrison.29:16
Free kick awarded for an unfair challenge on Sascha Riether by Garath McCleary. Direct free kick taken by Sascha Riether.28:41
Eyong Enoh concedes a free kick for a foul on Garath McCleary. Free kick taken by Adrian Mariappa.26:45
Stephen Kelly takes the free kick. A cross is delivered by Chris Gunter, Pavel Pogrebnyak takes a shot. Save by Mark Schwarzer.26:45 Substitution
Substitution Giorgos Karagounis leaves the field to be replaced by Hugo Rodallega.26:45 Booking
Booking Caution for Philippe Senderos.26:35
Free kick awarded for an unfair challenge on Pavel Pogrebnyak by Philippe Senderos.25:10
Free kick awarded for a foul by Hal Robson-Kanu on John Arne Riise. Free kick taken by Giorgos Karagounis.24:55
Foul by Eyong Enoh on Danny Guthrie, free kick awarded. Jem Karacan takes the direct free kick.24:18
Danny Guthrie takes a shot from long distance which goes wide of the right-hand upright.23:51
The ball is crossed by John Arne Riise, Dimitar Berbatov takes a shot. Save by Alex McCarthy.22:57
Garath McCleary produces a right-footed shot from just outside the penalty box that misses to the left of the goal.19:27
Damien Duff takes a shot. Blocked by Adrian Mariappa.21:14
Pavel Pogrebnyak is ruled offside. Indirect free kick taken by Philippe Senderos.20:17
Damien Duff produces a cross, clearance made by Adrian Mariappa.19:37
Centre by Sascha Riether, Chris Gunter gets a block in.19:19
Dimitar Berbatov takes a shot. Sean Morrison gets a block in.18:30
The ball is delivered by Damien Duff, Chris Gunter gets a block in. Corner taken by Giorgos Karagounis.17:42
John Arne Riise gives away a free kick for an unfair challenge on Hal Robson-Kanu. Danny Guthrie restarts play with the free kick.16:57
Garath McCleary has an effort at goal from outside the penalty box which goes wide left of the goal.15:08
The ball is crossed by Danny Guthrie, clearance by Brede Hangeland.13:21
Danny Guthrie gives away a free kick for an unfair challenge on Giorgos Karagounis. Giorgos Karagounis takes the free kick.12:40
Free kick awarded for an unfair challenge on Jem Karacan by Dimitar Berbatov. Adrian Mariappa takes the direct free kick.11:18 Goal scored
Goal! - Hal Robson-Kanu - Fulham 0 - 1 Reading Penalty taken left-footed by Hal Robson-Kanu and scored. Fulham 0-1 Reading.10:24
Centre by Chris Gunter. Penalty awarded for an unfair challenge on Hal Robson-Kanu by John Arne Riise.9:03
The assistant referee signals for offside against Urby Emanuelson. Adrian Mariappa restarts play with the free kick.8:32
The referee blows for offside against Pavel Pogrebnyak. Giorgos Karagounis takes the indirect free kick.7:50
Urby Emanuelson gives away a free kick for an unfair challenge on Jobi McAnuff. Jem Karacan restarts play with the free kick.7:12
Chris Gunter crosses the ball.5:01
A cross is delivered by Garath McCleary, Hal Robson-Kanu takes a shot. Blocked by Brede Hangeland. Danny Guthrie concedes a free kick for a foul on Damien Duff. John Arne Riise takes the direct free kick.4:02
Outswinging corner taken right-footed by Danny Guthrie, Adrian Mariappa takes a shot. Clearance made by Philippe Senderos.3:49
The ball is swung over by Garath McCleary, John Arne Riise manages to make a clearance.1:11
The ball is delivered by Damien Duff, Bryan Ruiz takes a shot. Save by Alex McCarthy.0:53
Centre by Sascha Riether, save by Alex McCarthy.0:00
The referee gets the game started.
Live data and text provided by our data suppliers