Marchant de Lange took four wickets on debut, but Thilan Samaraweera's unbeaten 86 saw Sri Lanka hold their own on the opening day of the second Test between South Africa and Sri Lanka at Kingsmead.
De Lange made the initial breakthroughs for South Africa, then struck with the final ball of the day to leave Sri Lanka on a somewhat precarious 288 for seven at the close of play.
On a good batting wicket anything less than 350 would be below par for Sri Lanka, particularly after they won the toss and opted to bat first, and the Proteas will be confident of knocking over the tail with the second new ball on the second morning.
They might struggle to get through Samaraweera, however, after he showed resilience and intelligence to rescue Sri Lanka from the worrying position of 162 for five.
Samaraweera added 111 runs for the sixth wicket with debutant Dinesh Chandimal to drag the tourists to a position of parity, before the second new ball did its trick with two late wickets.
The Kingsmead pitch did not offer as much assistance as what the bowlers enjoyed in Centurion, but the 21-year-old de Lange still found enough movement to dismiss the left-handers Tharanga Paranavitana and Kumar Sangakkara in the space of three deliveries to make the first breakthrough for the Proteas.
Both were caught behind by Mark Boucher, with the delivery to Sangakkara particularly deadly as it hit the seam and eased away from the former Sri Lanka captain.
Dale Steyn and Morne Morkel had both endured wicketless opening spells in the morning as Tillakaratne Dilshan rode his luck with a few wild drives, making de Lange's success extra pleasing for the Proteas.
The rookie fast bowler generated good pace off his relatively short run-up and regularly targeted the batsmen's heads with some powerful short deliveries.
His initial four-over burst brought him 2 for 5, but an expensive end to the session allowed Mahela Jayawardene and Thilan Samaraweera to level things up somewhat as Sri Lanka went to lunch on 112 for three.
Jayawardene clipped his ninth delivery for a single to go to 10,000 Test runs, making him the ninth batsman to do so after Sachin Tendulkar, Rahul Dravid, Ricky Ponting, Jacques Kallis, Brian Lara, Allan Border, Steve Waugh & Sunil Gavaskar.
Legspinner Imran Tahir was the other bowler to claim a wicket in the morning after he was thrown the ball at an early stage, but he was guilty of being far too loose and conceded 37 runs from his seven overs before the lunch break.
Even his wicket was from a poor delivery, ans Dilshan shovelled a low full toss straight to Morkel at deep fine leg to depart for 47.
Tahir bowled from one end for the majority of the second session as the Proteas took a somewhat defensive approach as the pitch flattened out, after Morkel had struck to remove Jayawardene.
The right-hander was beaten for pace in the second over after lunch to be bowled for 31, and when de Lange then got the better of Mathews - brilliantly caught and bowled - the Sri Lankans were in trouble.
However Samaraweera and Chandimal dug in to see the tourists through to the tea break, and were only parted when the latter had a needlessly wild swing at a short ball from Morkel and edged through to Boucher.
Thisarar Perera was his replacement, but it didn't take de Lange long to work out that the left-hander was susceptible to the short ball. Perera survived a couple, but was found out in the final over of the day as he fended one straight to Hashim Amla at short leg to end a fine Boxing Day of cricket with both sides feeling fairly satisfied.
De Lange was the only change made by the Proteas in the wake of Vernon Philander's knee problem, while Sri Lanka also made one change as wicketkeeper Kaushal Silva was dropped and replaced by Chandimal.