India have defied a valiant effort from New Zealand to reach the Cricket World Cup final with a 70-run victory.
Virat Kohli - his 50th in one-day internationals - and Shreyas Iyer both hit centuries as India reached 397-4 off their 50 overs.
New Zealand were competitive throughout their reply with Daryl Mitchell making a sensational 134, but they fell short as they were bowled out for 327.
Having won the toss and elected to bat first, India would always have been confident about reaching Sunday's showpiece, and a 71-run opening stand off just 8.2 overs set them on their way.
Rohit Sharma (47) was the first to depart and India were dealt a further blow when Shubman Gill was forced to retire hurt on 79 with cramp.
Nevertheless, that enabled Kohli and Iyer to take the game away from New Zealand, the pair putting on 173 from just 21.2 overs.
Kohli made 117 from 113 balls, recording nine fours and two sixes, but Iyer made a remarkable 105 from 70 deliveries that includes eight maximums.
With KL Rahul also chipping in with 39 from 20, India left New Zealand requiring almost eight runs per over, and the early dismissals of Devon Conway (13) and Rachin Ravindra (13) left the Black Caps off the pace.
However, Kane Williamson and Mitchell proceeded to put on 181 for the third wicket to keep their nation in the game, with Williamson eventually departing for 69 as Mohammed Shami collected his third wicket.
His fourth arrived two balls later as Tom Latham went for a duck, and it took a 33-ball knock of 41 from Glenn Phillips to keep New Zealand at a required run-rate of roughly 12 per over.
Mitchell was ultimately left with too much to do, his exceptional effort of 134 from 119 balls coming to an end as Shami took his fifth wicket, leaving New Zealand on 306-7 with just 28 balls left.
Just 3.3 overs later, the innings was wrapped up as Shami posted outstanding figures of 7-57 to guide India through to a showdown with either Australia or South Africa. body check tags ::