India have reached the Asia Cup final, thwarting 20-year-old Dunith Wellalage's all-round brilliance to beat Sri Lanka by 41 runs.
After claiming 5-40 with his left-arm spin to help bowl out India for 213, Wellalage kept Sri Lanka in the game with an unbeaten 42 before he ran out of partners and Sri Lanka were dismissed for 172 in 41.3 overs.
Kuldeep Yadav took 4-43 in two key bursts.
"The pitch got slightly better towards the end so we had to hold our nerve and bowl consistently," Indian skipper Rohit Sharma said.
Tuesday's defeat broke Sri Lanka's 13-match winning streak and they must now beat Pakistan in their last Super 4 game on Thursday to qualify for the Sunday's final. Pakistan also have two points after both beat Bangladesh in the Super 4 stage, but lost to India.
Wellalage and Dhananjaya de Silva put the small chase back on track on a tricky spinning wicket after the top-order were flattened against India's pace and spin and slumped to 6-99.
Wellalage used his feet well against India spinners, smacking Yadav over mid-wicket for the only six in the Sri Lanka innings, before Ravindra Jadeja (2-33) provided India a much needed breakthrough.
With only 52 required off 76 balls, de Silva couldn't resist and holed out at mid-on before Yadav ran through the tail to finish with 4-33 that left Wellalage stranded on a 46-ball knock.
Earlier Rohit Sharma (53) played aggressively against fast bowlers in a dominating 80-run opening partnership with Shubman Gill, who scored 19.
But Wellalage was introduced and quicky dismissed the top three. He clean bowled Gill off his first ball, Kohli fell cheaply, and Rohit was beaten with a straight delivery that skidded through the Indian skipper and hit the stumps.
KL Rahul (39) and Ishan Kishan (33) shared a half-century stand before Rahul gave a tame return catch to Wellalage who then plucked a brilliant two-handed catch at mid-wicket to dismiss Kishan.
Wellalage rounded his spell when he had Hardik Pandya caught behind off his final delivery as Charith Assalanka got through the tail.
"Unfortunately we lost the match today, but we have one more game to make it to the final," Wellalage said.