Sri Lanka tightened their grip on the second Test with South Africa on day two as they made 421 before reducing the visitors to 98-3 at the close.
Resuming on 305-5, and Mahela Jayawardene looking to kick on having reached his 34th Test century on the first day, the hosts made a good start in Colombo and reached 385 before Jayawardene was run out for a wonderful 165.
Dilruwan Perera was the next man in and alongside Niroshan Dickwella eased Sri Lanka past 400. However, when spinner Imran Tahir had Perera caught by Hashim Amla, the innings unravelled as the final four wickets fell for just 17 runs. Dickwella run out for 72 before Vernon Philander mopped up the tail.
The Proteas response got off to a terrible start as Rangana Herath, opening the bowling, had Alvaro Petersen caught and bowled in his first over.
Herath was one of three specialist spinners selected by the Sri Lankans and it was another, Perera, who picked up the second wicket of Dean Elgar to leave South Africa 13-2.
Faf du Plessis (36) and the captain, Amla, set about recovering the situation, batting patiently and putting on 58 in 30 overs before Du Plessis was caught spectacularly by Dickwella behind the stumps, off the bowling of Ranasinghe Lakmal.
Amla and AB de Villiers batted through to stumps though with the skipper ending the day on 46 not out from 134 balls and much work left to do.