Stuart Broad took 5-37 on his return from injury as England struggled to a 16-run victory over Canada in its first World Cup warmup match on Wednesday.
Canada was reeling at 5-28 at one stage as it chased England's total of 243 from 49.4 overs.
But Rizwan Cheema hit 93 in 71 balls, a innings that made the final overs much closer than England would have liked against one of the weakest teams in the tournament, which starts Saturday.
"At the end of the day, one bloke from Canada played absolutely beautifully," said England batsman Kevin Pietersen, who played his first match in his new position as No. 2.
"He hit the ball right out of the middle of the bat. It's hats off to him, but we still won the game."
Matt Prior (78) and Jonathan Trott (57) were England's top scorers, but other batsmen failed to deliver.
Broad, whose aggressive spells can be game-changers against much stronger opposition than Canada, missed England's recent 6-1 one-day series defeat in Australia after sustaining an abdominal tear in December. His last one-day international was in September.
He bowled Nitish Kumar in his first over, and later got Ruvindu Gunasekera (7) and captain Asish Bagai (5) caught behind. Ajmal Shahzad, also back from injury, picked up the scalps of John Davison and Jimmy Hansra.
However, Pakistani-born Rizwan Cheema, whose average is 28 in 21 one-day internationals, quickly blunted the England attack.
He hit six sixes and smashed Broad for 14 runs in one over before the English bowler had him caught. With Cheema gone, Canada continued to press, thanks to another Pakistan-born player, Kurram Choran, who hit 44 but was trapped lbw by Broad to end the innings on 46.1 overs.
England's batting performance at the Khan Saheb Osman Ali Stadium in Dhaka was patchy, with batsmen struggling to play the new ball in the hands of paceman Chohan (3-34) and medium pacer Harvir Baidwan (3-50) on a slow pitch.
Opener and captain Andrew Strauss was out for one run in the second over, caught behind after flashing at a ball outside the off stump. He was one of five English batsman to be out for less than 10 runs.
Pietersen was getting into his stride on 24 when he clipped an inside edge onto his wicket while trying to push a single. The South African-born batsman, one of the very best in one-day cricket on his day, had similarly struggled at times during England's defeat in Australia, where he averaged 30 in his six innings.
Paul Collingwood, back from injury after a disappointing time in Australia, was stumped on nine after coming up the wicket to try and drive Balaji Rao over the spinner's head.
Trott and Prior, who hit four boundaries and one six, put together a partnership of 64 and were beginning to look comfortable. Trott, England's top scorer in Australia, was caught after mis-hitting a sweep off Davison, who had been hit for 12 runs the previous over. Prior, hitting out toward the end of the innings, was bowled by Baidwan.