Mayo is the fourth Saunier Duval rider to win a Giro stage in 2007
Spaniard Iban Mayo won the 19th stage of the Giro d'Italia in heavy rain in Terme di Comano.
Giovanni Visconti was 43 seconds behind the Saunier Duval rider, followed by Marco Marzano.
Mayo attacked two thirds of the way through the 111-mile course to finish in 4 hours, 34 minutes, 49 seconds.
Danilo di Luca retained the overall leader's pink jersey going into Saturday's 26.7-mile individual time trial from Bardolino to Verona.
The peloton fragmented during the 7.1-mile climb to Pian Delle Fugazze and seven riders, including Stefano Garzelli, who won the 14th and 16th stages, moved 44 seconds clear on the winding descent.
The weather deteriorated during the race and Mayo and Alberto Losada Alguacil accelerated away from the rest of the breakaway in pouring rain.
"The team worked very well and I took my chance," Mayo said after becoming the fourth Saunier Duval rider to win a stage in the 90th edition of the race.
"It's been an excellent Giro for us - we've managed to win four stages with four different riders."
Di Luca crossed the line 18th - more than three minutes behind Mayo - but maintained a lead of two minutes 24 seconds over Andy Schleck in the overall standings.
Friday's Giro stage result:
1. Iban Mayo (Spain / Saunier Duval ) 4hrs 34mins 49secs
2. Giovanni Visconti (Italy / Quick-Step ) +43"
3. Marco Marzano (Italy / Lampre ) +1:04"
4. Michael Rasmussen (Denmark / Rabobank ) +1:08"
5. Evgueni Petrov (Russia / Tinkoff )
6. Mario Aerts (Belgium / Predictor - Lotto ) +2:54"
7. Lorenzo Bernucci (Italy / T-Mobile ) +2:58"
8. Maximiliano Richeze (Argentina / Panaria ) +3:13"
9. Lilian Jegou (France / Francaise des Jeux )
10. Josep Jufre (Spain / Predictor - Lotto )
1. Danilo Di Luca (Italy / Liquigas ) 86hrs 46mins 28secs
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. Evgueni Petrov (Russia / Tinkoff ) +8:20"
8. David Arroyo (Spain / Caisse d'Epargne ) +10:00"
9. Franco Pellizotti (Italy / Liquigas ) +10:39"
10. Marzio Bruseghin (Italy / Lampre ) +10:55"
11. Emanuele Sella (Italy / Panaria ) +10:59"