diff --git a/src/Configuration.h b/src/Configuration.h
index 81ed392927a3fd7d55ac1f5019b6ad80ea7535b6..6267484974c490f9bbc25456fa56b6dec7b728e0 100644
--- a/src/Configuration.h
+++ b/src/Configuration.h
@@ -24,7 +24,7 @@ private:
         std::string databaseHost, unsigned int databasePort,
         std::string databaseUsername, std::string databasePassword,
         std::string databaseSchema, std::string databaseTable,
-        unsigned int refreshTime, unsigned int timeout,
+        unsigned int refreshTime, unsigned int timeout, unsigned int recoveryTime,
         std::string auxDatabaseHost, unsigned int auxDatabasePort,
         std::string auxDatabaseUsername, std::string auxDatabasePassword,
         std::string auxDatabaseSchema, std::string auxDatabaseTimestampTable,
@@ -35,7 +35,7 @@ private:
         m_databaseHost(databaseHost), m_databasePort(databasePort),
         m_databaseUsername(databaseUsername), m_databasePassword(databasePassword),
         m_databaseSchema(databaseSchema), m_databaseTable(databaseTable),
-        m_refreshTime(refreshTime), m_timeout(timeout),
+        m_refreshTime(refreshTime), m_timeout(timeout), m_recoveryTime(recoveryTime),
         m_auxDatabaseHost(auxDatabaseHost), m_auxDatabasePort(auxDatabasePort),
         m_auxDatabaseUsername(auxDatabaseUsername),
         m_auxDatabasePassword(auxDatabasePassword),
@@ -63,7 +63,7 @@ public:
         std::string databaseHost, unsigned int databasePort,
         std::string databaseUsername, std::string databasePassword,
         std::string databaseSchema, std::string databaseTable,
-        unsigned int refreshTime, unsigned int timeout,
+        unsigned int refreshTime, unsigned int timeout, unsigned int recoveryTime,
         std::string auxDatabaseHost, unsigned int auxDatabasePort,
         std::string auxDatabaseUsername, std::string auxDatabasePassword,
         std::string auxDatabaseSchema, std::string auxDatabaseTimestampTable,
@@ -72,9 +72,9 @@ public:
 		Configuration::SP c_sp(new Configuration(certificateFile, storagePath,
             remoteHost, remotePort, remoteUsername, remotePassword, databaseHost,
             databasePort, databaseUsername, databasePassword, databaseSchema,
-            databaseTable, refreshTime, timeout, auxDatabaseHost, auxDatabasePort,
-            auxDatabaseUsername, auxDatabasePassword, auxDatabaseSchema,
-            auxDatabaseTimestampTable, auxDatabaseFailedTable),
+            databaseTable, refreshTime, timeout, recoveryTime, auxDatabaseHost,
+            auxDatabasePort, auxDatabaseUsername, auxDatabasePassword,
+            auxDatabaseSchema, auxDatabaseTimestampTable, auxDatabaseFailedTable),
             Configuration::Deleter());
 
 		return c_sp;
@@ -97,6 +97,7 @@ public:
 	std::string	getDatabaseTable() const { return m_databaseTable; }
 	unsigned int getRefreshTime() const { return m_refreshTime; }
 	unsigned int getTimeout() const { return m_timeout; }
+    unsigned int getRecoveryTime() const { return m_recoveryTime; }
     std::string getAuxDatabaseHost() const { return m_auxDatabaseHost; }
     unsigned int getAuxDatabasePort() const { return m_auxDatabasePort; }
     std::string getAuxDatabaseUsername() const { return m_auxDatabaseUsername; }
@@ -151,6 +152,9 @@ private:
 	//Connection timeout (seconds)
 	const unsigned int m_timeout;
 
+    //Recovery time (seconds)
+    const unsigned int m_recoveryTime;
+
 	//Auxiliary database host
 	const std::string m_auxDatabaseHost;
 
