diff --git a/openair2/ENB_APP/enb_agent_net_comm.c b/openair2/ENB_APP/enb_agent_net_comm.c
index 096779f2610d4d5ecc6d76b1c8eacc2160f49ae5..5c4544ad634cee165faa8ad331274850aaaea4c0 100644
--- a/openair2/ENB_APP/enb_agent_net_comm.c
+++ b/openair2/ENB_APP/enb_agent_net_comm.c
@@ -37,17 +37,17 @@
 #include "enb_agent_net_comm.h"
 #include "log.h"
 
-enb_agent_channel_t *agent_channel[ENB_AGENT_MAX];
+enb_agent_channel_t *agent_channel[NUM_MAX_ENB_AGENT][ENB_AGENT_MAX];
 enb_agent_channel_instance_t channel_instance;
 int enb_agent_channel_id = 0;
 
-int enb_agent_msg_send(void *data, int size, int priority, agent_id_t agent_id) {
+int enb_agent_msg_send(mid_t mod_id, agent_id_t agent_id, void *data, int size, int priority) {
   /*Check if agent id is valid*/
   if (agent_id >= ENB_AGENT_MAX || agent_id < 0) {
     goto error;
   }
   enb_agent_channel_t *channel;
-  channel = agent_channel[agent_id];
+  channel = agent_channel[mod_id][agent_id];
   
   /*Check if agent has a channel registered*/
   if (channel == NULL) {
@@ -61,13 +61,13 @@ int enb_agent_msg_send(void *data, int size, int priority, agent_id_t agent_id)
   return -1;
 }
 
-int enb_agent_msg_recv(void **data, int *size, int *priority, agent_id_t agent_id) {
+int enb_agent_msg_recv(mid_t mod_id, agent_id_t agent_id, void **data, int *size, int *priority) {
   /*Check if agent id is valid*/
   if (agent_id >= ENB_AGENT_MAX || agent_id < 0) {
     goto error;
   }
   enb_agent_channel_t *channel;
-  channel = agent_channel[agent_id];
+  channel = agent_channel[mod_id][agent_id];
   
   /*Check if agent has a channel registered*/
   if (channel == NULL) {
@@ -81,7 +81,7 @@ int enb_agent_msg_recv(void **data, int *size, int *priority, agent_id_t agent_i
   return -1;
 }
 
-int enb_agent_register_channel(enb_agent_channel_t *channel, agent_id_t agent_id) {
+int enb_agent_register_channel(mid_t mod_id, enb_agent_channel_t *channel, agent_id_t agent_id) {
   int i;
 
   if (channel == NULL) {
@@ -90,23 +90,23 @@ int enb_agent_register_channel(enb_agent_channel_t *channel, agent_id_t agent_id
 
   if (agent_id == ENB_AGENT_MAX) {
     for (i = 0; i < ENB_AGENT_MAX; i++) {
-      agent_channel[i] = channel;
+      agent_channel[mod_id][i] = channel;
     }
   } else {
-    agent_channel[agent_id] = channel;
+    agent_channel[mod_id][agent_id] = channel;
   }
   return 0;
 }
 
-void enb_agent_unregister_channel(agent_id_t agent_id) {
+void enb_agent_unregister_channel(mid_t mod_id, agent_id_t agent_id) {
   int i;
 
   if (agent_id == ENB_AGENT_MAX) {
     for (i = 0; i < ENB_AGENT_MAX; i++) {
-      agent_channel[i] = NULL;
+      agent_channel[mod_id][i] = NULL;
     }
   } else {
-    agent_channel[agent_id] = NULL;
+    agent_channel[mod_id][agent_id] = NULL;
   }
 }
 
@@ -132,7 +132,7 @@ int enb_agent_create_channel(void *channel_info,
 }
 
 int enb_agent_destroy_channel(int channel_id) {
-  int i;
+  int i, j;
 
   /*Check to see if channel exists*/
   struct enb_agent_channel_s *e = NULL;
@@ -146,10 +146,12 @@ int enb_agent_destroy_channel(int channel_id) {
   }
 
   /*Unregister the channel from all agents*/
-  for (i = 0; i < ENB_AGENT_MAX; i++) {
-    if (agent_channel[i] != NULL) {
-      if (agent_channel[i]->channel_id == e->channel_id) {
-	agent_channel[i] == NULL;
+  for (i = 0; i < NUM_MAX_ENB_AGENT; i++) {
+    for (j = 0; j < ENB_AGENT_MAX; j++) {
+      if (agent_channel[i][j] != NULL) {
+	if (agent_channel[i][j]->channel_id == e->channel_id) {
+	  agent_channel[i][j] == NULL;
+	}
       }
     }
   }
@@ -163,13 +165,15 @@ int enb_agent_destroy_channel(int channel_id) {
 }
 
 err_code_t enb_agent_init_channel_container(void) {
-  int i;
+  int i, j;
   LOG_I(ENB_AGENT, "init RB tree for channel container\n");
 
   RB_INIT(&channel_instance.enb_agent_head);
-
-  for (i = 0; i < ENB_AGENT_MAX; i++) {
-    agent_channel[i] == NULL;
+  
+  for (i = 0; i < NUM_MAX_ENB_AGENT; i++) {
+    for (j = 0; j < ENB_AGENT_MAX; j++) {
+    agent_channel[i][j] == NULL;
+    }
   }
 
   return 0;
diff --git a/openair2/ENB_APP/enb_agent_net_comm.h b/openair2/ENB_APP/enb_agent_net_comm.h
index 50237379d4efebb04108a12533b770cd7843aac3..ab42bdc34f138ec8892f9796f93b873bbf5ae82a 100644
--- a/openair2/ENB_APP/enb_agent_net_comm.h
+++ b/openair2/ENB_APP/enb_agent_net_comm.h
@@ -56,16 +56,16 @@ typedef struct enb_agent_channel_instance_s{
 } enb_agent_channel_instance_t;
 
 /*Send and receive messages using the channel registered for a specific agent*/
-int enb_agent_msg_send(void *data, int size, int priority, agent_id_t agent_id);
+int enb_agent_msg_send(mid_t mod_id, agent_id_t agent_id, void *data, int size, int priority);
 
-int enb_agent_msg_recv(void **data, int *size, int *priority, agent_id_t agent_id);
+int enb_agent_msg_recv(mid_t mod_id, agent_id_t agent_id, void **data, int *size, int *priority);
 
 /*Register a channel to an agent. Use ENB_AGENT_MAX to register the
  *same channel to all agents*/
-int enb_agent_register_channel(enb_agent_channel_t *channel, agent_id_t agent_id);
+int enb_agent_register_channel(mid_t mod_id, enb_agent_channel_t *channel, agent_id_t agent_id);
 
 /*Unregister the current channel of an agent. Use ENB_AGENT_MAX to unregister all channels*/
-void enb_agent_unregister_channel(agent_id_t agent_id);
+void enb_agent_unregister_channel(mid_t mod_id, agent_id_t agent_id);
 
 /*Create a new channel. Returns the id of the new channel or negative number otherwise*/
 int enb_agent_create_channel(void *channel_info,