diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c
index 0bbd294c53b024cc0071effb622ac4ac957ade08..f265e78c855afeb60da6ca2f15f544253d21a98f 100644
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c
+++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c
@@ -42,6 +42,7 @@ static void nr_pdcp_entity_recv_pdu(nr_pdcp_entity_t *entity,
   uint32_t         rcvd_count;
   int              header_size;
   int              integrity_size;
+  int              sdap_header_size = 0;
   int              rx_deliv_sn;
   uint32_t         rx_deliv_hfn;
 
@@ -62,6 +63,7 @@ static void nr_pdcp_entity_recv_pdu(nr_pdcp_entity_t *entity,
   entity->stats.rxpdu_pkts++;
   entity->stats.rxpdu_bytes += size;
 
+  if (entity->has_sdap_rx) sdap_header_size = 1; // SDAP Header is one byte
 
   if (entity->sn_size == 12) {
     rcvd_sn = ((buffer[0] & 0xf) <<  8) |
@@ -82,7 +84,7 @@ static void nr_pdcp_entity_recv_pdu(nr_pdcp_entity_t *entity,
     integrity_size = 0;
   }
 
-  if (size < header_size + integrity_size + 1) {
+  if (size < header_size + sdap_header_size + integrity_size + 1) {
     LOG_E(PDCP, "bad PDU received (size = %d)\n", size);
 
     entity->stats.rxpdu_dd_pkts++;
@@ -106,7 +108,8 @@ static void nr_pdcp_entity_recv_pdu(nr_pdcp_entity_t *entity,
 
   if (entity->has_ciphering)
     entity->cipher(entity->security_context,
-                   buffer+header_size, size-header_size,
+                   buffer + header_size + sdap_header_size,
+                   size - (header_size + sdap_header_size),
                    entity->rb_id, rcvd_count, entity->is_gnb ? 0 : 1);
 
   if (entity->has_integrity) {
@@ -184,6 +187,7 @@ static int nr_pdcp_entity_process_sdu(nr_pdcp_entity_t *entity,
   int      sn;
   int      header_size;
   int      integrity_size;
+  int      sdap_header_size = 0;
   char    *buf = pdu_buffer;
   DevAssert(size + 3 + 4 <= pdu_max_size);
   int      dc_bit;
@@ -194,6 +198,8 @@ static int nr_pdcp_entity_process_sdu(nr_pdcp_entity_t *entity,
   count = entity->tx_next;
   sn = entity->tx_next & entity->sn_max;
 
+  if (entity->has_sdap_tx) sdap_header_size = 1; // SDAP header is one byte
+
   /* D/C bit is only to be set for DRBs */
   if (entity->type == NR_PDCP_DRB_AM || entity->type == NR_PDCP_DRB_UM) {
     dc_bit = 0x80;
@@ -236,7 +242,8 @@ static int nr_pdcp_entity_process_sdu(nr_pdcp_entity_t *entity,
 
   if (entity->has_ciphering && (entity->is_gnb || entity->security_mode_completed)) {
     entity->cipher(entity->security_context,
-                   (unsigned char *)buf + header_size, size + integrity_size,
+                   (unsigned char *)buf + header_size + sdap_header_size,
+                   size + integrity_size - sdap_header_size,
                    entity->rb_id, count, entity->is_gnb ? 1 : 0);
   } else {
     entity->security_mode_completed = true;