Cardiff: Shakib Al Hasan and Mahmudullah both made hundreds as Bangladesh kept their hopes of a Champions Trophy semi-final alive with a stunning five-wicket win over New Zealand at Cardiff on Friday.
Bangladesh, chasing a modest 266 for victory, had collapsed to 12 for three when left-hander Shakib (114) came in.
And they were not much better off when Mahmudullah (102 not out) walked out at 33 for four.
New Zealand vs Bangladesh: As It Happened
But their fifth-wicket partnership of 224 -- Bangladesh's highest-ever one-day international stand -- transformed the match.
Shakib fell just before the finish but when Mosaddek Hossain, who'd earlier justified his recall with three wickets, edged Adam Milne for a four, the Tigers had finished on 268 for five and won with 16 balls to spare.
This defeat ended New Zealand's hopes of reaching the last four.
This was the latest upset in a week of surprises at the Champions Trophy, a tournament featuring the world's top eight ODI sides, after Pakistan's win over top-ranked South Africa and Sri Lanka's defeat of title-holders India.
It was also another memorable Bangladesh triumph in Cardiff following their shock 2005 ODI win over Australia on this ground.
But despite this sensational success they still need already-qualified England to beat Australia at Edgbaston on Saturday or hope that the match ends -- as both Australia's previous Group A fixtures have done -- in a no result if they are to reach the semi-finals.
Bangladesh's run chase suffered a dreadful start when Tamim Iqbal, fresh from scores of 128 and 95 against England and Australia respectively, was lbw for a second ball duck to Tim Southee.
Southee then had Sabbir Rahman edging to wicket-keeper Luke Ronchi.
And Soumya Sarkar was lbw to Southee, Bangaladesh were 12 for three.
The 28-year-old Southee had then taken three wickets for 10 runs in 16 balls.
Bangladesh lost another key batsmen cheaply when the experienced Mushfiqur Rahim (14) was bowled by Milne.
Bangladesh were now 33 for four in the 12th over but, importantly, still had plenty of overs left in which to chase down their target.
Mahmudullah got the Bangladesh fans in a sparse crowd cheering when he pulled Jimmy Neesham for a six and a four off successive deliveries.
In a desperate bid to break the stand, Williamson brought himself on to bowl his occasional off-spin but Mahmudullah hit him for six over long-on and Shakib drove him for a four.
Nothing Williamson tried worked, with Shakib completing his century in style when he pulled Milne for six.
He later blazed two successive boundaries off Trent Boult before, next ball, the left-arm paceman bowled him to end a 115-ball innings featuring 11 fours and that lone six.
But by then Bangladesh were almost home at 257 for five.
Mahmudullah followed Shakib to a century by launching Boult over square leg for his eighth four in 102 balls.
Earlier, Bangladesh restricted New Zealand to 265 for eight after Williamson won the toss.
Recalled bowlers Mosaddek (three for 13 in three overs) and Taskin Ahmed (two for 43 in eight) did the bulk of the damage.
New Zealand were well set while Williamson (57) and Ross Taylor (63) shared a stand of 83 -- their third fifty partnership in as many matches this tournament.
But, as happened in their no-result washout with Australia and defeat by England, the Blackcaps' innings collapsed once the experienced batsmen were out in quick succession.
Williamson, who made 100 and 87 against England and Australia respectively, needlessly ran himself out when he set off for a non-existent single after Taylor turned Shakib to Mosaddek at short fine leg.
With Taylor not moving, Williamson, going back, was run out at the non-striker's end as Shakib tidied up a wayward throw from Mosaddek.
Taylor exited soon afterwards when he lobbed a catch to short fine leg after mistiming an extravagant 'ramp' shot off Taskin and the innings never recovered.