diff --git a/openair2/ENB_APP/enb_agent_handler.c b/openair2/ENB_APP/enb_agent_handler.c
index 7b63227d7ee98cafcb3fb0b2f8aa359af12898ac..3e9752b539bec8a1c053f9ee814d53da8896e700 100644
--- a/openair2/ENB_APP/enb_agent_handler.c
+++ b/openair2/ENB_APP/enb_agent_handler.c
@@ -46,9 +46,10 @@ enb_agent_message_decoded_callback messages_callback[][3] = {
   {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_handle_stats, 0, 0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_STATS_REQUEST_MSG*/
-  {0,0,0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_STATS_REPLY_MSG*/
-  {0,0,0}, /*PROTOCOK__PROGRAN_MESSAGE__MSG_SF_TRIGGER_MSG*/
-  {0,0,0}, /*SR_INFO*/
+  {0, 0, 0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_STATS_REPLY_MSG*/
+  {0, 0, 0}, /*PROTOCOK__PROGRAN_MESSAGE__MSG_SF_TRIGGER_MSG*/
+  {0, 0, 0}, /*SR_INFO*/
+  {0, 0, 0}, /*DL_MAC_CONFIG*/
 
 };
 
@@ -60,6 +61,7 @@ enb_agent_message_destruction_callback message_destruction_callback[] = {
   enb_agent_mac_destroy_stats_reply,
   enb_agent_mac_destroy_sf_trigger,
   enb_agent_mac_destroy_sr_info,
+  enb_agent_mac_destroy_dl_config,
 };
 
 static const char *enb_agent_direction2String[] = {
diff --git a/openair2/ENB_APP/enb_agent_mac.c b/openair2/ENB_APP/enb_agent_mac.c
index 6e662673917da7b985e3060a6c318540aff0f4f8..157b83581d30bc9d4bdf0faf2eee1b50d51c83f7 100644
--- a/openair2/ENB_APP/enb_agent_mac.c
+++ b/openair2/ENB_APP/enb_agent_mac.c
@@ -45,6 +45,9 @@
 /*Flags showing if a mac agent has already been registered*/
 unsigned int mac_agent_registered[NUM_MAX_ENB];
 
+/*Array containing the Agent-MAC interfaces*/
+AGENT_MAC_xface *agent_mac_xface[NUM_MAX_ENB];
+
 int enb_agent_mac_handle_stats(mid_t mod_id, const void *params, Protocol__ProgranMessage **msg){
   
   // TODO: Must deal with sanitization of input
@@ -991,6 +994,43 @@ int enb_agent_mac_destroy_sf_trigger(Protocol__ProgranMessage *msg) {
   return -1;
 }
 
+int enb_agent_mac_create_empty_dl_config(mid_t mod_id, Protocol__ProgranMessage **msg) {
+
+  int xid = 0;
+  Protocol__PrpHeader *header;
+  if (prp_create_header(xid, PROTOCOL__PRP_TYPE__PRPT_DL_MAC_CONFIG, &header) != 0)
+    goto error;
+
+  Protocol__PrpDlMacConfig *dl_mac_config_msg;
+  dl_mac_config_msg = malloc(sizeof(Protocol__PrpDlMacConfig));
+  if (dl_mac_config_msg == NULL) {
+    goto error;
+  }
+  protocol__prp_dl_mac_config__init(dl_mac_config_msg);
+  
+  dl_mac_config_msg->header = header;
+  dl_mac_config_msg->has_sfn_sf = 1;
+  dl_mac_config_msg->sfn_sf = get_sfn_sf(mod_id);
+  
+  *msg = malloc(sizeof(Protocol__ProgranMessage));
+  if(*msg == NULL)
+    goto error;
+  protocol__progran_message__init(*msg);
+  (*msg)->msg_case = PROTOCOL__PROGRAN_MESSAGE__MSG_DL_MAC_CONFIG_MSG;
+  (*msg)->msg_dir =  PROTOCOL__PROGRAN_DIRECTION__INITIATING_MESSAGE;
+  (*msg)->dl_mac_config_msg = dl_mac_config_msg;
+
+  return 0;
+
+ error:
+  return -1;
+}
+
+int enb_agent_mac_destroy_dl_config(Protocol__ProgranMessage *msg) {
+  //TODO: De-allocate the memory of the message
+  return -1;
+}
+
 /***********************************************
  * eNB agent - technology mac API implementation
  ***********************************************/
@@ -1109,7 +1149,7 @@ void enb_agent_send_update_mac_stats(mid_t mod_id) {
 }
 
 int enb_agent_register_mac_xface(mid_t mod_id, AGENT_MAC_xface *xface) {
-  if (!mac_agent_registered[mod_id]) {
+  if (mac_agent_registered[mod_id]) {
     LOG_E(MAC, "MAC agent for eNB %d is already registered\n", mod_id);
     return -1;
   }
@@ -1119,22 +1159,23 @@ int enb_agent_register_mac_xface(mid_t mod_id, AGENT_MAC_xface *xface) {
   xface->enb_agent_send_sf_trigger = enb_agent_send_sf_trigger;
   xface->enb_agent_send_update_mac_stats = enb_agent_send_update_mac_stats;
 
+  
   mac_agent_registered[mod_id] = 1;
+  agent_mac_xface[mod_id] = xface;
 
   return 0;
 }
 
 int enb_agent_unregister_mac_xface(mid_t mod_id, AGENT_MAC_xface *xface) {
   
-  if(mac_agent_registered[mod_id]) {
-    LOG_E(MAC, "MAC agent for eNB %d is already registered\n", mod_id);
-    return -1;
-  }
-  
   //xface->agent_ctxt = NULL;
   xface->enb_agent_send_sr_info = NULL;
   xface->enb_agent_send_sf_trigger = NULL;
+  xface->enb_agent_send_update_mac_stats = NULL;
 
+  mac_agent_registered[mod_id] = 0;
+  agent_mac_xface[mod_id] = NULL;
+  
   return 0;
 }
 
diff --git a/openair2/ENB_APP/enb_agent_mac.h b/openair2/ENB_APP/enb_agent_mac.h
index c30da76d3ee854909584c5ad114307e360049428..221d76e57fe22a43270bf6008e524000cfd1ed09 100644
--- a/openair2/ENB_APP/enb_agent_mac.h
+++ b/openair2/ENB_APP/enb_agent_mac.h
@@ -94,6 +94,10 @@ int enb_agent_mac_sf_trigger(mid_t mod_id, const void *params, Protocol__Progran
 
 int enb_agent_mac_destroy_sf_trigger(Protocol__ProgranMessage *msg);
 
+int enb_agent_mac_create_empty_dl_config(mid_t mod_id, Protocol__ProgranMessage **msg);
+
+int enb_agent_mac_destroy_dl_config(Protocol__ProgranMessage *msg);
+
 
 /**********************************
  * eNB agent - technology mac API