Bolton moved into the Championship's play-off places after substitute Craig Davies's late penalty earned a win at all-but-relegated Bristol City.
Wanderers went ahead inside two minutes after Liam Fontaine turned Darren Pratley's cross into his own net.
But Bolton were pegged back after the break when Albert Adomah's cross was nodded home by Steven Davies.
The points were settled when, after Matthew Bates brought down David Ngog, Craig Davies converted from the spot.
The result means Bristol City are 10 points adrift with four games remaining while Bolton move up to sixth on goal-difference ahead of Nottingham Forest.
The hosts came into the game knowing victory was imperative in their attempts to avoid relegation, but they made a calamitous start when Fontaine inadvertently put the ball into his own net after only 84 seconds.
“When other people were opening presents on Christmas Day we were training”
City responded positively though and Liam Kelly almost embarrassed visiting goalkeeper Adam Bogdan with a sliced cross which looped narrowly wide before Stephen Pearson blazed over when given space inside the Bolton penalty area.
Adomah spurned a further opportunity to get the hosts back on level terms before Bogdan was called into action, doing well to divert Davies's effort to safety after the former Derby striker had tried to slide the ball under the keeper.
Pratley tested Tom Heaton with a long-range effort which need parrying over the bar soon after the interval before the Robins found the equaliser they deserved.
Adomah delivered a pinpoint cross from the bye-line to Davies who made no mistake with a simple downward header, his 13th goal in only 18 starts.
The visitors then had a penalty shout turned down when Zat Knight's header appeared to strike Bates's arm.
But, having been reprieved only six minutes earlier, Bates brought down Ngog inside the area.
Davies smashed the penalty down the middle into the roof of the net to seal a crucial victory for Bolton while all but consigning City to the third tier of English football.
Bolton boss Dougie Freedman:
"You need different tools to be a successful side and today we showed our battling qualities. The race for play-off places is wide open and I see no reason why Bolton Wanderers should not be in the top six come the end of the season.
"We met a Bristol City side fighting for their lives and working very hard for each other. It was never going to be easy.
"But when other people were opening presents on Christmas Day we were training. Now we are reaping the reward of months of hard work."
Bristol City manager Sean O'Driscoll:
"Our performance had everything I would want apart from enough goals to win the game.
"I was disappointed we didn't get a penalty for handball late in the game, but that's the way things have been going for us.
"We have a big summer ahead with a number of contracts up, but I can't ask more in terms of effort than the players showed today.
"The fans have stuck with us, but we have known for a while that a change of strategy was necessary at the club.
"We can't keep on throwing millions of pounds at trying to achieve success. It hasn't worked."
Full Time The referee blows for the end of the match.
The assistant referee signals for offside against Craig Davies. Tom Heaton takes the indirect free kick.
Floated corner taken right-footed by Albert Adomah, Header from deep inside the penalty area by Tom Heaton goes harmlessly over the crossbar.
Steven Davies takes a shot. Craig Dawson gets a block in.
Craig Davies takes a shot. Save by Tom Heaton.
David Ngog challenges Sam Baldock unfairly and gives away a free kick. Direct effort from the free kick comes in from Steven Davies.
Corner taken short by Albert Adomah.
Substitution Ryan Taylor replaces Brendan Moloney.
Craig Davies takes a shot. Save by Tom Heaton.
Substitution Danny Butterfield on for Chris Eagles.
David Ngog takes a shot. Save made by Tom Heaton.
78:58 Goal scored
Goal! - Craig Davies - Bristol C 1 - 2 Bolton Placed penalty scored by Craig Davies. Bristol City 1-2 Bolton.
Foul by Matthew Bates on David Ngog, Penalty awarded.
Chris Eagles takes a outswinging corner to the near post, Liam Kelly manages to make a clearance.
Tom Heaton takes the indirect free kick.
Substitution Craig Davies is brought on as a substitute for Marvin Sordell.
Booking The referee shows Marvin Sordell a yellow card for dissent.
Marvin Sordell is flagged offside by the assistant referee.
Zat Knight takes a shot. Save made by Tom Heaton.
Corner taken right-footed by Chris Eagles.
Floated corner taken from the left by-line by Albert Adomah.
Foul by Marcos Alonso on Albert Adomah, free kick awarded. The free kick is swung in left-footed by Steven Davies, Craig Dawson makes a clearance.
Chris Eagles takes a shot from deep inside the box clearing the bar.
Corner taken right-footed by Albert Adomah, Marvin Elliott has a headed effort at goal from just outside the box which goes wide of the right-hand upright.
Steven Davies has an effort at goal from outside the penalty area missing to the wide left of the goal.
Albert Adomah takes a shot. Blocked by Zat Knight.
Direct free kick taken by Liam Kelly.
Booking Booking for Darren Pratley for unsporting behaviour.
Free kick awarded for a foul by Darren Pratley on Paul Anderson.
Sam Baldock takes a shot. Craig Dawson gets a block in. Floated corner taken from the left by-line by Albert Adomah, Headed effort on goal by Lewin Nyatanga from inside the penalty box misses to the right of the target.
David Ngog takes a shot. Save by Tom Heaton.
Albert Adomah is caught offside. Indirect free kick taken by Adam Bogdan.
Effort from inside the area by Marvin Sordell misses to the left of the target.
Chung-Yong Lee is ruled offside. Tom Heaton takes the free kick.
Albert Adomah has a headed effort at goal from deep inside the area missing to the left of the target.
Outswinging corner taken right-footed by Albert Adomah played to the near post, Headed effort from inside the box by Matthew Bates misses to the right of the target.
Corner taken by Albert Adomah from the right by-line.
Chris Eagles takes the direct free kick. Craig Dawson is caught offside. Tom Heaton takes the free kick.
Booking Paul Anderson goes into the referee's book for unsporting behaviour.
Free kick awarded for an unfair challenge on David Ngog by Paul Anderson.
Albert Adomah takes the floated corner, Craig Dawson manages to make a clearance.
Free kick awarded for an unfair challenge on Marcos Alonso by Albert Adomah. Free kick taken by Adam Bogdan.
Assist by Albert Adomah.
48:08 Goal scored
Goal! - Steven Davies - Bristol C 1 - 1 Bolton Steven Davies scores a headed goal from close in. Bristol City 1-1 Bolton.
Darren Pratley takes a shot. Save by Tom Heaton. Outswinging corner taken from the right by-line by Chris Eagles.
Corner taken by Albert Adomah from the right by-line, Marcos Alonso manages to make a clearance. Effort on goal by Liam Kelly from just inside the penalty area goes over the target.
Substitution Matthew Bates is brought on as a substitute for Liam Fontaine.
The referee gets the second half started.
45:00 +2:26 Half time
Half Time The referee blows for half time.
Inswinging corner taken by Albert Adomah from the right by-line played to the near post.
Substitution (Bolton) makes a substitution, with Mohamed Medo coming on for Jay Spearing.
Marvin Sordell is ruled offside. Free kick taken by Tom Heaton.
Steven Davies takes a shot. Adam Bogdan makes a save. Headed effort from inside the penalty area by Albert Adomah misses to the right of the target.
Corner taken by Albert Adomah from the right by-line, Close range header by Lewin Nyatanga goes wide of the left-hand upright.
Free kick awarded for an unfair challenge on Paul Anderson by Chung-Yong Lee. Steven Davies takes the direct free kick.
Albert Adomah has an effort at goal from the edge of the area that misses to the right of the target.
Substitution Paul Anderson joins the action as a substitute, replacing Stephen Pearson.
Steven Davies produces a header from inside the area that goes over the bar.
Jay Spearing produces a left-footed shot from long distance which goes wide right of the goal.
Foul by Stephen Pearson on Jay Spearing, free kick awarded. Direct strike on goal from the free kick comes in from Marcos Alonso. Chris Eagles takes a outswinging corner to the near post, clearance by Steven Davies.
Marvin Sordell is ruled offside. Tom Heaton takes the free kick.
Marvin Elliott takes a shot. Stephen Pearson decides to take the corner short.
Shot from deep inside the area by Stephen Pearson clears the bar.
David Ngog concedes a free kick for a foul on Liam Fontaine. Tom Heaton takes the free kick.
David Ngog has shot on goal from just outside the box which goes wide of the right-hand upright.
The offside flag is raised against Marvin Sordell. Free kick taken by Tom Heaton.
Centre by Liam Kelly.
The referee blows for offside against Chris Eagles. Tom Heaton takes the free kick.
Zat Knight concedes a free kick for a foul on Sam Baldock. Direct free kick taken by Greg Cunningham.
Effort from long range by Chris Eagles goes wide right of the target.
Assist by Darren Pratley.
1:24 Goal scored
Goal! - Liam Fontaine - Bristol C 0 - 1 Bolton Liam Fontaine scores an own goal. Bristol City 0-1 Bolton.
This page is best viewed in an up-to-date web browser with style sheets (CSS) enabled. While you will be able to view the content of this page in your current browser, you will not be able to get the full visual experience. Please consider upgrading your browser software or enabling style sheets (CSS) if you are able to do so.