Russian champions Zenit St Petersburg battled back from a goal down to record a 3-1 win against ten-man Porto in their Champions League Group G clash here on Wednesday.
Midfielder Roman Shirokov was the hero for the hosts, scoring twice, while Portuguese international Danny also netted for Luciano Spalletti's side.
Colombian winger James Rodriguez got Porto's goal, but that could not prevent last year's Europa League winners from slumping to a first defeat on Russian soil.
The result was a welcome boost for Zenit following their defeat to APOEL in their opening game a fortnight ago, and it puts them on top of their group on goal difference ahead of Shakhtar Donetsk's meeting with APOEL later.
Porto, Champions League winners in 2004, got off to a lively start and took the lead ten minutes in when Rodriguez converted a Hulk cross from the right-hand edge of the penalty area.
The hosts, spurred on by a sell-out crowd at the 21,000-seat Petrovsky stadium, pushed forward in search of an equaliser and were rewarded on 20 minutes when Shirokov converted the rebound from the edge of the box after Porto 'keeper Helton had deflected a Viktor Faizulin cross into his path.
Shortly after Alvaro Pereira missed a chance to restore Porto's lead with a powerful shot from the edge of the area that was turned behind by Vyacheslav Malafeev.
However, the hosts ended the first half on top and Porto were dealt a major blow when Uruguayan right back Jorge Fucile was dismissed for a second bookable offence just before the whistle.
Zenit stepped things up a gear after the restart and Russian international striker Alexander Kerzhakov almost put them in front for the first time on the night, hitting the woodwork from inside the area.
Kerzhakov then did put the ball in the net only to see his effort just before the hour mark ruled out for offside.
But Zenit were not to be denied for long, with Shirokov scoring his and his side's second when he latched on to Faizulin's freekick and fired past a helpless Helton fron point-blank range.
Danny then put Zenit out of sight when he netted their third goal on 72 minutes, turning home a Kerzhakov cross.
Three minutes later Shirokov missed a golden chance to complete his hat-trick, sending a rebound over the crossbar from six yards, while Danny missed another late chance, as Spalletti's men were forced to settle for a 3-1 win that revives their campaign ahead of a double-header against Shakhtar.