Substitute Albert Adomah struck late to earn QPR a surprise 2-1 win at promotion-chasing Watford.
Charlie Austin had earlier cancelled out Troy Deeney's penalty opener for the Hornets, who would have gone third in the Sky Bet Championship with a win.
Watford captain Deeney drilled home a 52nd-minute spot-kick after Geoff Cameron had fouled Ismaila Sarr but Austin headed home a reply in the 73rd minute and Adomah came off the bench to win it in stoppage time with his first Rangers goal.
Watford made three changes but new recruit from Bournemouth Dan Gosling was not involved. Ex-Newcastle goalkeeper Rob Elliot, signed as a free agent, made the bench.
QPR also made three changes, with Lyndon Dykes missing out after a family member tested positive for Covid-19 and Norway captain Stefan Johansen thrust straight in after joining on loan from Fulham.
The visitors made the stronger start with Hornets defender William Troost-Ekong having to slide in to stop Ilias Chair setting Austin up in front of goal.
Rangers, with Chair nimble between the lines, continued to impress and Austin headed another chance narrowly wide at the back post.
Watford had fashioned nothing in reply apart from an early long-ranger from Marc Navarro that was too high but almost took the lead on the half-hour mark.
Francisco Sierralta's close-ranger header from a corner rebounded off the bar via goalkeeper Seny Dieng's gloves and it took two R's defenders to get in the way of a goalbound follow-up from Joao Pedro, who was offside anyway.
Nathaniel Chalobah saw a shot deflected behind before Yoann Barbet managed to chest the ball past his own goalkeeper before recovering enough poise to hack clear.
Watford had woken up at last, with the half ending with Pedro heading over from an angle.
The Hornets began where they had left off with Dieng beating away a low drive from Sarr, who was felled in the box by Cameron in the 51st minute in the next attack.
Up stepped Deeney to blast home the penalty for his seventh goal of the season – and sixth spot-kick.
Todd Kane saw a header drop wide as time began to run out for Rangers, who almost levelled in the 70th minute when Macauley Bonne slid in to meet a low ball into the six-yard box, only to put it into keeper Daniel Bachmann's hands.
The Austrian was beaten two minutes later though when Austin timed his run perfectly to power home a downward header from substitute Chris Willock's cross.
Adomah, on in the 82nd minute to replace Chair, won it in the 90th minute by coolly cushioning Kane's cross from the right to create space for a simple finish.