Kumar Sangakkara took full advantage of being dropped in the first over of the day to score his 28th Test century as Sri Lanka took firm control of the second test against South Africa on Wednesday.
Sangakkara made a punchy, but elegant 108 for the tourists who reached 256 for seven in their second innings before bad light stopped play an hour after tea on the third day at Kingsmead.
Sri Lanka's lead is a commanding 426 after South Africa produced a largely lacklustre showing with the ball in conditions that suited the pace bowlers.
Sangakkara received able assistance from Thilan Samaraweera (43) and impressive debutant Dinesh Chandimal (54) as Sri Lanka built on their 170-run first-innings lead in determined fashion.
The World's No. 1 ranked batsman played with great control, stroking 13 fours off 190 balls, having been dropped behind the wicket off Morne Morkel in the first over of the day when on three.
South Africa had to wait until the fourth over before the close to get Sangakkara's wicket, the left-hander miscuing a leg-side heave against leg-spinner Imran Tahir and being caught at deep mid-off.
The arrival of Chandimal has provided another exciting strokeplayer for the Sri Lankans and the 22-year-old made his second successive half-century of the match, off 84 balls.
His dismissal, edging a delivery that nipped away from the bat to wicketkeeper Mark Boucher, provided some late cheer for fast bowler Dale Steyn, who was not at his best but finished with three for 54 in 16 overs.
Sangakkara had overpowered the South African attack as he led Sri Lanka to 207 for five at tea.
Samaraweera proved an effective ally for Sangakkara in a fourth-wicket stand of 94 before being bowled by Tahir.
Angelo Mathews (3) chased after a short delivery from Steyn that was way outside off-stump and ended up edging a simple catch to Boucher.
Wicketkeeper/batsman Chandimal then joined Sangakkara and helped add 104 for the sixth wicket.
Sangakkara dragged Sri Lanka out of trouble after they had slipped to 20 for two, but the tourists could have been in serious difficulty if a chance he offered had stuck.
Sangakkara edged Morkel, the catch heading straight to Graeme Smith at first slip, but Boucher reacted late, flinging out his glove in front of the captain's face, distracting him and causing him to drop the catch.
The start of play was delayed for an hour while the outfield dried after morning and overnight rain.
Two wickets fell in the play that was possible, with Morkel claiming the wicket of Tharanga Paranavitana for nine before Mahela Jayawardene, who became the first Sri Lankan and ninth batsman overall to reach 10,000 Test runs in the first innings, was leg before for 14.