England's grasp on the second Test slipped as South Africa captain Hashim Amla batted through day two, and was dropped twice, in Cape Town.
Amla was put down by James Anderson at slip on 76 and by Nick Compton on 120 and ended up 157 not out as the tourists managed just one wicket in 87 overs of play.
South Africa's 353 for three still represents a 276-run deficit, but England need the game to progress drastically in the last two days to press for a 2-0 series lead.
Amla had come into the game facing questions about his captaincy and concerns over his form but set about answering at least the latter with a first hundred since December 2014.
After the mighty hitting of Ben Stokes lit up day two, this was a return to a more prosaic brand of Test cricket.
While Stokes and Jonny Bairstow thrashed a record 196 before lunch on Sunday, South Africa scored 212 in the entire day.
Amla, those two false shots aside, batted belligerently, economically and never attempted to overplay his hand scoring 94 in six-and-a-half hours.
Good balls were blocked or avoided and when he looked to score he did so when the percentages were in his favour.
He may have endured a lean 2015 but his is a method that works - this was the 32-year-old's 24th Test hundred and seventh score of 150 or more.
Play resumed on with the hosts 488 behind on 141 for two and needing to keep Amla and AB de Villiers in tandem.
Where Stokes had teed off from ball one, South Africa were more than content to make a modest 58 in the first session.
Both batsmen had their moments along the way, De Villiers during a searching opening burst from Steven Finn and Amla when he was dropped by Anderson.
Of all people it was Joe Root, England's part-time off-spinner, who drew the error, tempting a big drive with his first ball only for Anderson to parry the chance.
The ball was moving briskly and perhaps slightly higher than Anderson would like - but for a regular slip it was a chance that needed taking.
Finn had earlier tried manfully to force the issue on a pitch offering no sideways assistance, twice seeing De Villiers edge just in front of catchers and a mistimed pull land just short of midwicket.
There were reminders either side of the break about the calibre of the batsmen defying England though.
When De Villiers brought up his 50 it also signalled his 8,000th Test run, with Amla nudging past 7,000 at the start of the afternoon.
Amla had started the afternoon on 91 and quickly advanced to three figures in a loose first over from Moeen.
The applause that greeted the end of his lean streak was long and heartfelt.
England were relying on the new ball but when it arrived there was still no workable swing.
Stokes had a brief moment of success when Aleem Dar adjudged De Villiers lbw for 85 but that dissipated as soon as DRS showed a thin edge.
Four balls later there was something more tangible, Amla somehow tempted out of his methodical accumulation by Finn and into an airy cut.
It flew uppishly to Compton at point but never looked like sticking and crashed to the turf.
Compton looked baffled, Finn looked aghast and a positive result looked further away than ever.
Finn would have been forgiven for thinking it was simply not his day but the 6ft 7in seamer continued probing away until he picked up the well-deserved wicket of De Villiers (88).
Anderson needed two attempts to bring the catch under control, and finally end the 183-run partnership, but this time the ball did stick.
If 268 for three was hardly encouraging, it at least offered England a new man at the crease.
Faf du Plessis duly nicked his first ball from Finn but once it skipped low through the cordon for four he began carving out what would become an unbroken stand of 85 with his captain.
At one stage Alastair Cook even offered Alex Hales a first spell in international cricket.
He proved no more successful than the regulars in claiming a second breakthrough of the day, with the prospect of a draw becoming increasingly likely by stumps.