Quinton de Kock hit an unbeaten maiden century to take South Africa to a first innings total of 475 on the second day of the fourth and final Test against England at SuperSport Park on Saturday.
England were 29 for one wicket at tea, losing Alex Hales, who sliced a drive against Kagiso Rabada to Dane Piedt at point after making 15.
The left-handed De Kock made 129 not out off 128 balls as he and the tailenders frustrated the England bowlers on a hot, humid day.
Kyle Abbott helped De Kock add 50 for the eighth wicket and Piedt shared a ninth wicket stand of 82 with the South African wicketkeeper.
De Kock was the third centurion in the innings and joined debutant Stephen Cook in making his first Test hundred.
England once again paid the price for dropped catches.
After both Cook and Hashim Amla were dropped on the way to centuries on the first day, De Kock was put down by Ben Stokes at gully off James Anderson when he was on 28, having added only three runs to his overnight score.
De Kock was dropped again on 90 when he drove Moeen Ali hard to England captain Alastair Cook at short cover.
Despite the blemishes it was an impressive innings by De Kock, who hit 17 fours and two sixes. He was particularly severe on Ali, hitting 45 runs off the 28 balls he faced from the off-spinner, including both his sixes and six fours.
It was a disappointing effort by England who would have hoped to wrap up the innings quickly after taking two wickets early in the day for the addition of only seven runs to the overnight total of 329 for five.
Stuart Broad had Temba Bavuma caught behind for 35 in the fourth over of the day, ending a sixth wicket partnership of 62 with De Kock. In the next over James Anderson trapped Kagiso Rabada leg before wicket without scoring.
Stokes was England’s most successful bowler, taking four for 86.