diff --git a/src/Configuration.h b/src/Configuration.h
index ce24ab655917b9c679f65ea1f3d5e4c102f97bc3..81de313bc8ee967434492120516eb91ad06d7e51 100644
--- a/src/Configuration.h
+++ b/src/Configuration.h
@@ -19,9 +19,6 @@ private:
 //	[Private] Constructor destructor deleter
 //------------------------------------------------------------------------------
 	Configuration(std::string certificateFile, std::string storagePath,
-        std::string dIDBHost, unsigned int dIDBPort, std::string dIDBUser,
-        std::string dIDBPassword, std::string dIDBSchema,
-        std::string dIDBIndexTable, std::string dIDBRejectedTable,
         std::string remoteHost, unsigned int remotePort,
         std::string remoteUsername, std::string remotePassword,
         std::string databaseHost, unsigned int databasePort,
@@ -29,9 +26,6 @@ private:
         std::string databaseSchema, std::string databaseTable,
         unsigned int refreshTime, unsigned int timeout) :
         m_certificateFile (certificateFile), m_storagePath(storagePath),
-        m_dIDBHost(dIDBHost), m_dIDBPort(dIDBPort), m_dIDBUser(dIDBUser),
-        m_dIDBPassword(dIDBPassword), m_dIDBSchema(dIDBSchema),
-        m_dIDBIndexTable(dIDBIndexTable), m_dIDBRejectedTable(dIDBRejectedTable),
         m_remoteHost(remoteHost), m_remotePort(remotePort),
         m_remoteUsername(remoteUsername), m_remotePassword(remotePassword),
         m_databaseHost(databaseHost), m_databasePort(databasePort),
@@ -54,10 +48,7 @@ public:
 //	[Public] Create class method
 //------------------------------------------------------------------------------
 	static Configuration::SP create(std::string certificateFile,
-        std::string storagePath, std::string dIDBHost, unsigned int dIDBPort,
-        std::string dIDBUser, std::string dIDBPassword, std::string dIDBSchema,
-        std::string dIDBIndexTable, std::string dIDBRejectedTable,
-        std::string remoteHost, unsigned int remotePort,
+        std::string storagePath, std::string remoteHost, unsigned int remotePort,
         std::string remoteUsername, std::string remotePassword,
         std::string databaseHost, unsigned int databasePort,
         std::string databaseUsername, std::string databasePassword,
@@ -65,11 +56,9 @@ public:
         unsigned int refreshTime, unsigned int timeout)
 	{
 		Configuration::SP c_sp(new Configuration(certificateFile, storagePath,
-            dIDBHost, dIDBPort, dIDBUser, dIDBPassword, dIDBSchema,
-            dIDBIndexTable, dIDBRejectedTable, remoteHost, remotePort,
-            remoteUsername, remotePassword, databaseHost, databasePort,
-            databaseUsername, databasePassword, databaseSchema, databaseTable,
-            refreshTime, timeout), Configuration::Deleter());
+            remoteHost, remotePort, remoteUsername, remotePassword, databaseHost,
+            databasePort, databaseUsername, databasePassword, databaseSchema,
+            databaseTable, refreshTime, timeout), Configuration::Deleter());
 
 		return c_sp;
 	}
@@ -79,13 +68,6 @@ public:
 //------------------------------------------------------------------------------
 	std::string	getCertificateFile() const { return m_certificateFile; }
     std::string getStoragePath() const { return m_storagePath; }
-	std::string getDIDBHost() const { return m_dIDBHost; }
-	unsigned int getDIDBPort() const { return m_dIDBPort; }
-	std::string getDIDBUser() const { return m_dIDBUser; }
-	std::string getDIDBPassword() const { return m_dIDBPassword; }
-	std::string getDIDBSchema() const { return m_dIDBSchema; }
-	std::string getDIDBIndexTable() const { return m_dIDBIndexTable; }
-	std::string getDIDBRejectedTable() const { return m_dIDBRejectedTable; }
 	std::string	getRemoteHost() const { return m_remoteHost; }
 	unsigned int getRemotePort() const { return m_remotePort; }
 	std::string	getRemoteUsername() const { return m_remoteUsername; }
@@ -109,27 +91,6 @@ private:
 	//Absolute path to storage
 	const std::string m_storagePath;
 
-	//Host where data import database is running
-	const std::string m_dIDBHost;
-
-	//Port where data import database is listening
-	const unsigned int m_dIDBPort;
-
-	//User to login in data import database
-	const std::string m_dIDBUser;
-
-	//Password to login in data import database
-	const std::string m_dIDBPassword;
-
-	//Schema where data import tables are located
-	const std::string m_dIDBSchema;
-
-	//Index table name
-	const std::string m_dIDBIndexTable;
-
-	//Rejected table name
-	const std::string m_dIDBRejectedTable;
-
     //Metadata exporter remote host
 	const std::string	m_remoteHost;
 
