diff --git a/src/DBManager.cpp b/src/DBManager.cpp
index ac0254dc8022512989ed27e9ba8e6afa8414553d..5d4ce13234bebcb64190c81395050e9d5f12ab13 100644
--- a/src/DBManager.cpp
+++ b/src/DBManager.cpp
@@ -103,6 +103,13 @@ DBManager::InformationList DBManager::retrieveInformation(std::string schema,
 
     std::copy(rows.begin(), rows.end(), std::back_inserter(informationList));
 
+    if(informationList.empty())
+    {
+        std::stringstream errorStream;
+        errorStream << schema << "." << table << " not exists";
+        throw soci::soci_error(errorStream.str());
+    }
+
     return informationList;
 }
 
diff --git a/src/PlainSession.cpp b/src/PlainSession.cpp
index 71157c68be27cc8000522801d8b1e79267844a5e..9c9a6624782db2368c3fcbb9ec6fae9f66f87f33 100644
--- a/src/PlainSession.cpp
+++ b/src/PlainSession.cpp
@@ -1,8 +1,7 @@
 #include <PlainSession.h>
 
 #include <boost/bind.hpp>
-
-#include <netinet/in.h>
+#include <boost/lexical_cast.hpp>
 
 namespace MetadataExporter_ns
 {
@@ -26,6 +25,9 @@ PlainSession::~PlainSession()
 {
     DEBUG_STREAM << "PlainSession::~PlainSession()" << endl;
 
+    INFO_STREAM << "PlainSession::~PlainSession() Disconnection from "
+        << remoteEndpoint << endl;
+
     boost::system::error_code errorCode;
 
     m_plainSocket.shutdown(boost::asio::ip::tcp::socket::shutdown_both, errorCode);
@@ -63,7 +65,11 @@ void PlainSession::start()
 {
     DEBUG_STREAM << "PlainSession::start()" << endl;
 
-    INFO_STREAM << m_plainSocket.remote_endpoint() << " CONNECTED" << endl;
+    remoteEndpoint = boost::lexical_cast<std::string>(
+        m_plainSocket.remote_endpoint());
+
+    INFO_STREAM << "PlainSession::start() Connection from "
+        << remoteEndpoint << endl;
 
     startReadRequestHeader();
 }
@@ -89,14 +95,16 @@ void PlainSession::startReadRequestBody(boost::uint32_t bodySize)
 {
     DEBUG_STREAM << "PlainSession::startReadRequestBody()" << endl;
 
-    INFO_STREAM << m_plainSocket.remote_endpoint()
-        << " >>>> " << bodySize << " BYTE" << endl;
-
     m_readBuff.resize(HEADER_SIZE + bodySize);
 
     boost::asio::mutable_buffers_1 mutableBuffer =
         boost::asio::buffer(&m_readBuff[HEADER_SIZE], bodySize);
 
+    #ifdef VERBOSE_DEBUG
+        INFO_STREAM << "PlainSession::startReadRequestBody() "
+            << remoteEndpoint << " >>>> " << bodySize << " BYTE" << endl;
+    #endif
+
     boost::asio::async_read(m_plainSocket, mutableBuffer,
         m_strand.wrap(boost::bind(&PlainSession::handleReadRequestBody,
         shared_from_this(), boost::asio::placeholders::error)));
@@ -119,9 +127,6 @@ void PlainSession::startWriteResponse()
 
         boost::uint32_t bodySize = response_sp->ByteSize();
 
-        INFO_STREAM << m_plainSocket.remote_endpoint()
-            << " <<<< " << bodySize << " BYTE" << endl;
-
         std::vector<boost::uint8_t> writeBuff;
         writeBuff.resize(HEADER_SIZE + bodySize);
 
@@ -129,17 +134,25 @@ void PlainSession::startWriteResponse()
 
         response_sp->SerializeToArray(&writeBuff[HEADER_SIZE], bodySize);
 
+        #ifdef VERBOSE_DEBUG
+            INFO_STREAM << "PlainSession::startWriteResponse() "
+                << remoteEndpoint << " <<<< " << bodySize << " byte" << endl;
+        #endif
+
         boost::asio::async_write(m_plainSocket, boost::asio::buffer(writeBuff),
             m_strand.wrap(boost::bind(&PlainSession::handleWriteResponse,
                 shared_from_this(), boost::asio::placeholders::error)));
     }
     catch(std::runtime_error& ec)
     {
-        ERROR_STREAM << "SSLSession::startWriteResponse() " << ec.what() << endl;
+        ERROR_STREAM << "SSLSession::startWriteResponse() "
+            << ec.what() << " from " << remoteEndpoint << endl;
     }
     catch(...)
     {
-        ERROR_STREAM << "SSLSession::startWriteResponse() unknown error" << endl;
+        ERROR_STREAM << "SSLSession::startWriteResponse() unknown error from "
+            << remoteEndpoint << endl;
+
     }
 }
 
diff --git a/src/ProtocolManager.cpp b/src/ProtocolManager.cpp
index f1f27a6564e9762ef01c29b37baecd76730e0ae8..19dbb6a29e65240856d717bf2480a83dd43d08a6 100644
--- a/src/ProtocolManager.cpp
+++ b/src/ProtocolManager.cpp
@@ -150,39 +150,32 @@ ResponseSP ProtocolManager::prepareValidation(RequestSP request_sp)
             const std::string& schema = validationReq.schema();
             const std::string& table =  validationReq.table();
 
-            DBManager::InformationList informationList =
-                m_dBManager_sp->retrieveInformation(schema, table);
-
-            if(validationReq.columns_size() == (int)informationList.size())
+            try
             {
+                DBManager::InformationList informationList =
+                    m_dBManager_sp->retrieveInformation(schema, table);
+
+                if(validationReq.columns_size() != (int)informationList.size())
+                    throw std::runtime_error("Columns number does not match");
+
                 const google::protobuf::RepeatedPtrField
                     < Request::Validation::Column >& columns = validationReq.columns();
 
                 google::protobuf::RepeatedPtrField
                     < Request::Validation::Column >::const_iterator it;
 
-                try
-                {
-                    for(it=columns.begin(); it!=columns.end();++it)
-                    {
-                        validateColumn(*it, informationList);
-                    }
-
-                    m_isValidated = true;
-
-                    validationRes->set_state(Response::Validation::ACCEPTED);
-                    validationRes->set_status("Table validated");
-                }
-                catch(std::runtime_error& ex)
-                {
-                    validationRes->set_state(Response::Validation::REJECTED);
-                    validationRes->set_status(ex.what());
-                }
+                for(it=columns.begin(); it!=columns.end(); ++it)
+                    validateColumn(*it, informationList);
+
+                m_isValidated = true;
+
+                validationRes->set_state(Response::Validation::ACCEPTED);
+                validationRes->set_status("Table validated");
             }
-            else
+            catch(std::runtime_error& ex)
             {
                 validationRes->set_state(Response::Validation::REJECTED);
-                validationRes->set_status("Columns number does not match");
+                validationRes->set_status(ex.what());
             }
         }
         else
