Sri Lanka made it two wins from two in the Asia Cup, beating India by two wickets in a last-over thriller in Fatullah.
Kumar Sangakkara made 103 but it was left to lower-order pair Thishara Perera and Ajantha Mendis to see the Sri Lankans past India's total of 264-9 with four balls remaining.
Mendis had earlier taken 4-60 with his spin, while fellow slow bowler Sachithra Senanayake took ODI best figures of 3-41 as part of an attack that saw skipper Angelo Mathews only able to bowl 3.2 overs due to a groin injury.
Shikar Dhawan top-scored with 94 for India, who must now defeat rivals Pakistan on Sunday to remain in the hunt for a place in the final.
His innings, plus 48 from stand-in skipper Virat Kohli seemed to be setting them up for a sizeable score, only for five wickets to fall for 40 runs.
From a healthy 175-2 after 35 overs India slumped to 215-7, leaving their lower order to provide the late fireworks. Last man Mohammed Shami (14 not out) certainly obliged, belting a pair of sixes off Mendis' bowling.
Dhawan - who hit a six and seven fours - and Kohli shared a second-wicket stand worth 97 before both fell to the spin of Mendis in the same over.
Kusal Perera and Lahiru Thirimanne gave Sri Lanka's chase a flying start with a 80-run partnership for the first wicket, but Ravichandran Ashwin removed both openers, trapping Thirimanne lbw for 38 and then having Kusal Perera caught behind for 64.
Left-arm spinner Ravindra Jadeja dismissed Mahela Jayawardene and Dinesh Chandimal with consecutive deliveries to reduce Sri Lanka to 148-4, and Mathews managed just six runs before becoming the fifth wicket to fall.
Crucially, though, India couldn't find a way to get rid of Sangakkara. The left-hander hit 12 boundaries and a six in his 18th hundred for his country in 50-over cricket.
When he was eventually out, caught off the bowling of Shami (3-81), his team only needed a further seven runs.
Mendis and Perera, who helped add 42 runs for the eighth wicket with Sangakkara, saw them home, the latter getting the winning single having been dropped by Dhawan at mid-off from the previous ball.