Match ends, Birmingham City 0, Millwall 1.
Relegation-threatened Millwall claimed a second win in three Championship games as Alan Dunne's second-half goal proved enough to beat Birmingham.
The captain headed home when Birmingham failed to clear a ball swung into a crowded goalmouth.
Millwall remain in the relegation zone only because of an inferior goal difference to fourth-bottom Brighton.
Birmingham, who are 11th in the table, have taken four points from their last five matches.
They have not won since beating Wigan on 10 January.
Under-pressure Millwall boss Ian Holloway, meanwhile, can be heartened by his side's resilient performance.
Martyn Woolford went close to giving the Lions a first-half lead when his clever lob hit the bar, before Dunne struck 10 minutes into the second half.
Birmingham threatened a late equaliser as Jonathan Grounds's header from a corner hit the woodwork.
Birmingham manager Gary Rowett:
"It was a frustrating night and a frustrating performance in many ways. I felt when we went out from the start it felt a little bit flat and felt a little bit as though we were going to turn up and win the game.
"It just doesn't happen like that. I thought Millwall blocked the game up well and it was very difficult for us to find space and we just didn't move the ball quick enough.
"We didn't cause them enough problems in the final third and that was the most disappointing thing.
"Games like that are going to happen and we have to try and find a solution. It was a poor goal to concede and from then on we huffed and puffed."
Millwall manager Ian Holloway:
"We had to ride a couple of things, like our record here. We have not won here since 1968 and that is pretty scary. They hit the bar, that was scary, but on the whole I was really pleased with the response of my lads.
"We are a new group and we are learning and we came here against a really good side. I don't think Birmingham played poorly. I don't think we allowed them to play and I thought we played well.
"That is the Championship. Anyone can beat anyone on a given day and what we need to try and do is win at home. It is pretty heartbreaking for our fans. The ones who come away are quite enjoying it."
- 23SpectorBooked at 90mins
- 22ShinnieSubstituted forGrayat 64'minutes
- 40DyerSubstituted forNovakat 64'minutes
- 9DonaldsonSubstituted forZigicat 76'minutes
- 4CummingsBooked at 90mins
- 6WilliamsBooked at 53mins
- 7MartinBooked at 53minsSubstituted forBeeversat 82'minutes
- 8FabbriniSubstituted forAbdouat 88'minutes
- 42MaierhoferSubstituted forGregoryat 72'minutes
- Simon Hooper
- Shots on Target
Second Half ends, Birmingham City 0, Millwall 1.
Offside, Birmingham City. Darren Randolph tries a through ball, but Nikola Zigic is caught offside.
Attempt missed. David Cotterill (Birmingham City) right footed shot from outside the box is too high from a direct free kick.
David Davis (Birmingham City) wins a free kick in the attacking half.
Foul by Michael Tonge (Millwall).
Offside, Millwall. Shaun Williams tries a through ball, but Martyn Woolford is caught offside.
Jonathan Spector (Birmingham City) is shown the yellow card for a bad foul.
Foul by Jonathan Spector (Birmingham City).
Lee Gregory (Millwall) wins a free kick on the left wing.
Shaun Cummings (Millwall) is shown the yellow card.
Foul by David Davis (Birmingham City).
Nadjim Abdou (Millwall) wins a free kick in the attacking half.
Offside, Millwall. David Forde tries a through ball, but Lee Gregory is caught offside.
Substitution, Millwall. Nadjim Abdou replaces Diego Fabbrini because of an injury.
Hand ball by Diego Fabbrini (Millwall).
Nikola Zigic (Birmingham City) wins a free kick in the attacking half.
Foul by Jos Hooiveld (Millwall).
Offside, Millwall. Martyn Woolford tries a through ball, but Lee Gregory is caught offside.
Attempt missed. Lee Gregory (Millwall) header from a difficult angle on the right is too high. Assisted by Martyn Woolford with a headed pass following a set piece situation.