James Anderson, fresh from taking his 300th test wicket on Friday, completed figures of five for 47 and Steven Finn took four for 63 as England secured a first-innings lead of 25 runs.
Alastair Cook survived a huge appeal for caught behind off the second ball of England's second innings bowled by Trent Boult and he and Nick Compton took the hosts to lunch at 12 for no wicket.
After New Zealand had resumed on 153 for four, Stuart Broad struck in his first over of the day, New Zealand captain Brendon McCullum driving loosely at a full-length delivery and nicking the ball to wicketkeeper Matt Prior.
The obdurate Kane Williamson, badly dropped by Prior when he had made 23, clipped Broad for two through mid-wicket to reach his fifty off 158 balls, an innings of intense concentration spanning over four hours.
BJ Watling was spilled by Jonathan Trott at third slip off Broad, a difficult but catchable chance, and he survived a loud shout for lbw in the same over.
Williamson struck the first four of the day in the 10th over but he was out for 60 when he glanced a leg-side ball from Anderson through to Prior.
Tim Southee greeted Finn to the attack with successive fours through mid-off but the pace bowler quickly took revenge when the batsman tried to pull him for another boundary and skied the ball into the covers where Joe Root took a simple catch.
Anderson picked up his fifth wicket by bowling Bruce Martin for a duck, the fast bowler producing a perfect seaming delivery to clip the top of off stump. It was Anderson's 13th five-wicket haul in 81 tests.
Finn wrapped up the tail, Watling edging a short ball through to Prior for 17 and Trent Boult prodding a simple catch to Anderson at gully.