diff --git a/src/DBManager.cpp b/src/DBManager.cpp
index e37a39d12e982e07bbbef870288d3c379c2cce4c..10dfce71a75ea88b3d563c62729e9ea12a1898e0 100644
--- a/src/DBManager.cpp
+++ b/src/DBManager.cpp
@@ -54,7 +54,7 @@ void DBManager::connect() throw(soci::soci_error)
 {
     DEBUG_STREAM << "DBManager::connect()" << endl;
 
-    boost::mutex::scoped_lock lock(m_connectionMutex);
+    boost::mutex::scoped_lock lock(m_sessionMutex);
 
     std::stringstream connection;
 
@@ -77,7 +77,7 @@ void DBManager::disconnect()
 {
     DEBUG_STREAM << "DBManager::disconnect()" << endl;
 
-    boost::mutex::scoped_lock lock(m_connectionMutex);
+    boost::mutex::scoped_lock lock(m_sessionMutex);
 
     m_session_sp->close();
 }
@@ -85,65 +85,99 @@ void DBManager::disconnect()
 //==============================================================================
 //      DBManager::retrieveLastTimestamp()
 //==============================================================================
-std::tm DBManager::retrieveLastTimestamp() throw(soci::soci_error)
+std::tm DBManager::retrieveLastTimestamp()
+    throw(std::runtime_error, std::out_of_range)
 {
     DEBUG_STREAM << "DBManager::retrieveLastTimestamp()" << endl;
 
-    boost::mutex::scoped_lock lock(m_connectionMutex);
-
-//    if(m_auxSession_sp->get_backend() == NULL)
-//        m_auxSession_sp->reconnect();
-//
-//    std::tm lastTimestamp;
-//
-//    *m_auxSession_sp << "select coalesce(max(update_time),'1970-01-01 00:00:00') "
-//        << "from " << m_configuration_sp->getDIDBSchema() << "."
-//        << m_configuration_sp->getDIDBIndexTable(), soci::into(lastTimestamp);
-//
-//    return lastTimestamp;
+    boost::mutex::scoped_lock lock(m_tangoDBMutex);
+
+    Tango::DbData db_data;
+    db_data.push_back(Tango::DbDatum("LastTimestamp"));
+
+    try
+    {
+        m_tangoDB_sp->get_device_property(m_deviceName, db_data);
+    }
+    catch(Tango::DevFailed& ex)
+    {
+        std::stringstream error_msg;
+        for (unsigned int i=0; i<ex.errors.length(); i++)
+        {
+                error_msg << ex.errors[i].reason.in() << endl;
+                error_msg << ex.errors[i].desc.in() << endl;
+                error_msg << ex.errors[i].origin.in() << endl;
+        }
+        throw std::runtime_error(error_msg.str());
+    }
+
+    std::string timestamp("1970-01-01 00:00:00");
+    db_data[0] >> timestamp;
+
+    boost::posix_time::ptime ptime = boost::posix_time::time_from_string(timestamp);
+
+    return boost::posix_time::to_tm(ptime);
 }
 
 //==============================================================================
 //      DBManager::persistLastTimestamp()
 //==============================================================================
-void DBManager::persistLastTimestamp(std::tm lastTimestamp) throw(soci::soci_error)
+void DBManager::persistLastTimestamp(std::tm lastTimestamp)
+    throw(std::runtime_error, std::out_of_range)
 {
     DEBUG_STREAM << "DBManager::persistLastTimestamp()" << endl;
 
-    boost::mutex::scoped_lock lock(m_connectionMutex);
-
-//    if(m_auxSession_sp->get_backend() == NULL)
-//        m_auxSession_sp->reconnect();
-//
-//    *m_auxSession_sp << "insert into " << m_configuration_sp->getDIDBSchema()
-//        << "." << m_configuration_sp->getDIDBIndexTable()
-//        << " values(:lastTimestamp)", soci::use(lastTimestamp, "lastTimestamp");
+    boost::mutex::scoped_lock lock(m_tangoDBMutex);
+
+    boost::posix_time::ptime ptime = boost::posix_time::ptime_from_tm(lastTimestamp);
+
+    std::string timestampString = boost::posix_time::to_simple_string(ptime);
+
+    Tango::DbDatum timestamp("LastTimestamp");
+    timestamp << timestampString;
+
+    Tango::DbData db_data;
+    db_data.push_back(timestamp);
+
+    try
+    {
+        m_tangoDB_sp->put_device_property(m_deviceName, db_data);
+    }
+    catch(Tango::DevFailed& ex)
+    {
+        std::stringstream error_msg;
+        for (unsigned int i=0; i<ex.errors.length(); i++)
+        {
+                error_msg << ex.errors[i].reason.in() << endl;
+                error_msg << ex.errors[i].desc.in() << endl;
+                error_msg << ex.errors[i].origin.in() << endl;
+        }
+        throw std::runtime_error(error_msg.str());
+    }
 }
 
 //==============================================================================
 //      DBManager::retrieveNewTuples()
 //==============================================================================
-DBManager::RowsetSP DBManager::retrieveNewTuples(std::tm lastTimestamp)
-    throw(soci::soci_error, std::out_of_range)
+DBManager::FileRowsetSP DBManager::retrieveNewTuples(std::string schema,
+    std::string table, std::tm lastTimestamp) throw(soci::soci_error,
+    std::out_of_range)
 {
     DEBUG_STREAM << "DBManager::retrieveNewTuples()" << endl;
 
-    boost::mutex::scoped_lock lock(m_connectionMutex);
+    boost::mutex::scoped_lock lock(m_sessionMutex);
 
     if(m_session_sp->get_backend() == NULL)
         m_session_sp->reconnect();
 
     boost::posix_time::ptime timestamp = boost::posix_time::ptime_from_tm(lastTimestamp);
 
-//    RowsetSP rows(new soci::rowset<soci::row>(m_mainSession_sp->prepare
-//        << "select id, file_path, file_version, file_name, update_time from "
-//        << m_configuration_sp->getDatabaseSchema() << "."
-//        << m_configuration_sp->getDatabaseTable()
-//        << " where update_time>'"
-//        << boost::posix_time::to_iso_string(timestamp)
-//        << "' order by update_time asc"));
+    FileRowsetSP fileRowset_sp(new FileRowset(m_session_sp->prepare << "select"
+        << " file_version, file_name, update_time from " << schema << "." << table
+        << " where update_time>'" << boost::posix_time::to_iso_string(timestamp)
+        << "' order by update_time asc"));
 
-    //return rows;
+    return fileRowset_sp;
 }
 
 //==============================================================================
diff --git a/src/DBManager.h b/src/DBManager.h
index 13ebf4614014ad30fd19021fab748dbb317a724d..d24fdd16f44dcaed7b9c5b8cec59dd34e85741dd 100644
--- a/src/DBManager.h
+++ b/src/DBManager.h
@@ -70,38 +70,46 @@ public:
 //------------------------------------------------------------------------------
 //  [Public] Timestamp methods
 //------------------------------------------------------------------------------
-    virtual std::tm retrieveLastTimestamp() throw(soci::soci_error);
+    virtual std::tm retrieveLastTimestamp()
+        throw(std::runtime_error, std::out_of_range);
 
-    virtual void persistLastTimestamp(std::tm) throw(soci::soci_error);
+    virtual void persistLastTimestamp(std::tm)
+        throw(std::runtime_error, std::out_of_range);
 
 //------------------------------------------------------------------------------
 //  [Public] Tuple methods
 //------------------------------------------------------------------------------
-    typedef boost::shared_ptr< boost::tuple< boost::optional<int>,
-        boost::optional<std::string>, boost::optional<std::string>,
-        boost::optional<int>, boost::optional<std::string>,
-        boost::optional<std::tm> > > RowsetSP;
+    typedef boost::tuple< boost::optional<int>, boost::optional<std::string>,
+        boost::optional<std::tm> > FileRow;
 
-    virtual RowsetSP retrieveNewTuples(std::tm)
+    typedef soci::rowset< FileRow > FileRowset;
+
+    typedef boost::shared_ptr< FileRowset > FileRowsetSP;
+
+    virtual FileRowsetSP retrieveNewTuples(std::string, std::string, std::tm)
         throw(soci::soci_error, std::out_of_range);
 
 protected:
 //------------------------------------------------------------------------------
 //  [Protected] Class variables
 //------------------------------------------------------------------------------
-    //Device name
-    std::string m_deviceName;
-
     //Configuration shared pointer
     Configuration::SP m_configuration_sp;
 
-    //Connection mutex
-    boost::mutex m_connectionMutex;
+    //Metadata database connection mutex
+    boost::mutex m_sessionMutex;
 
     //Metadata database connection scoped pointer
     boost::scoped_ptr<soci::session> m_session_sp;
 
+    //Tango database connection mutex
+    boost::mutex m_tangoDBMutex;
+
+    //Tango database connection scoped pointer
     boost::scoped_ptr<Tango::Database> m_tangoDB_sp;
+
+    //Device name
+    std::string m_deviceName;
 };
 
 }   //End of namespace
