Part-time spinner Virender Sehwag grabbed two vital wickets in three overs to boost India's hopes of winning the third and final Test against South Africa here on Sunday.
The off-spinner removed well-set skipper Graeme Smith and Jacques Kallis in the afternoon session, with the visitors reaching 88-4 in their second innings at tea on the third day after conceding a 60-run lead.
Left-handed Smith (35) and Kallis (15) looked like steadying the innings on a pitch of uneven bounce after the fall of two early wickets, but Sehwag swung the match India's way.
Sehwag had Kallis caught by Wasim Jaffer at short-leg in his opening over and then bowled Smith to virtually shatter South Africa's hopes of setting a stiff target for India.
Ashwell Prince was unbeaten on eight and AB de Villiers was not out six at the break.
Fast bowler Shanthakumaran Sreesanth and off-spinner Harbhajan Singh were the other wicket-takers.
South Africa lead 1-0 following their win by an innings and 90 runs in the second Test in Ahmedabad. The opening match ended in a draw in Chennai.
The visitors found runs hard to come by against India's pace-spin combination, scoring 61 in the two-hour afternoon session.
Sreesanth (29) earlier frustrated South Africa with a 46-run stand for the last wicket with Ishant Sharma (14 not out) before India were bowled out for 325 in their first innings in reply to the visitors' 265.
The last-wicket pair batted more than an hour in the morning, adding 37 to their team's overnight total of 288-9.
South Africa needed the last wicket early to restrict India's lead, but nothing went right for them as edges eluded fielders and a catch was held off a no-ball.
Sharma twice edged left-arm spinner Paul Harris past the slips for fours and then Smith reacted late to a Sreesanth edge at first slip off fast bowler Makhaya Ntini.
When Smith caught Sreesanth at mid-off off paceman Morne Morkel, it was declared a no-ball, much to the disappointment of the visitors.
South Africa eventually heaved a sigh of relief when Prince caught Sreesanth in the covers off Harris.
India sprang a surprise when stand-in captain Mahendra Singh Dhoni opened the attack with Harbhajan, with four men close to the bat.
The move paid off as the spinner had Hashim Amla (0) caught by Jaffer at short-leg on the stroke of lunch.
Sreesanth took the first wicket when he trapped Neil McKenzie (14) leg-before with a delivery that kept low.