Ollie Watkins scored his fifth Premier League goal of the campaign as Aston Villa made their best start to a season after eight games since 1998-99 with victory over Fulham.
Fulham took the lead when a long punt from Bernd Leno was chased down by Raul Jimenez and he won a tussle with last man Pau Torres before striking a left-footed shot low into the corner of the net.
Villa got themselves back on level terms four minutes later when a 20-yard shot from Morgan Rogers took a big deflection off Calvin Bassey and wrong-footed Leno.
Fulham were awarded a penalty shortly before the half-hour mark after Matty Cash was deemed to have blocked a Jimenez header back across goal - but Andreas Pereira's tame low effort was saved by Emiliano Martinez.
Villa seized the initiative on the hour when England striker Watkins peeled away from Emile Smith Rowe and powerfully headed in a Youri Tielemans corner.
Fulham's afternoon from that point only went from bad to worse as defender Joachim Andersen was sent off for dragging down Watkins before Issa Diop clumsily turned a low cross from Lucas Digne into his own net.
The only sour note for Villa was the dismissal of substitute Jaden Philogene, who was sent off for a second yellow card after he fouled Reiss Nelson in injury time.
Villa's victory lifted them up to fourth in the table and while Fulham remain in ninth.
Watkins profits after classic Martinez
The penalty from Pereira had all the hallmarks of a classic miss: sun in his eyes, exaggerated stuttering run-up, pause before striking the ball and a weak finish clouded by indecisiveness.
Heading into the match the Brazilian had played more passes in the penalty area than any other Premier League player.
Presumably his attempt to pass the ball into the net from 12 yards after Fulham were awarded a penalty does not count to towards that tally.
Some credit should go to Martinez, though. The Argentina World Cup-winning goalkeeper left his dive as late as possible and was not done by any attempt to give him 'the eyes'.
Martinez was one of Villa's foreign contingent who did not spend the past few weeks on international duty, banned for two matches by Fifa for offensive behaviour during World Cup qualifiers in September.
Doubtless the 32-year-old would have spent the week at Villa's Bodymoor Heath training ground studying Pereira's spot-kicks for such a scenario and the homework paid off.
Ever the pantomime villain Martinez inevitably milked the moment - kissing the Villa badge on his goalkeeper shirt and gesticulating to the Craven Cottage crowd.
The miss stymied Fulham's start and gave Unai Emery's side the momentum before Watkins pounced with an archetypal poacher's goal, glancing a header beyond Leno after some clever movement on the corner of the six-yard box.
Villa are now unbeaten in their opening four away league matches for the first time since 2006-07. With some of their long-term injured players also edging back to fitness, they look a force to be reckoned with.
Fulham pay penalty despite Jimenez's hot streak
Jimenez now has 10 goals in his past 12 Premier League starts, including seven in his last seven at Craven Cottage.
The Mexico striker's road back to these kind of goalscoring numbers has been a long one.
He suffered a fractured skull while playing for Wolves in 2020 which threatened to derail his career.
At one point he endured a 33-game goal drought - ended by netting the consolation in a 3-1 home defeat by Villa last season.
The only surprise in this game was that, given Jimenez's renewed confidence levels in front of goal, he has not been moved to penalty-taking duties.
A few weeks ago in Fulham's 1-0 win over Nottingham Forest the 33-year-old striker had a tete-a-tete with regular taker Pereira.
On that occasion Jimenez took the ball off Pereira and subsequently buried the spot-kick.
It earned him a slap on the wrists from Fulham boss Marco Silva and he was asked to apologise to Pereira.
After such a pivotal miss, from which Fulham never really recovered in this game, Silva will surely consider the switch.
Player of the match
After the opportunity to rate players has closed, the score displayed represents the average from all the submissions by BBC Sport users.