The Swans suffered their first defeat in 19 league games as Millwall pulled off a shock victory at the Liberty Stadium.
Goals from Lewis Grabban and Jay Simpson sent the Lions into a two-goal lead before Jason Scotland pulled one back from the penalty spot.
Despite the rare defeat, the Swans remained 11 points clear at the top ahead of the visit of Tranmere to the Liberty on Tuesday night.
Swansea City: de Vries, Rangel, Austin, O'Leary, Tate ©, Butler, Pratley, Bodde, Britton, Robinson, Scotland. Subs: MacDonald, Bauza, Way, Brandy, Burgin.
Millwall: Evans, Senda, Frampton, Robinson ©, Whitbread, Dunne, Alexander, Grabban, Simpson, Fuseini, Laird. Subs: Edwards, Smith, Martin, Savage, Bakayogo.
Ref: K Stroud
Asst-refs: R Ganfield, D C Richards
4th official: K Hill
Att: 15,561 Away: 142
Swans boss Roberto Martinez named an unchanged side from the one that beat Huddersfield 1-0 at the Galpharm Stadium last Saturday after Jason Scotland passed a fitness test on his dislocated toe.
Garry Monk (back) was still out along with fellow defenders Dennis Lawrence (knee) and Marcos Painter (hamstring). It meant that 18-year-old youth team left-back James Burgin kept his place on the bench.
He was joined by striker Guillem Bauza who made his return from a groin injury.
The Swans started the game 11 points clear at the top of the league and looking to equal a record of 19 league games unbeaten set way back in 1970-71.
They faced a Millwall side just one point above the relegation zone in 18th place and managed by former Swans boss Kenny Jackett.
And it was Jackett who had the first smile on his face as Millwall stormed into a shock lead after less than a minute when Lewis Grabban headed beyond Dorus de Vries with the Swans defence sleeping.
It was nearly two in the sixth minute as Gary Alexander met a Danny Senda cross in the sixth minute, but de Vries pulled off a good save with his legs.
Swansea slowly pulled themselves together and had a good spell as Andy Robinson forced Rhys Evans into a his first save, before Ferrie Bodde drove a superb 25-yard drive just wide.
Swansea were playing some good football with 20 minutes gone as a tremendous long pass from Bodde picked out Butler. The winger cut in before testing Evans in the visitors' goal.
Millwall nearly caught the Swans on the counter though with 24 minutes gone as Grabban found himself racing in on goal. But the striker fired inches wide of the far post as the large crowd held their breath.
Swansea were soon back on the attack, however, as great work from the trick Robinson created a chance for Darren Pratley on the edge of the area, but the midfielder fired over.
Half-time: Swans 0 Millwall 1
Neither side made any changes at the start of the second-half as the Swans looked to grab an early equaliser.
The breakthrough should have come in the 56th minute when the influential Bodde forced Evans to save with his legs. When the rebound came out, Pratley fired over from eight yards with the goal gaping.
Swansea were exerting plenty of pressure with an hour gone as Millwall managed to scramble a Bodde free-kick clear.
Then with 64 minutes gone, Roberto applied more pressure as defender Kristian O'Leary made way for striker Febian Brandy as Swansea went three at the back.
It left Swansea more at risk of the counter-attack as Gary Alexander tested de Vries with a shot that the Dutch 'keeper saved easily.
And disaster struck in the 70th minute as a long ball caught out Alan Tate. His header let in Jay Simpson whose shot deflected off Kevin Austin and beyond a wrong-footed de Vries.
Two minutes later though and Swansea were back in it at 2-1 as Brandy was brought down by Ali Fuseini and the referee had no hesitation in pointing to the spot.
Jason Scotland stepped up to slot home his 22nd goal of the season from the spot.
It raised the roof at the Liberty as the Swans stepped it up a gear as Robinson nearly met a far post cross from Butler.
With five minutes remaining, Roberto threw another one up front as Guillem Bauza replaced Pratley.
But despite camping in the Millwall half, the Swans couldn't grab the prized equaliser.


















