Cape Town - Harbhajan Singh struck twice in his first two overs of the day as South Africa were plunged into deep trouble on the fourth day of the third and final Test against India at Newlands on Wednesday.
Zaheer Khan chipped in with a wicket as South Africa struggled to 121 for five at lunch, a lead of 119.
Jacques Kallis, batting in pain because of a bruised rib and a side strain, held the key to South Africa's hopes of posting a challenging target for India. He was on 33 not out.
Off-spinner Harbhajan, who exposed the first cracks in the South African batting order when he took two wickets shortly before the close of play on Tuesday, took just five balls to strike on Wednesday.
Alviro Petersen failed to add to his overnight score of 22 before going back on his stumps to be leg before wicket to Harbhajan.
In Harbhajan's next over, Hashim Amla was bowled for two when he attempted a sweep and the ball looped off his pad and rolled into the stumps.
Kallis and AB de Villiers added 34 with cautious batting before De Villiers tried to withdraw his bat from a lifting delivery by Khan and the ball crashed into his stumps off a bottom edge.
Kallis, who was joined by Ashwell Prince, winced in pain several times after being injured in the first innings, and needed treatment shortly before lunch when he twisted to get his bat out of the way of a turning delivery from Harbhajan.
Harbhajan, who bowled unchanged throughout a morning during which South Africa added 69 runs for the loss of three wickets, had figures of four for 41 from 17 overs.
Graeme Smith (captain), Alviro Petersen, Hashim
Amla, Jacques Kallis, AB de Villiers, Ashwell Prince, Mark Boucher (wk),
Lonwabo Tsotsobe, Dale Steyn, Paul Harris, Morne Morkel
Gautam Gambhir, Virender Sehwag, Rahul Dravid, Sachin Tendulkar, Vangipurappu Laxman, Cheteshwar Pujara, Mahendra Singh Dhoni (captain, wk), Harbhajan Singh, Zaheer Khan, Ishant Sharma, Shanthakumaran Sreesanth