Donegal put in a magnificent performance to overcome Tyrone and maintain their unbeaten league record at MacCumhaill Park that stretches back to 2010.
The home side had to wait until the final minutes of a very good contest to get the win with local boy Oisin Gallen putting them ahead before Jeaic Mac Ceallabhuí stepped up with a last-gasp goal.
The sides were level on numerous occasions, including at half-time, but overall Donegal displayed a much-improved spirit and were worthy winners.
Tyrone welcomed back three of the four players red carded against Armagh in Padraig Hampsey, Michael McKernan and Kieran McGeary. The first quarter was evenly contested, almost point for point.
Conn Kilpatrick had an early Tyrone goal chance, but pulled his effort wide before Patrick McBrearty (free) and Ryan McHugh got Donegal on the board.
But by the 11th minute Darragh Canavan and Darren McCurry (free) had Tyrone on terms.
Patrick McBrearty and Michael McKernan traded points but then the reigning All-Ireland champions took the game by the scruff of the neck.
Despite losing Padraig McNulty to a hand injury after a clash with Odhrán McFadden Ferry, Tyrone hit four points by the half hour mark through Kilpatrick, McKernan again, McCurry (free) and substitute Richard Donnelly.
Then as the game went into eight minutes of added time at the end of the half, Donegal supporters got a lift when Peadar Mogan and Patrick McBrearty were involved before Conor O'Donnell palmed to the net.
Conor O'Donnell’s goal at the end of the half has brought Donegal back into the game. It’s level in Ballybofey at the break, but Tyrone will have the wind advantage in the second half #rtegaa— RTÉ Sport (@RTEsport) February 26, 2022
Donegal 1-04 Tyrone 0-7
Live updates 👉 https://t.co/yBTzqmqoQC pic.twitter.com/90WL6zpvSo
Donegal could have had a second goal as they found space again inside the Tyrone defence, but Conor 'Donnell was denied by a block but had Ryan McHugh free for a tap in. Just before the break Jason McGee launched an equaliser from the 45m line to leave it Donegal 1-4, Tyrone 0-7 at the break.
In an open start to the second half the sides traded points with McCurry (2) and goalkeeper Shaun Patton (47m free) and Conor O'Donnell for the home side.
The Tyrone goal had a narrow escape as Hugh McFadden's effort was blocked and Niall Morgan did well to win the second attempt.
Shane O'Donnell put Donegal ahead but almost immediately McCurry levelled once more in the 51st minute.
With eight minutes left the sides were still deadlocked at 1-9 to 0-12, man of the match O'Donnell in fine scoring form while Cathal McShane and Johnny Munroe had Tyrone points.
Oisin Gallen edged Donegal ahead and in the final minute of added time Jeaic Mac Cerallabhui was on the end of a very good move to palm to the net.
Donegal: Shaun Patton (0-01,f); Caolan Ward, Brendan McCole, Stephen McMenamin; Peadar Mogan, Eoghan Bán Gallagher, Odhrán McFadden Ferry; Hugh McFadden, Jason McGee (0-01); Shane O'Donnell (0-01), Ryan McHugh (0-01), Ciaran Thompson; Patrick McBrearty (0-02,0-01f), Conor O'Donnell (1-03), Niall O'Donnell.
Subs: Jeaic Mac Ceallabhui (1-00) for N O'Donnell 35+7; Oisin Gallen (0-01) for H McFadden 59; Dáire Ó Baoill for S O'Donnell, Ethan O'Donnell for McFadden Ferry, both 67;
Tyrone: Niall Morgan; Michael McKernan (0-02), Padraig Hampsey, Frank Burns; Niall Sludden, Johnny Munroe (0-01), Conor Meyler; Conn Kilpatrick (0-01), Brian Kennedy; Nathan Donnelly, Darragh Canavan (0-01), Kieran McGeary; Darren McCurry (0-05,0-03f), Padraig McNulty, Paul Donnelly.
Subs: Richard Donnelly (0-01) for McNulty 20; Cathal McShane (0-01)for Donaghy 56; Conor McKenna for McGeary 67
Referee: Brendan Cawley (Kildare)