India snatched a dramatic 37-run victory over hosts South Africa on Thursday to storm into the semi-finals of the Twenty20 world championships.
India, restricted to 153-5 in a game they had to win to stay afloat, hit back to stop South Africa to 116-9 and knock Graeme Smith's home team out of the tournament.
India, South Africa and New Zealand finished group E of the Super Eights on four points each, but India took the Kiwis along into the semi-finals due to superior net run-rates.
In Saturday's semi-finals, India clash with Australia at the Kingsmead here while New Zealand meet group F leaders Pakistan at the Newlands in Cape Town.
In an unexpected turn of events, South Africa not only lost a match they appeared to be winning but failed to make 126 that would have helped them pip New Zealand on run-rate.
The hosts slumped to 31-5, recovered through a 69-run stand for the sixth wicket between Mark Boucher and Albie Morkel but failed to get past the tight Indian bowling backed by good fielding.
South Africa needed 17 off the final over to reach the magic figure of 126, but off-spinner Harbhajan Singh tied the batsmen down to concede just seven runs.
Left-arm seamer Rudra Pratap Singh led India's charge with 4-13 from his four overs while Shanthakumaran Sreesanth and Harbhajan claimed two wickets each.
"It is really disappointing not to make the semis of our own tournament," said Smith, the South African captain.
"But that is how it goes sometimes and we have to get on with life and get over the disappointment quickly."
The South Africans leave on Tuesday for a Test tour of Pakistan.
India's jubilant skipper Mahendra Singh Dhoni said he was confident of defending the low total since he "had the bowlers to do the job."
"We knew we will be through if we get regular wickets and that is what the bowlers did," said Dhoni.
"It is great to be playing in the semi-final and we look forward to the game against Australia. I am sure our fans at home are happy and will be praying for our success."
India struggled with the bat after Dhoni won the toss and elected to take first strike.
None of the first four batsmen made 20 before Dhoni and young Rohit Sharma retreived the situation by adding 49 for the fifth wicket.
Dhoni hit 45 off 33 balls with four boundaries and a six.
The 20-year-old Sharma, batting for the first time in the tournament, made an unbeaten 50 off 40 balls, reaching his half-century off the final delivery with a six to mid-wicket off Johan van der Wath.
India were without Yuvraj Singh who was ruled out with a left elbow injury sustained during Wednesday's match against England in which he hit Stuart Broad for six sixes in an over.
The blow seemed to have a telling effect on the rest of the team even after openers Virender Sehwag and Gautam Gambhir put on 32 for the first wicket in 4.3 overs.
Three wickets fell for one run in four balls following a double strike by veteran Shaun Pollock in the fifth over.