diff --git a/src/DataImporter.cpp b/src/DataImporter.cpp
index 21221bd8c42f74a349b724a0d99e30939f7e347d..36fe2e5d799cfdbd95585b420a9023b06cd3a8af 100644
--- a/src/DataImporter.cpp
+++ b/src/DataImporter.cpp
@@ -216,6 +216,7 @@ void DataImporter::get_device_property()
 	dev_prop.push_back(Tango::DbDatum("DatabaseTable"));
 	dev_prop.push_back(Tango::DbDatum("RefreshTime"));
 	dev_prop.push_back(Tango::DbDatum("Timeout"));
+	dev_prop.push_back(Tango::DbDatum("RecoveryTime"));
 	dev_prop.push_back(Tango::DbDatum("AutoStart"));
 	dev_prop.push_back(Tango::DbDatum("AuxDatabaseHost"));
 	dev_prop.push_back(Tango::DbDatum("AuxDatabasePort"));
@@ -403,6 +404,17 @@ void DataImporter::get_device_property()
 		//	And try to extract Timeout value from database
 		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  timeout;
 
+		//	Try to initialize RecoveryTime from class property
+		cl_prop = ds_class->get_class_property(dev_prop[++i].name);
+		if (cl_prop.is_empty()==false)	cl_prop  >>  recoveryTime;
+		else {
+			//	Try to initialize RecoveryTime from default device value
+			def_prop = ds_class->get_default_device_property(dev_prop[i].name);
+			if (def_prop.is_empty()==false)	def_prop  >>  recoveryTime;
+		}
+		//	And try to extract RecoveryTime value from database
+		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  recoveryTime;
+
 		//	Try to initialize AutoStart from class property
 		cl_prop = ds_class->get_class_property(dev_prop[++i].name);
 		if (cl_prop.is_empty()==false)	cl_prop  >>  autoStart;
@@ -546,6 +558,9 @@ void DataImporter::get_device_property()
         if(timeout<1 || timeout>MAX_TIMEOUT)
             throw(invalid_argument("Timeout property out of range or not defined"));
 
+        if(recoveryTime<1 || recoveryTime>MAX_RECOVERY_TIME)
+            throw(invalid_argument("RecoveryTime property out of range or not defined"));
+
         if(auxDatabaseHost.empty())
                 throw(invalid_argument("AuxDatabaseHost property is empty or not defined"));
 
