Peter Canavan was a Tyrone hero once again as his last-gasp free gave the Red Hands a dramatic win over Armagh in the All-Ireland SFC semi-final.
Stephen O'Neill's penalty helped Tyrone to a 1-4 to 0-5 lead after a frenetic first-half at Croke Park.
Armagh went ahead for the first time with Steven McDonnell's 59th minute goal and the Orchard men led until Shane Sweeney's late leveller.
Substitute Canavan sent over the winning point deep into injury-time.
The first half was played at lightning pace, in keeping with the two tense and tough Ulster final meetings between these sides.
Tyrone made the brighter start and Owen Mulligan's fifth minute free was followed by a long-range point from midfielder Sean Cavanagh.
The Orchard men got their first point through McDonnell on 10 minutes, only for Mulligan to restore Tyrone's two-point advantage.
Armagh hit back after their slow start to level the game, with Oisin McConville's free followed by McDonnell finishing an excellent move after 23 minutes.
Tyrone's star forward O'Neill, the top scorer in the championship, finally registered a point with a 32nd minute free.
Brian Mallon equalised with a great individual point before Armagh boss Joe Kernan replaced Philip Loughran with Tony McEntee on 34 minutes.
The half ended in dramatic fashion when referee Paddy Russell awarded Tyrone a penalty after Paddy McKeever's shove on O'Neill in injury-time.
O'Neill stepped up and fired past Paul Hearty from the penalty spot to put the Red Hands three points ahead.
There was still time for Armagh captain Kieran McGeeney to slot over a point and reduce the gap to two at the break.
Both sides made half-time substitutions, with Tyrone attacker Peter Canavan coming on for Enda McGinley and John McEntee taking over from Brian Mallon in the Armagh forward line.
Mulligan wasted a good goal-scoring opportunity just a minute into the second half before O'Neill added to Tyrone's lead with a 42nd minute point.
Armagh showed their resolve with three unanswered points from McConville (2) and McDonnell to level the game for a third time.
But a superb point from Ryan McMenanin proved inspirational for Tyrone with O'Neill and Canavan increasing the advantage to three.
The rollercoaster nature of game continued as John McEntee and Aaron Kernan fired over points for Armagh.
O'Neill scored from a free before McDonnell's 59th minute goal, the Armagh forward rounding keeper Pascal McConnell before squeezing the ball into the net from an acute angle.
It gave Armagh the lead for the first time although Mulligan levelled from a free a minute later.
Kernan and Ronan Clarke put Armagh two points clear before Cavanagh pulled one back.
Substitute Shane Sweeney made it 1-12 to 1-12 before Canavan showed his experience and class with the winning point in the second and last minute of injury time.
Tyrone will now meet reigning All-Ireland champions Kerry in the decider at Croke Park on 25 September.
Armagh: P Hearty; A Mallon, F Bellew, C McKeever; A Kernan (0-2), K McGeeney (0-1), A O'Rourke; P Loughran, P McGrane; M O'Rourke, P McKeever, O McConville (0-3); S McDonnell (1-3), R Clarke (0-1), B Mallon (0-1). Subs: T McEntee for Loughran 33 mins, J McEntee (0-1) for B Mallon half-time, E McNulty for McGeeney 62, A McCann for A O'Rourke 66.
Tyrone: P McConnell; R McMenamin (0-1), J McMahon, M McGee, D Harte, C Gormley, P Jordan; B Meenan, S Cavanagh (0-2); B Dooher, B McGuigan, E McGinley, R Mellon; S O'Neill (1-4), O Mulligan (0-3). Subs: P Canavan (0-2) for McGinley, C Holmes for Meenan 43, C Lawn for Jordan 64, S Sweeney (0-1) for Harte 67.
Referee: P Russell (Tipperary)