Swansea City went back to the top of the Championship as Andre Ayew’s first league goal for the club since May 2016 sealed a comeback victory at Charlton.
The Swans had trailed after just 66 seconds when Jonathan Leko took advantage of a poor clearance to find the net via a deflection.
But the Swans hit back on 17 minutes as Yan Dhanda – restored to the starting line-up in place of George Byers – found the bottom corner via a Charlton defender.
And Ayew then turned in a corner on 65 minutes to give Swansea a first win at The Valley since 1980.
It was enough to see Steve Cooper’s side overtake Leeds and head to the summit of the second tier.
The Swans had made an excellent start against Reading at the weekend, but they endured a nightmare beginning here.
Adam Matthews’ cross was not dealt with and Leko found the top corner via a deflection off Joe Rodon.
Swansea sought a quick response. Bersant Celina cutting infield to find Ayew’s angled run, with the Ghanaian firing a left-footed shot over the bar.
More good build-up allowed Ayew to dig out a cross for Celina at the far post, but the Kosovans attempted knockdown to Borja Baston was cut out by Addicks’ keeper Dillon Phillips.
And the leveller arrived on 17 minutes. Celina, Ayew, Borja and Jay Fulton showed patience to tee up Dhanda, and his deflected strike beat a wrong-footed Phillips.
After a frantic start the game began to settle down, but the hosts continued to play with a real energy and tempo in their play.
Ayew then ignored the supporting Dhanda after an excellent challenge from Fulton had sparked a Swansea counter, and the winger was eventually shuffled off the ball by a host of red shirts.
Fulton then volleyed over after good work down the right by Connor Roberts but it remained level at the break.
The Swans started the second half well, and a purposeful Celina break ended with Fulton seeing his close-range effort blocked by Phillips and a follow-up effort found the net but was ruled out as the ball had gone out of play.
But this was now a far tighter affair than the opening exchanges had been and there was little to choose between the sides as the hour mark passed.
Freddie Woodman calmly held a Ben Purrington header under pressure from a trio of red shirts.
And the Swans went straight up the other end to score from a corner. Matt Grimes whipped in a corner, Rodon glanced it on and Ayew was on hand to finish from close range.
Celina worked Phillips from the edge of the area seconds later as the Swans looked to put the game to bed.
But they survived a scare moments later as substitute Chuks Aneke tumbled over Rodon in the area, but referee Peter Bankes waved away prolonged Charlton appeals for a penalty.
Celina went close to wrapping things up with 13 minutes remaining, cutting onto his right foot and curling just past the far post.
Charlton Athletic: Dillon Phillips, Jason Pearce (captain), Macauley Bonne, Sam Field, Ben Purrington (Jake Forster-Caskey 77), Conor Gallagher, Adam Matthews, Jonathan Leko (Chuks Aneke 66), Tom Lockyer, Josh Cullen, Erhun Otzumer (Jonny Williams 66).
Subs not used: Ben Amos, Deji Oshilaja, Darren Pratley, Naby Sarr.
Swansea City: Freddie Woodman; Connor Roberts, Mike van der Hoorn, Joe Rodon, Kyle Naughton; Jay Fulton, Matt Grimes (captain); Andre Ayew, Yan Dhanda (Tom Carroll 77), Bersant Celina (Ben Wilmot 90); Borja Baston.
Subs not used: Erwin Mulder, Declan John, Wayne Routledge, Jordon Garrick, Sam Surridge.
Referee: Peter Bankes