diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt
index 87627cfe4a2ad9063481c7ea5d3e9b42a716b1f9..1691f4517e1f35b3f81eedacd0bdb0c9f87c6c53 100644
--- a/common/utils/T/T_messages.txt
+++ b/common/utils/T/T_messages.txt
@@ -1,4 +1,12 @@
 #PHY logs
+ID = ENB_UL_TICK
+    DESC = eNodeB uplink tick - one tick per ms at start of uplink processing
+    GROUP = ALL:PHY:GRAPHIC
+    FORMAT = int,eNB_ID : int,frame : int,subframe
+ID = ENB_DL_TICK
+    DESC = eNodeB downlink tick - one tick per ms at start of downlink processing
+    GROUP = ALL:PHY:GRAPHIC
+    FORMAT = int,eNB_ID : int,frame : int,subframe
 ID = ENB_INPUT_SIGNAL
     DESC = eNodeB received signal in the time domain for a duration of 1ms
     GROUP = ALL:PHY:GRAPHIC:HEAVY
diff --git a/common/utils/T/tracer/enb.c b/common/utils/T/tracer/enb.c
index 974db118ca9f5c36478cb40dc3109a3f1fe97de6..c3172a612f17883dce8fc31233edb7f0f118ddd7 100644
--- a/common/utils/T/tracer/enb.c
+++ b/common/utils/T/tracer/enb.c
@@ -120,9 +120,9 @@ static void enb_main_gui(gui *g, event_handler *h, void *database)
   logger *input_signal_log;
   view *input_signal_view;
   widget *timeline_plot;
-  logger *input_signal_timelog;
-  view *input_signal_timeview;
-  view *input_signal_subview;
+  logger *timelog;
+  view *timeview;
+  view *subview;
   int i;
 
   main_window = new_toplevel_window(g, 800, 600, "eNB tracer");
@@ -144,19 +144,35 @@ static void enb_main_gui(gui *g, event_handler *h, void *database)
       g, input_signal_plot, new_color(g, "#0c0c72"));
   logger_add_view(input_signal_log, input_signal_view);
 
+  /* downlink UE DCIs */
   line = new_container(g, HORIZONTAL);
   widget_add_child(g, top_container, line, -1);
-  timeline_plot = new_timeline(g, 512, 16, 5);
+  timeline_plot = new_timeline(g, 512, 4, 5);
   widget_add_child(g, line, timeline_plot, -1);
   container_set_child_growable(g, line, timeline_plot, 1);
-  for (i = 0; i < 16; i++)
+  for (i = 0; i < 4; i++)
     timeline_set_subline_background_color(g, timeline_plot, i,
         new_color(g, i & 1 ? "#ddd" : "#eee"));
-  input_signal_timelog = new_timelog(h, database, "ENB_INPUT_SIGNAL");
-  input_signal_timeview = new_view_time(3600, 10, g, timeline_plot);
-  input_signal_subview = new_subview_time(input_signal_timeview,
-      0, FOREGROUND_COLOR);
-  logger_add_view(input_signal_timelog, input_signal_subview);
+  timelog = new_timelog(h, database, "ENB_DL_TICK");
+  timeview = new_view_time(3600, 10, g, timeline_plot);
+  subview = new_subview_time(timeview, 0, FOREGROUND_COLOR);
+  logger_add_view(timelog, subview);
+  widget_add_child(g, line, new_label(g,"DL TICK/DCI/ACK/NACK "), 0);
+
+  /* uplink UE DCIs */
+  line = new_container(g, HORIZONTAL);
+  widget_add_child(g, top_container, line, -1);
+  timeline_plot = new_timeline(g, 512, 4, 5);
+  widget_add_child(g, line, timeline_plot, -1);
+  container_set_child_growable(g, line, timeline_plot, 1);
+  for (i = 0; i < 4; i++)
+    timeline_set_subline_background_color(g, timeline_plot, i,
+        new_color(g, i & 1 ? "#ddd" : "#eee"));
+  timelog = new_timelog(h, database, "ENB_UL_TICK");
+  timeview = new_view_time(3600, 10, g, timeline_plot);
+  subview = new_subview_time(timeview, 0, FOREGROUND_COLOR);
+  logger_add_view(timelog, subview);
+  widget_add_child(g, line, new_label(g,"UL TICK/DCI/ACK/NACK "), 0);
 }
 
 int main(int n, char **v)
@@ -216,6 +232,10 @@ int main(int n, char **v)
 
   enb_main_gui(g, h, database);
 
+  on_off(database, "ENB_INPUT_SIGNAL", is_on, 1);
+  on_off(database, "ENB_UL_TICK", is_on, 1);
+  on_off(database, "ENB_DL_TICK", is_on, 1);
+
   for (i = 0; i < on_off_n; i++)
     on_off(database, on_off_name[i], is_on, on_off_action[i]);
 
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index 7bf32eba487ce0bbbed15e41a7a2490654a7e431..2566adc4c676f685952f3d6e0b996013fcbd75f2 100755
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -651,6 +651,8 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
         phy_vars_eNB->Mod_id, frame, subframe);
 #endif
 
+  T(T_ENB_DL_TICK, T_INT(phy_vars_eNB->Mod_id), T_INT(frame), T_INT(subframe));
+
   for (i=0; i<NUMBER_OF_UE_MAX; i++) {
     // If we've dropped the UE, go back to PRACH mode for this UE
     //#if !defined(EXMIMO_IOT)
@@ -2443,6 +2445,8 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
   LOG_D(PHY,"[eNB %d] Frame %d: Doing phy_procedures_eNB_RX(%d)\n",phy_vars_eNB->Mod_id,frame, subframe);
 #endif
 
+  T(T_ENB_UL_TICK, T_INT(phy_vars_eNB->Mod_id), T_INT(frame), T_INT(subframe));
+
   T(T_ENB_INPUT_SIGNAL, T_INT(phy_vars_eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(0),
     T_BUFFER(&phy_vars_eNB->lte_eNB_common_vars.rxdata[0][0][subframe*phy_vars_eNB->lte_frame_parms.samples_per_tti],
              phy_vars_eNB->lte_frame_parms.samples_per_tti * 4));