diff --git a/executables/nr-ue.c b/executables/nr-ue.c
index eaa48df2be7d31947a766c8f7ed8a2ff9f246d69..132ba62499476e3f7447fcf9dbcdea88f246a7df 100644
--- a/executables/nr-ue.c
+++ b/executables/nr-ue.c
@@ -111,6 +111,7 @@ void init_nr_ue_vars(PHY_VARS_NR_UE *ue,
   ue->Mod_id      = UE_id;
   ue->mac_enabled = 1;
   ue->if_inst     = nr_ue_if_module_init(0);
+  ue->dci_thres   = 0;
 
   // Setting UE mode to NOT_SYNCHED by default
   for (gNB_id = 0; gNB_id < nb_connected_gNB; gNB_id++){
diff --git a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
index 53a7ee7bb75d4405b112ef8e11ffde03fade0cb8..3cabac3d3113e2d92293e96e40c43e190a47ccf7 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
@@ -885,7 +885,7 @@ uint16_t nr_dci_false_detection(uint64_t *dci,
 
   uint32_t encoder_output[NR_MAX_DCI_SIZE_DWORD];
   polar_encoder_fast(dci, (void*)encoder_output, rnti, 1, polar_param);
-  uint8_t *enout_p = (int16_t*)encoder_output;
+  uint8_t *enout_p = (uint8_t*)encoder_output;
   uint16_t x = 0;
 
   for (int i=0; i<encoded_length/8; i++) {
@@ -948,8 +948,9 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue,
           LOG_D(PHY, "(%i.%i) Received dci indication (rnti %x,dci format %d,n_CCE %d,payloadSize %d,payload %llx)\n",
                 proc->frame_rx, proc->nr_slot_rx,n_rnti,rel15->dci_format_options[k],CCEind,dci_length,*(unsigned long long*)dci_estimation);
           uint16_t mb = nr_dci_false_detection(dci_estimation,tmp_e,currentPtrDCI,L*108,n_rnti);
-          if (mb > 10) {
-            LOG_W(PHY,"DCI false positive. Dropping DCI index %d. Mismatched bits: %d/%d\n",j,mb,L*108);
+          ue->dci_thres = (ue->dci_thres + mb) / 2;
+          if (mb > (ue->dci_thres+10)) {
+            LOG_W(PHY,"DCI false positive. Dropping DCI index %d. Mismatched bits: %d/%d. Current DCI threshold: %d\n",j,mb,L*108,ue->dci_thres);
             continue;
           }
           else {
diff --git a/openair1/PHY/defs_nr_UE.h b/openair1/PHY/defs_nr_UE.h
index ef0240c28a6e3f5c092c897fb7aa160d4363f429..d3f1b4de8dca2aecabe48ab8b95572bb50c61fe0 100644
--- a/openair1/PHY/defs_nr_UE.h
+++ b/openair1/PHY/defs_nr_UE.h
@@ -790,6 +790,8 @@ typedef struct {
   uint8_t ho_initiated;
   /// \brief indicator that Handover procedure has been triggered
   uint8_t ho_triggered;
+  /// threshold for false dci detection
+  int dci_thres;
   /// \brief Measurement variables.
   PHY_NR_MEASUREMENTS measurements;
   NR_DL_FRAME_PARMS  frame_parms;