Alexis Sanchez struck an extra-time winner as Arsenal came from behind to beat Manchester City 2-1 in their FA Cup semi-final at Wembley.
Sergio Aguero had put City ahead with a fine breakaway goal just after the hour having had another strike controversially ruled out - but Nacho Monreal equalised.
City twice hit the woodwork in the latter stages of normal time through Yaya Toure and Fernandinho but Sanchez, recently linked with City, pounced for a 101st-minute winner after a goalmouth scramble.
Arsenal's victory vindicated under-pressure Arsene Wenger's decision to play with three at the back for the second time in a week - but they were outplayed for large spells early on.
City's pre-game suggestions Gabriel Jesus could be fit proved a smokescreen but the Gunners struggled to hold them back and were forced to employ crude tactics.
David Silva was an early casualty, forced off with 23 minutes gone after failing to recover from a heavy Gabriel tackle. Aguero needed treatment after being kicked in the back by Laurent Koscielny and Sanchez was booked for a challenge on Fernandinho.
Before he left the field, Silva forced a good save from Petr Cech with a header and his replacement Raheem Sterling volleyed wide.
Aguero wanted a penalty after tangling with Alex Oxlade-Chamberlain but nothing was given.
Arsenal offered little but Claudio Bravo, preferred to Willy Caballero, did get some sarcastic cheers when he safely held an Olivier Giroud header.
Koscielny had a goal correctly ruled out for offside but controversy erupted when City had a goal disallowed in more contentious circumstances.
Aguero thought he had scored with a shot that crossed the line before Sterling smashed home a rebound off Cech - but the ball was ruled to have drifted out of play beforehand from Leroy Sane's cross. Replays suggested it was a very tight call but ultimately wrong.
Arsenal responded well to the reprieve with a positive start to the second half but City had another good opportunity when Nicolas Otamendi headed wide.
The opening goal came just after the hour as City broke from deep following an Arsenal corner.
The ball was headed out as far as Yaya Toure and he released Aguero with a superb pass from just outside his own area. The Argentinian raced clear of Monreal, closed in on goal and beat Cech with a brilliant flick. It was his 30th goal of the season, his 12th in 12 games and sparked jubilant scenes in the City end, including a 'Poznan' celebration.
Their joy was short-lived, however, as the impressive Oxlade-Chamberlain whipped a dangerous, dipping cross into the City box and Monreal volleyed in at the far post.
Again questions were also likely to be asked of Bravo, who made no attempt to come for the cross, but City's response was strong.
They hit the woodwork twice in quick succession with Cech tipping a hooked Toure shot onto the post and Fernandinho thumping a header against the bar.
But Arsenal went close to a late winner when substitute Danny Welbeck drove wide and it was they who made the better start in extra time.
Rob Holding headed narrowly over and moments after City surprisingly, but perhaps because of injury, took Aguero off the Londoners snatched what proved the winner. City failed to clear a free-kick into the box and although Welbeck miskicked, Sanchez made no mistake as he pounced from close range.
City went close to an equaliser when Fabian Delph had an effort deflected into the side-netting and Toure also curled a shot wide.