South Africa won the second Test against Bangladesh by an innings and 48 runs on Friday after three middle-order run-outs contributed to the visitors' feeble second innings 131 all out.
Ashwell Prince was named man-of-the-match and the series after scoring a Test best 162 not out in South Africa's 429 which gave the home side a platform to complete a second innings victory in the two-test series.
Bangladesh, trailing by 179 runs on the first innings, lost the key wickets of Mohammad Ashraful (21), Mehrab Hossain (0) and Raqibul Hasan (28) to direct hits by Dale Steyn, Hashim Amla and Prince respectively.
Makhaya Ntini bowled Mushfiqur Rahim (4), who shouldered arms, with the first ball after tea and Monde Zondeki then claimed two wickets in the closing stages.
Raqibul was the longest survivor, lasting for 80 minutes, while opener Tamim Iqbal scored a determined 20 before Neil McKenzie took a thrilling one-handed catch, diving full-length in the gully, to intercept a square-drive off Morne Morkel.
Mashrafe Mortaza was left not out on 23.
Jacques Kallis had sparked the collapse after lunch with a spell of intimidatory bowling that unnerved Zunaed Siddique woh was caught off a short ball for 16.
Morkel then struck in his first over, before two run outs left Bangladesh reeling at 68 for five. He claimed a second wicket when a loose cut by Shakib Al Hasan (2) gave Ntini a catch on the third man boundary.
Bangladesh lost a wicket to the penultimate ball before lunch as Imrul Kayes (5) edged a back-foot defensive stroke off Ntini to first slip.
Earlier, centuries by Prince and Mark Boucher (117) were countered by left-arm spinner Shakib's six for 99 from 28 overs.
Shakib ended Prince and Mark Boucher's sixth-wicket stand of 271 an hour into the day's play and took two wickets in the next three balls, sparking a collapse in which South Africa lost their last five wickets for 24 runs.