Crystal Palace took a giant step towards Premier League safety and inflicted a setback on Liverpool's top four hopes as Christian Benteke struck twice on his return to Anfield.
Palace were happy to play a containing game in the early stages, allowing Liverpool plenty of possession but denying them space whenever they tried to get forward.
And it was Sam Allardyce's side who fashioned a good opening after 21 minutes as former Liverpool striker Benteke got away from a couple of defenders on the edge of the area but sent a low effort wide.
Within two minutes, Jurgen Klopp's side were ahead as Philippe Coutinho opened the scoring in brilliant fashion.
The Brazilian was fouled around 25 yards out and got back to his feet to curl a sumptuous strike over the wall and beyond Palace keeper Wayne Hennessey.
With a little over five minutes remaining until the break, Jurgen Klopp's side could have doubled their lead as Emre Can was given a shooting chance by James Milner's pull-back, only to send his effort horribly wide.
And Liverpool -- who had struggled to create much else against Allardyce's disciplined defence -- were made to regret it when the returning Benteke struck at the Kop end with three minutes of the first half remaining.
Yohan Cabaye beat the offside trap down the right and fired a low cross into the heart of the danger zone where Benteke, left all alone, swept his finish high past Simon Mignolet.
The Blegium international celebrated the strike with on-loan Liverpool defender Mamadou Sakho on the Palace bench, sparking an angry reaction from some Liverpool fans.
Coutinho was quickly into the thick of the action after the break, making space but firing over the top and then taking the corner from which Lucas Leiva volleyed high over.
Klopp's team were building a spell of momentum and gave the visitors another scare shortly before the hour when a Coutinho header hit teammate Divock Origi but fell kindly for Hennessey.
Moments later, the Palace keeper was involved again as he came off his line to thwart Firmino, who was almost through after an exchange of passes with Lucas, and Firmino came close again when he fired just wide.
But the Londoners maintained a threat from set pieces -- and after 74 minutes they regained the lead when Benteke got his second goal, heading in after the home defenders had failed to deal with a corner.
Allardyce brought on defender Patrick van Aanholt for Wilfried Zaha, with another defender, Damien Delaney, on for Cabaye, while Klopp introduced Trent Alexander-Arnold for Dejan Lovren and Alberto Moreno for James Milner.
Klopp's final change was to bring Marko Grujic for Nathaniel Clyne, while Palace goal hero Benteke made way for Fraizer Campbell as the game entered its final three minutes.
Grujic was booked for a lunging foul on Palace defender James Tomkins before Liverpool pushed Joel Matip upfield for a late charge -- but it was in vain.