diff --git a/chaos_micro_unit_toolkit/connection/unit_proxy/UnitProxyHandlerWrapper.h b/chaos_micro_unit_toolkit/connection/unit_proxy/UnitProxyHandlerWrapper.h
index 62a46b8395d4ae9b6c6f7667f6ab8a69d66e11f5..8a72c52fd4af4d9e903d7c822f56faa563de3b12 100644
--- a/chaos_micro_unit_toolkit/connection/unit_proxy/UnitProxyHandlerWrapper.h
+++ b/chaos_micro_unit_toolkit/connection/unit_proxy/UnitProxyHandlerWrapper.h
@@ -38,6 +38,7 @@
 #define UP_EV_CONN_RETRY        7   /* retry to reconnect event_data point to and unsigned integer that is the current waiting time for retry */
 #define UP_EV_AUTH_ACCEPTED     8   /* unit has been accepted autorization key*/
 #define UP_EV_AUTH_REJECTED     9   /* unit has rejected the autorization key */
+#define UP_EV_ERR_RECEIVED      10  /* error message has been received, event_data point to UPError*, memory is valid only during call*/
 
 namespace chaos {
     namespace micro_unit_toolkit {
diff --git a/chaos_micro_unit_toolkit/connection/unit_proxy/raw_driver/ExternalDriverHandlerWrapper.cpp b/chaos_micro_unit_toolkit/connection/unit_proxy/raw_driver/ExternalDriverHandlerWrapper.cpp
index 2bff435425be3b03f24f149e669f4882deeddf03..030477672df9d5374642c03635e5eceed8a895ce 100644
--- a/chaos_micro_unit_toolkit/connection/unit_proxy/raw_driver/ExternalDriverHandlerWrapper.cpp
+++ b/chaos_micro_unit_toolkit/connection/unit_proxy/raw_driver/ExternalDriverHandlerWrapper.cpp
@@ -92,7 +92,7 @@ int ExternalDriverHandlerWrapper::manageRemoteMessage() {
     while(rd->hasMoreMessage()) {
         remote_message = rd->getNextMessage();
         if(remote_message->message.get() == NULL) return -1;
-        
+        std::cout << remote_message->message->toString();
         std::string uri;
         std::string opcode;
         data::CDWShrdPtr r_msg;
@@ -100,14 +100,14 @@ int ExternalDriverHandlerWrapper::manageRemoteMessage() {
            remote_message->message->isStringValue(OPCODE_KEY)){
             opcode = remote_message->message->getStringValue(OPCODE_KEY);
         } else {
-            return -2;
+            return 0;
         }
         
         if(remote_message->message->hasKey(INITIALIZATION_URI) &&
            remote_message->message->isStringValue(INITIALIZATION_URI)){
             uri = remote_message->message->getStringValue(INITIALIZATION_URI);
         } else {
-            return -3;
+            return 0;
         }
         
         if(remote_message->message->hasKey(OPCODE_PARAMETER_KEY) &&
@@ -136,7 +136,10 @@ int ExternalDriverHandlerWrapper::manageRemoteMessage() {
             EDNormalRequest normal_request = {req_message,{}};
             if((err = callHandler(UP_EV_REQ_RECEIVED,
                                   &normal_request)) == 0) {
-                rd->sendAnswer(remote_message, composeResponseMessage(normal_request.response));
+                CDWUniquePtr response_msg = composeResponseMessage(normal_request.response);
+                normal_request.response.message->copyAllTo(*response_msg);
+                rd->sendAnswer(remote_message, response_msg);
+                
             }
         } else {
             err = callHandler(UP_EV_MSG_RECEIVED, &req_message);
diff --git a/chaos_micro_unit_toolkit/connection/unit_proxy/raw_driver/ExternalDriverHandlerWrapper.h b/chaos_micro_unit_toolkit/connection/unit_proxy/raw_driver/ExternalDriverHandlerWrapper.h
index 4d68afa452e8b14758ddffb94581fd7db0a3a7dc..69e87a7872455185b8ebd9a0c6551485045dec4c 100644
--- a/chaos_micro_unit_toolkit/connection/unit_proxy/raw_driver/ExternalDriverHandlerWrapper.h
+++ b/chaos_micro_unit_toolkit/connection/unit_proxy/raw_driver/ExternalDriverHandlerWrapper.h
@@ -25,9 +25,8 @@
 #include <chaos_micro_unit_toolkit/connection/unit_proxy/UnitProxyHandlerWrapper.h>
 #include <chaos_micro_unit_toolkit/connection/unit_proxy/raw_driver/ExternalDriverUnitProxy.h>
 
-#define UP_EV_MSG_RECEIVED      10  /* new message has been received, event_data point to UPMessage*, memory is valido only during call*/
-#define UP_EV_REQ_RECEIVED      11  /* new request has been received, event_data point to EDNormalRequest*, memory is valido only during call*/
-#define UP_EV_ERR_RECEIVED      12  /* error message has been received, event_data point to UPError*, memory is valid only during call*/
+#define UP_EV_MSG_RECEIVED      11  /* new message has been received, event_data point to UPMessage*, memory is valido only during call*/
+#define UP_EV_REQ_RECEIVED      12  /* new request has been received, event_data point to EDNormalRequest*, memory is valido only during call*/
 #define UP_EV_INIT_RECEIVED     13  /* has been request a new driver initialization, the event_data point to EDInitResponse*, memory is valid only during call*/
 #define UP_EV_DEINIT_RECEIVED   14  /* has been request a new driver deinitilization, the event_data point to EDInitRequest*, memory is valid only during call*/