Relegation-threatened Tyrone scored a vital two-point win at Healy Park and hammered a dent in Mayo's bid for a place in the Allianz FL Division One final.
Three Peter Harte points and two from Conor Meyler had Tyrone ahead by 0-8 to 0-3 at the interval.
Mayo fought back to within a point through Ryan O’Donoghue, but the Red Hands sealed a tense tie, a repeat of last year’s All-Ireland final, with a Darragh Canavan score.
A second successive defeat has blown Mayo off course for the League decider, but victory Kildare next Sunday could salvage their title tilt.
Tyrone pressed hard on the kick-outs of Rory Byrne, a pre-match replacement for the experienced Rob Hennelly, and reaped the benefits with early scores from Frank Burns, Peter Harte and Conor Meyler.
It was a high-energy approach from a Red Hand side that had looked off the pace in many of their previous five games, from which they had manged just one win.
Four of their first five scores were from defenders, a Darragh Canavan mark the only sequence-breaker as they raced into a 0-5 to 0-0 lead by the 13th minute.
And they were prepared for Mayo's strong running, setting up lines of resistance to halt the likes of Lee Keegan, Matthew Ruane and Stephen Coen, while Brian Kennedy denied the westerners with a handful of turnovers.
James Horan’s side finally got off the mark in the 24th minute web Ryan O’Donoghue converted a free, but Meyler responded immediately with his second.
Horan had to act to stop the Tyrone support runs from deep, and with some success, but late in the half, Harte found the openings to fire over another couple of scores, after Jordan Flynn had hit Mayo’s only first half point from play.
The Ulster side led by 0-08 to 0-03 at the interval, but their lead was dismantled systematically by a Mayo side moving with purpose.
By the 49th minute they had the deficit down to a point, and looked set to push on for the win.
Mattie Ruane and O’Donoghue both sent over long range scores, and substitute Jack Carney squeezed over a gem from a tight angle, before O’Donoghue’s free left the home side hanging on by a thread at 0-9 to 0-8.
But with their backs to the wall, the Ulster men came out fighting, ending a 15 minute scoreless spell with a Darren McCurry special.
They frustrated the Mayo men with a string of last-ditch tackles and turnovers conceding just one point in the final 25 minutes, another O’Donoghue free.
Mayo took some questionable options when in offensive positions late on, and combined with last-ditch Tyrone defending, they were unable to craft that vital equaliser.
It was substitute Richie Donnelly who got the home side out of trouble to create a scoring opportunity which Darragh Canavan executed.
A half-chance for a goal fell to Carney late into stoppage time, but he pulled his effort wide and the Red Hands held on.
Tyrone: N Morgan; M McKernan, R McNamee, F Burns (0-01); C Meyler (0-02), R Brennan (0-01), P Harte (0-03); C Kilpatrick, B Kennedy; P Hampsey, N Sludden, K McGeary; D McCurry (0-01), C McShane, D Canavan (0-02, 1m).
Subs: R Donnelly for Kennedy (h-t), M Donnelly (0-01) for McShane (h-t), N Donnelly for Sludden (55), L Rafferty for Brennan (61), B McDonnell for Canavan (71)
Mayo: R Byrne; L Keegan, D McBrien, D McHugh; O Mullan, A O’Shea, S Coen; J Flynn (0-02), M Ruane (0-01); F McDonagh, P Towey, F Boland; A Orme, J Doherty, R O’Donoghue (0-05, 4f).
Subs: J Carney (0-01) for McDonagh (35+1), K McLoughlin for Towey (h-t), E Hession for McHugh (h-t), D Coen for Doherty (52), C Loftus for Boland (67)
Referee: M Deegan (Laois).