@@ -570,9 +585,9 @@ void DataImporter::get_device_property()
         m_configuration_sp = Configuration::create(certificateFile, storagePath,
             remoteHost, remotePort, remoteUsername, remotePassword, databaseHost,
             databasePort, databaseUsername, databasePassword, databaseSchema,
-            databaseTable, refreshTime, timeout, auxDatabaseHost, auxDatabasePort,
-            auxDatabaseUsername, auxDatabasePassword, auxDatabaseSchema,
-            auxDatabaseTimestampTable, auxDatabaseFailedTable);
+            databaseTable, refreshTime, timeout, recoveryTime, auxDatabaseHost,
+            auxDatabasePort, auxDatabaseUsername, auxDatabasePassword,
+            auxDatabaseSchema, auxDatabaseTimestampTable, auxDatabaseFailedTable);
     }
     catch(invalid_argument& ex)
     {
@@ -593,7 +608,7 @@ void DataImporter::get_device_property()
 //--------------------------------------------------------
 void DataImporter::always_executed_hook()
 {
-	DEBUG_STREAM << "DataImporter::always_executed_hook()  " << device_name << endl;
+	INFO_STREAM << "DataImporter::always_executed_hook()  " << device_name << endl;
 	/*----- PROTECTED REGION ID(DataImporter::always_executed_hook) ENABLED START -----*/
 
     if(get_state() != Tango::FAULT)
diff --git a/src/DataImporter.h b/src/DataImporter.h
index d5b43a8929b9e1c3ad4bf0ac63293d34a9e8d488..08ac019b26d5ae1e077910631431684a8935f6ea 100644
--- a/src/DataImporter.h
+++ b/src/DataImporter.h
@@ -48,7 +48,7 @@
 
 /**
  *  DataImporter class description:
- *    
+ *
  */
 
 namespace DataImporter_ns
@@ -82,6 +82,8 @@ class DataImporter : public TANGO_BASE_CLASS
     //Max time between remote server request and response
     static const unsigned int MAX_TIMEOUT = 60;
 
+    //Time between failed download attempt
+    static const unsigned int MAX_RECOVERY_TIME = 86400;
 
 /*----- PROTECTED REGION END -----*/	//	DataImporter::Data Members
 
@@ -113,10 +115,12 @@ public:
 	string	databaseSchema;
 	//	DatabaseTable:	Metadata local database table
 	string	databaseTable;
-	//	RefreshTime:	Remote database request period (seconds)
+	//	RefreshTime:	Local database request period (seconds)
 	Tango::DevULong	refreshTime;
 	//	Timeout:	Connection timeout (seconds)
 	Tango::DevULong	timeout;
+	//	RecoveryTime:	Time between failed file download attempt
+	Tango::DevULong	recoveryTime;
 	//	AutoStart:	Exec On command after init if state is not fault
 	Tango::DevBoolean	autoStart;
 	//	AuxDatabaseHost:	File transfer auxiliary database host
@@ -161,7 +165,7 @@ public:
 	DataImporter(Tango::DeviceClass *cl,const char *s,const char *d);
 	/**
 	 * The device object destructor.
-	 */	
+	 */
 	~DataImporter() {delete_device();};
 
 
diff --git a/src/DataImporter.xmi b/src/DataImporter.xmi
index 35f3d883379170ee666656984262ec3c79f3c490..cac1f4322df4bc9910ba1faaf824e78fcc3802bb 100644
--- a/src/DataImporter.xmi
+++ b/src/DataImporter.xmi
@@ -93,7 +93,7 @@
       <type xsi:type="pogoDsl:StringType"/>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
     </deviceProperties>
-    <deviceProperties name="RefreshTime" description="Remote database request period (seconds)">
+    <deviceProperties name="RefreshTime" description="Local database request period (seconds)">
       <type xsi:type="pogoDsl:UIntType"/>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <DefaultPropValue>10</DefaultPropValue>
@@ -103,6 +103,11 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <DefaultPropValue>60</DefaultPropValue>
     </deviceProperties>
+    <deviceProperties name="RecoveryTime" description="Time between failed file download attempt">
+      <type xsi:type="pogoDsl:UIntType"/>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <DefaultPropValue>60</DefaultPropValue>
+    </deviceProperties>
     <deviceProperties name="AutoStart" description="Exec On command after init if state is not fault">
       <type xsi:type="pogoDsl:BooleanType"/>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
diff --git a/src/DataImporterClass.cpp b/src/DataImporterClass.cpp
index 5169cdc6fbb12337983057cf59221307d6b2bf39..b34f8fe14386ecb7eda304683e8aebf565d94f57 100644
--- a/src/DataImporterClass.cpp
+++ b/src/DataImporterClass.cpp
@@ -131,8 +131,8 @@ DataImporterClass *DataImporterClass::init(const char *name)
 		catch (bad_alloc &)
 		{
 			throw;
-		}		
-	}		
+		}
+	}
 	return _instance;
 }
 
@@ -266,7 +266,7 @@ void DataImporterClass::get_class_property()
 	cl_prop.push_back(Tango::DbDatum("AuxDatabaseSchema"));
 	cl_prop.push_back(Tango::DbDatum("AuxDatabaseTimestampTable"));
 	cl_prop.push_back(Tango::DbDatum("AuxDatabaseFailedTable"));
-	
+
 	//	Call database and extract values
 	if (Tango::Util::instance()->_UseDb==true)
 		get_db_class()->get_property(cl_prop);
@@ -695,7 +695,7 @@ void DataImporterClass::set_default_property()
 	else
 		add_wiz_dev_prop(prop_name, prop_desc);
 	prop_name = "RefreshTime";
-	prop_desc = "Remote database request period (seconds)";
+	prop_desc = "Local database request period (seconds)";
 	prop_def  = "10";
 	vect_data.clear();
 	vect_data.push_back("10");
@@ -720,6 +720,20 @@ void DataImporterClass::set_default_property()
 		dev_def_prop.push_back(data);
 		add_wiz_dev_prop(prop_name, prop_desc,  prop_def);
 	}