diff --git a/src/DataImporter.cpp b/src/DataImporter.cpp
index 951bfe02d3adea712aa059004ed470416053136b..af3eac1b14d91c135c1a25861437eb15744357b4 100644
--- a/src/DataImporter.cpp
+++ b/src/DataImporter.cpp
@@ -203,13 +203,6 @@ void DataImporter::get_device_property()
 	Tango::DbData	dev_prop;
 	dev_prop.push_back(Tango::DbDatum("CertificateFile"));
 	dev_prop.push_back(Tango::DbDatum("StoragePath"));
-	dev_prop.push_back(Tango::DbDatum("DIDBHost"));
-	dev_prop.push_back(Tango::DbDatum("DIDBPort"));
-	dev_prop.push_back(Tango::DbDatum("DIDBUser"));
-	dev_prop.push_back(Tango::DbDatum("DIDBPassword"));
-	dev_prop.push_back(Tango::DbDatum("DIDBSchema"));
-	dev_prop.push_back(Tango::DbDatum("DIDBIndexTable"));
-	dev_prop.push_back(Tango::DbDatum("DIDBRejectedTable"));
 	dev_prop.push_back(Tango::DbDatum("RemoteHost"));
 	dev_prop.push_back(Tango::DbDatum("RemotePort"));
 	dev_prop.push_back(Tango::DbDatum("RemoteUsername"));
@@ -260,83 +253,6 @@ void DataImporter::get_device_property()
 		//	And try to extract StoragePath value from database
 		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  storagePath;
 
