Middlesbrough climbed back into the Championship play-off places with a convincing win over Millwall.
Marvin Emnes deflected in Boro's first goal and then netted with a low shot to take his tally for the season to 14.
Darius Henderson pulled one back with a looping header before half-time, but Curtis Main's late strike, his first for the club, ensured Boro's victory.
It was a second successive victory after last week's win over Nottingham Forest ended a six-game winless streak.
Millwall were under pressure from the off and could have found themselves behind inside the first five minutes but poor finishing by Lukas Jutkiewicz and a superb save by goalkeeper David Forde kept them in the game.
However, Boro did not have to wait long to take the lead and they scored in the 14th minute when Millwall failed to clear a corner and Emnes diverted the ball past the unsighted Forde.
Emnes's second arrived in the 38th minute when he collected Barry Robson's pass 35 yards out and skipped past Harry Kane's challenge on the edge of the area before striking a superb shot past Forde.
Millwall responded quickly and five minutes later Henderson had the ball in the back of Boro's net after Scott Barron floated a free-kick into the penalty area which Liam Trotter nodded back across goal for Henderson to loop the ball over Boro keeper Jason Steele.
Lions boss Kenny Jackett brought on Alan Dunne and Jimmy Abdou for the second half and Millwall came close to equalising but Trotter, Liam Feeney and Henderson all squandered good chances in front of goal.
Boro wrapped up victory four minutes from the end after Julio Arca's cross found its way to teenager Main who fired in a powerful shot to score his first Boro goal.
Millwall manager Kenny Jackett:
"We were very poor, we were physically not strong enough and we got bullied.
"We have to look at ourselves. We weren't competitive enough or strong enough in the first half.
"We can't give ourselves a mountain to climb like that, but we did fight back with some spirit."
Middlesbrough manager Tony Mowbray:
"Ultimately we are pleased with the points. It is not easy to come here - you always know you are going to get a game.
"But we showed our quality and should have punished Millwall more and we had some amazing chances.
"We saw two sides of the Middlesbrough team, the quality we possess but also the fighting spirit and the ability to dig in."
Live Text Commentary
Full Time The match has reached full-time.90:00 +5:17
James Henry takes a shot. Julio Arca gets a block in. Outswinging corner taken by James Henry from the right by-line, Shane Lowry takes a shot. Save by Jason Steele. Corner taken by James Henry, Seb Hines makes a clearance.90:00 +2:51
Darius Henderson challenges Matthew Bates unfairly and gives away a free kick. Direct free kick taken by Jason Steele.90:00 +2:05
Foul by Darius Henderson on Seb Hines, free kick awarded. Jason Steele restarts play with the free kick.90:00 +1:08
Free kick awarded for an unfair challenge on Darius Henderson by Rhys Williams. James Henry delivers the ball from the free kick right-footed from right wing, save made by Jason Steele.89:25
Corner taken short by Tony McMahon.85:57 Substitution
Substitution Tony McMahon replaces Barry Robson.85:01
Assist on the goal came from Julio Arca.85:01 Goal scored
Goal! - Curtis Main - Millwall 1 - 3 Middlesbro Curtis Main scores a goal from inside the penalty area to the top left corner of the goal. Millwall 1-3 Middlesbrough.84:14
Free kick taken by Matthew Bates.84:14 Substitution
Substitution (Millwall) makes a substitution, with James Henry coming on for Liam Feeney.84:14 Booking
Booking Nadjim Abdou receives a yellow card for unsporting behaviour.84:01
Free kick awarded for a foul by Nadjim Abdou on Barry Robson.83:06
Free kick crossed by Barry Robson, save by David Forde.83:06 Booking
Booking Liam Trotter receives a yellow card for unsporting behaviour.82:59
Foul by Liam Trotter on Rhys Williams, free kick awarded.81:52 Substitution
Substitution Richard Smallwood on for Marvin Emnes.81:04
Liam Feeney takes the inswinging corner, Darius Henderson has a headed effort at goal from close range which goes wide of the left-hand post.78:39
Liam Feeney takes a shot. Save made by Jason Steele.77:20
Harry Kane takes a shot. Jason Steele makes a save.
Barry Robson concedes a free kick for a foul on Nadjim Abdou. Free kick taken by Alan Dunne.74:40
Unfair challenge on Lukas Jutkiewicz by Shane Lowry results in a free kick. Barry Robson takes the direct free kick.73:01
Harry Kane crosses the ball from the free kick right-footed from left wing, save made by Jason Steele.73:01 Booking
Booking The referee books Seb Hines for unsporting behaviour.72:52
Seb Hines challenges Andrew Keogh unfairly and gives away a free kick.71:25
Harry Kane takes a shot. Save by Jason Steele. Harry Kane takes a inswinging corner from the left by-line to the near post, clearance by Seb Hines.71:09
Curtis Main concedes a free kick for a foul on Alan Dunne. Alan Dunne restarts play with the free kick.64:31
Free kick taken by Jason Steele.64:31 Substitution
Substitution Faris Haroun leaves the field to be replaced by Curtis Main.64:31
The offside flag is raised against Andrew Keogh.62:24
Lukas Jutkiewicz takes a shot. Save by David Forde.60:39
Unfair challenge on Barry Robson by Liam Trotter results in a free kick. Julio Arca delivers the ball from the free kick left-footed from left channel, clearance by Liam Trotter.58:40
Liam Trotter takes a shot from just inside the penalty box which clears the bar.57:49
The ball is swung over by Liam Feeney, Seb Hines makes a clearance. Liam Feeney takes the outswinging corner, clearance made by Joe Bennett.56:54
Inswinging corner taken by Liam Feeney, Rhys Williams makes a clearance.55:40
Barry Robson is penalised for a handball. Direct free kick taken by David Forde.55:08
Matthew Bates fouled by Andrew Keogh, the ref awards a free kick. Jason Steele takes the direct free kick.54:31
Liam Feeney takes the direct free kick.54:31 Booking
Booking Joe Bennett is given a yellow card.54:22
Foul by Joe Bennett on Liam Feeney, free kick awarded.52:52
The referee blows for offside. Indirect free kick taken by Jason Steele.52:32
The assistant referee flags for offside against Faris Haroun. David Forde takes the free kick.51:23
The referee blows for offside. Indirect free kick taken by Alan Dunne.50:54
The free kick is swung in right-footed by Alan Dunne, Seb Hines manages to make a clearance.50:54 Booking
Booking Rhys Williams is booked.50:47
The referee penalises Rhys Williams for handball.49:09
Free kick awarded for a foul by Darius Henderson on Matthew Bates. Jason Steele takes the direct free kick.48:17
Barry Robson is caught offside. Paul Robinson takes the free kick.47:04
Corner from the left by-line taken by Liam Feeney, clearance made by Rhys Williams.46:30
Matthew Bates gives away a free kick for an unfair challenge on Darius Henderson. Alan Dunne takes the free kick.45:01
The referee gets the second half underway.45:01 Substitution
Substitution Alan Dunne joins the action as a substitute, replacing Scott Barron.45:01 Substitution
Substitution Nadjim Abdou is brought on as a substitute for Josh Wright.45:00 +2:00 Half time
Half Time It is the end of the first-half.45:00 +0:46
Shane Lowry fouled by Lukas Jutkiewicz, the ref awards a free kick. Free kick taken by David Forde.45:00 +0:04
Direct free kick taken by Julio Arca.45:00 +0:04 Booking
Booking Josh Wright receives a caution.44:56
Josh Wright gives away a free kick for an unfair challenge on Barry Robson.44:20
Julio Arca takes a shot. Save by David Forde.42:33 Goal scored
Goal! - Darius Henderson - Millwall 1 - 2 Middlesbro Darius Henderson finds the net with a headed goal from close range. Millwall 1-2 Middlesbrough.42:01
Free kick awarded for an unfair challenge on Harry Kane by Rhys Williams. A cross is delivered by Scott Barron,41:39
Handball by Lukas Jutkiewicz. Free kick taken by David Forde.41:30
Andrew Keogh is flagged offside by the assistant referee. Jason Steele takes the free kick.37:11
Assist on the goal came from Barry Robson.37:11 Goal scored
Goal! - Marvin Emnes - Millwall 0 - 2 Middlesbro Marvin Emnes finds the back of the net with a goal from outside the area to the bottom right corner of the goal. Millwall 0-2 Middlesbrough.35:59
Unfair challenge on Faris Haroun by Scott Barron results in a free kick. The free kick is delivered right-footed by Rhys Williams from right wing. Lukas Jutkiewicz is caught offside. David Forde takes the indirect free kick.35:08
Free kick awarded for a foul by Scott Barron on Lukas Jutkiewicz. Rhys Williams takes the free kick.30:44
Unfair challenge on Barry Robson by Liam Trotter results in a free kick. Barry Robson takes the free kick.27:03
Shane Lowry gives away a free kick for an unfair challenge on Lukas Jutkiewicz. Barry Robson delivers the ball from the free kick left-footed from right channel, save by David Forde.24:53
Jason Steele restarts play with the free kick.24:53 Booking
Booking The referee cautions Darius Henderson for unsporting behaviour.24:46
Free kick awarded for a foul by Darius Henderson on Seb Hines.20:17
Free kick awarded for an unfair challenge on Matthew Bates by Liam Trotter. Julio Arca restarts play with the free kick.20:03
Rhys Williams fouled by Harry Kane, the ref awards a free kick. Rhys Williams takes the direct free kick.17:48
Andrew Keogh challenges Lukas Jutkiewicz unfairly and gives away a free kick. Free kick crossed left-footed by Barry Robson, Paul Robinson manages to make a clearance.17:23
The assistant referee signals for offside against Andrew Keogh. Jason Steele takes the free kick.16:34
Faris Haroun concedes a free kick for a foul on Scott Barron. Direct free kick taken by Scott Barron.15:54
Lukas Jutkiewicz is penalised for handball and concedes a free kick. Direct free kick taken by Josh Wright.14:21
The assist for the goal came from Rhys Williams.14:21 Goal scored
Goal! - Marvin Emnes - Millwall 0 - 1 Middlesbro Goal scored by Marvin Emnes from close range to the bottom left corner of the goal. Millwall 0-1 Middlesbrough.12:58
Corner taken by Barry Robson from the right by-line to the near post, Rhys Williams takes a shot.6:31
Paul Robinson concedes a free kick for a foul on Lukas Jutkiewicz. Rhys Williams takes the direct free kick.5:25
Lukas Jutkiewicz takes a shot. Save by David Forde. Outswinging corner taken by Barry Robson from the left by-line, clearance by Andrew Keogh.3:49
Lukas Jutkiewicz takes a shot. Save by David Forde. Inswinging corner taken left-footed by Barry Robson, Marvin Emnes has a headed effort from close range and clears the bar.3:19
Josh Wright concedes a free kick for a foul on Barry Robson. Free kick taken by Julio Arca.2:01
Effort from the edge of the penalty area by Lukas Jutkiewicz goes wide of the left-hand post.1:04
Matthew Bates concedes a free kick for a foul on Harry Kane. Free kick crossed left-footed by Scott Barron.0:00
The referee gets the game started.
Live data and text provided by our data suppliers