Daniel McNulty nailed a 30m free to snatch victory for the Red Hands, just when it looked like Donegal had the winning momentum.
In front of 3,239 supporters in Celtic Park last night, Tyrone opened the scoring in the sixth minute with a Daniel McNulty free before Donegal edged in front with a Hugh McFadden free and Eoin McHugh point.
The crucial score of the opening half was Conor Meyler’s goal in the eighth minute, after Ruairi McGlone’s strong run through the middle drew a couple of defenders to him and he slipped the ball out to Meyler, who drilled the ball low into the far corner of the net.
Both sides looked comfortable breaking forward and Lee Brennan scored a couple of superb left-footed points.
Ciaran McLaughlin picked up a black card for the second game in a row in the 28th minute and McFadden nailed the free to cut Tyrone’s led to 1-4 to 0-6.
However the Red Hands hit two more points before the interval from Michael Cassidy and Brennan to regain their three-point lead.
After a poor first half, Donegal made two half-time substitutions and Willie Gillespie and Hugh McFadden did post scores early in the second half.
Tyrone full-forward Daniel McNulty had a goal disallowed for over-carrying, but he converted a long-range free in the 39th minute to restore Tyrone’s three-point advantage.
Hugh McFadden had a mixed night with his free-taking, kicking five wides, but he nailed a couple of important ones to keep Donegal in touch in the third quarter.
Ruairi McGlone capitalised on a poor Donegal kickout to score a point and McNulty’s great catch and turn led to his first from play to leave Tyrone three points up with 10 minutes remaining.
Donegal then hit three unanswered points from Eamon McGrath, Darach O’Connor and sub Stephen McBrearty.
Tyrone mounted one last attack. Cathal McShane was fouled by Ciaran Thompson and McNulty stepped up to convert a 30m winning free.
They will play Roscommon in the All-Ireland semi-final on Saturday week.
H McFadden 0-5 (4f), E McHugh 0-2, C Thompson 0-1 (f), D O’Connor 0-2, W Gillespie 0-1, E McGrath 0-1, S McBrearty 0-1.
L Brennan 0-4 (2f), D McNulty 0-4 (3f), C Meyler 1-0, C McShane 0-1, M Cassidy 0-1, R McGlone 0-1.
D Rodgers; C Morrison, C Parke, J O’Brien; R McHugh, D Mulgrew, E Gallagher; T McClenaghan, C Thompson (0-1, f); O Crawford, L Connor, D O’Connor (0-2); W Gillespie (0-1), H McFadden (0-5, 4f), E McHugh (0-2)
E McGrath (0-1) for Morrison (HT), S McBrearty (0-1) for McClenaghan (HT), J Brennan for Connor (55), C Mulligan for Crawford (55), C McGonigle for Gillespie (58).
S Fox; R Mullan, P Hampsey, M Cassidy (0-1); C McLaughlin, R Brennan, K McGeary; F Burns, C McShane (0-1); C Meyler (1-0), M Kavanagh, M Walsh; L Brennan (0-4, 2f), D McNulty (0-4, 3f), R McGlone (0-1).
R Kelly for McLaughlin (BC, 29), M Bradley for McGlone (45), S McKenna for Burns (57).
Noel Mooney (Cavan).