Vernon Philander wrapped up Sri Lanka’s first innings for 239 on Thursday in reply to South Africa’s 580 for four on the third day of the third test then claimed the wicket of captain Tillakaratne Dilshan when the visitors followed on.
At tea, Sri Lanka had struggled to 42 for one in their second innings as South Africa moved closer to the victory which would clinch the series 2-1.
Paceman Philander took 3/46 in the Sri Lanka first innings before dismissing Dilshan for five when he edged a drive to wicketkeeper Mark Boucher.
Morne Morkel should have claimed the wicket of fellow opener Lahiru Thirimanne on 10 but Boucher dropped a simple catch.
South Africa captain Graeme Smith enforced the follow-on after Sri Lanka lost their last three wickets for 20 runs in the half hour after lunch.
In the opening session, Dale Steyn bowled with great intensity to put the hosts in control.
Sticking to a wonderful line just outside off stump and moving the ball away at high pace, he took three for 16 in eight overs as Sri Lanka’s ill-equipped batsmen slumped to 219 for seven at lunch. Steyn started the rot when he removed Kumar Sangakkara, who drove lazily to Hashim Amla at point, for 35 with the third ball of the day.
Veteran Thilan Samaraweera prodded at a fine Philander delivery that nipped away outside the off stump and Jacques Kallis took a low catch at second slip to send him on his way for 11. Mahela Jayawardene (30) was not able to resist pushing a Steyn delivery outside off stump, edging another catch to Kallis at second slip.
Angelo Mathews did not trouble Steyn for long, making just a single before he dabbed it to Boucher. Spinner Imran Tahir then pushed a big-turning leg-break through Thisara Perera’s defences to bowl him for five with what became the last ball before lunch.
Steyn finished with three for 56 from 20 overs while Tahir took two for 54 in 21 overs.