Match ends, Aston Villa 4, West Bromwich Albion 3.
Aston Villa edged West Brom in a remarkable West Midlands derby.
The Baggies led 2-0 inside nine minutes through Chris Brunt's 25-yard effort and Fabian Delph's own goal.
Andreas Weimann lobbed in to pull one back, Leandro Bacuna levelled with a fortunate effort and Delph put Villa ahead with a fierce drive.
Youssouf Mulumbu shot through Brad Guzan's legs to make it 3-3 at half-time but Christian Benteke scored a penalty to win it for Villa.
When the two teams met in November, West Brom took an early 2-0 lead before Villa rescued a 2-2 draw. But that was nothing compared to what happened at Villa Park.
Derbies are often tense occasions but it was a game with defensive errors, brilliant strikes and six first-half goals. And pleasingly for Villa fans, Benteke scored in a third consecutive game after almost four months without a goal.
Villa are up to 10th in the table while the Baggies remain 15th, but are now only three points above the relegation zone.
After a sloppy opening three minutes, the opener, while brilliant, came from a mistake. Benteke lost the ball 50 yards from goal and Liam Ridgewell found Brunt with a piercing ball from the left, allowing the Northern Ireland international to convert a brilliant half-volley from distance.
And five minutes later their lead was doubled. Brunt took a quick free-kick to James Morrison, who squared the ball only for Delph to divert it into his own net.
But Villa pulled one back, with only the second shot of the game. Goalkeeper Guzan played a long ball forward that Baggies defender Diego Lugano headed back to Weimann and the Austrian, who would have been offside had he been found by a team-mate, lobbed Ben Foster.
The hosts were starting to get on top and Weimann forced a save from Foster from a corner.
And the equaliser came when Matt Lowton played the ball across to Bacuna, whose fortunate shot hit his own shoulder and looped in - with Benteke touching the ball after it had crossed the line.
West Brom, in their second game under new boss Pepe Mel, lost Nicolas Anelka to an injury after a 50-50 tackle with Lowton, as the game started to calm down.
But that lull did not last long as Benteke flicked a long ball onto Delph, who beat Steven Reid with ease on the edge of the box before firing in off the underside of the crossbar from an angle.
Benteke almost made it 4-2 to Villa but Foster kept his close-range effort out with his foot.
And moments later the Belgian was made to pay when Victor Anichebe found Morrison, who slipped in Mulumbu to slot the ball through the legs of the onrushing Guzan.
The second half started slowly but West Brom were looking much improved. Morgan Amalfitano forced a save from Guzan before Lugano headed wide from six yards out, totally unmarked, from Brunt's free-kick.
Lugano has been heavily criticised this season for a lack of pace, and surprisingly kept his place ahead of Gareth McAuley, who was on the bench after returning from injury.
And the 33-year-old's night got even worse when he pulled down Benteke by the head in the box, with the striker stepping up to send Foster the wrong way.
Both sides made a host of substitutions and the match lost its momentum as it ended with just the seven goals.
Aston Villa boss Paul Lambert:
"It's not great for the heart, to go down 2-0 in a derby. All credit to the team, the response was fantastic.
"With derby games, it doesn't matter where you are in the table, they're really unpredictable.
"He [Christian Benteke] did the same last season with the incredible scoring run. His general game is getting back to what it was."
West Brom boss Pepe Mel:
"It was an incredible match. To score three goals away and [get] no points is remarkable. We need to work on our defensive mistakes.
"I'm very proud of the players, they tried very hard."
On penalty decisions going against Diego Lugano at both ends: "It's football, only football. In the other box, it's the same [offence]. But the referee is the boss. We're only thinking about the next game now."
Have a look at Wednesday's match action gallery from all the Premier League games on the BBC Sport Facebook page.
- 34LowtonSubstituted forHoltat 65'minutesBooked at 89mins
- 8El AhmadiSubstituted forSyllaat 76'minutes
- 10WeimannSubstituted forBakerat 80'minutes
- 2ReidSubstituted forBerahinoat 76'minutes
- 14LuganoBooked at 68mins
- 3OlssonBooked at 87mins
- 39AnelkaSubstituted forAmalfitanoat 26'minutes
- 16AnichebeSubstituted forVydraat 80'minutes
- 11BruntBooked at 70mins
- Mark Clattenburg
- Shots on Target
Second Half ends, Aston Villa 4, West Bromwich Albion 3.
Offside, Aston Villa. Nathan Baker tries a through ball, but Christian Benteke is caught offside.
Attempt missed. Diego Lugano (West Bromwich Albion) header from the centre of the box misses to the left. Assisted by Chris Brunt with a cross following a corner.
Corner, West Bromwich Albion. Conceded by Ron Vlaar.
Attempt blocked. Diego Lugano (West Bromwich Albion) header from the centre of the box is blocked. Assisted by Morgan Amalfitano with a cross.
Attempt blocked. Youssuf Mulumbu (West Bromwich Albion) right footed shot from outside the box is blocked.
Saido Berahino (West Bromwich Albion) wins a free kick on the left wing.
Foul by Leandro Bacuna (Aston Villa).
Grant Holt (Aston Villa) is shown the yellow card.
Grant Holt (Aston Villa) has gone down, but that's a dive.
Jonas Olsson (West Bromwich Albion) is shown the yellow card.
Offside, West Bromwich Albion. Claudio Yacob tries a through ball, but Saido Berahino is caught offside.
Substitution, West Bromwich Albion. Matej Vydra replaces Victor Anichebe.
Substitution, Aston Villa. Nathan Baker replaces Andreas Weimann.
Offside, West Bromwich Albion. Chris Brunt tries a through ball, but Saido Berahino is caught offside.
James Morrison (West Bromwich Albion) wins a free kick in the defensive half.
Foul by Ashley Westwood (Aston Villa).
Substitution, Aston Villa. Yacouba Sylla replaces Karim El Ahmadi.
Substitution, West Bromwich Albion. Saido Berahino replaces Steven Reid.