Teenage midfielder Michael Johnson was the matchwinner with a well-taken goal in the 48th minute, just as he had been in the single-goal victory over Derby.

Villa fought hard in a frenetic match but were unable to create one real clear chance.

Manchester City switched Croatian defender Vedran Corluka from right-back to centre-half to cover for the suspended Richard Dunne.

Nedum Onuoha replaced Corluka in the wide position while Darius Vassell was brought in against his old club in place of Rolando Bianchi.

Stephen Ireland, who controversially withdrew from the Republic of Ireland squad for the game against the Czech Republic in midweek, was not in the squad, with Emile Mpenza brought into Sven-Goran Eriksson's team.

Villa were unchanged from the team which beat Chelsea last time out, with John Carew overcoming a groin injury to retain his place. Loan signing Curtis Davies had to be content with a place on the bench.

Villa threatened first after six minutes when Carew got away from Javier Garrido down the right and cut inside, but his shot was blocked by Corluka.

The Croat went close for City three minutes later when he was allowed to advance deep into Villa territory unchallenged and his powerful right-foot shot flew wide.

Barry had started well for Villa - and his high, hanging cross from the left was fumbled by Kasper Schmeichel. But luckily for City the chances twice fell to Olof Mellberg, who fluffed both opportunities that came his way.

City were generally having the best of it, though, and Vassell came close with a glancing header from a Martin Petrov free-kick in the 17th minute.

Michael Johnson should have scored for City two minutes later when he charged down a Martin Laursen clearance and was released into the box by Elano, but Scott Carson came out well to to parry his shot.

Brazil midfielder Elano then cleared the danger at the other end, after Carew had headed Barry's corner goalwards.

Gabriel Agbonlahor then came close for Villa when Wilfred Bouma's long ball fell into his path. He rounded Schmeichel but found the angle too tight.

Laursen's near-post header from a Barry corner then flashed across the face of goal as the game hurtled from end to end.

Elano was causing problems, playing off Mpenza - and after 30 minutes, his through-ball invited Vassell to cross from the left. But the ball was just ahead of Mpenza.

The crowd rose again in the 41st minute when Johnson released Petrov down the left - but the Bulgarian's cross was headed away by Laursen.

Elano then tried to thread an eye-of-the-needle pass to the onside Mpenza, but the Belgian was not quite on his wavelength.

City took the lead in the 48th minute.

Johnson and Elano exchanged passes in central midfield before the 19-year-old jinked past Laursen, burst into the box and fired a low right-foot shot past Carson and into the corner for his second of the season.

There was a scare within four minutes, as Bouma's left-wing cross was met by Carew ahead of his marker - but he nodded wide.

A corner was then scrambled away, with Schmeichel not looking convincing when dealing with set-pieces.

Mpenza sliced a shot wide after a forward burst by Petrov. But Villa were not out of it, and Corluka's alertness prevented a goal at the other end in the 58th minute as he slid in to clear with Agbonlahor poised.

The England Under-21s striker then headed wide Ashley Young's cross to the far post as the hour mark passed.

Sun Jihai came on for Vassell in the 65th minute, and a minute later Shaun Maloney replaced Carew for the visitors as the rain began to teem down.

Luke Moore had a goal disallowed for pushing with 17 minutes to go as the luck again favoured City.

Moore was booked for fouling Corluka after 77 minutes and at the other end Mpenza's shot from the edge of the D appeared to strike Laursen on the arm.

Martin O'Neill tried a late shake-up with Stiliyan Petrov replacing Nigel Reo-Coker and Craig Gardner coming on for Bouma, while the excellent Elano was replaced by Michael Ball as City looked to hold on.

Johnson could have added a second after another break from deep but Gardner blocked his shot, but in the end his early second-half strike proved enough.

Substitute Bianchi almost added a breakaway second but his effort was cleared off the line.