Sri Lanka captain Mahela Jayawardene once again led from the front, hitting his second century in as many Tests to steer his side to 238 for six on the opening day of the second and final match against England on Tuesday.
The home team, 1-0 up in the series, won the toss for the second straight Test but it was England who were most satisfied by the end of the day.
Paceman James Anderson took three early wickets to reduce Sri Lanka to 30 for three before Jayawardene came to the rescue, stroking 11 fours and one six in his 105.
It was the 34-year-old right-hander's 31st Test hundred and his eighth against England, the most he has scored against any country.
Angelo Mathews, back in the side after injury, was unbeaten on 41 at the close while Suraj Randiv was five not out.
"Losing three wickets up front put us on the back foot and we have to fight to get ourselves back in the game tomorrow," said Jayawardene.
"The wicket is pretty slow and England bowled pretty well, much more disciplined than in Galle. It wasn't easy for us to score runs so credit should go to them."
Jayawardene, who made 180 in the first Test in Galle and batted without blemish here, was trapped leg before by Graeme Swann late in the day after the spinner went round the wicket and straighted one to the Sri Lankan skipper.
The batsman opted to review the decision but the 'Hawk-eye' technology showed the ball was going on to hit the top of his leg stump after pitching outside off.
England then picked up a wicket with the second new ball when fast bowler Steven Finn had Prasanna Jayawardene caught behind by Matt Prior for seven.
Earlier, skipper Jayawardene and Thilan Samaraweera pulled Sri Lanka out of trouble with a fourth-wicket stand of 124 after Anderson had removed Tillakaratne Dilshan (14), Lahiru Thirimanne (eight) and Kumar Sangakkara for a duck.
Samaraweera, who was hit on the head by Finn when he ducked into a bouncer, made a composed 54 with five fours until he was trapped leg before by Tim Bresnan, the ball skidding through to beat his forward defensive prod.
The pitch offered early assistance to the seamers and Dilshan hit two consecutive fours off Anderson before the opener was caught behind.
Sangakkara then suffered his second successive first-ball duck when he edged Anderson to Andrew Strauss at first slip and the visiting captain held on to a juggling catch.
Thirimanne was trapped leg before, offering his pad to a delivery that pitched outside the off stump but swung back in.
Opener Thirimanne reviewed the decision and failed to get it overturned.
"I think we've had a pretty good day," said Finn. "It was a day of attritional Test cricket.
"Jayawardene played fantastically well and kept us at bay for a fair while but I felt that we stayed patient and at the end of the day it's pretty even I'd say."
Sri Lanka (first innings)
L Thirimanne lbw b Anderson 8
T Dilshan c Prior b Anderson 14
K Sangakkara c Strauss b Anderson 0
M Jayawardene lbw b Swann 105
T Samaraweera lbw b Bresnan 54
A Mathews not out 41
P Jayawardene c Prior b Finn 7
S Randiv not out 5
Total (for six wickets, 90 overs)238;
Fall of wickets: 1-21 2-21 3-30 4-154 5-216 6-227;
Bowling: Anderson 17-2-52-3, Finn 18-3-43-1, Bresnan 15-2-32-1, Patel 16-3-32-0, Swann 22-2-71-1, Pietersen 2-0-4-0.
Photograph: Dinuka Liyanawatte/REUTERS