Underdogs Sri Lanka rocked South Africa with four wickets at the start of the first Test at Kingsmead on Wednesday, leaving the home side on 89 for four at lunch.
Left-arm opening bowler Vishwa Fernando took two wickets and new ball partner Suranga Lakmal one as South Africa found themselves 17 for three.
New Sri Lanka captain Dimuth Karunaratne had won the toss and sent the hosts in on a pitch which offered bounce and swing on a partially overcast morning.
Temba Bavuma and captain Faf du Plessis rode out the early storm and gradually started to change the momentum in a 72-run partnership.
Their stand was ended in the last over before lunch when Du Plessis was caught down the legside by wicketkeeper Niroshan Dickwella off Kasun Rajitha for 35. Sri Lanka successfully reviewed a not-out decision by umpire Richard Kettleborough.
Bavuma was unbeaten on 38.
Fernando had Dean Elgar caught behind with his fourth delivery before a run had been scored and should have had the wicket of Hashim Amla two balls later.
He appealed passionately for a leg before wicket decision and the Sri Lankans took too long before asking for a review of umpire Aleem Dar's decision. Replays showed the ball had pitched in line and would have hit the stumps.
The lapse was inexpensive as Amla made only three before being caught low down at second slip by Kusal Mendis off Lakmal.
Fernando, 27, playing in his fourth Test, struck again when he bowled Aiden Markram for 11 with a superb delivery which swung into the right-handed batsman.
South Africa went into the match with only six specialist batsmen, including wicketkeeper Quinton de Kock, after opting to add left-arm spinner Keshav Maharaj to the four-pronged pace attack which they used in their most recent two Tests against Pakistan.