Stuart Broad took 3-16 to give England the edge on the second day of the first Test against South Africa.
Bowling with superb skill and control, Broad removed Stiaan van Zyl, Hashim Amla and AB de Villiers as South Africa struggled to 137-4, trailing England by 166.
Earlier, England stuttered from 179-4 overnight to 303 all out.
Nick Compton fell 15 runs short of a comeback century as Morne Morkel took four wickets in the morning session.
England are in a strong position to push for only a second win in 16 away Tests, although a battling unbeaten 67 from opener Dean Elgar will give South Africa hope of achieving parity in the first innings.