St Johnstone secured their Scottish Premiership survival after a narrow win against 10-man Kilmarnock, whose own troubles worsened.
Liam Gordon’s first-half header puts the Perth side on 39 points, eight clear of bottom club Dundee United with two games left, five in front of Kilmarnock and a further point clear of Ross County.
That means Steven MacLean’s men, who sit ninth, can only be caught by one of the three sides below them.
“I’m not interested in me but for the club, the chairman, his dad, the players and supporters and all the players and staff – it’s fantastic,” MacLean told BBC Scotland.
“It’s a credit to everybody, and I’ve got to include Callum [Davidson] in that, he was my gaffer as well and he was the first person on the text so it shows you what kind of guy he is.”
Kilmarnock, meanwhile, stay 10th as their fight for survival continues.
Derek McInnes’ side hit the woodwork twice after going behind, but then David Watson’s red card for a reckless challenge just before the break gave them a mountain to climb.
They stay three ahead of United, who they face on Wednesday in what promises to be an incredibly tense contest, and one in front of County in the play-off spot.
Graham Carey and Zak Rudden passed up St Johnstone’s best chances to make things more comfortable, but in the end they clinched safety after making it impossible for two sides to catch them.
It is some feat for interim manager MacLean, who in his first job inherited a side in freefall after a run of two wins in 16 games.
Captain Gordon has scored the winner in both of those victories, and his desire to get his head on the ball in front of Joe Wright proved pivotal for his side early on at Rugby Park.
Kilmarnock only really have themselves to blame, as Wright’s poor marking and Christian Doidge’s missed clearance led to the goal, and then talented teenager Watson was reckless in flying in on Cammy Ballantyne.
Before that, they were profligate too, with Watson unable to turn in from close range after Luke Chambers’ shot deflected off a post and across the face of goal, and Donnelly’s shot skipped off an upright, too.
McInnes’ side gave everything in a frantic second half, but were unable to capitalise on their strong home form and get back-to-back league wins for the first time this season.
Player of the match – Liam Gordon

