JOS Buttler's second successive one-day international century powered England to their second-highest 50-over total, against South Africa at the Mangaung Oval.

Buttler (105) followed up his 46-ball century, in his last attempt in this format against Pakistan in Dubai, with another blaze of fours and sixes as England piled up 399 for nine.

They therefore fell just short of their all-time best 408 for nine, against New Zealand at Edgbaston just last summer - with half-centuries from Alex Hales (57), Joe Root (52) and Ben Stokes (57) helping to hit a national record 15 sixes in this series opener.

Buttler's fourth ODI century was, curiously, his slowest - but still pretty good going by anyone else's standards, coming from 73 balls and containing 10 fours and five sixes after England had won the toss.

Openers Jason Roy, cleared to play after recovering from a back spasm, and Hales each did their considerable bit to set the tempo.

Roy took particular toll of Marchant de Lange, in a new-ball spell of 3-0-31-0 only to then poke a catch to cover two short of his 50 in Morne Morkel's first over.

Another bowling change at the Loch Logan End, De Lange back this time, did for Hales too - mistiming to mid-off, after he had passed his 50 in 40 balls.

Eoin Morgan responded by promoting Buttler ahead of him - and as in England's previous ODI, it proved a very wise move.

Root facilitated Buttler in a stand of 97, rotating the strike and picking off the bad ball, until he was yorked by Chris Morris (three for 74).

Morgan could not keep Buttler company so substantially, chipping a catch off Imran Tahir which was well-held by Morkel - running in from the long-off boundary.

Buttler had begun his innings with a conservative two runs from his first 10 balls, and was within one delivery of playing out a maiden off De Lange before pushing a single.

The power hitting was not long delayed, though, and there was precision too - his only moment of even comparative fortune coming on 68 when Farhaan Behardien just failed to pull off a brilliant one-handed catch on the square-leg boundary, instead having to settle for saving five runs off a Tahir full-toss.

Buttler eventually went in anti-climax, pushing a catch to cover off Behardien's medium-pace in the 43rd over.

But England still had the remaining firepower, even as wickets tumbled, to club 102 from their last 10 overs - thanks mostly to Stokes.