-		//	Try to initialize DIDBHost from class property
-		cl_prop = ds_class->get_class_property(dev_prop[++i].name);
-		if (cl_prop.is_empty()==false)	cl_prop  >>  dIDBHost;
-		else {
-			//	Try to initialize DIDBHost from default device value
-			def_prop = ds_class->get_default_device_property(dev_prop[i].name);
-			if (def_prop.is_empty()==false)	def_prop  >>  dIDBHost;
-		}
-		//	And try to extract DIDBHost value from database
-		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  dIDBHost;
-
-		//	Try to initialize DIDBPort from class property
-		cl_prop = ds_class->get_class_property(dev_prop[++i].name);
-		if (cl_prop.is_empty()==false)	cl_prop  >>  dIDBPort;
-		else {
-			//	Try to initialize DIDBPort from default device value
-			def_prop = ds_class->get_default_device_property(dev_prop[i].name);
-			if (def_prop.is_empty()==false)	def_prop  >>  dIDBPort;
-		}
-		//	And try to extract DIDBPort value from database
-		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  dIDBPort;
-
-		//	Try to initialize DIDBUser from class property
-		cl_prop = ds_class->get_class_property(dev_prop[++i].name);
-		if (cl_prop.is_empty()==false)	cl_prop  >>  dIDBUser;
-		else {
-			//	Try to initialize DIDBUser from default device value
-			def_prop = ds_class->get_default_device_property(dev_prop[i].name);
-			if (def_prop.is_empty()==false)	def_prop  >>  dIDBUser;
-		}
-		//	And try to extract DIDBUser value from database
-		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  dIDBUser;
-
-		//	Try to initialize DIDBPassword from class property
-		cl_prop = ds_class->get_class_property(dev_prop[++i].name);
-		if (cl_prop.is_empty()==false)	cl_prop  >>  dIDBPassword;
-		else {
-			//	Try to initialize DIDBPassword from default device value
-			def_prop = ds_class->get_default_device_property(dev_prop[i].name);
-			if (def_prop.is_empty()==false)	def_prop  >>  dIDBPassword;
-		}
-		//	And try to extract DIDBPassword value from database
-		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  dIDBPassword;
-
-		//	Try to initialize DIDBSchema from class property
-		cl_prop = ds_class->get_class_property(dev_prop[++i].name);
-		if (cl_prop.is_empty()==false)	cl_prop  >>  dIDBSchema;
-		else {
-			//	Try to initialize DIDBSchema from default device value
-			def_prop = ds_class->get_default_device_property(dev_prop[i].name);
-			if (def_prop.is_empty()==false)	def_prop  >>  dIDBSchema;
-		}
-		//	And try to extract DIDBSchema value from database
-		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  dIDBSchema;
-
-		//	Try to initialize DIDBIndexTable from class property
-		cl_prop = ds_class->get_class_property(dev_prop[++i].name);
-		if (cl_prop.is_empty()==false)	cl_prop  >>  dIDBIndexTable;
-		else {
-			//	Try to initialize DIDBIndexTable from default device value
-			def_prop = ds_class->get_default_device_property(dev_prop[i].name);
-			if (def_prop.is_empty()==false)	def_prop  >>  dIDBIndexTable;
-		}
-		//	And try to extract DIDBIndexTable value from database
-		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  dIDBIndexTable;
-
-		//	Try to initialize DIDBRejectedTable from class property
-		cl_prop = ds_class->get_class_property(dev_prop[++i].name);
-		if (cl_prop.is_empty()==false)	cl_prop  >>  dIDBRejectedTable;
-		else {
-			//	Try to initialize DIDBRejectedTable from default device value
-			def_prop = ds_class->get_default_device_property(dev_prop[i].name);
-			if (def_prop.is_empty()==false)	def_prop  >>  dIDBRejectedTable;
-		}
-		//	And try to extract DIDBRejectedTable value from database
-		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  dIDBRejectedTable;
-
 		//	Try to initialize RemoteHost from class property
 		cl_prop = ds_class->get_class_property(dev_prop[++i].name);
 		if (cl_prop.is_empty()==false)	cl_prop  >>  remoteHost;
@@ -510,27 +426,6 @@ void DataImporter::get_device_property()
 
         checkIfDirectoryExists(storagePath);
 
-        if(dIDBHost.empty())
-            throw(invalid_argument("DIDBHost property is empty or not defined"));
-
-        if(dIDBPort<1 || dIDBPort>MAX_PORT_NUMBER)
-            throw(invalid_argument("DIDBPort property out of range or not defined"));
-
-        if(dIDBUser.empty())
-            throw(invalid_argument("DIDBUser property is empty or not defined"));
-
-        if(dIDBPassword.empty())
-            throw(invalid_argument("DIDBPassword property is empty or not defined"));
-
-        if(dIDBSchema.empty())
-            throw(invalid_argument("DIDBSchema property is empty or not defined"));
-
-        if(dIDBIndexTable.empty())
-            throw(invalid_argument("DIDBIndexTable property is empty or not defined"));
-
-        if(dIDBRejectedTable.empty())
-            throw(invalid_argument("DIDBRejectedTable property is empty or not defined"));
-
         if(remoteHost.empty())
             throw(invalid_argument("RemoteHost property is empty or not defined"));
 
