Match ends, Rangers 1, Celtic 2.
Celtic came from behind to beat Old Firm rivals Rangers and move 19 points clear at the top of the Premiership.
Kenny Miller slid in to convert James Tavernier's cross and put the home side ahead early on.
Moussa Dembele's powerful shot from a Scott Sinclair corner flashed high into the net to bring Celtic level, and Dembele later fired against the bar.
The visitors dominated the second half, and Sinclair touched home Stuart Armstrong's low cross for the winner.
Rangers hit the front
Mark Warburton's hosts showed from the outset their intention was to press their opponents in wide areas, and it paid dividends when Josh Windass released Tavernier to set up Miller's close-range finish.
Celtic continued to concede too much space in the full-back areas, and further deliveries troubled goalkeeper Craig Gordon and his defence.
However, Dembele's leveller put Celtic into the ascendancy and Rangers then struggled to get Barrie McKay and Tavernier on the ball, though McKay did draw a save from Gordon after the break.
Having struggled to get a telling delivery at set-pieces, Rangers may have gone ahead just before Celtic's second as Danny Wilson met Tavernier's corner, Gordon making the save.
Celtic duo to the fore again
Summer signings Dembele and Sinclair had run the Rangers defence ragged in September's 5-1 win at Celtic Park, and the duo's link-up play was again the catalyst as the visitors recovered from their early setback.
Sinclair's set-piece was controlled and rattled into the top-right corner by Celtic's top scorer Dembele - a fifth goal against Rangers for the Frenchman this season.
And he should have taken that tally to six after Mikael Lustig squared the ball to the striker early in the second period, a miskick allowing Wes Foderingham to save.
Foderingham came to Rangers' rescue when James Forrest was played in on goal by Stuart Armstrong but Sinclair would ensure a happy end to 2016 for his team, applying the finish to Armstrong's piercing ball across the face of goal.
Armstrong, Sinclair and substitute Nir Bitton forced further saves from Foderingham as Rangers continued to struggle in defence.
Woodwork plays its part
In a match of so many chances, it was a surprise there were only three goals.
Sinclair fired against the right-hand post as Celtic trailed, and Dembele's downward volley bounced up on to the crossbar at 1-1, with Sinclair firing the rebound wide.
And, after Sinclair had netted, Rangers were also left frustrated by the goal frame as Miller's shot came back off the same post Sinclair had hit in the opening half.
New Year beckons
The Scottish Premiership enters its winter break for the early part of January and Celtic can extend their advantage at the top to 22 points if they win their game in hand against St Johnstone near the end of next month.
The league leaders, who have won 15 Premiership matches in a row and have only dropped two points all season, are targeting a sixth straight top-flight title win and a first under manager Brendan Rodgers.
For Rangers, they suffer their first competitive home defeat since September 2015 and face a battle to hold on to second place with Aberdeen, who have a game in hand, two points behind them.
Line-ups
Rangers
Formation 3-5-2
- 1Foderingham
- 6WilsonBooked at 90mins
- 3Hill
- 4Kiernan
- 10McKay
- 11WindassBooked at 52minsSubstituted forDodooat 65'minutes
- 16Halliday
- 23HoltSubstituted forForresterat 82'minutes
- 2TavernierBooked at 89mins
- 9Miller
- 7GarnerSubstituted forWaghornat 15'minutes
Substitutes
- 14Dodoo
- 15Forrester
- 17Hodson
- 21Crooks
- 25Gilks
- 29O'Halloran
- 33Waghorn
Celtic
Formation 4-2-3-1
- 1Gordon
- 3Izaguirre
- 28Sviatchenko
- 5SimunovicBooked at 45mins
- 23LustigBooked at 65mins
- 14S Armstrong
- 8BrownBooked at 24mins
- 11Sinclair
- 42McGregorSubstituted forBittonat 86'minutes
- 49ForrestSubstituted forRobertsat 68'minutes
- 10Dembele
Substitutes
- 2K Touré
- 6Bitton
- 9Griffiths
- 12Gamboa
- 16Mackay-Steven
- 24de Vries
- 27Roberts
- Referee:
- Steven McLean
- Attendance:
- 50,126
Match Stats
- Possession
- Home50%
- Away50%
- Shots
- Home10
- Away23
- Shots on Target
- Home6
- Away10
- Corners
- Home4
- Away11
- Fouls
- Home14
- Away15
Live Text
Post update
Full Time
Second Half ends, Rangers 1, Celtic 2.
Post update
Corner, Rangers. Conceded by Mikael Lustig.
Post update
Andy Halliday (Rangers) wins a free kick in the attacking half.
Post update
Foul by Stuart Armstrong (Celtic).
Post update
Attempt saved. Andy Halliday (Rangers) left footed shot from outside the box is saved in the top centre of the goal.
Post update
Corner, Celtic. Conceded by Barrie McKay.
Booking
Danny Wilson (Rangers) is shown the yellow card for a bad foul.
Post update
Foul by Danny Wilson (Rangers).
Post update
Moussa Dembele (Celtic) wins a free kick on the right wing.
Post update
Corner, Celtic. Conceded by Danny Wilson.
Post update
Corner, Celtic. Conceded by Danny Wilson.
Booking
James Tavernier (Rangers) is shown the yellow card for a bad foul.
Post update
Foul by James Tavernier (Rangers).
Post update
Moussa Dembele (Celtic) wins a free kick on the left wing.
Post update
Corner, Celtic. Conceded by Rob Kiernan.
Post update
Foul by Martyn Waghorn (Rangers).
Post update
Stuart Armstrong (Celtic) wins a free kick in the defensive half.
Post update
Attempt saved. Nir Bitton (Celtic) right footed shot from outside the box is saved in the centre of the goal.
Substitution
Substitution, Celtic. Nir Bitton replaces Callum McGregor.