Murali Vijay and Cheteshwar Pujara once again combined to devastating effect as their 209-run stand put India in total control against Sri Lanka after day two of the second Test.
Having bowled the tourists out for just 205 on day one, Vijay (128) and Pujara (121 not out) became India's second-highest second-wicket partnership with a textbook display in Nagpur.
Sri Lanka's frontline bowlers tested India at the start of each of the first two sessions, but Vijay - back in the Test side after a wrist injury - batted with patience before accelerating towards the end of his knock.
Pujara was just as gritty with the bat, surpassing 1,000 Test runs for 2017 en route to making it to the close unbeaten alongside captain Virat Kohli (54no) to leave India 312-2 and a lead of 107.
The combined efforts of Suranga Lakmal, Lahiru Gamage and Rangana Herath restricted India to just 36 runs in the opening 18 overs of the day.
But looser spells from Dasun Shanaka and Dilruwan Perera saw India build scoreboard pressure, with the arrival of the former seeing Vijay smack a couple of cover drives over the ropes.
Another 50 runs arrived off the following 13 overs, before a 26-ball dry run after lunch stemmed the tide somewhat.
Vijay, having survived a drop from Perera on 61, scored 102 off the last 135 balls he faced to bring up a 10th Test century, but finally fell after tea by spooning Herath to Perera at short fine leg.
Kohli survived an early review appeal for lbw as Herath drifted one in, but the India captain got bat on ball first.
But chances were few and far between for Sri Lanka from there, as Pujara remained a nuisance - a drive off Lakmal over the square leg boundary taking him to 95.
His 14th Test century arrived with a well-timed poke through the gully for two, and Kohli raced to fifty off just 66 as India - aiming to take a 1-0 lead in the three-match series - hammered home their advantage.