India opener Shikhar Dhawan smashed another hundred and KL Rahul made a record-equalling half-century before Sri Lanka hit back on day one of the third Test in Pallekele.
Dhawan put Sri Lanka's attack to the sword with a magnificent 190 in the first Test and he hit a brisk 119 as the India openers cashed in after Virat Kohli won the toss on Saturday.
Rahul (85) gave another exhibition of his class at the top of the order, becoming only the sixth man to score 50 or more in seven consecutive Test innings courtesy of a first-wicket stand of 188.
Malinda Pushpakumara (3-40), in only his second Test, sparked Sri Lanka's revival after lunch and Lakshan Sandakan (2-84) struck twice, leaving India 329-6 at stumps as they target a 3-0 series whitewash.
Wriddhiman Saha (13 not out) and Hardik Pandya (1 no) will resume in Kandy on Sunday.
The aggressive Dhawan latched on to short stuff from the recalled Lahiru Kumara with some exquisite cuts, while Rahul pulled expertly and drove with elegance as India got off to an ominous start.
Kumara was removed from the attack after only three overs and failed to redeem himself for a poor opening spell when he dropped Rahul on 28 running back from mid-on off the bowling of Dimuth Karunaratne.
That proved to be costly as Dhawan and Rahul continued to score all too easily, the left-hander setting about spinner Dilruwan Perera.
The prolific Rahul, who timed the ball superbly, etched his name in the record books with yet another half-century and Dhawan raced on to 64 as India reached lunch on 134 without loss.
Angelo Mathews had no time to react when Rahul edged a cut past him at slip off Sandakan, but he missed out on a century after dancing down the track to strike Pushpakumara to Karunaratne at mid-on.
Cheteshwar Pujara was rattled on the helmet by a short ball from Kumara before Dhawan brought up his sixth Test hundred by using his feet superbly to drive Pushpakumara wide of mid-off for four.
Dhawan's stylish 123-ball knock, which included 17 boundaries, ended when he swept Pushpakumara to a diving Dinesh Chandimal and Pujara (8) fell before tea, caught cutting Sandakan to Mathews in the slips, as the hosts' persistence finally paid off.
Pushpakumara bowled Ajinkya Rahane (17) and Sandakan claimed the scalp of Kohli, who was taken by Karunaratne at slip eight short of a half-century, in a strong Sri Lanka fightback.
Vishwa Fernando, playing his second Test a year after his debut, also snared Ravichandran Ashwin (31) caught behind at full stretch by Niroshan Dickwella to give Sri Lanka another late lift.
|Patriots knew Butler would be benched, says McCourty|
|Barcelona boss Valverde tells Chelsea: History counts|
|Schmidt departs as Wolfsburg face relegation fight|
|Madrid, Barca & PSG are Champions League favourites, says Heynckes|
|I was at rock bottom – Brook opens up on depression battle|
|Rashid in form as Afghanistan rout sorry Zimbabwe|
|Toulon president charged over Bastareaud comments|
|Biggar, Halfpenny and Faletau all fit as Wales given clean bill of health|
|Hughes availability ´absolutely huge´ for England, says Alphonsi|
|Former football coach Bennell sentenced to 31 years|
|Why didn´t Jimmy Butler play in NBA All-Star Game?|
|Returning Ringrose added to Ireland Six Nations squad|
|Hummels wary of ´top European team´ as Bayern prepare for Besiktas|
|In-form Kvitova withdraws from Dubai|
|WATCH: ´Crazy´ Evra drives to West Ham training in London cab|
|Barca clash a chance for Chelsea ´to do things right´, proclaims Rudiger|
|Lucas claims Tottenham can win Champions League|
|Federer the ´complete player´ with number-one return - Schuettler|
|LeBron relishes one more link-up with Irving|
|Barcelona tie will not decide Conte´s Chelsea future, says Deco|
|Cordner signs bumper deal with Roosters|
|Lewandowski won´t be distracted by Real Madrid rumours|
|Bennett signs on until 2019 with England|
|Man Utd must not underestimate Sevilla - Navas|
|Coleman demolishes 20-year-old 60m world record|
|Red Bull reveal ´special edition´ livery on 2018 car|
|Iniesta will not be made welcome at Stamford Bridge, warns Azpilicueta|
|Ballack sees ´a big difference´ between Bundesliga and Premier League|
|Karmichael Hunt faces no conviction, but will remain sidelined|
|Betis boss would have preferred to face Madrid´s BBC|
|Chelsea v Barcelona: Messi´s blues against the Blues|
|James leaving Madrid was the best thing, says father|
|He´s looking good – Zidane thrilled with Ronaldo|
|It needs to take 30 seconds – Matic wants quicker VAR|
|Team LeBron edges Team Stephen in thrilling All-Star Game|
|McIlroy sees progress despite failing to contend at Riviera|
|Silver supports NBA players speaking out on social issues|
|Mickelson ready for Masters after third straight top-six finish|
|Gattuso: My job is to be the players´ nightmare until season´s end|
|I wasn´t good enough – Guardiola reveals Wigan rejection|
|Dillon reigns supreme with overtime win at Daytona 500|
|Bubba Watson ends drought with third Genesis Open title|
|Brazilian derby between Vitoria and Bahia abandoned after red-card frenzy|
|Anderson ends barren spell with New York Open triumph|
|It was crazy, but I like that - Zidane revels in eight-goal Betis thriller|
|Asensio credits Zidane for Madrid´s thrilling Betis comeback|
|Zidane hopeful over Marcelo hamstring injury|
|Overton replaces injured Plunkett for Blacks Caps ODI series|
|Bonaventura claims Milan can catch Inter|
|Bravo for Claudio! Guardiola to pick keeper at Wembley|
|Mourinho hoping for reinforcements at Sevilla|
|´Quick-healer´ Groves hopeful over shoulder injury|
|Real Madrid become first side to score 6,000 goals in LaLiga|
|Real Betis 3 Real Madrid 5: Asensio at the double in LaLiga classic|
|AC Milan 1 Sampdoria 0: Bonaventura makes it 10 unbeaten for Rossoneri|
|Schurrle excited to finally link up with Reus and Gotze|
|Fit-again Hughes included in England squad|
|New number one Federer revels in ´unbelievable´ week|
|Real Madrid defender Marcelo suffers hamstring injury|
|Costa fumes referees ´want to give me a card´, but Simeone plays down penalty row|
|Thiem regains Argentina Open title|
|Stoger makes Dortmund history with Gladbach win|
|Championship Review: Leeds fight back for point, Norwich & Ipswich share derby spoils|
|Racing beat La Rochelle to go second, Castres edge out Bordeaux|
|Borussia Monchengladbach 0 Borussia Dortmund 1: Burki unbeatable as Reus returns to haunt Foals|
|FA Cup ´magic´ no surprise to Pochettino after Rochdale thriller|
|Rochdale hero Davies: This is every kid´s dream|
|Atletico Madrid will not stop in pursuit of Barcelona, promises Gameiro|
|Banks boot pays dividends for Treviso|
|Lucky 13 and second successive title for Kvitova after Muguruza classic|