diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c
index f7f4de1718ec94d818fcaa8de38296e22284a8d5..c399fb8447c96396c8678f46f4ec0cc16c5d80f3 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c
@@ -1236,6 +1236,8 @@ rlc_am_data_req (
     l_rlc_p->input_sdus[l_rlc_p->next_sdu_index].flags.no_new_sdu_segmented_in_last_pdu = 0;
     //l_rlc_p->input_sdus[l_rlc_p->next_sdu_index].li_index_for_discard = -1;
     l_rlc_p->next_sdu_index = (l_rlc_p->next_sdu_index + 1) % RLC_AM_SDU_CONTROL_BUFFER_SIZE;
+    if (l_rlc_p->channel_id <3)
+    {
     LOG_I(RLC, PROTOCOL_RLC_AM_CTXT_FMT" RLC_AM_DATA_REQ size %d Bytes,  NB SDU %d current_sdu_index=%d next_sdu_index=%d conf %d mui %d\n",
           PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,l_rlc_p),
           data_size,
@@ -1244,6 +1246,7 @@ rlc_am_data_req (
           l_rlc_p->next_sdu_index,
           conf,
           mui);
+    }
   } else {
 #if MESSAGE_CHART_GENERATOR
     mui         = ((struct rlc_am_data_req*) (sdu_pP->data))->mui;
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c
index b88d3214945374f911a5e966cba4b5d00f9a5dbe..4cef19253a3b7c46648b686d15e56880c9832c50 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c
@@ -375,33 +375,33 @@ mem_block_t* rlc_am_retransmit_get_am_segment(
 		li_bit_offset ^= 0x4;
 		li_jump_offset ^= 0x3;
 		data_size += sdu_size;
+		sdu_index = 1;
 
 		/* Loop on all original LIs */
-		while ((data_size < retx_so_start + 1) && (sdu_index + 1 < pdu_mngt->nb_sdus - 1))
+		while ((data_size < retx_so_start + 1) && (sdu_index < pdu_mngt->nb_sdus))
 		{
+			if (sdu_index < pdu_mngt->nb_sdus - 1)
+			{
+				temp_read = ((*pdu_original_header_p) << 8) | (*(pdu_original_header_p + 1));
+				sdu_size = RLC_AM_PDU_GET_LI(temp_read,li_bit_offset);
+				pdu_original_header_p += li_jump_offset;
+				li_bit_offset ^= 0x4;
+				li_jump_offset ^= 0x3;
+				data_size += sdu_size;
+			}
+			else
+			{
+				/* if retx_so_start is still not included then set data_size with full original PDU data size */
+				/* Set fi_start to FALSE in this case */
+				data_size = pdu_mngt->payload_size;
+			}
 			sdu_index ++;
-			temp_read = ((*pdu_original_header_p) << 8) | (*(pdu_original_header_p + 1));
-			sdu_size = RLC_AM_PDU_GET_LI(temp_read,li_bit_offset);
-			pdu_original_header_p += li_jump_offset;
-			li_bit_offset ^= 0x4;
-			li_jump_offset ^= 0x3;
-			data_size += sdu_size;
 		}
 
-		/* if retx_so_start is still not included then set data_size with full original PDU data size */
-		/* Set fi_start to FALSE in this case */
-		if ((data_size < retx_so_start + 1) && (sdu_index == pdu_mngt->nb_sdus - 1))
-		{
-			data_size = pdu_mngt->payload_size;
-			fi_start = FALSE;
-
-		}
-		else if (retx_so_start == data_size)
+		if (retx_so_start == data_size)
 		{
 			/* Set FI Start if retx_so_start = cumulated data size */
 			fi_start = TRUE;
-			/* jump to next SDU */
-			sdu_index ++;
 			/* there must be at least one SDU more */
 			AssertFatal (sdu_index < pdu_mngt->nb_sdus, "RLC AM Tx PDU Segment Error: sdu_index=%d nb_sdus=%d sn=%d LcId=%d !\n",
 					sdu_index,pdu_mngt->nb_sdus,sn,rlc_pP->channel_id);
@@ -419,6 +419,8 @@ mem_block_t* rlc_am_retransmit_get_am_segment(
 				/* It was the last LI, then set data_size to full original PDU size */
 				data_size = pdu_mngt->payload_size;
 			}
+			/* Go to next SDU */
+			sdu_index ++;
 		}
 		else if (retx_so_start != 0)
 		{
@@ -449,7 +451,6 @@ mem_block_t* rlc_am_retransmit_get_am_segment(
 		/* Now look for the end if it was not set previously */
 		if (*payload_sizeP == 0)
 		{
-			sdu_index ++;
 			sdu_segment_index ++;
 			while ((sdu_index < pdu_mngt->nb_sdus) && (data_size < retx_so_stop + 1))
 			{
@@ -489,16 +490,19 @@ mem_block_t* rlc_am_retransmit_get_am_segment(
 			sdu_segment_index = 0;
 			while ((sdu_segment_index < num_LIs_pdu_segment + 1) && (rlc_pP->nb_bytes_requested_by_mac > *payload_sizeP + RLC_AM_PDU_SEGMENT_HEADER_SIZE(sdu_segment_index)))
 			{
+				AssertFatal (sdus_segment_size[sdu_segment_index] > 0, "RLC AM Tx PDU Segment Data Error: EMpty LI index=%d numLISegment=%d numLIPDU=%d PDULength=%d SOStart=%d SOStop=%d sn=%d LcId=%d !\n",
+						sdu_segment_index,num_LIs_pdu_segment,pdu_mngt->nb_sdus - 1,pdu_mngt->payload_size,retx_so_start,retx_so_stop,sn,rlc_pP->channel_id);
+
 				/* Add next sdu_segment_index to data part */
-				if (RLC_AM_PDU_SEGMENT_HEADER_SIZE(sdu_segment_index) + sdus_segment_size[sdu_segment_index] <= rlc_pP->nb_bytes_requested_by_mac)
+				if (RLC_AM_PDU_SEGMENT_HEADER_SIZE(sdu_segment_index) + (*payload_sizeP) + sdus_segment_size[sdu_segment_index] <= rlc_pP->nb_bytes_requested_by_mac)
 				{
 					(*payload_sizeP) += sdus_segment_size[sdu_segment_index];
 				}
 				else
 				{
 					/* bound to available TBS size */
-					(*payload_sizeP) += (rlc_pP->nb_bytes_requested_by_mac - RLC_AM_PDU_SEGMENT_HEADER_SIZE(sdu_segment_index));
-					sdus_segment_size[sdu_segment_index] = rlc_pP->nb_bytes_requested_by_mac - RLC_AM_PDU_SEGMENT_HEADER_SIZE(sdu_segment_index);
+					sdus_segment_size[sdu_segment_index] = rlc_pP->nb_bytes_requested_by_mac - RLC_AM_PDU_SEGMENT_HEADER_SIZE(sdu_segment_index) - (*payload_sizeP);
+					(*payload_sizeP) += sdus_segment_size[sdu_segment_index];
 				}
 				header_segment_length = RLC_AM_PDU_SEGMENT_HEADER_SIZE(sdu_segment_index);
 				sdu_segment_index ++;
@@ -511,9 +515,9 @@ mem_block_t* rlc_am_retransmit_get_am_segment(
 		/* update retx_so_stop */
 		retx_so_stop = retx_so_start + (*payload_sizeP) - 1;
 
-		AssertFatal (retx_so_stop <= pdu_mngt->payload_size - 1,
-				"RLC AM Tx PDU Segment Data Error: retx_so_stop=%d OriginalPDUDataLength=%d SOStart=%d SegmentLength=%d numLISegment=%d sn=%d LcId=%d !\n",
-				retx_so_stop,pdu_mngt->payload_size,retx_so_start,*payload_sizeP,num_LIs_pdu_segment,sn,rlc_pP->channel_id);
+		AssertFatal ((retx_so_stop <= pdu_mngt->payload_size - 1) && (retx_so_stop - retx_so_start + 1 < pdu_mngt->payload_size),
+				"RLC AM Tx PDU Segment Data Error: retx_so_stop=%d OriginalPDUDataLength=%d SOStart=%d SegmentLength=%d numLISegment=%d numLIPDU=%d sn=%d LcId=%d !\n",
+				retx_so_stop,pdu_mngt->payload_size,retx_so_start,*payload_sizeP,num_LIs_pdu_segment,pdu_mngt->nb_sdus - 1,sn,rlc_pP->channel_id);
 
 		/* init FI End to FALSE if retx_so_stop is not end of PDU */
 		if (retx_so_stop != pdu_mngt->payload_size - 1)
@@ -526,8 +530,6 @@ mem_block_t* rlc_am_retransmit_get_am_segment(
 		data_size = 0;
 		for (int i = 0; i < num_LIs_pdu_segment + 1; i++)
 		{
-			AssertFatal (sdus_segment_size[i] > 0, "RLC AM Tx PDU Segment Data Error: EMpty LI index=%d numLISegment=%d numLIPDU=%d PDULength=%d SOStart=%d SOStop=%d sn=%d LcId=%d !\n",
-							i,num_LIs_pdu_segment,pdu_mngt->nb_sdus - 1,pdu_mngt->payload_size,retx_so_start,retx_so_stop,sn,rlc_pP->channel_id);
 			data_size += sdus_segment_size[i];
 			if ((retx_so_stop == data_size - 1) && (i < num_LIs_pdu_segment))
 			{
@@ -573,6 +575,7 @@ mem_block_t* rlc_am_retransmit_get_am_segment(
 				/* Retx size is reset in the calling function */
 				pdu_mngt->num_holes = 0;
 				pdu_mngt->retx_hole_index = 0;
+				pdu_mngt->nack_so_start = 0;
 			}
 		}
 		else
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c
index dfa62f03516e795859af63d72a99f2ffb610674f..50ed5dca5606652977bc3c38b88ffba6d2e98420 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c
@@ -384,8 +384,8 @@ rlc_am_receive_process_control_pdu(
 
 
     } else {
-      LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT" WARNING CONTROL PDU ACK SN OUT OF WINDOW\n",
-            PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP));
+      LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT" WARNING CONTROL PDU ACK SN %d OUT OF WINDOW vtA=%d vtS=%d\n",
+            PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP),ack_sn,rlc_pP->vt_a,rlc_pP->vt_s);
       status = FALSE;
     }
   } else {
@@ -416,6 +416,9 @@ rlc_am_receive_process_control_pdu(
     	  rlc_am_pdu_sdu_data_cnf(ctxt_pP,rlc_pP,sn_data_cnf);
       }
 
+      LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT" RECEIVE STATUS PDU ACK_SN=%d NewvtA=%d OldvtA=%d SnDataCnf=%d DataCnfSOStop=%d vtS=%d\n",
+                  PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP),ack_sn,vt_a_new,rlc_pP->vt_a,sn_data_cnf,data_cnf_so_stop,rlc_pP->vt_s);
+
       /* Update vtA and vtMS */
       rlc_pP->vt_a = vt_a_new;
       rlc_pP->vt_ms = (rlc_pP->vt_a + RLC_AM_WINDOW_SIZE) & RLC_AM_SN_MASK;