World Twenty20 hosts India have been stunned by the West Indies in tonight's semi-final in Mumbai.
The Windies won the toss and denied India the chance to chase down a total by putting the home favourites into bat first.
Just four batsmen came out as wickets proved hard to come by and once again it was the world's top-ranked T20 batsman who stole the show for India.
After an opening stand of 62 from Rohit Sharma (43) and Ajinkya Rahane (40), Virat Kohli took to the crease and the tournament's top scorer dazzled once more.
Kohli scored an unbeaten 89 off just 47 balls, with partnerships of 66 and 64* with Rahane and MS Dhoni, who added 15 not out and helped give Kohli the strike as India posted 192-2 from their 20 overs.
The Windies' reply got off to a bad start when they lost star batsman Chris Gayle in the second over. Jasprit Bumrah took the wicket by clean bowling the powerful opener for just five.
Marlon Samuels (8) soon joined Gayle back on the bench as he spooned Ashish Nehra to Rahane in the field.
The Wankhede Stadium was rocking, but Johnson Charles and Lendl Simmons set about getting the West Indies back into the match with a third-wicket partnership of 97.
India's main bowlers were having little luck and were beginning to lose control, but medium-pacer Kohli was brought on and remarkably had Johnson caught for 52 off his first ball.
However, Simmons (83*), who was given reprieves thanks to two Indian no-balls, and Andre Russell (43*) wrestled back the initiative and West Indies needed eight off the final over, which Kohli bowled, to win.
They managed just one off the first two balls, but Russell then hit a four and a six to give the Windies a seven-wicket win with just two balls to spare, setting up a final against England on Sunday in Kolkata.