diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index f9fc1bda3f2c53185268f7c3dd0892e46321f377..9d60631bc36a50f62185c2a01ad64858ec1d9869 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -306,7 +306,7 @@ endif()
 
 #
 set(CMAKE_C_FLAGS
-  "${CMAKE_C_FLAGS} ${C_FLAGS_PROCESSOR} -pipe -std=gnu99 -Wall -Wstrict-prototypes -fno-strict-aliasing -rdynamic -funroll-loops -Wno-packed-bitfield-compat -fPIC")
+  "${CMAKE_C_FLAGS} ${C_FLAGS_PROCESSOR} -pipe -std=gnu99 -Wall -Werror -Wstrict-prototypes -fno-strict-aliasing -rdynamic -funroll-loops -Wno-packed-bitfield-compat -fPIC")
 # add autotools definitions that were maybe used!
 if (CUDA_FOUND)
 	set(MKVER "'MAKE_VERSION(a,b,c)=((a)*256+(b)*16+c)'")
@@ -314,14 +314,14 @@ if (CUDA_FOUND)
            "${CMAKE_C_FLAGS} -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_ARPA_INET_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_STRERROR=1 -DHAVE_SOCKET=1 -DHAVE_MEMSET=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_LIBSCTP -D CUDA_FLAG"
     )
     set(CUDA_CMAKE_CXX_FLAGS
-	"${CMAKE_CXX_FLAGS} ${C_FLAGS_PROCESSOR} -Wno-packed-bitfield-compat -fPIC -Wall -fno-strict-aliasing -rdynamic -std=c++11 -D CUDA_FLAG"
+	"${CMAKE_CXX_FLAGS} ${C_FLAGS_PROCESSOR} -Wno-packed-bitfield-compat -fPIC -Wall -Werror -fno-strict-aliasing -rdynamic -std=c++11 -D CUDA_FLAG"
     )
 	
 	set(CMAKE_C_FLAGS
            "${CMAKE_C_FLAGS} -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_ARPA_INET_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_STRERROR=1 -DHAVE_SOCKET=1 -DHAVE_MEMSET=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_LIBSCTP -D${MKVER} -D CUDA_FLAG"
     )
     set(CMAKE_CXX_FLAGS
-	"${CMAKE_CXX_FLAGS} ${C_FLAGS_PROCESSOR} -Wno-packed-bitfield-compat -fPIC -Wall -fno-strict-aliasing -rdynamic -std=c++11 -D${MKVER} -D CUDA_FLAG"
+	"${CMAKE_CXX_FLAGS} ${C_FLAGS_PROCESSOR} -Wno-packed-bitfield-compat -fPIC -Wall -Werror -fno-strict-aliasing -rdynamic -std=c++11 -D${MKVER} -D CUDA_FLAG"
     )
 else (CUDA_FOUND)
     set(MKVER "'MAKE_VERSION(a,b,c)=((a)*256+(b)*16+c)'")
@@ -329,7 +329,7 @@ else (CUDA_FOUND)
            "${CMAKE_C_FLAGS} -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_ARPA_INET_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_STRERROR=1 -DHAVE_SOCKET=1 -DHAVE_MEMSET=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_LIBSCTP -D${MKVER}"
     )
     set(CMAKE_CXX_FLAGS
-	"${CMAKE_CXX_FLAGS} ${C_FLAGS_PROCESSOR} -Wno-packed-bitfield-compat -fPIC -Wall -fno-strict-aliasing -rdynamic -std=c++11 -D${MKVER}"
+	"${CMAKE_CXX_FLAGS} ${C_FLAGS_PROCESSOR} -Wno-packed-bitfield-compat -fPIC -Wall -Werror -fno-strict-aliasing -rdynamic -std=c++11 -D${MKVER}"
     )
 endif ()
 
