Armagh will meet Donegal in the Ulster Championship semi-final after the Orchard County withstood a spirited second half fightback from Derry to win by two points in Celtic Park on Sunday

Only one point separated the sides deep into injury time after Derry had fought back from a six-point half-time deficit and but for ten wides, the Oak Leaf county could have caused an upset.

As it was, Armagh's greater experience was a telling factor with Ryan Kennedy and Rory Grugan excellent as Rian O'Neill's late free put the seal on a hard-earned victory.

Two divisions will separate these sides next season after Armagh's promotion but there never looked much between them in the contest and rarely will a championship defeat have offered as much reason for optimism as this should for Derry.

Rory Gallagher handed out four championship debuts in his starting line-up with keeper Odhran Lynch, Ethan Doherty, Padriag McGrogan and Conor Glass all named while Conor O'Neill was the sole debutant for the Orchard County, who lost Niall Grimley to the substitutes' bench through injury.

Armagh went into the game as favorites and fully justified that tag in the opening 35 minutes. Even with the wind, Kieran McGeeney's team were content to allow Derry possession inside their own half, before springing the now familiar counter-attacking trap from their own '45'.

Armagh had the breeze at their backs in the opening half and opened the scoring through Grugan but Derry were soon on level terms through a fisted effort from Chrissy McKaigue.

Again the sides swapped scores through Jamie Clarke and Shane McGuigan - who would go on to finish with 0-07 for Derry - all from frees.

Three successive points from Jarlath Og Burns, Grugan and Clarke gave Armagh some breathing space at 0-05 to 0-02 at the first water break, a lead extended by Grugan's 'mark' on the resumption.

Derry were enjoying plenty of possession but Armagh were controlled in their defensive shape as Rian O'Neill, Conor O'Neill, Oisin O'Neill (2), Grugan, all found the target in the closing stages of the half.

Niall Loughlin (2) and Emmet Bradley replied for the hosts but turning around at 0-11 to 0-5, Derry had it all to do.

They set about that task with some fervour though as McGuigan and Ethan Doherty cut the deficit within two minutes of the restart. They were missing opportunities too though, opportunities that would eventually come back to haunt them.

Clarke scored a loevl;y solo effort as the sides wetn tit-for-tat before Clarke right received a black card for hauling down Carlus McWilliams on 49 minutes with the score at 0-13 to 0-10.

A huge Niall Loughlin point sent the sides into the second half water break with only two between them and Derry were in the ascendency.

An Oisin O'Neill free eased nerves but Derry were coming hard in the closing stages  and Armagh would need more than one 'O'Neill' free before they eventually sneaked over the line.

Two superb McGuigan frees in injury time brought the deficit back to a single point but Derry had left it too late for one last rally.

Armagh won their free and O'neill was never going to miss to send his side into the last four next Sunday.

Derry: Odhran Lynch, Paul McNeil, Brendan Rogers, Carlus McWilliams, Ethan Doherty (0-01), Chrissy McKaigue (0-01), Padraig McGrogan, Ciaran McFaul (0-01), Conor Glass, Danny Tallon, Enda Lynn, Padriag Cassidy, Emmet Bradley (0-01), Shane McGuigan (0-07, 7f), Niall Loughlin (0-04, 2f, 1m).

Subs: Patrick Kearney for D Tallon, 46mins; Oisin McWilliams for P McNeill, 58mins; Paul Cassidy for E Lynn, 63mins; Alex Doherty for P Cassidy, 66mins; C McKaigue, 37mins; P McGrogan, 59mins; B Rogers, 71mins; O McWilliams, 73mins;

Armagh: Blaine Hughes, Paddy Burns, Ryan Kennedy, James Morgan, Conor O'Neill (0-01), Aidan Forker (0-02), Mark Shields (0-01), Oisin O'Neill (0-03, 1f), Stephen Sheriden, Rory Grugan (0-03, 1m), Greg McCabe, Stefan Campbell, Jamie Clarke (0-03), Rian O'Neill (0-03, 3f), Jarlath Og Burns (0-01).

Subs: Niall Grimley for G McCabe, 52mins; Callum Cumiskey for S Sheridan, 60mins; 

Referee: Sean Hurson (Tyrone)