Manchester United came from behind to put a dent in Birmingham's hopes of qualifying for Europe.
Birmingham looked on the way to a vital win after Roy Carroll allowed substitute Martin Grainger's 30-yard free-kick to go in after 39 minutes.
But United substitute Cristiano Ronaldo headed the equaliser on the hour as he got on the end of a Ryan Giggs cross.
And Giggs was the provider again 12 minutes from time, crossing for Louis Saha to head home United's winner.
United made two changes from the team that beat Arsenal in the FA Cup semi-final, with Saha and Eric Djemba-Djemba replacing Ronaldo and Roy Keane.
Birmingham made the brighter start, with Robbie Savage typically competitive in midfield.
But they suffered a blow after 13 minutes when Stan Lazaridis caught his studs in the turf and collapsed in agony before being stretchered off.
Birmingham were not knocked out of their stride and twice came close to breaking the deadlock in the space of a minute.
United goalkeeper Carroll blocked a powerful shot from Bryan Hughes after good work by Mikael Forssell.
But Carroll was helpless as Savage's free-kick crashed against the bar.
39 mins: Martin Grainger puts Birmingham ahead
60 mins: Cristiano Ronaldo heads Man Utd level
78 mins: Louis Saha's header gives Man Utd the lead
Birmingham were making all the running and Mikael Silvestre had to make a desperate challenge to deny Clinton Morrison.
United had barely threatened, but Saha almost got in on the end of Paul Scholes' pass only to fire wide as he stretched.
Birmingham got the goal their dominance deserved after 39 minutes - but Carroll must take the blame.
He got both hands to Grainger's 30-yard free-kick, but allowed the ball to squirm into the net.
It was Grainger's last contribution as he was replaced at half-time by Jamie Clapham, who has just recovered from a bout of shingles.
Saha had the perfect opportunity to equalise in the opening seconds after the re-start, but he fired over the top from Scholes' pass.
United were upping the tempo, and Maik Taylor was forced to make a magnificent save from Saha's header from inside the six-yard box.
It was only a temporary reprieve and United equalised on the hour, thanks to substitute Ronaldo, who had replaced Ole Gunnar Solskjaer six minutes earlier.
He sent a glancing header past Taylor from Giggs' cross as United's pressure finally told.
And United completed their comeback when Saha put the champions ahead with 12 minutes left.
Giggs was once again the creator with another cross, with Saha getting in front of Birmingham' defenders to flash a header past Taylor.
Birmingham: Maik Taylor, Martin Taylor, Cunningham, Upson,
Lazaridis (Grainger 14, Clapham 45), Johnson, Savage, Clemence (John 78),
Hughes, Forssell, Morrison.
Subs Not Used: Bennett, Tebily.
Man Utd: Carroll, Gary Neville, Brown, Silvestre, O'Shea, Fletcher, Djemba-Djemba (Forlan 74), Scholes, Giggs (Phil Neville 88), Saha, Solskjaer (Ronaldo 55).
Subs Not Used: Butt, Howard.
Referee: D Gallagher (Oxfordshire).