Celtic overpowered St Johnstone with two second-half goals enough to earn a win that keeps the pressure on Scottish Premier League leaders Rangers.
A superb save from Saints goalkeeper Peter Enckelman denied Gary Hooper from the best chance of the first half.
But Hooper was not to be denied again and he prodded home from close range following a 60th-minute corner.
Ki Sung-Yeung fired in after a quick break four minutes later to reduce the gap with Rangers to four points.
Celtic manager Neil Lennon's victory in his head-to-head with former Northern Ireland team-mate Steve Lomas meant his side secured a seventh straight league win and condemned Saints to a third consecutive home defeat.
Lennon unsurprisingly stuck with the same starting line-up that gave Serie A high-flyers Udinese a fright in the Europa League in midweek.
With Anthony Stokes out injured, Hooper and Georgios Samaras continued their partnership up front and both were quickly involved.
A Hooper header looped wide, while Enckelman had to beat away a powerful long-range effort from the in-form Greece international.
Saints were denied the services of former Scotland left-back Callum Davidson through illness and the continued absence of injured strike duo Francisco Sandaza and Cillian Sheridan meant Marcus Haber was left on his own up front.
Lomas played safe by dropping Sam Parkin to the bench and packing his midfield with the introduction of David Robertson and Kevin Moon.
Robertson was left dazed following a hefty challenge by Daniel Majstorovic after 30 minutes.
However, it was the Celtic defender who came off worse and immediately went off injured sporting what looked like a rapidly developing black eye after heading the back of the midfielder's skull.
Before the Swede could be replaced with Thomas Rogne, Enckelman had denied Hooper with a superb, instinctive one-handed save following the striker's shot from point-blank range.
Robertson only lasted another eight minutes and was replaced by Carl Finnigan, the former Falkirk forward giving the Perth side some additional threat up front.
Haber's pace threatened early on, but he had become an increasingly isolated figure as Celtic dominated possession.
However, a curling Mulgrew free-kick and a Victor Wanyama back-header that flew into the arms of Enckelman were the only other efforts on target as the first half ended goalless.
Saints had failed to create a single chance during the first 45 minutes but forced two quick corners after the break and Dave Mackay, who scored their winner against Celtic in Glasgow, forced goalkeeper Fraser Forster into a good near-post save with a low drive from just outside the box.
Celtic winger James Forrest, virtually anonymous in the first half, also burst into life but should have done better than volley over from eight yards.
Saints had come out with more attacking intent, but that only presented Celtic with more space to exploit and Enckelman did well to beat away a Hooper shot on the turn from a Scott Brown cross.
The pressure eventually told and Hooper stabbed the ball over the line from four yards after a goalmouth scramble resulting from an inswinging corner.
Saints were presented with an immediate chance to equalise, but when Liam Craig's free-kick on the edge of the box was charged down, Celtic broke clear to score again.
Forrest played a one-two with Samaras before firing a low ball across the face of goal for Ki to fire home from 12 yards off the despairing Enckelman.
Samaras mis-hit in front of goal, but Saints also went close to pulling a goal back when Haber pounced on a Wanyama mistake and forced Forster into a near-post save.
Live Text Commentary
Full Time The final whistle is blown by the referee.90:00 +2:50
James Forrest takes a shot from 35 yards and missed to the right of the net.90:00 +2:07
Chris Millar is ruled offside. Free kick taken by Fraser Forster.90:00 +1:24
Georgios Samaras gives away a free kick for an unfair challenge on David McCracken. Peter Enckelman restarts play with the free kick.90:00 +0:59
The ball is delivered by Murray Davidson.90:00 +0:12
James Forrest delivers the ball.89:44
The ball is crossed by William Gibson, save by Fraser Forster.88:30
Du-Ri Cha sends in a cross, save by Peter Enckelman.87:40
Shot from just outside the box by William Gibson goes over the crossbar.86:56
The assistant referee flags for offside against Mohamed Bangura. Peter Enckelman takes the indirect free kick.86:10
The assistant referee signals for offside against Chris Millar. Fraser Forster restarts play with the free kick.85:07
The ball is swung over by David McCracken, Victor Wanyama makes a clearance.81:24
Indirect free kick taken by Fraser Forster.81:24 Substitution
Substitution Mohamed Bangura is brought on as a substitute for Gary Hooper.81:24
Carl Finnigan is flagged offside by the assistant referee.80:32
Unfair challenge on Charlie Mulgrew by David MacKay results in a free kick. Free kick taken by Fraser Forster.79:52
David MacKay crosses the ball, save made by Fraser Forster.78:56 Substitution
Substitution William Gibson is brought on as a substitute for Liam Craig.77:57
The ball is crossed by Du-Ri Cha, clearance by David MacKay.76:51
Charlie Mulgrew takes the direct free kick.
Substitution Dylan McGeough joins the action as a substitute, replacing Beram Kayal.76:51 Booking
Booking David MacKay goes into the book for unsporting behaviour.76:34
Foul by David MacKay on James Forrest, free kick awarded.74:31
Effort from the edge of the area by Georgios Samaras goes wide of the right-hand post.74:11
The ball is delivered by Carl Finnigan, Fraser Forster makes a comfortable save.72:28
James Forrest has a shot on goal from outside the box which misses left.72:12
A cross is delivered by Kevin Moon, comfortable save by Fraser Forster.69:40
Du-Ri Cha takes the free kick.69:40 Booking
Booking Kevin Moon shown a yellow card.69:30
Kevin Moon challenges Georgios Samaras unfairly and gives away a free kick.67:48
Marcus Haber takes a shot. Save by Fraser Forster.67:23
Du-Ri Cha produces a cross, Effort from 12 yards by Georgios Samaras.63:37
Assist on the goal came from James Forrest.63:37 Goal scored
Goal! - Sung-Yeung Ki - St J'stone 0 - 2 Celtic Goal scored by Sung-Yeung Ki from inside the penalty box to the top left corner of the goal. St Johnstone 0-2 Celtic.63:35
James Forrest produces a cross,63:24
The ball is swung over by Du-Ri Cha.62:42
Liam Craig fires a strike on goal direct from the free kick, blocked by Du-Ri Cha.62:42 Booking
Booking Beram Kayal goes into the book for unsporting behaviour.61:41
The ball is crossed by Liam Craig, free kick awarded for a foul by Charlie Mulgrew on Murray Davidson.61:26
The ball is crossed by David MacKay, Du-Ri Cha makes a clearance.59:25
Assist on the goal came from Victor Wanyama.59:25 Goal scored
Goal! - Gary Hooper - St J'stone 0 - 1 Celtic A goal is scored by Gary Hooper from close in to the bottom right corner of the goal. St Johnstone 0-1 Celtic.58:50
Inswinging corner taken by Charlie Mulgrew from the right by-line.57:51
David MacKay challenges James Forrest unfairly and gives away a free kick. Sung-Yeung Ki fires a strike on goal direct from the free kick, blocked by Kevin Moon.57:18
The ball is sent over by Du-Ri Cha, Shot from 18 yards from Gary Hooper. Save by Peter Enckelman.55:09
Du-Ri Cha produces a cross, clearance by David McCracken.53:45
Free kick awarded for an unfair challenge on Thomas Rogne by Chris Millar. Free kick taken by Fraser Forster.52:46
Du-Ri Cha sends in a cross, Shot from just outside the box by James Forrest goes over the bar.52:09
Georgios Samaras produces a cross, comfortable save by Peter Enckelman.49:11
The ball is sent over by Sung-Yeung Ki, David MacKay manages to make a clearance.47:29
Beram Kayal concedes a free kick for a foul on Murray Davidson. Free kick taken by David McCracken.46:39
David MacKay takes a shot. Fraser Forster makes a save.46:09
Chris Millar takes a inswinging corner from the left by-line played to the near post, clearance made by Sung-Yeung Ki.45:33
Corner taken by Liam Craig, save by Fraser Forster.45:26
The ball is delivered by Liam Craig, clearance made by James Forrest.45:01
The referee gets the second half started.45:00 +3:03 Half time
Half Time The ref blows to signal half-time.45:00 +2:33
Murray Davidson challenges Beram Kayal unfairly and gives away a free kick. Victor Wanyama restarts play with the free kick.45:00 +1:43
The ball is crossed by David MacKay, clearance made by Charlie Mulgrew.45:00 +0:46
Victor Wanyama takes a shot. Save by Peter Enckelman.45:00 +0:20
Free kick awarded for a foul by David MacKay on James Forrest. Charlie Mulgrew takes the free kick.44:24 Booking
Booking Liam Craig receives a yellow card.43:45
Scott Brown fouled by Chris Millar, the ref awards a free kick. Charlie Mulgrew takes the indirect free kick.41:23
Murray Davidson challenges Sung-Yeung Ki unfairly and gives away a free kick. Strike comes in from Charlie Mulgrew from the free kick, comfortable save by Peter Enckelman.40:16
Unfair challenge on Thomas Rogne by Marcus Haber results in a free kick. Thomas Rogne restarts play with the free kick.39:53
A cross is delivered by Kevin Moon.39:01
The ball is crossed by Liam Craig, Thomas Rogne makes a clearance.38:13
Free kick taken by Peter Enckelman.38:13 Substitution
Substitution Carl Finnigan is brought on as a substitute for David Robertson.38:13
Free kick awarded for a foul by Gary Hooper on Alan Maybury.36:38
Chris Millar concedes a free kick for a foul on Scott Brown. Victor Wanyama takes the indirect free kick.36:02
A cross is delivered by Sung-Yeung Ki.34:35
Georgios Samaras is adjudged to have handled the ball. Steven Anderson takes the indirect free kick.33:31
Corner from the left by-line taken by Sung-Yeung Ki, Headed effort from inside the area by Victor Wanyama misses to the left of the target.31:51
Charlie Mulgrew takes the inswinging corner, clearance made by David MacKay.31:51 Substitution
Substitution Thomas Rogne replaces Daniel Majstorovic.31:10
Gary Hooper takes a shot. Save by Peter Enckelman.27:11
Georgios Samaras takes a shot. Comfortable save by Peter Enckelman.26:05
Inswinging corner taken by Sung-Yeung Ki, clearance by David Robertson.23:23
Corner taken right-footed by Chris Millar, save by Fraser Forster.22:39
The offside flag is raised against Gary Hooper. Indirect free kick taken by Peter Enckelman.21:54
Beram Kayal takes a shot. Comfortable save by Peter Enckelman.21:25
Inswinging corner taken by Sung-Yeung Ki.21:18
The ball is crossed by Du-Ri Cha, David McCracken manages to make a clearance.18:56
Unfair challenge on Georgios Samaras by David MacKay results in a free kick. Sung-Yeung Ki crosses the ball from the free kick right-footed from left channel, David McCracken makes a clearance.17:10
Beram Kayal gives away a free kick for an unfair challenge on Steven Anderson. Kevin Moon restarts play with the free kick.15:53
Alan Maybury gives away a free kick for an unfair challenge on Du-Ri Cha. Indirect free kick taken by Daniel Majstorovic.13:20
Georgios Samaras takes a shot. Save by Peter Enckelman.10:12
Corner taken right-footed by Sung-Yeung Ki from the left by-line, clearance made by David McCracken.9:59
Sung-Yeung Ki takes a shot. Blocked by Kevin Moon.7:40
A cross is delivered by Du-Ri Cha, Headed effort from inside the area by Gary Hooper misses to the right of the target.5:49
Steven Anderson fouled by Gary Hooper, the ref awards a free kick. Peter Enckelman takes the free kick.0:00
The ref blows the whistle to start the match.
Live data and text provided by our data suppliers