Match ends, Charlton Athletic 0, Ipswich Town 1.
Debutant Noel Hunt scored in the 95th minute to hand promotion-chasing Ipswich victory at Charlton.
There were a total of 40 efforts on goal in the match, but only Hunt found the back of the net with a low drive that beat the reach of Nick Pope.
Winger Callum Harriott went close for the home side on three occasions, while full-back Chris Solly forced a great save from Bartosz Bialkowski.
It was a first league goal in over two years for forward Hunt.
The 31-year-old, on loan from Leeds, last scored a first-team goal in January 2013, with his last league goal - in Reading's 2-2 Premier League draw with Swansea - in October 2012.
Victory moves Ipswich into second, a point behind leaders Derby.
Charlton remain two points off the play-off places, but showed enough strength in attack to suggest they will be in contention for promotion later in the season.
There were far more chances in the first 45 minutes than the second, with Ipswich inches away from taking the lead in the first minute when Luke Chambers headed wide.
Addicks keeper Pope was also kept busy, keeping out long-range efforts from Town top-scorer Daryl Murphy and another from winger Paul Anderson.
At the other end, Charlton youth product Harriott impressed, firing a right-footed effort wide and forcing a good save from Polish keeper Bialkowski, who also blocked a fierce Solly drive.
Harriott, 20, should have given the home side the lead in the 70th minute when the pacy Igor Vetokele broke down the left before pulling the ball back for Harriott, who swung his boot but failed to connect from six yards out.
With seconds of the match remaining, substitute Hunt finally broke the deadlock. The Irishman took advantage when Charlton defender Tal Ben Haim lost possession as he surged forward, drilling from 20 yards past the reach of Pope.
Charlton manager Bob Peeters:
"It was cruel, yes, but we only have ourselves to blame. We had enough chances to win maybe two games but it's about finishing.
"It's about putting the ball in the net, that's why they are up there and we are where we are.
"But if your centre-back thinks he can go and dribble in the middle of the park and you get cocky then you get punished.
"From one of my most experienced players, it was unforgivable. The only ones to blame are ourselves."
Ipswich manager Mick McCarthy:
"We are tough, hard working, belligerent, stubborn. They are good guys and good footballers.
"Towards the end we looked more likely to get the win. If you put Noel Hunt and Conor Sammon on then you've got a chance. Hunt is a good addition for us.
"He was unfortunate at Leeds - it just didn't happen, we hope it happens here.
"We're in the promotion race, just that."
- 26Ben Haim
- 6Bikey Amougou
- 7Berg GudmundssonSubstituted forBulotat 90+2'minutes
- 4JacksonSubstituted forWilsonat 76'minutes
- 11HarriottSubstituted forTucudeanat 86'minutes
- 12HuntSubstituted forSammonat 76'minutes
- 11AndersonSubstituted forHuntat 83'minutes
- 24St Ledger
- Darren Bond
- Shots on Target
Second Half ends, Charlton Athletic 0, Ipswich Town 1.
Goal! Charlton Athletic 0, Ipswich Town 1. Noel Hunt (Ipswich Town) right footed shot from the right side of the box to the bottom left corner.
Attempt missed. Daryl Murphy (Ipswich Town) header from the centre of the box misses to the left. Assisted by David McGoldrick with a cross following a corner.
Corner, Ipswich Town. Conceded by Frédéric Bulot.
Delay over. They are ready to continue.
Delay in match Noel Hunt (Ipswich Town) because of an injury.
Substitution, Charlton Athletic. Frédéric Bulot replaces Johann Berg Gudmundsson.
Attempt missed. David McGoldrick (Ipswich Town) right footed shot from outside the box misses to the right.
Attempt missed. Conor Sammon (Ipswich Town) left footed shot from the centre of the box is high and wide to the left. Assisted by David McGoldrick.
Attempt saved. David McGoldrick (Ipswich Town) right footed shot from outside the box is saved in the centre of the goal. Assisted by Cole Skuse.
Offside, Charlton Athletic. Morgan Fox tries a through ball, but George Tucudean is caught offside.
Substitution, Charlton Athletic. George Tucudean replaces Callum Harriott.
Attempt missed. Callum Harriott (Charlton Athletic) left footed shot from outside the box is high and wide to the left. Assisted by Johann Berg Gudmundsson.
Substitution, Ipswich Town. Noel Hunt replaces Paul Anderson.
Paul Anderson (Ipswich Town) wins a free kick in the defensive half.
Foul by Callum Harriott (Charlton Athletic).
Corner, Charlton Athletic. Conceded by Jay Tabb.
Corner, Charlton Athletic. Conceded by Bartosz Bialkowski.
Attempt blocked. Callum Harriott (Charlton Athletic) left footed shot from outside the box is blocked. Assisted by Igor Vetokele.