Doncaster 3-4 Portsmouth
Portsmouth confirmed Doncaster's relegation from the Championship while saving themselves by scoring twice in stoppage time in an amazing turnaround.
Trailing 3-2 to 10-man Doncaster in the 90th minute, Dave Kitson and Marko Futacs struck to save Pompey for now.
The hosts led via early Habib Beye and Fabien Robert strikes but when Beye saw red for a foul on Kitson, Greg Halford scored the first of two penalties.
James Coppinger made it 3-2, before the visitors' barely believable late rally.
Even so, Pompey's chances of staying in the division are slim, as they are seven points from safety with three games left.
But they will be delighted to at least give themselves a chance, while Doncaster may well feel harshly treated.
A chaotic game turned on the questionable dismissal of former Senegal international Beye on the hour.
Kitson fell theatrically under pressure from the veteran Senegalese to give away a penalty and controversy also surrounded the Pompey substitute's late leveller as it appeared he handled the ball.
The amazing end to the game left the home fans hooting their disapproval.
By contrast the few hundred travelling Pompey fans remained behind singing in celebration after the whistle.
Michael Appleton's side got off to the worst possible start when Beye headed in from a free-kick, before Robert stabbed home from close range after John Oster's initial effort had been blocked.
That brought a change from the Pompey boss before the half-hour, with Kitson replacing Kelvin Etuhu.
And after showing some signs of life in the second half, the visitors were then given a hotly contested penalty as Beye was dismissed for denying Kitson a scoring opportunity.
Doncaster's James O'Connor was penalised soon after, with Halford tucking in from 12 yards again, before Coppinger put Doncaster ahead once more via low shot.
Dean Saunders's were hanging on before Kitson made it 3-3 and when Futacs slid in the winner, it ended Doncaster's four-year stay in the division.
Doncaster Rovers chairman John Ryan: "I thought the officials today were an absolute disgrace. I will be speaking to the head of referees tomorrow.
"I thought it was a clear handball for the third goal and a clear handball for the fourth goal. The first penalty I thought was outside the box.
"I'm absolutely sickened to the core about the standard of refereeing."
Portsmouth manager Michael Appleton: "Our chances of staying up are not great.
"Even if we win the three games, all Bristol City have to do is look after their own ship. I think if it was a Grand National we'd be a 500-1 shot.
"What today does do though is it gives me confidence we can win three games."
- 33 Woods
- 02 O'Connor
- 03 Friend
- 11 Lockwood
- 41 Beye Dismissed
- 16 Oster (Hird - 59' )
- 17 Barnes
- 18 Gillett
- 26 Coppinger
- 09 Brown (Dumbuya - 73' )
- 22 Robert (Hayter - 46' )
- 01 Sullivan
- 21 Hird
- 24 Dumbuya
- 12 Hayter
- 23 Bennett
- 01 Ashdown
- 02 Ward
- 03 Rocha
- 05 Pearce
- 15 Halford
- 23 Rekik (Futacs - 76' )
- 16 Allan
- 19 Norris
- 11 Varney (Harris - 46' )
- 14 Etuhu (Kitson - 28' )
- 22 Maguire
- 04 Mokoena
- 17 Harris
- 09 Futacs
- 18 Kitson
- 24 Scapuzzi
Live Text Commentary
Full Time The game is over, as the referee blows his whistle.90:00 +2:40 Goal scored
Goal! - Marko Futacs - Doncaster 3 - 4 Portsmouth Marko Futacs finds the back of the net with a goal from inside the area to the bottom left corner of the goal. Doncaster 3-4 Portsmouth.89:26 Goal scored
Goal! - Dave Kitson - Doncaster 3 - 3 Portsmouth Dave Kitson grabs a headed goal from close range. Doncaster 3-3 Portsmouth.88:35
David Norris takes the outswinging corner, Sam Hird makes a clearance.85:26
Header from deep inside the area by David Norris goes harmlessly over the crossbar.84:18
Scott Allan takes a shot from close in clearing the crossbar.83:49
Free kick awarded for a foul by James Coppinger on Dave Kitson. Free kick taken by Dave Kitson.79:08
Corner taken left-footed by Scott Allan from the right by-line to the near post, James Coppinger makes a clearance.78:20
Ashley Harris takes a shot. Save by Gary Woods.77:33
James Hayter is flagged offside by the assistant referee. Free kick taken by Jamie Ashdown.76:24
Free kick awarded for an unfair challenge on Scott Allan by James Coppinger. Scott Allan takes the direct free kick.75:44 Substitution
Substitution Marko Futacs is brought on as a substitute for Karim Rekik.75:07
Ashley Harris decides to take the corner short.72:04 Substitution
Substitution Chris Brown goes off and Mustapha Dumbuya comes on.72:04
Karim Rekik concedes a free kick for a foul on James Coppinger. James Coppinger restarts play with the free kick.69:37
Effort on goal by David Norris from just inside the penalty area goes harmlessly over the target.66:58 Goal scored
Goal! - James Coppinger - Doncaster 3 - 2 Portsmouth James Coppinger finds the net with a goal from inside the area to the bottom right corner of the goal. Doncaster 3-2 Portsmouth.64:40 Goal scored
Goal! - Greg Halford - Doncaster 2 - 2 Portsmouth Placed penalty scored by Greg Halford. Doncaster 2-2 Portsmouth.63:42
Adam Lockwood is penalised for a handball.61:25
The official flags Ashley Harris offside. Free kick taken by Gary Woods.
Shot on goal by Simon Gillett from just inside the area clears the crossbar.59:02
Shot on goal by James Hayter from just inside the area goes over the target.58:30 Substitution
Substitution (Doncaster) makes a substitution, with Sam Hird coming on for John Oster.58:03 Goal scored
Goal! - Greg Halford - Doncaster 2 - 1 Portsmouth Placed penalty scored by Greg Halford. Doncaster 2-1 Portsmouth.56:19 Dismissal
Dismissal Habib Beye is shown a red card.56:13
Habib Beye concedes a Penalty for a foul on Dave Kitson.55:08
Free kick awarded for an unfair challenge on Adam Lockwood by Dave Kitson. Free kick taken by George Friend.53:04
Ashley Harris takes a shot. Gary Woods makes a save.52:10
Effort on goal by James Coppinger from just inside the area clears the crossbar.50:35
Free kick awarded for a foul by Karim Rekik on James Coppinger. James O'Connor restarts play with the free kick.49:39
Scott Allan takes a shot.48:28
James Hayter has an effort at goal from just inside the box that misses to the left of the goal.45:13 Substitution
Substitution Luke Varney goes off and Ashley Harris comes on.45:03 Substitution
Substitution James Hayter is brought on as a substitute for Fabien Robert.45:01
The referee starts the second half.45:00 +1:08 Half time
Half Time The referee calls an end to the first half.45:00 +0:18
Chris Brown concedes a free kick for a foul on Ricardo Rocha. Jamie Ashdown restarts play with the free kick.44:33
Outswinging corner taken right-footed by James Coppinger, clearance by Jason Pearce.44:29
The ball is delivered by James Coppinger, clearance made by Ricardo Rocha.43:30
Free kick awarded for a foul by James O'Connor on Luke Varney. Scott Allan takes the free kick.42:53
Free kick awarded for a foul by Jason Pearce on Chris Brown. Free kick taken by Simon Gillett.42:06
Effort from inside the area by James Coppinger misses to the right of the target.41:29
Unfair challenge on Adam Lockwood by Dave Kitson results in a free kick. Gary Woods takes the free kick.40:11
Scott Allan takes a shot. Save by Gary Woods.38:46
Corner taken by Scott Allan from the right by-line played to the near post.38:06
John Oster takes a shot. Jamie Ashdown makes a save.37:04
Fabien Robert produces a cross.36:13
Jason Pearce challenges Fabien Robert unfairly and gives away a free kick. John Oster restarts play with the free kick.33:03
Free kick awarded for an unfair challenge on Habib Beye by Dave Kitson. Direct free kick taken by Gary Woods.31:14
James Coppinger takes a outswinging corner to the near post.30:33
Corner taken by James Coppinger from the right by-line to the near post, Habib Beye takes a shot. Save by Jamie Ashdown.29:12
Outswinging corner taken right-footed by Scott Allan played to the near post, Luke Varney takes a shot. Clearance by James Coppinger.26:54
Jamie Ashdown restarts play with the free kick.26:54 Substitution
Substitution (Portsmouth) makes a substitution, with Dave Kitson coming on for Kelvin Etuhu.26:54
Unfair challenge on Chris Maguire by Simon Gillett results in a free kick.22:24
Free kick awarded for a foul by Adam Lockwood on Chris Maguire. Scott Allan takes the free kick.18:13
David Norris takes a shot. Save by Gary Woods.15:16
Fabien Robert concedes a free kick for a foul on Greg Halford. Free kick crossed by Scott Allan.14:12
Giles Barnes concedes a free kick for a foul on David Norris. Direct free kick taken by Ricardo Rocha.13:52
Foul by David Norris on Chris Brown, free kick awarded. Direct free kick taken by John Oster.13:08
Giles Barnes concedes a free kick for a foul on David Norris. Direct free kick taken by Ricardo Rocha.11:13
Effort from the edge of the penalty box by Chris Maguire goes wide of the right-hand upright.6:52
Shot by James Coppinger.6:17
Effort from deep inside the area by Luke Varney clears the bar.4:21
Assist by James Coppinger.4:21 Goal scored
Goal! - Fabien Robert - Doncaster 2 - 0 Portsmouth Goal scored by Fabien Robert from inside the six-yard box to the top right corner of the goal. Doncaster 2-0 Portsmouth.2:06
The assist for the goal came from James Coppinger.2:06 Goal scored
Goal! - Habib Beye - Doncaster 1 - 0 Portsmouth Habib Beye grabs a headed goal from inside the penalty box. Doncaster 1-0 Portsmouth.1:42
Chris Brown fouled by Jason Pearce, the ref awards a free kick. Centre by James Coppinger,1:00
The ball is swung over by Joel Ward, Gary Woods makes a save.0:00
The referee starts the match.
Live data and text provided by our data suppliers