@@ -568,10 +463,9 @@ void DataImporter::get_device_property()
             throw(invalid_argument("Timeout property out of range or not defined"));
 
         m_configuration_sp = Configuration::create(certificateFile, storagePath,
-            dIDBHost, dIDBPort, dIDBUser, dIDBPassword, dIDBSchema, dIDBIndexTable,
-            dIDBRejectedTable, remoteHost, remotePort, remoteUsername, remotePassword,
-            databaseHost, databasePort, databaseUsername, databasePassword,
-            databaseSchema, databaseTable, refreshTime, timeout);
+            remoteHost, remotePort, remoteUsername, remotePassword, databaseHost,
+            databasePort, databaseUsername, databasePassword, databaseSchema,
+            databaseTable, refreshTime, timeout);
     }
     catch(invalid_argument& ex)
     {
diff --git a/src/DataImporter.h b/src/DataImporter.h
index a1a87d7089b0f9dc715bd856a385546b8221f965..8de61901b6e65278f2fd5c3cf9321f8ec0fedb2e 100644
--- a/src/DataImporter.h
+++ b/src/DataImporter.h
@@ -91,20 +91,6 @@ public:
 	string	certificateFile;
 	//	StoragePath:	Absolute path to storage
 	string	storagePath;
-	//	DIDBHost:	Hostname where data import database is running
-	string	dIDBHost;
-	//	DIDBPort:	Port where data import database is listening
-	Tango::DevULong	dIDBPort;
-	//	DIDBUser:	User to login in data import database
-	string	dIDBUser;
-	//	DIDBPassword:	Password to login in data import database
-	string	dIDBPassword;
-	//	DIDBSchema:	Schema where data import tables are located
-	string	dIDBSchema;
-	//	DIDBIndexTable:	Index table name
-	string	dIDBIndexTable;
-	//	DIDBRejectedTable:	Rejected table name
-	string	dIDBRejectedTable;
 	//	RemoteHost:	Metadata exporter remote host
 	string	remoteHost;
 	//	RemotePort:	Metadata exporter remote port
diff --git a/src/DataImporter.xmi b/src/DataImporter.xmi
index 6be7cbe62af9256539b746ef6812821dfbe40064..3f0509830b1426d40dfd0c4418d3eb2a9113238e 100644
--- a/src/DataImporter.xmi
+++ b/src/DataImporter.xmi
@@ -13,34 +13,6 @@
       <type xsi:type="pogoDsl:StringType"/>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
     </classProperties>
-    <classProperties name="DIDBHost" description="Hostname where data import database is running">
-      <type xsi:type="pogoDsl:StringType"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </classProperties>
-    <classProperties name="DIDBPort" description="Port where data import database is listening">
-      <type xsi:type="pogoDsl:UIntType"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </classProperties>
-    <classProperties name="DIDBUser" description="User to login in data import database">
-      <type xsi:type="pogoDsl:StringType"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </classProperties>
-    <classProperties name="DIDBPassword" description="Password to login in data import database">
-      <type xsi:type="pogoDsl:StringType"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </classProperties>
-    <classProperties name="DIDBSchema" description="Schema where data import tables are located">
-      <type xsi:type="pogoDsl:StringType"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </classProperties>
-    <classProperties name="DIDBIndexTable" description="Index table name">
-      <type xsi:type="pogoDsl:StringType"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </classProperties>
-    <classProperties name="DIDBRejectedTable" description="Rejected table name">
-      <type xsi:type="pogoDsl:StringType"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </classProperties>
     <deviceProperties name="CertificateFile" description="Absolute path to certificate chain file">
       <type xsi:type="pogoDsl:StringType"/>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
@@ -49,34 +21,6 @@
       <type xsi:type="pogoDsl:StringType"/>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
     </deviceProperties>
-    <deviceProperties name="DIDBHost" description="Hostname where data import database is running">
-      <type xsi:type="pogoDsl:StringType"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </deviceProperties>
-    <deviceProperties name="DIDBPort" description="Port where data import database is listening">
-      <type xsi:type="pogoDsl:UIntType"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </deviceProperties>
-    <deviceProperties name="DIDBUser" description="User to login in data import database">
-      <type xsi:type="pogoDsl:StringType"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </deviceProperties>
-    <deviceProperties name="DIDBPassword" description="Password to login in data import database">
-      <type xsi:type="pogoDsl:StringType"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </deviceProperties>
-    <deviceProperties name="DIDBSchema" description="Schema where data import tables are located">
-      <type xsi:type="pogoDsl:StringType"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </deviceProperties>
-    <deviceProperties name="DIDBIndexTable" description="Index table name">
-      <type xsi:type="pogoDsl:StringType"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </deviceProperties>
-    <deviceProperties name="DIDBRejectedTable" description="Rejected table name">
-      <type xsi:type="pogoDsl:StringType"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </deviceProperties>
     <deviceProperties name="RemoteHost" description="Metadata exporter remote host">
       <type xsi:type="pogoDsl:StringType"/>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
diff --git a/src/DataImporterClass.cpp b/src/DataImporterClass.cpp
index 5ce7879c53917deb5b435be663610643e464f230..9c359a60796cb11925b2ae7ea9d8a56b83e452e9 100644
--- a/src/DataImporterClass.cpp
+++ b/src/DataImporterClass.cpp
@@ -259,13 +259,6 @@ void DataImporterClass::get_class_property()
 	//	Read class properties from database.
 	cl_prop.push_back(Tango::DbDatum("CertificateFile"));
 	cl_prop.push_back(Tango::DbDatum("StoragePath"));
-	cl_prop.push_back(Tango::DbDatum("DIDBHost"));
-	cl_prop.push_back(Tango::DbDatum("DIDBPort"));
-	cl_prop.push_back(Tango::DbDatum("DIDBUser"));
-	cl_prop.push_back(Tango::DbDatum("DIDBPassword"));
-	cl_prop.push_back(Tango::DbDatum("DIDBSchema"));
-	cl_prop.push_back(Tango::DbDatum("DIDBIndexTable"));
-	cl_prop.push_back(Tango::DbDatum("DIDBRejectedTable"));
 	
 	//	Call database and extract values
 	if (Tango::Util::instance()->_UseDb==true)
@@ -297,90 +290,6 @@ void DataImporterClass::get_class_property()
 			cl_prop[i]  <<  storagePath;
 		}
 	}
