Prasanna Jayawardene's hundred left Sri Lanka well-placed against England on the second day of the first Test here on Friday.
The wicketkeeper's 112 was the cornerstone of Sri Lanka's first innings 400, a total that appeared some way off when he came in at 159 for four.
Sri Lanka then collected a prize scalp shortly before the close when England captain Andrew Strauss edged Suranga Lakmal, who might not have been playing but for injuries to first-choice seamers Dilhara Fernando and Nuwan Pradeep, to Mahela Jayawardene at second slip for 20.
At stumps, England were 47 for one - a deficit of 353.
Ashes hero Alastair Cook was 24 not out and nightwatchman James Anderson unbeaten on one in England's first Test since completing a 3-1 series win in Australia in January.
Sri Lanka were faltering when Prasanna Jayawardene took guard but the 31-year-old, whose Test career has been revived by the decision of former captain Kumar Sangakkara to give up the gloves, was undaunted.
He gave just one chance before reaching his century when, on 89, he edged Graeme Swann to first slip where Strauss failed to hold the catch in the position previously occupied by the now retired Paul Collingwood when the off-spinner was bowling.
Prasanna Jayawardene played a stroke worthy of Mahela Jayawardene (no relation), when he cover-drove Swann for four to reach 96.
Then a legside three off fast bowler Chris Tremlett took him to a third Test hundred, and first against England, off 147 balls with a dozen boundaries.
England were frustrated on Friday by the controversial review system.
They twice thought they had all-rounder Farveez Maharoof lbw only to fail on review both times.
Anderson had an especially close appeal rejected by West Indian umpire Billy Doctrove when Maharoof was on six.
Technology indicated the ball would have hit the stumps. But it also suggested the ball had pitched marginally outside off-stump and, with Maharoof attempting a shot, the decision reverted to Doctrove who stood by his original verdict.
England now had no reviews left but there was more replay torment ahead.
Rangana Herath had made 10 when he edged Tremlett to Strauss. However, the batsman stood his ground and the umpires referred the decision to Australia's Rod Tucker.
The third umpire, as often happens in cases of low catches, decided there was enough doubt to rule in the batsman's favour.
Prasanna Jayawardene was well supported by Test debutant Thisara Perera and Herath in eighth and ninth wicket stands of 68 and 51 respectively that compounded England's agony.
He was eventually out when caught behind off Stuart Broad after an innings that lasted more than four hours.
Sri Lanka resumed Friday on 133 for two after skipper Tillakaratne Dilshan (50), who won the toss, and Sangakkara (11) had exited late on Thursday's rain-marred first day.
Mahela Jayawardene failed to add to his overnight four and he was soon followed back into the pavilion by opener Tharanga Paranavitana, who made a valuable 66.
Thilan Samaraweera rode his luck before Anderson had him caught by second slip Swann for 58 to end a stand of 84 with Prasanna Jayawardene.
At 243 for five, England, would have reckoned on running through the rest of the batting but Prasanna Jayawardene had other ideas.