diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.h b/openair1/PHY/NR_TRANSPORT/nr_dci.h
index ccebf3c82f5d9b1fdad3ca65c5f2da05c5a3e14b..047139aa63376756d93d560c50da28120d379898 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dci.h
+++ b/openair1/PHY/NR_TRANSPORT/nr_dci.h
@@ -46,6 +46,10 @@ void nr_fill_dci(PHY_VARS_gNB *gNB,
                  int frame,
                  int slot);
 
+void nr_fill_ul_dci(PHY_VARS_gNB *gNB,
+		    int frame,
+		    int slot);
+
 void nr_fill_cce_list(PHY_VARS_gNB *gNB, uint8_t m);
 
 void get_coreset_rballoc(uint8_t *FreqDomainResource,int *n_rb,int *rb_offset);
diff --git a/openair1/SCHED_NR/fapi_nr_l1.c b/openair1/SCHED_NR/fapi_nr_l1.c
index 063b56564dd11be35ed2fb7e888e0c9354fe5db6..be4ab944dbb40d2c2d24ea95b2e89f9ad1947d55 100644
--- a/openair1/SCHED_NR/fapi_nr_l1.c
+++ b/openair1/SCHED_NR/fapi_nr_l1.c
@@ -44,7 +44,7 @@ void handle_nr_nfapi_ssb_pdu(PHY_VARS_gNB *gNB,int frame,int slot,
   AssertFatal(dl_tti_pdu->ssb_pdu.ssb_pdu_rel15.bchPayloadFlag== 1, "bchPayloadFlat %d != 1\n",
               dl_tti_pdu->ssb_pdu.ssb_pdu_rel15.bchPayloadFlag);
 
-  LOG_I(PHY,"%d.%d : pbch_pdu: %x\n",frame,slot,dl_tti_pdu->ssb_pdu.ssb_pdu_rel15.bchPayload,dl_tti_pdu->ssb_pdu.ssb_pdu_rel15.SsbBlockIndex);
+  LOG_I(PHY,"%d.%d : pbch_pdu: %x\n",frame,slot,dl_tti_pdu->ssb_pdu.ssb_pdu_rel15.bchPayload);
   gNB->ssb_pdu = &dl_tti_pdu->ssb_pdu;
 }
 
diff --git a/openair2/LAYER2/NR_MAC_gNB/config.c b/openair2/LAYER2/NR_MAC_gNB/config.c
index 9f3e5a1ef26efb4a5e8b973b4151c7c09acc6063..a4f8e64b03907c4dba5270d6eacc142e1e039735 100644
--- a/openair2/LAYER2/NR_MAC_gNB/config.c
+++ b/openair2/LAYER2/NR_MAC_gNB/config.c
@@ -367,11 +367,14 @@ void config_common(int Mod_idP, NR_ServingCellConfigCommon_t *scc) {
  
   // SSB Table Configuration
   int scs_scaling = 1<<(cfg->ssb_config.scs_common.value);
+  if (scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA < 600000)
+    scs_scaling = scs_scaling*3;
+  if (scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA > 2016666)
+    scs_scaling = scs_scaling>>2;
   uint32_t absolute_diff = (*scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB - scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA);
   cfg->ssb_table.ssb_offset_point_a.value = absolute_diff/(12*scs_scaling);
   cfg->ssb_table.ssb_offset_point_a.tl.tag = NFAPI_NR_CONFIG_SSB_OFFSET_POINT_A_TAG;
   cfg->num_tlv++;
-
   cfg->ssb_table.ssb_period.value = *scc->ssb_periodicityServingCell;
   cfg->ssb_table.ssb_period.tl.tag = NFAPI_NR_CONFIG_SSB_PERIOD_TAG;
   cfg->num_tlv++;
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
index f657d52d50f7785f92202d775183736dc0d19013..f73e58159298e4de988cfbd3bfed4a1fdf0a69b9 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
@@ -69,7 +69,6 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t slotP){
   int mib_sdu_length;
   int CC_id;
 
-
   AssertFatal(slotP == 0, "Subframe must be 0\n");
   AssertFatal((frameP & 7) == 0, "Frame must be a multiple of 8\n");
 
@@ -107,34 +106,36 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t slotP){
       AssertFatal(cc->ServingCellConfigCommon->ssbSubcarrierSpacing,"ssbSubcarrierSpacing is null\n");
       AssertFatal(cc->ServingCellConfigCommon->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0],"band is null\n");
       long band = *cc->ServingCellConfigCommon->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0];
-      uint32_t ssb_offset0 = cc->ServingCellConfigCommon->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB - cc->ServingCellConfigCommon->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA;
+      uint32_t ssb_offset0 = *cc->ServingCellConfigCommon->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB - cc->ServingCellConfigCommon->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA;
       int ratio;
       switch (*cc->ServingCellConfigCommon->ssbSubcarrierSpacing) {
       case NR_SubcarrierSpacing_kHz15:
-	AssertFatal(band <= 79, "Band %d is not possible for SSB with 15 kHz SCS\n",band);
+	AssertFatal(band <= 79, "Band %ld is not possible for SSB with 15 kHz SCS\n",band);
 	if (band<77) // below 3GHz
 	  ratio=3; // NRARFCN step is 5 kHz
 	else
 	  ratio=1; // NRARFCN step is 15 kHz
 	break;
       case NR_SubcarrierSpacing_kHz30:
-	AssertFatal(band <= 79, "Band %d is not possible for SSB with 15 kHz SCS\n",band);
+	AssertFatal(band <= 79, "Band %ld is not possible for SSB with 15 kHz SCS\n",band);
 	if (band<77) // below 3GHz
 	  ratio=6; // NRARFCN step is 5 kHz
 	else
 	  ratio=2; // NRARFCN step is 15 kHz
 	break;
       case NR_SubcarrierSpacing_kHz120:
-	AssertFatal(band >= 257, "Band %d is not possible for SSB with 120 kHz SCS\n",band);
-	ratio=8; // NRARFCN step is 15 kHz
+	AssertFatal(band >= 257, "Band %ld is not possible for SSB with 120 kHz SCS\n",band);
+	ratio=2; // NRARFCN step is 15 kHz
 	break;
       case NR_SubcarrierSpacing_kHz240:
-	AssertFatal(band >= 257, "Band %d is not possible for SSB with 240 kHz SCS\n",band);
-	ratio=16; // NRARFCN step is 15 kHz
+	AssertFatal(band >= 257, "Band %ld is not possible for SSB with 240 kHz SCS\n",band);
+	ratio=4; // NRARFCN step is 15 kHz
 	break;
+      default:
+        AssertFatal(1==0,"SCS %ld not allowed for SSB \n", *cc->ServingCellConfigCommon->ssbSubcarrierSpacing);
       }
       dl_config_pdu->ssb_pdu.ssb_pdu_rel15.SsbSubcarrierOffset = 0; //kSSB
-      dl_config_pdu->ssb_pdu.ssb_pdu_rel15.ssbOffsetPointA     = ssb_offset0/ratio;
+      dl_config_pdu->ssb_pdu.ssb_pdu_rel15.ssbOffsetPointA     = ssb_offset0/(ratio*12);
       dl_config_pdu->ssb_pdu.ssb_pdu_rel15.bchPayloadFlag      = 1;
       dl_config_pdu->ssb_pdu.ssb_pdu_rel15.bchPayload          = ((uint32_t)cc->MIB_pdu.payload[0]) & ((1<<24)-1);
       dl_req->nPDUs++;