New Zealand's pace bowlers tore through Sri Lanka's batting to bowl them out for 138 before tea on the second day of the first test on Saturday, leaving them 303 runs behind the hosts' first innings total.
Opening bowler Trent Boult had reduced the visitors to 15 for three before lunch before Tim Southee removed Lahiru Thirimanne (24) and Niroshan Dickwella (2) in the same over to send them tumbling to 60 for five after the break.
Neil Wagner then ran through the tail with three wickets, with Suranga Lakmal the last man out as play was slightly extended before the tea interval.
Brendon McCullum immediately enforced the follow on.
Sri Lanka captain Angelo Mathews provided some resistance with the lower order, bringing up his 19th test half century with a six off Wagner before throwing his wicket away two balls later when he was caught at third man by Tom Latham.
Wagner had also broken up a promising partnership between Mathews and Prasanna Jayawardene (10) when the wicketkeeper got a thick edge to Kane Williamson in the gully.
Williamson and Wagner combined again to dismiss debutant Tharindu Kaushal for six, before Dhammika Prassad was caught by McCullum at mid off for 18 off Jimmy Neesham.
In stark contrast to the fireworks from McCullum (195) and Neesham (85) on Friday, the ball dominated the bat on Saturday.
Sri Lanka bowled New Zealand out for 441 inside the first 30 minutes of play after they had resumed on 429 for seven and added just 12 runs, with Lakmal taking two wickets in the same over to end the innings.
Boult then blew the top off Sri Lanka's innings when he trapped openers Dimuth Karunaratne (0) and Kaushal Silva (4) in front and then had Kumar Sangakkara (6) caught by Southee at third slip.
Karunaratne was Boult's 100th test wicket.
Scoreboard
New Zealand 1st innings
Tom Latham c Kaushal b Eranga 27
Kane Williamson b Prasad 54
Ross Taylor run out 7
Brendon McCullum c Karunaratne b Kaushal 195
Jimmy Neesham c Sangakkara b Mathews 85
B.J. Watling lbw b Mathews 26
Mark Craig not out 12
Tim Southee c Thirimanne b Mathews 0
Neil Wagner c Kaushal b Lakmal 4
Trent Boult c Jayawardene b Lakmal 0
Extras (4lb,2w,7nb) 13
TOTAL (all out) 441.
Overs- 85.5. Batting time- 370 minutes.
Fall of wickets- 1—37, 2—60, 3—88, 4—214, 5—367, 6—420, 7—429, 8—431, 9—440, 10—441.
Bowling- Suranga Lakmal 19.5—3—90—3 (2nb), Shaminda Eranga 18—1—82—1, Angelo Mathews 12—2—39—3, Dhammika Prasad 12—2—62—1 (2w), Tharindu Kaushal 22—0—159—1 (5nb), Lahiru Thirimanne 2—0—5—0.
Sri Lanka 1st innings
Dimuth Karunaratne lbw b Boult 0
Kaushal Silva lbw b Boult 4
Kumar Sangakkara c Southee b Boult 6
Lahiru Thirimanne c Craig b Southee 24
Angelo Mathews c Latham b Wagner 50
Niroshan Dickwella c McCullum b Southee 2
Prasanna Jayawardene c Williamson b Wagner 10
Dhammika Prasad c McCullum b Neesham 18
Tharindua Kaushal c Williamson b Wagner 6
Shaminda Eranga not out 10
Suranga Lakmal c McCullum b Neesham 2
Extras (3lb,2w,1nb) 6
TOTAL (all out) 138
Overs- 42.4. Batting time- 309 minutes.
Fall of wickets- 1—0, 2—8, 3—15, 4—58, 5—60, 6—88, 7—105, 8—118, 9—128, 10—138.
Bowling- Trent Boult 11—4—25—3 (1w), Tim Southee 12—4—17—2, Jimmy Neesham 6.4—1—28—2 (1w), Neil Wagner 11—0—60—3 (1nb), Mark Craig 2—0—5—0.