Alviro Petersen punished England for dropping him early on by scoring his fourth Test century as South Africa reached 262 for five at the close of the first day of the second Test on Thursday.
Petersen was 124 not out at stumps, after England won the toss, and Jacques Rudolph was on one following a seesaw day that began with South Africa scoring freely in the sun before England fought back after lunch in overcast conditions.
Petersen was given out lbw on 119 to Steven Finn but successfully reviewed umpire Steve Davis's decision as replays showed the ball would have bounced over the stumps.
He had earlier reached a well-crafted century with his 11th boundary, a pull off Stuart Broad, on a day which saw a Finn wicket cancelled out by a dead ball call from the umpire.
Finn's long-standing problem of clipping the stumps at the non-striker's end with his knee in his follow-through cost him.
He did it three times in the morning and on the fourth occasion, when Graeme Smith edged to Andrew Strauss at slip while on six, the ball was ruled out.
Match referee Jeff Crowe said later that the batsmen had complained that Finn's actions were a distraction.
The rules stipulate that a dead ball can be called if a batsman is distracted by noise or movement while waiting to receive the ball.
""It was frustrating for us because the umpire didn't warn us he was going to do it but the batsmen said it was distracting and they had been in the umpire's ear," England's James Anderson told reporters.
"It's strange that no batsmen have complained about it before and he has done it 50 times this summer. If they thought it was distracting and they told the umpire, then fair enough."
"He was told to be careful because it was distracting the batsmen, at no stage was he told it would be called dead ball."
England's fight-back after lunch saw South Africa slump from 120 for none to 157 for three.
Smith scored 52 before he clipped Tim Bresnan to leg gully Ian Bell while Hashim Amla followed his national record 311 not out at The Oval with an innings of nine that was ended by a run out.
Petersen drove Stuart Broad through cover, ran two, hesitantly dashed for a third and left Amla well short of his ground.
Then Jacques Kallis tried to chop a James Anderson delivery through point but his bottom edge instead was well caught low down by Alastair Cook at second slip and he went for 19.
Cook had dropped Petersen earlier in the day, also off Anderson's bowling, when the opener was on 25. It was a straightforward chance and exposed Cook's inexperience in the position normally taken by Swann.
Anderson dropped de Villiers late in the day when an edge off Broad in the first over with the second new ball was put down at second slip. The ball landed in his palm as he dived low to his left, but bobbled out again.
Broad, though, caused de Villiers to play a lacklustre defensive shot and chop on to his stumps in the next over for 47. Finn then bowled night-watchman Dale Steyn for a duck.
Play finished at 1930 local time due to an afternoon rain storm that caused a 75 minute delay.
South Africa, who won the first Test by a crushing innings and 12 run margin, will leapfrog England at the top of the world rankings with a series victory.