diff --git a/executables/nr-gnb.c b/executables/nr-gnb.c
index df2f6478557924f027f1fe19277a5dbe74fda6c3..69b2292c087c292bb8635cb0ac0fc2ac0538fe80 100644
--- a/executables/nr-gnb.c
+++ b/executables/nr-gnb.c
@@ -443,8 +443,7 @@ static void *gNB_L1_thread( void *param ) {
       if (gNB->CC_id==0) {
         int next_slot;
         next_slot = (slot_rx + 1) % 20;
-        LOG_I(PHY, "Calling rxtx1\n");
-        if (rxtx(gNB,frame_rx,next_slot,frame_tx,next_slot,thread_name) < 0) break;
+        if (rxtx(gNB,(frame_rx + ((slot_rx + 1) % 20 == 0))%1024,next_slot,(frame_tx + ((slot_rx + 1) % 20 == 0)) % 1024,next_slot,thread_name) < 0) break;
       }
     if (wait_on_condition(&L1_proc->mutex,&L1_proc->cond,&L1_proc->instance_cnt,thread_name)<0) break;
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PROC_RXTX0, 1 );
@@ -458,7 +457,6 @@ static void *gNB_L1_thread( void *param ) {
     if (oai_exit) break;
 
     if (gNB->CC_id==0) {
-      LOG_I(PHY, "Calling rxtx2\n");
       if (rxtx(gNB,frame_rx,slot_rx,frame_tx,slot_tx,thread_name) < 0) break;
     }
 
diff --git a/executables/nr-ue.c b/executables/nr-ue.c
index 2154230013b1b35ffaa096398bc46a87347079e7..0816bc6d16800565866eeec6d905f772c13acca8 100644
--- a/executables/nr-ue.c
+++ b/executables/nr-ue.c
@@ -224,12 +224,15 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
   reset_queue(&nr_rx_ind_queue);
   reset_queue(&nr_crc_ind_queue);
   reset_queue(&nr_uci_ind_queue);
+  reset_queue(&nr_sfn_slot_queue);
 
   NR_PRACH_RESOURCES_t prach_resources;
   memset(&prach_resources, 0, sizeof(prach_resources));
   NR_UL_TIME_ALIGNMENT_t ul_time_alignment;
   memset(&ul_time_alignment, 0, sizeof(ul_time_alignment));
   int last_sfn_slot = -1;
+  uint16_t *sfn_slot_p;
+  int sfn_slot;
 
   while (!oai_exit)
   {
@@ -238,8 +241,14 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
       LOG_E(NR_MAC, "sem_wait() error\n");
       abort();
     }
+    sfn_slot_p = get_queue(&nr_sfn_slot_queue);
+    if (sfn_slot_p == NULL) 
+      continue;
+
+    sfn_slot = *sfn_slot_p;
+    LOG_D(NR_MAC, "We have successfully dequeued snf slot = %d.%d, qsize = %zu\n",
+          NFAPI_SFNSLOT2SFN(sfn_slot), NFAPI_SFNSLOT2SLOT(sfn_slot), nr_sfn_slot_queue.num_items);
 
-    int sfn_slot = current_sfn_slot;
     if (sfn_slot == last_sfn_slot)
     {
       LOG_D(NR_MAC, "repeated sfn_sf = %d.%d\n",
@@ -320,7 +329,7 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
     nfapi_nr_rach_indication_t *rach_ind = unqueue_matching(&nr_rach_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot);
     nfapi_nr_rx_data_indication_t *rx_ind = unqueue_matching(&nr_rx_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot);
     nfapi_nr_crc_indication_t *crc_ind = unqueue_matching(&nr_crc_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot);
-
+    LOG_D(NR_MAC, "Checking queues with crc_ind  = %p\n", crc_ind);
     if (rach_ind && rach_ind->number_of_pdus > 0)
     {
         NR_UL_IND_t UL_INFO = {
@@ -347,9 +356,15 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
       NR_UL_IND_t UL_INFO = {
         .crc_ind = *crc_ind,
       };
+      for (int j = 0; j < crc_ind->number_crcs; j++)
+      {
+        LOG_I(NR_PHY, "Sending crc_ind.harq_id = %d for %d index SFN SLot %u %u with rnti %x\n",
+         crc_ind->crc_list[j].harq_id, j, crc_ind->sfn, crc_ind->slot, crc_ind->crc_list[j].rnti);  
+      }
       send_nsa_standalone_msg(&UL_INFO, crc_ind->header.message_id);
       free(crc_ind->crc_list);
     }
+    LOG_D(NR_MAC, "Ready for handling next SFN SLOT\n");
   }
   return NULL;
 }
diff --git a/executables/softmodem-common.h b/executables/softmodem-common.h
index 003636c3797d0a3e14b9399d142dd9a71dd6e977..198d6fa499cb5a1ba296264959e58479c50796f6 100644
--- a/executables/softmodem-common.h
+++ b/executables/softmodem-common.h
@@ -251,6 +251,7 @@ extern void set_softmodem_sighandler(void);
 extern uint64_t downlink_frequency[MAX_NUM_CCs][4];
 extern int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
 extern uint8_t nfapi_mode;
+extern int16_t vnf_pnf_sfnslot_delta;
 #ifdef __cplusplus
 }
 #endif
diff --git a/nfapi/oai_integration/nfapi_vnf.c b/nfapi/oai_integration/nfapi_vnf.c
index e6f528cd38d5940af150be66bdd266e92e776dbc..c552879d30d420620952e76b3e2d5db32f6d2d61 100644
--- a/nfapi/oai_integration/nfapi_vnf.c
+++ b/nfapi/oai_integration/nfapi_vnf.c
@@ -604,6 +604,8 @@ int phy_sync_indication(struct nfapi_vnf_p7_config *config, uint8_t sync) {
   return(0);
 }
 
+uint16_t pnf_frame;
+uint16_t pnf_slot;
 
 int phy_slot_indication(struct nfapi_vnf_p7_config *config, uint16_t phy_id, uint16_t sfn, uint16_t slot) {
   static uint8_t first_time = 1;
@@ -616,7 +618,9 @@ int phy_slot_indication(struct nfapi_vnf_p7_config *config, uint16_t phy_id, uin
   if (RC.gNB && RC.gNB[0]->configured) {
     // uint16_t sfn = NFAPI_SFNSF2SFN(sfn_sf);
     // uint16_t sf = NFAPI_SFNSF2SF(sfn_sf);
-    LOG_D(PHY,"[VNF] slot indication sfn:%d sf:%d\n", sfn, slot);
+    pnf_frame = sfn;
+    pnf_slot = slot;
+    LOG_D(PHY,"[VNF] slot indication sfn:%d slot:%d\n", sfn, slot);
     wake_gNB_rxtx(RC.gNB[0], sfn, slot); // DONE: find NR equivalent
   } else {
     printf("[VNF] %s() RC.gNB:%p\n", __FUNCTION__, RC.gNB);
@@ -978,6 +982,8 @@ int phy_nr_crc_indication(struct nfapi_vnf_p7_config *config, nfapi_nr_crc_indic
       crc_ind->crc_list[j].tb_crc_status = ind->crc_list[j].tb_crc_status;
       crc_ind->crc_list[j].timing_advance = ind->crc_list[j].timing_advance;
       crc_ind->crc_list[j].ul_cqi = ind->crc_list[j].ul_cqi;
+      LOG_I(NR_MAC, "Received crc_ind.harq_id = %d for %d index SFN SLot %u %u with rnti %x\n", 
+                    ind->crc_list[j].harq_id, j, ind->sfn, ind->slot, ind->crc_list[j].rnti);  
     }
     if (!put_queue(&gnb_crc_ind_queue, crc_ind))
     {
diff --git a/nfapi/open-nFAPI/vnf/src/vnf_interface.c b/nfapi/open-nFAPI/vnf/src/vnf_interface.c
index 5d0d085b58c6090dd82530a9b20b9f126c35fa1d..41a357ab34c624dfca8e917173eae4449237c43c 100644
--- a/nfapi/open-nFAPI/vnf/src/vnf_interface.c
+++ b/nfapi/open-nFAPI/vnf/src/vnf_interface.c
@@ -1154,7 +1154,7 @@ int nfapi_vnf_allocate_phy(nfapi_vnf_config_t* config, int p5_idx, uint16_t* phy
 
 	info->timing_window = 30;       // This seems to override what gets set by the user - why??? //TODO: Change in NR in terms of microsecends,what should be the value?
 	info->timing_info_mode = 0x03;
-	info->timing_info_period = 128; // Melissa come back to this
+	info->timing_info_period = 10; // Melissa come back to this
 
 	nfapi_vnf_phy_info_list_add(config, info);
 
diff --git a/nfapi/open-nFAPI/vnf/src/vnf_p7.c b/nfapi/open-nFAPI/vnf/src/vnf_p7.c
index 3c7f0d10567055582cd85284c512d7fd489916a5..ffac2c5049c6d3c7701e9154ff20bbb448947138 100644
--- a/nfapi/open-nFAPI/vnf/src/vnf_p7.c
+++ b/nfapi/open-nFAPI/vnf/src/vnf_p7.c
@@ -1997,6 +1997,7 @@ void vnf_handle_timing_info(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
         }
 }
 
+int16_t vnf_pnf_sfnslot_delta;
 
 void vnf_nr_handle_timing_info(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
 {
@@ -2016,7 +2017,7 @@ void vnf_nr_handle_timing_info(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
         if (vnf_p7 && vnf_p7->p7_connections)
         {
           //int16_t vnf_pnf_sfnsf_delta = NFAPI_SFNSF2DEC(vnf_p7->p7_connections[0].sfn_sf) - NFAPI_SFNSF2DEC(ind.last_sfn_sf);
-            int16_t vnf_pnf_sfnslot_delta = NFAPI_SFNSLOT2DEC(vnf_p7->p7_connections[0].sfn,vnf_p7->p7_connections[0].slot) - NFAPI_SFNSLOT2DEC(ind.last_sfn,ind.last_slot);
+            vnf_pnf_sfnslot_delta = NFAPI_SFNSLOT2DEC(vnf_p7->p7_connections[0].sfn,vnf_p7->p7_connections[0].slot) - NFAPI_SFNSLOT2DEC(ind.last_sfn,ind.last_slot);
           //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() PNF:SFN/SF:%d VNF:SFN/SF:%d deltaSFNSF:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(ind.last_sfn_sf), NFAPI_SFNSF2DEC(vnf_p7->p7_connections[0].sfn_sf), vnf_pnf_sfnsf_delta);
 
           // Panos: Careful here!!! Modification of the original nfapi-code
@@ -2024,7 +2025,7 @@ void vnf_nr_handle_timing_info(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
 		  //printf("VNF-PNF delta - %d", vnf_pnf_sfnslot_delta);
           if (vnf_pnf_sfnslot_delta != 0)
           {
-            NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() LARGE SFN/SF DELTA between PNF and VNF. Delta %d. PNF:%d.%d VNF:%d.%d\n\n\n\n\n\n\n\n\n",
+            NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() LARGE SFN/SLOT DELTA between PNF and VNF. Delta %d. PNF:%d.%d VNF:%d.%d\n\n\n\n\n\n\n\n\n",
                         __FUNCTION__, vnf_pnf_sfnslot_delta,
                         ind.last_sfn, ind.last_slot,
                         vnf_p7->p7_connections[0].sfn, vnf_p7->p7_connections[0].slot);
diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
index 3c8d40568a1810dd302a113a132f38f3d0be1782..b74a3434a5e1fa9375c4c686a02dcf350a66b36e 100644
--- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
+++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
@@ -47,6 +47,7 @@ const char *ul_pdu_type[]={"PRACH", "PUCCH", "PUSCH", "SRS"};
 queue_t nr_rx_ind_queue;
 queue_t nr_crc_ind_queue;
 queue_t nr_uci_ind_queue;
+queue_t nr_sfn_slot_queue;
 
 int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response) {
 
@@ -101,18 +102,17 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response
               {
                 crc_ind->crc_list[j].handle = pusch_config_pdu->handle;
                 crc_ind->crc_list[j].harq_id = pusch_config_pdu->pusch_data.harq_process_id;
-                LOG_I(NR_MAC, "This is the harq pid %d for crc_list[%d]\n", crc_ind->crc_list[j].harq_id, j);
-                LOG_I(NR_MAC, "This is sched sfn/sl [%d %d] and crc sfn/sl [%d %d]\n",
-                      scheduled_response->frame, scheduled_response->slot, crc_ind->sfn, crc_ind->slot);
                 crc_ind->crc_list[j].num_cb = pusch_config_pdu->pusch_data.num_cb;
                 crc_ind->crc_list[j].rnti = pusch_config_pdu->rnti;
                 crc_ind->crc_list[j].tb_crc_status = 0;
                 crc_ind->crc_list[j].timing_advance = scheduled_response->tx_request->tx_config.timing_advance;
                 crc_ind->crc_list[j].ul_cqi = scheduled_response->tx_request->tx_config.ul_cqi;
+                LOG_D(NR_MAC, "This is the harq pid %d for crc_list[%d] rnti %x "
+                              "sched sfn/sl [%d %d] and crc sfn/sl [%d %d]\n",
+                              crc_ind->crc_list[j].harq_id, j, pusch_config_pdu->rnti,
+                              scheduled_response->frame, scheduled_response->slot, crc_ind->sfn, crc_ind->slot);
               }
 
-              LOG_I(PHY, "In %s: Filled queue rx/crc_ind which was filled by ulconfig. \n", __FUNCTION__);
-
               if (!put_queue(&nr_rx_ind_queue, rx_ind))
               {
                 LOG_E(NR_MAC, "Put_queue failed for rx_ind\n");
@@ -125,6 +125,9 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response
                 free(crc_ind->crc_list);
                 free(crc_ind);
               }
+
+              LOG_I(PHY, "In %s: Filled queue rx/crc_ind which was filled by ulconfig. \n", __FUNCTION__);
+
               scheduled_response->tx_request->number_of_pdus = 0;
             }
             break;
diff --git a/openair2/COMMON/platform_constants.h b/openair2/COMMON/platform_constants.h
index 68ad7906d55d68737c2ebd5d3ec809c024ec12e4..80f01900aaa1163e52b638910350be23bc6a2bda 100644
--- a/openair2/COMMON/platform_constants.h
+++ b/openair2/COMMON/platform_constants.h
@@ -75,7 +75,7 @@
     #else
       #define MAX_MOBILES_PER_ENB         40
       #define MAX_MOBILES_PER_ENB_NB_IoT  40
-      #define MAX_MOBILES_PER_GNB         2//16
+      #define MAX_MOBILES_PER_GNB         16
       #define MAX_eNB                      2
       #define MAX_gNB                      2
     #endif
diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
index fcb1785955de312e1a908ee8f2a76fe89c78d8eb..68523c29fb40ae89925ff4a163afe49e113c5288 100644
--- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
@@ -471,7 +471,10 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
 
   const uint16_t n_RB_DLBWP = (ra->ra_state == WAIT_RAR) ? NRRIV2BW(mac->scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE) : NRRIV2BW(mac->DLbwp[0]->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
 
-  LOG_I(MAC, "In %s: Processing received DCI format %s (DL BWP %d)\n", __FUNCTION__, dci_formats[dci_format], n_RB_DLBWP);
+  LOG_I(MAC, "In %s: Processing received DCI format %s (DL BWP %d) harq_pid %d\n", 
+             __FUNCTION__, dci_formats[dci_format], n_RB_DLBWP, dci->harq_pid);
+
+
 
   switch(dci_format){
   case NR_UL_DCI_FORMAT_0_0: {
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
index 0583cebdfbffdcdb9898c3086ae6147b1ba5490d..74d4ea5e13c0f0d1295986be56e8cae51b70c766 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
@@ -928,14 +928,13 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
     dl_req->nPDUs+=1;
     nfapi_nr_dl_tti_pdsch_pdu_rel15_t *pdsch_pdu_rel15 = &dl_tti_pdsch_pdu->pdsch_pdu.pdsch_pdu_rel15;
 
-    LOG_I(MAC,"[gNB %d] [RAPROC] CC_id %d Frame %d, slotP %d: Generating RAR DCI, state %d, rnti %x, new rnti %x\n", 
+    LOG_I(MAC,"[gNB %d] [RAPROC] CC_id %d Frame %d, slotP %d: Generating RAR DCI, state %d, rnti %x\n", 
     module_idP, 
     CC_id, 
     frameP, 
     slotP, 
     ra->state, 
-    ra->rnti,
-    ra->secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity
+    ra->rnti
     );
 
     NR_BWP_Uplink_t *ubwp=ra->secondaryCellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[ra->bwp_id-1];
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
index 273c38dade9235ee7e9b6d44088bd1199448c9e5..d75a585fcdf0b6121c4f0a5498967816fee8eec5 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
@@ -338,9 +338,10 @@ void handle_nr_ul_harq(module_id_t mod_id,
   NR_UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id];
 
   int8_t harq_pid = sched_ctrl->feedback_ul_harq.head;
+  LOG_D(NR_MAC, "Comparing crc_pdu->harq_id vs feedback harq_pid = %d %d\n",crc_pdu->harq_id, harq_pid);
   while (crc_pdu->harq_id != harq_pid || harq_pid < 0) {
     LOG_W(MAC,
-          "Unexpected ULSCH HARQ PID %d (have %d) for RNTI %04x (ignore this warning for RA)\n",
+          "Unexpected ULSCH HARQ PID in crc pdu %d (feedback have %d) for RNTI %04x (ignore this warning for RA)\n",
           crc_pdu->harq_id,
           harq_pid,
           crc_pdu->rnti);
@@ -931,6 +932,23 @@ bool nr_simple_ulsch_preprocessor(module_id_t module_id,
   return true;
 }
 
+static inline int timespec_diff_in_milliseconds(struct timespec *a, struct timespec *b)
+{
+    int diff_in_ms = (a->tv_sec - b->tv_sec) * 1000 + a->tv_nsec /1000000 - b->tv_nsec / 1000000;
+    return diff_in_ms;
+}
+
+typedef struct _sched_info
+{
+  uint16_t rnti;
+  uint16_t sfn;
+  uint16_t slot;
+  int8_t harq_id;
+  struct timespec ts;
+} sched_info;
+
+sched_info prev_sched[MAX_MOBILES_PER_GNB]; 
+
 void nr_schedule_ulsch(module_id_t module_id,
                        frame_t frame,
                        sub_frame_t slot,
@@ -969,6 +987,62 @@ void nr_schedule_ulsch(module_id_t module_id,
     if (sched_pusch->rbSize <= 0)
       continue;
 
+    struct timespec ts;
+    if (clock_gettime(CLOCK_MONOTONIC, &ts) == -1)
+        abort();
+
+    if (prev_sched[UE_id].rnti != 0)
+    {
+      uint16_t prev_frame = prev_sched[UE_id].sfn;
+      uint16_t prev_slot = prev_sched[UE_id].slot;
+      int sfnslot_delta = NFAPI_SFNSLOT2DEC(frame, slot) - NFAPI_SFNSLOT2DEC(prev_frame, prev_slot);
+      if (sfnslot_delta < 0)
+      {
+        sfnslot_delta += NFAPI_SFNSLOT2DEC(1024,0);
+      }
+      // If diff is more than half of maximum frame: we ignore it.
+      if (sfnslot_delta > NFAPI_SFNSLOT2DEC(512, 0))
+      {
+        LOG_D(PHY, "%s() SFN/SLOT DELTA between Sched and Previous. UEID %d, rnti %x Delta %d. "
+                  "Current:%d.%d Prev(%d):%d.%d --> Skip\n\n\n\n\n\n\n\n\n",
+                  __FUNCTION__, UE_id, UE_info->rnti[UE_id], sfnslot_delta - NFAPI_SFNSLOT2DEC(1024,0),
+                  frame, slot,
+                  prev_sched[UE_id].harq_id, prev_frame, prev_slot);
+        continue;
+      }
+      else
+      {
+        LOG_D(PHY, "%s() SFN/SLOT DELTA between Sched and Previous. UEID %d, rnti %x Delta %d. "
+                  "Current:%d.%d Prev(%d):%d.%d\n\n\n\n\n\n\n\n\n",
+                  __FUNCTION__, UE_id, UE_info->rnti[UE_id], sfnslot_delta,
+                  frame, slot,
+                  prev_sched[UE_id].harq_id, prev_frame, prev_slot);
+      }
+
+      int time_diff_in_ms = timespec_diff_in_milliseconds (&ts, &prev_sched[UE_id].ts);
+
+      // The sched tx duration between ul dci req is assumed between 4 ms to 6 ms.
+      if (vnf_pnf_sfnslot_delta < 0 || time_diff_in_ms < 4 * (sfnslot_delta / 10) 
+                                    || time_diff_in_ms > 6 * (sfnslot_delta / 10))
+      {
+        LOG_D(PHY, "%s() SFN/SLOT DELTA between Proxy and gNB. UEID %d, rnti %x Delta %3d. gNB:%4d.%-2d "
+                  "slot_diff %4d  time_diff %d : %lu.%06lu vs %lu.%06lu --> Skip\n\n\n\n\n\n\n\n\n",
+                  __FUNCTION__, UE_id, UE_info->rnti[UE_id], 
+                  vnf_pnf_sfnslot_delta,
+                  frame, slot, sfnslot_delta, time_diff_in_ms, 
+                  ts.tv_sec, ts.tv_nsec / 1000,
+                  prev_sched[UE_id].ts.tv_sec, prev_sched[UE_id].ts.tv_nsec / 1000);
+        continue;
+      }
+      else
+      {
+        LOG_D(PHY, "%s() SFN/SLOT DELTA between Proxy and gNB. UEID %d, rnti %x Delta %3d. "
+                  "gNB:%4d.%-2d slot_diff %4d  time_diff %d\n\n\n\n\n\n\n\n\n",
+                  __FUNCTION__, UE_id, UE_info->rnti[UE_id], vnf_pnf_sfnslot_delta,
+                  frame, slot, sfnslot_delta, time_diff_in_ms);
+      }
+    }
+
     uint16_t rnti = UE_info->rnti[UE_id];
     LOG_D(NR_MAC, "nr_schedule_ulsch  UE_id_checking UE_id = %d, rnti = %x \n", UE_id,  rnti);
 
@@ -1049,6 +1123,11 @@ void nr_schedule_ulsch(module_id_t module_id,
     }
     gNB->handled_frame = frame;
     gNB->handled_slot = slot;
+    prev_sched[UE_id].rnti = rnti;
+    prev_sched[UE_id].sfn = frame;
+    prev_sched[UE_id].slot = slot;
+    prev_sched[UE_id].harq_id = harq_id;
+    prev_sched[UE_id].ts = ts;
 
     /* PUSCH in a later slot, but corresponding DCI now! */
     nfapi_nr_ul_tti_request_t *future_ul_tti_req = &RC.nrmac[module_id]->UL_tti_req_ahead[0][sched_pusch->slot];
@@ -1138,6 +1217,7 @@ void nr_schedule_ulsch(module_id_t module_id,
     pusch_pdu->pusch_data.new_data_indicator = cur_harq->ndi;
     pusch_pdu->pusch_data.tb_size = sched_pusch->tb_size;
     pusch_pdu->pusch_data.num_cb = 0; //CBG not supported
+    LOG_D(MAC,"Setting harq_id pusch_pdu->pusch_data.harq_process_id  %d  for UE_id(%d), rnti %x\n", harq_id, UE_id, rnti);
 
     /* TRANSFORM PRECODING --------------------------------------------------------*/
 
diff --git a/openair2/NR_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_PHY_INTERFACE/NR_IF_Module.c
index f0b58a66cef36d73108dec6f1a198d32a14f3b97..d163a59fbf806f6de7554d6739aa32556d89e790 100644
--- a/openair2/NR_PHY_INTERFACE/NR_IF_Module.c
+++ b/openair2/NR_PHY_INTERFACE/NR_IF_Module.c
@@ -65,7 +65,7 @@ void handle_nr_rach(NR_UL_IND_t *UL_info)
   if (gnb_rach_ind_queue.num_items ==0)
     return; 
   LOG_I(NR_MAC, "gnb_rach_ind_queue size = %zu\n", gnb_rach_ind_queue.num_items);
-  nfapi_nr_rach_indication_t *rach_ind = unqueue(&gnb_rach_ind_queue);
+  nfapi_nr_rach_indication_t *rach_ind = get_queue(&gnb_rach_ind_queue);
   NR_UL_IND_t UL_INFO;
   UL_INFO.rach_ind = *rach_ind;
   UL_INFO.frame = rach_ind->sfn;
@@ -108,7 +108,7 @@ void handle_nr_uci(NR_UL_IND_t *UL_info)
   if (gnb_uci_ind_queue.num_items ==0)
     return; 
   LOG_I(NR_MAC, "gnb_uci_ind_queue size = %zu\n", gnb_uci_ind_queue.num_items);
-  nfapi_nr_uci_indication_t *uci_ind = unqueue(&gnb_uci_ind_queue);
+  nfapi_nr_uci_indication_t *uci_ind = get_queue(&gnb_uci_ind_queue);
   NR_UL_IND_t UL_INFO;
   UL_INFO.uci_ind = *uci_ind;
 
@@ -191,7 +191,7 @@ void  handle_nr_ulsch(NR_UL_IND_t *UL_info)
                   gnb_rx_ind_queue.num_items, 
                   gnb_crc_ind_queue.num_items
                   );
-  nfapi_nr_rx_data_indication_t *rx_ind = unqueue(&gnb_rx_ind_queue);
+  nfapi_nr_rx_data_indication_t *rx_ind = get_queue(&gnb_rx_ind_queue);
   int sfn_slot = NFAPI_SFNSLOT2HEX(rx_ind->sfn, rx_ind->slot); 
   
   nfapi_nr_crc_indication_t *crc_ind = unqueue_matching(&gnb_crc_ind_queue,
@@ -354,7 +354,7 @@ void NR_UL_indication(NR_UL_IND_t *UL_info) {
         ifi->NR_Schedule_response(sched_info);
       }
 
-      LOG_D(PHY,"NR_Schedule_response: SFN_SF:%d%d dl_pdus:%d\n",
+      LOG_D(PHY,"NR_Schedule_response: SFN SLOT:%d %d dl_pdus:%d\n",
 	    sched_info->frame,
 	    sched_info->slot,
 	    sched_info->DL_req->dl_tti_request_body.nPDUs);
diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
index ddd186a2718e18fe8783ac60a7c821c1ded71c02..9e232a529846d6f5b98ed63e565387ff5fe1cf33 100644
--- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
+++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
@@ -370,14 +370,14 @@ static void copy_ul_tti_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n
         LOG_D(NR_PHY, "This is the pdu type %d in ul_tti_req\n", pdu_list->pdu_type);
         if (pdu_list->pdu_type == NFAPI_NR_UL_CONFIG_PUCCH_PDU_TYPE)
         {
-            nfapi_nr_uci_indication_t *uci_ind = unqueue(&nr_uci_ind_queue);
+            nfapi_nr_uci_indication_t *uci_ind = get_queue(&nr_uci_ind_queue);
             if (uci_ind)
             {
                 if (uci_ind->num_ucis > 0)
                 {
                     uci_ind->sfn = ul_tti_req->SFN;
                     uci_ind->slot = ul_tti_req->Slot;
-                    LOG_I(NR_MAC, "We have unqueued the previously filled uci_ind and updated the snf/slot to %d/%d.\n",
+                    LOG_I(NR_MAC, "We have dequeued the previously filled uci_ind and updated the snf/slot to %d/%d.\n",
                           uci_ind->sfn, uci_ind->slot);
                     NR_UL_IND_t UL_INFO = {
                         .uci_ind = *uci_ind,
@@ -554,12 +554,15 @@ static void save_nr_measurement_info(nfapi_nr_dl_tti_request_t *dl_tti_request)
     nsa_sendmsg_to_lte_ue(buffer, pack_len, NR_UE_RRC_MEASUREMENT);
     LOG_A(NR_RRC, "Populated NR_UE_RRC_MEASUREMENT information and sent to LTE UE\n");
 }
+uint16_t sfn_slot_pool[512]; 
+uint16_t sfn_slot_id ; 
 
 void *nrue_standalone_pnf_task(void *context)
 {
   struct sockaddr_in server_address;
   socklen_t addr_len = sizeof(server_address);
   char buffer[NFAPI_MAX_PACKED_MESSAGE_SIZE];
+  int sfn, slot, delta;
   int sd = ue_rx_sock_descriptor;
   assert(sd > 0);
   LOG_I(NR_RRC, "Sucessfully started %s.\n", __FUNCTION__);
@@ -583,13 +586,25 @@ void *nrue_standalone_pnf_task(void *context)
       memcpy((void *)&sfn_slot, buffer, sizeof(sfn_slot));
       current_sfn_slot = sfn_slot;
 
+      sfn_slot_pool[sfn_slot_id] = sfn_slot;
+
+      if (!put_queue(&nr_sfn_slot_queue, &sfn_slot_pool[sfn_slot_id]))
+      {
+        LOG_I(NR_MAC, "put_queue failed for sfn slot.\n");
+      }
+      LOG_D(NR_MAC, "We have successfully queued snf slot %d.%d, with id %u, qsize %zu\n",
+                    sfn_slot_pool[sfn_slot_id]>> 6, sfn_slot_pool[sfn_slot_id] & 0x3F, 
+                    sfn_slot_id, nr_sfn_slot_queue.num_items);
+
+      sfn_slot_id = (sfn_slot_id + 1) % 512;
+
       if (sem_post(&sfn_slot_semaphore) != 0)
       {
         LOG_E(NR_PHY, "sem_post() error\n");
         abort();
       }
-      int sfn = NFAPI_SFNSLOT2SFN(sfn_slot);
-      int slot = NFAPI_SFNSLOT2SLOT(sfn_slot);
+      sfn = NFAPI_SFNSLOT2SFN(sfn_slot);
+      slot = NFAPI_SFNSLOT2SLOT(sfn_slot);
       LOG_I(NR_PHY, "Received from proxy sfn %d slot %d\n", sfn, slot);
     }
     else if (len == sizeof(nr_phy_channel_params_t))
@@ -652,6 +667,13 @@ void *nrue_standalone_pnf_task(void *context)
             }
             LOG_I(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_UL_DCI_REQUEST message in SFN/slot %d %d. \n",
                   ul_dci_request.SFN, ul_dci_request.Slot);
+            delta = NFAPI_SFNSLOT2DEC(sfn, slot) - NFAPI_SFNSLOT2DEC(ul_dci_request.SFN, ul_dci_request.Slot);
+            if (delta < -NFAPI_SFNSLOT2DEC(512, 0))
+            {
+              delta += NFAPI_SFNSLOT2DEC(1024, 0);
+            }
+            AssertFatal(delta < 6, "Slot delta %d < 6 is required. sfn slot %u %u vs ul_dci_request sfn slot %u %u\n", 
+                        delta, sfn, slot, ul_dci_request.SFN, ul_dci_request.Slot);
             check_and_process_dci(NULL, NULL, &ul_dci_request, NULL);
             break;
           case NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST:
diff --git a/openair2/RRC/NR/rrc_gNB_reconfig.c b/openair2/RRC/NR/rrc_gNB_reconfig.c
index 99a2505e741da6b133fd13ca715e45acbdba840b..ab3f19227622cbcb9b26f3339bfc448fcdc32997 100644
--- a/openair2/RRC/NR/rrc_gNB_reconfig.c
+++ b/openair2/RRC/NR/rrc_gNB_reconfig.c
@@ -141,7 +141,7 @@ void fill_default_searchSpaceZero(NR_SearchSpace_t *ss0) {
 
   ss0->searchSpaceType->present = NR_SearchSpace__searchSpaceType_PR_common;
 }
-static int unique_preamble_index_gNB;
+
 void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellconfigcommon,
                                      NR_CellGroupConfig_t *secondaryCellGroup,
                                      int scg_id,
diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c
index 111bab4c91384a92797824a572fff193df175584..df535cddf760610d868c4f71edcdbddda6627c7b 100644
--- a/openair2/RRC/NR_UE/rrc_UE.c
+++ b/openair2/RRC/NR_UE/rrc_UE.c
@@ -2969,6 +2969,7 @@ static void start_oai_nrue_threads()
     init_queue(&nr_rx_ind_queue);
     init_queue(&nr_crc_ind_queue);
     init_queue(&nr_uci_ind_queue);
+    init_queue(&nr_sfn_slot_queue);
 
     if (sem_init(&sfn_slot_semaphore, 0, 0) != 0)
     {
diff --git a/openair2/RRC/NR_UE/rrc_proto.h b/openair2/RRC/NR_UE/rrc_proto.h
index 3aa01948e25be641fce3ded5d7acc2ad38b992d8..cb2a01698fd7878a0805a9e7a524f5ebb4527fd2 100644
--- a/openair2/RRC/NR_UE/rrc_proto.h
+++ b/openair2/RRC/NR_UE/rrc_proto.h
@@ -45,6 +45,7 @@ extern queue_t nr_rach_ind_queue;
 extern queue_t nr_rx_ind_queue;
 extern queue_t nr_crc_ind_queue;
 extern queue_t nr_uci_ind_queue;
+extern queue_t nr_sfn_slot_queue;
 //
 //  main_rrc.c
 //