Celtic moved top of the Scottish Premiership after holding off Livingston to send them to the foot of the table.
Jason Holt scored from the spot for Livi after a Kristoffer Ajer handball.
Callum McGregor’s deflected strike quickly levelled and Ryan Christie edged the hosts in front soon after.
Christie set up Albian Ajeti early in the second period for Celtic’s third but Julien Serrano’s impressive strike gave Livi hope.
And they could have levelled in added time when Carlo Pignatiello was found by fellow substitute Alan Forrest but the midfielder nodded wide.
Celtic move ahead of Rangers, who visit Hibernian on Sunday, on goals scored.
The story of the first half was encapsulated in a frantic eight-minute spell during which both sides had penalty claims and found the net.
Christie was convinced he should have been awarded a spot-kick for handball after his effort was blocked by Ciaron Brown.
Within seconds, Livi were up the other end with Scott Tiffoney’s cross cut out by Ajer’s hand and this time referee Gavin Duncan did point to the spot. Holt netted his first Livingston goal.
The visitors would have been expecting a reaction and their lead lasted only four minutes as Ajeti teed up McGregor for his first of the season, a deflection taking the flight of the ball out of Robby McCrorie’s reach.
McGregor and Greg Taylor combined on the left to set up Christie to turn in Celtic’s second from close range moments later.
A third goal always seemed likely for the champions and it came to pass when Christie’s subtle but effective through ball was swept in by Ajeti.
James Forrest and his brother on the opposing Livi bench Alan both came on at the same time before Serrano reduced the visitors’ deficit.
The French full-back was afforded too much space as he took down a bouncing ball and took full advantage with a powerful drive into the top left corner.
And there was a nervous moment for the hosts in added time when Pignatiello headed off target.
Man of the match – Callum McGregor
What did we learn?
Lennon has stated his desire to play 3-5-2 and his line-up against Livi was perhaps the purest form of it with Jeremie Frimpong and Taylor taking up the wide positions and Christie pushed up front with Ajeti.
Going forward on the left it was successful, particularly with the second goal, but Celtic were less potent on the right and gave up more chances than usual at the back, with injured Christopher Jullien not making the squad.
With Odsonne Edouard rested on the bench, Ajeti was given the chance to lead the line and provided a goal and an assist.
Plaudits but no points for Livi but they would much prefer points after registering one win and two draws from their opening eight games.
What did they say?
Celtic manager Neil Lennon: “I’m not happy about both the penalty decisions. I thought we could’ve had a penalty quite easily and it’s debatable whether Livingston’s is a penalty. We reacted very well, we scored two brilliant goals.
“And then with the third goal, you’re thinking, ‘3-1, we’re very, very comfortable in the game, in control’. We concede a poor goal from our point of view. Good strike from Serrano but we should’ve dealt with it early.”
Livingston head coach Gary Holt: “Probably frustrated that we’ve come here, played so well and conceded some soft goals. When we get back to 3-2, we had them rattled.
“The second goal is offside for them. Taylor’s offside. That’s the sticking one for us. That’s the decision that you need to go your way. It’s a sore one.”
Celtic take on Riga in Latvia in Thursday’s Europa League third qualifying round tie and return to domestic action next Sunday at home to Hibernian. Livi host St Johnstone next Saturday.
- 44ElhamedSubstituted forBittonat 74′minutes
- 30FrimpongSubstituted forForrestat 74′minutes
- 21NtchamSubstituted forTurnbullat 85′minutes
- 10AjetiSubstituted forKlimalaat 79′minutesBooked at 90mins
- 17ChristieSubstituted forElyounoussiat 84′minutes
- 3BrownSubstituted forForrestat 74′minutes
- 6BartleySubstituted forPignatielloat 88′minutes
- 10SibbaldBooked at 50minsSubstituted forRobinsonat 69′minutes
- 22TiffoneySubstituted forLokotschat 69′minutes
Match ends, Celtic 3, Livingston 2.
Second Half ends, Celtic 3, Livingston 2.
Attempt missed. Carlo Pignatiello (Livingston) header from the centre of the box misses to the left. Assisted by Alan Forrest with a cross.
Attempt blocked. Jason Holt (Livingston) right footed shot from outside the box is blocked. Assisted by Scott Robinson.
Attempt missed. Efe Ambrose (Livingston) left footed shot from outside the box misses to the right. Assisted by Scott Pittman following a set piece situation.
Patryk Klimala (Celtic) is shown the yellow card for a bad foul.
Foul by Patryk Klimala (Celtic).
Jason Holt (Livingston) wins a free kick in the defensive half.
Substitution, Livingston. Carlo Pignatiello replaces Marvin Bartley.
Attempt missed. Shane Duffy (Celtic) header from the centre of the box misses to the left. Assisted by David Turnbull with a cross following a corner.
Corner, Celtic. Conceded by Alan Forrest.
Substitution, Celtic. David Turnbull replaces Olivier Ntcham.
Substitution, Celtic. Mohamed Elyounoussi replaces Ryan Christie.
Offside, Livingston. Nicky Devlin tries a through ball, but Alan Forrest is caught offside.
Substitution, Celtic. Patryk Klimala replaces Albian Ajeti.
Scott Pittman (Livingston) wins a free kick in the defensive half.
Goal! Celtic 3, Livingston 2. Julien Serrano (Livingston) left footed shot from outside the box to the high centre of the goal. Assisted by Jason Holt.
Offside, Celtic. Greg Taylor tries a through ball, but Albian Ajeti is caught offside.
Albian Ajeti (Celtic) wins a free kick in the defensive half.