Skipper Mahela Jayawardene smashed his 24th Test century and shared two century stands with Kumar Sangakkara and Thilan Samaraweera to help Sri Lanka stretch their lead over Bangladesh to 406 in the opening Test.
|Jayawardene gets one away [AFP]
Jayawardene was unbeaten on 129 as Thilan Samaraweera followed his first innings 90 with 62 in the second before he was bowled by Mashrafe Mortaza, a dismissal that prompted the umpires to call off the third day's play for bad light.
Their 138-run stand came after Sangakkara had recorded his 27th Test fifty.
His was the only wicket to fall in the session, caught behind by keeper Mushfiqur Rahim off Mehrab Hossain for 67.
Sri Lanka reached 291-4 at the close on Sunday thanks to another healthy partnership of 135 runs built by Jayawardene and Sangakkara after the visitors' second innings had got off to a terrible start.
Malinda Warnapura was trapped lbw for eight by paceman Mahbubul Alam and Mortaza uprooted the stumps of Michael Vandort on six to leave Sri Lanka reeling at 18-2.
Earlier in the morning, Muttiah Muralitharan wasted little time in ending Bangladesh's first innings when he snapped up his sixth wicket to bowl the home side out for 178.
After fog delayed play for 30 minutes, Bangladesh resumed on 177-9 but were dismissed on the final ball of the first over when Warnapura caught Alam at forward short-leg for a duck.
Muralitharan had completed his 66th five-wicket haul in Tests on the second day and finished with figures of 6-49 after Sri Lanka made 293 in their first innings.
Jayawardene later commended his bowlers and batsmen, particularly Sangakkara.
"The bowlers did a good job for us to come back in this match and I think Sangakkara batted really well today," he said.
"It wasn't the prettiest knock but I will take it as very useful."
The match will have a break on Monday for a national election in Bangladesh and the fourth day's play will be held on Tuesday.