Peterborough United suffered heartbreak at the Valley after conceding twice in the final minutes to turn three points into one.
Posh had delivered their most complete performance of the League One season, attacking with pace and style, while also defending with great resolution against a decent Charlton attacking line-up.
Goals from Gwion Edwards ands Jack Marriott had looked likely to give Posh a terrific win, but a Ricky Holmes penalty in the 90th minute and a last-gasp close-range finish from substitute Karlan Ahearne-Grant four minutes later saved an unlikely point for the hosts.
It was a result Posh would probably have settled for before kick-off, but in the circumstances a 2-2 draw was a real kick in the teeth.
As promised Posh boss Grant McCann made five changes to his starting line-up with Alex Penny’s call-up for his full Football League debut as a right back the biggest surprise.
Anthony Grant wore the captain’s armband for the first time as Jack Baldwin was left on the bench, while Leo Da Silva Lopes was deployed as the man support for top scorer Marriott with Edwards and Marcus Maddison charged to supply them from the wings.
Chris Forrester and Ryan Tafazolli were also recalled and Posh delivered a much improved performance in the first half, one full of pacy, enterprising attacking and resolute defence against a bombardment of crosses.
Grant made a superb third minute headed save off the line to deny Holmes before Posh enjoyed an early purple patch. A fine one two between Maddison and Hughes was spoilt by a weak Maddison shot that was comfortably saved by Ben Amos in the home goal.
Da Silva’s headed flick sent Marriott racing clear on seven minutes, but the striker’s hesitation when given all the time in the world to score enabled Amos to save again.
But Posh were not to be denied for long. Maddison won a free kick 25 yards out, and delivered a glorious cross which Marriott missed, but Edwards backed up to tap home from close range in the 12th minute.
Charlton struggled to get their passing together in the opening 20 minutes, but once they started to feed Holmes on the left wing, they started to cause trouble.
Recalled goalkeeper Jonathan Bond made a brilliant double save to thwart Josh Magennis and Jake Forster-Caskey from close range, although the assistant referee flagged for offside before the follow-up shot.
A weak Tafazolli header helped Charlton create that opportunity, but Posh generally defended their box extremely well, particularly Andrew Hughes at the back post when Holmes was working his magic.
Mark Marshall did beat Hughes to one deep cross, but his well-struck shot was parried away by Bond.
Charlton enjoyed plenty of possession, but the Posh pace on the break was also proving dangerous to a couple of slow defenders.
And it was Posh who started the second half the better, a fact rewarded by a second goal on 58 minutes.
Grant started the move by sweeping a pass to Edwards on the right wing and his precise low cross was swept home first time by Marriott.
And it should have been 3-0 minutes later when the pace and skill of Edwards saw the midfielder streak clear, but instead of shooting he tried to cut inside and tumbled under the challenge of Ahmed Kashi. No penalty, to the anger of the Posh camp.
Charlton tried to respond. They huffed and puffed, delivered no end of crosses into the Posh penalty area, but they were all defended superbly by Tafazolli, Steven Taylor and Hughes.
Posh almost grabbed a third goal five minutes from time when Marriott and Maddison combined to tee up Edwards. He placed his effort past Amos, but Jay Da Silva appeared on the goalline to clear.
But then the game turned on a penalty awarded against the excellent Edwards just inside the penalty area in the final minute. Holmes smashed the spot-kick home and four minutes into added time Magennis nodded a Holmes cross into the path of Karlan Ahearne-Grant for an equaliser the home side hardly deserved.
There was even time for Dasilva to thrash a low shot just wide. Now that would have been gutting.
Posh: Jonathan Bond, Alex Penny, Andrew Hughes, Ryan Tafazolli, Steven Taylor, Anthony Grant. Chris Forrester, Gwion Edwards, Marcus Maddison (sub, Michael Doughty, 90 mins), Leo Da Silva Lopes, Jack Marriott (sub Ricky Miller, 90 mins).
Unused substitutes: Jack Baldwin, Danny Lloyd, Conor O’Malley, Jermaine Anderson, Lewis Freestone.
Charlton: Ben Amos, Ahmed Kashi (sub Karlan Ahearne-Grant, 70 mins), Patrick Bauer (sub, Anfarnee Dijksteel, 52 mins), Mark Marshall, Ezri Konsa, Jake Forster-Caskey, Jay Dasilva, Naby Sarr, Ricky Holmes, Leon Best (sub Joe Aribo, 70 mins), Josh Magennis.
Unused substitutes: Dillon Phillips, Johnnie Jackson, Joe Doodoo,Reeco Hackett-Fairchild.
Goals: Posh - Edwards (12 mins), Marriott (58 mins).
Charlton - Holmes (pen, 90 mins).
Cautions: Posh - Penny (foul), Grant (delaying the restart).
Referee: John Brooks 8.
Attendance: 9.532 (453 Posh).