Sub Rudy Gestede earned Villa a well-deserved point against high-riding Leicester City at a vibrant Villa Park.
Nine minutes after replacing Carles Gil, the Benin international drove home an unstoppable shot for the equaliser to cancel out Shinji Okazaki 29th-minute opener for the Foxes.
Mark Bunn was also a hero after saving a penalty from Riyad Mahrez.
But Villa were full value for their point, having twice had what looked valid penalty claims ignored - and there was a touch of poetic justice when Gestede equalised because the striker handled before smashing the ball home.
After a surprisingly subdued start, the visitors produced the first goal attempt in the 12th minute, Jamie Vardy meeting a free-kick from the left with a stooping header which wasn't far wide.
It was an effort which momentarily unsettled Villa's defence, who were caught out two minutes later as Vardy went racing through on the left.
Bunn raced out of the penalty area to send the Foxes striker sprawling and earn himself a yellow card.
Marc Albrighton then surged through the middle before his powerful shot was charged down, but when the home side managed their first shot in the 19th minute, they might easily have gone in front.
Robert Huth's misplaced back pass left Libor Kozak clear on the right and the Czech striker advanced into the area before his angled low drive was kept out by Kasper Schmeichel.
Kozak collected the rebound and attempted to pick out Gil, but his pass was intercepted.
But just before the half hour mark Leicester were in front.
Bunn did well to claw the ball away after Vardy attempted to beat him with a clever lob, but Okazaki followed up with a low close-range shot that crossed the line despite the keeper's attempt at a last-ditch clearance.
It could have been worse on 33 minutes, the visitors being awarded a penalty after a fierce drive from Riyad Mahrez hit Aly Cissokho's arm as the full-back threw himself in the line of fire.
The decision infuriated home supporters but their jeers turned to cheers when Bunn kept out Mahrez's spot kick with his trailing leg.
That save lifted Villa, and a couple of minutes later Jordan Ayew flicked a header just wide from Jordan Veretout's free-kick.
As Garde's men maintained the momentum, Cissokho's low drive was well help by Schmeichel before Idrissa Gana slipped into the area to fire just too high.
After Albrighton had fired over in the opening minute of the second half, Cissokho almost brought the scores level on 51 minutes.
Moving on to a clever back-heel from Ashley Westwood, the left-back unleashed a blistering left-footer that Schmeichel did well to push away.
Leandro Bacuna's follow-up attempt deflected over for a corner, and the crowd sensed an equaliser, although Bunn again came to the rescue in the 58th minute, tipping over a curling 25-yard shot from Danny Drinkwater.
Even so, Villa were convinced they should have had a penalty on the hour, Hutch wrestling Kozak to the ground with his left arm as they contested Westwood's lofted pass into the danger zone.
In the next attack, Ayew gave two markers the slip before cutting the ball back for Bacuna, whose left-foot effort didn't carry enough power to trouble Schmeichel.
The visitors were still menacing on the break, though, and there was relief in the home camp when Danny Drinkwater scuffed his shot wide from a good position following Vady's left-wing cross.
Villa again appealed for a penalty when Drinkwater handled inside the area, so there was a touch of irony when they drew level in the 75th minute.
Gestede appeared to touch the ball with his hand as he held off Huth's challenge on the edge of the area, but referee Roger East showed no more interest than he had in Drinkwater's offence, and Villa's sub smashed a fierce left-foot drive past Schmeichel.
As tempers became frayed in the closing stages, Bacuna and Vardy were booked following an altercation which led to players from both sides pushing and shoving each other.
VILLA: Bunn; Bacuna, Okore, Lescott, Cissokho; Veretout, Gana, Westwood; Gil (Gestede 66); Ayew (Sinclair 90), Kozak. Unused subs: Guzan, Richards, Clark, Richardson, Lyden.
LEICESTER: Schmeichel; Simpson, Morgan, Huth, Fuchs; Mahrez (Ulloa 69), Drinkwater, Kante, Albrighton (Gray 85); Okazaki (De Laet 59), Vardy. Unused subs: Schwazer, King, Wasilewski, Inler.