Roman Shirokov's brace gave Zenit St Petersburg a narrow advantage against Benfica in the first leg of their Champions League last-16 tie.
The Portuguese side went ahead after Maxi Pereira slotted home following goalkeeper Yuri Zhevnov's parry.
The home side equalised when Shirikov scored his first with a volley, going ahead through Sergei Semak's flick.
Oscar Cardozo levelled again after Zhevnov's mistake, but Shirokov pounced late on for the winner.
With the Russian domestic season taking its winter break, it was Zenit's first competitive game since their 0-0 draw against Porto in the last match of the group stages back in early December.
After a slow start, as the players acclimatised to the sub-zero temperatures and uneven surface, Benfica took the lead.
Nicolas Lombaerts brought down Alex Witsel on the edge of the area, talisman Cardozo's free-kick was parried by goalkeeper Yuri Zhevnov, making his Champions League debut, and Pereira was quickest to react to slot home for a priceless away goal.
It sprung the home side into life. Minutes later, Aleksandr Kerzhakov had his shot blocked well by Benfica keeper Artur and Shirokov saw his effort from inside the box fly over the bar. And it did not take long for the Russians to draw level.
Tomas Hubocan whipped in the ball from the left flank and Shirokov opened up his body, guiding the ball home with a sweetly-struck volley for his fourth Champions League goal of the campaign.
Benfica, though, were forced into a change, bringing on Pablo Aimar in place of former Bolton loanee Rodrigo who suffered a heavy fall after a challenge by Bruno Alves.
The Argentine was working in tandem with fellow South American Gaitan, coming close with an effort that was gathered well by Zhevnov.
The Russians could have taken the lead going into the half-time break, but Konstantin Zyryanov was unable to find a teammate with his cutback from the left byline.
The second half began in similar fashion, scrappy and laboured with neither side able to get hold of the ball.
However, Gaitan was able to wriggle clear on the right, before going for goal from a narrow angle when a pass to Cardozo was the better option.
Zenit had their first real chance of the second period when substitute Vladimir Bystrov found himself in space in the area but blazed high over Artur's bar.
At the other end, Cardozo had his first real opportunity when he poked Emerson's cross goalwards, but Zhevnov scrambled across his line to push the ball away.
Zenit broke and went in front for the first time with a goal of real class.
Striker Kerzhakov chased down a loose ball, keeping it alive with a backheel which reached Bystrov who hooked into the box and Sergei Semak spun to flick past the despairing reach of the Benfica keeper.
Kerzhakov was looking menacing now and should have put his side further ahead but screwed into the side netting. However, the Russians were not to be outdone, equalising after another mistake from the 30-year-old Zenit goalkeeper.
Emerson's cross from the left hand side of the area was turned goalbound by Gaitan and Zhevnov, who was not having the best of games, dropped the ball in the path of Cardozo who smashed home from close range.
Zenit then won the game in the last minute when Pereira failed to clear and Shirokov calmly rounded Artur, tucking the ball into an empty net to earn his side the advantage going into the second leg in three weeks' time.