Dale Steyn was the architect of another Australian batting collapse as South Africa ended the second day of the second Test on Friday trailing by just 30 runs with all 10 second-innings wickets intact.
Steyn took four for 64 in 18 overs to help bowl out Australia for 296 in reply to South Africa's first innings of 266.
South Africa's second innings was cut short by bad light after just four balls with the hosts 0 without loss.
Australian openers Shane Watson and Phil Hughes earlier both scored 88 as the visitors soared to 174 for nought, before crashing in the afternoon session as South Africa's bowling improved considerably.
Seamer Vernon Philander, playing in just his second Test, did much to turn the tide with his accurate bowling and he started the collapse when he forced Hughes to edge a back-foot drive to first slip, where AB de Villiers held on to a sharp head-high catch.
Watson then pulled Jacques Kallis to the midwicket boundary, where Imran Tahir dived to complete a fine catch.
Former captain Ricky Ponting -- scouring desperately for runs in a bid to save his international career -- lasted just three balls before Steyn trapped him lbw for a duck with an in-swinger, leaving Australia's leading run-scorer with just 245 runs in 15 innings in the last year.
Current captain Michael Clarke and the inexperienced Usman Khawaja then took the total to 212 for three before the extra bounce obtained by tall fast bowler Morne Morkel undid Clarke, who was caught in the slips by De Villiers for 11.
Steyn then ensured the Australian innings remained on the skids after the tea break with two wickets in four overs, saving his best delivery of the day -- a sharp in-swinger -- to bowl Mike Hussey for 20.
Khawaja's footwork eventually let him down after a vigil of nearly two hours for 12 runs as Steyn trapped him lbw.
Steyn claimed his fourth wicket when wicketkeeper Mark Boucher took a brilliant catch, diving in front of first slip as the ball dipped, to dismiss Pat Cummins for two.
He would have had a fifth wicket, but substitute fielder Dale Deeb dropped an easy catch from last man Nathan Lyon at mid-off.
Mitchell Johnson's 38 not out ensured Australia first matched South Africa's first-innings total and then gained a small lead.
South Africa's Pakistan-born leg-spinner Tahir wrapped up the tail as he grabbed his first three Test wickets, at a cost of 55 runs in 13.4 overs.
Australia must win the second and last Test to avoid losing a series in South Africa for the first time since 1970 after the hosts won a memorable first Test in Cape Town where the tourists were all out for 47.
Photograph: Getty Images