England held their nerve to beat Sri Lanka by 10 runs in a thrilling World Twenty20 Group One match to reach the semi-finals and knocking the defending champions out of the tournament.
Jos Buttler struck a blistering unbeaten 66 to power England to a commanding four for 171 after they had made a slow start.
The 2010 winners returned to blow away Sri Lanka's top order before Angelo Mathews battled a hamstring injury to drag his team back into the match with a brilliant unbeaten 73.
Sri Lanka's defeat also dashed South Africa's hopes of qualifying for the last four.
Put in to bat, England lost Alex Hales in the second over but Jason Roy (42) and Joe Root (25) added 61 runs in 8.3 overs to steady the innings.
Leg-spinner Jeffrey Vandersay dismissed both batsmen but Buttler capitalised on the foundation, hitting eight fours and two sixes in his unbeaten 37-ball blitz to punish the Sri Lankans.
England skipper Eoin Morgan made 22 before being run out and Ben Stokes faced the final delivery of the innings from Thisara Perera which he hit for six.
Sri Lanka made a dismal start in their pursuit of a victory that would have kept their semi-final hopes alive.
Openers Tillakaratne Dilshan and Dinesh Chandimal were dismissed inside the first eight deliveries and the top order caved in as Malinda Siriwardene and Lahiru Thirimanne fell off successive deliveries.
Mathews and Kapugedera revived the chase, however, mixing caution with aggression and smashing three sixes off an Adil Rashid over that produced 21 runs.
Perera scored 20 quick runs down the order but Mathews looked tired by the end and could only score four of the 15 runs required from the last over sent down by Stokes.