Winger Louis Ludik and flanker Iain Henderson scored the tries as Ulster beat Scarlets to make it three wins out of three and send them top of Pro12.
The Welsh club have now lost all three of their matches so far.
Ludik got the first try in the 19th minute as Ulster carved out an 11-point half-time lead.
Scarlets replacement flanker Will Boyde cut the deficit to six with a try five minutes from the end but the returning Henderson scored the clincher.
The hard-fought victory puts Ulster top of the table, although Ospreys will move above them if they beat Treviso on Saturday night.
Ulster may feel they could have scored more tries against Scarlets, particularly in the first half, but coach Les Kiss will be satisfied with the 100% start to the campaign.
Repeated indiscipline by Scarlets in the early stages of the game allowed the returning fly-half Paddy Jackson the chance to send two penalties through the posts for 6-0.
The home side remained camped in the opposition half and good handling was rewarded with the first try. After good work from Jackson and Stuart Olding saw Stuart McCloskey break free down the left, Ludik ran the inside line to receive the off-load and cross the line.
Ulster’s lead looked certain to be further extended when Craig Gilroy broke free on the right wing, but Wales international Liam Williams displayed pace and power to tackle the winger into touch inches from the line.
Second row Jake Ball was sin-binned shortly before the end of the half for some illegal work at a ruck but Ulster could not capitalise on their numerical advantage as loose passes began to creep into their backline.
Fly-half Rhys Patchell got the Welsh side off the mark with a 48th-minute penalty after Robbie Diack was penalised for blocking a quick tap penalty.
The game then became disjointed with McCloskey and his replacement Luke Marshall going off injured but Ulster secured a kickable penalty and with just 10 minutes on the clock Jackson slotted the kick.
Scarlets got a try five minutes from time when the ball was shifted to the right for Boyde to neatly finish in the corner.
Any notion of a second-half Scarlets comeback was put to bed in the final minute of the game, when Henderson drove over the line after a powerful catch and drive from a line-out on the 22.
Ulster: Piutau, Gilroy, Olding, McCloskey, Ludik, Jackson, Pienaar, Black, Herring, Ah You, Browne, O’Connor, C. Ross, Reidy, Diack, L. Marshall.
Replacements: L. Marshall for Olding (64), Warwick for Black (64), Kane for Ah You (53), van der Merwe for Browne (56), Lyttle for L. Marshall (68).
Not used: Andrew, Henderson, Lloyd.
Scarlets: Thomas, L. Williams, J. Davies, Parkes, S. Evans, Patchell, G. Davies, W. Jones, Owens, Kruger, Ball, Bulbring, Rawlins, J. Davies, Barclay.
Replacements: S. Williams for Thomas (54), Hughes for S. Evans (76), A. Davies for G. Davies (57), Garrett for W. Jones (68), Elias for Owens (79), Edwards for Kruger (52), Beirne for Rawlins (68), Boyle for Barclay (64).
Sin bin: Ball (36).
Ref: Ben Whitehouse (Wales).
Article source: http://www.bbc.co.uk/sport/rugby-union/37352790