A French vessel has reached an Italian cruise ship adrift in the Indian Ocean with more than 30 British passengers on board and is towing it to an island, the Seychelles coastguard said.
The coastguard said authorities were making arrangements for the evacuation of those on board to the island of Desroches - and then their transfer to the Seychelles' main island.
The Costa Allegra, carrying more than 1,000 passengers and crew members, began drifting without power on Monday after a fire in its generator room. Officials say the blaze, which was extinguished, caused no injuries.
Two tug boats from the Seychelles are expected to reach the cruise ship later and will it tow it back under military escort. Somali pirates are active in the region but have not been sighted near the ship.
The vessel, owned by Costa Cruises, was cast adrift in the Indian Ocean and left at the mercy of the current. The incident came after the Costa Concordia cruise liner, also operated by Costa Cruises, struck rocks off the west coast of Italy on January 13, leaving a death toll expected to reach 32.
The ship was sailing around 200 miles off the south-west of the Seychelles when the fire broke out. Officials said it had been extinguished without causing any injuries or casualties and the liner was now stable and upright despite the 5ft waves battering it.
Captain Giorgio Moretti said the air conditioning and lights had been knocked out when the power went, but officials said emergency generators were keeping the ship's command room lit and instruments such as its radio functioning.
The rest of the ship was apparently dark, however, as night fell and its passengers were being kept in the large communal rooms rather than their cabins.
Seychelles presidential spokeswoman Srdjana Janosevic said: "If pirates attack, the armed guards on board will respond. But as far as I am aware, no pirates have been sighted in the area."
The Allegra left northern Madagascar on Saturday and was cruising towards the port of Victoria, Seychelles' capital, when the blaze broke out. It had been due in Victoria on Tuesday.