Morne Morkel checked England's progress with two wickets as he led a South Africa fightback in the fourth Test at Old Trafford on Sunday.
England were 53 for two in their second innings, a lead of 189 runs, at lunch on the third day.
Keaton Jennings, dropped on nought, was 17 not out and England captain Joe Root 13 not out after Morkel had removed Alastair Cook and Tom Westley on his way to figures of two wickets for 22 runs in eight overs.
England were bidding for a first home Test series win over South Africa since 1998 at 2-1 up with one to finish in this four-match contest.
Root was also in search of a victory in his first Test series as England skipper.
South Africa-born Jennings came into this innings under huge pressure for his place after averaging a mere 16.40 in Test cricket since a hundred on debut against India at Mumbai in December.
There had been widespread speculation that another low score in this innings would see the opener dropped for the first of England's upcoming three-Test home series against the West Indies, which precedes an Ashes tour of Australia.
And the 25-year-old Durham left-hander, sometimes guilty of defending with an open bat face, was almost out for a duck when he edged a good length ball from Kagiso Rabada that cut away off the pitch to third slip where a diving Dean Elgar could not cling onto the chance despite getting both hands to the ball.
Instead it was Cook, England's all-time leading Test run-scorer, who fell first.
The former captain had made 10 when, driving away from his body, he edged fast bowler Morkel to Theunis de Bruyn in the gully.
Cook's Essex team-mate Westley then managed just nine in his fourth innings at this level before, playing slightly across the line to Morkel, he too was caught in the gully, this time by substitute Aiden Markram.
The towering Morkel, who'd so often bowled well this series without fair reward, had taken two wickets for eight runs in 18 balls to leave England 30 for two — a lead of 166.
South Africa then wasted a review after Jennings, on eight, well forward and outside off stump, padded up to left- arm spinner Keshav Maharaj.
Earlier, James Anderson — England's all-time leading wicket-taker — was denied a maiden five-wicket Test haul on his Old Trafford home ground after the Proteas resumed on 220 for nine.
Stuart Broad had No 11 Duanne Olivier caught off a top-edged hook by Jonny Bairstow, who on Saturday had made a valuable 99 and claimed his 100th dismissal as a Test wicket-keeper.
One consolation for Anderson, who'd struck four times from the newly-named James Anderson End on Saturday, was that an innings return of four for 38 in 17 overs was his best in seven Tests on his Lancashire home ground, surpassing his four for 118 against New Zealand in 2008.