Tristan Stubbs and Temba Bavuma notched up their centuries as the Proteas declared after reaching a commanding total of 366/5 at tea on day three of the first Test against Sri Lanka at Kingsmead in Durban.
It was Stubbs' second century in his short career, and third for in-form skipper Bavuma, who has been subject to some unfair criticism over the years.
South Africa finished the session with a commanding 515-run lead.
Having ended day two on top, the two started where they left off as they built a big partnership for the fourth wicket.
As the runs continued to flow freely, the Sri Lankans resembled a team that was already defeated, providing very little resistance to the two men in the middle.
Stubbs was back in the change room after being bowled by Vishwa Fernando for a well played 122, and was soon followed by Bavuma, who was caught LBW for 113, which signalled tea.
Scorecard
South Africa first innings 191 all out: Temba Bavuma 70, Keshav Maharaj 24, Asitha Fernando 3/44, Lahiru Kumara 3/70
Sri Lanka first innings 42 all out: Kamindu Mendis 13, Lahiru Kumara 10, Marco Jansen 7/13, Gerald Coetee 2/18
South Africa second innings 366/5 declared: Tristan Stubbs 122, Temba Bavuma 113, Vishwa Fernando 2/64, Prabath Jayasuriya 2/132
South Africa lead by 515 runs
Teams at Kingsmead
Proteas: Aiden Markram, Tony de Zorzi, Tristan Stubbs, Temba Bavuma (captain), David Bedingham, Kyle Verreynne (wicket-keeper), Marco Jansen, Wiaan Mulder, Gerald Coetzee, Keshav Maharaj, Kagiso Rabada.
Sri Lanka: Dimuth Karunaratne, Pathum Nissanka, Dinesh Chandimal, Angelo Mathews, Kamindu Mendis, Dhananjaya de Silva (captain), Kusal Mendis (wicket-keeper), Prabath Jayasuriya, Lahiru Kumara, Asitha Fernando, Vishwa Fernando.
IOL Sport