Replying to England’s 287, Kohli — dropped twice by Dawid Malan off James Anderson — scored a gritty 149, his innings laced with 22 fours and a six, to enable the visitors trim the first innings deficit to 13 runs.
For the hosts, Sam Curran returned career’s best figures of 4/74 while pace spearhead Anderson (2/41), Adil Rashid (2/31) and Ben Stokes (2/73) accounted for the rest of the wickets.
The icing on the cake for India in the brief second innings spell was when offie Ravichandran Ashwin castled former skipper Alistair Cook for a duck in exact fashion like the first innings.
Cook was drawn forward as the ball pitched on middle stump to zip past him and hit the off stump. Keaton Jennings was not out on 5 at the close of play.
Earlier, resuming the third session 160/6 and still trailing by a good margin, Kohli continued his solo act after bringing up his half century just before tea albeit being grassed twice by Malan.
India lost Ashwin (10) just after the break, the 31-year old clean-bowled by Anderson who claimed his first wicket of the day.
Mohammed Shami (2) did not last long, Anderson taking his wicket too before Kohli upped the ante and stitched stands of 35 and 57 runs with tailenders Ishant Sharma (5) and Umesh Yadav (1 not out). From 182/8, the skipper dragged his team to 274.
Kohli, who exorcised the ghosts of the 2014 England tour, brought up his hundred by hitting Stokes for a four and roaring towards the stands to then kiss his wedding ring as wife Anushka Sharma watched from the stands.
From then on, he added the next 49 runs in brisk pace knowing they had only one wicket in hand.
Kohli finally fell to Rashid, cutting a short and wide delivery to Stuart Broad but the job was already done.
The worry for India would be that none of the other visiting batsmen reached the 30-run mark.
The day began with England managing to add just two runs to their overnight total of 285 runs in their first innings.
India needed just 10 balls on the second day to end England’s innings, that slipped from a comfortable 216/3 to 287.
Pacer Mohammed Shami, who started the proceedings along with Ashwin, got Curran (24) caught behind by wicketkeeper Dinesh Karthik. Karthik had dropped Curran on the opening day off the same bowler.
India then squandered a watchful start to slip to 76/3 at lunch as Kohli remained undefeated with Rahane.
India got off to a near perfect start with the opening duo of Murali Vijay (20) and Shikhar Dhawan (26) putting on a 50-run stand.
But the introduction of Curran turned the tide in England’s favour. Curran’s three-wicket burst in eight balls reduced India to 59/3 in no time even as Rahane joined his captain to sneak in a few singles before heading for the break.
It was Kohli show from there on as he notched his 17th Test fifty off 100 balls but was dropped twice either side of his fifty.
India kept losing wickets with Karthik (0) and Pandya — who added 48 runs for the sixth wicket with his skipper — falling at regular intervals.
Brief Scores: England 287 & 9/1 (Keaton Jennings 5; R Ashwin 1/5) vs India 274 (Virat Kohli 149, Shikhar Dhawan 26, Hardik Pandya 22, Sam Curran 4/74).<br>A<br>A–IANS<br>Adm/