diff --git a/openair1/SCHED_NR/nr_ru_procedures.c b/openair1/SCHED_NR/nr_ru_procedures.c
index e0be09aa9c282957d361b637f8370c78363616b9..a2c117af7126093088106aade3746cdcd96c683f 100644
--- a/openair1/SCHED_NR/nr_ru_procedures.c
+++ b/openair1/SCHED_NR/nr_ru_procedures.c
@@ -32,7 +32,8 @@
 
 #include "PHY/defs_gNB.h"
 #include "PHY/phy_extern.h"
-#include "SCHED_NR/defs.h"
+#include "sched_nr.h"
+#include "PHY/MODULATION/modulation_common.h"
 
 #include "PHY/LTE_TRANSPORT/if4_tools.h"
 #include "PHY/LTE_TRANSPORT/if5_tools.h"
@@ -85,6 +86,7 @@ void nr_feptx0(RU_t *ru,int slot) {
 void nr_feptx_ofdm_2thread(RU_t *ru) {
 
   NR_DL_FRAME_PARMS *fp=ru->nr_frame_parms;
+  nfapi_config_request_t *cfg = &ru->gNB_list[0]->gNB_config;
   RU_proc_t *proc = &ru->proc;
   struct timespec wait;
   int subframe = ru->proc.subframe_tx;
@@ -94,7 +96,7 @@ void nr_feptx_ofdm_2thread(RU_t *ru) {
 
   start_meas(&ru->ofdm_mod_stats);
 
-  if (nr_subframe_select(fp,subframe) == SF_UL) return;
+  if (nr_subframe_select(cfg,subframe) == SF_UL) return;
 
   // this copy should be done in the precoding thread (currently inactive)
   for (int aa=0;aa<ru->nb_tx;aa++)
@@ -104,7 +106,7 @@ void nr_feptx_ofdm_2thread(RU_t *ru) {
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 1 );
 
-  if (nr_subframe_select(fp,subframe)==SF_DL) {
+  if (nr_subframe_select(cfg,subframe)==SF_DL) {
     // If this is not an S-subframe
     if (pthread_mutex_timedlock(&proc->mutex_feptx,&wait) != 0) {
       printf("[RU] ERROR pthread_mutex_lock for feptx thread (IC %d)\n", proc->instance_cnt_feptx);
@@ -202,8 +204,8 @@ void nr_feptx_ofdm(RU_t *ru) {
 
   slot_offset = subframe*fp->samples_per_subframe;
 
-  if ((nr_subframe_select(fp,subframe)==SF_DL)||
-      ((nr_subframe_select(fp,subframe)==SF_S))) {
+  if ((nr_subframe_select(cfg,subframe)==SF_DL)||
+      ((nr_subframe_select(cfg,subframe)==SF_S))) {
     //    LOG_D(HW,"Frame %d: Generating slot %d\n",frame,next_slot);
 
     start_meas(&ru->ofdm_mod_stats);
@@ -228,7 +230,7 @@ void nr_feptx_ofdm(RU_t *ru) {
                           14,
                           fp);
 	// if S-subframe generate first slot only
-	if (nr_subframe_select(fp,subframe) == SF_DL) 
+	if (nr_subframe_select(cfg,subframe) == SF_DL) 
 	  nr_normal_prefix_mod(&ru->common.txdataF_BF[aa][slot_offset_F+slot_sizeF],
 			    dummy_tx_b+(fp->samples_per_subframe / fp->slots_per_subframe),
 			    14,
diff --git a/openair1/SCHED_NR/phy_procedures_nr_common.c b/openair1/SCHED_NR/phy_procedures_nr_common.c
index 4f06644ee8578df54399ebd420a20de2a0b99fd8..623e14644aeb5763e1fd0993686261fc5387560a 100644
--- a/openair1/SCHED_NR/phy_procedures_nr_common.c
+++ b/openair1/SCHED_NR/phy_procedures_nr_common.c
@@ -31,12 +31,13 @@
 */
 #include "PHY/defs_gNB.h"
 #include "PHY/phy_extern.h"
-#include "SCHED_NR/defs.h"
+#include "sched_nr.h"
 
 
 nr_subframe_t nr_subframe_select(nfapi_config_request_t *cfg,unsigned char subframe)
 {
   if (cfg->subframe_config.duplex_mode.value == FDD)
     return(SF_DL);
+  else
+    return SF_DL;
 }
-
diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
index a2099b82cb8c3afa17d2ce20837ae993eb25074d..e40d8e0a5c029b9980eced41e5d79f8a073ffde6 100644
--- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c
+++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
@@ -21,6 +21,7 @@
 
 #include "PHY/phy_extern.h"
 #include "PHY/defs_gNB.h"
+#include "sched_nr.h"
 #include "PHY/NR_TRANSPORT/nr_transport.h"
 #include "SCHED/sched_eNB.h"
 #include "SCHED/sched_common_extern.h"
diff --git a/openair1/SCHED_NR/defs.h b/openair1/SCHED_NR/sched_nr.h
similarity index 62%
rename from openair1/SCHED_NR/defs.h
rename to openair1/SCHED_NR/sched_nr.h
index 61d6b2461cf1e14052a53468ca014e512e064291..dde2c77d6dea8681a70dffb616aaf8d871f7a6c2 100644
--- a/openair1/SCHED_NR/defs.h
+++ b/openair1/SCHED_NR/sched_nr.h
@@ -20,9 +20,9 @@
  */
 
 /*
-  \author R. Knopp, F. Kaltenberger
+  \author Guy De Souza
   \company EURECOM
-  \email knopp@eurecom.fr
+  \email desouza@eurecom.fr
 */
 
 #ifndef __openair_SCHED_NR_DEFS_H__
@@ -33,23 +33,11 @@
 #include "SCHED/sched_eNB.h"
 
 lte_subframe_t nr_subframe_select (nfapi_config_request_t *cfg, unsigned char subframe);
-int nr_generate_pss(  int16_t *d_pss,
-                      int32_t **txdataF,
-                      int16_t amp,
-                      uint8_t ssb_start_symbol,
-                      nfapi_config_request_t* config,
-                      NR_DL_FRAME_PARMS *frame_parms);
-int nr_generate_sss(  int16_t *d_sss,
-                      int32_t **txdataF,
-                      int16_t amp,
-                      uint8_t ssb_start_symbol,
-                      nfapi_config_request_t* config,
-                      NR_DL_FRAME_PARMS *frame_parms);
-int nr_generate_pbch_dmrs(uint32_t gold_sequence,
-                          int32_t **txdataF,
-                          int16_t amp,
-                          nfapi_config_request_t* config,
-                          NR_DL_FRAME_PARMS *frame_parms);
 void nr_set_ssb_first_subcarrier(nfapi_config_request_t *cfg, NR_DL_FRAME_PARMS *fp);
+void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB, gNB_rxtx_proc_t *proc, int do_meas);
+void nr_init_feptx_thread(RU_t *ru,pthread_attr_t *attr_feptx);
+void nr_feptx_ofdm(RU_t *ru);
+void nr_feptx_ofdm_2thread(RU_t *ru);
+void nr_feptx0(RU_t *ru,int slot);
 
 #endif
diff --git a/targets/RT/USER/nr-gnb.c b/targets/RT/USER/nr-gnb.c
index 5c29aab949259edfd98966f56a5a8f1929876809..591a8793848a0022d6e567612e65601dcfc4fbb4 100644
--- a/targets/RT/USER/nr-gnb.c
+++ b/targets/RT/USER/nr-gnb.c
@@ -48,6 +48,7 @@
 
 #include "PHY/defs_gNB.h"
 #include "SCHED/sched_eNB.h"
+#include "SCHED_NR/sched_nr.h"
 #include "PHY/LTE_TRANSPORT/transport_proto.h"
 
 #undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
diff --git a/targets/RT/USER/nr-ru.c b/targets/RT/USER/nr-ru.c
index d3527354bb6b3ed1bd1ea4f15d39b02dd16a0475..c2d09be83f838076c7e8dfdf7ca7c213becf3c15 100644
--- a/targets/RT/USER/nr-ru.c
+++ b/targets/RT/USER/nr-ru.c
@@ -74,6 +74,7 @@
 #include "LAYER2/MAC/mac_extern.h"
 #include "PHY/LTE_TRANSPORT/transport_proto.h"
 #include "SCHED/sched_eNB.h"
+#include "SCHED_NR/sched_nr.h"
 #include "PHY/LTE_ESTIMATION/lte_estimation.h"
 #include "PHY/INIT/phy_init.h"
 
@@ -332,7 +333,7 @@ static inline void fh_if5_mobipass_south_out(RU_t *ru) {
 static inline void fh_if4p5_south_out(RU_t *ru) {
   if (ru == RC.ru[0]) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff );
   LOG_D(PHY,"Sending IF4p5 for frame %d subframe %d\n",ru->proc.frame_tx,ru->proc.subframe_tx);
-  if (subframe_select(&ru->frame_parms,ru->proc.subframe_tx)!=SF_UL) 
+  if (nr_subframe_select(&ru->gNB_list[0]->gNB_config,ru->proc.subframe_tx)!=SF_UL) 
     send_IF4p5(ru,ru->proc.frame_tx, ru->proc.subframe_tx, IF4p5_PDLFFT);
 }
 
@@ -380,7 +381,7 @@ void fh_if4p5_south_in(RU_t *ru,int *frame,int *subframe) {
 
   uint16_t packet_type;
   uint32_t symbol_number=0;
-  uint32_t symbol_mask_full;
+  uint32_t symbol_mask_full=0;
 /*
   if ((fp->frame_type == TDD) && (subframe_select(fp,*subframe)==SF_S))  
     symbol_mask_full = (1<<fp->ul_symbols_in_S_subframe)-1;   
@@ -2155,7 +2156,7 @@ void init_RU(char *rf_config_file) {
     gNB0             = ru->gNB_list[0];
     fp               = ru->nr_frame_parms;
     LOG_D(PHY, "RU FUnction:%d ru->if_south:%d\n", ru->function, ru->if_south);
-    LOG_D(PHY, "gNB0:%p   fp:%d\n", gNB0, fp);
+
     if (gNB0)
     {
       if ((ru->function != NGFI_RRU_IF5) && (ru->function != NGFI_RRU_IF4p5))