Angelo Mathews scored a stubborn century to take Sri Lanka to 229-4 on the first day of the second Test against England on Friday after early strikes by James Anderson made the home side look vulnerable.
Mathews was at the crease on 107 with Niroshan Dickwella at the close in Galle.
Sri Lanka lost the first Test by seven wickets.
Anderson claimed three wickets, including opener Lahiru Thirimanne for 43 soon after lunch, that took his Test tally to 603 in 157 matches.
Mathews built crucial partnerships, including a 117-run stand for the fourth wicket with skipper Dinesh Chandimal who made 52.
Fast bowler Mark Wood trapped Chandimal lbw and the batsman went off after an unsuccessful review of the umpire's decision.
Mathews reached his 11th Test hundred, and third against England, with a single off Jack Leach. He put on 36 runs with Dickwella, holding out after England took the new ball in the 81st over.
Anderson, who replaced fellow quick Stuart Broad as the only change for England, struck twice in one over in the morning session with the wickets of Kusal Perera (6) and Oshada Fernando (0).
Perera was caught at first slip by England skipper Joe Root.
Fernando played a rising delivery onto his stumps as Sri Lanka slipped to 7-2.
Thirimanne and Mathews rebuilt the innings with a 69-run stand up to lunch, but Anderson broke through after the break.