India's bowlers tore through the Sri Lankan top order to put the visitors firmly on top on the second day of the first Test in Galle on Thursday (27).
Paceman Mohammed Shami picked two wickets in the same over and Umesh Yadav got rid of opener Dimuth Karunaratne after India posted a commanding 600 all out, their biggest total in Sri Lanka.
Former captain Angelo Mathews was batting on 54 with Dilruwan Perera on six when stumps were drawn for the day, with Sri Lanka still trailing by 446 runs with five wickets in hand.
Indian batsman Cheteshwar Pujara, who struck a solid 153, said he was pleased that India had lived up to its billing as the number one Test side in the world.
"We would like to maintain that standard. We have scored enough runs, and we've got five wickets today. We are very well poised at this stage.
"I think the key for us, even in the last season, was that we've bowled really well. Our bowlers are bowling good lines and lengths," he said referring to India's 10 wins in the last 13 Tests.
Sri Lankan opener Upul Tharanga struck a defiant 64 off 93 balls but was run out thanks to a quick piece of fielding by Abhinav Mukund.
Mukund, fielding at silly point, also took a fine one-handed catch off Ravichandran Ashwin to send back Niroshan Dickwella (eight) and reduce the hosts to a shaky 143-5.
Yadav gave his side an early breakthrough after the Indian lower-order batsmen scored at a quick pace despite losing wickets at regular intervals.
Yadav had Karunaratne trapped leg before and although the batsman went for a review, the decision was upheld after replays showed the ball pitching on the middle stump.
Shami, making his Test comeback after an injury layoff, then dismissed debutant Danushka Gunathilaka for 16 and Kusal Mendis for a duck in the space of four balls.
Earlier, paceman Nuwan Pradeep clinched his maiden five-wicket Test haul, putting the brakes on India's free scoring.
Pradeep (6-132) dismissed Pujara for 153, triggering a batting collapse which saw the tourists lose four wickets in a lively first session after resuming the day at 399-3.
"Though I didn't start well, I thought I got better as I kept bowling. I got some rhythm," said Pradeep who last played a Test in January.
"We came to the match with a plan. But the way the match went and given the state of the pitch, we had to change our plans.
"A lot of our plans didn't work... But cricket is like that, at least we could get them out for 600."
Pujara hit 13 fours in his 265-ball knock to match his previous Test best of 153 against South Africa at Johannesburg in 2013.
Hardik Pandya struck a half-century on debut as India's last two wickets added a quickfire 83 runs in 71 balls to lift the side from 517 for 8.
Shami hit Rangana Herath for three sixes while Pandya lofted Pradeep for as many sixes in an attacking batting display by India's lower order batsmen.
Ajinkya Rahane (57) looked solid but was sent back to the pavilion after Karunaratne dived for a low catch on his right off fast bowler Lahiru Kumara.
Ashwin and Wriddhiman Saha struck back with a sixth-wicket stand of 59, but India's counter-attack unravelled as Sri Lanka dismissed the duo in the space of six balls.
Ashwin (47) fell short of a well-deserved half-century while Saha (16) became the first victim of skipper Herath (1-159).
Things got worse for Sri Lanka, with a statement from the nation's cricket board saying that doctors had confirmed all-rounder Asela Gunaratne was out for the remainder of the Test series with injury.
Gunaratne suffered multiple fractures on his left thumb while trying to take a catch off Shikhar Dhawan on the first day of the match Wednesday (26). He is expected to return to full mobility after a period of rehabilitation.