Joe Root scored a century on day two of the third Test as England recovered from a tough start to close in on South Africa's first-innings total in Johannesburg.
South Africa started the day 267-7 with Chris Morris (28) and Kagiso Rabada (24) at the crease and the pair moved past 50 as a partnership before both fell in quick succession, with Jonny Bairstow taking his fifth and sixth catches of the innings to dismiss them off the bowling of Stuart Broad and James Anderson respectively.
Morne Morkel (12) was last to go as South Africa posted a first-innings total of 313. Ben Stokes took the final wicket and finished with figures of 3-53 from 18.1 overs.
South Africa got an early wicket when Alex Hales (1) nicked Rabada's delivery to AB de Villiers and captain Alastair Cook did not last much longer, clipping Hardus Viljoen's first-ever Test delivery through to keeper Dane Vilas down the leg side.
Cook has posted just 60 total runs from his five innings in the series so far.
Nick Compton and Root put on 52 for the third wicket before the former edged Rabada to Dean Elgar in the slips.
James Taylor added just seven to the scoreboard before he chipped Morne Morkel to Temba Bavuma, who took an acrobatic catch at short-leg to remove England's number five.
That brought Stokes to the crease and he quickly attacked the Proteas' bowlers before he was caught and bowled by Morkel after making 58 off 54 balls.
Stokes and Root made a quickfire 111 together and not long after the latter's dismissal, Root had his ninth Test century with a cover drive to the boundary.
Bad light then stopped play on day two with England 238-5 and 75 runs behind the hosts' first-innings total. Root will resume on 106 not out, with Bairstow (4*) his sixth-wicket partner at the other end.