Fly-half Nick Evans helped Harlequins keep their hopes of a top-four Premiership finish alive with victory over a spirited London Irish.
Evans converted his own try early on after James O'Connor's grubber kick was smothered but the Australian kept the visitors in it with three penalties.
Marland Yarde was then sin-binned for a tackle on Jordan Turner-Hall but the Irish defence kept Quins at bay.
But they could not stop Sam Smith and Mike Brown, who secured the hosts' win.
The result leaves Quins six points adrift of Bath in fourth in the race for a Premiership play-off spot while Irish remain third from bottom.
Harlequins had been boosted by the return of Brown, Danny Care and Chris Robshaw to the starting line-up after England Six Nations duty but it was New Zealander Evans who opened the scoring for the home side.
O'Connor's attempted grubber kick was smothered within his own 22, allowing Evans to race over the line for the game's opening try, which he duly converted.
Exiles full-back O'Connor pulled Irish back to within four points following a penalty, but Evans extended Quins' advantage with a kick of his own.
Irish continued to attack, making the most of favourable conditions in the first half and kept scrum-half Care's influence on the game to a minimum.
Consecutive kicks from O'Connor put the Exiles just a point behind at the break but the full-back failed to convert a penalty that would have put Irish in the lead after a breathless start to the second half.
Irish's Yarde was then sent to the stands for tackling Turner-Hall without the ball, leaving Evans to convert the penalty but Quins failed to make the most of the man advantage.
It was Care who eventually found the breakthrough for Quins, floating a sublime pass to Smith who touched down in the corner.
The England man then put Hopper through who passed to Brown, who again crossed in the corner.
But despite further Quins pressure, they failed to secure a bonus point with a fourth try as Irish stood firm.
Harlequins director of rugby Conor O'Shea:
"The standards we set ourselves are better than that. We're never arrogant enough to take any Premiership win for granted, so we should be happy with the win, but our ambition and standards are higher.
"The breakdown was frustrating beyond comprehension throughout the game. We'll take the win, but we know there's more in this team.
"We know we have to win all four of our remaining games to be within a chance of finishing in the top four.
"We know that whoever wins when we go to Sale is in the fight for the top four. Whoever loses, isn't. It's going to be a real fight and I've always said it will be. We want to fight until the bitter end."
London Irish director of rugby Brian Smith:
"We're in limbo now. We're looking up at the table thinking we can maybe catch the next team above us.
"We can't do much more than that because there are only four fixtures left, so we're looking at the future.
"Obviously we want to win our home games and be competitive. Of course we want to win, but we also have one eye on next season. Giving game time to the younger blokes is part of the long-term plan."
Harlequins: Brown; Lindsay-Hague, Hopper, Turner-Hall, Smith; Evans, Care; Marler, Ward, Sinckler, Kennedy, Robson, Wallace, Robshaw (capt), Easter.
Replacements: Doran Jones for Sinckler (66), Matthews for Kennedy (64), Guest for Wallace (56).
Not Used: Crumpton, Lambert, Dickson, Botica, Molenaar.
London Irish: O'Connor, Ojo, Mulchrone, Fowlie, Yarde, Geraghty, O'Leary, Parr, Stevens, Hagan, Gough, Rouse, Sinclair, Cowan, Treviranus.
Replacements: Mayhew for Parr (55), Yapp for Stevens (55), Halavatau for Hagan (49), Harris for Sinclair (68), Ellis for Gough (61), Lewington for Fowlie (66), Allinson for O'Leary (49).
Not Used: Dorrian
Sin Bin: Yarde (50)
Referee: Andrew Small