Johannesburg - A Kagiso Rabada-inspired Proteas ripped through the England lower order on Saturday to leave the third Test match at the Wanderers evenly poised.
The Proteas quick finished with figures of 5/78 as England lost their last five wickets before midday to be dismissed for 323 - a lead of 10.
At lunch, South Africa were 16/0 and ahead by six.
Rabada gave South Africa the perfect start to the morning session when he had centurion Joe Root caught behind off an inside edge for 110.
Root immediately reviewed the decision, but the 'Ultra Edge' technology revealed that his loose drive had made contact.
Moeen Ali and Jonny Bairstow looked to recover, but just as Ali was getting going he was gone for 19 thanks to an outstanding catch from Dane Vilas.
Ali had inside edged a delivery from Chris Morris, and Vilas shifted his weight perfectly to dive to his right and take the catch.
Rabada had his fourth when he clean bowled Stuart Broad for 12 with a beautifully shaped full delivery, and the Proteas had the visitors 309/8.
Morne Morkel then had an appeal for caught behind turned down against Steve Finn, but the South African review showed glove contact and the Proteas needed just one more.
Fittingly, it went to Rabada, who had Bairstow out for 45 trying to pull a short delivery.
It was Rabada's first ever five wicket haul and Test cricket and, more importantly, it has left this Test match very much in the balance.