Two late goals turned this match into a Tynecastle thriller as St Johnstone shared the spoils with hosts Hearts.
Saints’ substitute Chris Kane looked to have secured victory for the visitors with just four minutes to go when he poked a shot past keeper Jack Hamilton from eight yards.
However, Callum Paterson – so often the hero for the Edinburgh side – sent a header down and into the net just a minute later to tie it at 2-2.
Earlier, Hearts had taken the lead with a disputed goal on 25 minutes when a Prince Buaben header was ruled to have crossed the line despite the efforts of defender Brian Easton.
The visitors recovered and hit back four minutes from the interval with a terrific break upfield that was finished off by Danny Swanson after a defence-splitting pass from Steven MacLean.
Chris Millar was restored to Saints’ line-up for only his seventh appearance of the season, while Blair Alston also started.
Both Liam Craig and Graham Cummins dropped down to the bench, which also included a fit-again Tam Scobbie.
The hosts made three changes, with Buaben, Liam Smith, Prince and Tony Watt replacing Faycal Rherras, Anaud Djoum and Robbie Muirhead.
The visitors had a chance to take the lead on five minutes when David Wotherspoon cut in from the left then fired a right-foot shot at Hamilton, which the Hearts keeper did well to punch away.
St Johnstone’s Blair Alston was booked for a foul on Smith just inside the home half then there were claims for a Hearts penalty – ignored by referee Don Robertson – when Watt went down inside the box.
Swanson had a snap-shot saved by Hamilton on 15 minutes, after a Paul Paton freekick eventually broke to him at the edge of the area.
Just seconds later, Jamie Walker broke forward for the hosts but his shot flew wide of the post.
There was a scare for Saints on 18 minutes when keeper Zander Clark tried to boot clear up the park but, as Paterson chased it down, the ball hit the Hearts man and went just wide of the goal.
Paton tried to hit back for the McDiarmid men with a 20-yarder that soared over the bar then Watt had a shot saved at the other end.
It seemed just a matter of time before the game yielded a goal and it duly arrived on 25 minutes, courtesy of Buaben.
It was a scrappy one, to say the least, with Don Cowie’s shot getting cleared off the line before spinning up into the air, and Buaben nodding it over the line – or did he? – despite the desperate attempts of Brian Easton to clear.
Saints, who lost Millar to injury to be replaced by Craig, were on the back-foot now and Clark had to dive to palm away another Buaben effort on 36 minutes.
With four minutes of the half remaining, however, they scored a terrific equaliser.
Swanson had teammate MacLean to thank for a brilliant turn and defence-splitting pass that sent him clear.
However, the finish – a switch from left to right that had defender John Souttar spinning then curling shot past Hamilton – was just as sublime.
The second period started brightly, with Watt sending a drive wide for Hearts before Wotherspoon’s shot was clawed away by Hamilton.
Saints came within the width of the woodwork to taking the lead on 51 minutes.
It was Wotherspoon’s freekick from 25 yards that struck the post then, as the rebound was tapped into the net by Joe Shaughnessy, assistant ref Brian Templeton put his flag up for offside.
Clark came to the visitors’ rescue a couple of minutes later when he saved from Walker then saw Bjorn Johnsen’s follow-up blocked at the near post.
Hearts, who replaced goalscorer Buaben with Arnaud Djoum, looked worried on 71 minutes when Wotherspoon crossed to the back post but Swanson just couldn’t get enough on his header.
The hosts made another change, this time Muirhead coming on for Watt, while St Johnstone goal hero Swanson was replaced by Kane for the final 10 minutes.
Kane was only on the pitch for six minutes when he poked a Wotherspoon cutback past Hamilton.
However, Paterson was in place to head a Cowie corner down and up into the Saints net to finish the scoring.
Hearts: Hamilton, Paterson, Rossi, Kitchen, Walker, Buaben (Djoum 61), Souttar, Cowie, Johnsen (Sammon 84), Smith, Watt (Muirhead 78). Subs not used: Noring, Rherras, Ozturk, Currie.
St Johnstone: Clark, Alston, Anderson, Millar (Craig 25), MacLean, Wotherspoon, Swanson (Kane 80), Shaughnessy, Paton, Foster, Easton. Subs not used: Mannus, Scobbie, Coulson, Gordon, Cummins.
Referee: Don Robertson.