Francisco Sandaza scored twice as St Johnstone saw off Kilmarnock and moved to within two points of third place in the Scottish Premier League.
Saints opened the scoring on 25 minutes when Sandaza nodded in after Dave McKay's effort was cleared.
Sandaza doubled his tally in first-half injury time, powering in a header from Liam Craig's swirling corner.
Kilmarnock's best chance came when Paul Heffernan's volley was well saved by Peter Enckleman.
With Sandaza making it 12 goals in 16 starts, the Perth club ended a miserable run of home results having lost their previous three matches at McDiarmid Park.
Kilmarnock's James Dayton used the strong wind to his advantage with a curling corner that had Enckelman flapping early on.
With the visitors on top, Gary Harkins was unlucky with a drive that was deflected over the crossbar by defender Steven Anderson.
Heffernan was next to have a go for Kilmarnock, taking a pass from Dean Shiels and stinging Enckelman's palms with a vicious strike.
Sandaza tested Killie keeper Cammy Bell with a low shot after 17 minutes and Manuel Pascali then produced a brilliant tackle to deny the in-form Spaniard after great wing play from Chris Millar.
Craig's long-range drive was then batted away by Bell before the breakthrough goal arrived.
Jody Morris's corner was met by Mackay, whose shot was blocked on the line by Liam Kelly, but Sandaza was quickest to react as he buried the rebound.
Kilmarnock almost equalised on 30 minutes when Danny Racchi's long-range drive was tipped onto the post by Enckelman and there was a strong claim for a penalty when Dayton's shot appeared to be blocked by David McCracken's arm.
However, St Johnstone doubled their advantage of the stroke of half-time when Sandaza powered home Craig's corner from close range.
St Johnstone had the first chance of the second half when Marcus Haber raced down the right and smashed a shot off the outside of the post.
Millar's 20-yard drive was then deflected wide by Pascali and James Fowler cleared off the line on 55 minutes after Bell parried another strike from Haber.
Kilmarnock's best chance to get back into the game fell to Heffernan but his volley was brilliantly tipped over by Enckelman on 63 minutes.
Enckelman also punched Liam Kelly's dipping effort to safety but the Saints held on to move three points clear of fifth-placed Hearts.