Tillikaratane Dilshan eased to his 19th ODI century to anchor his side to a six-wicket victory over New Zealand in the second game of their seven-match series in Hamilton.
Dilshan scored 116 from 127 balls in Sri Lanka's 252-4 as the visitors levelled the series at 1-1 after New Zealand won the first game at Hagley Oval in Christchurch on Sunday.
Sri Lanka captain Angelo Mathews was 39 not out with Lahiru Thirimanne on two as the visitors chased down New Zealand's 248 all out in 47.4 overs.
"Pretty pleased with that performance," Mathews said. "They got off a brilliant start with Brendon McCullum's batting but our spinners really pulled them back by taking wickets. (Dilshan) got off to a start and once he got set he batted through, which is what we want from our first four batters."
Dilshan was the key for the visitors, combining with fellow opener Dimuth Karunaratne (21) in a 64-run opening stand before enjoying solid partnerships with Kumar Sangakkara (38), Mahela Jayawardene (27) and Mathews that kept the scoreboard ticking over at almost a run a ball.
New Zealand captain McCullum had earlier blasted 12 boundaries and five sixes to score 117, his fifth ODI century for his side, the only other bright spot in a otherwise poor performance from the hosts.
McCullum took the hosts to 158-2 in the 31st over, then New Zealand lost five wickets, four of them to run outs, for 49 runs and the captain said that had been crucial.
New Zealand 248 all out in 50 overs (B McCullum 117, Herath 2-36)
Sri Lanka 252-4 in 47.4 overs (Dilshan 116, Henry 2-34)