A freekick goal with just a hint of fluke about it sent St Johnstone out of the William Hill Scottish Cup.
Saints were in this quarter-final all the way, mastering the muddy McDiarmid Park surface better than Celtic.
All their hard work, discipline and fine play came to nothing, though, thanks to a Ryan Christie freekick that sneaked into the net from 35 yards.
There were suggestions Christoffer Jullien had touched the ball on its way into the net but it was Christie to whom the Parkhead players all raced to celebrate.
This was yet another encouraging display from Tommy Wright’s team against one of the Glasgow giants, following on from their 2-2 home draw with Rangers in the league.
Sadly, though, they are out the cup while it’s off to Hampden for Neil Lennon’s side.
Hoops loan player Anthony Ralston couldn’t play against his parent club, while Jason Holt was available after missing the 2-2 draw with Rangers for the same reason. Callum Booth dropped to the bench, while there were starting slots for Scott Tanser and Liam Gordon as Wright stuck with two strikers – Stevie May and Callum Hendry.
For the visitors, Ryan Christie returned following suspension, Nir Bitton got a rare start and Leigh Griffiths joined the attack.
Storm Jorge hadn’t spared the stadium and it was lashed by rain and blasted by wind as the match kicked off.
With two minutes on the clock, May looked like he might break clear but he was pushed to the right.
Up at the other end, Christie tried to sneak a curling shot past Saints keeper Zander Clark but it was wide of the far post.
Matt Butcher then had a half-chance for the Perth men when the ball broke to him after a save by Fraser Forster from Hendry. He had time at the edge of the Celtic area but Butcher miskicked and threat fizzled out.
The visitors were looking threatening and Griffiths and Callum McGregor both tried their luck, with the latter’s low drive bringing a good block out of Clark.
On 16 minutes, Saints came close when Hendry’s header off a David Wotherspoon freekick sneaked just a yard or two wide.
A couple of minutes later, St Johnstone’s Butcher picked up the first yellow card of the day for challenge on Christie.
After some penalty box pinball, Odsonne Edouard’s volley was well saved by Clark on 25 minutes before Celtic keeper Forster had to push a floated cross from Drey Wright over his bar.
Four minutes from half-time, Saints’ harrying of the Hoops players paid off again and the ball broke to Wright 25 yards from goal. He took a touch before smashing a shot at Forster, who did well to get his hands on it. The goalie then tipped a Jamie McCart header over.
As the whistle blew to end the first half, it looked like the Perth side’s game plan was working perfectly.
Forrest had the first opportunity of the second period on 47 minutes when he guided the ball wide of the far post from 15 yards. Just seconds later, the home defence backed off Edouard but he could only scoop the ball over.
Wright produced some trickery to bamboozle Greg Taylor out on the right before delivering a low cross to May at the near post that was deflected just a yard wide.
The Hoops looked dangerous again on 55 minutes when Forrest’s low shot was expertly palmed away by Clark, with Griffiths standing inches away just in case he made a hash of it.
Griffiths was then released by a pass from Kristoffer Ajer but the former Dundee man’s effort didn’t trouble the home goal, to put it politely.
Saints were still working hard to close down Celtic as the match passed the hour but it was getting harder and harder to do so.
The visitors took off Griffiths and replaced him with Tom Rogic on 65 minutes before Saints’ Butcher sent a strike just wide.
Clark was then the hero for the hosts when he leapt to his left to push away a close-range attempt from Christie that looked odds-on to be the opening goal.
Saints escaped twice in quick succession on 69 minutes when Clark pushed Edouard’s strike on to the post then Jullien somehow watched his shot spin wide when it looked a certain goal.
Tanser smashed a freekick into the Celtic wall then May’s shot was blocked after a sweeping move from the home team two minutes later as everyone was reminded St Johnstone were right in this game.
McCart fouled Forrest on 80 minutes to earn a booking but, more importantly, concede the freekick that led to Celtic’s goal.
It was Christie who took the freekick from 35 yards away and, although Jullien claimed he got a toe to the ball, it was the Scotland man that his teammates rushed to for the celebrations.
The home team brought on Michael O’Halloran for Wotherspoon for the closing minutes but it didn’t help them find an equaliser.
St Johnstone: Clark, Tanser, McCart, Wright, Wotherspoon (O’Halloran 83), May, Kerr, Butcher, McCann, Hendry (Kane 77), Gordon. Subs not used: Parish, Swanson, Holt, Booth, Craig.
Celtic: Forster, Jullien, Taylor (Hayes 76), Bitton, Brown, Griffiths (Rogic 65), Christie, Edouard (Bayo 87), Ajer, McGregor, Forrest. Subs not used: Bain, Klimala, Frimpong, Elhamed.
Referee: Bobby Madden.