Sri Lanka held an overall lead of 209 over England with five wickets in hand after 17 wickets fell on the second day of the first Test between Sri Lanka and England on Tuesday.
After yet another batting failure during a dispiriting winter for the world number one side, England hit back to reduce Sri Lanka to 84 for five in their second innings at the close.
England scored only 193 in their first innings after dismissing Sri Lanka for 318.
Off-spinner Graeme Swann, who went wicketless in the first innings, grabbed four of the five wickets to fall in the Sri Lankan second innings.
Swann bowled Lahiru Thirimanne (6), dismissed first innings centurion Mahela Jayawardene (5) caught at slip, forced Kumar Sangakkara (14) to edge a catch to Ian Bell at gully and close to the end of the day's play had Thilan Samaraweera (36) stumped.
Stuart Broad picked up Tillakaratne Dilshan's wicket for a duck when the batsman played down the wrong line to a full delivery and was bowled.
Left-arm spinner Rangana Herath was the outstanding bowler for Sri Lanka, taking his eighth five-wicket haul to give the hosts a 125-run lead.
Brought on to bowl in the ninth over of the England innings, Herath bowled unchanged from one end to finish with six for 74 off 19 overs as the England batsmen struggled to come to term with his bowling.
It was the England batsmen's continued inability to tackle spin rather than any terrors in the pitch that led to their downfall. Four of the batsmen were out lbw as they failed to use their feet against the spinner.
Only Ian Bell looked assured, scoring 52 off 87 balls with eight fours and a six, before he fell to a delivery that spun past the outside edge of his bat to clip the off bail.
England would have been in a worse plight if it had not for Bell's knock and some spirited resistance from the tail after they had been reeling at 92 for six.
Herath struck in successive overs before lunch to leave England reeling. In Herath's second over, Jonathan Trott (12) was needlessly stumped as he attempted to charge down the pitch to a full toss.
In his next over, Herath trapped England captain Andrew Strauss (26) lbw on the sweep shot, a decision which was originally given not out but overturned when Sri Lanka challenged.
Trott fell on the ground while desperately trying to return to the crease, running into celebrating wicketkeeper Prasanna Jayawardene and suffering a blow to his stomach.
It took him a little while to get his breath back and start the long walk back to the dressing room.
The post-lunch session also belonged to Sri Lanka as they picked up the remaining seven England wickets for 136 runs.
Left-arm paceman Chanaka Welegedera started the slide, coming from around the wicket to bowl Kevin Pietersen for three.
Herath then sent back Matt Prior (7), Samit Patel (2) and Stuart Broad (28), all out lbw.
The resistance put up by Swann and Bell forced captain Mahela Jayawardene to bring his second spinner Suraj Randiv into the attack.
Randiv obliged his captain by picking up the wickets of Swann (24), caught superbly by Tillakaratne Dilshan at short mid-wicket, and Monty Panesar (13) to end the innings.
After Mahela Jayawardene had anchored Sri Lanka's innings with a superb 180, Suranga Lakmal gave the hosts a perfect start with the ball when he dismissed Alastair Cook, lbw for a duck, in England's second over without a run on the board.
Cook thought about challenging the decision but decided against it after consulting his opening partner Strauss.
Sri Lanka, resuming on 289 for eight, added 29 more runs before the tourists claimed the final two wickets.
Paceman James Anderson removed both batsmen to end with figures of five for 72.
Jayawardene played some cheeky shots to add 12 runs to his overnight score before edging Anderson to wicket-keeper Prior.
He returned to the pavilion to a standing ovation having faced 315 balls and hit 22 fours and three sixes.
Sri Lanka (1st innings): (overnight 289-8)
L. Thirimanne c Swann b Anderson 3
T. Dilshan c Strauss b Broad 11
K. Sangakkara c Prior b Anderson 0
M. Jayawardene c Prior b Anderson 180
T. Samaraweera run out 20
D. Chandimal c Bell b Patel 27
P. Jayawardene lbw b Anderson 23
S. Randiv run out 12
R. Herath lbw b Patel 5
C. Welegedara b Anderson 19
S. Lakmal not out 0
Extras: (lb-14, nb-4) 18
Total: (all out, 96.3 overs) 318
Fall of wickets: 1-11, 2-11, 3-15, 4-67, 5-128, 6-170, 7-191, 8-203, 9-307, 10-318.
Bowling: Anderson 26.3-5-72-5, Broad 21-3-71-1 (nb-4), Panesar 23-11-42-0, Swann 23-3-92-0, Patel 9-1-27-2.
England (1st innings):
A. Strauss lbw b Herath 26
A. Cook lbw b Lakmal 0
J. Trott st P Jayawardene b Herath 12
K. Pietersen b Welegedara 3
I. Bell b Herath 52
M. Prior lbw b Herath 7
S. Patel lbw b Herath 2
S. Broad lbw b Herath 28
G. Swann c Dilshan b Randiv 24
J. Anderson not out 23
M. Panesar lbw b Randiv 13
Extras: (lb-2, w-1) 3
Total: (all out, 46.4 overs) 193
Fall of wickets: 1-0, 2-40, 3-43, 4-65, 5-72, 6-92, 7-122, 8-157, 9-157, 10-193.
Bowling: Welegedara 11-2-46-1, Lakmal 9-2-45-1 (w-1), Herath 19-5-74-6, Randiv 7.4-0-26-2.
Photograph: Graeme Swann celebrates taking the wicket of Mahela Jayawardene during day 2 of the first Test between Sri Lanka and England. Tom Shaw/Getty Images