Jimmy Floyd Hasselbaink's 99th Premiership goal gave third-placed Chelsea a narrow win over Charlton.
Hasselbaink scored from the spot after the Dutch striker was adjudged by referee Steve Bennett to have been fouled by defender Mark Fish.
Chelsea hit the woodwork twice as Jesper Gronkjaer struck the bar, while Adrian Mutu was denied by the post.
Charlton rarely troubled the Chelsea defence and as the game opened up Dean Kiely made a superb save to deny Mutu.
Despite lacking 12 first-choice players - including Scott Parker due to the terms of his £10m transfer - Chelsea began confidently.
Gronkjaer raced in from the right and released a shot which cannoned back off the bar.
And central defender Robert Huth, with the outside of his right boot, powered a free-kick narrowly wide.
Working down the left wing Gronkjaer threatened sporadically but overall the Charlton defence, expertly marshalled by Fish and Chris Perry, restricted Chelsea to long-range efforts.
Before conceding the penalty, Fish had been involved in two other incidents where Chelsea appealed for a spot-kick.
4 mins: Gronkjaer hits the bar
28 mins: Hasselbaink's penalty gives Chelsea the lead
86 mins: Mutu's shot strikes the post
First Bennett booked Gronkjaer for diving and the referee then ruled in favour of Fish after Mutu claimed the South African defender had pushed him.
On the third occasion Fish had no such luck after Hasselbaink backed into him and as the two players tumbled to the ground, Bennett pointed to the spot.
The Dutchman rolled the ball to Kiely's left as the Charlton goalkeeper dived the other way.
Emboldened by the goal, Chelsea redoubled their attacking efforts and Mutu and Glen Johnson went close with a couple of shots.
Chasing a European place, Charlton failed to register much of an attacking threat in the opening half.
After the interval both Paolo di Canio and Claus Jensen
started to come into the game, though Charlton continued to find it hard to create clear-cut chances.
As the game wore on Chelsea became increasingly nervous and Huth almost put through his own net, while substitute Shaun Bartlett glanced a header over.
The trajectory of one of Jensen's free-kicks also gave Neil Sullivan an anxious moment with 15 minutes to go, but the ball sailed past the post.
Chelsea should have added to Hasselbaink's goal, notably when Mutu's angled shot hit the post and the Romanian international should have done better with just Kiely to beat.
Chelsea: Sullivan, Melchiot, Huth, Gallas, Bridge, Johnson, Nicolas, Lampard, Gronkjaer, Mutu, Hasselbaink (Gudjohnsen 74).
Subs not used: Ambrosio, Desailly, Oliveira, Rocastle.
Booked: Gronkjaer, Mutu.
Charlton: Kiely, Kishishev, Fish, Perry, Hreidarsson, Stuart (Young 41), Holland, Jensen, Konchesky (Bartlett 75), Johansson, Di Canio.
Subs not used: Leite, Hughes, Fortune.
Referee: S Bennett (Kent).