@@ -292,6 +285,13 @@ void ProtocolManager::validateColumn(const Request::Validation::Column& column,
                     << "server " << isNullable << " client " << column.nullable();
                 throw std::runtime_error(errorStream.str());
             }
+
+            #ifdef VERBOSE_DEBUG
+                INFO_STREAM << "SERVER: " << columnName << " | " << columnType
+                    <<  " | " << isNullable << endl;
+                INFO_STREAM << "SERVER: " << column.name() << " | "
+                    << column.type() <<  " | " << column.nullable() << endl;
+            #endif
         }
     }
 
diff --git a/src/SSLSession.cpp b/src/SSLSession.cpp
index 7feffa5e4f105c423d75e293f2c8a049aeaa9b52..cb0394d2f29158a74252b336dd205092d1ead790 100644
--- a/src/SSLSession.cpp
+++ b/src/SSLSession.cpp
@@ -1,5 +1,7 @@
 #include <SSLSession.h>
+
 #include <boost/bind.hpp>
+#include <boost/lexical_cast.hpp>
 
 namespace MetadataExporter_ns
 {
@@ -24,6 +26,9 @@ SSLSession::~SSLSession()
 {
     DEBUG_STREAM << "SSLSession::~SSLSession()" << endl;
 
+    INFO_STREAM << "SSLSession::~SSLSession() Disconnection from "
+        << remoteEndpoint << endl;
+
     boost::system::error_code errorCode;
 
     m_sslSocket.shutdown(errorCode);
@@ -65,8 +70,10 @@ void SSLSession::start()
 {
     DEBUG_STREAM << "SSLSession::start()" << endl;
 
-    INFO_STREAM << m_sslSocket.lowest_layer().remote_endpoint()
-        << " CONNECTED" << endl;
+    remoteEndpoint = boost::lexical_cast<std::string>(
+        m_sslSocket.lowest_layer().remote_endpoint());
+
+    INFO_STREAM << "SSLSession::start() Connection from " << remoteEndpoint << endl;
 
     startHandShake();
 }
@@ -96,9 +103,8 @@ void SSLSession::handleHandShake(const boost::system::error_code& errorCode)
         }
         else
         {
-            WARN_STREAM << "SSLSession::handleHandShake() error "
-                << errorCode.message() << " from "
-                << m_sslSocket.lowest_layer().remote_endpoint() << endl;
+            ERROR_STREAM << "SSLSession::handleHandShake() error "
+                << errorCode.message() << " from " << remoteEndpoint << endl;
         }
 }
 
