Manchester City moved into second spot in Group A of the Champions League with a comfortable victory at Villarreal.
Roberto Mancini's side will now qualify for the knockout stages if they win in Napoli in their next game.
Yaya Toure gave City the lead when he slotted in from just inside the area, before Mario Balotelli doubled the advantage from the spot after he was fouled by Mateo Musacchio in the box.
Yaya made it 3-0 when he jinked past Carlos Marchena before firing in.
It was as easy an exercise as the scoreline suggests, with City's night boosted by Bayern Munich's 3-2 win against Napoli which means their Champions League fate is in their own hands.
DID YOU KNOW?
- Man City have scored in all seven of their European games against Spanish sides and have now scored two or more goals in five of them
However, it did take the Premier League leaders 30 minutes to work out how to break Villarreal's stubborn resistance.
The Spanish side are struggling in La Liga but looked unruffled during that opening period. They worked hard as a team to suffocate City's dangermen of David Silva, Samir Nasri and Balotelli, who tried their utmost to conjure something out of nothing.
The opening goal came from City's first good chance of the match. Silva finally managed to free himself from the shackles and squeeze a square ball to Yaya who shifted to his right before placing his shot low into the bottom left corner of the Villarreal goal.
The lead was doubled seconds before the break when Musacchio was deemed to have brought down Balotelli in the area. On first viewing, referee Pedro Proenca's decision seemed rash, but the replay showed that the Argentine defender had nudged the Italian.
Balotelli, making his first start in the Champions League for City, slotted in his spot-kick for his seventh goal in seven games.
Villarreal barely put up a fight after the break in a half that was played at the pace of a pre-season friendly.
City themselves rarely threatened, although their best attacking move of the match resulted in the third goal.
It began on the edge of their own area before Nasri passed inside to Balotelli, who in turn found Yaya.
The Ivorian powerhouse showed nimble feet to dance past defender Carlos Marchena and stroke in his shot from eight yards.
The only cloud for City was what appeared to be a back injury suffered by Silva who was substituted in the 65th minute.
Live Text Commentary
Full Time The referee signals the end of the game.90:00 +0:03
James Milner challenges Gerard Bordas unfairly and gives away a free kick. The free kick is swung in right-footed by Borja Valero, clearance by Gael Clichy.88:00
Foul by Gonzalo Rodriguez on Sergio Aguero, free kick awarded. Free kick taken by Samir Nasri.83:09 Substitution
Substitution Hernan Perez leaves the field to be replaced by Garcia Joan Oriol.81:36 Substitution
Substitution Aleksandar Kolarov is brought on as a substitute for Mario Balotelli.78:01
Free kick awarded for an unfair challenge on Borja Valero by James Milner. Borja Valero restarts play with the free kick.77:23
Mario Balotelli is penalised for handball and concedes a free kick. Borja Valero restarts play with the free kick.75:52 Substitution
Substitution (Villarreal) makes a substitution, with Gerard Bordas coming on for Mubarak Wakaso.75:23 Substitution
Substitution Lopez Angel is brought on as a substitute for Jonathan De Guzman.74:33
Jose Luis Joselu is ruled offside. Nigel De Jong restarts play with the free kick.73:10 Substitution
Substitution Sergio Aguero comes on in place of Gnegneri Toure Yaya.70:33
Assist on the goal came from Mario Balotelli.70:33 Goal scored
Goal! - Gnegneri Toure Yaya - Villarreal 0 - 3 Man City Gnegneri Toure Yaya scores a goal from inside the area to the bottom left corner of the goal. Villarreal 0-3 Man City.67:38
James Milner takes the direct free kick.67:38 Booking
Booking Hernan Perez is given a yellow card.67:33
Hernan Perez concedes a free kick for a foul on Mario Balotelli.65:54
Mubarak Wakaso has an effort at goal from outside the box which misses left.65:05
Nigel De Jong gives away a free kick for an unfair challenge on Hernan Perez. Direct free kick taken by Borja Valero.64:20 Substitution
Substitution Adam Johnson joins the action as a substitute, replacing David Silva.60:44
Borja Valero takes a shot. Save by Joe Hart.
Samir Nasri produces a right-footed shot from just outside the box that misses to the right of the net.58:20
Mario Balotelli takes a long range shot harmlessly clearing the crossbar.56:43
The assistant referee signals for offside against Gnegneri Toure Yaya. Rodriguez Diego Lopez takes the free kick.54:28
Outswinging corner taken by Samir Nasri from the right by-line.52:58
Foul by Jose Manuel Catala on David Silva, free kick awarded. Mario Balotelli produces a shot on goal direct from the free kick.52:41
Outswinging corner taken by Samir Nasri from the right by-line, Perez Martinez Mario makes a clearance.52:19
Mario Balotelli takes a shot. Blocked by Mateo Musacchio.46:14
Corner taken by Borja Valero from the left by-line to the near post, clearance by Gael Clichy.45:30
Perez Martinez Mario challenges Mario Balotelli unfairly and gives away a free kick. Free kick taken by Samir Nasri.45:01
The second half has started.45:00 +3:35 Half time
Half Time It is the end of the first-half.45:00 +3:21 Booking
Booking Booking for Carlos Marchena.45:00 +2:37 Goal scored
Goal! - Mario Balotelli - Villarreal 0 - 2 Man City Placed penalty scored by Mario Balotelli. Villarreal 0-2 Man City.45:00 +1:25 Booking
Booking Mateo Musacchio booked.45:00 +1:01
Mateo Musacchio challenges Mario Balotelli unfairly and gives away a Penalty.45:00 +0:30
Jonathan De Guzman takes a shot. Joe Hart makes a save.40:46
Gonzalo Rodriguez gives away a free kick for an unfair challenge on Mario Balotelli. Free kick crossed right-footed by James Milner from left wing, clearance by Borja Valero.39:42
Samir Nasri takes a shot. Rodriguez Diego Lopez makes a comfortable save.38:33
Direct free kick taken by Nigel De Jong.38:33 Booking
Booking Jose Manuel Catala goes into the book for unsporting behaviour.38:28
Foul by Jose Manuel Catala on David Silva, free kick awarded.36:49
The offside flag is raised against Mario Balotelli. Free kick taken by Rodriguez Diego Lopez.35:34
Foul by Perez Martinez Mario on Gael Clichy, free kick awarded. Gael Clichy takes the direct free kick.34:00
Unfair challenge on Mario Balotelli by Mateo Musacchio results in a free kick. Gnegneri Toure Yaya takes the direct free kick.33:20
Shot from outside the box by Jonathan De Guzman goes wide right of the target.32:44
The referee blows for offside. Rodriguez Diego Lopez takes the indirect free kick.29:40
David Silva provided the assist for the goal.29:40 Goal scored
Goal! - Gnegneri Toure Yaya - Villarreal 0 - 1 Man City A goal is scored by Gnegneri Toure Yaya from just inside the area to the bottom right corner of the goal. Villarreal 0-1 Man City.28:23
Mario Balotelli fouled by Mubarak Wakaso, the ref awards a free kick. David Silva takes the direct free kick.26:41
David Silva has a direct shot on goal from the free kick.26:41 Booking
Booking Mario Balotelli receives a yellow card.26:09 Booking
Booking Booking for Mubarak Wakaso.25:54
Foul by Mubarak Wakaso on David Silva, free kick awarded.22:04
Free kick awarded for a foul by Mubarak Wakaso on Pablo Zabaleta. Pablo Zabaleta takes the direct free kick.21:25
Mubarak Wakaso is caught offside. Vincent Kompany takes the indirect free kick.20:40
James Milner produces a right-footed shot from outside the penalty box and misses wide left of the target.20:11
Jonathan De Guzman concedes a free kick for a foul on David Silva. Free kick taken by Vincent Kompany.18:34
The referee blows for offside. Joe Hart takes the free kick.17:17
James Milner concedes a free kick for a foul on Jose Manuel Catala. Direct free kick taken by Jose Manuel Catala.15:02
Hernan Perez fouled by Mario Balotelli, the ref awards a free kick. Gonzalo Rodriguez restarts play with the free kick.12:49
Jose Manuel Catala concedes a free kick for a foul on David Silva. David Silva takes the direct free kick.10:21
Corner taken short by Borja Valero.9:55
Free kick awarded for an unfair challenge on Jonathan De Guzman by Nigel De Jong. Mateo Musacchio takes the free kick.7:26
Free kick awarded for an unfair challenge on James Milner by Mubarak Wakaso. Pablo Zabaleta restarts play with the free kick.2:33
Jose Luis Joselu takes a shot. Hernan Perez makes a save.0:00
The referee gets the game started.
Live data and text provided by our data suppliers