Alastair Cook passed his first 50 of the series as England ended day two of the fourth Test with South Africa on 138-2.
The captain hit 67* during a productive third-wicket stand with Joe Root (31*) to reduce the deficit to 337 runs.
Earlier, the home side were bowled out for 445 after Quinton de Kock earned his maiden Test century in style, taking an unbeaten 129 from 128 balls, including 17 fours and two sixes.
England's top-order fell quickly, as Alex Hales went for just 15 from 14 balls, taking his total to 135 runs across the seven innings of the series. Nick Compton was next off the field, falling lbw from a low delivery after 19 from 52 balls.
Cook's stand at the crease leaves him just 50 runs short of becoming the first Englishman to notch up 10,000 Test runs.