Tyrone overcame 14-man Armagh 0-19 to 1-13 in an Athletic Grounds thriller to set up an Ulster SFC semi-final with Donegal or Derry.
The home side lost Kevin Dyas to a second yellow card with 15 minutes still to play, and were unable to cope with the vast experience of a Red Hands side that staged a strong and decisive finish.
Deburant Aidan Forker scored the only goal of the game early in the first half, but Mickey Harte’s side never panicked, even when Mallon brought the sides level five minutes from the end.
Despite a series of crippling injuries to top forwards, the Tyrone boss was delighted with the 19 points tally delivered by his side.
In front of a crowd of 16,418, Brian Mallon and Joe McMahon exchanged early points, both from frees, but the game exploded into spectacular action when Aidan Forker sent Mallon clear, only for his shot to be superbly saved by Pascal McConnell.
But Armagh did hit the net in the ninth minute when Caolan Rafferty sent Aidan Forker in for a sweet finish that gave McConnell no chance.
Tyrone then stepped up the tempo and were soon level after Colm Cavanagh floated over his second point and Owen Mulligan also hit the target.
Then came a couple of moments of magic from two of the game’s most gifted attackers.
First, Jamie Clarke nonchalantly hooked over a point from a tight angle, and then, at the other end, Stephen O’Neill bamboozled Ciaran McKeever to clip over a gem.
The challenges were crisp and unflinching, the pace was at times breathtaking, and the game swung from end to end, with both sides stringing together some wonderful moves.
Kevin Dyas and Clarke got Armagh level again, but only until Mark Donnelly stroked over another lead point.
And the Red Hands, now looking the more composed of the teams, finished the half strongly with points from Penrose and corner-back Dermot Carlin to lead by 0-11 to 1-5 at the break.
The loss of Aaron Kernan to injury was a big blow to Armagh, but they raised their game after the restart, with Mallon, Clarke and substitute Gavin McParland, with two wonderful points, pegging the deficit back to a single point.
Kieran Toner and Malachy Mackin were beginning to get on top in midfield, and with McParland adding an extra threat to their forward division, they looked increasingly menacing.
But they suffered a major blow in the 55th minute when playmaker Kevin Dyas picked up two bookings in the space of a minute, the second for a high tackle on Peter Harte.
Tyrone struggled to gain from their opponents loss, however, and the home side came back to within a point, Clarke and Mallon both converting frees.
The towering John Kingham was pushed up as a target man full-forward, but the route one strategy failed to pay off for Armagh, with Joe McMahon, now at full back, winning virtually every ball.
Mallon brought the sides level from a 50-metre free, but once again Tyrone stepped on the gas, and a string of late scores, including a delightful O’Neill effort, saw them over the line.
Armagh scorers: A Forker 1-0, J Clarke 0-6 (2f), B Mallon 0-4 (4f), G McParland 0-2, K Dyas 0-1.
Tyrone scorers: M Penrose 0-8 (5f), S O’Neilll, P Harte, O Mulligan (1f), C Cavanagh 0-2 each, D Carlin, M Donnelly, Joe McMahon (f) 0-1 each
Armagh: P McEvoy, A Mallon, B Donaghy, D McKenna, A Kernan, C McKeever, F Moriarty, K Toner, M Mackin, A Forker, K Dyas, A Duffy, J Clarke, B Mallon, C Rafferty.
Subs: P Duffy for McKenna (18), G McParland for Kernan (h-t), J Hanratty for Forker (48), C Vernon for Moriarty (54), J Kingham for Mackin (57)
Tyrone: P McConnell, A McCrory, Justin McMahon, D Carlin, C McCarron, C Gormley, Sean O’Neill, Joe McMahon, C Cavanagh, R McNabb, M Donnelly, P Harte, M Penrose, Stephen O’Neill, O Mulligan.
Subs: M Murphy for Justin McMahon (h-t), N McKenna for Mulligan (65), R McMenamin for McCarron (67), P McNeice for Donnelly (73)
Referee: J McQuillan (Cavan).