Part-time bowler Tillakaratne Dilshan snapped up two West Indies wickets within the space of three balls to tilt the balance of the second Test in favour of Sri Lanka on the third day in Colombo, on Thursday.
At stumps, West Indies were 165 for five in reply to Sri Lanka's 387 for nine declared with play ending 52 minutes after tea due to bad light. West Indies trail by 222 runs.
Dilshan, bowling his off-breaks, first broke a threatening fourth wicket partnership of 83 between Darren Bravo and Brendan Nash. He trapped Nash leg before wicket for 29 with a straight ball which the batsman played for the turn.
Two balls later Bravo, who had been batting confidently, played a loose drive and spooned the ball to cover point where Rangana Herath made a lot of ground and took a spectacular catch inches off the ground. Bravo hit a Test best 80.
West Indies, having lost opener Adrian Barath cheaply before the lunch break, suffered two big losses in the afternoon session when Sri Lanka captured the wickets of Chris Gayle and Shivnarine Chanderpaul.
Gayle, who made a memorable triple century in the drawn first Test at Galle, had made 30 when he was trapped beautifully into a pull shot by Suranga Lakmal which ended in the hands of Angelo Mathews at deep square leg.
It was debutant Lakmal's first Test wicket and he celebrated by spread-eagling himself on the pitch as his team mates ran up to congratulate him.
Spinner Ajantha Mendis, who surprisingly opened the bowling, trapped Chanderpaul lbw for eight with a straight ball which the batsmen was a shade too slow to respond to.
Earlier, Sri Lanka declared their first innings after adding 93 runs to their overnight total.
Skipper Kumar Sangakkara completed his 13th score of 150 runs in Tests before Darren Sammy had him caught by Gayle at first slip as he attempted an expansive drive.
Left-arm spinner Sulieman Benn then broke through the defences of Prasanna Jayawardene for 34 with fast bowler Kemar Roach having Kulasekara caught at point for 17 and Mendis bowled for two to finish with figures of five for 100 - his second five wicket haul.