Skipper Mahela Jayawardene became Sri Lanka's leading century-maker on Wednesday to dampen England's hopes of a series-levelling win in the third and final Test here.
Jayawardene was unbeaten on 149 as Sri Lanka, taking advantage of a butter-fingered English display, carried their overnight score of 147-4 to an almost impregnable 384-6 by stumps on the rain-hit second day.
Play began 90 minutes late due to a wet outfield caused by heavy rain on Tuesday evening, further curtailing a match in which just 55 of the stipulated 90 overs were bowled on the first day.
Jayawardene, who became Sri Lanka's leading run-getter during his 195 in the drawn second Test, surpassed Aravinda de Silva's record of 20 centuries with his second consecutive ton.
His five-hour knock, studded with 15 boundaries, gives the hosts a chance to press for a 2-0 series win over the remaining three days and clinch second place in the official rankings behind Australia.
Jayawardene and his overnight partner Tillekeratne Dilshan defied the England bowlers till just before tea in a 149-run partnership for the fifth wicket.
Dilshan, returning to the side after being ignored for the recent tour of Australia and the previous two Tests against England, marked his comeback with a stroke-filled 84.
England grabbed two wickets against the run of play in the last over before tea, but Chaminda Vaas (46 not out) prolonged the tourists' agony by adding 97 for the unbroken seventh wicket with Jayawardene.
Jayawardene was on 99 when he patted a ball from Ravi Bopara and Dilshan called for a run that would have given his captain his 21st century.
Dilshan was however unable to complete the run as Alastair Cook ran in from slip and broke the stumps before the batsman made his ground at the striker's end.
Three balls later, Bopara dismissed wicket-keeper Prasanna Jayawardene for no score, caught behind by Matt Prior, as Sri Lanka slipped from a comfortable 287-4.
The unexpected breaks came after a bungling effort in the field by England, who dropped three catches, had one turned down, and saw an unnecessary overthrow from captain Michael Vaughan go for four runs.
Dilshan had not added to his overnight score of seven when Cook at gully failed to hold a slash against left-armer Ryan Sidebottom.
Wicket-keeper Prior missed both Jayawardene and Dilshan -- and was denied one catch when Dilshan (65) gloved Matthew Hoggard down the leg-side, but Australian umpire Daryl Harper disallowed a loud appeal.
Television replays showed Dilshan was lucky to be given not out.
Jayawardene reached his century soon after tea and then found a valuable ally in Vaas to strengthen Sri Lanka's position.
Vaughan employed seven bowlers to curtail the Sri Lankan run-rate in good batting conditions. Steve Harmison returned with 3-72 while Sidebottom and Bopara were the other two wicket-takers.