Opener Dominic Sibley has struck a career-best unbeaten 85, as England seized control of the second test against South Africa.
The tourists reached 218/4 at stumps on Monday morning (NZ time) at Newlands, a lead of 264 that already looks substantial on a wearing wicket and with two full days remaining, providing an excellent chance to level the four-match series.
Sibley put on 116 with captain Joe Root (61) for the third wicket, before the latter steered Dwaine Pretorius to Faf du Plessis at slip late on.
Nightwatchman Dominic Bess gloved a leg-side delivery from Anrich Nortje (2/36) to end the day.
Sibley and Ben Stokes will seek to take the game further away from South Africa on day four, with England's travelling fans in full voice in Cape Town.
His previous best in tests was 29, but he showed impressive patience to see off the new ball and then accumulate his runs by waiting for the right opportunities to score.
He took 140 balls to reach his 50 and batted for almost the full day, which allowed Root to score more freely at the other end.
South Africa's other two wickets in England's second innings were that of Zak Crawley (25), who edged Kagiso Rabada to wicketkeeper Quinton de Kock, and Joe Denly (31), caught at long leg, while attempting a hook off Nortje.
The visiting side won the war of attrition with risk-free, smart cricket.
South Africa's bowling attack was unable to find the movement and pace off the wicket that England enjoyed, as they bowled them out for 223 early on the third day.
Seamer James Anderson took five wickets and Ben Stokes an England-record five catches, as they made short work of wrapping up the South African first innings.
Anderson (5/40) knocked over Rabada (0) with the first ball of the day and completed his England record 28th test five-wicket haul, when Nortje (4) edged to Stokes at slip for the allrounder to take his fifth catch of the innings.
It is the joint most by any player in test cricket and the 12th time a fielder had taken five catches in an innings, but a first for England.
South Africa won the first test in Pretoria by 107 runs.