diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h
index 5ce27612562295decfac1882807933f0349bfe41..0d4eec073d88a6f8a6c7c5e773abed64bec18a3f 100644
--- a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h
+++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h
@@ -684,6 +684,7 @@ typedef struct {
   nfapi_uint16_tlv_t ssb_position_in_burst;
   nfapi_uint16_tlv_t ssb_periodicity;
   nfapi_uint16_tlv_t ss_pbch_block_power;
+  nfapi_uint16_tlv_t n_ssb_crb;
 } nfapi_sch_config_t;
 
 #define NFAPI_SCH_CONFIG_PRIMARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG 0x001E
@@ -694,6 +695,7 @@ typedef struct {
 #define NFAPI_SCH_CONFIG_SSB_POSITION_IN_BURST 0x0023
 #define NFAPI_SCH_CONFIG_SSB_PERIODICITY 0x0024
 #define NFAPI_SCH_CONFIG_SS_PBCH_BLOCK_POWER 0x0025
+#define NFAPI_SCH_CONFIG_N_SSB_CRB 0x0025
 
 typedef struct {
 	nfapi_uint16_tlv_t configuration_index;
diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c
index 9d8a70905cb7bfdb51259e4a750722dab2d3f50a..67d6720d645adbd361d0766638721221f4cbc77e 100644
--- a/openair1/PHY/INIT/nr_init.c
+++ b/openair1/PHY/INIT/nr_init.c
@@ -347,6 +347,8 @@ void nr_phy_config_request(PHY_VARS_gNB *gNB)
   gNB_config->rf_config.ul_channel_bandwidth.value = 106;
   gNB_config->sch_config.half_frame_index.value = 0;
   gNB_config->sch_config.ssb_subcarrier_offset.value = 0;
+  gNB_config->sch_config.n_ssb_crb.value = 86;
+  gNB_config->sch_config.ssb_subcarrier_offset.value = 0;
 
 
   gNB->mac_enabled     = 1;
diff --git a/openair1/PHY/INIT/nr_init_ru.c b/openair1/PHY/INIT/nr_init_ru.c
index 1eb4c2bd2f6763adc32f69c423794b20f3040042..fdad8e94ab032783693da7ac1bb2fe351b6ba269 100644
--- a/openair1/PHY/INIT/nr_init_ru.c
+++ b/openair1/PHY/INIT/nr_init_ru.c
@@ -79,14 +79,14 @@ int nr_phy_init_RU(RU_t *ru) {
     LOG_I(PHY,"[INIT] common.txdata_BF= %p (%lu bytes)\n",ru->common.txdataF_BF,
 	  ru->nb_tx*sizeof(int32_t*));
     for (i=0; i<ru->nb_tx; i++) {
-      ru->common.txdataF_BF[i] = (int32_t*)malloc16_clear(fp->samples_per_frame_wCP*sizeof(int32_t) );
+      ru->common.txdataF_BF[i] = (int32_t*)malloc16_clear(fp->samples_per_subframe_wCP*sizeof(int32_t) );
       LOG_I(PHY,"txdataF_BF[%d] %p for RU %d\n",i,ru->common.txdataF_BF[i],ru->idx);
     }
     // allocate FFT output buffers (RX)
     ru->common.rxdataF     = (int32_t**)malloc16(ru->nb_rx*sizeof(int32_t*) );
     for (i=0; i<ru->nb_rx; i++) {    
       // allocate 2 subframes of I/Q signal data (frequency)
-      ru->common.rxdataF[i] = (int32_t*)malloc16_clear(sizeof(int32_t)*(2*fp->samples_per_frame_wCP) ); 
+      ru->common.rxdataF[i] = (int32_t*)malloc16_clear(sizeof(int32_t)*(2*fp->samples_per_subframe_wCP) ); 
       LOG_I(PHY,"rxdataF[%d] %p for RU %d\n",i,ru->common.rxdataF[i],ru->idx);
     }
 
diff --git a/openair1/PHY/NR_TRANSPORT/nr_pss.c b/openair1/PHY/NR_TRANSPORT/nr_pss.c
index d30bab8cfb8df8989e5b2235cb0385e98ef1e3cd..0c8984c4eda4bab2ac77ba55ddf3b8afb074e348 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_pss.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_pss.c
@@ -63,7 +63,7 @@ int nr_generate_pss(  int16_t *d_pss,
   {
 
     // PSS occupies a predefined position (subcarriers 56-182, symbol 0) within the SSB block starting from
-    k = frame_parms->first_carrier_offset + config->sch_config.ssb_subcarrier_offset.value + 56; //and
+    k = frame_parms->first_carrier_offset + frame_parms->ssb_start_subcarrier + 56; //and
     l = ssb_start_symbol;
 
     for (m = 0; m < NR_PSS_LENGTH; m++) {
diff --git a/openair1/PHY/NR_TRANSPORT/nr_sss.c b/openair1/PHY/NR_TRANSPORT/nr_sss.c
index e8959ca9d1748b7d14c805655f44fa1c4f6e676d..ac3d4d27433b267385e9995b4be8aae64c2a12b7 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_sss.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_sss.c
@@ -73,7 +73,7 @@ int nr_generate_sss(  int16_t *d_sss,
   {
 
     // SSS occupies a predefined position (subcarriers 56-182, symbol 2) within the SSB block starting from
-    k = frame_parms->first_carrier_offset + config->sch_config.ssb_subcarrier_offset.value + 56; //and
+    k = frame_parms->first_carrier_offset + frame_parms->ssb_start_subcarrier + 56; //and
     l = ssb_start_symbol + 2;
 
     for (m = 0; m < NR_SSS_LENGTH; m++) {
diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h
index 28184d741a58f5d25e92662b4f6da15698a9983b..7d9ef2962792fc5f38b343dea0d586e216570dc8 100644
--- a/openair1/PHY/defs.h
+++ b/openair1/PHY/defs.h
@@ -204,6 +204,8 @@ typedef struct {
   uint32_t samples_per_subframe_wCP;
   /// Number of samples in a radio frame without CP
   uint32_t samples_per_frame_wCP;
+  /// Start in Subcarrier index of the SSB block
+  uint16_t ssb_start_subcarrier;
 
 } NR_DL_FRAME_PARMS;
 struct PHY_VARS_gNB_s;
diff --git a/openair1/SCHED_NR/defs.h b/openair1/SCHED_NR/defs.h
index 17df26cac2d8f8e22edd2e8a58917423326a3dad..97ffe24e3683c9193edf96b1f30c537a42065506 100644
--- a/openair1/SCHED_NR/defs.h
+++ b/openair1/SCHED_NR/defs.h
@@ -45,5 +45,6 @@ int nr_generate_sss(  int16_t *d_sss,
                       uint8_t ssb_start_symbol,
                       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);
 
 #endif
diff --git a/openair1/SCHED_NR/nr_ru_procedures.c b/openair1/SCHED_NR/nr_ru_procedures.c
index 7c115939a3a5f1d3243cf4f9d6299452d561d8d5..3d01cb97813b906551ac6f18a9b4d0d812a7dfd3 100644
--- a/openair1/SCHED_NR/nr_ru_procedures.c
+++ b/openair1/SCHED_NR/nr_ru_procedures.c
@@ -32,8 +32,7 @@
 
 #include "PHY/defs.h"
 #include "PHY/extern.h"
-#include "SCHED/defs.h"
-#include "SCHED/extern.h"
+#include "SCHED_NR/defs.h"
 
 #include "PHY/LTE_TRANSPORT/if4_tools.h"
 #include "PHY/LTE_TRANSPORT/if5_tools.h"
diff --git a/openair1/SCHED_NR/phy_procedures_nr_common.c b/openair1/SCHED_NR/phy_procedures_nr_common.c
index ef00e588e2714478a3358b92fef47dd562ff2542..54f04eb9c782d4b982a9e0ccc66b87d71f8944b9 100644
--- a/openair1/SCHED_NR/phy_procedures_nr_common.c
+++ b/openair1/SCHED_NR/phy_procedures_nr_common.c
@@ -31,8 +31,7 @@
 */
 #include "PHY/defs.h"
 #include "PHY/extern.h"
-#include "SCHED/defs.h"
-#include "SCHED/extern.h"
+#include "SCHED_NR/defs.h"
 
 
 nr_subframe_t nr_subframe_select(nfapi_config_request_t *cfg,unsigned char subframe)
@@ -75,7 +74,8 @@ int nr_get_ssb_start_symbol(nfapi_config_request_t *cfg, NR_DL_FRAME_PARMS *fp)
   return symbol;
 }
 
-void nr_set_ssb_first_subcarrier(nfapi_config_request_t *cfg)
+void nr_set_ssb_first_subcarrier(nfapi_config_request_t *cfg, NR_DL_FRAME_PARMS *fp)
 {
-  cfg->sch_config.ssb_subcarrier_offset.value = 0;
+  int start_rb = cfg->sch_config.n_ssb_crb.value / pow(2,cfg->subframe_config.numerology_index_mu.value);
+  fp->ssb_start_subcarrier = 12 * start_rb + cfg->sch_config.ssb_subcarrier_offset.value;
 }
diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
index 609b845cc1c50cec78995ec1b6e809c3faa82574..ece9e7a576f2759a44d8a5a6d17dae37d37a1614 100644
--- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c
+++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
@@ -51,7 +51,7 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame, int 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);
+  nr_set_ssb_first_subcarrier(cfg, fp);
 
   if (subframe == ss_subframe)
   {
diff --git a/targets/RT/USER/nr-ru.c b/targets/RT/USER/nr-ru.c
index 8b5c7528373c3b75decd3265090f94f5e1666e7f..3a63503c04fd9cd6d0b3b257ca8ef4a830576782 100644
--- a/targets/RT/USER/nr-ru.c
+++ b/targets/RT/USER/nr-ru.c
@@ -814,9 +814,9 @@ void tx_rf(RU_t *ru) {
     for (i=0; i<ru->nb_tx; i++)
       txp[i] = (void*)&ru->common.txdata[i][(proc->subframe_tx*fp->samples_per_subframe)-sf_extension];
 
-    /*if (proc->subframe_tx == 9){
-      write_output("txdataF_frame.m","txdataF_frame",&ru->common.txdataF_BF[i],fp->samples_per_frame_wCP, 1, 1);
-      write_output("txdata_frame.m","txdata_frame",&ru->common.txdata[i],fp->samples_per_frame, 1, 1);
+    /*if (proc->subframe_tx == 0){
+      write_output("txdataF_frame.m","txdataF_frame",&ru->common.txdataF_BF[i],fp->samples_per_subframe_wCP, 1, 1);
+      write_output("txdata_frame.m","txdata_frame",&ru->common.txdata[i],fp->samples_per_subframe, 1, 1);
     }*/
     
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, (proc->timestamp_tx-ru->openair0_cfg.tx_sample_advance)&0xffffffff );