Prasanna Jayawardene hit 112 to put Sri Lanka in control of the first Test against a weary England in Cardiff.
James Anderson struck in the third over of the day but Thilan Samaraweera kept the tourists on top with an elegant 58.
Wicketkeeper-batsman Jayawardene then took centre stage, reaching his third Test century from 147 balls as Sri Lanka racked up 400 all out.
Captain Andrew Strauss was caught at slip in the penultimate over as England finished day two on 47-1.
The late wicket capped an excellent performance from the tourists on a day when the vulnerabilities of England's four-bowler strategy were exposed.
Part-time seamer Jonathan Trott, filling the role previously performed by Paul Collingwood, gave up 29 runs from his six overs, while the Sri Lankans coped comfortably with Graeme Swann's off-spin.
That put pressure on England's trio of seamers and when Anderson was forced off with back and side injuries - which require a precautionary scan - Strauss was left short of options.
Nonetheless, the hosts stuck to their task, with the luckless Broad eventually becoming the second youngest Englishman after Ian Botham to reach 100 Test wickets, and Swann helping to wrap up the tail.
And with plenty of batting still to come, there is every reason to believe they can get back into the game over the weekend.
With Sri Lanka resuming on 133-2, England needed early wickets on Friday morning and Anderson delivered the goods from the final ball of the third over.
It was a brilliant piece of bowling from the Ashes hero as he followed five outswingers with a fierce inswinger that caught the shoulder of Mahela Jayawardene's bat and flew to first slip, where Strauss took a sharp reaction catch.
Tharanga Paranavitana continued to favour caution over aggression as he added only seven runs to his overnight 58 in the first hour of play.
His cause was not aided by a straight ball from Chris Tremlett which struck him full in the groin, requiring lengthy treatment. The left-hander never looked comfortable thereafter, surviving a leg-before appeal from Broad before he was bowled by Tremlett two deliveries later off a thick inside edge.
Samaraweera kept the scoreboard ticking over with a regular supply of attractive boundaries, reaching 23 off 37 balls before he survived a close shave. A poorly executed cut shot looped towards Eoin Morgan at point, but the ball dropped just short of the fielder as he dived to his left.
If that incident left Tremlett cursing his luck, Broad's efforts to claim his 100th victim were littered with misfortune as Prasanna Jayawardene twice edged at a catchable height between third slip and gully.
Samaraweera reached his 26th Test fifty from 72 balls as his partnership with Jayawardene reached 84. But the second new ball proved his undoing as Anderson got a delivery to straighten off the seam and catch the outside edge before flying through to Swann at second slip.
There followed a period of immense frustration for England, and especially Broad, who had a flurry of marginal lbw appeals rejected by umpire Aleem Dar.
But the wheel of fortune turned full circle as Farveez Maharoof was run out for 16 in a desperately unlucky manner. Bowler Trott got a hand to a Jayawardene drive and deflected the ball onto the stumps, leaving Maharoof stranded as he backed up looking for a run.
New batsman Thisara Perera should have been run out in more orthodox fashion shortly afterwards when Jayawardene called him through for a suicidal single, but Kevin Pietersen's underarm throw missed the stumps by some distance.
Broad's frustrations intensified after tea when he drew a thick outside edge from Perera, only for Cook at third slip to drop a tricky chance. But the bowler finally gained the reward his exertions deserved when Perera mis-hit a drive straight to Tremlett at mid-on.
A fifty partnership between Jayawardene and Herath added to Strauss's woes, with the former reaching three figures in his first Test appearance in England.
Herath cracked 25 from 35 balls before he was caught slashing wildly at Swann, who wrapped up the innings with the wicket of Lakmal in his next over after Broad had removed Jayawardene caught behind.
Strauss and Alastair Cook made a comfortable start to England's reply as Dilshan gave all five of his frontline bowlers a try.
But just when the openers appeared to be guiding the hosts through to the close, Suranga Lakmal got one to deviate off the seam and Strauss's edge was well taken by Mahela Jayawardene at second slip.