Vernon Philander led a relentless South African bowling performance before England fought back on the second day of the first Test at Centurion's SuperSport Park on Friday.
Philander took four for 16 in 14.2 overs as South Africa appeared to have taken control by bowling out England for 181, a first innings lead of 103.
But England struck hard at the start of the second innings. South Africa were 72 for four at the close, an overall lead of 175 on a pitch which has proved difficult for batsmen throughout.
Philander, 34, who has announced he will retire from international cricket at the end of the four-Test series, produced a master class of control to complement the strike power of fast bowlers Kagiso Rabada (three for 68) and Anrich Nortje (two for 47).
Wicketkeeper Quinton de Kock equalled the South African Test record by holding six catches, a feat which had been accomplished six times before – on four occasions by new head coach Mark Boucher.
Joe Denly hit a half-century for England after a shaky start. He shared in partnerships of 55 for the third wicket with captain Joe Root (29) and 72 for the fourth wicket with Ben Stokes (35).
Denly was dropped on nought and took 28 balls to score his first run as Philander had an opening spell of one wicket for no runs in five overs.
But Denly survived the initial fast bowling storm and gradually asserted himself to make 50 off 111 balls with nine fours.
England collapsed, however, after Denly was caught behind off an inside edge to give all-rounder Dwaine Pretorius his first Test wicket.
Fast bowler Anrich Nortje bowled Jonny Bairstow for one in the next over and then claimed the key wicket of Stokes when he switched to bowling around the wicket and induced a loose drive which presented wicketkeeper Quinton de Kock with his fifth catch of the innings.
Nortje bowled at high pace, with a top speed of 149 kph.
From a promising position at 142 for three, England lost their last seven wickets for 39 runs.
But wickets continued to fall when South Africa batted again. James Anderson, who dismissed Dean Elgar with the first ball of the match on Thursday, again claimed a wicket in his first over when Aiden Markram played around his pads and was leg before wicket.
Zubayr Hamza was caught by wicketkeeper Jos Buttler down the leg side before Elgar was caught behind for 22 off Jofra Archer’s second ball to reduce South Africa to 29 for three.
Rassie van der Dussen appeared to have been caught by Ben Stokes at second slip off Sam Curran when he had five but an umpire’s review showed the ball had bounced just before it reached a diving Stokes.
Van der Dussen helped captain Faf du Plessis add 33 for the fourth wicket before Du Plessis, who had hooked a fired-up Archer for six, was caught at long leg when he played another hook shot.
Van der Dussen survived to the close on 17 not out, with nightwatchman Anrich Nortje. Archer was spoken to by the umpires in the penultimate over of the day after bowling two high full tosses while attempting to bowl slower deliveries. The first was no-balled.