diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt
index 05c08085c62558544725b4ad4580c663f17c9de0..050c48d0a9c78c99ce24a33bb19db25708f2397f 100644
--- a/common/utils/T/T_messages.txt
+++ b/common/utils/T/T_messages.txt
@@ -95,6 +95,10 @@ ID = ENB_MAC_UE_UL_CE
     DESC = MAC uplink UE received control element
     GROUP = ALL:MAC:ENB
     FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,ce
+ID = ENB_MAC_UE_DL_PDU_WITH_DATA
+    DESC = MAC downlink PDU for an UE
+    GROUP = ALL:MAC:ENB
+    FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : buffer,data
 
 #RLC logs
 ID = ENB_RLC_DL
diff --git a/common/utils/T/tracer/event_selector.c b/common/utils/T/tracer/event_selector.c
index a03846c0566a98faef440f7eb991793209d676e4..2b6cfd878de99faf5944f6a32511c883f545ae96 100644
--- a/common/utils/T/tracer/event_selector.c
+++ b/common/utils/T/tracer/event_selector.c
@@ -34,11 +34,14 @@ static void scroll(void *private, gui *g,
   int number_of_lines;
   int new_line;
   int inc;
+  int *d = notification_data;
+  int key_modifiers = *d;
 
   textlist_state(g, w, &visible_lines, &start_line, &number_of_lines);
   inc = 10;
   if (inc > visible_lines - 2) inc = visible_lines - 2;
   if (inc < 1) inc = 1;
+  if (key_modifiers & KEY_CONTROL) inc = 1;
   if (!strcmp(notification, "scrollup")) inc = -inc;
 
   new_line = start_line + inc;
diff --git a/common/utils/T/tracer/gui/gui.h b/common/utils/T/tracer/gui/gui.h
index 673514f138ec88c58fa4a88b6487cbb3db9f0578..27e6603042fa24d928933031d822609b5115f084 100644
--- a/common/utils/T/tracer/gui/gui.h
+++ b/common/utils/T/tracer/gui/gui.h
@@ -83,8 +83,8 @@ int new_color(gui *gui, char *color);
 /* notifications */
 /* known notifications:
  * - textlist:
- *      - scrollup   { void *: NULL }
- *      - scrolldown { void *: NULL }
+ *      - scrollup   { int: key_modifiers }
+ *      - scrolldown { int: key_modifiers }
  *      - click      { int [2]: line, button }
  * - label:
  *      - click      { int: button } (if enabled)
diff --git a/common/utils/T/tracer/gui/textlist.c b/common/utils/T/tracer/gui/textlist.c
index 896cba5b9e8b6949321af0789214780552fede12..e919b7c0a51fcc6b14cd9449388e99bd7773bb2d 100644
--- a/common/utils/T/tracer/gui/textlist.c
+++ b/common/utils/T/tracer/gui/textlist.c
@@ -54,11 +54,11 @@ static void button(gui *_g, widget *_this, int x, int y,
   x -= this->common.x;
   /* scroll up */
   if (button == 4 && up == 0) {
-    gui_notify(g, "scrollup", _this, NULL);
+    gui_notify(g, "scrollup", _this, &key_modifiers);
   }
   /* scroll down */
   if (button == 5 && up == 0) {
-    gui_notify(g, "scrolldown", _this, NULL);
+    gui_notify(g, "scrolldown", _this, &key_modifiers);
   }
   /* button 1/2/3 click */
   if (button >= 1 && button <= 3 && up == 0) {
diff --git a/common/utils/T/tracer/view/textlist.c b/common/utils/T/tracer/view/textlist.c
index 5227900e4ef36d241b8fd62c2233d0d7ba9a2620..b89314191c9728ee763d6eacda22653ab05e53f5 100644
--- a/common/utils/T/tracer/view/textlist.c
+++ b/common/utils/T/tracer/view/textlist.c
@@ -89,6 +89,8 @@ static void scroll(void *private, gui *g,
   int number_of_lines;
   int new_line;
   int inc;
+  int *d = notification_data;
+  int key_modifiers = *d;
 
   if (pthread_mutex_lock(&this->lock)) abort();
 
@@ -96,6 +98,7 @@ static void scroll(void *private, gui *g,
   inc = 10;
   if (inc > visible_lines - 2) inc = visible_lines - 2;
   if (inc < 1) inc = 1;
+  if (key_modifiers & KEY_CONTROL) inc = 1;
   if (!strcmp(notification, "scrollup")) inc = -inc;
 
   new_line = start_line + inc;
@@ -122,7 +125,19 @@ static void click(void *private, gui *g,
 
   if (pthread_mutex_lock(&this->lock)) abort();
 
-  if (button == 1) this->autoscroll = 1 - this->autoscroll;
+  if (button == 1) this->autoscroll = 1;
+  if (button == 3) this->autoscroll = 0;
+
+  if (this->autoscroll) {
+    int visible_lines, start_line, number_of_lines;
+    textlist_state(this->g, this->w, &visible_lines, &start_line,
+        &number_of_lines);
+    start_line = number_of_lines - visible_lines;
+    if (start_line < 0) start_line = 0;
+    textlist_set_start_line(this->g, this->w, start_line);
+    /* this call is not necessary, but if things change in textlist... */
+    widget_dirty(this->g, this->w);
+  }
 
   if (pthread_mutex_unlock(&this->lock)) abort();
 }
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
index 81e1df4dc52457d55724e3ab378951ec3270e916..990542a771a38d5f4c7463069789b9c40ef9d69e 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
@@ -1110,6 +1110,9 @@ schedule_ue_spec(
                   module_idP, CC_id, frameP, UE_RNTI(module_idP,UE_id), TBS);
           }
 
+          T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(rnti), T_INT(frameP), T_INT(subframeP),
+            T_INT(harq_pid), T_BUFFER(UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0], TBS));
+
           aggregation = process_ue_cqi(module_idP,UE_id);
           UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid] = nb_rb;