Barcelona moved back to within a point of La Liga leaders Real Madrid as they twice came from behind to beat Villarreal 3-2 in a thrilling encounter.
Madrid loanee Denis Cheryshev put Villarreal ahead against the run of play after half an hour only for the in-form Neymar to level just before the break.
A crazy four-minute spell early in the second-half then yielded three goals as Luciano Vietto put Villarreal back in front, but Rafinha quickly equalised before Lionel Messi struck a memorable winner from the edge of the box.
Victory takes Barca back three points clear of third-placed Atletico Madrid, but Real can regain their four-point lead at the top when they host Sevilla in their game in hand on Wednesday.
Barcelona started with the confidence of a side who had won each of their last seven games, scoring 26 goals in the process, but Luis Suarez’s struggles in front of goal continued.
The Uruguayan dragged a shot wide from Andres Iniesta’s through ball before forcing Sergio Asenjo into a great save from the edge of the box and finally smashing his best opening into the side-netting.
Barca were then punished for the former Liverpool man’s profligacy when Villarreal broke and Mario Gaspar’s wayward effort was deflected beyond Claudio Bravo by Cheryshev.
Crucially Barca managed to get on level terms a minute before the break when Asenjo again parried from Rafinha’s curling effort, but Neymar was on hand to continue his scoring streak with his 22nd of the season.
Luis Enrique’s men were caught out once more at the start of the second-half, though, as a former Barca favourite Giovani dos Santos galloped in behind the Catalans’ defence and squared for Vietto to apply a simple finish.
However, again Villarreal couldn’t hold onto their lead for long as just two minutes later Suarez squared for Messi and when his headed effort was blocked, Rafinha pounced to rattle home from close range.
Suarez then teed up Messi once more as Barca turned the game on its head moments later when the Argentine fired high past Asenjo on his weaker right foot from outside the box.
Villarreal refused to give in and briefly thought they were level when Mateo Musacchio bundled home from close range only to be denied by an offside flag.
From the resulting free-kick Barca sped upfield and Neymar was unlucky not to win a penalty when he was wiped out by Asenjo before Suarez failed to turn Dani Alves’s driven cross on target.