Hashim Amla and JP Duminy hit half-centuries as South Africa opened a 2-0 lead in their ODI series against Sri Lanka with a five-wicket win in East London.
Asked to bat in lively conditions at Buffalo Park, Sri Lanka mustered a total of 236-6 mainly thanks to the efforts of Dinesh Chandimal.
Chandimal finished unbeaten on 92 as the tourists, bowled out for 43 in a 258-run defeat in the series opener, restored a semblance of pride.
But opening batsman Amla's run-a-ball half-century set the tone for South Africa's successful run chase and Duminy's 66 not out sealed victory in the penultimate over.
Once early-morning drizzle had cleared, Proteas skipper AB de Villiers won the toss and gave his bowlers an immediate chance to reopen fresh wounds among the visitor's top order.
Sri Lanka captain Tillakaratne Dilshan collected his second duck in a row, run out by Faf Du Plessis' direct hit in the second over, and Kumar Sangakkara made three off 28 balls before he was caught behind nibbling at a delivery from left-arm seamer Lonwabo Tsotsobe (2-43).
At 21-2 after 10 overs, Chandimal joined Upul Tharanga and the third-wicket duo forged a stand of 84.
Paceman Morne Morkel struck to end the partnership in the 29th over, Tharanga edging behind for 66 from 85 deliveries.
Morne Morkel (2-39) also removed Mahela Jayawardene, caught at fine-leg by Dale Steyn for 19 in the 38th over.
Nuwan Kulasekara hammered a quickfire 22 off 13 balls, including two sixes and two boundaries, but his knock came to an end when he became Tsotsobe's second victim, caught at mid-on by Robin Peterson.
Angelo Mathews made a useful 28, putting on 72 with Chandimal for the sixth wicket, fast bowler Steyn (1-54) had him caught at mid-off by Morne Morkel.
Chandimal batted through to the end, his 115-ball contribution contained six fours but he finished eight short of a third ODI century.
South Africa openers Graeme Smith and Amla gave the run chase a flying start with a stand of 76 in 16.3 overs.
Smith departed for 28, top edging a pull to give seamer Dhammika Prasad the breakthrough.
Amla advanced to his 16th ODI half-century, including four fours and two sixes, and added one further boundary before being bowled by Prasad for 55 playing across the line.
Prasad (3-46) claimed his third wicket in his next over, Jacques Kallis caught deep on the off-side for 37 after backing away to reduce South Africa to 153-3.
Duminy assumed control from that point, sharing in stands worth 41 and 31 with De Villiers and Du Plessis respectively.
The left-hander went to his half-century from 63 balls, boundary-less but for a solitary six.
And although he lost De Villiers (17) to a run out and Du Plessis (18) caught-and-bowled by Lasith Malinga (1-38), Albie Morkel (12no) joined him to see the Proteas home with eight balls to spare.