MacLean stakes claim for job, Kilmarnock count cost – analysis
It’s mission accomplished for MacLean, after securing a 15th top-flight season for St Johnstone.
He deserves immense credit for putting Ballantyne in for a first start of the season, and the young midfielder delivered with an all-action performance.
It was far from vintage stuff, and the Perth side were still wasteful at 1-0, but it’s job done and MacLean will aim to use the final two games to impress on the club his ability to take them forward.
Kilmarnock can pick out positives from this game. They played some nice stuff at times, but their finishing is simply not good enough, as their status as the division’s lowest scorers attests.
And, with two games left, picking out positives is not what they need. They need results. Their match with United on Wednesday is now critical, and they will be without Watson, who has been brilliant in midfield.
His red card showed his inexperience, but it will be tough without his energy and given they have won one league away game all season. It’s a tough learning curve for the 18-year-old.
What they said
Kilmarnock manager Derek McInnes: “It was the start we were looking for but the goal changes things. It’s such a poor goal to lose. We feel we’ve been far better at set plays but for the ball to go across the six-yard box as far as it did is extremely disappointing.
“At this stage of the season it’s not just performance that’s required it’s responsibility and discipline. And in that moment we were short of responsibility, and then discipline for the sending off. That had a huge bearing on the game.”
St Johnstone interim manager Steven MacLean: “I thought we were excellent. I thought we had good opportunities and get the goal from a set-play, one we worked on. I thought we were very good.
“Then Kilmarnock get the man sent off, it was always going to be whether we could score in transition and get that second goal. Unfortunately we didn’t but all in all I’m very happy.”
What’s next?
Kilmarnock go to Tannadice in a huge relegation tussle (19:45 BST), while at the same time St Johnstone can journey to Dingwall to face Ross County with the pressure off.
Line-ups
Kilmarnock
Formation 3-5-2
- 20Walker
- 2Mayo
- 19Wright
- 3DorsettSubstituted forLyonsat 62′minutes
- 11Armstrong
- 34WatsonBooked at 44mins
- 24Chambers
- 22DonnellySubstituted forPowerat 49′minutes
- 7McKenzieSubstituted forJonesat 78′minutes
- 26DoidgeBooked at 47minsSubstituted forCameronat 78′minutes
- 23Vassell
Substitutes
- 1Hemming
- 4Power
- 8Alston
- 10Jones
- 14Sanders
- 16Robinson
- 17Lyons
- 27Cameron
- 31Polworth
St Johnstone
Formation 4-1-4-1
- 1MatthewsBooked at 72mins
- 2Brown
- 6Gordon
- 4Considine
- 19MontgomeryBooked at 71mins
- 13McGowan
- 14Wright
- 18MacPherson
- 25BallantyneBooked at 29minsSubstituted forWotherspoonat 87′minutes
- 23Carey
- 7MaySubstituted forRuddenat 76′minutes
Substitutes
- 3Gallacher
- 5Mitchell
- 9Kane
- 10Wotherspoon
- 16Rudden
- 17Bair
- 20Sinclair
- 26McLennan
- 29Murphy
- Referee:
- John Beaton
- Attendance:
- 6,004
Live Text
-
Match ends, Kilmarnock 0, St. Johnstone 1.
-
Second Half ends, Kilmarnock 0, St. Johnstone 1.
-
Attempt blocked. Innes Cameron (Kilmarnock) header from very close range is blocked. Assisted by Daniel Armstrong with a cross.
-
Corner, Kilmarnock. Conceded by Adam Montgomery.
-
Alan Power (Kilmarnock) wins a free kick in the defensive half.
-
Foul by David Wotherspoon (St. Johnstone).
-
Attempt blocked. Zak Rudden (St. Johnstone) right footed shot from the left side of the box is blocked. Assisted by Graham Carey.
-
Attempt missed. Zak Rudden (St. Johnstone) right footed shot from the centre of the box is too high. Assisted by Graham Carey with a headed pass.
-
Attempt missed. Graham Carey (St. Johnstone) left footed shot from the left side of the box is high and wide to the left.
-
Foul by Brad Lyons (Kilmarnock).
-
Adam Montgomery (St. Johnstone) wins a free kick in the attacking half.
-
Offside, St. Johnstone. David Wotherspoon tries a through ball, but Zak Rudden is caught offside.
-
Corner, St. Johnstone. Conceded by Joe Wright.
-
Substitution, St. Johnstone. David Wotherspoon replaces Cammy Ballantyne II.
-
Corner, St. Johnstone. Conceded by Joe Wright.
-
Attempt missed. Jordan Jones (Kilmarnock) right footed shot from outside the box is close, but misses to the left. Assisted by Kyle Vassell.
-
Joe Wright (Kilmarnock) wins a free kick in the defensive half.
-
Foul by Zak Rudden (St. Johnstone).
-
Attempt saved. Cameron MacPherson (St. Johnstone) right footed shot from the right side of the box is saved in the top centre of the goal. Assisted by Drey Wright.
-
Attempt saved. Cammy Ballantyne II (St. Johnstone) right footed shot from the left side of the box is saved in the centre of the goal. Assisted by Graham Carey.
Player of the match
GordonLiam Gordon
Kilmarnock
-
Squad number2Player nameMayo
-
Squad number20Player nameWalker
-
Squad number34Player nameWatson
-
Squad number26Player nameDoidge
-
Squad number19Player nameWright
-
Squad number4Player namePower
-
Squad number3Player nameDorsett
-
Squad number11Player nameArmstrong
-
Squad number10Player nameJones
-
Squad number24Player nameChambers
-
Squad number23Player nameVassell
-
Squad number22Player nameDonnelly
-
Squad number7Player nameMcKenzie
-
Squad number17Player nameLyons
-
Squad number27Player nameCameron
St Johnstone
-
Squad number6Player nameGordon
-
Squad number25Player nameCammy Ballantyne II
-
Squad number19Player nameMontgomery
-
Squad number1Player nameMatthews
-
Squad number7Player nameMay
-
Squad number14Player nameWright
-
Squad number4Player nameConsidine
-
Squad number13Player nameMcGowan
-
Squad number23Player nameCarey
-
Squad number2Player nameBrown
-
Squad number18Player nameMacPherson
-
Squad number10Player nameWotherspoon
-
Squad number16Player nameRudden