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 made 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.
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 bowled Tillakaratne Dilshan for a duck when the batsman played down the wrong line to a full delivery.
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 first innings 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 terms with his bowling.
Sri Lanka captain Jayawardene said that ever since Muttiah Muralitharan retired Herath had stepped up to become his country's best bowler.
"Rangana played alongside Murali for quite some time, for eight years he has always been an understudy," said Jayawardene.
"When Murali is bowling from the other end you don't get much notice but Rangana showed that he's got the experience now and he has got the responsibility to lead a young attack.
"He is doing it brilliantly and all the other bowlers are responding really well."
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 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 been for Bell's knock and some spirited resistance from the tail after they had been reeling at 92 for six.
"The score's not going to lie is it?" said Bell. "To get bowled out for under 200 isn' great on that wicket, which is pretty good to be honest. There's nothing to scare you."
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.
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.
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.
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 Welegedara 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.