Gilberto Simoni won stage 17 of the Giro d'Italia from Lienz in Austria to the summit of Monte Zoncolan in Italy.
Simoni won the same stage in 2003
Fellow Italian Danilo di Luca of the Liquigas team retained the overall race lead, finishing 31 seconds behind the 2001 and 2003 Giro winner in fourth.
Simoni's Saunier Duval team-mate and compatriot Leonardo Piepoli was second in three hours 51 minutes and 52 seconds - the same time as the winner.
Luxembourg's Andy Schleck was third, seven seconds behind.
"It's been three years since I won a Giro stage. I didn't think it was possible to win anymore," Simoni said. "It was important to win a stage and this is the best one."
An estimated 60,000 fans crowded the 6.28-mile climb, which featured grades as high as 22% and an average of 11.9%.
By comparison, L'Alpe d'Huez - traditionally one of the Tour de France's toughest climbs - is 8.82 miles with an average grade of 7.7%.
"It's pretty intimidating," Di Luca said. "Simoni showed how strong a climber he is. I went at my own pace.
"The Giro will be decided Saturday - the time trial is very important - but it's a pretty good lead I have."
Di Luca, who had been left trailing just over four miles from the top after Simoni accelerated, managed to fight back in the final stages to limit the damage.
With just four stages to go before the finish in Milan on Sunday, Di Luca leads Team CSC's Schleck by two minutes and 24 seconds.
Thursday's 126-mile 18th stage is from Udine to Riese Pio X.
Wednesday's stage result:
1. Gilberto Simoni (Italy / Saunier Duval ) 3hrs 51mins 52secs
2. Leonardo Piepoli (Italy / Saunier Duval ) same time
3. Andy Schleck (Luxembourg / Team CSC ) +6
4. Danilo Di Luca (Italy / Liquigas ) +31
5. Damiano Cunego (Italy / Lampre ) +37
6. Massimo Codol (Italy / Acqua & Sapone ) +58
7. Julio Perez Cuapio (Mexico / Panaria ) +1:19
8. Franco Pellizotti (Italy / Liquigas ) +1:40
1. Danilo Di Luca (Italy / Liquigas ) 77:35:35
2. Andy Schleck (Luxembourg / Team CSC ) +2:24
3. Gilberto Simoni (Italy / Saunier Duval ) +2:28
4. Damiano Cunego (Italy / Lampre ) +3:29
5. Eddy Mazzoleni (Italy / Astana ) +3:46
6. Riccardo Ricco (Italy / Saunier Duval ) +5:19
7. David Arroyo (Spain / Caisse d'Epargne ) +10:00
8. Evgueni Petrov (Russia / Tinkoff ) +10:25