Fast bowler Morne Morkel proved the catalyst for a sizeable South African lead as the home side went to tea on 58 for two, 235 runs ahead of Australia on the third day of the second test on Saturday.
Morkel's fiery bowling helped restrict Australia to 246 in their first innings and Hashim Amla (24) and Faf du Plessis (one) will resume in the evening session with the hosts looking to extend their advantage.
They lost openers Graeme Smith (14) and Dean Elgar (16) in their second innings, the former bowled off the inside edge by Mitchell Johnson and the latter caught by wicketkeeper Brad Haddin to give Peter Siddle his first wicket of the match.
Morne Morkel (three for 63) was the pick of the South African bowlers as he bowled two fearsome spells that had the Australians hopping around the crease.
The tourists resumed on 112 for four and Morkel terrorised nightwatchman Nathan Lyon (15) by landing some sickening body blows.
David Warner decided scoring would be easier at the other end and he chased a wide Vernon Philander delivery, edging the ball to Smith at first slip with his score on 70.
Lyon's stomach for the fight against Morkel had gone and the South African got his man when the batsman backed away as he attempted to leave a rising delivery and ended up playing the ball on to his stumps.
Dale Steyn removed Haddin (nine) with a superb off-cutter that nipped back into the batsman and found the gate between bat and pad to smash into middle stump.
There will have been some satisfaction for the South Africans late in the session when a Morkel delivery crashed into helmet of Johnson, who had put Ryan McLaren out of this test with a similarly sickening blow in Pretoria.
Johnson (27) looked unsettled and was bowled by part-time off-spinner JP Duminy shortly afterwards.
Steve Smith (49) was controversially given out caught behind by AB de Villiers off Morkel when South Africa reviewed a not out decision and there was little evidence to suggest the batsman had hit the ball.
Third umpire Aleem Dar thought he heard an edge, however, and overturned the decision.
Ryan Harris (26) and Siddle (11 not out) put on 37 for the final wicket before the former edged Morkel to Du Plessis at second slip.
Wayne Parnell, who took two wickets in his first over of test cricket in four years yesterday, limped off the field with a left groin strain and will not bowl again in the test.
Australia won the first test of the three-match series by 281 runs in Pretoria.
Follow Emirates 24|7 on Google News.