Sri Lanka's Dinesh Chandimal struck 116 and forged sizeable partnerships with Dimuth Karunaratne and Angelow Mathews to drive the hosts to a commanding 306 for three against New Zealand on the opening day of the second test on Thursday.
Electing to bat, Sri Lanka lost opener Pathum Nissanka in the first over but Chandimal's 16th test hundred kept Sri Lanka on course for a big first innings total.
Mathews was batting on 78 at stumps with an in-form Kamindu Mendis on 51 for the hosts, who won the opening test by 63 runs to go 1-0 up in the two-test series.
Kamindu became the first batter to score a half-century in each of his first eight test matches.
New Zealand captain Tim Southee made an early inroad when he had Nissanka caught behind for one but the visitors could not sustain the pressure.
Karunaratne got two reprieves as he was dropped in the slip on six and survived a stumping opportunity on 17.
Promoted from the middle to number three in a rejigged batting order, Chandimal did not look convincing initially but grew in confidence, posting 122 runs with Karunaratne for the second wicket.
Karunaratne (46) fell short of his fifty after being run out following a mix-up with Chandimal, who was too busy watching the ball from the non-striker's end to reply to his partner's call for a single.
Chandimal, however, made sure Sri Lanka did not suffer. He took a single off Mitchell Santner to bring up his maiden test hundred against New Zealand.
Glenn Phillips eventually dismissed Chandimal when he lured the batsman out of the crease and beat his bat to hit the off-stump.
New Zealand were unusually sloppy in the field and Daryl Mitchell missed a second catch in the slip when Mendis slashed a ball from Will O'Rourke.
Mathews got a couple of reprieves too when he was caught-behind to an O'Rourke delivery, which turned out to be a no ball, and spilled in the slip by Tom Latham.