diff --git a/src/DBManager.cpp b/src/DBManager.cpp
index 5d4ce13234bebcb64190c81395050e9d5f12ab13..1961e412b67db8d100679fd0d47bea496c0bc352 100644
--- a/src/DBManager.cpp
+++ b/src/DBManager.cpp
@@ -114,12 +114,12 @@ DBManager::InformationList DBManager::retrieveInformation(std::string schema,
 }
 
 //==============================================================================
-//      DBManager::retrieveInformation()
+//      DBManager::retrieveNewTuples()
 //==============================================================================
-soci::rowset<soci::row> DBManager::searchNewTuples(std::string schema,
+soci::rowset<soci::row> DBManager::retrieveNewTuples(std::string schema,
     std::string table, std::tm update_time) throw(soci::soci_error)
 {
-    DEBUG_STREAM << "DBManager::searchNewTuples()" << endl;
+    DEBUG_STREAM << "DBManager::retrieveNewTuples()" << endl;
 
     soci::session session(*m_connectionPool_sp);
 
@@ -127,7 +127,11 @@ soci::rowset<soci::row> DBManager::searchNewTuples(std::string schema,
         << schema << "." << table << " where update_time>=:timestamp",
         soci::use(update_time,"timestamp"));
 
-    return rows;
+    MetadataList metadataList;
+
+    std::copy(rows.begin(), rows.end(), std::back_inserter(metadataList));
+
+    return metadataList;
 }
 
 }   //namespace
diff --git a/src/DBManager.h b/src/DBManager.h
index e1a5c4a8692e3d7431034029d474dbbb20b580df..7a4c916fa24646b0a92dd35ea62e8e6476933027 100644
--- a/src/DBManager.h
+++ b/src/DBManager.h
@@ -75,7 +75,9 @@ public:
 //------------------------------------------------------------------------------
 //  [Public] Search new tuple method
 //------------------------------------------------------------------------------
-    virtual soci::rowset<soci::row> searchNewTuples(std::string, std::string,
+    typedef std::vector<soci::row> MetadataList;
+
+    virtual MetadataList retrieveNewTuples(std::string, std::string,
         std::tm) throw(soci::soci_error);
 
 protected:
diff --git a/src/ProtocolManager.cpp b/src/ProtocolManager.cpp
index c67f34504d729fdd4cf3c44cc9985c44a6850328..b38be2fc77a4762a7dae5c6a60f3c47f5260bbfb 100644
--- a/src/ProtocolManager.cpp
+++ b/src/ProtocolManager.cpp
@@ -187,6 +187,9 @@ ResponseSP ProtocolManager::prepareValidation(RequestSP request_sp)
             }
             catch(std::runtime_error& ex)
             {
+                WARN_STREAM << "ProtocolManager::prepareValidation() "
+                    << ex.what() << " from " << m_remoteEndpoint << endl;
+
                 validationRes->set_state(Response::Validation::REJECTED);
                 validationRes->set_status(ex.what());
             }
@@ -244,17 +247,39 @@ ResponseSP ProtocolManager::prepareMetadata(RequestSP request_sp)
                 << "schema " << schema << " table " << table << " timestamp "
                 << asctime(&timestamp) << " from " << m_remoteEndpoint << endl;
 
-            metadataRes->set_state(Response::Metadata::ACCEPTED);
-            metadataRes->set_status("Metadata ready");
+            try
+            {
+                DBManager::MetadataList metadataList =
+                    m_dBManager_sp->retrieveNewTuples(schema, table, timestamp);
+
+                fillResponse(metadataRes, metadataList);
+
+                metadataRes->set_state(Response::Metadata::ACCEPTED);
+                metadataRes->set_status("Metadata ready");
+            }
+            catch(std::runtime_error& ex)
+            {
+                WARN_STREAM << "ProtocolManager::prepareMetadata() "
+                    << ex.what() << " from " << m_remoteEndpoint << endl;
+
+                metadataRes->set_state(Response::Metadata::REJECTED);
+                metadataRes->set_status(ex.what());
+            }
         }
         else
         {
+            WARN_STREAM << "ProtocolManager::prepareMetadata() "
+                << "Not validated from " << m_remoteEndpoint << endl;
+
             metadataRes->set_state(Response::Metadata::REJECTED);
             metadataRes->set_status("Not validated");
         }
     }
     else
     {
+        WARN_STREAM << "ProtocolManager::prepareMetadata() "
+            << "Not authorised from " << m_remoteEndpoint << endl;
+
         metadataRes->set_state(Response::Metadata::REJECTED);
         metadataRes->set_status("Not authorised");
     }
@@ -324,4 +349,13 @@ void ProtocolManager::validateColumn(const Request::Validation::Column& column,
     }
 }
 
+//==============================================================================
+//      ProtocolManager::fillResponse()
+//==============================================================================
+void ProtocolManager::fillResponse(const Response::Metadata& metadataRes,
+        DBManager::MetadataList metadataList) throw(std::runtime_error)
+{
+    DEBUG_STREAM << "ProtocolManager::fillResponse()" << endl;
+}
+
 }   //namespace
diff --git a/src/ProtocolManager.h b/src/ProtocolManager.h
index 66e53fddd2d48753fa6652a7f50e08b217073136..0c3e1061fdfd185ba18ed6fb1f1956fd17a604f2 100644
--- a/src/ProtocolManager.h
+++ b/src/ProtocolManager.h
@@ -76,7 +76,10 @@ protected:
 //  [Protected] Validation related methods
 //------------------------------------------------------------------------------
     virtual void validateColumn(const Request::Validation::Column&,
-    DBManager::InformationList&) throw(std::runtime_error);
+        DBManager::InformationList&) throw(std::runtime_error);
+
+    virtual void fillResponse(const Response::Metadata&,
+        DBManager::MetadataList) throw(std::runtime_error);
 
 //------------------------------------------------------------------------------
 //  [Protected] Class variables