Match ends, Walsall 1, Wigan Athletic 2.
Wigan Athletic climbed into the League One automatic promotion places as substitute Yanic Wildschut's injury-time goal gave them victory at Walsall.
In a first half with more bookings than shots on target, Conor McAleny struck from 25 yards to put the Latics ahead.
Wigan threatened a second before Sam Mantom thumped in the equaliser after a Jason Demetriou free-kick was blocked.
There were chances at both ends before Wildschut cut inside to win it, beating keeper Neil Etheridge at his near post.
Wigan rise to second in the table after extending their unbeaten run to 11 games, while the Saddlers slip a place to fourth after a second successive home defeat.
Sean O'Driscoll's side, who have won just once in six matches, in all competitions, are still without a home win in 2016.
Walsall boss Sean O'Driscoll told BBC WM 95.6:
"We struggled first half to get any rhythm. Early on, you realised that Wigan's game plan was to stop the full-backs. You've got to give them some credit.
"Our game plan all week was to do certain things and that went out the window early on. We got a little frustrated with each other, and it was a bit like a chess match first half.
"We sort of cancelled each other out. But a worldie goal got them in front which you can't really legislate for."
Wigan Athletic boss Gary Caldwell told BBC Radio Manchester:
"If we'd put the game to bed in the first half, it would have been a lot easier for everyone.
"We never know when we're down or when we're beat - we keep coming back. At 1-1, we made attacking subs. We had an intent to go and win.
"I thought in terms of the whole 90 minutes, we were the better team and deserved to win."
- 16PrestonBooked at 65minsSubstituted forCookat 90+2'minutes
- 2DemetriouBooked at 90mins
- 7ChambersBooked at 44mins
- 8MantomBooked at 6mins
- 15LalkovicBooked at 10mins
- 5DanielsSubstituted forWabaraat 85'minutes
- 24McAlenySubstituted forDaviesat 87'minutes
- 4PerkinsBooked at 14mins
- 27ColcloughSubstituted forWildschutat 73'minutes
- Iain Williamson
- Shots on Target
Second Half ends, Walsall 1, Wigan Athletic 2.
Corner, Wigan Athletic. Conceded by Adam Chambers.
Corner, Walsall. Conceded by Craig Morgan.
Anthony Forde (Walsall) wins a free kick in the defensive half.
Foul by Yanic Wildschut (Wigan Athletic).
Jason Demetriou (Walsall) is shown the yellow card for a bad foul.
Foul by Jason Demetriou (Walsall).
David Perkins (Wigan Athletic) wins a free kick in the attacking half.
Substitution, Walsall. Jordan Cook replaces Matt Preston.
Goal! Walsall 1, Wigan Athletic 2. Yanic Wildschut (Wigan Athletic) right footed shot from outside the box to the bottom right corner.
Attempt saved. William Grigg (Wigan Athletic) right footed shot from the left side of the six yard box is saved in the bottom left corner.
Foul by Anthony Forde (Walsall).
Chris McCann (Wigan Athletic) wins a free kick in the attacking half.
Substitution, Wigan Athletic. Craig Davies replaces Conor McAleny.
Tom Bradshaw (Walsall) wins a free kick in the defensive half.
Foul by Chris McCann (Wigan Athletic).
Substitution, Wigan Athletic. Reece Wabara replaces Donervon Daniels because of an injury.
Corner, Walsall. Conceded by Jussi Jääskeläinen.
Attempt saved. Anthony Forde (Walsall) right footed shot from outside the box is saved in the top centre of the goal.