Match ends, Birmingham City 2, Wolverhampton Wanderers 1.
Demarai Gray scored his first goal of 2015 as Birmingham City won the West Midlands derby at St Andrews to dent Wolves' Championship promotion hopes.
Wolves looked on course for a fifth straight win when striker Benik Afobe shot home from 10 yards.
But defender Rob Kiernan levelled four minutes later, scrambling home his first goal for Blues from a corner.
And teenage winger Gray raced clear to fire Blues' winner after the break to gift all three points to the hosts.
Wolves now drop to eighth in the table with four games left, level on points with Brentford and Mick McCarthy's Ipswich in sixth.
Kenny Jackett's side had dropped out of the top six before kick-off thanks to Brentford's draw at Derby.
But Afobe capped the visitors' early dominance when he gave the home side a 21st-minute lead.
Nouha Dicko took advantage of a mix-up in the Blues box, squaring to his left for his strike partner to fire home from 10 yards.
|Gray's lack of goalscoring form|
|Demarai Gray had gone 20 games without a goal since hitting his first senior hat-trick in the 6-1 win over Reading in mid-December.|
But the lead lasted just four minutes before Kiernan poked home for Blues.
After a first half of few clear chance it remained slim pickings for the strikers after the break.
But, from a fast break straight up field when Jonathan Grounds headed clear from a Wolves corner, Gray pressured covering Wolves left-back Scott Golbourne into an error, and the young winger raced away to fire home his first goal in four months.
Blues have now taken four points out of a possible six off Wolves this season, having drawn 0-0 at Molineux in Gary Rowett's first game as Blues boss back on 1 November.
Birmingham City manager Gary Rowett told BBC Sport:
"In many ways, that was as complete a performance as we've put in since we came here. I don't think there's many would argue that we deserved to win.
"And it was fantastic for Demarai Gray to score the winning goal against local rivals. That's why I like to play him in home games. He's capable of doing something special like that.
"A lot of players, at 1-1 in a local derby, might not have shown such composure. He's only 18. We know we can't play him in every game and have to look after him, but he's repaid a lot of the faith we've shown in him."
Wolves head coach Kenny Jackett told BBC Sport:
"You've got to get your basics right and, in a tight game, one corner for them one corner for us and we got them both wrong.
"From a free header, Rob Kiernan's followed it up to equalise, and then we conceded from our own corner, and Gray's run the length of the pitch to score."
- 15KiernanSubstituted forSpectorat 73'minutes
- 11CotterillBooked at 7mins
- 36FabbriniSubstituted forDavisat 87'minutes
- 33GraySubstituted forDyerat 90'minutes
- 6BatthBooked at 83mins
- 7HenrySubstituted forvan La Parraat 73'minutes
- 11McDonaldBooked at 72mins
- 19PriceBooked at 74mins
- 17van La Parra
- Eddie Ilderton
- Shots on Target
Second Half ends, Birmingham City 2, Wolverhampton Wanderers 1.
Hand ball by Robert Tesche (Birmingham City).
Danny Batth (Wolverhampton Wanderers) wins a free kick in the attacking half.
Foul by Robert Tesche (Birmingham City).
Substitution, Birmingham City. Lloyd Dyer replaces Demarai Gray.
Substitution, Birmingham City. David Davis replaces Diego Fabbrini because of an injury.
Attempt missed. Kevin McDonald (Wolverhampton Wanderers) left footed shot from the right side of the box is high and wide to the left.
Danny Batth (Wolverhampton Wanderers) is shown the yellow card.
Attempt blocked. Rajiv van La Parra (Wolverhampton Wanderers) right footed shot from the right side of the box is blocked. Assisted by Dominic Iorfa.
Attempt blocked. Danny Batth (Wolverhampton Wanderers) header from the centre of the box is blocked. Assisted by Bakary Sako with a cross.
Corner, Wolverhampton Wanderers. Conceded by Jonathan Spector.
Foul by Richard Stearman (Wolverhampton Wanderers).
Clayton Donaldson (Birmingham City) wins a free kick in the attacking half.
Foul by Bakary Sako (Wolverhampton Wanderers).
Paul Caddis (Birmingham City) wins a free kick in the defensive half.
Foul by Rajiv van La Parra (Wolverhampton Wanderers).
Diego Fabbrini (Birmingham City) wins a free kick on the left wing.
Attempt missed. Clayton Donaldson (Birmingham City) right footed shot from the centre of the box is too high. Assisted by Stephen Gleeson.
Attempt blocked. Stephen Gleeson (Birmingham City) right footed shot from outside the box is blocked. Assisted by David Cotterill.