England's Under-20s booked their place in the final of the IRB Junior World Championships after a 26-18 win over South Africa in Cardiff.
Prop Alex Corbisiero's second-half score added to first-half tries from Joe Simpson and Noah Cato.
Tries from Gerrit Jan van Velze and Cecil Afrika kept South Africa in touch, but England held on to win.
They will now face New Zealand, who beat Wales 31-6 in the other semi-final, in Swansea on Sunday.
The hosts will play South Africa for the third place play-off at the Liberty Stadium before the final.
New Zealand had led 10-6 at the break, a far closer margin than expected.
Wales often matched last season's Under-19 world champions for muscle, but failed to take their best chances.
Instead they had to rely on the prodigious boot of Leigh Halfpenny for a penalty brace in reply to New Zealand's two tries.
The first fell to hooker Quentin MacDonald, who gathered a cross-kick to beat Halfpenny to the corner.
That eighth-minute try was followed by prop Paea Fa'anunu claiming the score after the New Zealand forwards ploughed over from close range.
Full-back Trent Renata kicked his first points of the night after Wales were caught offside and he soon added a second to stretch his side's lead to 10 points after 54 minutes.
The score lifted New Zealand and they began to turn the screw, first with an outstanding, sweeping move that ended with number 8 Nasi Manu going over at the corner.
Renata added a penalty before wing Sean Maitland worsened Welsh woes by finishing off Zac Guildford's counter-attack at the corner the full-back converted from the touchline.
Wales U20: Daniel Evans (Scarlets); Leigh Halfpenny (Blues), Jonathan Davies (Scarlets), Gareth Owen (Ospreys), Jimmy Norris (Dragons); Dan Biggar (Ospreys), Rhys Webb (Ospreys); Ryan Bevington (Ospreys), Ryan Prosser (Bristol), Scott Andrews (Blues), Haydn Pugh (Scarlets), Josh Turnbull (Scarlets), Justin Tipuric (Ospreys) Dan Franks (Blues), Sam Warburton (capt, Blues).
Replacements: Ben Roberts (Dragons), Sam Hobbs (Blues), Patrick Palmer (Blues), Lloyd Phillips (Scarlets), Ashley Sweet (Dragons), Gareth Williams (Ospreys), Luke Ford (Blues).
New Zealand U20: Trent Renata; Zac Guildford, Kade Poki, Ryan Crotty, Sean Maitland; Daniel Kirkpatrick, Aaron Smith; Paea Fa'anunu, Quentin MacDonald, Ben Afeaki, Chris Smith (capt), Sam Whitelock, Matt Luamanu, Luke Braid, Nasi Manu.
Replacements: Ash Dixon, Toby Smith, Josh Townsend, Peter Saili, Grayson Hart, Jackson Willison, Andre Taylor.
Referee: Romain Poite (France).