Stuart Broad enjoyed a fine, but it was Moeen Ali who joined exalted company against South Africa at Lord's as he completed an all-round double of 100 Test wickets and 2,000 runs.

England's new captain Joe Root fell 10 runs short of a double hundred - having resumed on 184 - and Moeen, who topped the 2,000 on his way to 87 out of 458 all out in the morning session, took his 99th wicket before tea and then his 100th straight afterwards.

Moeen and Nottinghamshire's Broad - who already had the same double in safe keeping - were both in the runs and wickets to help England retain the upper hand.

After Broad (57 not out) and Moeen bolstered England's total despite a fightback from Morne Morkel (four for 115) and Kagiso Rabada (three for 123), the off-spinner posted his century of wickets by first of all turning one sharply to trap Hashim Amla lbw and then having Dean Elgar (54) caught at short-leg.

Theunis de Bruyn, who fell just two short of a maiden Test 50 in his second match, and Temba Bavuma responded admirably with a stand of 99 in South Africa's 214 for five at stumps.

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.

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 out of 372 for seven.

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 Kuhn went for just a single on his belated Test debut when he edged Broad low to first slip.

Moeen did for Amla and Elgar, and then Broad made it two wickets each when he had JP Duminy lbw to one that moved back up the slope.

Meanwhile, South Africa fast bowler Kagiso Rabada will serve a one-match ban in next week's second Test at Trent Bridge after admitting swearing on day one against England at Lord's.

The offence took place as Ben Stokes walked off after being caught behind off Rabada.