Rangers striker Alfredo Morelos saw red again as Celtic moved 13 points clear at the top of the Ladbrokes Premiership with a 2-1 win at Parkhead.
French striker Odsonne Edouard opened the scoring in the 27th minute before Morelos was shown a straight red card by Bobby Madden for throwing an elbow at Hoops skipper Scott Brown.
Steven Gerrard's 10-men sensationally levelled through Ryan Kent in the 63rd minute and when Celtic defender Dedryck Boyata went off injured, after interim manager Neil Lennon had used all three substitutions, the numbers were levelled.
But in the 85th minute James Forrest's finish from 12 yards took the hosts a step closer to their eighth successive title.
Once again questions will be asked about Morelos's temperament, even though he has contributed 29 goals this season, as he was shown his fifth red card of the season, albeit the first was rescinded.
Celtic defender Kieran Tierney had been a doubt with a calf injury but he was fit to start while Boyata returned to the centre of defence, midfielder Olivier Ntcham made his first appearance of the year and winger Jonny Hayes surprisingly came in for Scott Sinclair.
Rangers midfielders Ryan Jack and Scott Arfield returned from injury as Gerrard picked the same side which started in the derby win in December.
Amid a frantic start Gers keeper Allan McGregor blocked a side-footed shot from Ntcham and as the pressure increased the visitors survived a series of corners and crosses into their box and there was no surprise when they fell behind.
When a Gers attack broke down, Forrest played it through to Edouard who ran 40 yards with no real challenge from Gers defender Joe Worrall before he drove past McGregor.
Minutes later Rangers' task was made even more difficult when Morelos was dismissed by Madden for his altercation with Brown, the Colombia striker complaining long and hard before he trekked off to mocking chants from the home fans.
Tierney stung McGregor's hand with a powerful left-footed drive with the Ibrox men happy to hear the half-time whistle.
Sinclair replaced Hayes for the start of the second half and there was a Rangers penalty claim when he tangled with Light Blues skipper James Tavernier in the box but Madden was unimpressed.
In the 53rd minute McGregor blocked a drive from Sinclair before he watched right-back Mikael Lustig's 25-yard drive go just wide.
However, when Celtic dropped their guard for a moment, Rangers equalised.
Tavernier's pass from the right found Kent and the 22-year-old Liverpool loanee skipped past Boyata all too easily on the edge of the box before driving low past Hoops keeper Scott Bain.
Tom Rogic replaced Ntcham and Jeremy Toljan came on for the injured Tierney before Boyata had to come off leaving it 10 versus 10.
Before the Belgian defender departed Gers midfielder Ryan Jack scooped the ball over the bar from eight yards after Kent cut the ball back from the byline.
Jermain Defoe replaced Daniel Candeias in the 83rd minute as Gerrard sensed a winner was there for the taking but two minutes later, after a mistake by Tavernier, Edouard picked out Forrest and he hammered the ball past McGregor to send most of Parkhead wild with delight.
Worrall almost squeezed in another equaliser after Bain fumbled a Kent drive but Celtic held on.
A number of players and other members of each bench were involved in a melee at full-time, with Andy Halliday and Brown initially involved and Rangers substitute Wes Foderingham being dragged away from the flashpoint.
ga('create', 'UA-72310761-1', 'auto', {'name': 'pacontentapi'});
ga('pacontentapi.set', 'referrer', location.origin);
ga('pacontentapi.set', 'dimension1', 'By Ronnie Esplin, Press Association Sport');
ga('pacontentapi.set', 'dimension2', '0443b08b-632c-4f45-8b27-05e5c5787725');
ga('pacontentapi.set', 'dimension3', 'paservice:sport,paservice:sport:club-news,paservice:sport:football,paservice:sport:uk');
ga('pacontentapi.set', 'dimension6', 'story');
ga('pacontentapi.set', 'dimension7', 'composite');
ga('pacontentapi.set', 'dimension8', null);
ga('pacontentapi.set', 'dimension9', 'sport:football');
ga('pacontentapi.send', 'pageview', { 'location': location.href, 'page': (location.pathname + location.search + location.hash), 'title': 'Alfredo Morelos sees red as Celtic beat Rangers to close in on title'});