@@ -128,8 +134,10 @@ void SSLSession::startReadRequestBody(boost::uint32_t bodySize)
     boost::asio::mutable_buffers_1 mutableBuffer =
         boost::asio::buffer(&m_readBuff[HEADER_SIZE], bodySize);
 
-    INFO_STREAM << m_sslSocket.lowest_layer().remote_endpoint()
-        << " >>>> " << bodySize << " BYTE" << endl;
+    #ifdef VERBOSE_DEBUG
+        INFO_STREAM << "SSLSession::startReadRequestBody() "
+            << remoteEndpoint << " >>>> " << bodySize << " byte" << endl;
+    #endif
 
     boost::asio::async_read(m_sslSocket, mutableBuffer,
         m_strand.wrap(boost::bind(&SSLSession::handleReadRequestBody,
@@ -161,8 +169,10 @@ void SSLSession::startWriteResponse()
 
         response_sp->SerializeToArray(&writeBuff[HEADER_SIZE], bodySize);
 
-        INFO_STREAM << m_sslSocket.lowest_layer().remote_endpoint()
-            << " <<<< " << bodySize << " BYTE" << endl;
+        #ifdef VERBOSE_DEBUG
+            INFO_STREAM << "SSLSession::startWriteResponse() "
+                << remoteEndpoint << " <<<< " << bodySize << " byte" << endl;
+        #endif
 
         boost::asio::async_write(m_sslSocket, boost::asio::buffer(writeBuff),
             m_strand.wrap(boost::bind(&SSLSession::handleWriteResponse,
@@ -170,11 +180,13 @@ void SSLSession::startWriteResponse()
     }
     catch(std::runtime_error& ec)
     {
-        ERROR_STREAM << "SSLSession::startWriteResponse() " << ec.what() << endl;
+        ERROR_STREAM << "SSLSession::startWriteResponse() "
+            << ec.what() << " from " << remoteEndpoint << endl;
     }
     catch(...)
     {
-        ERROR_STREAM << "SSLSession::startWriteResponse() unknown error" << endl;
+        ERROR_STREAM << "SSLSession::startWriteResponse() unknown error from "
+            << remoteEndpoint <<  endl;
     }
 }
 
diff --git a/src/Server.cpp b/src/Server.cpp
index a035dcd5ae98a44b47fc52502572d7940d26612c..0358a956d211161044904604742bb50b83ac9267 100644
--- a/src/Server.cpp
+++ b/src/Server.cpp
@@ -69,7 +69,13 @@ void Server::start() throw(std::runtime_error)
     std::string localHost = m_configuration_sp->getLocalHost();
     unsigned int localPort = m_configuration_sp->getLocalPort();
 
-    INFO_STREAM << "LISTENING ON " << localHost << ":" << localPort << endl;
+    std::stringstream infoStream;
+    infoStream << "Listening on " << localHost << ":" << localPort << endl;
+
+    INFO_STREAM << "Server::start()" << infoStream.str() << endl;
+
+    writeState(Tango::ON);
+    writeStatus(infoStream.str());
 
     boost::asio::ip::tcp::resolver::query query(localHost,
         boost::lexical_cast<std::string>(localPort));
@@ -101,6 +107,9 @@ void Server::stop() throw(std::runtime_error)
 {
     DEBUG_STREAM << "Server::stop()" << endl;
 
+    writeState(Tango::OFF);
+    writeStatus("Disconnected");
+
     boost::system::error_code errorCode;
     m_acceptor_sp->close(errorCode);
 
@@ -181,7 +190,7 @@ void Server::handleAccept(Session::SP session_sp,
     }
     else
     {
-        WARN_STREAM << "Server::handleAccept() " << ec.message() << endl;
+        ERROR_STREAM << "Server::handleAccept() " << ec.message() << endl;
     }
 
     startAccept();
diff --git a/src/Session.cpp b/src/Session.cpp
index 33929976f80a730d42184fd18aaabcd2f2671f79..8fa49c54aa534929b7e72e4fb4754849221a6b10 100644
--- a/src/Session.cpp
+++ b/src/Session.cpp
@@ -40,11 +40,13 @@ void Session::handleReadRequestHeader(const boost::system::error_code& errorCode
     }
     else if(errorCode == boost::asio::error::eof)
     {
-        DEBUG_STREAM << "Session::handleReadRequestBody() end of file" << endl;
+        DEBUG_STREAM << "Session::handleReadRequestBody() end of file from "
+            << remoteEndpoint << endl;
     }
     else
     {
-        WARN_STREAM << "Session::handleReadRequestHeader() " << errorCode.message() << endl;
+        ERROR_STREAM << "Session::handleReadRequestHeader() "
+            << errorCode.message() << " from " << remoteEndpoint << endl;
     }
 }
 
@@ -61,11 +63,13 @@ void Session::handleReadRequestBody(const boost::system::error_code& errorCode)
     }
     else if(errorCode == boost::asio::error::eof)
     {
-        DEBUG_STREAM << "Session::handleReadRequestBody() end of file" << endl;
+        DEBUG_STREAM << "Session::handleReadRequestBody() end of file from"
+            << remoteEndpoint << endl;
     }
     else
     {
-        WARN_STREAM << "Session::handleReadRequestBody() " << errorCode.message() << endl;
+        ERROR_STREAM << "Session::handleReadRequestBody() "
+            << errorCode.message() << " from " << remoteEndpoint << endl;
     }
 }
 
@@ -82,11 +86,13 @@ void Session::handleWriteResponse(const boost::system::error_code& errorCode)
     }
     else if(errorCode == boost::asio::error::eof)
     {
-        DEBUG_STREAM << "Session::handleWriteResponse() end of file" << endl;
+        DEBUG_STREAM << "Session::handleWriteResponse() end of file from "
+            << remoteEndpoint << endl;
     }
     else
     {
-        WARN_STREAM << "Session::handleWriteResponse() " << errorCode.message() << endl;
+        ERROR_STREAM << "Session::handleWriteResponse() "
+            << errorCode.message() << " from " << remoteEndpoint << endl;
     }
 }
 
diff --git a/src/Session.h b/src/Session.h
index 65e7381f0a0b5867b2d15389cafebeea5125ab2b..a99332095dd374785dac756f7a4000fc8f4287b1 100644
--- a/src/Session.h
+++ b/src/Session.h
@@ -89,6 +89,9 @@ protected:
 
     //Binary buffer for read data
     std::vector<boost::uint8_t> m_readBuff;
+
+    //Address and port of remote endpoint
+    std::string remoteEndpoint;
 };
 
 }   //End of namespace