diff --git a/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c b/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c
index b4bf0293731620731fc25ffb03268e3b17a1fcfc..c485410b35a48949242450fe1baf51a939dc7d35 100644
--- a/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c
+++ b/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c
@@ -36,9 +36,6 @@
 /*Trigger boolean for RRC measurement*/
 bool triggered_rrc = false;
 
-/*Flags showing if an rrc agent has already been registered*/
-unsigned int rrc_agent_registered[NUM_MAX_ENB];
-
 /*Array containing the Agent-RRC interfaces*/
 AGENT_RRC_xface *agent_rrc_xface[NUM_MAX_ENB];
 
@@ -643,9 +640,15 @@ int flexran_agent_rrc_stats_reply(mid_t mod_id,
 }
 
 
-int flexran_agent_register_rrc_xface(mid_t mod_id, AGENT_RRC_xface *xface) {
-  if (rrc_agent_registered[mod_id]) {
-    LOG_E(RRC, "RRC agent for eNB %d is already registered\n", mod_id);
+int flexran_agent_register_rrc_xface(mid_t mod_id)
+{
+  if (agent_rrc_xface[mod_id]) {
+    LOG_E(FLEXRAN_AGENT, "RRC agent for eNB %d is already registered\n", mod_id);
+    return -1;
+  }
+  AGENT_RRC_xface *xface = malloc(sizeof(AGENT_RRC_xface));
+  if (!xface) {
+    LOG_E(FLEXRAN_AGENT, "could not allocate memory for RRC agent xface %d\n", mod_id);
     return -1;
   }
 
@@ -654,21 +657,29 @@ int flexran_agent_register_rrc_xface(mid_t mod_id, AGENT_RRC_xface *xface) {
   xface->flexran_agent_notify_ue_state_change = flexran_agent_ue_state_change;
   xface->flexran_trigger_rrc_measurements = flexran_trigger_rrc_measurements;
 
-  rrc_agent_registered[mod_id] = 1;
   agent_rrc_xface[mod_id] = xface;
 
   return 0;
 }
 
-int flexran_agent_unregister_rrc_xface(mid_t mod_id, AGENT_RRC_xface *xface) {
-
+int flexran_agent_unregister_rrc_xface(mid_t mod_id)
+{
+  if (!agent_rrc_xface[mod_id]) {
+    LOG_E(FLEXRAN_AGENT, "RRC agent for eNB %d is not registered\n", mod_id);
+    return -1;
+  }
   //xface->agent_ctxt = NULL;
 //  xface->flexran_agent_send_update_rrc_stats = NULL;
 
-  xface->flexran_agent_notify_ue_state_change = NULL;
-  xface->flexran_trigger_rrc_measurements = NULL;
-  rrc_agent_registered[mod_id] = 0;
+  agent_rrc_xface[mod_id]->flexran_agent_notify_ue_state_change = NULL;
+  agent_rrc_xface[mod_id]->flexran_trigger_rrc_measurements = NULL;
+  free(agent_rrc_xface[mod_id]);
   agent_rrc_xface[mod_id] = NULL;
 
   return 0;
 }
+
+AGENT_RRC_xface *flexran_agent_get_rrc_xface(mid_t mod_id)
+{
+  return agent_rrc_xface[mod_id];
+}
diff --git a/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.h b/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.h
index 780976893e575f32c22edcf8066191e47d981ed3..d1a0c8f4235f88124f3e84363c838509683a8151 100644
--- a/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.h
+++ b/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.h
@@ -37,11 +37,10 @@
 
 #include "flexran_agent_common.h"
 #include "flexran_agent_rrc_defs.h"
+// for flexran_agent_get_rrc_xface()
+#include "flexran_agent_extern.h"
 
 
-/* Initialization function for the agent structures etc */
-void flexran_agent_init_rrc_agent(mid_t mod_id);
-
 /* UE state change message constructor and destructor */
 void flexran_agent_ue_state_change(mid_t mod_id, uint32_t rnti, uint8_t state_change);
 int flexran_agent_destroy_ue_state_change(Protocol__FlexranMessage *msg);
@@ -62,9 +61,9 @@ int flexran_agent_rrc_stats_reply(mid_t mod_id, const report_config_t *report_co
 int flexran_agent_rrc_destroy_stats_reply(Protocol__FlexranMessage *msg);
 
 /*Register technology specific interface callbacks*/
-int flexran_agent_register_rrc_xface(mid_t mod_id, AGENT_RRC_xface *xface);
+int flexran_agent_register_rrc_xface(mid_t mod_id);
 
 /*Unregister technology specific callbacks*/
-int flexran_agent_unregister_rrc_xface(mid_t mod_id, AGENT_RRC_xface*xface);
+int flexran_agent_unregister_rrc_xface(mid_t mod_id);
 
 #endif
diff --git a/openair2/ENB_APP/flexran_agent_extern.h b/openair2/ENB_APP/flexran_agent_extern.h
index 20b0d6500ab17570bed8e2601bd9df9f23dfdd08..bc5b64a311f9b16e09ccea3c02cabcda5565f195 100644
--- a/openair2/ENB_APP/flexran_agent_extern.h
+++ b/openair2/ENB_APP/flexran_agent_extern.h
@@ -39,10 +39,7 @@
 AGENT_MAC_xface *flexran_agent_get_mac_xface(mid_t mod_id);
 
 /* Control module interface for the communication of the RRC Control Module with the agent */
-extern AGENT_RRC_xface *agent_rrc_xface[NUM_MAX_ENB];
-
-/* Flag indicating whether the VSFs for the RRC control module have been registered */
-extern unsigned int rrc_agent_registered[NUM_MAX_ENB];
+AGENT_RRC_xface *flexran_agent_get_rrc_xface(mid_t mod_id);
 
 /* Control module interface for the communication of the RRC Control Module with the agent */
 extern AGENT_PDCP_xface *agent_pdcp_xface[NUM_MAX_ENB];
diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c
index a2988f26d8c27b34265fe94635d625e2858935c0..5461bf66aad8386e980101ae0f024c7dbcc219aa 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler.c
@@ -416,9 +416,9 @@ check_ul_failure(module_id_t module_idP, int CC_id, int UE_id,
       UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync   = 1;
 
       //Inform the controller about the UE deactivation. Should be moved to RRC agent in the future
-      if (rrc_agent_registered[module_idP]) {
+      if (flexran_agent_get_rrc_xface(module_idP)) {
         LOG_W(MAC, "notify flexran Agent of UE state change\n");
-        agent_rrc_xface[module_idP]->flexran_agent_notify_ue_state_change(module_idP,
+        flexran_agent_get_rrc_xface(module_idP)->flexran_agent_notify_ue_state_change(module_idP,
             rnti, PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_DEACTIVATED);
       }
     }
diff --git a/openair2/RRC/LTE/L2_interface.c b/openair2/RRC/LTE/L2_interface.c
index 27712073b9d28f1ad955ef6eb49a922e8730c351..93cd84b700b134f63964e504bc193469142283ee 100644
--- a/openair2/RRC/LTE/L2_interface.c
+++ b/openair2/RRC/LTE/L2_interface.c
@@ -386,10 +386,9 @@ void mac_eNB_rrc_ul_failure(const module_id_t Mod_instP,
   else {
     LOG_W(RRC,"Frame %d, Subframe %d: UL failure: UE %x unknown \n",frameP,subframeP,rntiP);
   }
-  if (rrc_agent_registered[Mod_instP]) {
-    agent_rrc_xface[Mod_instP]->flexran_agent_notify_ue_state_change(Mod_instP,
-								     rntiP,
-								     PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_DEACTIVATED);
+  if (flexran_agent_get_rrc_xface(Mod_instP)) {
+    flexran_agent_get_rrc_xface(Mod_instP)->flexran_agent_notify_ue_state_change(Mod_instP,
+								     rntiP, PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_DEACTIVATED);
   }
   rrc_mac_remove_ue(Mod_instP,rntiP);
 }
diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c
index 8f89c6583407511fb3a3e8854047026ced9d4938..343b398c9e078d9f6d0a052663b58326c20dfbe5 100644
--- a/openair2/RRC/LTE/rrc_eNB.c
+++ b/openair2/RRC/LTE/rrc_eNB.c
@@ -1038,8 +1038,8 @@ void release_UE_in_freeList(module_id_t mod_id)
                 }
               }
 
-              if (rrc_agent_registered[mod_id]) {
-                agent_rrc_xface[mod_id]->flexran_agent_notify_ue_state_change(mod_id,
+              if (flexran_agent_get_rrc_xface(mod_id)) {
+                flexran_agent_get_rrc_xface(mod_id)->flexran_agent_notify_ue_state_change(mod_id,
                             rnti, PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_DEACTIVATED);
               }
 
@@ -6578,8 +6578,8 @@ rrc_eNB_decode_ccch(
 
         } else {
           // no context available
-	  if (rrc_agent_registered[ctxt_pP->module_id]) {
-	    agent_rrc_xface[ctxt_pP->module_id]->flexran_agent_notify_ue_state_change(ctxt_pP->module_id,
+	  if (flexran_agent_get_rrc_xface(ctxt_pP->module_id)) {
+	    flexran_agent_get_rrc_xface(ctxt_pP->module_id)->flexran_agent_notify_ue_state_change(ctxt_pP->module_id,
 										      ctxt_pP->rnti,
 										      PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_DEACTIVATED);
 	  }
@@ -6869,8 +6869,8 @@ rrc_eNB_decode_dcch(
 	  ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier);
 
 	//WARNING:Inform the controller about the UE activation. Should be moved to RRC agent in the future
-	if (rrc_agent_registered[ctxt_pP->module_id]) {
-	  agent_rrc_xface[ctxt_pP->eNB_index]->flexran_agent_notify_ue_state_change(ctxt_pP->module_id,
+	if (flexran_agent_get_rrc_xface(ctxt_pP->module_id)) {
+	  flexran_agent_get_rrc_xface(ctxt_pP->module_id)->flexran_agent_notify_ue_state_change(ctxt_pP->module_id,
 										ue_context_p->ue_id_rnti,
 										PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_UPDATED);
 	}
@@ -7022,8 +7022,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
               ul_dcch_msg->message.choice.c1.choice.rrcConnectionReestablishmentComplete.rrc_TransactionIdentifier,
               &ul_dcch_msg->message.choice.c1.choice.rrcConnectionReestablishmentComplete.criticalExtensions.choice.rrcConnectionReestablishmentComplete_r8);
 
-          if (rrc_agent_registered[ctxt_pP->module_id]) {
-            agent_rrc_xface[ctxt_pP->eNB_index]->flexran_agent_notify_ue_state_change(ctxt_pP->module_id,
+          if (flexran_agent_get_rrc_xface(ctxt_pP->module_id)) {
+            flexran_agent_get_rrc_xface(ctxt_pP->module_id)->flexran_agent_notify_ue_state_change(ctxt_pP->module_id,
                                                                                       ue_context_p->ue_id_rnti,
                                                                                       PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_ACTIVATED);
           }
@@ -7090,8 +7090,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
                 PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP));
 	     }
 	  //WARNING:Inform the controller about the UE activation. Should be moved to RRC agent in the future
-	  if (rrc_agent_registered[ctxt_pP->module_id]) {
-	    agent_rrc_xface[ctxt_pP->eNB_index]->flexran_agent_notify_ue_state_change(ctxt_pP->module_id,
+	  if (flexran_agent_get_rrc_xface(ctxt_pP->module_id)) {
+	    flexran_agent_get_rrc_xface(ctxt_pP->module_id)->flexran_agent_notify_ue_state_change(ctxt_pP->module_id,
 										  ue_context_p->ue_id_rnti,
 										  PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_ACTIVATED);
 	  }