diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai
index b41e53ea90fd1ce85c0d38e7232e9eee0b5f774e..57f6bc953800f8857e1b3d93d9b80e9496990019 100755
--- a/cmake_targets/build_oai
+++ b/cmake_targets/build_oai
@@ -895,7 +895,7 @@ function main() {
  
   # build RF device and transport protocol libraries
   #####################################
-  if [ "$eNB" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$nrUE" = "1" - o "$HWLAT" = "1" ] ; then
+  if [ "$eNB" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$nrUE" = "1" -o "$HWLAT" = "1" ] ; then
 
       build_dir=$build_dir
 
diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c
index 785976084f7f13c7fda1c360169cf46871b6b675..0e30ebfa621431c319c7db58ffa832047fa69fb9 100644
--- a/openair1/PHY/INIT/nr_init.c
+++ b/openair1/PHY/INIT/nr_init.c
@@ -80,7 +80,7 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
 
   // shortcuts
   NR_DL_FRAME_PARMS* const fp       = &gNB->frame_parms;
-  nfapi_config_request_t* cfg       = &gNB->gNB_config;
+  nfapi_config_request_t* cfg       = gNB->gNB_config;
   NR_gNB_COMMON* const common_vars  = &gNB->common_vars;
   LTE_eNB_PUSCH** const pusch_vars   = gNB->pusch_vars;
   LTE_eNB_SRS* const srs_vars        = gNB->srs_vars;
@@ -469,7 +469,7 @@ void phy_config_request(PHY_Config_t *phy_config) {
 void phy_free_nr_gNB(PHY_VARS_gNB *gNB)
 {
 //  NR_DL_FRAME_PARMS* const fp       = &gNB->frame_parms;
-  nfapi_config_request_t *cfg       = &gNB->gNB_config;
+  nfapi_config_request_t *cfg       = gNB->gNB_config;
   NR_gNB_COMMON* const common_vars  = &gNB->common_vars;
   LTE_eNB_PUSCH** const pusch_vars   = gNB->pusch_vars;
   LTE_eNB_SRS* const srs_vars        = gNB->srs_vars;
diff --git a/openair1/PHY/NR_TRANSPORT/nr_pss.c b/openair1/PHY/NR_TRANSPORT/nr_pss.c
index 5cf7d5b007d882186002cdacebff61c21246d888..eba023692cd2fb213480297d60e950d0f0752451 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_pss.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_pss.c
@@ -28,9 +28,8 @@
 int nr_generate_pss(  int16_t *d_pss,
                       int32_t **txdataF,
                       int16_t amp,
-                      int16_t ssb_start_subcarrier,
                       uint8_t ssb_start_symbol,
-                      nfapi_config_request_t config,
+                      nfapi_config_request_t* config,
                       NR_DL_FRAME_PARMS *frame_parms)
 {
   int i,m,k,l;
@@ -38,7 +37,7 @@ int nr_generate_pss(  int16_t *d_pss,
   int16_t x[NR_PSS_LENGTH];
   const int x_initial[7] = {0, 1, 1 , 0, 1, 1, 1};
 
-  uint8_t Nid2 = config.sch_config.physical_cell_id.value % 3;
+  uint8_t Nid2 = config->sch_config.physical_cell_id.value % 3;
 
   /// Sequence generation
   for (i=0; i < 7; i++)
@@ -50,22 +49,21 @@ int nr_generate_pss(  int16_t *d_pss,
 
   for (i=0; i < NR_PSS_LENGTH; i++) {
     m = (i + 43*Nid2)%(NR_PSS_LENGTH);
-    d_pss[i] = (1 - 2*x[m]) * 32767;
+    d_pss[i] = (1 - 2*x[m]) * 768;
   }
 
   /// Resource mapping
-  a = (config.rf_config.tx_antenna_ports.value == 1) ? amp : (amp*ONE_OVER_SQRT2_Q15)>>15;
+  a = (config->rf_config.tx_antenna_ports.value == 1) ? amp : (amp*ONE_OVER_SQRT2_Q15)>>15;
 
-  for (aa = 0; aa < config.rf_config.tx_antenna_ports.value; aa++)
+  for (aa = 0; aa < config->rf_config.tx_antenna_ports.value; aa++)
   {
 
     // PSS occupies a predefined position (subcarriers 56-182, symbol 0) within the SSB block starting from
-    k = frame_parms->first_carrier_offset + ssb_start_subcarrier + 56; //and
+    k = frame_parms->first_carrier_offset + config->sch_config.ssb_subcarrier_offset.value + 56; //and
     l = ssb_start_symbol;
 
     for (m = 0; m < NR_PSS_LENGTH; m++) {
-      ((int16_t*)txdataF[aa])[2*(l*frame_parms->ofdm_symbol_size + k)] = (a * d_pss[m]) >> 15;
-      //((int16_t*)txdataF[aa])[2*(l*frame_parms->ofdm_symbol_size + k) + 1] = (a * pss_mod[2*m + 1]) >> 15;
+      ((short*)txdataF[aa])[2*(l*frame_parms->ofdm_symbol_size + k)] = (a * d_pss[m]) >> 15;
       k+=1;
 
       if (k >= frame_parms->ofdm_symbol_size) {
diff --git a/openair1/PHY/NR_TRANSPORT/nr_sss.c b/openair1/PHY/NR_TRANSPORT/nr_sss.c
index a4970dd05a13a71ea92dd4b71c90fbfd15bd89d8..0e9c40086190d5eb80e5eec4063dd3b901bbe755 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_sss.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_sss.c
@@ -28,9 +28,8 @@ extern short nr_mod_table[MOD_TABLE_SIZE_SHORT];
 int nr_generate_sss(  int16_t *d_sss,
                       int32_t **txdataF,
                       int16_t amp,
-                      int16_t ssb_start_subcarrier,
                       uint8_t ssb_start_symbol,
-                      nfapi_config_request_t config,
+                      nfapi_config_request_t* config,
                       NR_DL_FRAME_PARMS *frame_parms)
 {
   int i,m,k,l;
@@ -42,7 +41,7 @@ int nr_generate_sss(  int16_t *d_sss,
   const int x1_initial[7] = { 1, 0, 0, 0, 0, 0, 0 };
 
   /// Sequence generation
-  Nid = config.sch_config.physical_cell_id.value;
+  Nid = config->sch_config.physical_cell_id.value;
   Nid2 = Nid % 3;
   Nid1 = (Nid - Nid2)/3;
 
@@ -60,22 +59,21 @@ int nr_generate_sss(  int16_t *d_sss,
   m1 = Nid1 % 112;
 
   for (i = 0; i < NR_SSS_LENGTH ; i++) {
-    d_sss[i] = (1 - 2*x0[(i + m0) % NR_SSS_LENGTH] ) * (1 - 2*x1[(i + m1) % NR_SSS_LENGTH] ) * 32767;
+    d_sss[i] = (1 - 2*x0[(i + m0) % NR_SSS_LENGTH] ) * (1 - 2*x1[(i + m1) % NR_SSS_LENGTH] ) * 768;
   }
 
   /// Resource mapping
-  a = (config.rf_config.tx_antenna_ports.value == 1) ? amp : (amp*ONE_OVER_SQRT2_Q15)>>15;
+  a = (config->rf_config.tx_antenna_ports.value == 1) ? amp : (amp*ONE_OVER_SQRT2_Q15)>>15;
 
-  for (aa = 0; aa < config.rf_config.tx_antenna_ports.value; aa++)
+  for (aa = 0; aa < config->rf_config.tx_antenna_ports.value; aa++)
   {
 
     // SSS occupies a predefined position (subcarriers 56-182, symbol 2) within the SSB block starting from
-    k = frame_parms->first_carrier_offset + ssb_start_subcarrier + 56; //and
+    k = frame_parms->first_carrier_offset + config->sch_config.ssb_subcarrier_offset.value + 56; //and
     l = ssb_start_symbol + 2;
 
     for (m = 0; m < NR_SSS_LENGTH; m++) {
-      ((int16_t*)txdataF[aa])[2*(l*frame_parms->ofdm_symbol_size + k)] = (a * d_sss[2*m]) >> 15;
-      //((int16_t*)txdataF[aa])[2*(l*frame_parms->ofdm_symbol_size + k) + 1] = (a * sss_mod[2*m + 1]) >> 15;
+      ((int16_t*)txdataF[aa])[2*(l*frame_parms->ofdm_symbol_size + k)] = (a * d_sss[m]) >> 15;
       k+=1;
 
       if (k >= frame_parms->ofdm_symbol_size) {
diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h
index d62756106573055b183e15ded5d21fb04909b027..c1a1b8e85c0c6cae0923cb416ea2c002e3b4d3cf 100644
--- a/openair1/PHY/defs.h
+++ b/openair1/PHY/defs.h
@@ -1972,6 +1972,10 @@ typedef struct PHY_VARS_gNB_s {
   uint8_t pbch_pdu[4]; //PBCH_PDU_SIZE
   char gNB_generate_rar;
 
+  /// NR synchronization sequences
+  int16_t d_pss[NR_PSS_LENGTH];
+  int16_t d_sss[NR_SSS_LENGTH];
+
   /// Indicator set to 0 after first SR
   uint8_t first_sr[NUMBER_OF_UE_MAX];
 
diff --git a/openair1/SCHED_NR/phy_procedures_nr_common.c b/openair1/SCHED_NR/phy_procedures_nr_common.c
index e4cb6262373365481c64dc47db0a2cadb1375e3b..90b1662b2c33fd4b995c43be1b160d3f75c4bc8b 100644
--- a/openair1/SCHED_NR/phy_procedures_nr_common.c
+++ b/openair1/SCHED_NR/phy_procedures_nr_common.c
@@ -40,3 +40,42 @@ nr_subframe_t nr_subframe_select(nfapi_config_request_t *cfg,unsigned char subfr
   if (cfg->subframe_config.duplex_mode.value == FDD)
     return(SF_DL);
 }
+
+// First possible symbol is used with n=0
+int nr_get_ssb_start_symbol(nfapi_config_request_t *cfg, NR_DL_FRAME_PARMS *fp)
+{
+  int mu = cfg->subframe_config.numerology_index_mu.value;
+  int symbol = 0;
+
+  switch(mu) {
+
+  case NR_MU_0:
+    symbol = 2;
+    break;
+
+  case NR_MU_1: // case B
+    symbol = 4;
+    break;
+
+  case NR_MU_3:
+    symbol = 4;
+    break;
+
+  case NR_MU_4:
+    symbol = 8;
+    break;
+
+  default:
+    AssertFatal(0==1, "Invalid numerology index %d for the synchronization block\n", mu);
+  }
+
+  if (cfg->sch_config.half_frame_index)
+    symbol += (5 * fp->symbols_per_slot * fp->slots_per_subframe);
+
+  return symbol;
+}
+
+void nr_set_ssb_first_subcarrier(nfapi_config_request_t *cfg)
+{
+  cfg->sch_config.ssb_subcarrier_offset.value = 0;
+}
diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
index baaf375e9c6a1af5f02586e975e52edca1a3ae8d..563f503f0e030a724afc207b4cb24245070f1ea2 100644
--- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c
+++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
@@ -47,7 +47,16 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame, int subframe) {
   int **txdataF = gNB->common_vars.txdataF;
   uint8_t *pbch_pdu=&gNB->pbch_pdu[0];
 
-  LOG_D(PHY,"common_signal_procedures: frame %d, subframe %d\n",frame,subframe); 
+  LOG_D(PHY,"common_signal_procedures: frame %d, subframe %d\n",frame,subframe);
+
+  int ssb_start_symbol = nr_get_ssb_start_symbol(cfg, fp);
+  nr_set_ssb_first_subcarrier(cfg);
+
+  if (subframe == (cfg->sch_config.half_frame_index)? 0:5)
+  {
+    nr_generate_pss(gNB->d_pss, txdataF, AMP, ssb_start_symbol, cfg, fp);
+    nr_generate_sss(gNB->d_sss, txdataF, AMP_OVER_2, ssb_start_symbol, cfg, fp);
+  }
 
 }
 
@@ -66,8 +75,8 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
 
   if ((cfg->subframe_config.duplex_mode.value == TDD) && (nr_subframe_select(cfg,subframe)==SF_UL)) return;
 
-  //VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_TX+offset,1);
-  //if (do_meas==1) start_meas(&gNB->phy_proc_tx);
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_TX+offset,1);
+  if (do_meas==1) start_meas(&gNB->phy_proc_tx);
 
   // clear the transmit data array for the current subframe
   for (aa=0; aa<cfg->rf_config.tx_antenna_ports.value; aa++) {      
diff --git a/targets/RT/USER/nr-ru.c b/targets/RT/USER/nr-ru.c
index 61e69bf359d039a9b2393481257c0e3885d03674..2dba1f6d1bf50cc103ed6c724cbce5cf3a7430e0 100644
--- a/targets/RT/USER/nr-ru.c
+++ b/targets/RT/USER/nr-ru.c
@@ -1373,11 +1373,12 @@ static void* ru_thread( void* param ) {
     AssertFatal(ret==0,"Cannot connect to radio\n");
   }
   if (ru->if_south == LOCAL_RF) { // configure RF parameters only 
-        fill_rf_config(ru,ru->rf_config_file);
-        nr_init_frame_parms(ru->gNB_list[0]->gNB_config, fp);
-        phy_init_RU(ru);
- 
-        ret = openair0_device_load(&ru->rfdevice,&ru->openair0_cfg);
+    fill_rf_config(ru,ru->rf_config_file);
+    nr_init_frame_parms(ru->gNB_list[0]->gNB_config, fp);
+    nr_dump_frame_parms(fp);
+    phy_init_RU(ru);
+
+    ret = openair0_device_load(&ru->rfdevice,&ru->openair0_cfg);
   }
   if (setup_RU_buffers(ru)!=0) {
         printf("Exiting, cannot initialize RU Buffers\n");
@@ -1391,9 +1392,6 @@ static void* ru_thread( void* param ) {
   pthread_mutex_unlock(&RC.ru_mutex);
   
   wait_sync("ru_thread");
-  
-
-
 
   // Start RF device if any
   if (ru->start_rf) {
diff --git a/targets/RT/USER/nr-softmodem.c b/targets/RT/USER/nr-softmodem.c
index facbdfcb760950cb5669d49f572b2af1b74654af..a2e979fcf8d933bba669bb50415f4ff22dfb69ef 100644
--- a/targets/RT/USER/nr-softmodem.c
+++ b/targets/RT/USER/nr-softmodem.c
@@ -760,7 +760,7 @@ void wait_gNBs(void) {
 
       for (j=0;j<RC.nb_L1_CC[i];j++) {
 	if (RC.gNB[i][j]->configured==0) {
-	  waiting=1;
+	  waiting=0; //skip gNB configuration check
 	  break;
         } 
       }
@@ -839,7 +839,7 @@ int restart_L1L2(module_id_t gnb_id)
   int cc_id;
   MessageDef *msg_p = NULL;
 
-  LOG_W(ENB_APP, "restarting lte-softmodem\n");
+  LOG_W(ENB_APP, "restarting nr-softmodem\n");
 
   /* block threads */
   sync_var = -1;
@@ -859,7 +859,7 @@ int restart_L1L2(module_id_t gnb_id)
     LOG_E(RRC, "Create task for RRC eNB failed\n");
     return -1;
   } else {
-    LOG_I(RRC, "Re-created task for RRC eNB successfully\n");
+    LOG_I(RRC, "Re-created task for RRC gNB successfully\n");
   }
   if (itti_create_task (TASK_L2L1, l2l1_task, NULL) < 0) {
     LOG_E(PDCP, "Create task for L2L1 failed\n");