A double strike by off-spinner Graeme Swann in the penultimate over of the fourth day put England within reach of victory in the second and final test against Sri Lanka on Friday.
England need to win the match to square the series and retain their world number one ranking.
Having safely negotiated the second new ball, Sri Lanka appeared to be relatively safe at 215 for four before Swann sent back Thilan Samaraweera (47) and nightwatchman Suraj Randiv for a duck in the space of three balls to swing the test England's way.
At the close, Sri Lanka who trailed England by 185 runs on the first innings, were 218 for six, an overall lead of 33 runs.
Sri Lanka's hopes of saving the test match rest on the shoulders of captain Mahela Jayawardene, who was unbeaten on 55 with Angelo Mathews on three.
Swann, who also dismissed Tillakaratne Dilshan (35) and Kumar Sangakkara (21), ended the day with four wickets for 82.
Dilshan, who was fined 10 percent of his match fee for excessive appealing, was unhappy after he was given out, caught at slip by James Anderson.
The batsman asked for a review but with no Hot Spot technology available, there was no conclusive evidence to overrule the on-field umpire's decision.
Swann then removed Sangakkara, who had struggled for nearly two hours before edging a catch behind the wicket to Matt Prior.
Sri Lanka lost both openers in the morning session when the English pace bowlers removed Dhammika Prasad (34) and Lahiru Thirimanne (11) but not before the visitors paid for some sloppy fielding.
Anderson got rid of the shaky Thirimanne, who edged a catch to Andrew Strauss at slip with the total on 23.
Prasad, sent in as a nightwatchman, justified his promotion and hung around for 87 minutes before he pulled Steven Finn straight to Tim Bresnan at deep square leg.
It was some relief for Finn, who had dropped Prasad at mid-off when the batsman was on 21.
The missed opportunity was a second heartbreak for Swann, who earlier saw Matt Prior gift Thirimanne a reprieve by wasting a simple stumping chance.
Bresnan also dropped Jayawardene on 20 when he lofted Samit Patel but the fielder, at deep mid-wicket, could get only a hand to the ball as it sailed over his head for four.
"Every single bloke in the dressing room wants to stay at number one," said England wicketkeeper Matt Prior. "We want to prove we are the best team in the world. We want to win this match because you want to win every single test."