South Africa captain Faf du Plessis ground out a century and was rewarded for his patience when New Zealand lost three quick wickets before the close of play on the second day of the second Test at SuperSport Park on Sunday.
New Zealand finished the day on 3-38, 443 runs behind South Africa's first innings total of 8-481 declared.
In an era of rapid scoring in Test cricket, much of South Africa's innings was a return to a more attritional age, with the run-rate hovering at around three runs an over.
Du Plessis was particularly cautious as he tiptoed to a fifth Test century off 225 balls.
Quick Single: Thriller in Dambulla puts Aussies 2-1 up
But it paid off for South Africa as reunited fast bowling pair Dale Steyn and Vernon Philander ripped out both openers before Ross Taylor was run out.
It left New Zealand in deep trouble in a match which will decide the series after the weather-hit, abandoned first Test in Durban.
Martin Guptill survived a sharp chance to Stiaan van Zyl at third slip off Philander when he was on four, with the ball bursting through the fielder's hands for four more runs.
But he gave a more straightforward chance to the same fielder in Philander's next over without adding to his score.
Steyn then had left-hander Tom Latham caught behind off an inside edge for four, although it seemed a controversial decision, with South Africa reviewing after umpire Paul Reiffel gave the batsman not out.
It was clear that the ball had deviated off the batsman's trousers but only the faintest flicker on the ultra-edge device gave any indication that it had touched the bat first. But television umpire Richard Illingworth decided it was enough evidence to overturn his colleague's decision.
Quick Single: Happy homecoming for Kiwi Wagner
Much then depended on New Zealand captain Kane Williamson and Ross Taylor, his most experienced team-mate.
Taylor was struck twice, on the shoulder and arm, by lifting deliveries from Steyn and scored only one before pushing a ball from Kagiso Rabada to midwicket. He set off for a run, was sent back by Williamson and was beaten by a direct hit from Temba Bavuma.
Du Plessis bemoaned the failure of his batsmen to convert good starts into big scores in the first Test and seemed determined to set an example against steady bowling on a pitch still offering some help to the seam bowlers.
Apart from a burst of scoring immediately after lunch, it was slow going for Du Plessis, who reached 50 off 130 balls.
A largely defensive innings included one extravagant shot which almost cost him his wicket.
After labouring to 18 off 86 balls, he pulled a short ball from Trent Boult and the ball went for six through the hands of Henry Nicholls, running along the midwicket boundary.
South Africa added 198 runs to their overnight total of 3-283 in 66 overs, with JP Duminy making 88 off 158 balls, with 13 fours, before he was caught behind off Tim Southee, getting a faint edge to an attempted pull against a bouncer.