diff --git a/openair2/ENB_APP/enb_agent_common.c b/openair2/ENB_APP/enb_agent_common.c
index d71a5a6accae7c478a58a170d1f8f84403b1b1f6..132044cf1ffd171e9af6daf48e8c3e608810f6bb 100644
--- a/openair2/ENB_APP/enb_agent_common.c
+++ b/openair2/ENB_APP/enb_agent_common.c
@@ -64,7 +64,7 @@ int enb_agent_deserialize_message(void *data, int size, Protocol__ProgranMessage
   *msg = protocol__progran_message__unpack(NULL, size, data);
   if (*msg == NULL)
     goto error;
-  
+
   return 0;
   
  error:
@@ -118,6 +118,7 @@ int enb_agent_hello(uint32_t xid, Protocol__ProgranMessage **msg) {
   protocol__progran_message__init(*msg);
   (*msg)->msg_case = PROTOCOL__PROGRAN_MESSAGE__MSG_HELLO_MSG;
   (*msg)->msg_dir = PROTOCOL__PROGRAN_DIRECTION__INITIATING_MESSAGE;
+  (*msg)->has_msg_dir = 1;
   (*msg)->hello_msg = hello_msg;
   return 0;
   
@@ -216,6 +217,7 @@ int enb_agent_echo_reply(uint32_t xid, Protocol__ProgranMessage **msg) {
   protocol__progran_message__init(*msg);
   (*msg)->msg_case = PROTOCOL__PROGRAN_MESSAGE__MSG_ECHO_REPLY_MSG;
   (*msg)->msg_dir = PROTOCOL__PROGRAN_DIRECTION__SUCCESSFUL_OUTCOME;
+  (*msg)->has_msg_dir = 1;
   (*msg)->echo_reply_msg = echo_reply_msg;
   return 0;
 
diff --git a/openair2/ENB_APP/enb_agent_handler.c b/openair2/ENB_APP/enb_agent_handler.c
index 2b9509f48efcb3119eedeb2dee6e632425325d08..2457ddbfdc1ecfc4b66f0f41f262a75eec32bc38 100644
--- a/openair2/ENB_APP/enb_agent_handler.c
+++ b/openair2/ENB_APP/enb_agent_handler.c
@@ -42,10 +42,11 @@
 #include "assertions.h"
 
 enb_agent_message_decoded_callback messages_callback[][3] = {
-  {enb_agent_hello, enb_agent_hello,0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_HELLO_MSG*/
-  {enb_agent_echo_request, enb_agent_echo_reply,0}, /**/
-  {0, enb_agent_mac_reply,0}, /*stats*/
-  {0,0,0},
+  {enb_agent_hello, 0, 0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_HELLO_MSG*/
+  {enb_agent_echo_reply, 0, 0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_ECHO_REQUEST_MSG*/
+  {0, 0, 0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_ECHO_REPLY_MSG*/ //Must add handler when receiving echo reply
+  {enb_agent_mac_reply, 0, 0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_STATS_REQUEST_MSG*/
+  {0,0,0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_STATS_REPLY_MSG*/
 
 };
 
@@ -61,33 +62,35 @@ Protocol__ProgranMessage* enb_agent_handle_message (uint32_t xid,
 						    uint8_t *data, 
 						    uint32_t size){
   
-  Protocol__ProgranMessage *message;
+  Protocol__ProgranMessage *decoded_message, *reply_message;
   err_code_t err_code;
   DevAssert(data != NULL);
 
-  if (enb_agent_deserialize_message(data, size, &message) < 0) {
+  if (enb_agent_deserialize_message(data, size, &decoded_message) < 0) {
     err_code= PROTOCOL__PROGRAN_ERR__MSG_DECODING;
     goto error; 
   }
   
-  if ((message->msg_case > sizeof(messages_callback) / (3*sizeof(enb_agent_message_decoded_callback))) || 
-      (message->msg_dir > PROTOCOL__PROGRAN_DIRECTION__UNSUCCESSFUL_OUTCOME)){
+  if ((decoded_message->msg_case > sizeof(messages_callback) / (3*sizeof(enb_agent_message_decoded_callback))) || 
+      (decoded_message->msg_dir > PROTOCOL__PROGRAN_DIRECTION__UNSUCCESSFUL_OUTCOME)){
     err_code= PROTOCOL__PROGRAN_ERR__MSG_NOT_HANDLED;
       goto error;
   }
     
-  if (messages_callback[message->msg_case][message->msg_dir] == NULL) {
+  if (messages_callback[decoded_message->msg_case-1][decoded_message->msg_dir-1] == NULL) {
     err_code= PROTOCOL__PROGRAN_ERR__MSG_NOT_SUPPORTED;
     goto error;
 
   }
 
-  err_code= ((*messages_callback[message->msg_case-1][message->msg_dir-1])(xid, &message));
+  err_code= ((*messages_callback[decoded_message->msg_case-1][decoded_message->msg_dir-1])(xid, &reply_message));
   if ( err_code < 0 ){
     goto error;
   }
   
-  return message;
+  protocol__progran_message__free_unpacked(decoded_message, NULL);
+
+  return reply_message;
   
 error:
   LOG_E(ENB_APP,"errno %d occured\n",err_code);
@@ -110,11 +113,12 @@ void * enb_agent_send_message(uint32_t xid,
   }
   
   // free the msg --> later keep this in the data struct and just update the values
-  enb_agent_mac_destroy_stats_reply(msg);
+  //TODO call proper destroy function
+  //  enb_agent_mac_destroy_stats_reply(msg);
   
   DevAssert(buffer !=NULL);
 
-  LOG_D(ENB_APP,"Serilized the enb mac stats reply (size %d)\n", size);
+  LOG_D(ENB_APP,"Serilized the enb mac stats reply (size %d)\n", *size);
 
   return buffer;