England held on to reach the semi-finals of the World T20 with a 10-run win over Sri Lanka in Delhi.
Sri Lanka looked beaten after they were reduced to 15 for 4 in reply to England's 171 for 4, in which Jos Buttler plundered 66 not out from 37 balls.
But captain Angelo Mathews hit five sixes in an unbeaten 54 ball 73.
With 15 required off the 20th over, Ben Stokes' yorkers did not make it easy for the Lankans, finally restricting them for 161 runs for loss of 8 wickets.
England will meet New Zealand on Wednesday if West Indies record an expected win against Afghanistan on Sunday.