A brilliant century by captain Kevin Pietersen helped England to a 122 run first innings lead.
South Africa made an early break through in the first over of the day when Makhaya Ntini picked up the wicket of Ian Bell, but Alastair Cook and Pietersen put England back on track with a 60 run partnership before Cook fell for 39.
Paul Collingwood then joined Pietersen and the pair formed a good partnership, putting on 108 before Ntini struck again with the crucial wicket of South African born English skipper.
The Proteas came back strong after tea and looked set to finish off the tail before Steve Harmison fought superbly for his 49 not out, frustrating the South African attack. Ntini was the pick of the bowlers finishing with figures of 5-94.
James Anderson got the crucial wicket of Graeme Smith for a duck in his first over to add to the Proteas woes.
South Africa first innings – 194 all out.
Graeme Smith 46, AB de Villiers 39, James Anderson 3-42, Steve Harmison 2-49.
England first innings – 316 all out.
Kevin Pietersen 100, Paul Collingwood 61, Makhaya Ntini 5-94, Jacques Kallis 3-51.
South Africa second innings – 37-1.
Niel McKenzie 9*, Hashim Amla 26*, James Anderson 1-11.
South Africa trail by 85 runs.
For a full scorecard click here.