+	else
+		add_wiz_dev_prop(prop_name, prop_desc);
+	prop_name = "RecoveryTime";
+	prop_desc = "Time between failed file download attempt";
+	prop_def  = "60";
+	vect_data.clear();
+	vect_data.push_back("60");
+	if (prop_def.length()>0)
+	{
+		Tango::DbDatum	data(prop_name);
+		data << vect_data ;
+		dev_def_prop.push_back(data);
+		add_wiz_dev_prop(prop_name, prop_desc,  prop_def);
+	}
 	else
 		add_wiz_dev_prop(prop_name, prop_desc);
 	prop_name = "AutoStart";
@@ -899,7 +913,7 @@ void DataImporterClass::write_class_property()
 				header = "$HeadURL: ";
 				start = header.length();
 				string	strloc = src_path.substr(start, (end-start));
-				
+
 				Tango::DbDatum	svn_loc("svn_location");
 				svn_loc << strloc;
 				data.push_back(svn_loc);
@@ -908,13 +922,13 @@ void DataImporterClass::write_class_property()
 	}
 
 	//	Get CVS or SVN revision tag
-	
+
 	// CVS tag
 	string	tagname(TagName);
 	header = "$Name: ";
 	start = header.length();
 	string	endstr(" $");
-	
+
 	end   = tagname.find(endstr);
 	if (end!=string::npos && end>start)
 	{
@@ -923,17 +937,17 @@ void DataImporterClass::write_class_property()
 		cvs_tag << strtag;
 		data.push_back(cvs_tag);
 	}
-	
+
 	// SVN tag
 	string	svnpath(SvnPath);
 	header = "$HeadURL: ";
 	start = header.length();
-	
+
 	end   = svnpath.find(endstr);
 	if (end!=string::npos && end>start)
 	{
 		string	strloc = svnpath.substr(start, end-start);
-		
+
 		string tagstr ("/tags/");
 		start = strloc.find(tagstr);
 		if ( start!=string::npos )
@@ -941,7 +955,7 @@ void DataImporterClass::write_class_property()
 			start = start + tagstr.length();
 			end   = strloc.find(filename);
 			string	strtag = strloc.substr(start, end-start-1);
-			
+
 			Tango::DbDatum	svn_tag("svn_tag");
 			svn_tag << strtag;
 			data.push_back(svn_tag);
@@ -991,7 +1005,7 @@ void DataImporterClass::device_factory(const Tango::DevVarStringArray *devlist_p
 	for (unsigned long i=0 ; i<devlist_ptr->length() ; i++)
 	{
 		cout4 << "Device name : " << (*devlist_ptr)[i].in() << endl;
-		device_list.push_back(new DataImporter(this, (*devlist_ptr)[i]));							 
+		device_list.push_back(new DataImporter(this, (*devlist_ptr)[i]));
 	}
 
 	//	Manage dynamic attributes if any
@@ -1089,7 +1103,7 @@ void DataImporterClass::command_factory()
  * method : 		DataImporterClass::create_static_attribute_list
  * description : 	Create the a list of static attributes
  *
- * @param	att_list	the ceated attribute list 
+ * @param	att_list	the ceated attribute list
  */
 //--------------------------------------------------------
 void DataImporterClass::create_static_attribute_list(vector<Tango::Attr *> &att_list)
@@ -1123,10 +1137,10 @@ void DataImporterClass::erase_dynamic_attributes(const Tango::DevVarStringArray
 	Tango::Util *tg = Tango::Util::instance();
 
 	for (unsigned long i=0 ; i<devlist_ptr->length() ; i++)
-	{	
+	{
 		Tango::DeviceImpl *dev_impl = tg->get_device_by_name(((string)(*devlist_ptr)[i]).c_str());
 		DataImporter *dev = static_cast<DataImporter *> (dev_impl);
-		
+
 		vector<Tango::Attribute *> &dev_att_list = dev->get_device_attr()->get_attribute_list();
 		vector<Tango::Attribute *>::iterator ite_att;
 		for (ite_att=dev_att_list.begin() ; ite_att != dev_att_list.end() ; ++ite_att)