Tillakaratne Dilshan slammed an aggressive century to lead Sri Lanka to a commanding 371 for six on the opening day of the second and final Test against Bangladesh on Saturday.
Sri Lanka were struggling at 75 for four when Dilshan came to the crease and he was eventually last man out, bowled by left-arm spinner Enamul Haque jnr for a rapid 162 off 165 balls.
The right-hander raced to his half-century in only 37 deliveries and completed his sixth Test century off 93 balls.
Chamara Kapugedera (93 not out), who was dropped on 37 by mid-on Imrul Kayes off paceman Mashrafe Mortaza, shared a sixth-wicket stand of 173 with Dilshan.
Malinda Warnapura also chipped in with 63, his fourth Test half-century.
Bangladesh captain Mohammad Ashraful trapped Warnapura lbw with his first ball to end the opener's 119-run fifth-wicket partnership with Dilshan.
The home team were on top early on after Mortaza struck twice in his first two overs, dismissing Prasanna Jayawardene for a first-ball duck and Kumar Sangakkara for five, and Shakib Al Hasan removed Mahela Jayawardene in his 100th Test.
Skipper Jayawardene, the fourth Sri Lankan to reach the milestone, was caught by keeper Mushfiqur Rahim for 11.
Sri Lanka, however, then plundered 164 runs in the afternoon session and another 142 after tea.
The visitors made three changes to the team that won the first Test in Dhaka by 107 runs with Kapugedera, Ajantha Mendis and Dilhara Fernando replacing Michael Vandort, Rangana Herath and Dammika Prasad.
Bangladesh brought in Haque Jnr for paceman Mahbubul Alam.