Rotherham moved into the League Two promotion places with victory at Bradford in a tense Yorkshire derby.
The hosts twice had efforts disallowed in a scrappy first half - James Hanson's header was chalked off for a push on Claude Davis and Garry Thompson struck from an offside position.
But after the break Lee Frecklington's penalty gave Rotherham the lead after Michael Nelson handled in the area.
Kieran Agard struck late on into an empty net with the home keeper forward.
Minutes earlier Bradford, who also saw assistant manager Steve Parkin sent into the stands in the opening period, almost grabbed a dramatic equaliser when Alan Connell saw his strike creep just wide.
However, Rotherham - now guaranteed a play-off spot - move above Burton Albion into third place on goal difference with just two games to go.
Meanwhile Bradford remain in the final play-off berth, just a point ahead of Exeter following their defeat in front of the largest crowd for a League Two match this season.
VIEWS FROM THE DRESSING ROOM
Rotherham United manager Steve Evans tells BBC Radio Sheffield:
"It was a great three points, but that's all it is at the end of the day.
"If we don't go and look after Plymouth, the journey up here (to Bradford) probably won't mean as much.
"If we think we're going to go and have an easy trip at Plymouth we're kidding ourselves.
"We're meeting a Plymouth side in form, but at the same time a Plymouth team that are now safe (from relegation)."
Sorry, we were unable to load match stats, please try again.
Live Text Commentary
Full Time The referee blows his whistle to end the game.90:00 +5:15 Goal scored
Goal! - Kieran Agard - Bradford 0 - 2 Rotherham Kieran Agard fires in a goal from close in to the bottom left corner of the goal. Bradford 0-2 Rotherham.90:00 +4:29
Gary Jones takes the inswinging corner, save by Scott Shearer.90:00 +1:22
Alan Connell produces a right-footed shot from close in that goes over the bar.88:32
Kyel Reid sends in a cross.87:37
Garry Thompson takes a shot. Ben Pringle gets a block in.85:50
Kyel Reid fouled by Kieran Agard, the ref awards a free kick. The free kick is delivered left-footed by Kyel Reid from left wing.84:46
Headed effort from deep inside the penalty area by Gary Jones misses to the right of the target.82:40
Alan Connell produces a cross, Headed effort on goal by Nahki Wells from just inside the box goes harmlessly over the goal.80:02 Substitution
Substitution Alan Connell replaces Stephen Darby.79:46 Goal scored
Goal! - Lee Frecklington - Bradford 0 - 1 Rotherham Penalty taken right-footed by Lee Frecklington and scored. Bradford 0-1 Rotherham.78:26
Michael Nelson is penalised for a handball.77:39
Kari Arnason fouled by James Hanson, the ref awards a free kick. Scott Shearer takes the direct free kick.76:47
Craig Morgan has a headed effort at goal from deep inside the area missing to the right of the target.76:17
Corner taken by Ben Pringle.74:51
Free kick awarded for an unfair challenge on Kyel Reid by Lee Frecklington. Free kick crossed by Gary Jones, Lee Frecklington makes a clearance.73:32
Ricky Ravenhill challenges Lee Frecklington unfairly and gives away a free kick. Strike on goal comes in from Kari Arnason from the free kick, Jon McLaughlin makes a comfortable save.72:49
Free kick awarded for a foul by Kyel Reid on Kieran Agard. Ben Pringle restarts play with the free kick.70:52
Unfair challenge on Kari Arnason by James Hanson results in a free kick. Free kick taken by Scott Shearer.66:01
Corner from the left by-line taken by Ben Pringle, Alex Revell produces a right-footed shot from inside the area that goes over the bar.
Johnny Mullins delivers the ball, comfortable save by Jon McLaughlin. Free kick awarded for an unfair challenge on Kyel Reid by Johnny Mullins. Direct free kick taken by Gary Jones.63:59
Effort on goal by Garry Thompson from long range goes harmlessly over the target.61:23
Corner taken left-footed by Kyel Reid to the near post, Kari Arnason manages to make a clearance.60:49
Kyel Reid produces a cross, Craig Morgan manages to make a clearance.60:20
Direct free kick taken by Gary Jones.60:20 Booking
Booking Craig Morgan receives a caution.60:08
Nahki Wells fouled by Craig Morgan, the ref awards a free kick.57:41
The offside flag is raised against Kieran Agard. Jon McLaughlin restarts play with the free kick.54:15
Kyel Reid sends in a cross, clearance made by Craig Morgan.51:18
The assistant referee flags for offside against Kyel Reid. Indirect free kick taken by Scott Shearer.50:49
A cross is delivered by Ben Pringle, save by Jon McLaughlin.50:21
Corner taken by Ben Pringle played to the near post.49:34 Substitution
Substitution (Bradford) makes a substitution, with Carl McHugh coming on for James Meredith.48:44
Garry Thompson produces a right-footed shot from just outside the area that goes harmlessly over the bar.45:50
Unfair challenge on Joe Skarz by Kyel Reid results in a free kick. Scott Shearer takes the free kick.45:15
Ben Pringle delivers the ball, Rory McArdle makes a clearance.45:01
The referee gets the second half started.45:00 +3:13 Half time
Half Time The ref blows to end the first period.45:00 +2:50
Corner taken by Gary Jones.45:00 +2:04
Inswinging corner taken by Gary Jones from the left by-line played to the near post, Kari Arnason makes a clearance.45:00 +0:13
Effort from 20 yards by Gary Jones. Scott Shearer makes a comfortable save.43:56
Effort from 25 yards by Kyel Reid. Save by Scott Shearer.43:16 Substitution
Substitution Mitchell Rose comes on in place of Michael O'Connor.41:05
Ricky Ravenhill gives away a free kick for an unfair challenge on Michael O'Connor. Free kick taken by Craig Morgan.38:06
Nahki Wells gives away a free kick for an unfair challenge on Claude Davis. Scott Shearer takes the free kick.36:53
Inswinging corner taken right-footed by Gary Jones, save made by Scott Shearer.35:51
Michael O'Connor takes the chance to get an effort at goal. Ricky Ravenhill gets a block in.35:10
The ball is sent over by Ben Pringle, Alex Revell takes a shot. Save made by Jon McLaughlin. Ben Pringle takes a inswinging corner from the right by-line played to the near post, clearance made by James Hanson.34:59
Kieran Agard crosses the ball, clearance by Kyel Reid.34:17
Inswinging corner taken by Gary Jones from the left by-line played to the near post, Kari Arnason makes a clearance.33:28
The offside flag is raised against Garry Thompson. Scott Shearer takes the indirect free kick.33:19
Gary Jones produces a cross.31:55
Free kick awarded for a foul by Kyel Reid on Kari Arnason. Scott Shearer takes the free kick.29:46
Gary Jones takes the free kick.29:46 Booking
Booking Booking for Kari Arnason for unsporting behaviour.29:33
Free kick awarded for an unfair challenge on Kyel Reid by Kari Arnason.28:23
Scott Shearer takes the direct free kick.28:23 Booking
Booking Nahki Wells is booked.28:19
Nahki Wells challenges Michael O'Connor unfairly and gives away a free kick.26:37
Free kick awarded for a foul by Ricky Ravenhill on Alex Revell. Free kick taken by Joe Skarz.24:07 Substitution
Substitution Michael Nelson is brought on as a substitute for Andrew Davies.21:59
Kyel Reid is penalised for handball and concedes a free kick. Scott Shearer restarts play with the free kick.20:59
Corner taken by Gary Jones played to the near post, clearance made by Kari Arnason.17:26
The referee blows for offside against Nahki Wells. Scott Shearer takes the free kick.13:44
Gary Jones gives away a free kick for an unfair challenge on Kari Arnason. Joe Skarz takes the direct free kick.11:47
Ben Pringle concedes a free kick for a foul on James Hanson. Free kick crossed by Kyel Reid, Scott Shearer makes a comfortable save.11:05
Michael O'Connor challenges Garry Thompson unfairly and gives away a free kick. Free kick taken by Ricky Ravenhill.9:55
Lee Frecklington takes a shot. Jon McLaughlin makes a comfortable save.8:40
Inswinging corner taken right-footed by Gary Jones played to the near post, Michael O'Connor manages to make a clearance.8:18
Corner taken left-footed by Kyel Reid, save by Scott Shearer.7:28
Unfair challenge on Nahki Wells by Craig Morgan results in a free kick. Free kick crossed right-footed by Gary Jones from left wing, clearance made by Claude Davis.6:55
Free kick awarded for an unfair challenge on James Hanson by Michael O'Connor. Rory McArdle takes the direct free kick.4:31
Kyel Reid concedes a free kick for a foul on Kari Arnason. Free kick crossed left-footed by Ben Pringle, clearance made by James Meredith.2:53
James Meredith crosses the ball, blocked by Claude Davis. Corner taken by Gary Jones from the left by-line, James Hanson challenges Claude Davis unfairly and gives away a free kick. Scott Shearer takes the free kick.1:09
James Hanson challenges Michael O'Connor unfairly and gives away a free kick. Michael O'Connor takes the direct free kick.0:25
Centre by Ben Pringle, clearance by Stephen Darby.0:00
The game gets underway.
Live data and text provided by our data suppliers