Sri Lanka bounced back and provided England with more of a challenge than it might have imagined on day four of the first Test at Lord's.
After Mahela Jayawardene scored a superb century, Sri Lanka was 381-6, 22 runs ahead of England. More bad weather is forecast for the last day.
The day was cut short by 24 overs due to bad light, at a stage when Andrew Flintoff threatened to undo Jayawardene's good work.
Jayawardene was the last player dismissed on the day, controversially caught by Geraint Jones off Flintoff for 119 after 366 minutes of batting.
He was given out caught behind off Flintoff but replays showed the ball came off his jersey and not his glove. Earlier, Andrew Strauss dropped him when he was 58, an over after Maharoff was dropped by Paul Collingwood. Both were fielding in the slips.
Jayawardene started the day on 35, at 183-3 and he reached his 50 off 98 balls.
Farveez Maharoof reached his half century, off 133 balls, just after the lunch break but finally fell to Sajid Mahmood for 59 when caught by Kevin Pietersen.
Eleven runs later at 303, Thilan Samaraweera was dismissed, but Jayawardene carried on and posted his century off 191 balls. Tillakaratne Dilshan helped add 68 runs for the sixth wicket, and was 39 not out at stumps.
Jayawardene's 14th Test century saw him become the first player from his country to score 1000 runs against England, and the first Sri Lankan player to score two centuries at Lord's.
His dismissal provided Flintoff with his 100th Test wicket.