Match ends, Gillingham 1, Walsall 2.
Walsall scored two second-half goals to beat League One promotion rivals Gillingham and move up into third.
The hosts started brighter, but Neil Etheridge saved a Luke Norris penalty after Paul Downing's handball.
That spurred the Saddlers on and Milan Lalkovic picked up a loose ball to curl the ball in and break the deadlock.
With the Gills pressing, Walsall broke, Jordy Hiwula slotting in after Romaine Sawyers' composed pass, and Norris's bicycle kick was only a consolation.
Gillingham, who have now failed to win any of their last nine matches against Walsall, drop down to sixth place.
The Saddlers were playing their third straight away game in 11 days, having lost the previous two, to Sheffield United and Oldham. But, having won the first of their two catch-up games caused by Easter postponements due to international calls, they are now five points behind second-placed Burton Albion.
They have now won four of their six matches since Jon Whitney became interim boss following last month's sacking of Sean O'Driscoll.
Walsall boss Jon Whitney told BBC WM:
"It was a huge game and we approached it with belief. I have sensed people doubting us and I hope those people now realise what we are about.
"That was an outstanding performance from my boys. I don't think Gillingham could live with us. We passed them off the park, ran them off the park and the most pleasing thing for me is that we were more physical than them.
"I said from the start that it's going to be an up and down season. It is going to go right to the wire. The Burton players will be having their tea and biscuits but they won't taste as nice because we're hunting them down."
- 6El-AbdSubstituted forEganat 56'minutes
- 50OshilajaSubstituted forHessenthalerat 67'minutes
- 23DackSubstituted forDickensonat 81'minutesBooked at 90mins
- 2DemetriouBooked at 90mins
- 7ChambersBooked at 47mins
- 10SawyersSubstituted forFlanaganat 90'minutes
- 12FordeSubstituted forMorrisat 69'minutes
- 15LalkovicSubstituted forCookat 84'minutes
- Stuart Attwell
- Shots on Target
Second Half ends, Gillingham 1, Walsall 2.
Brennan Dickenson (Gillingham) is shown the yellow card for a bad foul.
Jason Demetriou (Walsall) is shown the yellow card for a bad foul.
Goal! Gillingham 1, Walsall 2. Luke Norris (Gillingham) right footed shot from the centre of the box to the top left corner. Assisted by Ryan Jackson.
Josh Wright (Gillingham) wins a free kick in the attacking half.
Foul by Kieron Morris (Walsall).
Substitution, Walsall. Reece Flanagan replaces Romaine Sawyers.
Attempt missed. Sam Mantom (Walsall) left footed shot from outside the box is close, but misses to the left.
Substitution, Walsall. Jordan Cook replaces Milan Lalkovic.
Corner, Walsall. Conceded by Max Ehmer.
Substitution, Gillingham. Brennan Dickenson replaces Bradley Dack.
Attempt saved. Kieron Morris (Walsall) left footed shot from the centre of the box is saved in the bottom left corner.
Goal! Gillingham 0, Walsall 2. Jordy Hiwula-Mayifuila (Walsall) left footed shot from the centre of the box to the bottom left corner. Assisted by Kieron Morris.
Attempt blocked. Luke Norris (Gillingham) right footed shot from outside the box is blocked.
Hand ball by Milan Lalkovic (Walsall).
Attempt missed. Cody McDonald (Gillingham) right footed shot from outside the box is just a bit too high.
Foul by Cody McDonald (Gillingham).
Paul Downing (Walsall) wins a free kick in the attacking half.
Corner, Gillingham. Conceded by Adam Chambers.