Virat Kohli scored a record-breaking 50th one-day international hundred before Mohammed Shami took a sensational seven wicket-haul as India sealed a place in the World Cup final with a 70-run win over New Zealand in Mumbai on Wednesday.
Kohli made 117, to surpass the record he had shared with India great Sachin Tendulkar, and Shreyas Iyer a rapid 105 in a commanding total of 397-4 that also featured Shubman Gill's 80 not out.
New Zealand were left needing to break their own record for the highest total by a team batting second to win a World Cup semi-final -- a Duckworth/Lewis adjusted 299-6 against South Africa at Auckland in 2015.
But in-form paceman Shami then took a career-best 7-57 as New Zealand, the losing finalists at the last two World Cups, were dismissed for 327 despite Daryl Mitchell's 134, his highest score at this level.
India, who've won all 10 of their matches at the tournament so far as they bid for a third World Cup title and second on home soil, will now face either Australia or South Africa, who play on Thursday, in Sunday's final in Ahmedabad.
First-change Shami struck twice early on, taking a wicket with his first ball to leave New Zealand 39-2.
But the Black Caps had hope of an improbable victory during a third-wicket partnership of 181 between captain Kane Williamson and Mitchell.
Shami, however, all but ended the chase with two wickets in three balls during the 33rd over.
Williamson fell for 69 when he flicked Shami -- who had dropped him on 52 -- straight to Suryakumar Yadav at deep square leg.
And 220-3 became 220-4 when Shami had Tom Latham lbw for a duck.
Glenn Phillips (41) hit out while adding 75 with Mitchell.
But with the run-rate against New Zealand, both Phillips and Mark Chapman perished to catches in the deep by Ravindra Jadeja.
Mitchell's fine effort ended in a similar fashion when he whipped Shami to Jadeja at deep midwicket before the paceman finished the match when he had last man Lockie Ferguson caught behind.
'Dream' innings
Kohli's innings saw him surpass the mark of 49 hundreds he had shared with Tendulkar as his compatriot looked on from the Wankhede Stadium stands in a capacity 33,000 crowd featuring football star David Beckham.
Kohli put on 163 with Iyer, who made 105 off just 70 balls, including four fours and eight sixes.
"It feels like a dream. Too good to be true," said Kohli at the innings break.
Tendulkar hailed Kohli's "skill and passion".
"I couldn't be happier that an Indian broke my record," wrote Tendulkar, a team-mate of Kohli when India beat Sri Lanka in the 2011 final at the Wankhede, on X, formerly Twitter.
There was controversy at the start on Wednesday following revelations the match was being played on a used, rather than fresh, pitch.
Opener Rohit set the tone for the innings with a quickfire 47 before a skyed drive off Tim Southee was well caught by Williamson running back from mid-off.
New Zealand thought they had new batsman Kohli out for a second-ball duck, lbw to Southee but their review revealed an inside edge.
Kohli completed a 59-ball fifty. A two off fast bowler Ferguson then took Kohli to his landmark hundred, his third of the tournament, as chants of "Kohli, Kohli" rang round the ground.
Kohli had then faced 106 balls, hitting eight fours and a six in his 279th ODI innings. Tendulkar led the applause as Kohli bowed towards his childhood hero.
Dropped on 107, Kohli was eventually out when he pulled Southee low to deep square leg and the dynamic Iyer's second successive hundred ended after he holed out off Trent Boult.
Shami, who took his previous best of 5-18 under the Wankhede lights when Sri Lanka were dismissed for just 55 in pool play, had an immediate success Wednesday.
Devon Conway could only edge his late-moving first ball, although it still needed wicketkeeper KL Rahul to hold a brilliant diving catch.
Conway's fellow left-handed opener Rachin Ravindra, the tournament's breakout star with three hundreds in his first World Cup, was also caught behind off Shami for 13.
But then came New Zealand's rally with the powerful Mitchell completing an 85-ball century featuring eight fours and five well-struck sixes.