diff --git a/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c b/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c
index 2b65cf87f9668ad42aadd9c220882babf0d5e562..e18c8eddfb5abaef9a25fcb125932f79b01bab6c 100644
--- a/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c
+++ b/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c
@@ -283,11 +283,12 @@ void e1_bearer_release_cmd(const e1ap_bearer_release_cmd_t *cmd)
   newGtpuDeleteAllTunnels(n3inst, cmd->gNB_cu_up_ue_id);
   if (f1inst >= 0)  // is there F1-U?
     newGtpuDeleteAllTunnels(f1inst, cmd->gNB_cu_up_ue_id);
-  nr_pdcp_remove_UE(cmd->gNB_cu_up_ue_id);
-  nr_sdap_delete_ue_entities(cmd->gNB_cu_up_ue_id);
   if (need_ue_id_mgmt) {
+    // see issue #706: in monolithic, gNB will free PDCP of UE
+    nr_pdcp_remove_UE(cmd->gNB_cu_up_ue_id);
     cu_remove_f1_ue_data(cmd->gNB_cu_up_ue_id);
   }
+  nr_sdap_delete_ue_entities(cmd->gNB_cu_up_ue_id);
 
   e1ap_bearer_release_cplt_t cplt = {
     .gNB_cu_cp_ue_id = cmd->gNB_cu_cp_ue_id,