Manchester City produced an outstanding second-half performance to sweep past Barcelona 3-1 at the Etihad Stadium.
Pep Guardiola's side had gone behind to his old one when Lionel Messi, who scored a hat-trick as Barca won 4-0 in the reverse fixture at the Camp Nou, struck with a low finish.
But a brace from Ilkay Gundogan and a free kick for Kevin De Bruyne turned the game on its head as City gave their Champions League prospects a huge boost.
The home side made a fast start, pressing Barcelona high up the pitch and denying them time to settle.
But the visitors still put together the most threatening move of the opening moments as Neymar's attempt to thread the ball to Luis Suarez inside the area saw Nicolas Otamendi stretching to clear.
After 10 minutes, Guardiola's side felt they should have been given a penalty after a brilliant break sparked by Sergio Aguero.
Aguero span away from his markers near halfway and raced down the right before playing a pass across the area, where Raheem Sterling picked up possession.
Sterling twisted past Samuel Umtiti and went down under his challenge -- but although there appeared to have been contact, referee Viktor Kassai turned down City's appeals and booked Sterling for a dive.
As the game hit the quarter of an hour, Sterling got down the right but curled his cross too close to Marc-Andre ter Stegen, and moments later Luis Suarez was crowded out at the other end as he waited too long to deliver a pass.
With 20 minutes gone, Ivan Rakitic was booked for a heavy midfield challenge on Ilkay Gundogan -- and within seconds of Barcelona clearing their lines from the free kick, they were ahead with a devastating counter-attack.
Neymar got down the left and bided his time before playing a pass into the path of Lionel Messi, who took a couple of paces forward before firing a low finish home.
Aguero was soon sparking problems again but his attempt to find Sterling inside the area was foiled by Umtiti's interception before Gundogan fired a powerful 20-yard effort too close to Ter Stegen.
Neymar saw his strike from an angle on the left deflected into the side netting, but the Brazil captain was then booked after Barca lost possession and he fouled Sterling.
A fine Fernandinho challenge thwarted him inside the City area, but the visitors upped the pressure yet again and an Andre Gomes volley crashed back off John Stones before the same player blocked from Suarez.
But on 39 minutes, and out of the blue, City were level. The home side pressed through Aguero as the visitors tried to play their way out of defence and, when a square ball from Sergi Roberto went awry, Sterling played in a superb low cross for Gundogan to finish at the far post.
Within seconds, they were at it again as Fernandinho won the ball and played it through to David Silva, whose pass fell back to the Brazilian and his low cross-shot only just evaded Aguero.
Sterling had a glorious chance to put City ahead within seconds of the restart when his touch was too heavy after another Roberto square pass had caused chaos in his own defence -- but they did take the lead after 50 minutes.
Silva was tripped just outside the area and up stepped Kevin De Bruyne, whose free kick dipped over the wall and past Ter Stegen, who could perhaps have done better.
The goal inspired City, who came agonisingly close to 3-1 when John Stones flicked on another De Bruyne free kick and it just evaded Otamendi and then Aguero steered a Silva pass wide.
Aleksandar Kolarov was booked for a challenge on Rakitic before City made a change, with the excellent Fernandinho making way for Fernando and Rakitic being replaced by Arda Turan soon afterwards.
De Bruyne missed a Kolarov cross by the finest of margins as City continued their search for a third, with Aguero seeing his attempt to steer the ball back across snuffed out by a sliding Umtiti challenge.
But Barcelona should have been level when John Stones, pressing in the visitors' half, played the ball backwards and straight to Suarez, who brilliantly created space and slid the ball to Gomes, whose effort smacked back off the underside of the bar.
As a breathless game continued to swing from end to end, Sterling teed up De Bruyne, whose low drive from the edge of the area whistled just past the post with Ter Stegen motionless.
Sterling made way for Jesus Navas as City made another change and, with a little over a quarter of an hour remaining, Navas set up the goal that gave City the 3-1 lead their second-half performance had merited.
As Guardiola's side swept forward on another counter-attack, Navas played the ball in from the right. When it cannoned off the sliding Aguero with Barcelona appealing for handball, it fell perfectly for the unmarked Gundogan to sweep home his second.
Barcelona battled in vain to find a way back into the game as Messi's late free kick cannoned back off the City wall before Guardiola made his final change with goal-scorer De Bruyne getting a huge ovation as he was replaced by Nolito.