Tim Cahill scored twice as Everton eased their relegation worries with a second straight Premiership win.
Everton went ahead on nine minutes when James Beattie followed up his own saved penalty to stroke the ball home.
The visitors replied soon after with a well-taken volley from Matt Holland although Cahill's header just before the break restored Everton's lead.
Cahill made it three with another header on 59 minutes but Everton had to survive a few scares late on.
The victory moves Everton up to 15th place in the table, six points off the drop zone and just two points behind Charlton, whose dismal form continues.
They have now lost nine of their last 11 matches in all competitions and have now slumped to 13th in the Premiership table.
It was the home side who looked sharper in the opening exchanges but although they enjoyed the greater possession, the final ball was lacking.
But they did get an early break when referee Uriah Rennie had the simple task of awarding a penalty when Dennis Rommedahl pulled back Kevin Kilbane inside the box as he tried to latch onto a superb through ball from Cahill.
As Rommedahl was the last man, he was lucky to escape with a yellow card but any sense of injustice was soon dispelled when Beattie scored despite needing a second attempt.
Charlton reacted better to the goal than Everton did and Addicks midfielder Holland equalised on 18 minutes with a superb volley from the edge of the box after Everton failed to clear a Luke Young cross.
Despite the poor from of both sides, they refused to sit back and both went out looking for a second.
Bryan Hughes should have done better for Charlton when he created space eight yards out but he could only fire straight over.
And Everton were just inches away from taking the lead on 33 minutes, but Kilbane's powerful header from Leon Osman's cross hit the post and went wide.
The second did come eight minutes later when Arteta's clever quick free kick caught Charlton's defence napping and Cahill rose highest at the far post to head the ball home.
The goal came at the perfect time for Everton and the Arteta/Cahill partnership were at it again 14 minutes into the second half to put the game beyond reach.
Hermann Hreidarsson's needless foul on Osman gave Arteta the chance to deliver again from the right and Cahill's powerful header left Thomas Myhre stranded.
But Charlton refused to give in and they created chances to claw their way back into the game as Everton looked increasingly nervy.
Shaun Bartlett shot over from 30 yards with the goal at his mercy after a poor clearance from Nigel Martyn, while Jonathan Fortune's header rebounded off the inside of the post.
And Darren Ambrose could have scored twice in the closing six minutes but a close-range header went over while a goal-bound shot was well-saved by Martyn.
Cahill almost had the last word though but he had a 75th-minute strike disallowed while a superb volley came back off the woodwork in the dying seconds.
Everton manager David Moyes:
"I can take a lot of satisfaction from that performance. The players have done very well, getting the goals and playing much better.
"I do feel that we could have scored more goals but I'm satisfied we got three and pleased we got the points.
"I have been a bit embarrassed about the position we are in and what we have been giving the fans this season."
Charlton manager Alan Curbishley:
"We've turned up and just haven't defended three set-pieces.
"We just always seem to be coming from behind away from home. All we are asking for is a decent start. We can't keep conceding twos and threes and finding ourselves into the position we have been.
"We need to do what Everton have done over the past two games, and that's string two wins together.
"No disrespect to Everton but if we had turned up and played I think we would have got something from the game."
Everton: Martyn, Hibbert, Yobo, Ferrari, Nuno Valente, Osman, Arteta, Cahill, Kilbane, Beattie, Ferguson (Bent 88).
Subs Not Used: Wright, Naysmith, Weir, McFadden.
Goals: Beattie 9, Cahill 41, 59.
Charlton: Myhre, Young, Fortune, Hreidarsson, Powell, Rommedahl (Lisbie 76), Holland, Hughes (Ambrose 67), Murphy (Kishishev 67), Bent, Bartlett.
Subs Not Used: Andersen, Spector.
Booked: Rommedahl, Bent.
Goals: Holland 18.
Ref: U Rennie (S Yorkshire).