Durban - Sri Lanka enjoyed their finest hour since arriving in South Africa when they bowled out their hosts for 168, on the day two of the second Test at Kingsmead on Tuesday.
Left-arm seamer Chanakara Welegedara did most of the damage, destroying the top order and returning figures of five for 52, only his second five-wicket haul of his career.
Left-arm spinner Rangana Herath finished with four for 49 as South Africa made their lowest total ever against Sri Lanka, still facing a deficit of 170 runs.
Sri Lanka faced two overs before stumps and lost the wicket of Tillakaratne Dilshan (4) as Dale Steyn had him caught at first slip by Graeme Smith. They were seven for one when bad light stopped play.
While Marchant de Lange stole the headlines earlier in the day with his seven-wicket haul on debut, Sri Lanka boasted their own newcomer in Dinesh Chandimal.
The wicketkeeper contributed a valuable 58 runs with the bat, took three catches and had Imran Tahir stumped off the bowling of Herath. It was the first time in test cricket a debutant wicketkeeper has been involved in four dismissals and scored a half century.
South Africa lost their first three wickets immediately after lunch and, reeling on 27 for three, it was up to Hashim Amla and AB de Villiers to rebuild the innings.
The pair added 76 runs off 148 balls before De Villiers (25) went after a wide half-volley and nicked the ball to second slip.
During his innings, he reached the milestone of 5 000 Test runs playing in his 70th Test.
Amla (54) followed shortly afterwards, getting a faint edge to Welegedara and to give Chandimal his second catch of the day.
Amla’s 20th half-century came up in 69 balls and included ten boundaries.
Steyn offered some resistance with his 29 not out and smashed two fours and two sixes.
Jacques Rudolph (7) was the first to depart, having played a poor shot to a Thisara Perera delivery.
It still took a great diving catch by Welegedara at fine leg to dismiss him.
He was quickly followed by Smith (15) who fished outside off-stump, sending a thick edge through to Chandimal , who pouched his first catch.
With barely time to blink, Jacques Kallis joined the pair in the changeroom, failing to score.
Welegedara bowled across the right hander and Kallis was forced to play at it, sending an outside edge straight to Mahela Jayawardene at second slip.
With the exception of a half-century in one innings against Australia, Kallis has scored two ducks and two scores of two, albeit one was not out, so far this summer.
In Sri Lanka’s first innings of 338, Thilan Samaraweera (102) scored his 13th Test century, and his first against South Africa.
He celebrated with a machine-gun action after being one of six Sri Lankan cricketers injured in the March 2009 attack on their bus in Lahore, where he was shot in the thigh.
The only other Sri Lankan to score a century on South African soil was Hashan Tillakaratne, in Centurion, in November 2002.
De Lange became the eighth bowler this year to take a five-wicket-haul on Test debut after Vernon Philander, James Pattinson (Aus), Nathan Lyon (Aus), Pat Cummins (Aus), Doug Bracewell (NZ), Ravichandran Ashwin (India) and Elias Sunny (Bangladesh) preceded him.