Cardiff - World champions India thrashed Sri Lanka by eight wickets at Cardiff on Thursday to set up a Champions Trophy final against tournament hosts England at Edgbaston on Sunday.
India, chasing a modest target of 182, finished on 182 for two with 15 overs to spare to set up a final against England, who beat South Africa by seven wickets at The Oval on Wednesday.
Opener Shikhar Dhawan, dropped three times, made 68 as he extended his record as the tournament's leading scorer to 332 runs, at an average of more than 110, following previous innings of 114 against South Africa, 102 not out against the West Indies and 48 against Pakistan.
Virat Kohli was 58 not out, with India now having won seven of their last eight one-day internationals (ODIs) against their Asian rivals.
The course of Thursday's match, a repeat of the 2011 World Cup final India won by six wickets in Mumbai, was set in the first innings.
After India captain Mahendra Singh Dhoni won the toss, his seamers exploited the helpful overcast conditions as Sri Lanka were restricted to 181 for eight.
Ishant Sharma took three wickets for 33 runs following impressive work by new-ball duo Bhuvneshwar Kumar and Umesh Yadav.
"The conditions were really favourable," said man-of-the-match Ishant Sharma. "The wicket was helpful for the fast bowlers so that paid off for us.
"Bounce and pace is my strength but Bhuvee (Kumar) and Umesh bowled really well," he added.
Meanwhile Dhoni, whose side have now won all four of their matches at this tournament, warned England that India could get better.
"The bowlers have done really well but still there are a few areas where we'd like to improve," he said.
Sri Lanka captain Angelo Mathews top scored with 51 in an innings where no other batsman made more than the 38 of Mahela Jayawardene, who two years ago became the only man to score a hundred in a losing cause in a World Cup final.
"The toss was absolutely crucial; if we won the toss we would have bowled," said Mathews.
"It was seaming, swinging -- the batters were finding it really hard.
"We didn't play well but credit should go the Indian bowlers - they bowled really well."
Sri Lanka were six for one when Kusal Perera edged a drive off Kumar and was caught at second slip by Suresh Raina.
They suffered a further setback when Tillakaratne Dilshan, after playing an on-drive, pulled up with a right leg injury.
He received on-field treatment but retired hurt shortly afterwards on 12 in the fifth over.
Ishant Sharma, with the aid of two excellent second slip catches by Raina, reduced Sri Lanka to 41 for three by removing Lahiru Thirimanne and dangerman Kumar Sangakkara.
It was a deserved reward for Dhoni's decision to attack the batsmen with two slips and only two men outside the circle.
The 23rd over saw Dhoni pass on wicketkeeping duties to Dinesh Karthik, a specialist gloveman but mainly deployed as a batsman this tournament.
That allowed Dhoni to bowl himself in conditions suited to his medium-pacers and with his second ball he nearly had Jayawardene, on five, lbw only for the batsman to overturn the decision on review thanks to an inside edge.
Jayawardene was bowled by left-arm spinner Ravindra Jadeja after an ugly swipe across the line
For all Sri Lanka slingshot seamer Lasith Malinga's skill, his bowling average of 40.88 against India is his highest against any country.
And the tone for India's reply was set when left-hander Dhawan uppercut Malinga for a stunning six off the last ball of the bowler's third over.
Worse followed for Sri Lanka when Dhawan was dropped by first slip Mathews off Nuwan Kulasekara and put down by wicketkeeper Sangakkara, standing up, off the same bowler.
Dhawan cashed in with a 73-ball fifty before he he was dropped by Sachitra Sennayake, substitute for Dilshan, at point again off Kulasekara.
He was eventually stumped off Jeevan Mendis but by then India were in sight of victory.
Sri Lanka - 181-8 50 overs: (A Mathews 51; I Sharma 3-33, R Ashwin 3-48)
India - 182-2, 35 overs: (S Dhiwan 68, V Kohli 58 no)