Joe Root fell 10 runs short of his double century before Stuart Broad and Moeen Ali took over with bat and ball to help England retain the upper hand against South Africa at Lord’s.
Root, who marked his first day as Test captain with a century and resumed on 184, could only add six more runs before Morne Morkel (four for 115) had him caught behind.
The tall fast bowler then doubled up with the wicket of Liam Dawson, lbw for a second-ball duck in just his second Test, but Moeen (87) and Broad (57no) nonetheless helped England turn their overnight 357 for five into 458 all out before lunch on day two of this four-match series.
Broad and Moeen then took a wicket each as South Africa reached a teatime 96 for two, with their stand-in captain Dean Elgar (54no) still on course to follow Root’s lead to three figures.
Meanwhile, South Africa fast bowler Kagiso Rabada will miss the second Test after collecting a one-match ban for swearing at Ben Stokes following his dismissal of the allrounder on Thursday.
Broad’s crowd-pleasing turn was a 45-ball 50 which he completed with successive pulled sixes off Morkel to add to his seven fours as he and James Anderson compounded South Africa’s frustrations in an entertaining 10th-wicket stand of 45.
Root had been hoping to become the first batsman to record a second Lord’s double-hundred – adding to his unbeaten 200 exactly against Sri Lanka here three years ago.
Root’s stand with Moeen had ended on 177 but England were in an advantageous position.
South Africa missed a trick when Vernon Philander’s wish to review an lbw appeal against Broad fell on deaf ears yet would have been successful, with England’s number nine on just four. A spate of boundaries followed from the two left-handers, with Moeen the most convincing.
Little went right for the tourists at Lord’s until Kagiso Rabada (three for 123) bowled Moeen through the gate driving and then won the fifth lbw verdict of the innings with one that kept low to pin Mark Wood on the back foot two balls later.
Broad’s fun was only just beginning, though, and Anderson joined in with a pull for six of his own off Rabada before the number 11 was last out edging an attempted drive behind off Morkel.
Elgar and Heino Kuhn negotiated four overs before lunch but Kuhn was gone when he went for just a single in the early afternoon on his belated Test debut when he edged Broad low to first slip.
Elgar was unperturbed, refusing to let Dawson settle when Root first turned to spin, and he reached his half-century from 90 balls.