London - Jos Buttler celebrated his 28th birthday with an innings of 89 that left England on top in the fifth Test against India at the Oval on Saturday.
England, who had already won this five-match series at 3-1 up, started the second day in danger of being dismissed for under 200 at 198 for seven.
Yet when Buttler was last man out they had made a total of 332.
At stumps, India were struggling at 174 for six - a deficit of 158 runs - with captain and star batsman Virat Kohli falling to Ben Stokes for 49.
Test debutant Hanuma Vihari was 25 not out and Ravindra Jadeja unbeaten on eight.
England spearhead James Anderson's figures of two for 20 in 11 overs left him just two shy of Australia great Glenn McGrath's record of 563 Test wickets - the most taken by any fast bowler.
Buttler and Stuart Broad (38) frustrated India with a ninth-wicket stand of 98 as, yet again this series, England bounced back with the bat after a top-order collapse.
This was the fourth time in five innings that Buttler, recalled to Test duty earlier this season by new national selector Ed Smith, had been England's top scorer.
Alastair Cook, in his final Test appearance before international retirement, made 71 on Friday.
But his dismissal sparked a slump that saw England lose six wickets for 48 runs.
Buttler, who had been given out lbw to Mohammed Shami on eight on Friday only for a review to reveal an inside edge, was 11 not out overnight, with Adil Rashid unbeaten on four.
Rashid was soon lbw for 15 to fast bowler Jasprit Bumrah on an overcast morning.
Broad was then peppered with several short-pitched deliveries but hung in to play some good shots before Buttler went to fifty in 84 balls, with England scoring 106 runs in the morning session.
Broad eventually fell when a skyed drive off left-arm spinner Jadeja was well caught over his shoulder by a diving KL Rahul, running back from mid-on.
Buttler, now with only last man Anderson for company, hit two sixes in three balls off Bumrah - a drive over long-on and a hook over long leg.
But looking for a single to keep the strike, he fell short of what would have been his second Test hundred when he guided Jadeja to Ajinkya Rahane at slip.
Jadeja, playing his first match of the series, after off-spinner Ravichandran Ashwin was ruled out through injury, finished with fine figures of four for 79 in 30 overs.
Bumrah and Ishant Sharma took three apiece but fellow paceman Shami, who repeatedly beat the bat, was unlucky to bowl 30 wicketless overs.
By contrast, Broad struck with his first ball Saturday to have Shikhar Dhawan lbw.
India were 70 for two when a trimmer from Sam Curran, on his Surrey home ground, bowled Rahul for 37.
Anderson thought he had Kohli lbw for 16.
But an original not out decision by umpire Kumar Dharmasena was upheld on review after replays showed Kohli was struck outside the line of off stump.
The end of the over saw Anderson seemingly complain to Dharmasena, prompting the Sri Lankan to call in England captain Joe Root.
Anderson was soon in a much better mood, the 36-year-old taking two wickets in seven balls as India slumped to 103 for four.
He had Cheteshwar Pujara, dropped by Cook at short leg off Moeen Ali on 10, caught behind for a painstaking 37 before removing Rahane for a duck when Cook held a routine first-slip catch.
Vihari survived two close lbw calls against Broad on nought, England not reviewing the first before the batsman successfully challenged the second.
Undaunted, Vihari hooked Stokes for six.
Kohli, the leading run scorer in the series, was in sight of reaching fifty for the sixth time in five Tests, when he edged a drive on the up off Stokes to Root at second slip.
And India were 160 for six when Rishabh Pant nicked Stokes to Cook.