Celtic narrowed the gap on Scottish Premier League leaders Rangers to seven points with victory over Dunfermline.
Returning to Parkhead for the first time in four years, the visitors were at fault for early goals scored by Gary Hooper and James Forrest.
But Ki Sung-Yueng missed a penalty in the second half after Forrest had been fouled by Paul Burns.
And Andy Barrowman's 86th minute strike led to a nervous end for the hosts as Celtic held out to secure the win.
Victory means Neil Lennon's side could be within four points of Rangers if they beat St Mirren on Saturday.
The Celtic manager had made two changes to his starting line up following their weekend win over Inverness, with Kris Commons replacing Georgios Samaras and midfielder Ki Sung-Yueng in for Badr El-Kaddouri.
Dunfermline, meanwhile, made three changes with Andy Dowie, Gary Mason and Barrowman in for the injured Austin McCann, Paddy Boyle and Liam Buchanan.
But the Fife side effectively ended their hopes of a fourth away win of the season within the opening quarter-of-an-hour.
Midfielder Paul Willis's loose pass in-field from wide on the left was picked up by Hooper, who raced clear of the stunned defenders before slipping the ball past Paul Gallacher in the Pars goal.
A second followed seven minutes later and was again the result of a Dunfermline mistake.
Alex Keddie gave possession away in the middle of the pitch allowing Celtic to break and, with the Dunfermline defence exposed, Commons found Anthony Stokes inside the box.
Gallacher saved his low drive but Hooper retrieved and picked out Forrest to convert, the youngster coolly guiding the ball into the net from eight yards.
With victory seemingly guaranteed Celtic looked like they were in the mood to work on their goal difference column and could have led by five or six by half-time.
Captain Beram Kayal had a drive from 25 yards which Gallacher blocked with his feet, moments before Commons had an effort from even further out which went high over the bar.
Forrest returned to torment the Dunfermline defence on the half-hour mark, weaving his way through their ranks before crossing to the back post for Stokes who, from an acute angle, could only send it back across the goal to let the Fifers off the hook.
Moments later, the roles were reversed when Forrest was set up by Stokes but the outcome was the same as the Scotland international's low drive skipped past the far post.
Two minutes from the break Hooper became the next Celtic player to pass up on a decent chance when his first-time strike at the edge of the box from Forrest's cross went wide of the target.
Paddy McCourt was the only change at half time, replacing Commons as the home side continued to press Jim McIntyre's side.
But, after suffering a luckless evening, the visitors were offered the opportunity to establish a foothold when Ki missed from the penalty spot in the 54th minute.
Burns felled Forrest on the edge of the box, with referee Bobby Madden pointing instantly to the spot.
After a disagreement with Stokes over who should take the penalty, Ki managed to send Gallacher the wrong way, only to direct his shot wide of the left-hand post.
An aggrieved Stokes was further aggravated moments later when set up by a tremendous Ki pass, the striker's left-footed strike coming off the Dunfermline post.
Dunfermline, whose chances had been limited thus far, increased their energy levels with the introduction of substitute Joe Cardle on the hour mark, the midfielder forcing a double save from Fraser Forster who had an otherwise easy night in goals.
That seemed to inspire more creativity from the Pars and Barrowman's goal reignited the tie with four minutes remaining.
David Graham was the architect, threading through a perfect pass which allowed the striker to take a touch before driving across goal from 15 yards out and landing his shot in the right hand corner of Forsters' net.
But there was to be no dramatic equaliser for McIntyre's men as Celtic protected their 2-1 lead.
Sorry, we were unable to load match stats, please try again.
Live Text Commentary
Full Time The final whistle goes and the game is over.90:00 +1:13
Indirect free kick taken by Fraser Forster.90:00 +1:13 Booking
Booking Fraser Forster is shown a yellow card.90:00 +0:45
Joe Cardle is ruled offside.87:01
Georgios Samaras challenges John Potter unfairly and gives away a free kick. Paul Gallacher takes the free kick.85:03
Assist by David Graham.85:03 Goal scored
Goal! - Andrew Barrowman - Celtic 2 - 1 Dunf'mline Goal scored by Andrew Barrowman from the edge of the penalty box to the bottom left corner of the goal. Celtic 2-1 Dunfermline.84:14
Foul by Daniel Majstorovic on Andrew Barrowman, free kick awarded. Gary Mason restarts play with the free kick.83:08
Gary Mason takes a shot from close in clearing the crossbar.82:36
Unfair challenge on Paul Burns by Sung-Yeung Ki results in a free kick. Paul Burns takes the free kick.81:43
Short corner taken by Patrick McCourt from the right by-line.80:44
The ball is sent over by Joe Cardle, Victor Wanyama manages to make a clearance.78:49
Free kick taken by Fraser Forster.78:49 Substitution
Substitution Anthony Stokes leaves the field to be replaced by Georgios Samaras.78:49
The offside flag is raised against Andrew Barrowman.77:02
Andrew Barrowman concedes a free kick for a foul on Sung-Yeung Ki. Indirect free kick taken by Beram Kayal. Free kick awarded for a foul by Daniel Majstorovic on Liam Buchanan. Direct free kick taken by Joe Cardle.73:02
Free kick awarded for a foul by Sung-Yeung Ki on Alex Keddie. Free kick taken by Paul Gallacher.72:21
Free kick awarded for an unfair challenge on Victor Wanyama by Andrew Barrowman. Free kick taken by Fraser Forster.71:45
Anthony Stokes is flagged offside by the assistant referee. Free kick taken by Gary Mason.69:10
Joe Cardle takes a shot. Save by Fraser Forster. Joe Cardle takes the inswinging corner, clearance made by Joe Ledley.
Direct free kick taken by Joe Cardle.63:08 Substitution
Substitution (Dunfermline) makes a substitution, with Liam Buchanan coming on for Andy Kirk.63:08
Foul by Joe Ledley on David Graham, free kick awarded.62:03
Adam Matthews crosses the ball, clearance made by John Potter.61:05
Anthony Stokes takes a shot from inside the six-yard box that hits the post.58:31 Substitution
Substitution Joe Cardle is brought on as a substitute for Paul Willis.58:31 Substitution
Substitution Patrick Boyle joins the action as a substitute, replacing Ryan Thomson.58:01
Shot from just outside the box by Anthony Stokes misses to the left of the target.57:10
Anthony Stokes produces a left-footed shot from the edge of the area and misses to the left of the target.56:24
Sung-Yeung Ki crosses the ball, clearance by John Potter.55:45
John Potter challenges Anthony Stokes unfairly and gives away a free kick. Sung-Yeung Ki takes the direct free kick.53:41 Penalty
Placed penalty missed by Sung-Yeung Ki.53:41
Unfair challenge on James Forrest by Paul Burns results in a Penalty.51:02
Effort from outside the penalty box by Sung-Yeung Ki goes wide left of the goal.48:33
Andrew Barrowman challenges Victor Wanyama unfairly and gives away a free kick. Free kick taken by Beram Kayal.46:52
Gary Mason challenges Patrick McCourt unfairly and gives away a free kick. Sung-Yeung Ki takes the free kick.45:05 Substitution
Substitution Patrick McCourt replaces Kris Commons.45:01
The match restarts for the second half.44:54 Half time
Half Time The referee blows for half time.42:22
Centre by James Forrest, Effort from the edge of the area by Gary Hooper goes wide of the right-hand post.39:33
The ball is sent over by Paul Willis, clearance made by Daniel Majstorovic.39:06
Paul Burns challenges Sung-Yeung Ki unfairly and gives away a free kick. Sung-Yeung Ki takes the direct free kick.37:41
Paul Willis produces a left-footed shot from just outside the box that goes wide left of the target.36:48
Kris Commons has a shot on goal from outside the area which misses right.35:15
James Forrest produces a left-footed shot from the edge of the box and misses to the right of the target.35:07
Joe Ledley produces a cross.34:46
A cross is delivered by Paul Willis, clearance by Victor Wanyama.33:53
Foul by Ryan Thomson on Beram Kayal, free kick awarded. Beram Kayal restarts play with the free kick.32:29
The referee blows for offside. Daniel Majstorovic takes the free kick.31:45
The ball is swung over by Adam Matthews, Anthony Stokes has a headed effort at goal from close in which goes wide of the left-hand upright.30:54
The ball is delivered by James Forrest.30:15
Kris Commons takes a shot. Save made by Paul Gallacher.29:50
A cross is delivered by Paul Burns, Daniel Majstorovic makes a clearance.28:37
Andrew Barrowman fouled by Victor Wanyama, the ref awards a free kick. Alex Keddie takes the direct free kick.26:24
Joe Ledley takes a shot. John Potter gets a block in. Joe Ledley takes a outswinging corner to the near post. Kris Commons is penalised for handball and concedes a free kick. Paul Gallacher takes the indirect free kick.25:08
Sung-Yeung Ki takes a shot. Save by Paul Gallacher.24:15
Effort on goal by Andy Dowie from long range goes over the bar.23:37
Foul by Anthony Stokes on Andy Dowie, free kick awarded. John Potter takes the indirect free kick.21:05
Shot by Beram Kayal. Save by Paul Gallacher.19:24
David Graham fouled by Beram Kayal, the ref awards a free kick. Free kick taken by John Potter.16:52
Paul Willis fouled by Daniel Majstorovic, the ref awards a free kick. Paul Willis fires a strike on goal direct from the free kick.15:51
Corner taken right-footed by Paul Willis from the right by-line, clearance by Daniel Majstorovic.15:16
Shot from just outside the box by Kris Commons goes over the crossbar.14:47
James Forrest fouled by Paul Burns, the ref awards a free kick. James Forrest takes the free kick.12:21
Assist by Gary Hooper.12:21 Goal scored
Goal! - James Forrest - Celtic 2 - 0 Dunf'mline James Forrest fires in a goal from inside the six-yard box to the top left corner of the goal. Celtic 2-0 Dunfermline.9:48
The ball is crossed by Kris Commons.8:20
Corner from right by-line taken by Paul Willis.5:35 Goal scored
Goal! - Gary Hooper - Celtic 1 - 0 Dunf'mline Gary Hooper gets on the score sheet with a goal from inside the penalty area to the bottom left corner of the goal. Celtic 1-0 Dunfermline.4:38
Corner from the left by-line taken by Paul Willis, Victor Wanyama makes a clearance.3:31
Anthony Stokes takes a shot. Save made by Paul Gallacher.2:36
Paul Burns challenges James Forrest unfairly and gives away a free kick. Kris Commons restarts play with the free kick.1:22
Alex Keddie concedes a free kick for a foul on Anthony Stokes. Beram Kayal takes the free kick.0:00
The game kicks-off.
Live data and text provided by our data suppliers