Ollie Pope hit his first Test match century to put England in a strong position in the third Test against South Africa.
The Surrey man finished unbeaten on 135 as the tourists declared on 499 for nine on the second day.
Dom Bess then took two wickets in the final session to pile on the pressure for the hosts in Port Elizabeth.
Play was delayed by 45 minutes in getting underway at the start of the day but England were quick to seize the initiative.
Pope got things moving by cutting Anrich Nortje for four in the third over of the day and both batsmen were soon celebrating half-centuries.
Ben Stokes got there first, with a pair of pulled boundaries off Kagiso Rabada, standing tall and hitting at the top of the bounce. Pope was close behind, finding the gap at third man to bring up the hundred stand, then pumping Vernon Philander past point for his third Test fifty.
Faf du Plessis sent for the spin of Keshav Maharaj to slow things down but the left-armer found Stokes in unforgiving mood, taking 12 off his first over including a slog-sweep for six on to the grass bank.
The pain kept coming, Pope with a glorious square drive off Nortje and Stokes dishing out more harsh treatment in Maharaj’s second visit. He bided his time for four balls and then picked his moment, hammering an enormous six over midwicket, clearing not just the boundary but the perimeter fence too.
After an hour’s play England had added 72 in 13 overs, cashing on handsomely on their overnight position.
Having brought up their hundred stand in 185 deliveries, the fifth-wicket pair scored their next 50 at better than a run-per-ball.
The checkpoints kept coming as South African heads dropped, first England’s 300 and then Stokes’ 4000th Test run, courtesy of another muscular hit off Maharaj.
Stokes moved to 99 with a chop for two to third man and then stroked Dane Paterson for a single to get over the line, celebrating by removing his glove and making a hand gesture in recognition to his father Ged, who remains hospitalised in Johannesburg.
Stokes started where he had left off in the afternoon session, drilling Paterson’s second ball for four straight down the ground.
His eagerness to move the score along showed again when he lifted Maharaj down the ground – offering Anrich Nortje a half-chance that he failed to pick up in time at long-on.
That could have proved a costly miss but Stokes added only four more before slashing Paterson to backward point for 120.
The match-changing partnership had ended at 203, leaving Pope as the senior man on 79 and Jos Buttler the new arrival at 351 for five.
Buttler was offered a few choice words on his walk to the crease – payback for his expletive-laden outburst in Vernon Philander’s direction in the previous match.
South Africa will have had plenty more to say to him but he lasted only 15 balls before going on the back foot to Maharaj and feeding a gentle return catch.
At 354 for six, the momentum was starting to slip just a little for the tourists.
Buttler’s dismissal brought Sam Curran to the crease and the all-rounder grabbed his chance to take advantage of a tiring attack deep into their fifth session in the field.
Darren Gough, Mark Butcher and co on how to listen to talkSPORT 2’s England cricket coverage
He smashed a series of boundaries to push the score past 400, the first time England had reached that mark in the first innings of a match since December 2017.
Curran holed out having scored 44 in just 50 balls, leaving England 413 for seven and Pope still in place on 94.
Pope reached his maiden century in 190 balls and with his 14th boundary, Nortje clipped crisply through mid-on.
The 22-year-old made the most of the moment, waving to the pavilion and staring at the sky before embracing Dom Bess.
Bess edged to silly point in the last over before tea, leaving England 426 for eight with Pope on 106 not out.
England came out to entertain after the tea break, Pope unveiling a handful of improvised strokes and Mark Wood playing the role of an unlikely destroyer.
The number 10 clobbered three mighty sixes and a four off Maharaj before seemingly drawing the innings to an end on 467 when he top-edged Rabada on 25.
He raced off, expecting the declaration, but a no-ball call reprieved him and Joe Root signalled for the hitting to continue.
Pope was having fun – ramping over the keeper, stepping away and reversing the bat – as he finished unbeaten on 135. Wood, incredibly, was in sight of England’s fastest Test 50 when he fell a few yards short of his sixth maximum and departed for 42 in 23 balls.
Root duly declared on 499 for nine.
South Africa made good early progress with the bat, reaching 50 before Pieter Malan was caught and bowled by Bess to depart for 18.
Dean Elgar, who hit 32 off 40 balls before Malan lost his wicket, was joined in the middle by Zubayr Hamza.
After Wood’s pace had caused South Africa a few problems, Pope capped an outstanding day when he caught Hamza (10) off the bowling of Bess.
South Africa were on 60 for two – trailing by 439 runs – when rain stopped play and stumps were called.
Listen to every ball of England’s tour of South Africa exclusively live on talkSPORT 2