Debutant James Kirtley was the inspiration as England took control of the thirdtest today by reducing South Africa to 167 for five at lunch on day three.
The lively fast-medium bowler claimed two wickets in two balls in the day's first over to leave the South Africans, who lead the five-match series 1-0, reeling at 88 for four.
Neil McKenzie led the tourists' resistance with an unbeaten 39 containing several impressive drives through the off side. Mark Boucher was 11 not out at the interval.
Kirtley forced Jacques Rudolph, on 15, to edge a catch to wicket-keeper Alec Stewart with his fifth delivery and trapped Boeta Dippenaar lbw with a ball that kept low, though television replays showed it may have missed leg stump.
McKenzie averted the hat-trick but Kirtley should have dismissed Kallis in his next over, Stewart failing to grasp the ball one-handed as he dived to his right.
McKenzie and Kallis survived a few scares on a pitch that continued to assist the bowlers as they added 44 for the fifth wicket, a partnership that ended when James Anderson bowled Kallis for 27.
Kallis raised his bat to leave the ball and watched helplessly as it cut back and kept low before cannoning into his off stump.
Steve Harmison caused problems for McKenzie and Boucher with his steep bounce, but the pair dug in to take the tourists to within 79 runs of avoiding the follow-on.
Kirtley's figures were two for 51 from 18 overs, but Flintoff was the most economical England seamer as he conceded only 33 from 18 overs as well as claiming the vital wicket of South Africa captain Graeme Smith on Friday.
England made 445 in their first innings, Nasser Hussain contributing 116, Mark Butcher 106, Stewart 72 and Ed Smith 64.