Two run-outs and the bowling of Ravichandran Ashwin gave India the edge on the first day of the second Test against South Africa at SuperSport Park on Saturday.
South Africa finished on 269 for six. They had been cruising at 246 for three and seemed set for a big total after winning the toss and batting on an easy-paced pitch.
Aiden Markram (94) and Hashim Amla (82) were mainly responsible for getting South Africa into a strong position despite some good bowling by off-spinner Ashwin, who took three for 90 in 31 overs.
The day changed dramatically with an outstanding piece of fielding by Hardik Pandya, who ran out Amla for 82. Two more wickets fell in the next 14 balls.
Amla, who looked set for a century to end a poor run of form which had brought scores of 5, 3 and 4 in his previous three Test innings, played a ball from Pandya to the on-side and was called for a sharp single by South African captain Faf du Plessis.
Amla, on his back foot, was slow to start and Pandya raced to pick up the ball, turned and threw down the stumps at the bowler's end.
The second new ball was due but Indian captain Virat Kohli persisted with Ashwin and was rewarded when De Kock edged Ashwin to Kohli at slip to be out first ball.
It got worse for South Africa when Vernon Philander set off for a suicidal run and found himself at the same end as Du Plessis to be run out without scoring.
Contrary to expectations, there was no assistance for the fast bowlers and Ashwin carried the bowling attack, taking two for 53 in an unchanged 17-over first spell before coming back to bowl another lengthy spell.
Markram, playing in his fifth Test, looked set for a third century to go with hundreds he made against the modest opposition of Bangladesh and Zimbabwe. He struck the ball with authority, particularly off the back foot, before he tried to guide a ball from Ashwin towards third man and was caught behind by Parthiv Patel.
Markram made 94 off 150 balls and hit 15 fours.
Markram and a struggling Dean Elgar (31) put on 85 for the first wicket before Elgar went down the wicket and was caught by Murali Vijay at silly mid-off, checking a drive when Ashwin bowled the ball a bit shorter so that Elgar could not reach the pitch of the ball.
Hashim Amla made his 82 off 153 balls with 14 fours. He survived a half-chance to Hardik Pandya at short midwicket off Ashwin on 14 and a diving catch to Patel when he glanced Ishant Sharma to the wicketkeeper's left with his score on 30, but then played with authority.
Patel was playing in place of Wriddhiman Saha, who had a hamstring injury.
India made two other changes. Lokesh Rahul replaced Shikhar Dhawan as an opening batsman and fast bowler Ishant Sharma came in for Bhuvneshwar Kumar.
South Africa again opted for a four-pronged pace attack, picking new cap Lungi Ngidi in place of the injured Dale Steyn. Ngidi, 21, played in three Twenty20 internationals last season but has played in only nine first-class matches, taking 31 wickets at an average of 20.45.