Harbhajan Singh and Zaheer Khan destroyed South Africa's batting line-up to give India the upperhand at the end of day two in the second Test, at Kingsmead, Durban, on Monday.
At stumps, India were 92 for 4 in 30.5 overs in their second innings, with VVS Laxman unbeaten on 23 (59 balls) and Cheteshwar Pujara on 10 (51 balls), their overall lead 166 runs.
It was a topsy-turvy day at Kingsmead, as 18 wickets fell and India ended the day with a slight advantage.
Harbhajan took four wickets while Zaheer claimed three as South Africa were dismissed for a paltry 131 in 37.2 overs, after India's first innings folded for 205 in 65.1 overs earlier in the day.
Zaheer showed the way with a remarkable spell of three for 29, while Harbhajan ran through the middle and lower order for wonderful figures of four for 10 in 7.2 overs. India's fielding also rose to the occasion, some unbelievable catches being taken.
Hashim Amla was the top-scorer for the hosts with 33 and Alviro Petersen made 24; no other batsman could cross the 20-run mark.
It was a magnificent fightback from India after pacer Dale Steyn had wrecked the Indian innings with a six-wicket haul. Steyn, the world's number one bowler in Tests, underlined his class with magnificent figures of six for 50 in 19 overs, troubling the batsmen with his pace and movement.
The visitors continued to struggle with the bat as they lasted just 55 deliveries on day two, losing four wickets for 22 runs, after resuming the day on 183 for six. The Indian top order was guilty of not carrying on after getting good starts, many of the batsmen giving their wickets away with reckless shots.
Morning session: (96 runs, 25.5 overs, 8 wickets)
South Africa went on the defensive right from the start, having a few fielders on the boundary line on either side of the wicket.
Harbhajan (16) enjoyed a lifeline when his edge off Morkel was put down by Kallis diving to his right in the second over of the day.
Steyn was unlucky not to have picked an early wicket as he beat the bat consistently but somehow could not find the edge. But his persistence was finally rewarded when he got Harbhajan (21) to edge an outgoing delivery that was brilliantly caught by AB de Villiers, diving full length to his right.
Morkel claimed his first wicket when Zaheer Khan got a thin edge as he tried to play the backfoot defence and was caught behind for a duck.
Dhoni tried to counter-attack and hit Steyn for a four, followed by a huge six over mid-off. But it was the South African pacer who had the last laugh with the wicket of the Indian captain.
Dhoni fell in the trap that was to perfection, as he holed out to the fielder on the cover boundary after scoring 35 from 57 balls.
Two deliveries later, S Sreesanth also obliged the hosts when he tried a wild swing against Morkel but ended up holing a simple catch behind the wickets.
India were dismissed for a paltry 205 in 65.1 overs in their first innings, adding just 22 runs in 9.1 overs on the second morning for the loss of four wickets.
Steyn's pace was too hot handle as he took six for 50 in 19 overs, making the most of bowling on a damp day one wicket.
(South Africa 1st innings)
Zaheer, who sat out of the first Test because of injury, showed how much he was missed in Centurion. Not only did the experienced pacer claim both the wickets to fall early but also caused lot of problems for the South African batsmen.
His threat was instant, as he got Alviro Petersen to edge the second delivery of the innings that flew just wide of a diving Murali Vijay at third slip.
Graeme Smith got his first four when he clipped a full delivery from Sreesanth through midwicket in the second over.
Sreesanth disappointed as he struggled to control his line and, quite often, drifted on the pads. He was hit for a boundary each by the two openers and on both occasions he was through the leg side.
Zaheer then gave India the much-needed lift when he claimed the wicket of Smith for nine. The left-hander was beaten all ends up by a perfect outswinger that came in slightly before leaving the batsman and taking the edge to wicketkeeper Dhoni.
The pacer continued his good run against Smith, dismissing him for the fifth time in Tests.
Hashim Amla looked in good touch as he got going with successive boundaries through the covers off Sreesanth, who clearly was wasting the new ball.
Zaheer nearly got the big wicket of the in-form Amla with another good outswinger, but Pakistan umpire Asad Rauf rightly turned down the huge appeal for caught behind.
Sreesanth bowled a poor first spell, giving away 30 runs in four overs, before making way for Ishant Sharma.
Zaheer then gave India another big boost with the wicket of Petersen. The right-hander, who scored 24 from 39 balls, was bowled down the leg side off an inside edge.
While Zaheer tested the batsmen with his movement and pace, the two youngsters -- Ishant and Sreesanth -- failed to take a cue and hardly posted a threat.
India, though, managed to end the session on a high with two quick wickets.
First, Jacques Kallis (10) was unfortunately run-out at the non-striker's end when the bowler (Ishant) deflected a straight drive from Amla on to the stumps.
Sreesanth then made up for his horrible spell with the new ball with a wicket off the final delivery of the session. He had AB de Villiers caught behind for a duck by wicketkeeper Dhoni as he finally got one to pitch on the perfect line and length.
The match was suddenly thrown wide open with South Africa reduced to 74 for four in 16.4 overs, 131 runs behind India's total.
Amla continued to be a thorn in the flesh for the Indians as he stroked his way to 24 from 33 balls, inclusive of five fours.
It was exactly the session India needed to bounce back in the series. Zaheer was responsible for the comeback, claiming two for 20 in seven overs in a probing spell with the new ball.
Post-lunch session: (57 runs, 20.2 overs, 6 wickets)
Surprisingly, India did not employ Zaheer straight after the break, starting instead with Ishant and Sreesanth. That saw the Proteas make steady progress.
Prince struggled a bit before he pulled a short delivery from Sreesanth through midwicket for his first boundary and the first of the session, in the 21st over.
With no success coming India's way, it was not long before Dhoni brought on his two best bowlers, Zaheer and Harbhajan. And the duo shred the South African batting to pieces, taking wickets at regular intervals.
Harbhajan got his first wicket of the innings when he dismissed the in-form Amla. The right-hander, who tormented the Indians a lot recently, went for the sweep but missed the quicker delivery that skidded on straight and was trapped leg before wicket for 33.
After four successive centuries, including a double ton, Amla had finally fallen below the fifty-run mark against India.
Zaheer took no time to claim his third wicket. Ashwell Prince's tentative foot movement finally caused his downfall as he inside-edged an incoming delivery back on to his stumps and was bowled for 13.
Harbhajan then shocked the hosts with two wickets in his next over. Steyn got a thick edge to the straighter delivery and Rahul Dravid completed a magnificent catch behind the wickets to complete 200 catches in Test cricket in some style.
A few deliveries later, another bit of brilliance from the Indian fielders resulted in a wicket. This time it was Cheteshwar Pujara who took a blinder at short leg to dismiss Paul Harris (0) and give Harbhajan his third wicket.
The Proteas were in a state of shock as they lost four wickets for seven runs in the space of 29 deliveries.
But Morkel and Mark Boucher put on stubborn resistance. Morkel tried to take on Harbhajan but missed a few wild swings across the wicket and then crashed the off-spinner through covers for his first four.
Ishant ended India's brief period of frustration with the wicket of Morkel for 10. The left-hander tried to pull a short delivery but was brilliantly caught by Harbhajan off the top edge on the fine leg boundary.
Lonwabo Tsotsobe was the final wicket to fall when he chipped Harbhajan straight to the midwicket fielder and was out for a duck.
Boucher was left stranded on 16 as South Africa were bundled out for 131 in 37.2 overs.
India, despite being bowled out for 205, had taken a decisive lead of 74 runs on a pitch that saw batsmen from both teams had fail to cross the 50-run mark in their first innings.
Zaheer deserves rich praise for leading the fightback with his three wickets for 36 in 13 overs, while Harbhajan looked close to his best in claiming four for 10 in 7.2 overs.
Post-tea session: (92 runs, 30.5 overs, 4 wickets)
South Africa did not let India off the hook as they kept chipping away at the wickets, but India's lead of 74 runs saw them hold the edge by stumps.
Despite India having plenty of time on hand in their second innings, there was no stopping Virender Sehwag. The right-hander got off the blocks in his customary fashion as he lofted Steyn over the covers for a four.
In Steyn's next over, he flicked a full delivery through the square leg region for another boundary.
South Africa's premier pacer continued to get rough treatment from Sehwag. The right-hander slammed him for a couple of boundaries on either side of the wicket, in the fifth over, to take India's lead past the 100-run mark.
Murali Vijay took 18 deliveries to hit his first boundary when he chipped Tsotsobe over the cover fielder.
At the other end, Sehwag was making good progress. Not only did he despatch the loose deliveries but some of the good ones were also sent crashing to the boundary.
Soon, South Africa brought on Lonwabo Tsotsobe to replace the struggling Steyn. And the move paid off handsomely with the left-arm pacer claiming two quick wickets to trigger a mini collapse.
Virender Sehwag, Murali Vijay and Rahul Dravid fell in successive overs as India slipped to 48 for three in the 12th over.
Sehwag threatened to take the game away from the Proteas before he threw his wicket away. He went after a wide delivery from Tsotsobe but only edged it behind. He was out after a quick 32 from 31 balls.
In the next over, Vijay (9) was stunned by a quick delivery from Morkel that kicked up from short of length and he spooned a simple catch to short leg.
Dravid also played a reckless shot, looking to drive Tsotsobe through the off-side, and was caught behind for two.
Sachin Tendulkar showed some intent as he unleashed a powerful cut shot off Morkel for a cracking boundary.
But Steyn cut short the ace batsman's stay in the middle as soon as he started his second spell. Tendulkar was clearly beaten by Steyn's extra pace as he looked to drive one through the covers and was caught at third slip for six.
The match was tentatively poised, with India 56 for four in 15 overs, slightly ahead with a narrow lead of 130 runs, courtesy their bowlers.
Pujara was under extreme pressure and he started confidently with some positive footwork, while VVS Laxman looked as calm as ever at the other end.
Pujara got his first boundary when he flicked a full delivery from Steyn through midwicket, while Laxman drove Kallis through covers for another four.
The duo batted sensibly towards the closing overs to avoid further damage before bad light stopped play.
At stumps, India were 92 for four in 30.5 overs, a handy lead of 166 runs with three more days to go.
Laxman looked good on 23 from 59 balls, while Pujara showed he had the temperament to succeed in Tests as he ground out a patient 10 from 51 balls.
India were able to negotiate the threat of Steyn to some extent in their second innings as the pacer took one for 27 in seven overs. Tsotsobe gave South Africa some hope as he claimed two for 16, while Morke claimed one for 17.
The first hour of play on day three will be crucial to the outcome of the match. If India survive that period they would have inched towards safety, but a few quick wickets will see the Proteas eye an unlikely victory.