diff --git a/ci-scripts/xml_files/container_sa_b200_quectel.xml b/ci-scripts/xml_files/container_sa_b200_quectel.xml
index 121b8367690bb7acfd6fcad6a7ed7f54d2bcddde..0296ecfe93e395aad210aeda7e7f97a8d644f2c7 100644
--- a/ci-scripts/xml_files/container_sa_b200_quectel.xml
+++ b/ci-scripts/xml_files/container_sa_b200_quectel.xml
@@ -111,7 +111,7 @@
   <testCase id="000002">
     <class>IdleSleep</class>
     <desc>Sleep</desc>
-    <idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
+    <idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
   </testCase>
 
 
@@ -168,14 +168,14 @@
     <class>Custom_Command</class>
     <desc>Trigger Reestablishment</desc>
     <node>ofqot</node>
-    <command>echo ci force_reestab | nc -N 192.168.68.194 9090 | grep -E 'force-remove UE RNTI [0-9a-f]{4} from RLC to trigger reestablishment'</command>
+    <command>echo ci force_reestab | nc -N 192.168.68.194 9090 | grep -E 'Reset RLC counters of UE RNTI [0-9a-f]{4} to trigger reestablishment'</command>
     <command_fail>yes</command_fail>
   </testCase>
   <testCase id="060002">
     <class>Custom_Command</class>
     <desc>Verify Reestablishment</desc>
     <node>ofqot</node>
-    <command>echo ci get_reestab_count | nc -N 192.168.68.194 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1 reconf_after_reestab 1'</command>
+    <command>echo ci get_reestab_count | nc -N 192.168.68.194 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1'</command>
     <command_fail>yes</command_fail>
   </testCase>
 
diff --git a/ci-scripts/xml_files/container_sa_sc_b200_quectel.xml b/ci-scripts/xml_files/container_sa_sc_b200_quectel.xml
index 0d4dd8f27ee281345fd99463303aeb36017baa77..d603b3f1eab9ec73de5e0c55d8f1904ecf970870 100644
--- a/ci-scripts/xml_files/container_sa_sc_b200_quectel.xml
+++ b/ci-scripts/xml_files/container_sa_sc_b200_quectel.xml
@@ -105,7 +105,7 @@
   <testCase id="200002">
     <class>IdleSleep</class>
     <desc>Sleep</desc>
-    <idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
+    <idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
   </testCase>
 
 
@@ -162,14 +162,14 @@
     <class>Custom_Command</class>
     <desc>Trigger Reestablishment</desc>
     <node>ofqot</node>
-    <command>echo ci force_reestab | nc -N 192.168.68.194 9090 | grep -E 'force-remove UE RNTI [0-9a-f]{4} from RLC to trigger reestablishment'</command>
+    <command>echo ci force_reestab | nc -N 192.168.68.194 9090 | grep -E 'Reset RLC counters of UE RNTI [0-9a-f]{4} to trigger reestablishment'</command>
     <command_fail>yes</command_fail>
   </testCase>
   <testCase id="260002">
     <class>Custom_Command</class>
     <desc>Verify Reestablishment</desc>
     <node>ofqot</node>
-    <command>echo ci get_reestab_count | nc -N 192.168.68.194 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1 reconf_after_reestab 1'</command>
+    <command>echo ci get_reestab_count | nc -N 192.168.68.194 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1'</command>
     <command_fail>yes</command_fail>
   </testCase>
 
diff --git a/common/utils/telnetsrv/telnetsrv_ci.c b/common/utils/telnetsrv/telnetsrv_ci.c
index 3f4930d02bdaa3e1c7f6dc4d335bf6e757d27be8..2d7019b00edad1d9f128b02f5e8cb6385867b66e 100644
--- a/common/utils/telnetsrv/telnetsrv_ci.c
+++ b/common/utils/telnetsrv/telnetsrv_ci.c
@@ -28,15 +28,17 @@
 #include <stdarg.h>
 
 #include "openair2/RRC/NR/rrc_gNB_UE_context.h"
-#include "openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h"
 #include "openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h"
+#include "openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h"
+#include "openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.h"
+#include "openair2/LAYER2/nr_rlc/nr_rlc_entity_am.h"
 
 #define TELNETSERVERCODE
 #include "telnetsrv.h"
 
 #define ERROR_MSG_RET(mSG, aRGS...) do { prnt(mSG, ##aRGS); return 1; } while (0)
 