-	//	Try to extract DIDBHost value
-	if (cl_prop[++i].is_empty()==false)	cl_prop[i]  >>  dIDBHost;
-	else
-	{
-		//	Check default value for DIDBHost
-		def_prop = get_default_class_property(cl_prop[i].name);
-		if (def_prop.is_empty()==false)
-		{
-			def_prop    >>  dIDBHost;
-			cl_prop[i]  <<  dIDBHost;
-		}
-	}
-	//	Try to extract DIDBPort value
-	if (cl_prop[++i].is_empty()==false)	cl_prop[i]  >>  dIDBPort;
-	else
-	{
-		//	Check default value for DIDBPort
-		def_prop = get_default_class_property(cl_prop[i].name);
-		if (def_prop.is_empty()==false)
-		{
-			def_prop    >>  dIDBPort;
-			cl_prop[i]  <<  dIDBPort;
-		}
-	}
-	//	Try to extract DIDBUser value
-	if (cl_prop[++i].is_empty()==false)	cl_prop[i]  >>  dIDBUser;
-	else
-	{
-		//	Check default value for DIDBUser
-		def_prop = get_default_class_property(cl_prop[i].name);
-		if (def_prop.is_empty()==false)
-		{
-			def_prop    >>  dIDBUser;
-			cl_prop[i]  <<  dIDBUser;
-		}
-	}
-	//	Try to extract DIDBPassword value
-	if (cl_prop[++i].is_empty()==false)	cl_prop[i]  >>  dIDBPassword;
-	else
-	{
-		//	Check default value for DIDBPassword
-		def_prop = get_default_class_property(cl_prop[i].name);
-		if (def_prop.is_empty()==false)
-		{
-			def_prop    >>  dIDBPassword;
-			cl_prop[i]  <<  dIDBPassword;
-		}
-	}
-	//	Try to extract DIDBSchema value
-	if (cl_prop[++i].is_empty()==false)	cl_prop[i]  >>  dIDBSchema;
-	else
-	{
-		//	Check default value for DIDBSchema
-		def_prop = get_default_class_property(cl_prop[i].name);
-		if (def_prop.is_empty()==false)
-		{
-			def_prop    >>  dIDBSchema;
-			cl_prop[i]  <<  dIDBSchema;
-		}
-	}
-	//	Try to extract DIDBIndexTable value
-	if (cl_prop[++i].is_empty()==false)	cl_prop[i]  >>  dIDBIndexTable;
-	else
-	{
-		//	Check default value for DIDBIndexTable
-		def_prop = get_default_class_property(cl_prop[i].name);
-		if (def_prop.is_empty()==false)
-		{
-			def_prop    >>  dIDBIndexTable;
-			cl_prop[i]  <<  dIDBIndexTable;
-		}
-	}
-	//	Try to extract DIDBRejectedTable value
-	if (cl_prop[++i].is_empty()==false)	cl_prop[i]  >>  dIDBRejectedTable;
-	else
-	{
-		//	Check default value for DIDBRejectedTable
-		def_prop = get_default_class_property(cl_prop[i].name);
-		if (def_prop.is_empty()==false)
-		{
-			def_prop    >>  dIDBRejectedTable;
-			cl_prop[i]  <<  dIDBRejectedTable;
-		}
-	}
 	/*----- PROTECTED REGION ID(DataImporterClass::get_class_property_after) ENABLED START -----*/
 
 	//	Check class property data members init
@@ -430,97 +339,6 @@ void DataImporterClass::set_default_property()
 		cl_def_prop.push_back(data);
 		add_wiz_class_prop(prop_name, prop_desc,  prop_def);
 	}
