Danny Higginbotham scored his first goal for a year to help Nottingham Forest move five points clear of the relegation zone with a hard-earned win against struggling Millwall.
Garath McCleary headed in Forest's first before Higginbotham volleyed home to make it 2-0 at the break.
Millwall took the attack to Forest and Darius Henderson's header cut the deficit in the 64th minute.
But Andy Reid surged forward and struck from long range to seal victory.
It was a day to remember for Higginbotham, who had missed the previous two matches because of a hamstring injury. The on-loan defender's last goal came in a 4-0 victory for parent club Stoke against Newcastle on 19 March last year.
Millwall could count themselves slightly unfortunate as James Henry hit the woodwork twice during the game.
Kenny Jackett's side began brightly as Andy Keogh and Henry threatened, before the latter struck the bar for the first time.
Forest took the lead against the run of play as Reid did brilliantly down the left-hand side and crossed superbly for McCleary to head home six yards out.
Higginbotham doubled that advantage with a left-foot volley from the edge of the area after Millwall failed to clear properly.
Henry saw a dipping 20-yard volley hit the woodwork and then rebound to safety off the body of Camp. But Millwall made amends when Josh Wright's shot struck a Forest defender and hit the bar, allowing substitute Henderson to head home the rebound.
The visitors then pushed for an equaliser but their hopes were ended by Reid's solo effort.
Live Text Commentary
Full Time The referee blows his whistle to end the game.90:00 +4:52
Hamer Bouazza challenges Adlene Guedioura unfairly and gives away a free kick. Adlene Guedioura restarts play with the free kick.90:00 +2:07 Substitution
Substitution Dexter Blackstock leaves the field to be replaced by Ishmael Miller.90:00 +2:07 Substitution
Substitution Joel Lynch replaces Andy Reid.88:47 Substitution
Substitution Scott Wootton joins the action as a substitute, replacing Marcus Tudgay.86:25
The ball is delivered by Luke Chambers, save by David Forde.85:33
Hamer Bouazza sends in a cross, Header on goal by Darius Henderson from inside the box goes harmlessly over the target.84:16
Corner taken by James Henry from the left by-line to the near post, Luke Chambers manages to make a clearance.83:53
Foul by Garath McCleary on James Henry, free kick awarded. Free kick crossed by James Henry, Guy Moussi makes a clearance.82:37
The referee blows for offside against Marcus Tudgay. Darren Ward takes the free kick.81:01
Unfair challenge on Darren Ward by Dexter Blackstock results in a free kick. Direct free kick taken by David Forde.79:49
Assist by Chris Gunter.79:49 Goal scored
Goal! - Andy Reid - Nott'm For 3 - 1 Millwall Andy Reid fires in a goal from just outside the area to the top right corner of the goal. Nottm Forest 3-1 Millwall.78:36
Outswinging corner taken left-footed by Andy Reid from the left by-line, clearance by Paul Robinson.77:17 Substitution
Substitution Jack Smith on for Scott Barron.74:05
Lee Camp takes the direct free kick.74:05 Booking
Booking The referee shows Darius Henderson a yellow card.73:53
Greg Cunningham fouled by Darius Henderson, the ref awards a free kick.71:22
Danny Higginbotham gives away a free kick for an unfair challenge on Andrew Keogh. Hamer Bouazza crosses the ball from the free kick right-footed from right channel, free kick awarded for a foul by Darius Henderson on Dexter Blackstock. Free kick taken by Lee Camp.69:43
Andy Reid takes a inswinging corner from the right by-line to the near post, clearance made by Scott Barron.
Darius Henderson gives away a free kick for an unfair challenge on Luke Chambers. Lee Camp takes the free kick.66:35
The referee penalises Andrew Keogh for handball. Lee Camp restarts play with the free kick.65:02
The referee penalises Andy Reid for handball. Alan Dunne takes the free kick.63:35
The assist for the goal came from Josh Wright.63:35 Goal scored
Goal! - Darius Henderson - Nott'm For 2 - 1 Millwall Darius Henderson grabs a headed goal from inside the six-yard box. Nottm Forest 2-1 Millwall.63:11
Garath McCleary produces a drilled right-footed shot from 25 yards. Save by David Forde.62:36
Corner taken left-footed by Andy Reid, clearance made by Paul Robinson.62:30
Centre by Dexter Blackstock, Alan Dunne gets a block in.61:09
Corner taken by Hamer Bouazza from the right by-line played to the near post.61:01
Hamer Bouazza produces a cross, Greg Cunningham gets a block in.60:33
Hamer Bouazza takes a inswinging corner to the near post.60:22
Alan Dunne delivers the ball, Danny Higginbotham makes a clearance.59:23
David Forde takes the indirect free kick.59:23 Substitution
Substitution Darius Henderson on for Harry Kane.59:23
The referee blows for offside.58:51
The ball is delivered by Chris Gunter.56:06
Free kick awarded for a foul by Nadjim Abdou on Guy Moussi. Free kick crossed by Andy Reid, Alan Dunne makes a clearance.52:34
Alan Dunne gives away a free kick for an unfair challenge on Andy Reid. Direct free kick taken by Danny Higginbotham.51:35
James Henry sends in a cross, save made by Lee Camp.48:41
The referee blows for offside. Free kick taken by David Forde.47:28
Inswinging corner taken by Andy Reid from the right by-line played to the near post, save by David Forde.45:45
Luke Chambers gives away a free kick for an unfair challenge on Harry Kane. Strike comes in from Hamer Bouazza from the free kick.45:01
The game restarts for the second half.45:01 Substitution
Substitution Josh Wright comes on in place of Liam Trotter.45:00 +2:10 Half time
Half Time It is the end of the first-half.45:00 +0:31
Hamer Bouazza crosses the ball from the free kick left-footed from right channel, clearance made by Dexter Blackstock.45:00 +0:31 Booking
Booking Booking for Greg Cunningham.45:00 +0:15
Greg Cunningham challenges Andrew Keogh unfairly and gives away a free kick.44:24
Free kick awarded for a foul by Adlene Guedioura on Nadjim Abdou. Free kick taken by Paul Robinson.42:44 Booking
Booking Garath McCleary booked for unsporting behaviour.42:43
Free kick awarded for a foul by Garath McCleary on Scott Barron. Free kick taken by Paul Robinson.41:28
Effort on goal by Harry Kane from outside the penalty box goes harmlessly over the bar.39:28
James Henry has a volleyed shot.37:27 Goal scored
Goal! - Danny Higginbotham - Nott'm For 2 - 0 Millwall Goal scored by Danny Higginbotham from just inside the area to the bottom left corner of the goal. Nottm Forest 2-0 Millwall.35:55
Foul by Nadjim Abdou on Greg Cunningham, free kick awarded. Andy Reid delivers the ball from the free kick right-footed from left channel, clearance made by Paul Robinson.30:53
Free kick crossed by Andy Reid.30:53 Booking
Booking James Henry goes into the book for unsporting behaviour.30:47
Free kick awarded for a foul by James Henry on Chris Gunter.29:16
Corner taken by Andy Reid from the left by-line, free kick awarded for a foul by Marcus Tudgay on Alan Dunne. David Forde takes the direct free kick.29:03
The ball is swung over by Chris Gunter, clearance made by Paul Robinson.27:50
Free kick awarded for a foul by Nadjim Abdou on Guy Moussi. Free kick crossed by Andy Reid, save by David Forde.26:16
The offside flag is raised against Harry Kane. Lee Camp takes the free kick.24:33
The assist for the goal came from Andy Reid.24:33 Goal scored
Goal! - Garath McCleary - Nott'm For 1 - 0 Millwall Garath McCleary grabs a headed goal from close range. Nottm Forest 1-0 Millwall.21:41
Free kick awarded for an unfair challenge on Marcus Tudgay by Alan Dunne. Greg Cunningham takes the direct free kick.20:44
Free kick awarded for an unfair challenge on Greg Cunningham by James Henry. Danny Higginbotham takes the direct free kick.18:43
Andy Reid has an effort at goal from deep inside the area missing to the right of the goal.16:24
Corner taken left-footed by Hamer Bouazza from the right by-line to the near post, Effort on goal by Darren Ward from deep inside the penalty area misses to the right of the goal.16:15
The ball is crossed by James Henry, blocked by Greg Cunningham.15:29
Shot by James Henry from just outside the area goes over the net.13:53
Adlene Guedioura crosses the ball, Header from deep inside the area by Marcus Tudgay goes over the bar.13:01
Shot from deep inside the area by Andrew Keogh goes over the bar.12:40
Marcus Tudgay gives away a free kick for an unfair challenge on Andrew Keogh. Andrew Keogh restarts play with the free kick.11:27
Andy Reid produces a cross, save made by David Forde.9:54
Unfair challenge on Garath McCleary by James Henry results in a free kick. Chris Gunter takes the direct free kick.8:23
The ball is sent over by Scott Barron, Effort from the edge of the box by James Henry hits the post.4:41
Free kick awarded for a foul by Garath McCleary on Scott Barron. Free kick crossed by James Henry.2:36
Paul Robinson is adjudged to have handled the ball. The free kick is swung in left-footed by Andy Reid, Darren Ward manages to make a clearance.2:14
Free kick awarded for a foul by Andrew Keogh on Adlene Guedioura. Adlene Guedioura takes the direct free kick.1:46
The ball is sent over by Alan Dunne, Luke Chambers makes a clearance.1:21
Hamer Bouazza delivers the ball, Greg Cunningham makes a clearance.0:00
The game kicks-off.
Live data and text provided by our data suppliers