England took three vital South African wickets before the close of play on day three of the third Test at Lord's.
Alviro Petersen, Graeme Smith and Jacques Kallis were all dismissed as the tourists ended the day on 145-3, giving themselves a second-innings lead of 139.
The hosts had earlier posted a first-innings score of 315 all out to give themselves a nine-run lead, with Jonny Bairstow falling five runs short of his maiden Test century when he was bowled by Morne Morkel.
South Africa's second innings got off to a bad start when Smith was bowled lbw by Graeme Swann for 23 before Petersen went the same way as his captain off the bowling of Stuart Broad for 24.
Kallis was then another lbw victim following a review from the bowling of Steve Finn for 31.
However, Hashim Amla helped guide the Proteas forward thanks to his unbeaten knock of 57.