-	else
-		add_wiz_class_prop(prop_name, prop_desc);
-	prop_name = "DIDBHost";
-	prop_desc = "Hostname where data import database is running";
-	prop_def  = "";
-	vect_data.clear();
-	if (prop_def.length()>0)
-	{
-		Tango::DbDatum	data(prop_name);
-		data << vect_data ;
-		cl_def_prop.push_back(data);
-		add_wiz_class_prop(prop_name, prop_desc,  prop_def);
-	}
-	else
-		add_wiz_class_prop(prop_name, prop_desc);
-	prop_name = "DIDBPort";
-	prop_desc = "Port where data import database is listening";
-	prop_def  = "";
-	vect_data.clear();
-	if (prop_def.length()>0)
-	{
-		Tango::DbDatum	data(prop_name);
-		data << vect_data ;
-		cl_def_prop.push_back(data);
-		add_wiz_class_prop(prop_name, prop_desc,  prop_def);
-	}
-	else
-		add_wiz_class_prop(prop_name, prop_desc);
-	prop_name = "DIDBUser";
-	prop_desc = "User to login in data import database";
-	prop_def  = "";
-	vect_data.clear();
-	if (prop_def.length()>0)
-	{
-		Tango::DbDatum	data(prop_name);
-		data << vect_data ;
-		cl_def_prop.push_back(data);
-		add_wiz_class_prop(prop_name, prop_desc,  prop_def);
-	}
-	else
-		add_wiz_class_prop(prop_name, prop_desc);
-	prop_name = "DIDBPassword";
-	prop_desc = "Password to login in data import database";
-	prop_def  = "";
-	vect_data.clear();
-	if (prop_def.length()>0)
-	{
-		Tango::DbDatum	data(prop_name);
-		data << vect_data ;
-		cl_def_prop.push_back(data);
-		add_wiz_class_prop(prop_name, prop_desc,  prop_def);
-	}
-	else
-		add_wiz_class_prop(prop_name, prop_desc);
-	prop_name = "DIDBSchema";
-	prop_desc = "Schema where data import tables are located";
-	prop_def  = "";
-	vect_data.clear();
-	if (prop_def.length()>0)
-	{
-		Tango::DbDatum	data(prop_name);
-		data << vect_data ;
-		cl_def_prop.push_back(data);
-		add_wiz_class_prop(prop_name, prop_desc,  prop_def);
-	}
-	else
-		add_wiz_class_prop(prop_name, prop_desc);
-	prop_name = "DIDBIndexTable";
-	prop_desc = "Index table name";
-	prop_def  = "";
-	vect_data.clear();
-	if (prop_def.length()>0)
-	{
-		Tango::DbDatum	data(prop_name);
-		data << vect_data ;
-		cl_def_prop.push_back(data);
-		add_wiz_class_prop(prop_name, prop_desc,  prop_def);
-	}
-	else
-		add_wiz_class_prop(prop_name, prop_desc);
-	prop_name = "DIDBRejectedTable";
-	prop_desc = "Rejected table name";
-	prop_def  = "";
-	vect_data.clear();
-	if (prop_def.length()>0)
-	{
-		Tango::DbDatum	data(prop_name);
-		data << vect_data ;
-		cl_def_prop.push_back(data);
-		add_wiz_class_prop(prop_name, prop_desc,  prop_def);
-	}
 	else
 		add_wiz_class_prop(prop_name, prop_desc);
 
@@ -549,97 +367,6 @@ 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 = "DIDBHost";
-	prop_desc = "Hostname where data import database is running";
-	prop_def  = "";
-	vect_data.clear();
-	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 = "DIDBPort";
-	prop_desc = "Port where data import database is listening";
-	prop_def  = "";
-	vect_data.clear();
-	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 = "DIDBUser";
-	prop_desc = "User to login in data import database";
-	prop_def  = "";
-	vect_data.clear();
-	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 = "DIDBPassword";
-	prop_desc = "Password to login in data import database";
-	prop_def  = "";
-	vect_data.clear();
-	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 = "DIDBSchema";
-	prop_desc = "Schema where data import tables are located";
-	prop_def  = "";
-	vect_data.clear();
-	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 = "DIDBIndexTable";
-	prop_desc = "Index table name";
-	prop_def  = "";
-	vect_data.clear();
-	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 = "DIDBRejectedTable";
-	prop_desc = "Rejected table name";
-	prop_def  = "";
-	vect_data.clear();
-	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 = "RemoteHost";
diff --git a/src/DataImporterClass.h b/src/DataImporterClass.h
index ffb7fa1586cbb97a5fb446604bed3d4754c054f2..eeeebc5baafc6e9309f985aa53632d0dfe9cfdf5 100644
--- a/src/DataImporterClass.h
+++ b/src/DataImporterClass.h
@@ -127,20 +127,6 @@ class DataImporterClass : public Tango::DeviceClass
 		string	certificateFile;
 		//	StoragePath:	Absolute path to storage
 		string	storagePath;
