Faf du Plessis scored his fifth Test century to put South Africa in charge on day two of their second Test meeting against New Zealand in Centurion.
The stand-in captain ended unbeaten on 112 off 234 balls, in a streak that included 12 fours and two sixes, before his side declared their first innings at 481-8.
Du Plessis looked more and more comfortable as the day went on, building on his overnight tally of 13 to ensure that all five of South Africa's batsmen recorded half-centuries at SuperSport Park.
South Africa then reduced their opponents to 38-3 at stumps, as Dale Steyn and Vernon Philander took a wicket each and Temba Bavuma pulled off a run-out to put the hosts 443 runs ahead.
New Zealand saw Martin Guptill caught for just eight runs, while Tom Latham (4) failed to help his side's cause to leave Kane Williamson (15*) and Henry Nicholls (4*) with a big task on their hands when play resumes on Monday.