A dramatic batting collapse turned the second and final Test England's way at Old Trafford after Bangladesh opener Tamim Iqbal crashed his second exhilarating century in as many matches on Saturday.
Off-spinner Graeme Swann took five for 76 as Bangladesh, replying to England's 419, slumped from 126 for nought to 216 all out.
England captain Andrew Strauss must now decide overnight whether to enforce the follow-on at the start of play on the third day on Sunday.
It was quite a turnaround after Tamim's breathtaking 108 from 114 balls, his fourth Test century, and Bangladesh now seem unlikely to grab the victory they need to draw the series.
Earlier, overnight batsman Ian Bell (128) scored his 11th Test century and put on 153 for the sixth wicket with Matt Prior (93).
Bangladesh skipper Shakib Al Hasan produced a late burst of wickets to finish with five for 121.
The day, though, belonged to Tamim again.
Following his sparkling knocks of 55 and 103 in the first Test at Lord's, the aggressive youngster cut, drove and slashed anything loose in an innings reminiscent of India's fast-scoring opener Virender Sehwag.
He initially provided Strauss with a major problem as England's four-man attack struggled in hot and sunny conditions.
Tamim skipped down the pitch and drove Swann over long-on for six to reach his 50 in 43 balls and went on to crack a total of 11 boundaries before he was caught behind off James Anderson trying to cut.
Earlier, he shared an opening stand of 126 with Imrul Kayes who fell for 36 when he hooked paceman Steven Finn to fine leg.
After England resumed their first innings on 275 for five, Bell reached his century before being bowled by a sharply spinning delivery from Shakib.
Prior then seemed set for his own ton until he offered a catch off Shakib while reverse sweeping.
England (1st innings):
A. Strauss c Kayes b Shafiul 21
A. Cook c Siddique b Razzak 29
J. Trott b Shafiul 3
K. Pietersen st Rahim 64
I. Bell b Shakib Al Hasan 128
E. Morgan c Jahurul b Shahadat 37
M. Prior c Jahurul b Shakib 93
G. Swann lbw b Razzak 20
A. Shahzad c Razzak b Shakib 5
J. Anderson not out 2
S. Finn lbw b Shakib 0
Extras: (b 6, lb 5, w 4, nb 2) 17
Total: (all out; 121.3 overs) 419
Fall of wickets: 1-44, 2-48, 3-83, 4-153, 5-223, 6-376, 7-399, 8-414, 9-419, 10-419.
Bowling: Shahadat 21-3-84-1 (2nb, 3w), Shafiul 21-2-63-2 (1w), Mahmudullah 12-1-31-0, Shakib 37.3-4-121-5, Razzak 30-3-109-2
Bangladesh (1st innings):
Tamim c Prior b Anderson 108
Kayes c Shahzad b Finn 36
Siddique c Prior b Swann 1
Jahurul b Swann 5
Ashraful c Morgan b Shahzad 11
Shakib c Anderson b Swann 10
Rahim c Anderson b Swann 11
Mahmudullah b Shahzad 8
Shafiul b Shahzad 4
Razzak not out 0
Shahadat lbw b Swann 0
Extras: (3-nb, 8-w, 4-b, 7-lb) 22
Total: (all out; 54.1 overs) 216
Fall of wickets: 1-126, 2-153, 3-169, 4-169, 5-185, 6-200, 7-210, 8-214, 9-216, 10-216.
Bowling: Anderson 14-4-45-1, Finn 8-1-39-1, Swann 22.1-4-76-5, Shahzad 10-2-45-3.