Left-armer Chaminda Vaas took six for 29 in the second Test on Sunday to help Sri Lanka to a 313-run victory and their first series win over South Africa.
The touring side, who started the day on 21 for two, chasing a huge 493-run target, crumbled to 36 for five after losing three wickets in the first half hour.
A fighting 101-run sixth-wicket stand between Boeta Dippenaar (59 not out) and Mark Boucher (51) held up the Sri Lankans until Vaas returned for a second spell after lunch.
Using his reverse swing Vaas made further inroads and South Africa lost their last five wickets for 42 runs. Their 179 was their lowest total against Sri Lanka.
Sri Lanka, missing spinner Muttiah Muralitharan with a shoulder injury, won the two-match series 1-0 after the first Test in Galle was drawn.
Scoreboard
Sri Lanka (1st innings): (overnight 303-3)
M.Atapattu c Boucher b Pollock 4
S.Jayasuriya lbw Boje 43
K.Sangakkara c Kallis b Pollock 232
M.Jayawardene b Ntini 82
C.Vaas c van Jaarsveld b Pollock 10
T.Samaraweera c Ntini b Kallis 21
T.Dilshan c Kallis b Pollock 3
R.Kaluwitharana c Boucher b Hayward 7
U.Chandana st Boucher c Boje 40
R.Herath b Ntini 7
L.Malinga not out 6.
Extras: (lb-6, nb-8, w-1) 15
Total: (all out, 142.3 overs) 470
Fall of wickets: 1-4, 2-99, 3-291, 4-316, 5-392, 6-399, 7-416, 8-418, 9-437
Bowling: Pollock 30-8-81-4 (5nb), Ntini 33-6-108-2 (2nb), Hayward 17-4-75-1 (1nb), Kallis 17-6-54-1, Boje 34.3-5-102-2, Rudolph 4-0-16-0, Van Jaarsveld 7-0-28-0.
South Africa (1st innings):
G.Smith c & b Jayasuriya 65
H.Gibbs lbw Vaas 0
M.van Jaarsveld c Sangakkara b Jayasuriya 51
N.Boje b Jayasuriya 0
J.Kallis b Jayasuriya 13
J.Rudolph c Kaluwitharana b Malinga 6
B.Dippenaar c Dilshan b Rangana 25
M.Boucher not out 10
S.Pollock lbw Herath 1
M.Ntini b Herath 0
N.Hayward b Jayasuriya 1.
Extras: (b-1, lb-8, nb-8) 17.
Total: (all out, 69.1 overs) 189
Fall of wickets: 1-1, 2-109, 3-109, 4-140, 5-141, 6-166, 7-186, 8-188, 9-188.
Bowling: Vaas 7-3-10-1, Malinga 13-1-51-1 (8nb), Herath 25-6-60-3, Chandana 6-0-21-0, Dilshan 4-1-4-0, Jayasuriya 14.1-4-34-5.
Sri Lanka (2nd innings): (overnight 211-4):
M.Atapattu b Ruldolph 72
S.Jayasuriya b Boje 19
K.Sangakkara c Ntini b Kallis 64
M.Jayawardene c Boucher b Kallis 3
T.Samaraweera not out 21
T.Dilshan not out 23.
Extras: (b-6, lb-1, nb-1, w-1) 9
Total: (four wickets declared, 55 overs) 211
Fall of wickets: 1-46, 2-142, 3-149, 4-179
Did not bat: C.Vaas, R.Kaluwitharana, U.Chandana, R.Herath, L.Malinga
Bowling: Pollock 8-0-46-0, Ntini 4-0-19-0 (nb-1), Boje 23-6-81-1, Hayward 3-1-15-0, Smith 4-0-15-0 (w-1), Kallis 6-2-6-2, Rudolph 7-2-22-1
South Africa (2nd innings) (overnight 21-2):
G.Smith c Samaraweera b Malinga 17
H.Gibbs c Samaraweera b Malinga 4
M.van Jaarsveld b Vaas 2
J.Kallis c Dilshan b Vaas 3
J.Rudolph c Malinga b Vaas 1
B.Dippenaar not out 59
M.Boucher c Kaluwitharana 51
S.Pollock c Atapattu b Dilshan 3
N.Boje lbw Vaas 16
M.Ntini c Kaluwitharana b Vaas 0
N.Hayward c & b Malinga 1.
Extras: (b-6, lb-3, nb-12, w-1) 22.
Total: (all out, 67 overs) 179
Fall of wickets: 1-4, 2-18, 2-24, 4-36, 5-36, 6-137, 7-140, 8-163, 9-163, 10-179
Bowling: Vaas 18-8-29-6, Malinga 13-1-54-3 (nb-11), Jayasuriya 9-3-22-0, Herath 8-5-13-0, Chandana 7-1-26-0 (nb-1, w-1), Dilshan 12-6-26-1.
Result: Sri Lanka win match by 313 runs and series 1-0
First Test: Galle - match drawn