Nottingham Forest's Greg Halford scored the winner to defeat Millwall and keep his side's play-off hopes alive.
The former Reading defender headed in Andy Reid's right-wing corner after eight minutes to end Forest's recent run of six matches without a win.
Hosts Millwall were denied a penalty when Shaun Batt went down under Elliott Ward's challenge in the first half.
But the defeat leaves the Lions in 20th place, only two positions above the Championship's relegation zone.
This was a much-needed victory for Forest, a result that moves them up to seventh in the table, level on points with Bolton and just one place below the play-off places.
Millwall were without two of their key defenders, Shane Lowry and Danny Shittu, through suspension and it showed when Halford struck from an early corner.
Forest's Radoslaw Majewski tried his luck from 20 yards only to be denied by goalkeeper David Forde, before Billy Sharp just failed to force the ball over the line following a goalmouth scramble.
The Lions' run to the FA Cup semi-final has left them with a fixture backlog, so boss Kenny Jackett made five changes from the tiring side beaten 2-1 by Blackburn in midweek. His new-look line-up could have levelled but James Henry lobbed inches over an open goal.
Forest had a chance to double their lead when Reid's curler beat Forde, only to be cleared by Millwall defender Adam Smith on the goal-line.
Jackett brought on strikers John Marquis and Andy Keogh in a bid to snatch a point.
Lions defender Karleigh Osborne came closest to an equaliser with a downward header which went wide but Forest held on for the victory.
Nottingham Forest boss Billy Davies:
"But now we go into a pre play-off play-off next Saturday. It's a very exciting time for everybody. The last day of the season will be a nerve-shredding time. To find ourselves in this position with one game to go, I'm proud of the players and the staff and hopefully we can get that three points and sneak into the play-offs.
"It's a fantastic end to the season. Roll on Saturday!
Millwall manager Kenny Jackett:
"It was a poor goal to give away from a set-piece. We had plenty of time to get back into it and I can't fault the commitment of the players but we needed a break, something to fall for us. Ultimately it's disappointing as you need to score goals at home and creatively we weren't quite there today.
"We've been close but not close enough, which has been the story of the second half of our season."
- 01 Forde
- 02 Dunne Booked
- 16 Beevers
- 25 Smith
- 27 Osborne
- 39 St Ledger
- 14 Henry
- 26 Abdou
- 29 Saville (Feeney - 79' )
- 10 Tyson (Keogh - 61' )
- 11 Batt (Marquis - 61' )
- 33 M Taylor
- 21 Smith
- 04 Wright
- 15 Feeney
- 09 Marquis
- 20 Keogh
- 31 Easter
- 12 Darlow
- 03 Harding
- 05 Collins
- 15 Halford
- 32 Ward Booked
- 07 Guedioura
- 11 Reid (Moussi - 85' )
- 22 Lansbury
- 28 Majewski (McGugan - 60' )
- 19 Cox Booked
- 24 Sharp (Tudgay - 71' )
- 35 Khaled Al Rashidi
- 26 Ayala
- 06 Moussi
- 10 McGugan
- 14 Greening
- 20 Tudgay
- 23 Blackstock
Live Text Commentary
Full Time The final whistle is blown by the referee.90:00 +4:03
A cross is delivered by Liam Feeney, Sean St. Ledger takes a shot. Save by Karl Darlow.90:00 +3:57
James Henry produces a cross, Danny Collins makes a clearance.89:31
Lewis McGugan takes a shot. Save made by David Forde.88:43
Free kick crossed right-footed by Adam Smith from left channel, Elliott Ward manages to make a clearance.88:43 Booking
Booking Simon Cox is cautioned by the ref for unsporting behaviour.88:32
Simon Cox challenges Nadjim Abdou unfairly and gives away a free kick.87:49
Shot by Henri Lansbury from just outside the area goes over the net.86:36
Liam Feeney produces a cross, clearance made by Greg Halford.86:17
James Henry delivers the ball, clearance by Adlene Guedioura.85:54
The ball is sent over by Guy Moussi, save made by David Forde.84:30 Substitution
Substitution Guy Moussi replaces Andy Reid.83:50
Corner taken right-footed by James Henry to the near post, clearance by Henri Lansbury.83:42
The ball is crossed by Liam Feeney, Elliott Ward manages to make a clearance.83:13
The ball is crossed by James Henry, clearance made by Adlene Guedioura.82:39
The ball is swung over by James Henry, Dan Harding makes a clearance.81:39
Lewis McGugan concedes a free kick for a foul on Adam Smith. Adam Smith takes the free kick.81:15
Simon Cox takes a shot. Save made by David Forde.79:28
Outswinging corner taken by James Henry.78:29 Substitution
Substitution George Saville leaves the field to be replaced by Liam Feeney.
Marcus Tudgay takes a shot. Save made by David Forde. Corner taken right-footed by Lewis McGugan, save by David Forde.72:40
Foul by Adlene Guedioura on Andy Keogh, free kick awarded. Andy Keogh takes the direct free kick.70:09 Substitution
Substitution Marcus Tudgay comes on in place of Billy Sharp.66:24
Lewis McGugan takes a corner.65:04
Inswinging corner taken from the right by-line by Andy Reid.62:59
Lewis McGugan fires a strike on goal direct from the free kick.62:59 Booking
Booking Booking for Alan Dunne for unsporting behaviour.62:45
Free kick awarded for an unfair challenge on Dan Harding by Alan Dunne.60:44
David Forde restarts play with the free kick.60:44 Substitution
Substitution Andy Keogh joins the action as a substitute, replacing Nathan Tyson.60:44 Substitution
Substitution John Marquis replaces Shaun Batt.60:44
The offside flag is raised against Simon Cox.59:08 Substitution
Substitution (Nottm Forest) makes a substitution, with Lewis McGugan coming on for Radoslaw Majewski.58:28
Adlene Guedioura fouled by Nadjim Abdou, the ref awards a free kick. Elliott Ward restarts play with the free kick.53:35
Unfair challenge on Shaun Batt by Henri Lansbury results in a free kick. Mark Beevers restarts play with the free kick.52:38
Free kick awarded for an unfair challenge on Nathan Tyson by Henri Lansbury. Mark Beevers restarts play with the free kick.51:12
Free kick awarded for a foul by Andy Reid on Shaun Batt. Strike comes in from James Henry from the free kick, save made by Karl Darlow.50:20
Billy Sharp fouled by Mark Beevers, the ref awards a free kick. The free kick is swung in left-footed by Andy Reid, David Forde makes a save.47:12
Henri Lansbury gives away a free kick for an unfair challenge on Adam Smith. Free kick taken by David Forde.45:01
The referee gets the second half started.45:00 +2:07 Half time
Half Time The ref blows to end the first period.45:00 +1:16
Adlene Guedioura concedes a free kick for a foul on James Henry. The free kick is swung in right-footed by James Henry, Greg Halford manages to make a clearance.44:56
Free kick awarded for a foul by Radoslaw Majewski on Sean St. Ledger. Direct free kick taken by David Forde.41:32
The free kick is swung in right-footed by James Henry, Adlene Guedioura manages to make a clearance.41:32 Booking
Booking Elliott Ward is booked.41:25
Free kick awarded for a foul by Elliott Ward on Shaun Batt.38:53
The offside flag is raised against Simon Cox. David Forde takes the free kick.35:18
Shot by James Henry from deep inside the penalty area misses wide to the left of the target.34:24
James Henry delivers the ball, save made by Karl Darlow.33:00
Effort on goal by James Henry from just inside the area clears the bar.32:30
Andy Reid gives away a free kick for an unfair challenge on Sean St. Ledger. Sean St. Ledger takes the free kick.29:54
Foul by Simon Cox on Mark Beevers, free kick awarded. David Forde takes the direct free kick.28:17
James Henry takes a outswinging corner from the right by-line played to the near post, Henri Lansbury makes a clearance.27:02
Free kick awarded for an unfair challenge on Andy Reid by Sean St. Ledger. Free kick crossed left-footed by Andy Reid, save made by David Forde.24:42
Free kick awarded for an unfair challenge on Adam Smith by Adlene Guedioura. The free kick is swung in right-footed by James Henry, save by Karl Darlow.23:01
Corner taken by Andy Reid, save made by David Forde.18:37
Radoslaw Majewski takes a inswinging corner from the left by-line to the near post, clearance made by Mark Beevers.15:11
James Henry takes a outswinging corner to the near post, clearance by Henri Lansbury.13:03
Inswinging corner taken right-footed by Radoslaw Majewski from the left by-line, Karleigh Osborne fouled by Billy Sharp, the ref awards a free kick. David Forde takes the free kick.12:19
Nadjim Abdou fouled by Simon Cox, the ref awards a free kick. Alan Dunne restarts play with the free kick.11:55
Radoslaw Majewski takes a shot. Save made by David Forde.11:06
Nathan Tyson sends in a cross.7:05
Assist by Andy Reid.7:05 Goal scored
Goal! - Greg Halford - Millwall 0 - 1 Nott'm For Greg Halford finds the net with a headed goal from close in. Millwall 0-1 Nottm Forest.6:20
Corner taken left-footed by Andy Reid,5:13
Free kick awarded for an unfair challenge on Elliott Ward by Karleigh Osborne. Karl Darlow takes the free kick.4:50
Outswinging corner taken right-footed by James Henry, clearance made by Elliott Ward.4:02
Sean St. Ledger fouled by Andy Reid, the ref awards a free kick. Sean St. Ledger restarts play with the free kick.2:35
Unfair challenge on Shaun Batt by Dan Harding results in a free kick. Alan Dunne takes the free kick.1:41
Shaun Batt concedes a free kick for a foul on Elliott Ward. Greg Halford takes the direct free kick.0:00
The referee gets the game underway.
Live data and text provided by our data suppliers