A double century from Jonathan Trott gave England an outside chance of victory in the first test with Sri Lanka at Sophia Gardens, helping his side to 491-5 at stumps on Sunday.
With rain forecast for Monday a draw remains the most likely result, but England has a useful lead of 91 going into the final day.
Jonathan Trott hit 203, with 17 fours from 409 balls and Ian Bell was 98 not out (one six, 10 fours, 152 balls), after Alastair Cook was out for 133.
"To get a double hundred is great," Trott said. "But the satisfaction I was getting from getting the guys to a position where we can kick on is just as important to me."
"A lot of the time time they were bowling left arm into the rough and it was quite tricky. I would have liked to have scored at a better rate and it would be nice if we were 120 ahead, but Cooky got out early, so did KP and with Dilshan bowling to 3-6 fields it was quite difficult."
Sri Lanka tried to bowl defensively, with Rangana Herath bowling 44 overs, including a marathon spell of 21 overs without a rest, to finish with figures of 1-115.
"It was a tough day at the office," Sri Lanka bowler Farveez Maharoof said. "But credit should go to the English batsmen, they batted really well. To be honest we could have bowled much better to him (Trott) a more consistent line and length, but we shouldn't take anything away from Trott."
England, replying to Sri Lanka's 400 all out, resumed on 287-2 when play began at 1330 GMT after rain wiped out the morning session.
In cold, blustery conditions England went on the attack, but lost Cook early when he slashed at a delivery from Maharoof and was caught behind by a diving Prasanna Jayawardene.
That ended a partnership of 251 - an England record against Sri Lanka - and Kevin Pietersen lasted just 11 balls before he was lbw to Herath for 3.
Pietersen's travails against left-arm spinners continued when he was hit on the pad by Herath before jabbing his bat on the ball.
He was initially given not out, but Sri Lanka referred the decision and, after five minutes watching replays, the third umpire, Rod Tucker, upheld the appeal.
Bell hit the first six of the match when he lofted Herath over long off and out of the ground and survived to reach the tea interval after being dropped by Kumar Sangakkara at gully.
Sri Lanka began the evening session knowing that victory was almost impossible and sought to contain England.
Herath bowled 21 disciplined overs without a rest but an hour of turgid cricket ensued, as England's reluctance to take risks saw the run rate drop to two an over at one stage.
Bell cut Thisara Perera through midwicket to bring up his 50, from 88 balls, but for a team needing to build a lead to put Sri Lanka under pressure on the final day England made achingly slow progress.
Yet in the final hour England belatedly accelerated, Bell reverse sweeping for boundaries in successive overs, while Sri Lanka wasted its referrals on unsuccessful appeals for catches against first Trott and then Bell.
Trott reached 200 with a single to midwicket off Tillakaratne Dilshan, but Dilshan finally ended Trott's innings when he bowled him after 513 minutes at the crease.
In the final over, the meagre crowd thought Bell had reached his century, only for the umpire to signal byes.