Emmanuel Adebayor scored twice as stylish Arsenal returned to the top of the Premier League and put an end to Manchester City's unbeaten home record.
Eduardo rounded off a stunning move for Arsenal's second
Adebayor set Arsenal on their way, sweeping the ball in from close range.
And Eduardo's acrobatic turn and volley made it 2-0 from Adebayor's clever header after another glorious move.
City replied when Vedran Corluka dispossessed Gael Clichy and found Gelson Fernandes but Adebayor sealed the win from six yards late on.
Sven-Goran Eriksson's side had only won one of their last seven Premier League fixtures, and with their confidence looking fragile the last thing they needed was to concede early against an Arsenal team who have lost just once in the league all season.
But that's exactly what happened as the visitors went ahead on nine minutes following a regulation free-flowing move.
Some neat first-time passing saw the Gunners work the ball out wide to the marauding Bacary Sagna whose superb first touch allowed him to outpace and out-muscle Michael Ball and get to the byline.
Adebayor met the cross and his shot crept in despite the best efforts of the sprawling Micah Richards and Joe Hart.
And another sumptuous move from the Gunners soon made it 2-0.
Eduardo, Adebayor and Abou Diaby combined to set Clichy free on the left and his deep cross found Adebayor who picked out Eduardo.
The Croatian controlled the ball brilliantly on his chest and, with his back to goal, volleyed over his shoulder and past Hart.
City had a strong claim for offside but the visitors thoroughly deserved their lead.
However, just as Arsenal looked certain to run away with the match, some sloppy defending gifted City a way back.
Clichy tried to let the ball run out of play and was robbed in possession by Corluka and his pull-back was neatly side-footed home by Fernandes.
The goal breathed life into the Eastlands crowd but Hart made a fine save from Adebayor's header after another surging Sagna run and skipper William Gallas fired narrowly wide following a corner.
City could have gone ahead in the opening five minutes when a fantastic chipped pass from Elano almost set Stephen Ireland through on goal.
Adebayor is outstanding at the moment and we need him in this form
And Martin Petrov fired wide from the edge of the box in the closing seconds of the first period.
But apart from that, Arsenal were in complete control of the opening 45 minutes and although City improved after the break, they rarely looked like getting back on level terms.
Arsenal continued to create chances and had several opportunities to make the game safe.
Cesc Fabregas twice went close from long range, Mathieu Flamini had a shot blocked and Adebayor was denied when Richards and Richard Dunne closed him out as he raced through on goal.
At the other end Jens Lehmann - deputising for the injured Manuel Almunia - sprinted from his area to prevent City substitute Darius Vassell getting a clean run on goal and Elano's follow-up shot sailed over the bar.
But Arsenal sealed the win with two minutes to go when a swift counter-attack saw Alexander Hleb and Fabregas find Adebayor and the striker stroked home his 18th league goal of the season.
Arsenal boss Arsene Wenger:
"We had a good start and went 2-0 up but we then lost concentration and eased up and were punished when they made it 2-1.
"The game opened up in the last 10 minutes when City went for a second goal but until then they kept good discipline.
"When the team plays well Adebayor scores and he is outstanding at the moment and we need him in this form.
"We have good confidence within the side because we know how we want to play."
Manchester City boss Sven-Goran Eriksson:
"I am disappointed because we allowed them to go 2-0 up and in the first 20 minutes we gave them too much respect.
"Maybe we were a bit nervous but early on we did not compete and there was only one team in the match.
"Once they were two goals up they could take it a bit easy and play on the counter-attack.
"We have to learn quickly and wake up and do better because we desperately want to play in Europe next season."
Man City: Hart, Corluka, Dunne, Richards, Ball, Ireland (Mpenza 83), Hamann (Geovanni 75), Gelson, Petrov, Elano, Sturridge (Vassell 55).
Subs Not Used: Schmeichel, Jihai.
Booked: Petrov, Elano.
Goals: Gelson 28.
Arsenal: Lehmann, Sagna, Gallas, Senderos, Clichy, Hleb (Justin Hoyte 89), Fabregas, Flamini, Diaby, Adebayor, Eduardo.
Subs Not Used: Fabianski, Bendtner, Traore, Walcott.
Goals: Adebayor 9, Eduardo 26, Adebayor 88.
Ref: Andre Marriner (W Midlands).
BBC Sport Player Rater man of the match: Arsenal's Eduardo 8.11 (on 90 minutes). Please note that you can still give the players marks out of 10 on BBC Sport's Player Rater after the match has finished.