Ulster closed the gap on Munster at the top of the RaboDirect PRO12 table to six points after beating their pace-setting visitors 29-19 at Ravenhill.
Tries from Jared Payne and Darren Cave saw Ulster emerge victorious in a relentlessly physical inter-provincial league encounter.
Munster replied with superb forward tries from Dave Kilcoyne and James Coughlan, along with a first half effort from Ivan Dineen.
The visitors nearly sneaked the win with a marvellous second half performance, but the hosts clung on by the skin of their teeth to secure victory in this bruising derby.
It was the home team that made the better start, and they dominated possession in the first two minutes thanks to some careless Munster play.
Ulster opened the scoring on three minutes when Pienaar nailed a penalty after Peter O'Mahony had been caught in an offside position.
And the home team increased the lead on five minutes when full-back Payne gathered up a chip from Jackson to touch down under the posts. Pienaar converted to make it 10-0 to the Ravenhill men.
Keatley had a good chance to equalise proceedings on eight minutes, but misjudged his kick. Their trusty South African scrum-half extended Ulster's lead on seventeen minutes to earn the hosts a 13-0 advantage.
Ulster's dominance on the scoreboard, against the run of play it has to be said, was aided by Keatley's profligate kicking. Munster were enjoying the lion's share of possession with Casey Laulala and O'Mahony running hard, direct lines. But the home defence cleverly kept them at bay, while the Ulster back row was having the better of the breakdown battle at this stage.
The hosts were now inserting a degree of enterprise into their game. Cave finished off one such neat passage when he scored a well-worked try in the corner. Pienaar converted to make it 20-0, and at this point it was looking like a fairly good first period for the hosts.
But the visitors struck back superbly; with big centre Dineen powerfully breaching the Ulster defence. But Ulster earned a reprieve when Keatley missed his conversion to leave the score at 20-5.
Munster emerged much more defiant and purposeful in the second half, and Kilcoyne managed to work his way over the whitewash from an excellent maul on 48 minutes. Keatley converted to reduce the gap to 20-12.
Munster's comeback was helped by the stellar efforts of a front row that was beginning to exert some pressure on their counterparts. It was also apparent that the visitors were now competing on equal terms in the contact areas.
The hosts weathered the onslaught well, however, and Pienaar augmented the gap on 61 minutes to make it 23-12 to the northern province.
The introduction of Callum Black seemed to shore up the home scrum on the loosehead side. But the devastating Munster maul struck again on 66 minutes when Coughlan powered over. Keatley converted to narrow the arrears to four at 23-19. It was certainly a vastly improved second half performance from the Limerick based side.
Talisman Pienaar extended his team's lead to seven on 71 minutes, relieving some of the pressure on his beleaguered side.
From a 20-point deficit, Munster were now in bonus point range, and on the cusp of victory. They seemed to have navigated their way over on 76 minutes, but another fine scrum by Black earned a vital penalty.
And Pienaar sealed a vital win on 79 minutes when he slotted another penalty. League leaders Munster will be incredibly disappointed with this loss, but will be heartened by their wonderful second half performance.
Ulster will be relieved to have got the New Year off to the best possible start following last week's reverse. They will also acknowledge that Munster made them fight every step of the way.
Tries: Payne, Cave
Con: Pienaar 2
Pen: Pienaar 5
Tries: Dineen, Kilcoyne, Coughlan
Ulster: 15 Jared Payne, 14 Andrew Trimble, 13 Darren Cave, 12 Luke Marshall, 11 Craig Gilroy, 10 Paddy Jackson, 9 Ruan Pienaar, 8 Roger Wilson, 7 Chris Henry, 6 Robbie Diack (c), 5 Dan Tuohy, 4 Iain Henderson, 3 John Afoa, 2 Rob Herring, 1 Tom Court.
Replacements: 16 Niall Annett, 17 Calum Black, 18 Declan Fitzpatrick, 19 Lewis Stevenson, 20 Nick Williams, 21 Sean Doyle, 22 Paul Marshall, 23 Michael Allen.
Munster: 15 Felix Jones, 14 Andrew Conway, 13 Casey Laulala, 12 Ivan Dineen, 11 Ronan O'Mahony, 10 Ian Keatley, 9 Cathal Sheridan, 8 James Coughlan, 7 Tommy O'Donnell, 6 Peter O'Mahony (c), 5 Paul O'Connell, 4 Donncha O'Callaghan, 3 Stephen Archer, 2 Damien Varley, 1 Dave Kilcoyne.
Replacements: 16 Duncan Casey, 17 John Ryan, 18 BJ Botha, 19 Dave Foley, 20 CJ Stander, 21 Duncan Williams, 22 Johnny Holland, 23 Johne Murphy.
Referee: Alain Rolland
By Rory McGimpsey