Inter Milan had to come from behind to secure a narrow quarter-final first-leg lead over Villarreal.
Brazilian international Adriano had a fine game for Inter
Spanish side Villarreal were ahead after 56 seconds when Francesco Toldo was unable to hold Jose Mari's shot, enabling Diego Forlan to sidefoot in.
Inter quickly pulled level as Adriano punished poor Villarreal defending.
The home side took the lead soon after the break when Obafemi Martins nudged in Dejan Stankovic's cross, while Juan Riquelme hit the bar for Villarreal.
Inter were worth their win, but having conceded an away goal to Villarreal, the Italian side face a tricky second-leg in Spain if they are to progress to the last four, where they will meet the winners of the Arsenal and Juventus tie.
This was the first time Villarreal had lost in the Champions League this season.
Marcos Senna and Riquelme were superb for Villarreal, giving the Spanish side plenty of control with some intelligent midfield play.
Riquelme played a part in Villarreal's first goal, his pass causing panic in the Inter defence.
Pierre Wome then allowed Mari to have a shot at goal that Toldo could only parry and Forlan was quick to pounce, shooting into the open net.
Inter almost immediately equalised through Adriano's lob, but Javi Venta did well to hook the ball off the line.
Adriano did not have to wait much longer to get his name on the scoresheet, rattling in Inter's equaliser in the eighth minute.
Juan Manuel Pena's disastrous attempt to clear Stankovic's cross landed at Adriano's feet and, after turning sharply, the Brazilian rifled the ball into the net.
After that breathtaking opening, the game settled down, with each side restricted to long-range shots for much of the rest of the first half.
Just before he had to go off with an injury, Alvaro Recoba drew a smart save from Sebastian Viera, while a fizzing Riquelme free-kick went narrowly wide for Villarreal.
Late on in the first half Zanetti delivered a superb cross for Adriano, who powered a header just the wrong side of the post.
Zanetti and Stankovic worked well in tandem down the Inter right throughout the game and this was the area where the Italian side's second goal came from.
The tireless Stankovic drilled in a cross behind the Villarreal defence and Martins managed to bundle the ball over the line.
Martins almost grabbed a second with a header, but Viera tipped the ball round the post.
Just past the hour Riquelme rattled the Inter crossbar with a wonderful dipping free-kick as Villarreal chased a second away goal.
The Argentine had another chance on 67 minutes when Inter were ineffective in clearing an intricate Villarreal move, but when the ball landed at Riquelme's feet he blasted wide.
Inter Milan coach Roberto Mancini:
"We paid for a lapse in concentration and it could have been disastrous.
"But the players deserve a lot of credit for the way they came
"With a bit more luck we might have scored a third goal, which
would have made life a little easier in the second leg.
"But having come back from an extremely difficult situation, I'm
more than happy with the result."
Villarreal coach Manuel Pellegrini:
"It was important to get an early goal and it was also an
away goal which counts for double and could be very important
for the second-leg.
"It was an even game and we coped well with Inter
especially if you remember that we had some key players missing
and had some just coming back from injury.
"We scored, we hit the bar, we conceded a goal that was a little
questionable and we might have had a penalty.
"It was a good result but it is still a dangerous one. I
don't like losing any game but there are still 90 minutes of
this tie remaining."
Inter Milan: Toldo, Javier Zanetti, Cordoba, Samuel, Wome, Stankovic (Gonzalez 82), Veron, Cambiasso, Cesar (Materazzi 69), Recoba (Martins 28), Adriano.
Subs Not Used: Julio Cesar, Cristiano Zanetti, Pizarro, Cruz.
Booked: Recoba, Samuel, Veron.
Goals: Adriano 7, Martins 54.
Villarreal: Viera, Javi Venta, Rodriguez, Pena, Sorin, Riquelme, Arzo (Quique Alvarez 60), Senna, Calleja (Santi Cazorla 87), Jose Mari (Franco 76), Forlan.
Subs Not Used: Barbosa, Roger, Alcantara, Rubio.
Booked: Senna, Sorin.
Goals: Forlan 1.
Ref: Damien Ledentu (France).