A fiery spell from captain Ben Stokes dragged England back into the match but South Africa remained the happier side as it reached 289 for seven at the close of play on the second day of the first Test at Lord’s on Thursday.
Stokes removed Sarel Erwee for 73 and the dangerous Rassie van der Dussen (19) just as the game was drifting away from the home side, but South Africa leads by 124 runs after taking the attack to the wilting home bowlers late in the day.
Tall all-rounder Marco Jansen (41 not out) was promoted to number six in the batting order and did not disappoint, putting on 72 for the seventh wicket with Keshav Maharaj (41) to re-establish the visitors’ dominant position.
Jansen will resume on the third day with Kagiso Rabada (3 not out) and England three overs away from the new ball.
South Africa began well in its reply to the home team's modest score of 165 as it put on 85 for the first wicket before skipper Dean Elgar was bowled by James Anderson for 47 when the ball ricocheted off his arm and on to the stumps.
Keegan Petersen (24) and Aiden Markram (16) both lost their wickets before the tourists passed England’s total, but Stokes (3-48) soon struck a double blow.
He removed Erwee with a brute of a bouncer the left-hander could only fend off, the ball looping to wicketkeeper Ben Foakes, before trapping Van der Dussen lbw.
Stuart Broad became the second bowler after Anderson (117) to take 100 wickets at Lord’s when he had Kyle Verreynne (11) caught by Foakes.
England was bowled out in the morning session, having resumed on 116 for six.
Fast bowler Rabada took 5-52 and was the pick of a four-pronged seam attack who all troubled the home batters with their pace and aggression.
Rabada removed top-scorer Ollie Pope (73) early on as the latter dragged the ball onto his leg stump having added 12 to his overnight score, before Broad (15) was caught by Elgar at point.
Rabada picked up his fifth wicket when he trapped Anderson (0) lbw.
England has won only two of its last 25 Tests in which it has scored under 200 when batting first.