Bangladesh vs England, 1st Test Day 3 at Chittagong
Moeen Ali struck on the second ball of Day 3, dismissing overnight batsman Shakib-al-Hasan.
The pair added a match-altering sixth-wicket stand of 127 runs.
Stokes fell for 85 but his effort ensured England finished the day with a sizeable lead of 273 runs.
Shakib-al-Hasan then dismissed Joe Root and Ben Duckett to put the pressure back on the visitors before Lunch.
England had a stuttered start as Alastair Cook was sent packing early by Mehedi Hasan.
Ben Stokes used reverse swing to full use as he picked up three quick wickets to wrap up Bangladesh's essay. The hosts went from 221 for 5 to 248 all out.
Moeen Ali showed some resistance but soon became Shakib's 150th Test dismissal.
After his exploits with the ball, Ben Stokes came to England's rescue with the bat.
Jonny Bairstow kept Stokes good company and in the process became the wicketkeeper-batsman with most runs in a single calendar year - beating the previous best, held by Zimbabwe's Andy Flower.