Dinesh Chandimal and Dimuth Karunaratne obstinately defied New Zealand's bowlers for much of the second day of the first Test at University Oval in Dunedin on Friday though the hosts still have the upper hand.
In stark contrast to New Zealand's run rate of 4.49 runs per over in their first innings total of 431, Sri Lanka inched their way to 197 for four at the close of play at a comparatively sedate 2.43.
Chandimal was on 83 and within sight of his sixth Test century while Kithuruwan Vithanage, who was dropped by Kane Williamson at short cover on six, was on 10 with their side still 234 runs behind the hosts' first innings score.
The 26-year-old Chandimal, his country's leading Test run scorer in 2015, had earlier combined with Karunaratne (84) in a patient 122-run third wicket partnership that had rescued their side after an early collapse.
The pair had come together at 29-2 shortly before lunch after wicketkeeper BJ Watling had taken two catches with Kusal Mendis (eight) and Udara Jayasundera (one) both dismissed.
Karunaratne and Chandimal were then content to drop anchor against the four-pronged New Zealand pace attack and scored at a serene rate to stay together until after tea.
Left-arm spinner Mitchell Santner, however, managed to break their partnership when Karunaratne went to cut a delivery that did not turn and only succeeded in getting an edge to Watling for his third catch of the innings.
The 30-year-old took his fourth catch when Tim Southee tempted Angelo Mathews with a full delivery on leg stump and he got a faint inside edge before the ball also brushed his pad.
Umpire Nigel Llong, who was the centre of controversy as the third umpire in New Zealand's last test in Adelaide, initially gave the Sri Lankan captain not out but Paul Reiffel overturned the decision after Brendon McCullum asked for a review.
Nuwan Pradeep had earlier mopped up the New Zealand tail by capturing the last two wickets as the hosts were bowled out for 431, having added 22 runs to their overnight total.
Doug Bracewell was the last man out for a career-best 47, when he was trapped lbw by Pradeep, who finished with figures of 4-112.
Opener Martin Guptill (156), Kane Williamson (88) and captain Brendon McCullum, who belted a scintillating 75 off 57 balls, scored the majority of New Zealand's runs.
New Zealand 1st innings (overnight 409-1)
M. Guptill c Chandimal b Mathews 156
T. Latham c & b Lakmal 22
K. Williamson c Karunaratne b Pradeep 88
R. Taylor lbw Pradeep 8
B. McCullum c Vithanage b Siriwardana 75
M. Santner c Chandimal b Chameera 12
B. Watling c Vithanage b Chameera 5
D. Bracewell lbw Pradeep 47
T. Southee c Siriwardana b Lakmal 2
N. Wagner c Jayasundera b Pradeep 7
T. Boult not out 0
Extras: (B-4, LB-3, W-1, NB-1)9
Total: (for 10 wickets, 96.1 overs)431
Fall of wickets: 1-56, 2-229, 3-245, 4-334, 5-359, 6-365, 7-394, 8-399, 9-426, 10-431.
Bowling: Lakmal 16-1-69-2, Pradeep 23.1-2-112-4, Mathews 9-2-28-1, Chameera 20-2-112-2, Herath 19-1-46-0, Jayasundera 5-0-33-0, Siriwardana 4-0-24-1
Sri Lanka 1st innings
D. Karunaratne c Watling b Santner 84
K. Mendis c Watling b Boult 8
U. Jayasundera c Watling b Wagner 1
D. Chandimal not out 83
A. Mathews c Watling b Southee 2
K. Vithanage not out 10
Extras: (B-1, LB-4, NB-4)9
Total: (for 4 wickets in 81 overs)197
Fall of wickets: 1-19, 2-29, 3-151, 4-156.
Bowling: Boult 16-5-38-1, Southee 16-4-35-1, Bracewell 16-4-29-0, Wagner 13-2-53-1, Santner 19-6-37-1, Williamson 1-1-0-0.