Crystal Palace's six game unbeaten run came to an end at Selhurst Park as Doncaster smash and grabbed a 3-0 victory for their first away win of the season.
Despite having most of the play, the home side were made to pay for a series of missed chances as Doncaster took theirs in devastating fashion.
The first, and probably the most glaring miss of all, was that of Neil Danns on 13 minutes when he fired wide from six yards out infront of an open goal.
The midfielder was presented with the opportunity when Jose Fonte's effort was parried into his path by Neil Sullivan.
The Eagles came close again five minutes later when Alan Lee picked the ball up wide on the left and fed Moses. The youngster aimed a shot across Sullivan, but he couldn't hold on to it and it fell to the feet of Darren Ambrose who, on for his 13th goal of the season, was denied by a foot on the line.
Palace were eventually made to pay for their misses on the half hour mark when Oster carried the ball into Palace's half and fed James Chambers down the right. Clint Hill backed off allowing Chambers to cross for the unmarked Billy Sharp to poke home.
Palace responded by coming close four minutes later when Jose Fonte met an Ambrose corner but James Coppinger managed to clear it off the line.
The Eagles came out for the second half and immediately set about piling the pressure on the away side's defence, and they almost found the breakthrough two minutes in when Sullivan brilliantly denied Ambrose.
A long Moses throw from the right was allowed to bounce in the box and it fell to Ambrose who reacted quickly to it by aiming a flicked effort at goal, but the Doncaster keeper managed to get down well to his left and tipped it round the post.
The incessant pressure almost paid off on 56 when a corner in from Ambrose was played to the back post where Lee aimed a looping header that had Sullivan stranded, only for Coppinger to clear it off the line.
Up the other end the visitors had two superb opportunities to extend their lead. Firstly Oster found himself with space on the right for a shot, but he took too long in setting himself up and it allowed Fonte to get back and block the shot.
Two minutes later Chambers was played into the box on the right and, with all the time in the world, lifted his effort over and wide of Speroni's goal.
On the hour Moses tested Sullivan's hands with a low shot from inside the box, but the visitors extended their lead when Martin Woods fired home from inside the box.
The midfielder had been found after some good work between Oster and Sharp, and the latter fed Woods who managed to open up his body and fire across Speroni.
The away side wrapped up the win on 78 minutes when Hayter got his second of the afternoon as he latched on to a Dean Shiels' through ball and slotted past Speroni.
Attendance: 13,985 (613 away)
Crystal Palace: 1. Julian Speroni, 3. Clint Hill, 4. Shaun Derry (10. Nick Carle, 80) , 6. Jose Fonte, 7. Darren Ambrose 8. Neil Danns (16. Freddie Sears, 67), 11. Victor Moses, 19. Alan Lee (18. Calvin Andrew, 67), 20. Danny Butterfield, 22. Johnny Ertl, 24. Claude Davis
Doncaster Rovers: 1. Neil Sullivan, 2. James O'Connor, 3. Gareth Roberts, 5. Billy Sharp, 6. James Chambers, 12. James Hayter, 16. John Oster (15. Mark Wilson, 80), 17. Martin Woods (21. Sam Hird, 86), 20. Jason Shackell, 22. Dean Sheils, 26. James Coppinger (10. John Spicer, 84)
Subs: 7. Lewis Guy,13. Ben Smith, 23. Byron Webster, 31. Simon Gillette