Virat Kohli missed out on equalling Sachin Tendulkar's all-time record of 49 one-day international hundreds but still helped India to an imposing 357-8 against Sri Lanka as the unbeaten World Cup hosts put one foot in the semi-finals on Thursday.
Kohli made 88 while opener Shubman Gill hit 92 as India looked for a seventh win in seven games and a guaranteed spot in the last-four.
The pair were out in quick succession after they had shared a stand of 189 following the second-ball exit of India captain Rohit Sharma.
But Shreyas Iyer kept the runs coming at the Wankhede Stadium with a blistering 82 off just 56 balls including six superbly struck sixes.
He eventually holed out off Dilshan Madushanka, the left-arm quick finishing with 5-80, as he became the leading bowler at the World Cup with 18 wickets.
Rohit leg-glanced Madushanka's first ball of the match for four after India were sent into bat.
But Madushanka's second ball cut off the seam before crashing into Rohit's off stump.
Sri Lanka could have had India three wickets down early on but missed both Gill and Kohli.
Gill was on eight when a diving Charith Aslanka dropped a difficult catch at backward point following a slashing drive off Madushanka.
Next over, Kohli was reprieved on 10 when Dushmantha Chameera was unable to cling on to a return catch off a leading edge
Those misses proved costly, Kohli completing a run-a-ball fifty featuring eight boundaries.
Gill, keeping pace with Kohli, reached the landmark in 55 balls before hitting the first six of the match when he pulled Chameera over midwicket.
But the 24-year-old fell in sight of a hundred when caught behind by wicketkeeper and Sri Lanka skipper Kusal Mendis trying to uppercut Madushanka.
A near capacity crowd, including Mumbai native and India great Tendulkar, was silenced when Kohli chipped a Madushanka cutter to cover-point.
It was a tame end to a 94-ball innings, including 11 fours.
The innings was in danger of faltering but Iyer blazed away, with one huge six off paceman Kasun Rajitha carrying over 100 metres.
Brief scores: India 357-8 in 50 overs (S. Gill 92, V. Kohli 88, S. Iyer 82; D Madushanka 5-80) v Sri Lanka