diff --git a/openair2/LAYER2/MAC/defs.h b/openair2/LAYER2/MAC/defs.h
index cd2d593726a22ab537a77aa0006f210cac8b4fc7..7c0561121d0cf78253a6252313f43f5a18885186 100644
--- a/openair2/LAYER2/MAC/defs.h
+++ b/openair2/LAYER2/MAC/defs.h
@@ -462,6 +462,13 @@ typedef struct {
   //
   uint32_t total_ulsch_pdus_rx;
   
+  
+  /// MAC agent-related stats
+  /// total number of scheduling decisions
+  int sched_decisions;
+  /// missed deadlines
+  int missed_deadlines;
+
 } eNB_STATS;
 /*! \brief eNB statistics for the connected UEs*/
 typedef struct {
diff --git a/openair2/LAYER2/MAC/eNB_agent_scheduler_dlsch_ue_remote.c b/openair2/LAYER2/MAC/eNB_agent_scheduler_dlsch_ue_remote.c
index 90181f0e440dfb658c75ac065cccc63caaebf484..ad8b1305846b66acaa5d8f4be772258acc9e6f38 100644
--- a/openair2/LAYER2/MAC/eNB_agent_scheduler_dlsch_ue_remote.c
+++ b/openair2/LAYER2/MAC/eNB_agent_scheduler_dlsch_ue_remote.c
@@ -39,6 +39,9 @@
 
 #include "eNB_agent_scheduler_dlsch_ue_remote.h"
 
+#include "LAYER2/MAC/defs.h"
+#include "LAYER2/MAC/extern.h"
+
 struct DlMacConfigHead queue_head;
 
 int queue_initialized = 0;
@@ -46,10 +49,15 @@ int queue_initialized = 0;
 void schedule_ue_spec_remote(mid_t mod_id, uint32_t frame, uint32_t subframe,
 			     int *mbsfn_flag, Protocol__ProgranMessage **dl_info) {
 
+
+  eNB_MAC_INST *eNB;
+
   if (!queue_initialized) {
     TAILQ_INIT(&queue_head);
     queue_initialized = 1;
   }
+
+  eNB = &eNB_mac_inst[mod_id]; 
   
   dl_mac_config_element_t *dl_config_elem;
 
@@ -66,12 +74,15 @@ void schedule_ue_spec_remote(mid_t mod_id, uint32_t frame, uint32_t subframe,
       TAILQ_REMOVE(&queue_head, queue_head.tqh_first, configs);
       *dl_info = dl_config_elem->dl_info;
       free(dl_config_elem);
+      eNB->eNB_stats[mod_id].sched_decisions++;
       return;
     } else if (diff < 0) { //previous subframe , delete message and free memory
       LOG_D(MAC, "Found a decision for a previous subframe in the queue. Let's get rid of it\n");
       TAILQ_REMOVE(&queue_head, queue_head.tqh_first, configs);
       enb_agent_mac_destroy_dl_config(dl_config_elem->dl_info);
       free(dl_config_elem);
+      eNB->eNB_stats[mod_id].sched_decisions++;
+      eNB->eNB_stats[mod_id].missed_deadlines++;
     } else { // next subframe, nothing to do now
       LOG_D(MAC, "Found a decision for a future subframe in the queue. Nothing to do now\n");
       enb_agent_mac_create_empty_dl_config(mod_id, dl_info);
@@ -86,12 +97,15 @@ void schedule_ue_spec_remote(mid_t mod_id, uint32_t frame, uint32_t subframe,
     diff = get_sf_difference(mod_id, (*dl_info)->dl_mac_config_msg->sfn_sf);
     if (diff == 0) { // Got a command for this sfn_sf
       LOG_D(MAC, "Found a decision for this subframe pending. Let's use it\n");
+      eNB->eNB_stats[mod_id].sched_decisions++;
       return;
     } else if (diff < 0) {
       LOG_D(MAC, "Found a decision for a previous subframe. Let's get rid of it\n");
       enb_agent_mac_destroy_dl_config(*dl_info);
       *dl_info = NULL;
       enb_agent_get_pending_dl_mac_config(mod_id, dl_info);
+      eNB->eNB_stats[mod_id].sched_decisions++;
+      eNB->eNB_stats[mod_id].missed_deadlines++;
     } else { // Intended for future subframe. Store it in local cache
       LOG_D(MAC, "Found a decision for a future subframe in the queue. Let's store it in the cache\n");
       dl_mac_config_element_t *e = malloc(sizeof(dl_mac_config_element_t));
diff --git a/openair2/LAYER2/openair2_proc.c b/openair2/LAYER2/openair2_proc.c
index e09adaea8c595c8b211c3af56306aa8f6cb5891f..4556bafeecd27f3ee2d3406e492d59fcba1a911b 100644
--- a/openair2/LAYER2/openair2_proc.c
+++ b/openair2/LAYER2/openair2_proc.c
@@ -122,11 +122,13 @@ int dump_eNB_l2_stats(char *buffer, int length)
     for (CC_id=0 ; CC_id < MAX_NUM_CCs; CC_id++) {
       eNB->eNB_stats[CC_id].dlsch_bitrate= 0;
 
-      len += sprintf(&buffer[len],"eNB %d CC %d Frame %d: Active UEs %d, Available PRBs %d, nCCE %d \n",
+      len += sprintf(&buffer[len],"eNB %d CC %d Frame %d: Active UEs %d, Available PRBs %d, nCCE %d, Scheduling decisions %d, Missed Deadlines %d \n",
                      eNB_id, CC_id, eNB->frame,
                      eNB->eNB_stats[CC_id].num_dlactive_UEs,
                      eNB->eNB_stats[CC_id].available_prbs,
-                     eNB->eNB_stats[CC_id].available_ncces);
+                     eNB->eNB_stats[CC_id].available_ncces,
+		     eNB->eNB_stats[CC_id].sched_decisions,
+		     eNB->eNB_stats[CC_id].missed_deadlines);
       
       len += sprintf(&buffer[len],"BCCH , NB_TX_MAC = %d, transmitted bytes (TTI %d, total %d) MCS (TTI %d)\n",
 		     eNB->eNB_stats[CC_id].total_num_bcch_pdu,