South Africa recorded their second win in the Zimbabwe Triangular Series with a 61-run victory over the hosts in Harare.
The Proteas were dismissed for 231 off the penultimate ball of their 50 overs.
However Zimbabwe could only make 170 in return as Ryan McLaren and Dale Steyn took three wickets apiece.
Hashim Amla and Quinton de Kock put on 142 for the opening wicket in under 25 overs before a dramatic South Africa collapse sparked by Prosper Utseya.
The off-spinner picked up 5-36 including a hat-trick, just the second by a Zimbabwean bowler in one-day internationals.
Utseya removed opener Amla (66), but the drama came in the 27th over as de Kock (76) departed before Rilee Rossouw suffered his second first-ball duck in a row and David Miller was trapped lbw.
Four overs later, he trapped JP Duminy lbw before Zimbabwe's other off-spinner, John Nyumbu, picked up three wickets.
|South Africa: 231 all out (49.5 overs)|
|Amla||st Taylor||b Utseya||66||98||80|
|de Kock||c Chatara||b Utseya||76||107||76|
|du Plessis||c Raza||b Nyumbu||15||39||25|
|Rossouw||c Nyumbu||b Utseya||0||1|
|Abbott||c Chigumbura||b Chatara||6||21||13|
|Phangiso||c Taylor||b Chatara||13||32||19|
|Extras||0nb 12w 0b 2lb||14|
Zimbabwe’s reply started badly as Tino Mawoyo was run out without scoring, and then their slow left-armer Aaron Phangiso picked up two wickets as the hosts were reduced to 70-4.
Sean Williams top-scored with 48, but he flicked McLaren to mid-wicket in the 32nd over, and then the seamer picked up two in two balls.
Elton Chigumbura was the Zimmies’ last realistic hope, but Steyn removed him for 22 and sealed the win by having Brian Vitori caught behind.
|Zimbabwe: 170 all out (38.3 overs)|
|Mawoyo||run out (Miller)||0||5||10|
|Raza||c Miller||b Tahir||35||76||50|
|H Masakadza||b Phangiso||25||30||33|
|Williams||c Amla||b McLaren||46||77||57|
|Waller||c Rossouw||b Steyn||20||30||23|
|Chigumbura||c Rossouw||b Steyn||22||44||29|
|Utseya||c de Kock||b McLaren||5||18||9|
|Nyumbu||c de Kock||b McLaren||0||1|
|Vitori||c de Kock||b Steyn||3||7||5|
|Extras||0nb 6w 0b 2lb||8|
After chasing 328 to beat Australia on Wednesday, SA now top the table with Zimbabwe at the bottom.
All three teams meet once more before the final on September 6.