Walsall stayed second in League One despite losing heavily at home to play-off chasing Millwall.
Anthony Forde and Rico Henry each rattled the woodwork for the Saddlers, but Lee Gregory put Millwall ahead after the hour-mark.
Mahlon Romeo doubled the Lions’ lead and Gregory added a late third to consign Sean O’Driscoll’s men to a first league reverse in five matches.
The Saddlers showed two changes from the side that won 2-1 at Doncaster on Tuesday night.
Rico Henry came in for Milan Lalkovic, while goalkeeper Liam Roberts was handed his Walsall debut, in place of the injured Craig MacGillivray.
And the 21-year-old was immediately called into action, making a fine one-handed stop to tip over Ed Upson’s audacious chip on three minutes.
Neil Harris’ Millwall – full of confidence after three wins in four matches - had started purposefully and threatened again moments later.
Steve Morison’s teasing cross eluded Paul Downing but in-form striker Lee Gregory couldn’t quite connect.
But Walsall responded well and began to apply some sustained pressure on the Millwall goal.
After eight minutes, Jason Demetriou traded passes with Anthony Forde and drilled in a cross which was blocked with Henry lurking menacingly.
The ball was cleared only as far as Andy Taylor who tested visiting keeper Jordan Archer with a fizzing left-footed drive.
Shortly after, Forde’s wind-assisted free-kick looked destined for the top corner but Archer reacted well to push the ball over the bar.
The Saddlers were on top and Forde tried his luck again, twisting and turning before seeing a low shot held by Archer at his near post.
After standing firm defensively, play-off chasing Millwall began to apply some pressure at the other end.
On 36 minutes, Romeo’s fierce right-footed drive from a tight angle was kept out well by Roberts at his near post.
And the youngster came to Walsall’s rescue again moments later as he produced an excellent double save.
He first smothered Gregory’s effort from Jed Wallace’s clever defence-splitting pass, before reacting quickly to block Upson’s follow-up.
The Saddlers went back on the offensive, with Sam Mantom drilling narrowly wide from just outside the area.
Only a lick of paint denied Walsall the lead on the cusp of half-time, when Forde’s excellent left-footed drive from 20 yards cannoned against the bar.
HALF-TIME: WALSALL 0-0 MILLWALL
Walsall were again denied by the woodwork after the break, as Henry’s miss-hit left-wing cross looped over Archer and hit the inside of the post.
The hosts were in the ascendancy.
Mantom fired a deflected shot wide and Demetriou guided a weak header into the arms of Archer from Henry’s accurate cross.
But against the run of play, Millwall broke the deadlock after the hour mark when Gregory converted Wallace’s accurate low centre.
Walsall pushed for an equaliser, with Romaine Sawyers seeing a goalbound attempt blocked by a visiting defender.
But Millwall doubled their advantage on 70 minutes.
Debutant Romeo surged forward from right-back, played a one-two with Wallace, darted into the box and drilled a low angled shot through Roberts.
Seven minutes later Millwall put the result beyond doubt, Gregory finishing confidently past Roberts after latching onto Shaun Williams’ long ball.
Substitute Milan Lalkovic was denied by Archer as Walsall looked to claw their way back into the contest.
But Millwall comfortably saw the game out to record a handsome win, condemning the Saddlers to a second 3-0 home defeat in three matches.
FULL-TIME: WALSALL 0-3 MILLWALL
Roberts, Taylor (K Morris 75’), O’Connor, Downing, Demetriou, Henry, Chambers (Lalkovic 76’), Mantom, Forde, Sawyers, Bradshaw (Cook 50’).
Subs not used: Preston, Kinsella, B Morris Jezeph.
4,843 (749 Millwall supporters).