Swansea City saw their unbeaten run come to an end as Millwall claimed their first away league win of the season at the Liberty Stadium.
The Lions took the spoils thanks to an excellent second-half free-kick from Jed Wallace, which left Swans goalkeeper Freddie Woodman with no chance.
Swansea had plenty of ball and pressure, but could not find the tempo and accuracy in their play to break down a dogged visiting rearguard, with Kristoffer Peterson and Borja unable to finish their best sights of goal.
It means Steve Cooper’s side have suffered four defeats in their last six games in SA1, and the head coach will be disappointed having challenged his side to back up a good run of results before the international break.
The Swans – unchanged for the fourth game in a row - nearly made the ideal start, Bersant Celina sparked a rapid attack that saw Andre Ayew’s cross flash beyond Nathan Dyer at the far post.
At the other end Jon Dadi Bodvarsson headed wide having got above Ben Wilmot to meet Murray Wallace’s fine cross.
Otherwise, there was little goalmouth action during the opening 20 minutes, with Millwall happy to drop numbers behind the ball and wait for opportunities to counter.
The Swans sparked to life with 25 minutes on the clock, Celina jinking inside his man to get away a lot shot that was well held by Bartosz Bialkoswki in the Millwall goal.
Bialkowski then saved from Ayew after he and Dyer had worked hard to win the ball high up the pitch while, as Millwall countered, Wilmot made a superb block as Connor Mahoney eyed the far corner.
The visitors were growing in confidence, Mahoney having a threatening cross blocked with Jed Wallace smashing the rebound just over the bar.
Nice work between Dyer and Kyle Naughton towards the end of the half saw the winger float in a threatening cross only to find no white shirt gambling for the ball in to cap a frustrating first 45 minutes.
The hosts made a brighter start to the second half, Matt Grimes firing over the bar moments after Celina was denied by an excellent block from Shaun Williams.
Lovely link play between Celina, George Byers and Ayew ended with Byers being denied by a Bialkowski save.
Woodman saved a Jed Wallace free-kick comfortably just before the hour mark.
Peterson, on for Wayne Routledge at the break, had the best chance yet as a lovely roll of his man sent him clear, but Bialkowski was equal to his left-footed effort.
And the visitors took the lead in the 65th minute through an excellent Jed Wallace free-kick.
Referee Andy Davies decided Mike van der Hoorn had fouled Wallace on the edge of the area as they chased a long ball, and the midfielder dusted himself down to firmly plant the resulting set-piece high into the net.
Cooper sent on Borja and Sam Surridge with the Swans now chasing the game, but Millwall defended stoutly and greedily snapped up any errant passes or touches.
Swansea put the pressure on as Millwall moved ever deeper, but were struggling to craft any genuine chances.
Woodman prevented Jiri Skalek extending Millwall’s lead as the numbers being committed to attack left Swansea short of numbers at the back.
And Borja prodded agonisingly wide with the keeper beaten in the final moments, but there would be no late redemption for the Swans this time.
Swansea City: Freddie Woodman; Kyle Naughton, Mike van der Hoorn, Ben Wilmot, Jake Bidwell; George Byers, Matt Grimes (captain); Nathan Dyer (Borja Baston 70), Bersant Celina (Sam Surridge 76), Wayne Routledge (Kristoffer Peterson 46); Andre Ayew.
Subs not used: Kristoffer Nordfeldt, Connor Roberts, Ben Cabango, Jay Fulton.
Millwall: Bartosz Bialkowski, Murray Wallace, Shaun Hutchinson, Jake Cooper, Shaun Williams, Jed Wallace (Tom Bradshaw 89), Ben Thompson, Mahlon Romeo, Alex Pearce (captain), Connor Mahoney (Matt Smith 66), Jon Dadi Bodvarsson (Jiri Skalek 76).
Subs not used: Luke Steele, James Brown, Billy Mitchell, Aiden O'Brien.
Referee: Andy Davies
Attendance: 16,840