David Healy's superb drive helped Doncaster secure an enthralling 3-2 victory over 10-man Portsmouth at Fratton Park.
The Northern Ireland international ended Pompey's five-game unbeaten run at home with a 20-yard drive late in the second half, curtailing a resurgence from the resilient home side.
James Hayter's fourth goal in as many games broke the deadlock for Rovers in the 15th minute before James Coppinger deservedly doubled the visitors' advantage 11 minutes later.
Joel Ward helped Pompey back into the game after the break before Neil Sullivan fumbled a ball into the box by John Utaka, allowing David Nugent to equalise 16 minutes from time.
However, the visitors were not to be denied victory on their first trip to Portsmouth for 28 seasons, with Healy grabbing the winner before Carl Dickinson was sent off late on.
Nugent boosted Pompey heading into the clash, returning after a two-game absence through a knee injury in place of the suspended Liam Lawrence.
Doncaster, meanwhile, were missing Joseph Mills after the on-loan Southampton left-back failed a late fitness test on an ankle injury.
Pompey started the match brightly and forced Sullivan into a save in the opening minute after a Doncaster defensive mix-up allowed Utaka to play in a great ball for Nugent to head goalwards from six yards.
That proved a cue for both sides to rain in shots, with Jamie Ashdown having to produce a smart save to prevent Rovers from breaking the deadlock.
John Oster played in a great ball with the outside of his boot to Hayter, who produced a smart turn and strike that the Portsmouth keeper did well to tip around the post in the 10th minute.
Hayter was not to be denied for long, though.
Five minutes later some smart play from Healy saw the ball fall to the striker, who managed to divert it just past Ashdown into the roof of the net.
Portsmouth failed to recover and Fratton Park fell silent again in the 26th minute when Coppinger deservedly doubled the visitors' advantage,
Despite calls for Mustapha Dumbuya to be pulled back for a tackle, Rovers piled forward and Coppinger went on to dink the ball over Ashdown.
Ricardo Rocha and Ward came on for Ibrahima Sonko and Kanu in the second half as the Blues tried to gain a foothold in the game.
The changes seemed to work as Portsmouth looked refreshed, especially in attack, and Sullivan had to parry Dave Kitson's 51st-minute shot as the home side looked to reduce the deficit.
The home side's pressure eventually paid dividends in the 66th minute when Utaka drilled a great ball across the box and substitute Ward tapped home at the back post.
Fellow substitute Rocha put a free header just wide moments later before Sullivan handed Pompey an equaliser, fumbling Utaka's cross to allow Nugent to poke home.
Portsmouth looked resurgent and pressed for the winner, only for Healy to settle the match in the 79th minute with a great strike that sent home the majority of the 14,828 crowd unhappy.
Pompey's disappointing afternoon was compounded when Dickinson sent off in the 88th minute for a bad foul on Hayter.
Copyright (c) PA Sport 2009, All Rights Reserved.