Super Six, Johannesburg: India 292-6 (50 overs) beat Sri Lanka 109 (23 overs) by 183 runs
India booked their place in the semi-finals with a stunning victory over Sri Lanka in Johannesburg.
Sachin Tendulkar narrowly missed out on a record fifth World Cup century as an opening stand of 153 with Virender Sehwag helped India set a huge total of 292.
And pacemen Javagal Srinath and Zaheer Khan took four wickets in the first four overs of Sri Lanka's reply to leave their hopes of making the last four hanging by a thread.
Tendulkar's 97 saw him eclipse his own record for runs scored in a World Cup and his partnership with Sehwag was the highest of the tournament so far.
The pair took full advantage after being put in to bat by Sri Lanka captain Sanath Jayasuriya, whose day went downhill from the second he won the toss.
I'm really disappointed to miss out on a century but it's the victory that counts
Tendulkar reached his 50 when he turned Dilhara Fernando to the mid-wicket fence, taking his run total for the tournament to 524 - and surpassing his record of 523 from 1996.
Sehwag hit some big shots before being caught on the boundary off Muttiah Muralitharan for 66.
And just as Tendulkar looked set for his century he top-edged Aravinda de Silva into the gloves of wicketkeeper Kumar Sangakkara.
Captain Sourav Ganguly scored a valuable 48 off 53 balls before he was bowled by Chaminda Vaas with the score on 243.
Two overs later Vaas ripped out Yuvraj Singh's leg stump to take his tournament-best wicket tally to 18.
Muralitharan dismissed Mohammad Kaif and Dinesh Mongia before Rahul Dravid (18 not out) and Harbhajan Singh (seven not out) added some valuable runs at the death.
Sri Lanka's hopes of overhauling India's total soon disappeared as their first four batsmen were sent back to the pavilion without scoring.
Marvan Atapattu was first to go as he was caught by Kaif in the second over slashing at a delivery from Srinath.
Two balls later Jehan Mubarak went for another duck after edging Srinath to Dravid.
We did not bowl or bat well - it was a very disappointing game for us
Sri Lanka captain Sanath Jayasuriya
Zaheer joined the party in the next over as he trapped Mahela Jayawardene lbw and Srinath struck again when De Silva was out in almost identical fashion.
When Jayasuriya was caught by Kaif off Srinath for 12 to leave the score on 40-5, Sri Lanka's lowest-ever World Cup score of 86 loomed large.
Ashish Nehra accounted for Sangakkara (30), Vaas (9) and Nissanka (0), and Zaheer had Russel Arnold lbw for eight to reduce them to 78-9.
But Muralitharan took the score past 100 before holing out to Kaif for 16 to give Nehra his fourth wicket.
India: Sachin Tendulkar, Virender Sehwag, Saurav Ganguly (captain), Mohammad Kaif, Rahul Dravid, Yuvraj Singh, Dinesh Mongia, Harbhajan Singh, Zaheer Khan, Javagal Srinath, Ashish Nehra.
Sri Lanka: Sanath Jayasuriya (captain), Marvan Atapattu, Kumar Sangakkara, Aravinda de Silva, Mahela Jayawardene, Russel Arnold, Jehan Mubarak, Chaminda Vaas, Muttiah Muralitharan, Dilhara Fernando, Prabath Nissanka.
Umpires: Simon Taufel (Aus) and David Shepherd (Eng).