Match ends, Birmingham City 2, Stoke City 0.
Stoke City were beaten for the first time in 11 games as boss Gary Rowett made an unhappy return to his former club Birmingham City.
Stunning goals from Jacques Maghoma and Omar Bogle - his first for the club - helped Blues do the double over Rowett's Potters, having been the last side to beat Stoke on 20 October.
Maghoma, signed for Blues by Rowett in 2015, put the hosts in front two minutes before the break when the ball broke kindly 25 yards out after Che Adams had made a nuisance of himself and the midfielder scorched home a right-foot shot.
Cardiff City loan man Bogle then made the points safe with three minutes left to move Garry Monk's Blues up into seventh, within two points of the play-off places, while Stoke are now three points further back in 11th.
The attendance of 26,344, boosted by a 2,679 following from Stoke, was comfortably the largest of the season so far at St Andrew's.
Blues might have taken the lead sooner, but for a great save by former Blues goalkeeper Jack Butland to keep out a Lukas Jutkiewicz header at full stretch. And Butland then denied Jutkiewicz again when he tipped over another header from Maghoma's free-kick.
But Butland had no chance when Maghoma struck his fourth goal of the season when the lively Adams forced Ryan Woods into losing possession.
Stoke were sparked into life after the break, particularly introducing Peter Crouch and Benik Afobe just before the hour.
But it was Maghoma who came closest to the game's second goal, forcing another excellent save from the impressive Butland, before boyhood Blues fan Bogle wrapped up victory.
He controlled, turned and curled home a stunning 25-yarder with his left foot, before running 60 yards to celebrate with Monk and the Blues bench.
Stoke have not won at St Andrew's now in 11 visits, while it was a fourth straight Boxing Day defeat in the Championship for Potters boss Rowett.
Birmingham manager Garry Monk told BBC WM:
"It was fantastic from start to finish. A performance to be really proud of. And the atmosphere went through the roof.
"It was aggressive, we scored some good goals and we defended well when we had to. I'm very proud of those players.
"It was a fantastic goal at a crucial time for Omar Bogle. It's not been easy for him. He's taken time to adjust but, in the last month, he's come roaring back and is looking like a who can really help us.
"We had four games in 11 days. That's two hurdles we've overcome (wins over Wigan and Stoke) and we've got two more hurdles to come."
Stoke manager Gary Rowett told BBC Radio Stoke:
"I'm disappointed because we didn't play anywhere near well enough. It started from the first whistle - we took the kick-off, gave it away and they almost scored.
"What you can't do at a place like this, as I well know, is allow the home crowd and team to get a lift.
"It's a tight pitch and it makes it a bit of a physical encounter, which suits Birmingham because they're a very physical side.
"I have to give them a lot of credit because they worked hard, didn't allow us time on the ball and forced us into errors, but we've got to use the ball a lot better."
- 12DeanBooked at 63mins
- 20GardnerBooked at 5minsSubstituted forGardnerat 89'minutes
- 9AdamsSubstituted forBogleat 82'minutes
- 23MartinaBooked at 52minsSubstituted forEdwardsat 77'minutes
- 17ShawcrossBooked at 26mins
- 15Martins IndiBooked at 74mins
- 4AllenBooked at 76mins
- 38WoodsSubstituted forAfobeat 59'minutes
- 19BerahinoSubstituted forCrouchat 59'minutes
- Darren Bond
- Shots on Target
Second Half ends, Birmingham City 2, Stoke City 0.
Offside, Stoke City. Tom Ince tries a through ball, but Peter Crouch is caught offside.
Attempt missed. Lukas Jutkiewicz (Birmingham City) left footed shot from outside the box is high and wide to the left. Assisted by Jota.
Attempt blocked. Jacques Maghoma (Birmingham City) right footed shot from the centre of the box is blocked. Assisted by Maikel Kieftenbeld.
Substitution, Birmingham City. Craig Gardner replaces Gary Gardner.
Goal! Birmingham City 2, Stoke City 0. Omar Bogle (Birmingham City) left footed shot from outside the box to the top left corner.
Foul by Peter Crouch (Stoke City).
Harlee Dean (Birmingham City) wins a free kick in the defensive half.
Peter Crouch (Stoke City) wins a free kick on the right wing.
Foul by Harlee Dean (Birmingham City).
Foul by Sam Clucas (Stoke City).
Michael Morrison (Birmingham City) wins a free kick in the defensive half.
Substitution, Birmingham City. Omar Bogle replaces Che Adams.
Benik Afobe (Stoke City) wins a free kick in the attacking half.
Foul by Gary Gardner (Birmingham City).
Substitution, Stoke City. Thomas Edwards replaces Cuco Martina.
Joe Allen (Stoke City) is shown the yellow card.
James McClean (Stoke City) wins a free kick on the left wing.
Foul by Michael Morrison (Birmingham City).