Rangers suffered a shock setback in their attempts to wrap up the Clydesdale Bank Premier League as St Johnstone bolstered their hopes of a top-six finish with a stunning 4-1 win over the champions-elect.
Goals from Cillian Sheridan, Chris Millar, Liam Craig and Murray Davidson sealed an impressive victory for Derek McInnes' men as Rangers squandered the chance to move 13 points clear of Celtic at the summit.
Sasa Papac secured the points the last time Rangers visited McDiarmid Park but his goal tonight was scant consolation for a side which had not conceded four goals outside an Old Firm derby since defeat at Hearts in September 2007.
Rangers named an unchanged side from the one which romped to victory over Hearts at the weekend, while Saints made two changes from the side beaten by Hamilton, with Sheridan and Steven Anderson drafted into the team.
The original match fell victim to a frozen pitch in February and tonight's game was the subject of another pitch inspection before going ahead.
And for Saints it proved worth the wait when they left Rangers reeling with a dream start which saw them race into a two-goal lead after just 12 minutes.
On-loan Celtic striker Sheridan opened the scoring with seven minutes gone when he collected a long ball from Danny Grainger on the left flank and dispatched a ferocious angled drive past Allan McGregor.
The inclusion of David Weir - who will be 40 in May - means he is now the oldest ever player to play for Rangers, but he had an unwanted part to play in the home side's second goal.
Millar's speculative shot took a massive deflection off the veteran defender and left McGregor stranded.
A comeback appeared to be on the cards when Rangers hit back after 16 minutes when a decent pass from Steven Davis found Papac and he drilled a low shot past Graeme Smith from inside the box.
Walter Smith's men immediately set about trying to equalise but an ambitious 20-yard shot from Lee McCulloch drifted harmlessly over the crossbar.
There were then claims for an Anderson handball in the box but pleas for a penalty were ignored by referee Mike Tumilty.
At the other end, Saints were looking dangerous again when Sheridan ran onto a neat pass from Filipe Morais only to lash into the side-netting.
The home side were celebrating again after 36 minutes in what was proving to be a thrilling first half.
This time Millar was the provider with a cross from the right which took a slight deflection off McCulloch before finding Craig to nod home at the far post.
Rangers made a double switch at the interval with Kyle Lafferty and Maurice Edu thrown into the action in place of Kris Boyd and Kevin Thomson.
The champions enjoyed the best of the possession after the restart and could have thrown themselves a lifeline when Kenny Miller tried to pick out Lafferty at the far post, but he was a yard too slow and failed to connect.
The Northern Irishman then won a foul 35 yards out but squandered another chance to add his name to the scoresheet when Davis' free-kick bounced off his chest a yard out and was smothered by Smith.
Lafferty was involved again when he nodded into the path of Edu in plenty of space and the American should have left the net bulging with a well-struck shot that fizzed past Smith's right-hand post.
Nacho Novo was then introduced for Danny Wilson with 15 minutes to go as Rangers made a desperate late bid to salvage something from the game.
But it was Saints who found the back of the net again through a substitute of their own after 79 minutes.
Grainger's free-kick was nodded on by Michael Duberry for Davidson to slide home amid claims of offside from the visitors as he wrapped up the win in style.