New Zealand need just eight more wickets to complete an innings victory over Sri Lanka at Wellington and a clean sweep of their two-test series.
Dismissed for 164 runs in their first innings - still 416 behind the Blackcaps - the tourists were asked to follow on and reached stumps on the third day at 113/2 in their second dig, with a formidable task ahead to stave off defeat.
Sri Lanka captain Dimuth Karunaratne had the dubious distinction of celebrating two half-centuries - and two dismissals - on the same day, as he tried valiantly to keep his side in the contest.
Resuming at 26/2, the visitors lost two quick wickets of nightwatchman Prabath Jayasuriya and batting star Angelo Mathews, before Karunaratne and Dinesh Chandimal put on 80 runs for the fifth wicket.
Sri Lanka reaching lunch at 109/4, but capitulated in the afternoon session, losing 6/55 and their last four wickets for just eight runs.
Karunaratne held their innings together, but when he departed for 89, caught by Tom Latham off Michael Bracewell's spin, his team were still well short of avoiding the follow-on.
Bracewell enjoyed a dream day with the ball and in the field, taking 3/50, gobbling up a catch from wicketkeeper Nishan Madushka off Matt Henry and running out Rasun Rajitha off a throw from Latham.
Blackcaps skipper Tim Southee had little hesitation enforcing the follow-on and Sri Lanka made a much better first of things second time round, despite losing opener Oshada Fernando cheaply.
Karunaratne brought up his second fifty from 114 balls, but departed again one run later. He and Kusal Mendis combined for 71 runs for the second wicket, and the latter also reached his half-century before stumps.
Southee and Doug Bracewell had the wickets for New Zealand, and Mendis and Mathews will need to lead the resistance, if Sri Lanka are to survive Monday's fourth day.
NZ 580/4d (Williamson 215, Nicholls 200no, Conway 78; Rajitha 2/126) Sri Lanka 164 (Karunaratne 89, Chandimal 37, Henry 3/44, M Bracewell 3/50) & 113/2 (Karunaratne 51, Mendis 50no)
New Zealand lead by 303 runs