Debutant Zulqarnain Haider scored a courageous 88 to frustrate England's bid to win inside three days against Pakistan in the second Test at Edgbaston on Sunday.
Pakistan, bowled out for just 72 on Friday before England replied with 251, were 291 for nine at stumps, a lead of 112, with two days remaining.
Umar Gul, batting with a runner, was on nine and Mohammad Asif on 13.
Haider came in at 82 for five with his team still 97 runs from avoiding an innings loss. Partnerships of 52 with Mohammad Amir and 115 with Saeed Ajmal, who hit a career best 50, ensured England were at least given a fight.
Pakistan, 1-0 down in the four-match series, were jolted by an inspired spell either side of lunch by off-spinner Swann, who took a Test-best six for 60. Haider dug in, though, before he was the ninth victim when he drove Swann to mid-off.
Wicketkeeper Haider, picked for the omitted Kamran Akmal, looked to have bagged the unwanted tag of a 'king pair' when given out lbw to Swann first ball. But a referral showed the ball had turned too much.
Haider's finest stroke was perhaps a thumping straight drive for four off pace bowler James Anderson that took him to 77. Another boundary driven through mid-on off Steven Finn raised his 50, when he knelt and kissed the turf.
Pakistan, 19 for one overnight, almost survived the first hour of the morning until Swann dramatically made his entrance by taking a wicket with his third ball of the match. He had bowled just two overs in the series before the day began.
Left-hander Imran Farhat (29), struck above his right eye when on 27 by a Stuart Broad bouncer, was bowled when Swann came around the wicket, pitched the ball outside his leg stump only for it to spin sharply enough to take off stump.
Right-hander Azhar Ali, after battling hard for 82 deliveries, perished to another spitting off-break from Swann for 19. This time Swann came over the wicket and landed the ball outside Ali's off stump and managed to get it to clip leg stump.
Swann's prodigious turn created panic. Umar Akmal advanced down the pitch and tried to hit Swann over long-on first ball but missed it and escaped a tough stumping chance for Matt Prior. Finn added the wicket of Shoaib Malik (3).
Akmal (20), usually an aggressive player, looked uncomfortable defending against the turning ball and made a peculiar decision to leave a Swann delivery that spun into him and struck him on the pads for lbw. Akmal lost his appeal to the third umpire. Swann added Umar Amin (14) after lunch, stumped by Prior.
For the remainder of the afternoon session, Swann was denied by Haider and the 18-year-old Amir, whose maturity belied his years.
While Haider was a solid presence, Amir escaped a run out chance on one and a dropped catch by short leg fielder Alastair Cook on nine off Paul Collingwood. Amir eventually edged Broad to Andrew Strauss at first slip shortly after tea.
As England sniffed another chance to claim the win, Ajmal hung around to make a 50 off 77 balls, before edging Swann to Strauss at slip two balls after his milestone.
Earlier, Broad was spoken to by the umpires after needlessly throwing the ball at Haider (when on 22) - striking him on the shoulder.
Broad, known for occasional bouts of temper, apologised to the injured batsman but match referee Ranjan Madugalle may yet be called to take action.