South Africa were on track for their second successive big win over New Zealand when they claimed four second innings wickets on the third afternoon of the second and final Test at St George's Park on Sunday.
New Zealand were 157 for four at the close, still 247 runs short of avoiding a second conscutive innings defeat, after being forced to follow on 404 runs behind.
Dale Steyn took five for 17 as New Zealand were bowled out for 121 in their first innings.
Left-arm spin bowler Robin Peterson took the first two wickets in the second innings and fast bowler Rory Kleinveldt followed up with two wickets off successive deliveries.
New Zealand wicketkeeper BJ Watling followed up an impressive first innings of 63 - more than half his team's total - with 41 not out as he shared an unbeaten fifth wicket stand of 73 with Dean Brownlie (44 not out) to delay South Africa's progress.
On a hot, sunny day, in contrast to the overcast, swing-friendly conditions in which New Zealand crashed to 47 for six on Saturday, South Africa were made to work far harder for their wickets.
But they made steady progress and will be able to call for the second new ball 13 overs into the fourth day's play on Monday.
Captain Brendon McCullum and Martin Guptill made a cautious start in the second innings as New Zealand set out to try to avoid their second successive innings defeat.
They saw off the new ball attack of Steyn and Morne Morkel as they put on 40 for the first wicket.
But McCullum fell to Peterson for the third time in as many innings to provide South Africa with their first breakthrough.
After being dismissed by Peterson in the second innings in the first Test at Cape Town and in the first innings in the current match, McCullum played Peterson with exaggerated caution before missing a delivery which went straight on and trapped him leg before wicket for 11.
Kane Williamson attempted an aggressive back foot shot against Peterson but was bowled by a ball which kept low.
Guptill made 48 before he went back to a ball from Kleinveldt which veered in and hit his offstump and Daniel Flynn was out first ball for his second duck of the match when he edged Kleinveldt to wicketkeeper AB de Villiers.
Steyn had a spell of three wickets for three runs in five overs on Sunday morning to reduce New Zealand to 62 for nine in reply to South Africa's 525 for eight declared.
But Watling went on the attack and added 59 for the last wicket with Trent Boult (17 not out) before Watling was last man out, caught at first slip off Morkel. It was a record tenth wicket stand for New Zealand against South Africa.
Watling followed up a marathon 42 during New Zealand's innings defeat in the first Test with another composed, impressive performance. He faced 87 balls and hit 13 boundaries.