West Indies beat South Africa by three wickets in a low-scoring thriller in their World Twenty20 Super 10 match on Friday to join New Zealand in the semi-finals.
The West Indian attack responded brilliantly to captain Darren Sammy's decision to bowl first on a slow pitch offering help as they restricted South Africa to 122 for eight.
The 2012 champions looked comfortable for most of their run chase but leg-spinner Imran Tahir struck twice in consecutive deliveries in his last over to haul his side back into the game.
Marlon Samuels, named man of the match for his 44, was then removed by paceman Chris Morris in the penultimate over.
Carlos Brathwaite calmed West Indian jitters, however, when he hit a six off paceman Kagiso Rabada as West Indies clinched a third successive victory, with two balls to spare.
Earlier, opener Quinton de Kock (47) played a disciplined innings to rescue South Africa after they slumped to 47 for five in the ninth over.
De Kock added 50 for the sixth wicket with David Wiese (28) to give his team a competitive total to defend.
Chris Gayle, Andre Russell and Dwayne Bravo picked up two wickets apiece for West Indies who retained the same side that beat Sri Lanka in their last match in Bangalore.
South Africa, who have never lifted the trophy but were one of the pre-tournament favourites, have two points from three Group One games and look like going out.
Second-placed England have four points and can claim a spot in the last four with a win on Saturday over Sri Lanka who are also on two points. Afghanistan are bottom with no points.
Kohli is playing Tendulkar's role for India now: Afridi
WORLD T20 PHOTOS: Australia knock Pakistan out
Whole team in state of sorrow after India loss: Mashrafe
Have not decided on retirement: Afridi
Points Table: ICC World T20 2016