Dom Sibley made an unbeaten 85 as England took total control of the second Test against South Africa on day three in Cape Town.
The opener played a fine watchful knock for his maiden Test fifty to help the tourists grind down the Proteas and close on 218-4, a lead of 264 runs.
England captain Joe Root hit a fluent 61 before he and nightwatchman Dom Bess fell late on at Newlands.
James Anderson (5-40) claimed two quick wickets to dismiss the hosts for 223.
It gave England a first-innings lead of 46 that they turned into a match-winning position with a sensible batting display.
England now have two days to force victory and level the four-Test series at 1-1.
Patient Sibley shows the way
Sibley had shown glimpses of ability in his five previous Test innings but only had a top score of 29 and needed to secure his long-term spot.
While fellow opener Zak Crawley played more positively, but fell for 25 from a loose drive at Kagiso Rabada, Sibley left well outside off stump and waited for South Africa to stray on to his pads.
The Warwickshire batsman then whipped forcefully through mid-wicket and calmly clipped off his hips, but proved he has more range as he went on, playing a few lovely cover and square drives.
Other prospective solutions at opener have played impressive innings and faded but the patient manner of Sibley's knock is encouraging, not least with Rory Burns now expected to miss March's tour of Sri Lanka with the ankle injury he sustained playing football.
Although Joe Denly fell into the trap, hooking Anrich Nortje to fine leg for 33, the second-wicket stand of 73 gave Root a rare platform to come in and busily up the scoring rate.
He scored all round the wicket to help England inflict the kind of demoralising day on a fielding side they have themselves experienced often recently and appeared set to push on for a century on day four, only to nick one as Dwaine Pretorius found some late movement.
Bess made his second duck of the match, gloving Nortje behind from what proved to be the final ball of the day, but protected Ben Stokes from having to bat and England are well-placed to declare whenever they want on day four.
Evergreen Anderson back to best
Following Anderson's below-par performance in defeat at Centurion, his first Test back after a long-standing calf injury, Root said one of Anderson or Stuart Broad could be dropped for this match - before Jofra Archer was ruled out injured.
Both the retained seamers impressed on day two and Anderson was back to his ruthless best on the third morning to ensure South Africa's tail barely added to the hosts' overnight total.
He removed Rabada caught behind for a duck with the first ball of the day before Nortje fell to another fine catch by Stokes at second slip - the first time an England non-keeping fielder has taken five catches in a Test innings.
Anderson, 37, now has 28 five-wickets hauls in Tests and has taken 102 wickets in 26 matches at a staggering average of 20.67 since his 35th birthday.
Any significant injury, like the one that kept him out of the majority of the summer's Ashes series, will invite questions about the future of England's all-time highest Test wicket-taker.
But if he can return at this level and remain such a threat, England may enjoy his talents for a while yet.
'A terrific day for England' - what they said
England's James Anderson on Sky Sports: "We've had a really good day. We wanted to be ruthless with the ball and we were.
"I have missed Test cricket. It gives you a buzz when you get out there. The biggest thing for me at Centurion was getting through it. I was desperate to prove my place in the team. I was a bit rusty, but I feel up to speed in this game.
"The bowling group we have keeps you on your toes. It makes for healthy competition and a good bowling attack."
BBC cricket correspondent Jonathan Agnew on The Cricket Social: "A terrific day for England. It was one of those days where they just had to do it. Sibley has also come out and done what he had to do.
"They should get another 100 runs and Sibley should get his hundred. England should not bat on past lunch.
"Led by that bowling performance by James Anderson and some terrific catching by Stokes, they have got themselves back in this game - and should go on to win it."