Match ends, Doncaster Rovers 0, Walsall 2.
Walsall moved to within three points of the League One play-off places with a two-goal victory over Doncaster Rovers.
Jordan Cook hooked in at the near post from Anthony Forde's corner to put Walsall ahead after just three minutes,
Ex-Saddlers skipper Andy Butler had a great header saved, while Dean Furman saw another effort cleared off the line as Rovers pushed hard to level.
But Walsall were too strong, on-loan Jordy Hiwula heading on his debut to complete a fourth consecutive away win.
The Manchester City youngster had been on the field less than five minutes when he found the top left corner from Cook's cross.
Doncaster Rovers boss Paul Dickov told BBC Radio Sheffield:
"Compared to recent performances over the past six to eight weeks, when we've been very good and showed a lot of energy, we looked a little lacklustre.
"Conceding a poor goal from a set-piece as early as we did always gives you a mountain to climb.
"We got back in it, the keeper has made a save, we had one cleared off the line and we started the second half really well.
"But, when that happens, you've got to make sure you lock the door at the back and the second goal's poor."
Walsall manager Dean Smith told BBC WM:
"To come away and get another clean sheet is very pleasing. This is a difficult place to come, but we ran out worthy winners.
"We had to defend a lot of balls into the box and, while some of our play was a little loose at times, we broke at pace and scored two good goals.
"It's important now that we get back into winning ways at home. Performances have been good but we have to turn them into points.
"Jordy Hiwula did well. He looked bright. His first three touches were fantastic. I'm very pleased for him. This will give him a big boost to take into our next game."
- 16ButlerBooked at 79mins
- 18KeeganBooked at 69minsSubstituted forRobinsonat 77'minutes
- 4FurmanSubstituted forBennettat 45'minutes
- 11MainSubstituted forTysonat 45'minutes
- 3TaylorBooked at 68mins
- 12CainSubstituted forFlanaganat 90+2'minutes
- 21CookBooked at 9mins
- 10SawyersSubstituted forBaxendaleat 88'minutes
- 24GrimesSubstituted forHiwula-Mayifuilaat 66'minutes
- Graham Scott
- Shots on Target
Second Half ends, Doncaster Rovers 0, Walsall 2.
Richard Wellens (Doncaster Rovers) wins a free kick in the attacking half.
Foul by James Baxendale (Walsall).
Foul by Reece Wabara (Doncaster Rovers).
Anthony Forde (Walsall) wins a free kick in the defensive half.
Substitution, Walsall. Reece Flanagan replaces Michael Cain.
Substitution, Walsall. James Baxendale replaces Romaine Sawyers.
Attempt missed. Andy Butler (Doncaster Rovers) header from the centre of the box misses to the left.
Theo Robinson (Doncaster Rovers) wins a free kick in the defensive half.
Foul by James O'Connor (Walsall).
Attempt saved. Jordy Hiwula-Mayifuila (Walsall) right footed shot from the centre of the box is saved in the centre of the goal.
Attempt saved. Uche Ikpeazu (Doncaster Rovers) left footed shot from outside the box is saved in the centre of the goal.
Attempt missed. Anthony Forde (Walsall) right footed shot from outside the box is close, but misses to the left from a direct free kick.
Andy Butler (Doncaster Rovers) is shown the yellow card.
Hand ball by Andy Butler (Doncaster Rovers).
Substitution, Doncaster Rovers. Theo Robinson replaces Paul Keegan.
Attempt missed. Uche Ikpeazu (Doncaster Rovers) right footed shot from the centre of the box is too high.
Corner, Doncaster Rovers. Conceded by Romaine Sawyers.
Corner, Doncaster Rovers. Conceded by James O'Connor.