Tillakratne Dilshan hit an unbeaten 95 to take Sri Lanka to 229-5 at tea on the opening day of the second and final Test against Bangladesh here on Saturday.
The middle-order batsman smashed two sixes and 14 fours in his entertaining 81-ball knock to steady the visitors, tottering at 75-4 after skipper Mahela Jayawardene elected to bat.
Dilshan also shared a 119-run stand for the fifth wicket with opener Malinda Warnapura (63) to lead a remarkable fightback by the visitors.
Warnapura hit six fours in his patient 151-ball effort before being trapped leg-before by part-time spinner Mohammad Ashraful.
The Bangladeshi bowlers struggled for most part of the afternoon as they took just one wicket, that of Thilan Samarweera (19), while conceding 163 runs off 30 overs.
Samarweera inside-edged a Shahadat Hossain delivery on to his stumps to squander a good start.
Hossain, however, was severely punished by Dilshan who smashed one six and three fours in one over by the paceman.
Dilshan also enjoyed a slice of luck when he was dropped on 82 off Mehrab Hossain, with Junaid Siddique grassing a catch at first slip.
Earlier paceman Mashrafe Mortaza picked two wickets in his first two overs to make early inroads into the Sri Lankan batting line-up.
Mortaza trapped opener Prasanna Jayawardene leg-before for no score before removing Kumar Sangakkara (five), who played the delivery on to his stumps.
The hosts then earned the big wicket of the Sri Lanka captain when Shakib Al Hasan induced a thin edge which was caught by wicket-keeper Mushfiqur Rahim.
Jayawardene, playing his 100th Test, made 11 off 46 balls with one four.