-static int get_single_ue_rnti(void)
+static int get_single_ue_rnti_mac(void)
 {
   NR_UE_info_t *ue = NULL;
   UE_iterator(RC.nrmac[0]->UE_info.list, it) {
@@ -48,11 +50,6 @@ static int get_single_ue_rnti(void)
   if (!ue)
     return -1;
 
-  // verify it exists in RRC as well
-  rrc_gNB_ue_context_t *rrcue = rrc_gNB_get_ue_context_by_rnti(RC.nrrrc[0], ue->rnti);
-  if (!rrcue)
-    return -1;
-
   return ue->rnti;
 }
 
@@ -61,7 +58,7 @@ int get_single_rnti(char *buf, int debug, telnet_printfunc_t prnt)
   if (buf)
     ERROR_MSG_RET("no parameter allowed\n");
 
-  int rnti = get_single_ue_rnti();
+  int rnti = get_single_ue_rnti_mac();
   if (rnti < 1)
     ERROR_MSG_RET("different number of UEs\n");
 
@@ -71,23 +68,32 @@ int get_single_rnti(char *buf, int debug, telnet_printfunc_t prnt)
 
 int get_reestab_count(char *buf, int debug, telnet_printfunc_t prnt)
 {
+  if (!RC.nrrrc)
+    ERROR_MSG_RET("no RRC present, cannot list counts\n");
+  rrc_gNB_ue_context_t *ue = NULL;
   int rnti = -1;
   if (!buf) {
-    rnti = get_single_ue_rnti();
-    if (rnti < 1)
-      ERROR_MSG_RET("no UE found\n");
+    rrc_gNB_ue_context_t *l = NULL;
+    int n = 0;
+    RB_FOREACH(l, rrc_nr_ue_tree_s, &RC.nrrrc[0]->rrc_ue_head) {
+      if (ue == NULL) ue = l;
+      n++;
+    }
+    if (!ue)
+      ERROR_MSG_RET("could not find any UE in RRC\n");
+    if (n > 1)
+      ERROR_MSG_RET("more than one UE in RRC present\n");
   } else {
     rnti = strtol(buf, NULL, 16);
     if (rnti < 1 || rnti >= 0xfffe)
       ERROR_MSG_RET("RNTI needs to be [1,0xfffe]\n");
+    ue = rrc_gNB_get_ue_context_by_rnti(RC.nrrrc[0], rnti);
+    if (!ue)
+      ERROR_MSG_RET("could not find UE with RNTI %04x in RRC\n");
   }
 
-  rrc_gNB_ue_context_t *ue = rrc_gNB_get_ue_context_by_rnti(RC.nrrrc[0], rnti);
-  if (!ue)
-    ERROR_MSG_RET("could not find UE with RNTI %04x\n", rnti);
-
   prnt("UE RNTI %04x reestab %d reconf_after_reestab %d\n",
-       rnti,
+       ue->ue_context.rnti,
        ue->ue_context.ue_reestablishment_counter,
        ue->ue_context.ue_reconfiguration_after_reestablishment_counter);
   return 0;
@@ -95,9 +101,11 @@ int get_reestab_count(char *buf, int debug, telnet_printfunc_t prnt)
 
 int trigger_reestab(char *buf, int debug, telnet_printfunc_t prnt)
 {
+  if (!RC.nrmac)
+    ERROR_MSG_RET("no MAC/RLC present, cannot trigger reestablishment\n");
   int rnti = -1;
   if (!buf) {
-    rnti = get_single_ue_rnti();
+    rnti = get_single_ue_rnti_mac();
     if (rnti < 1)
       ERROR_MSG_RET("no UE found\n");
   } else {
@@ -106,13 +114,9 @@ int trigger_reestab(char *buf, int debug, telnet_printfunc_t prnt)
       ERROR_MSG_RET("RNTI needs to be [1,0xfffe]\n");
   }
 
-  // verify it exists in RRC as well
-  rrc_gNB_ue_context_t *rrcue = rrc_gNB_get_ue_context_by_rnti(RC.nrrrc[0], rnti);
-  if (!rrcue)
-    ERROR_MSG_RET("could not find UE with RNTI %04x\n", rnti);
+  nr_rlc_test_trigger_reestablishment(rnti);
 
-  nr_rlc_remove_ue(rnti);
-  prnt("force-remove UE RNTI %04x from RLC to trigger reestablishment\n", rnti);
+  prnt("Reset RLC counters of UE RNTI %04x to trigger reestablishment\n", rnti);
   return 0;
 }
 
diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c b/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
index 53e2aca29ed1bfa8588f1dd637d3082ddea63f76..b6f1065d6c59839c65eaeb997f0b732aee2846a4 100644
--- a/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
+++ b/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
@@ -1010,6 +1010,24 @@ rlc_op_status_t rrc_rlc_remove_ue (const protocol_ctxt_t* const x)
   return RLC_OP_STATUS_OK;
 }
 
+/* This function is for testing purposes. At least on a COTS UE, it will
+ * trigger a reestablishment. */
+void nr_rlc_test_trigger_reestablishment(int rnti)
+{
+  nr_rlc_manager_lock(nr_rlc_ue_manager);
+  nr_rlc_ue_t *ue = nr_rlc_manager_get_ue(nr_rlc_ue_manager, rnti);
+  if (ue == NULL) {
+    nr_rlc_manager_unlock(nr_rlc_ue_manager);
+    LOG_E(RLC, "Cannot find RLC entity for UE %04x\n", rnti);
+    return;
+  }
+  /* we simply assume the SRB exists, because the scheduler creates it as soon
+   * as the UE context is created. */
+  nr_rlc_entity_t *ent = ue->srb[0];
+  ent->reestablishment(ent);
+  nr_rlc_manager_unlock(nr_rlc_ue_manager);
+}
+
 void nr_rlc_tick(int frame, int subframe)
 {
   if (frame != nr_rlc_current_time_last_frame ||
diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h b/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h
index 3b4bce717637768b9a279cfac1a0d6cb7ba6b530..051b6ab078b6b30829508249487bb6abdd0ff530 100644
--- a/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h
+++ b/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h
@@ -44,6 +44,9 @@ void nr_rlc_add_drb(int rnti, int drb_id, const NR_RLC_BearerConfig_t *rlc_Beare
 
 void nr_rlc_remove_ue(int rnti);
 
+/* test function for CI to trigger reestablishments */
+void nr_rlc_test_trigger_reestablishment(int rnti);
+
 int nr_rlc_get_available_tx_space(
   const rnti_t            rntiP,
   const logical_chan_id_t channel_idP);