diff --git a/common/utils/T/tracer/enb.c b/common/utils/T/tracer/enb.c
index ee35464ba669c5306c1176fd57d6f7c8d12e911e..08809d60dc61a77add11753ed011c81502f414d0 100644
--- a/common/utils/T/tracer/enb.c
+++ b/common/utils/T/tracer/enb.c
@@ -10,6 +10,7 @@
 #include "logger/logger.h"
 #include "view/view.h"
 #include "gui/gui.h"
+#include "filter/filter.h"
 #include "utils.h"
 #include "../T_defs.h"
 #include "event_selector.h"
@@ -173,6 +174,178 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
   subview = new_subview_time(timeview, 7, new_color(g, "#f22"), 3600*1000);
   logger_add_view(timelog, subview);
 
+  /* harq processes' ticktime view */
+  widget_add_child(g, top_container,
+      new_label(g,"DL/UL HARQ (x8) "), -1);
+  line = new_container(g, HORIZONTAL);
+  widget_add_child(g, top_container, line, -1);
+  timeline_plot = new_timeline(g, 512, 2*8+2, 3);
+  widget_add_child(g, line, timeline_plot, -1);
+  container_set_child_growable(g, line, timeline_plot, 1);
+  for (i = 0; i < 2*8+2; i++)
+    timeline_set_subline_background_color(g, timeline_plot, i,
+        new_color(g, i==0 || i==9 ? "#ddd" : (i%9)&1 ? "#e6e6e6" : "#eee"));
+  timeview = new_view_ticktime(10, g, timeline_plot);
+  ticktime_set_tick(timeview,
+      new_ticklog(h, database, "ENB_MASTER_TICK", "frame", "subframe"));
+  /* tick */
+  timelog = new_ticklog(h, database, "ENB_MASTER_TICK", "frame", "subframe");
+  /* tick on DL view */
+  subview = new_subview_ticktime(timeview, 0, new_color(g,"#bbb"), 3600*1000);
+  logger_add_view(timelog, subview);
+  /* tick on UL view */
+  subview = new_subview_ticktime(timeview, 9, new_color(g,"#bbb"), 3600*1000);
+  logger_add_view(timelog, subview);
+  /* DL harq pids */
+  for (i = 0; i < 8; i++) {
+    timelog = new_ticklog(h, database, "ENB_DLSCH_UE_DCI",
+        "frame", "subframe");
+    subview = new_subview_ticktime(timeview, i+1,
+        new_color(g,"#55f"), 3600*1000);
+    logger_add_view(timelog, subview);
+    /* filter is "harq_pid == i && UE_id == 0 && eNB_id == 0 */
+    logger_set_filter(timelog,
+        filter_and(
+          filter_eq(
+            filter_evarg(database, "ENB_DLSCH_UE_DCI", "harq_pid"),
+            filter_int(i)),
+          filter_and(
+            filter_eq(
+              filter_evarg(database, "ENB_DLSCH_UE_DCI", "UE_id"),
+              filter_int(0)),
+            filter_eq(
+              filter_evarg(database, "ENB_DLSCH_UE_DCI", "eNB_ID"),
+              filter_int(0)))));
+  }
+  /* DL ACK */
+  for (i = 0; i < 8; i++) {
+    timelog = new_ticklog(h, database, "ENB_DLSCH_UE_ACK",
+        "frame", "subframe");
+    subview = new_subview_ticktime(timeview, i+1,
+        new_color(g,"#282"), 3600*1000);
+    logger_add_view(timelog, subview);
+    /* filter is "harq_pid == i && UE_id == 0 && eNB_id == 0 */
+    logger_set_filter(timelog,
+        filter_and(
+          filter_eq(
+            filter_evarg(database, "ENB_DLSCH_UE_ACK", "harq_pid"),
+            filter_int(i)),
+          filter_and(
+            filter_eq(
+              filter_evarg(database, "ENB_DLSCH_UE_ACK", "UE_id"),
+              filter_int(0)),
+            filter_eq(
+              filter_evarg(database, "ENB_DLSCH_UE_ACK", "eNB_ID"),
+              filter_int(0)))));
+  }
+  /* DL NACK */
+  for (i = 0; i < 8; i++) {
+    timelog = new_ticklog(h, database, "ENB_DLSCH_UE_NACK",
+        "frame", "subframe");
+    subview = new_subview_ticktime(timeview, i+1,
+        new_color(g,"#f22"), 3600*1000);
+    logger_add_view(timelog, subview);
+    /* filter is "harq_pid == i && UE_id == 0 && eNB_id == 0 */
+    logger_set_filter(timelog,
+        filter_and(
+          filter_eq(
+            filter_evarg(database, "ENB_DLSCH_UE_NACK", "harq_pid"),
+            filter_int(i)),
+          filter_and(
+            filter_eq(
+              filter_evarg(database, "ENB_DLSCH_UE_NACK", "UE_id"),
+              filter_int(0)),
+            filter_eq(
+              filter_evarg(database, "ENB_DLSCH_UE_NACK", "eNB_ID"),
+              filter_int(0)))));
+  }
+  /* UL harq pids */
+  for (i = 0; i < 8; i++) {
+    /* first transmission */
+    timelog = new_ticklog(h, database, "ENB_ULSCH_UE_DCI",
+        "frame", "subframe");
+    subview = new_subview_ticktime(timeview, i+9+1,
+        new_color(g,"#55f"), 3600*1000);
+    logger_add_view(timelog, subview);
+    /* filter is "harq_pid == i && UE_id == 0 && eNB_id == 0 */
+    logger_set_filter(timelog,
+        filter_and(
+          filter_eq(
+            filter_evarg(database, "ENB_ULSCH_UE_DCI", "harq_pid"),
+            filter_int(i)),
+          filter_and(
+            filter_eq(
+              filter_evarg(database, "ENB_ULSCH_UE_DCI", "UE_id"),
+              filter_int(0)),
+            filter_eq(
+              filter_evarg(database, "ENB_ULSCH_UE_DCI", "eNB_ID"),
+              filter_int(0)))));
+    /* retransmission */
+    timelog = new_ticklog(h, database, "ENB_ULSCH_UE_NO_DCI_RETRANSMISSION",
+        "frame", "subframe");
+    subview = new_subview_ticktime(timeview, i+9+1,
+        new_color(g,"#99f"), 3600*1000);
+    logger_add_view(timelog, subview);
+    /* filter is "harq_pid == i && UE_id == 0 && eNB_id == 0 */
+    logger_set_filter(timelog,
+        filter_and(
+          filter_eq(
+            filter_evarg(database, "ENB_ULSCH_UE_NO_DCI_RETRANSMISSION",
+                "harq_pid"),
+            filter_int(i)),
+          filter_and(
+            filter_eq(
+              filter_evarg(database, "ENB_ULSCH_UE_NO_DCI_RETRANSMISSION",
+                  "UE_id"),
+              filter_int(0)),
+            filter_eq(
+              filter_evarg(database, "ENB_ULSCH_UE_NO_DCI_RETRANSMISSION",
+                  "eNB_ID"),
+              filter_int(0)))));
+  }
+  /* UL ACK */
+  for (i = 0; i < 8; i++) {
+    timelog = new_ticklog(h, database, "ENB_ULSCH_UE_ACK",
+        "frame", "subframe");
+    subview = new_subview_ticktime(timeview, i+9+1,
+        new_color(g,"#282"), 3600*1000);
+    logger_add_view(timelog, subview);
+    /* filter is "harq_pid == i && UE_id == 0 && eNB_id == 0 */
+    logger_set_filter(timelog,
+        filter_and(
+          filter_eq(
+            filter_evarg(database, "ENB_ULSCH_UE_ACK", "harq_pid"),
+            filter_int(i)),
+          filter_and(
+            filter_eq(
+              filter_evarg(database, "ENB_ULSCH_UE_ACK", "UE_id"),
+              filter_int(0)),
+            filter_eq(
+              filter_evarg(database, "ENB_ULSCH_UE_ACK", "eNB_ID"),
+              filter_int(0)))));
+  }
+  /* UL NACK */
+  for (i = 0; i < 8; i++) {
+    timelog = new_ticklog(h, database, "ENB_ULSCH_UE_NACK",
+        "frame", "subframe");
+    subview = new_subview_ticktime(timeview, i+9+1,
+        new_color(g,"#f22"), 3600*1000);
+    logger_add_view(timelog, subview);
+    /* filter is "harq_pid == i && UE_id == 0 && eNB_id == 0 */
+    logger_set_filter(timelog,
+        filter_and(
+          filter_eq(
+            filter_evarg(database, "ENB_ULSCH_UE_NACK", "harq_pid"),
+            filter_int(i)),
+          filter_and(
+            filter_eq(
+              filter_evarg(database, "ENB_ULSCH_UE_NACK", "UE_id"),
+              filter_int(0)),
+            filter_eq(
+              filter_evarg(database, "ENB_ULSCH_UE_NACK", "eNB_ID"),
+              filter_int(0)))));
+  }
+
   /* phy/mac/rlc/pdcp/rrc textlog */
   line = new_container(g, HORIZONTAL);
   widget_add_child(g, top_container, line, -1);
@@ -346,6 +519,7 @@ int main(int n, char **v)
   on_off(database, "ENB_ULSCH_UE_NO_DCI_RETRANSMISSION", is_on, 1);
   on_off(database, "ENB_ULSCH_UE_ACK", is_on, 1);
   on_off(database, "ENB_ULSCH_UE_NACK", is_on, 1);
+  on_off(database, "ENB_MASTER_TICK", is_on, 1);
 
   on_off(database, "LEGACY_RRC_INFO", is_on, 1);
   on_off(database, "LEGACY_RRC_ERROR", is_on, 1);