Sri Lanka took a step towards a place in the tri-nations series final as centuries by Upul Tharanga and Mahela Jayawardene set up a a 161-run victory over India in Kingston.
Tharanga was unbeaten on 174 off 159 deliveries while Jayawardene scored a near run-a-ball 107 during an opening stand of 213 in Sri Lanka's shuddering total of 348 for one.
In response, recent Champions Trophy winners India were all out for 187 inside 45 overs, Ravindra Jadeja top-scoring with 49 and Rangana Herath taking 3-37.
India lost opener Rohit Sharma for just five when he drilled a catch off Nuwan Kulasekara and things got worse when Shikhar Dhawan fell to Herath for 24.
Virat Kohli went for two, hooking at Angelo Mathews and, eight runs later, Murali Vijay was bowled by Lasith Malinga for 30.
Dinesh Karthik was stumped off Herath for 22 and Suresh Raina was run out in the 34th over with the score 142 after making 33.
India lost Ravichandran Ashwin and Shami Ahmed to consecutive Sachithra Senanayake balls before Ishant Sharma became Herath’s third victim and Malinga bowled Umesh Yadav for nought to end the innings.
Earlier Sri Lanka, having been put in, made a steady start before Jayawardene brought up his fifty with a lofted shot off Jadeja and Tharanga’s half-century soon came off Ashwin.
India made the breakthrough with Ashwin claiming Jayawardene’s scalp, Yadav holding on with a dive to his right at short third man.
Mathews and Tharanga guided Sri Lanka to their formidable score, the former firing 44 off 29 balls while Tharanga finished with 19 fours and three sixes.