-		//	DIDBHost:	Hostname where data import database is running
-		string	dIDBHost;
-		//	DIDBPort:	Port where data import database is listening
-		Tango::DevULong	dIDBPort;
-		//	DIDBUser:	User to login in data import database
-		string	dIDBUser;
-		//	DIDBPassword:	Password to login in data import database
-		string	dIDBPassword;
-		//	DIDBSchema:	Schema where data import tables are located
-		string	dIDBSchema;
-		//	DIDBIndexTable:	Index table name
-		string	dIDBIndexTable;
-		//	DIDBRejectedTable:	Rejected table name
-		string	dIDBRejectedTable;
 	public:
 		//	write class properties data members
 		Tango::DbData	cl_prop;
diff --git a/src/ProtocolManager.cpp b/src/ProtocolManager.cpp
index 252b138f9d7afb49c80d69c5f667f6f256eddb4b..1f501b984b816706a876d7476c6ba34993d1ee9a 100644
--- a/src/ProtocolManager.cpp
+++ b/src/ProtocolManager.cpp
@@ -16,6 +16,7 @@ ProtocolManager::ProtocolManager(Tango::DeviceImpl* deviceImpl_p,
     DEBUG_STREAM << "ProtocolManager::ProtocolManager()" << endl;
 
     m_isAuthorised = false;
+    m_isValidated = false;
     m_hasMoreData = true;
 }
 
@@ -152,12 +153,47 @@ RequestSP ProtocolManager::createAuthroisation() throw(std::runtime_error)
     return request_sp;
 }
 
+//==============================================================================
+//      ProtocolManager::createValidation()
+//==============================================================================
+RequestSP ProtocolManager::createValidation() throw(std::runtime_error)
+{
+    DEBUG_STREAM << "ProtocolManager::createValidation()" << endl;
+
+    RequestSP request_sp(new Request);
+
+    request_sp->set_type(Request::VALIDATION);
+
+    std::string schema = m_configuration_sp->getDatabaseSchema();
+    std::string table = m_configuration_sp->getDatabaseTable();
+
+    INFO_STREAM << "ProtocolManager::createValidation() Send schema "
+        << schema << " table " << table << " to " << m_remoteEndpoint << endl;
+
+    Request::Validation* validation = request_sp->mutable_validation();
+    validation->set_schema(schema);
+    validation->set_table(table);
+
+    return request_sp;
+}
+
 //==============================================================================
 //      ProtocolManager::createData()
 //==============================================================================
 RequestSP ProtocolManager::createData() throw(std::runtime_error, std::out_of_range)
 {
     DEBUG_STREAM << "ProtocolManager::createData()" << endl;
+
+    RequestSP request_sp(new Request);
+
+    request_sp->set_type(Request::DATA);
+
+    std::string schema = m_configuration_sp->getDatabaseSchema();
+    std::string table = m_configuration_sp->getDatabaseTable();
+
+
+
+    return request_sp;
 }
 
 //==============================================================================
@@ -186,6 +222,32 @@ void ProtocolManager::processAuthroisation(ResponseSP response_sp)
     }
 }
 
+//==============================================================================
+//      ProtocolManager::processValidation()
+//==============================================================================
+void ProtocolManager::processValidation(ResponseSP response_sp)
+    throw(std::runtime_error)
+{
+    DEBUG_STREAM << "ProtocolManager::processValidation()" << endl;
+
+    const Response::Validation& validation = response_sp->validation();
+
+    if(validation.state() == Response::Validation::ACCEPTED)
+    {
+        INFO_STREAM << "ProtocolManager::processValidation() State ACCEPTED "
+            << "status " << validation.status() << " from " << m_remoteEndpoint << endl;
+
+        m_isValidated = true;
+    }
+    else
+    {
+        ERROR_STREAM << "ProtocolManager::processValidation() State REJECTED "
+            << "status " << validation.status() << " from " << m_remoteEndpoint << endl;
+
+        throw std::runtime_error(validation.status());
+    }
+}
+
 //==============================================================================
 //      ProtocolManager::processData()
 //==============================================================================
diff --git a/src/ProtocolManager.h b/src/ProtocolManager.h
index 9e75c74c0c240cd787dc672ad248f31add06719b..4a8e7f437e0022cf314236f655bfdf48487025f8 100644
--- a/src/ProtocolManager.h
+++ b/src/ProtocolManager.h
@@ -79,6 +79,9 @@ protected:
     virtual RequestSP createAuthroisation()
         throw(std::runtime_error);
 
+    virtual RequestSP createValidation()
+        throw(std::runtime_error);
+
     virtual RequestSP createData()
         throw(std::runtime_error, std::out_of_range);
 
@@ -88,6 +91,9 @@ protected:
     virtual void processAuthroisation(ResponseSP)
         throw(std::runtime_error);
 
+    virtual void processValidation(ResponseSP)
+        throw(std::runtime_error);
+
     virtual void processData(ResponseSP)
         throw(std::runtime_error, std::out_of_range);
 
@@ -103,9 +109,18 @@ protected:
     //Client is authorised
     bool m_isAuthorised;
 
+    //Table is validated
+    bool m_isValidated;
+
     //Server has more data in buffer
     bool m_hasMoreData;
 
+    //Retrieved data iterator
+    DBManager::FileRowset::const_iterator m_it;
+
+    //Retrieved data shared pointer
+    DBManager::FileRowsetSP m_rowSet_sp;
+
     //Address and port of remote endpoint
     std::string m_remoteEndpoint;
 };