Kemar Roach finished with a five-wicket haul as Sri Lanka posted 387-9 declared in their first innings on the third day of the second Test against West Indies on Thursday.
The fast bowler took 5-100 for his second haul of five or more wickets in a Test innings as the hosts added 93 runs to their overnight total of 294-5 for the loss of four wickets.
The West Indies were 7-1 in reply at lunch, with paceman Nuwan Kulasekara trapping opener Adrian Barath (three) leg-before with his fourth delivery in the last over before the break.
Sri Lanka skipper Kumar Sangakkara fell in the morning's sixth over after adding 15 to his overnight total of 135, while Prasanna Jayawardene contributed 34 before becoming left-arm spinner Sulieman Benn's first victim.
Sangakkara, struck on the helmet by a Roach delivery, pulled the next ball for a four and then reached his 150 with a fluently-driven boundary through the covers.
The Sri Lankan captain fell in the next over, caught at first slip by Chris Gayle while attempting to drive seamer Darren Sammy.
He cracked one six and 18 fours in a 268-ball knock for his 24th Test century. Roach nearly got a wicket in the morning's ninth over when Jayawardene top-edged an attempted cut, but Gayle failed to hold a difficult high chance at first slip when the batsman was on 25.
Jayawardene failed to make the most of the chance as he could add nine more runs before being bowled by Benn. He hit five fours in his 57-ball knock. Roach was again the unlucky bowler when Barath dropped Rangana Herath at square-leg when the batsman was on 21.
Herath remained unbeaten with 24. But he struck in his next over when Kulasekara (17) cut the paceman straight to Dwayne Bravo at deep point.
He took his fifth wicket when he bowled Ajantha Mendis (two) with a full-toss. Sammy bagged two wickets, while seamer Bravo and Benn took one wicket apiece.
The West Indies are seeking their first Test victory in Sri Lanka, having lost five and drawn two of their seven matches.