Team Sky's Nicolas Roche won the 18th stage of the Vuelta a Espana as Tom Dumoulin kept the leader's red jersey.
The Irishman outsprinted Spaniard Haimaar Zubeldia as Team Sky won their first stage of the race.
Dumoulin protected his three-second lead in the general classification.
The Dutchman stuck gamely to chief rival Fabio Aru, whose Astana team launched a series of attacks over the hilly 204km ride between Roa and Riaza, but they crossed the line together.
Dumoulin is hopeful of maintaining his advantage with three stages remaining, including Sunday's ceremonial finish into Madrid.
"There are hard days coming up but we've survived the first one and it was a good day," Dumoulin told reporters.
"Aru tried very hard but I actually was never in trouble and after his first attack I knew I would keep the red jersey."
Roche, the son of former professional Stephen Roche, had to be attended by medics for a wasp sting after the stage.
"I was afraid of the bug! Well, I am exaggerating, but I touched it and it stung me," he said. "I thought it would be bad luck!"
Roche and Trek Factory Racing's Zubeldia broke clear from the leading group on the approach to the finish, with the former going on to claim his first Grand Tour stage win since 2013.
Stage 18 result:
1. Nicolas Roche (Ire/Team Sky) 5 hours 3mins 59secs
2. Haimar Zubeldia (Spa/Trek) same time
3. Jose Goncalves (Por/Caja Rural) +18 secs
4. Alejandro Valverde (Spa/Movistar) +38 secs
5. Esteban Chaves (Col/Orica) same time
6. Joaquim Rodriguez (Spa/Katusha) same time
7. Pieter Serry (Bel/Etixx-Quick-Step) same time
8. Adam Hansen (Aus/Lotto) same time
9. Gianluca Brambilla (Ita/Etixx-Quick-Step) same time
10. Domenico Pozzovivo (Ita/AG2R) same time
General classification after stage 18:
1. Tom Dumoulin (Ned/Giant) 73hrs 45mins 13secs
2. Fabio Aru (Ita/Astana) +3sec
3. Joaquim Rodriguez (Spa/Katusha) 1min 15secs
4. Rafal Majka (Pol/Tinkoff - Saxo) +2min 22secs
5. Nairo Quintana (Col/Movistar) +2mins 53secs
6. Alejandro Valverde (Spa/Movistar) +3mins 15secs
7. Esteban Chaves (Col/Orica) +3min 30secs
8. Daniel Moreno (Spa/Katusha) +3mins 46secs
9. Mikel Nieve (Spa/Team Sky) +4mins 10secs
10. Louis Meintjes (SA/ Team MTN) +6mins 51secs