Lionel Messi struck the winner for Barcelona as they twice came from behind to beat Villarreal 3-2 at home and move a point behind leaders Real Madrid in La Liga.
Barca dominated possession and Luis Suarez had several early chances but it was Villarreal who took the lead with Denis Cheryshev redirecting a Mario Gaspar shot past keeper Claudio Bravo on the half hour.
The Catalan side have been looking more resilient in recent weeks and in-form Neymar knocked in a rebound before halftime after Rafinha’s shot was saved by keeper Sergio Asenjo.
Luciano Vietto restored the visitors’ advantage after being set up well by Giovani dos Santos but Barca again bounced back. Rafinha knocked the ball home after Messi’s header had been blocked by Victor Ruiz and then Messi hit a 20-metre shot into the top corner with his weaker right foot after 55 minutes.
Barcelona have 50 points from 21 games while Real, who have also played a game less, beat Real Sociedad 4-1 on Saturday to stay top. Villarreal are sixth on 38 points.
Elsewhere, a late Iago Aspas strike gave Sevilla a 3-2 home victory over Espanyol and moved them up to fourth in La Liga.
Sevilla were seeking revenge for their defeat by Espanyol in the Copa del Rey last week but they went behind to a Christian Stuani penalty after Salva Sevilla was felled by goalkeeper Beto.
Liverpool loanee
Sevilla, who are yet to lose at home this season, pushed forward and equalised in sensational style through a 35-metre drive from Diogo Figueiras after 26 minutes. Vitolo slotted home from close range for Sevilla 10 minutes before the break and then Espanyol keeper Kiko Casilla was sent off as he handled a lob from Aspas outside the area. Sevilla almost threw away the victory with Victor Sanchez firing home 15 minutes from the end but there was still time for Aspas, on loan from Liverpool, to hit the winner a minute from time.
Mario Mandzukic hit a brace on Saturday as Atletico Madrid beat Eibar 3-1. Champions Atletico are now four points behind Real Madrid.