Ipswich substitute Gavin Williams grabbed a last-minute winner as Coca-Cola Championship leaders Birmingham suffered their first defeat in seven games.
It looked like Steve Bruce's side would survive a relentless Ipswich onslaught to earn a point but Williams popped up to stroke home Gary Roberts' cross from inside the six-yard box late on.
The defeat allowed Derby to keep up the pressure with with a 2-1 win over fellow promotion challengers Preston.
The Rams moved above their hosts to within three points of Birmingham after two goals from Steve Howard at Deepdale.
Howard struck either side of half-time, the second a penalty, before David Nugent pulled one back for the Lilywhites after 79 minutes.
At the opposite end of the table, bottom side Southend made a fine start to the new year with a surprise 3-1 win over West Brom.
Jamal Campbell-Ryce struck twice and Lewis Hunt added a third as the Shrimpers wrapped up the win in the first half. John Hartson netted the Baggies' consolation just after the hour.
Second-bottom Leeds also claimed a vital win with a 2-1 success over Coventry at Elland Road.
David Healy and Jonathon Douglas claimed the goals for Dennis Wise's struggling side with Adam Virgo on target for Coventry in between.
And on a good day for the strugglers, Hull continued their recent revival with a 2-1 success at Sheffield Wednesday after two goals from former England and Liverpool midfielder Nick Barmby.
Barmby opened the scoring after nine minutes at Hillsborough and then netted the winner on 65 after Deon Burton had equalised.
Promotion hopefuls Southampton were forced to settle for 1-1 draw at 10-man Plymouth despite taking a fifth-minute lead through Grzegorz Rasiak.
Barry Hayles pulled the Pilgrims back level after 66 minutes and Ian Holloway's side held on for a point after their goalscorer was dismissed six minutes from time for a second bookable offence.
In-form Colchester also slipped up as they went down to a 1-0 defeat to QPR at Loftus Road.
Ray Jones grabbed the only goal of the game nine minutes before half-time.
Wolves beat Barnsley 2-0 at Molineux with goals from Karl Henry and Seyi George Olofinjana and could have had a third but for Darren Potter missing a penalty.
Mark Hudson, Shefki Kuqi and Stuart Green were on target as Crystal Palace beat Norwich 3-1 at Selhurst Park, Rob Earnshaw replying for the Canaries from the penalty spot.
Tobias Hysen and David Connolly both struck in the final 11 minutes as Sunderland won 2-0 at Leicester while Luton - who had David Bell sent off - and Cardiff drew 0-0 at Kenilworth Road.
Burnley's encounter with Stoke was postponed due to a waterlogged pitch at Turf Moor.