Christmas came a day early for St Mirren as they celebrated a victory over a Rangers side that ended a feisty game with nine men.
Lee Wallace prodded the visitors in front before Lee McCulloch was red carded for elbowing Graham Carey.
St Mirren levelled when Aaron Mooy cracked home a terrific strike and Paul McGowan shot the Buddies ahead.
The home side defended stoutly in the second half and Dorin Goian was sent off late on after a second booking.
Ally McCoist's team remain top of the Scottish Premier League but their lead over Celtic, which was 12 points not so long ago, looks like being cut to just one.
The Glasgow rivals meet at Celtic Park on Wednesday, with McCulloch and Goian now suspended for the key clash.
Rangers made a positive start and Kyle Lafferty shot narrowly wide after racing clear of the home defence.
St Mirren responded with a raking strike from McGowan, which was smothered comfortably by goalkeeper Allan McGregor.
On 11 minutes, Wallace latched on the great pass from Sasa Papac and bundled his way past a falling Marc McAusland before poking the ball beyond Craig Samson to claim his first goal for the club.
The visitors had the ball in the back of the net again when Gregg Wylde's swerving free-kick flew in but referee Steven McLean had blown his whistle after spotting an infringement from McCulloch.
And the Rangers midfielder was shown a red card for swinging his elbow at Carey.
St Mirren were immediately energised by the sending off and McGregor made a great save to keep out Steven Thompson's near post flick from McGowan's corner
Rangers were sitting deeper and deeper as the first half wore on and the home side levelled with a cracking goal after 44 minutes.
A patient passing move ended with Mooy waltzing through a couple of challenges on the edge of the penalty area before lashing a powerful shot beyond McGregor.
A minute later, the busy McGowan raced in behind the Rangers defence to pick up a pass from David Barron and placed a neat finish into the corner of the net.
Rangers substitute Sone Aluko was first to threaten in the second half, with a shot from 18 yards that found the side-netting.
St Mirren defender McAusland then connected with Gary Teale's free kick at the back post but could only nudge the ball wide from close range.
Rangers countered at pace and Steven Davis picked out Nikica Jelavic in the penalty box but the big striker lacked composure and fired wide when one-on-one with Samson.
St Mirren's passing game completely deteriorated as the depleted visitors pinned them back for long spells.
However, Samson was seldom troubled as his team-mates tackled tenaciously on the edge of their penalty area.
On 86 minutes, Rangers were reduced to nine men as Goian picked up his second yellow card for a tug at Gary Teale's shirt.
McGowan had a great chance to add to St Mirren's tally when he took the ball round McGregor but he shot tamely from a tight angle and Papac got back to make a goal-line clearance.
- 01 Samson
- 02 van Zanten
- 03 Barron
- 05 Mair
- 14 McAusland Booked
- 22 Tesselaar
- 15 Mooy (Murray - 62' )
- 17 Mclean
- 23 Carey Booked (Teale - 46' )
- 09 Thompson (Hasselbaink - 85' )
- 10 McGowan
- 12 Smith
- 24 Haddad
- 07 Murray
- 08 Thomson
- 21 Teale
- 11 Hasselbaink
- 19 McShane
- 01 McGregor
- 02 Goian Dismissed after an earlier booking
- 05 Papac
- 12 Wallace
- 16 Whittaker
- 18 Bocanegra (Bartley - 77' )
- 06 McCulloch Dismissed
- 08 Davis Booked
- 27 Wylde (Edu - 29' )
- 09 Jelavic Booked
- 11 Lafferty Booked (Aluko - 46' )
- 25 Alexander
- 04 Broadfoot
- 22 Bartley
- 07 Edu
- 19 Aluko
- 33 Bendiksen
- 41 McCabe
Live Text Commentary
Full Time The game is over, as the referee blows his whistle.90:00 +2:51
The official flags Nigel Hasselbaink offside. Free kick taken by Sasa Papac.90:00 +0:52
Paul McGowan takes a shot. Kyle Bartley gets a block in.89:59
Craig Samson takes the indirect free kick.89:59 Booking
Booking Booking for Nikica Jelavic for unsporting behaviour.89:55 Booking
Booking The referee books Marc McAusland for unsporting behaviour.89:30 Booking
Booking Steven Davis receives a caution.89:13
Steven Davis gives away a free kick for an unfair challenge on Gary Teale.88:31
Lee Wallace sends in a cross, Lee Mair makes a clearance.87:27
Hugh Murray gives away a free kick for an unfair challenge on Maurice Edu. Steven Whittaker takes the free kick.86:15
Direct free kick taken by Kenny McLean.86:15 Dismissal
Dismissal Dorin Goian dismissed for second bookable offence.85:51
Free kick awarded for a foul by Dorin Goian on Kenny McLean.83:56
Kenny McLean sends in a cross, clearance by Sasa Papac.83:56 Substitution
Substitution Nigel Hasselbaink comes on in place of Steven Thompson.83:56
Maurice Edu concedes a free kick for a foul on Gary Teale.82:34
Centre by Lee Wallace, clearance by Kenny McLean.81:47
The assistant referee signals for offside against Gary Teale. Sasa Papac takes the free kick.79:04
Lee Mair fouled by Maurice Edu, the ref awards a free kick. Free kick taken by Craig Samson.77:54
Free kick awarded for a foul by Marc McAusland on Nikica Jelavic. Sasa Papac restarts play with the free kick.
Substitution Kyle Bartley comes on in place of Carlos Bocanegra.76:12
Hugh Murray challenges Nikica Jelavic unfairly and gives away a free kick. Steven Davis restarts play with the free kick.71:55
Gary Teale crosses the ball in from the free kick, Sasa Papac gets a block in.71:55 Booking
Booking Dorin Goian booked for unsporting behaviour.71:51
Dorin Goian challenges Gary Teale unfairly and gives away a free kick.70:15
The assistant referee flags for offside against Steven Thompson. Dorin Goian restarts play with the free kick.69:26
Carlos Bocanegra concedes a free kick for a foul on Steven Thompson. David van Zanten restarts play with the free kick.68:01
The assistant referee signals for offside against Steven Thompson. Sasa Papac takes the direct free kick.66:25
David van Zanten challenges Lee Wallace unfairly and gives away a free kick. Steven Davis crosses the ball in from the free kick, clearance by Steven Thompson.64:17
Centre by Lee Wallace, David Barron manages to make a clearance.63:17
Gary Teale is caught offside. Direct free kick taken by Sasa Papac.61:38 Substitution
Substitution Aaron Mooy goes off and Hugh Murray comes on.57:55
Sone Aluko produces a cross, Kenny McLean gets a block in. Inswinging corner taken left-footed by Sone Aluko played to the near post.56:34
Sone Aluko delivers the ball.54:17
Shot by Nikica Jelavic from deep inside the penalty area misses to the right of the goal.52:42
Handball by Carlos Bocanegra. The ball is delivered by Gary Teale, Marc McAusland produces a right-footed shot from close range which goes wide of the left-hand post.50:27
Shot by Steven Whittaker from outside the box goes high over the crossbar.49:29
Sone Aluko produces a left-footed shot from just outside the box that goes wide right of the target.47:10
Kenny McLean is penalised for a handball. Free kick taken by Allan McGregor.45:01
The referee gets the second half started.45:01 Substitution
Substitution Sone Aluko replaces Kyle Lafferty.45:01 Substitution
Substitution (St Mirren) makes a substitution, with Gary Teale coming on for Graham Carey.45:00 +2:39 Half time
Half Time The referee blows for half time.45:00 +1:37
The assist for the goal came from David van Zanten.45:00 +1:37 Goal scored
Goal! - Paul McGowan - St Mirren 2 - 1 Rangers Goal scored by Paul McGowan from deep inside the penalty box to the bottom left corner of the goal. St Mirren 2-1 Rangers.45:00 +1:19
The ball is sent over by Kenny McLean, save by Allan McGregor.44:28
Steven Thompson is flagged offside by the assistant referee. Dorin Goian restarts play with the free kick.43:09
Assist by Paul McGowan.43:09 Goal scored
Goal! - Aaron Mooy - St Mirren 1 - 1 Rangers Aaron Mooy scores a goal from the edge of the penalty area to the top left corner of the goal. St Mirren 1-1 Rangers.42:51
Centre by David Barron, clearance made by Dorin Goian.42:28
Short corner taken by Graham Carey from the right by-line.42:20
Centre by David van Zanten, Steven Davis gets a block in.40:18
The ball is sent over by Graham Carey.39:59
The ball is sent over by Steven Davis, Marc McAusland manages to make a clearance.38:06
Graham Carey concedes a free kick for a foul on Steven Whittaker. Allan McGregor takes the free kick.37:55
Jeroen Tesselaar sends in a cross.37:26
Outswinging corner taken by Graham Carey, Dorin Goian makes a clearance.37:22
The ball is sent over by Paul McGowan, Dorin Goian makes a clearance.35:37
Graham Carey delivers the ball from the free kick right-footed from left wing, Dorin Goian manages to make a clearance. Graham Carey crosses the ball, clearance by Kyle Lafferty. Corner taken left-footed by Graham Carey from the right by-line to the near post, Kyle Lafferty manages to make a clearance.35:37 Booking
Booking Booking for Kyle Lafferty for unsporting behaviour.35:32
Foul by Kyle Lafferty on Paul McGowan, free kick awarded.34:21
Effort on goal by Kenny McLean from just outside the penalty area goes harmlessly over the target.33:42
Kenny McLean produces a cross, Steven Whittaker makes a clearance. Aaron Mooy takes a inswinging corner from the right by-line to the near post, Steven Thompson takes a shot. Save made by Allan McGregor.33:04
Kyle Lafferty challenges Kenny McLean unfairly and gives away a free kick. Jeroen Tesselaar restarts play with the free kick.31:18
The referee blows for offside. Indirect free kick taken by Dorin Goian.30:35
Free kick awarded for an unfair challenge on Paul McGowan by Kyle Lafferty. David van Zanten takes the direct free kick.29:52
The ball is crossed by Jeroen Tesselaar, blocked by Dorin Goian.28:34 Substitution
Substitution Maurice Edu is brought on as a substitute for Gregg Wylde.26:50
Shot from 35 yards by Graham Carey missed to the right of the goal.23:47
Craig Samson restarts play with the free kick.23:47 Dismissal
Dismissal Lee McCulloch receives a red card for violent conduct.23:01
Unfair challenge on Nikica Jelavic by Jeroen Tesselaar results in a free kick. Free kick crossed left-footed by Gregg Wylde from right channel, Unfair challenge on Graham Carey by Lee McCulloch results in a free kick.20:02
The ball is crossed by Jeroen Tesselaar, save by Allan McGregor.19:02
Paul McGowan has an effort at goal from outside the penalty box missing to the wide right of the goal.18:05
Unfair challenge on Lee Wallace by David Barron results in a free kick. Steven Davis restarts play with the free kick. Nikica Jelavic is flagged offside by the assistant referee. Free kick taken by Craig Samson.17:16
Lee McCulloch challenges Paul McGowan unfairly and gives away a free kick. Direct free kick taken by Lee Mair.13:57
Sasa Papac restarts play with the free kick.13:57 Booking
Booking Graham Carey booked.12:55
Unfair challenge on Lee McCulloch by Graham Carey results in a free kick.10:17
Sasa Papac provided the assist for the goal.10:17 Goal scored
Goal! - Lee Wallace - St Mirren 0 - 1 Rangers Lee Wallace finds the net with a goal from close in to the bottom right corner of the goal. St Mirren 0-1 Rangers.9:35
Paul McGowan takes a shot from 25 yards. Save by Allan McGregor.7:46
Kyle Lafferty has an effort at goal from just inside the box that misses to the right of the target.7:14
The official flags Nikica Jelavic offside. Free kick taken by Craig Samson.6:59
Kenny McLean concedes a free kick for a foul on Gregg Wylde. Carlos Bocanegra restarts play with the free kick.5:41
A cross is delivered by Lee Wallace, David Barron gets a block in. Corner taken right-footed by Steven Davis, save by Craig Samson.4:36
David van Zanten delivers the ball.3:47
Gregg Wylde has an effort at goal from long range that goes wide left.2:09
Jeroen Tesselaar is ruled offside. Dorin Goian takes the free kick.1:37
The ball is sent over by Sasa Papac, clearance by Lee Mair.0:44
Kyle Lafferty is caught offside. Indirect free kick taken by Craig Samson.0:00
The referee gets the game started.
Live data and text provided by our data suppliers