Lionel Messi scored his 50th and 51st goals of the season as Barcelona beat Villarreal to move three points clear of Real Madrid at the top of La Liga.
Barca went ahead when Neymar finished off a fine team move by scoring from close range after Messi’s pass.
But Villarreal levelled when Cedric Bakambu sprinted clear of Gerard Pique.
Messi’s low 20-yard strike put Barca ahead, Luis Suarez added a third from a tight angle, before Messi chipped a penalty after Jaume Costa’s handball.
The penalty was the Argentine’s 35th goal in La Liga this season.
The win takes Barcelona on to 84 points, three points more than second-placed Real, who have two games in hand and play away at Tony Adams’ Granada side at 19:45 BST on Saturday.
Barcelona, aiming to win their third La Liga title in a row, have two more league matches left, while current European champions Real have four.
After Neymar’s opener, the hosts surprisingly conceded 11 minutes later when Pique tried to play offside just inside his own half and was caught out by Bakambu’s pace, with the striker calmly finishing.
The visitors, fifth in the table and aiming for Europa League qualification, should have gone ahead but former Tottenham striker Roberto Soldado headed wide when unmarked.
That proved crucial as Messi restored Barcelona’s lead four minutes later, just before half-time.
In the second half, the hosts went 3-1 ahead when Messi played in Suarez, who jinked past two players before shooting past Andres Fernandez.
Messi’s late penalty – the 108th La Liga goal Barcelona have scored this season – came after Costa was adjudged to have handled in his penalty area, BBC reports.