Bangladesh all-rounder Shakib Al Hasan scored his second century in as many World Cup matches and Liton Das cracked an unbeaten 94 as they thumped twice champions West Indies by seven wickets.
Chasing 322 for a famous victory on Monday, Shakib took complete control with an unbeaten 124 off 99 deliveries, as his ninth ODI century guided Bangladesh home with 51 balls to spare.
The 32-year-old became the second Bangladesh player to pass 6000 runs in ODIs after Tamim Iqbal, making his fourth consecutive 50-plus score to move past Australia skipper Aaron Finch as the tournament's top scorer with 384 runs.
"To stay at the wicket till the end was most satisfying," man of the match Shakib said after leading the second highest successful run chase in World Cup history, matching Bangladesh's effort against Scotland four years ago.
Only Ireland have chased down a bigger total when they scored 7-329 to beat England in 2011.
"I've been working on my batting and it's paying off. I know if I bat at No.3 I'll get more opportunities, more time to bat," Shakib said.
After Bangladesh started strongly through openers Tamim (48) and Soumya Sarkar (29), Shakib and Das added 189 runs for the fourth wicket to take the game away from West Indies.
World Cup debutant Das, who smashed Shannon Gabriel for three consecutive sixes in the 38th over, scored the winning runs with a boundary off the same bowler.
The shock loss left West Indies great Curtly Ambrose seething.
“West Indies can give you a brilliant performance and then they are very, very ordinary,” Ambrose said on BBC Test Match Special.
“It was a good score but they came out and bowled absolute rubbish and the Bangladesh batsmen capitalised and won this game handsomely.
“It was a total massacre.”
‘Let ourselves down’
West Indies opener Shai Hope made a patient 96 while opener Evin Lewis and Shimron Hetmyer also made half-centuries to help the Caribbean side post 8-321 after being asked to bat first.
Hope anchored the innings superbly with his 121-ball knock while Lewis hit 70 before Hetmyer's 26-ball 50 and skipper Jason Holder's 33 off 15 balls boosted the West Indies total.
"I thought we were about 40-50 runs short, the wicket played well throughout," Holder said.
"We could have been more disciplined with the ball and we also let ourselves down in the field. It was just a situation where we never got momentum going as we should.
"No excuses, we should have been more disciplined. Having said that, every game is a final and we have to pull ourselves up," added Holder whose team are seventh in the standings and will struggle to make the semi-finals.
Bangladesh, who are fifth in the table with five points, meet holders Australia on Thursday while West Indies play New Zealand on Saturday.