Veteran left-hander Hashan Tillakaratne became the first Sri Lankan to score a century on a South African soil, batting himself into contention for a late call-up into Sri Lanka's one-day squad on the second day of the second Test at SuperSport Park on Saturday.

Tillakaratne was discarded from Sri Lanka's original 16-man squad for the five-match one-day series that follows this Test on Thursday, but his determined unbeaten 104 has prompted a re-think with the selectors now keen for him to stay on in South Africa.

The obdurate 35-year-old, who has now scored four centuries since being recalled to the Test side in August 2001, ensured Sri Lanka reached a competitive 323 in their first innings, a significant improvement on their performance at Wanderers when they were bowled out for 192 and 130.

However, Sri Lanka then laboured hard in the field as opener Herschelle Gibbs, who missed the opening Test after suffering from back spasms on the morning of the match, and Jacques Kallis scored unbeaten half centuries during an unbroken third-wicket partnership that has so far yielded 112 runs.

After an afternoon of attritional cricket in which both sides grappled for the upper hand, South Africa finished the day on 183 for two, still 143 runs in arrears but with an opportunity to build a first-innings lead on Sunday.

Gibbs was nearly caught on 32 when he top-edged a pull and looked fortunate to survive a bat-pad appeal off spin wizard Muttiah Muralitharan, but otherwise oozed authority, finishing the day not out 76.

Kallis, the Man of the Match at Wanderers, was once again in good form, although his less than dynamic style failed to prevent the spectators filing off to watch the South Africa-Scotland rugby international during a soporific evening session. He finished the day on 69, the fifth time he has passed 50 in consecutive innings.

Sri Lanka failed to make inroads with the new ball but Dilhara Fernando, who rediscovered his bowling rhythm after an ill-disciplined performance in the first Test, grabbed two quick wickets in the afternoon.

Left-handed opener Graeme Smith was trapped lbw for 15 with Fernando's first delivery of the innings, and number three batsman Gary Kirsten was well caught for 11 off the shoulder of his bat by a Hasantha Fernando diving forward at gully.

However, the Sri Lankan bowling attack rarely threatened afterwards, Muralitharan included, and stand-in captain Marvan Atapattu was forced into employing defensive tactics for much of the evening.

Earlier in the day, Sri Lanka's tail had crumpled after a lively marathon spell from Makhaya Ntini, who took three wickets in five balls and came within a whisker of a hat-trick.

Chaminda Vaas (7) survived for 35 minutes before edging a lifting delivery, Chamila Gamage (2) prodded nervously into the hands of short leg and Dilhara Fernando (0) gloved his first ball.

On 91 when lastman Muralitharan walked out to the crease, it looked as though Tillakaratne would miss the chance to reach three figures for the tenth time in his career, but Muralitharan played with exaggerated caution and Tillakaratne eventually celebrated his hundred after a dab to third man.

Muralitharan, relieved of the responsibility, then launched an entertaining offensive, frustrating the South Africans as he clubbed five fours and a six in a 27-run cameo that carried Sri Lanka past 300.

Kallis finally ended the valuable 42-run partnership, a record for Sri Lanka against South Africa, when he clean bowled Muralitharan.

Nitini finished with four for 86, but the economical Shaun Pollock was the pick of the South African bowling with two from 51 from 29 probing overs.