diff --git a/executables/nr-gnb.c b/executables/nr-gnb.c
index d2d6e668cd68531997e7483f7772e6ac736abb1f..a3314ae4f9504ebdc775aeb9d5d19e864e3d5c26 100644
--- a/executables/nr-gnb.c
+++ b/executables/nr-gnb.c
@@ -903,7 +903,7 @@ void init_eNB_afterRU(void) {
       
       for (i=0; i<gNB->RU_list[ru_id]->nb_rx; aa++,i++) {
 	LOG_I(PHY,"Attaching RU %d antenna %d to gNB antenna %d\n",gNB->RU_list[ru_id]->idx,i,aa);
-	gNB->prach_vars.rxsigF[aa]    =  gNB->RU_list[ru_id]->prach_rxsigF[i];
+	gNB->prach_vars.rxsigF[aa]    =  gNB->RU_list[ru_id]->prach_rxsigF[0][i];
 	gNB->common_vars.rxdataF[aa]     =  gNB->RU_list[ru_id]->common.rxdataF[i];
       }
     }
diff --git a/executables/nr-ru.c b/executables/nr-ru.c
index 7209595b41cce368d2be58dcaae92d5b7c6fd35c..b33c66ce81764fe19f459570d3345bdbbef18752 100644
--- a/executables/nr-ru.c
+++ b/executables/nr-ru.c
@@ -1583,20 +1583,36 @@ void *ru_thread( void *param ) {
 
       // Do PRACH RU processing
 
-    for(i = 0;i < NUMBER_OF_NR_RU_PRACH_MAX; i++) {
       int prach_id=find_nr_prach_ru(ru,proc->frame_rx,proc->tti_rx,SEARCH_EXIST);
+      int prachStartSymbol;
+      uint16_t format,RA_sfn_index;
+      uint8_t start_symbol,N_t_slot,N_dur,N_RA_slot,config_period;
       if (prach_id>=0) {
-      for(int td_index = 0;td_index < ru->prach_list[prach_id].num_prach_ocas; td_index++) {
-	rx_nr_prach_ru(ru,
-		       ru->prach_list[prach_id].fmt,
-		       ru->prach_list[prach_id].numRA,
-		       ru->prach_list[prach_id].prachStartSymbol + td_index * 4,/*TODO Change the start symbol as needed for each RO*/
-		       proc->frame_rx,proc->tti_rx);
-	    }
+	get_nr_prach_info_from_index(ru->config.prach_config.prach_ConfigurationIndex.value,
+				     proc->frame_rx,proc->tti_rx,
+				     ru->config.carrier_config.dl_frequency.value,
+				     fp->numerology_index,
+				     fp->frame_type,
+				     &format,
+				     &start_symbol,
+				     &N_t_slot,
+				     &N_dur,
+				     &RA_sfn_index,
+				     &N_RA_slot,
+				     &config_period);
+				     
+	for (int prach_oc = 0; prach_oc<ru->prach_list[prach_id].num_prach_ocas; prach_oc++) {
+	  prachStartSymbol = ru->prach_list[prach_id].prachStartSymbol+prach_oc*N_dur+14*N_RA_slot;
+	  rx_nr_prach_ru(ru,
+			 ru->prach_list[prach_id].fmt, //could also use format
+			 ru->prach_list[prach_id].numRA,
+			 prachStartSymbol,
+			 prach_oc,
+			 proc->frame_rx,proc->tti_rx);
+	}
 	free_nr_ru_prach_entry(ru,prach_id);
       }
     }
-    }
 
     // At this point, all information for subframe has been received on FH interface
 
diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
index 9fbd37ad3cfe70e6a6c8f7fb80ccd66ea0f638e8..e57e481dc478cee6eaa2da1d131e308f9ed35c3f 100644
--- a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
+++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
@@ -401,8 +401,9 @@ typedef struct
   nfapi_uint8_tlv_t prach_sub_c_spacing;//Subcarrier spacing of PRACH. [38.211 sec 4.2] Value:0->4
   nfapi_uint8_tlv_t restricted_set_config;//PRACH restricted set config Value: 0: unrestricted 1: restricted set type A 2: restricted set type B
   nfapi_uint8_tlv_t num_prach_fd_occasions;//Corresponds to the parameter 𝑀 in [38.211, sec 6.3.3.2] which equals the higher layer parameter msg1FDM Value: 1,2,4,8
-	nfapi_uint8_tlv_t prach_ConfigurationIndex;//PRACH configuration index. Value:0->255
+  nfapi_uint8_tlv_t prach_ConfigurationIndex;//PRACH configuration index. Value:0->255
   nfapi_nr_num_prach_fd_occasions_t* num_prach_fd_occasions_list;
+
   nfapi_uint8_tlv_t ssb_per_rach;//SSB-per-RACH-occasion Value: 0: 1/8 1:1/4, 2:1/2 3:1 4:2 5:4, 6:8 7:16
   nfapi_uint8_tlv_t prach_multiple_carriers_in_a_band;//0 = disabled 1 = enabled
 
diff --git a/openair1/PHY/INIT/lte_init_ru.c b/openair1/PHY/INIT/lte_init_ru.c
index dddd6b1bd50b134456e540dca75a574ee09ed2cf..4783655a6c53ed95f35a998db31ff4f8de079b06 100644
--- a/openair1/PHY/INIT/lte_init_ru.c
+++ b/openair1/PHY/INIT/lte_init_ru.c
@@ -121,13 +121,13 @@ int phy_init_RU(RU_t *ru) {
     /* number of elements of an array X is computed as sizeof(X) / sizeof(X[0]) */
     //AssertFatal(ru->nb_rx <= sizeof(ru->prach_rxsigF) / sizeof(ru->prach_rxsigF[0]),
     //"nb_antennas_rx too large");
-    ru->prach_rxsigF = (int16_t **)malloc(ru->nb_rx * sizeof(int16_t *));
+    ru->prach_rxsigF[0] = (int16_t **)malloc(ru->nb_rx * sizeof(int16_t *));
 
     for (j=0; j<4; j++) ru->prach_rxsigF_br[j] = (int16_t **)malloc(ru->nb_rx * sizeof(int16_t *));
 
     for (i=0; i<ru->nb_rx; i++) {
-      ru->prach_rxsigF[i] = (int16_t *)malloc16_clear( fp->ofdm_symbol_size*12*2*sizeof(int16_t) );
-      LOG_D(PHY,"[INIT] prach_vars->rxsigF[%d] = %p\n",i,ru->prach_rxsigF[i]);
+      ru->prach_rxsigF[0][i] = (int16_t *)malloc16_clear( fp->ofdm_symbol_size*12*2*sizeof(int16_t) );
+      LOG_D(PHY,"[INIT] prach_vars->rxsigF[%d] = %p\n",i,ru->prach_rxsigF[0][i]);
 
       for (j=0; j<4; j++) {
         ru->prach_rxsigF_br[j][i] = (int16_t *)malloc16_clear( fp->ofdm_symbol_size*12*2*sizeof(int16_t) );
@@ -231,14 +231,14 @@ void phy_free_RU(RU_t *ru) {
     }
 
     for (i = 0; i < ru->nb_rx; i++) {
-      free_and_zero(ru->prach_rxsigF[i]);
+      free_and_zero(ru->prach_rxsigF[0][i]);
 
       for (j = 0; j < 4; j++) free_and_zero(ru->prach_rxsigF_br[j][i]);
     }
 
     for (j = 0; j < 4; j++) free_and_zero(ru->prach_rxsigF_br[j]);
 
-    free_and_zero(ru->prach_rxsigF);
+    free_and_zero(ru->prach_rxsigF[0]);
     /* ru->prach_rxsigF_br is not allocated -> don't free */
 
     for (i = 0; i < RC.nb_L1_inst; i++) {
diff --git a/openair1/PHY/INIT/nr_init_ru.c b/openair1/PHY/INIT/nr_init_ru.c
index 8b70b523a50b8ed45e1cd529a9294cc1cf367e36..8f17c992c41e1bca6ee47a53cf270e0a70aa3665 100644
--- a/openair1/PHY/INIT/nr_init_ru.c
+++ b/openair1/PHY/INIT/nr_init_ru.c
@@ -107,12 +107,14 @@ int nr_phy_init_RU(RU_t *ru) {
     /* number of elements of an array X is computed as sizeof(X) / sizeof(X[0]) */
     //    AssertFatal(ru->nb_rx <= sizeof(ru->prach_rxsigF) / sizeof(ru->prach_rxsigF[0]),
     //		"nb_antennas_rx too large");
-    ru->prach_rxsigF = (int16_t**)malloc(ru->nb_rx * sizeof(int16_t*));
-
-    for (i=0; i<ru->nb_rx; i++) {
-      // largest size for PRACH FFT is 4x98304 (16*24576)
-      ru->prach_rxsigF[i] = (int16_t*)malloc16_clear( 4*98304*2*sizeof(int16_t) );
-      LOG_D(PHY,"[INIT] prach_vars->rxsigF[%d] = %p\n",i,ru->prach_rxsigF[i]);
+    for (j=0;j<NUMBER_OF_NR_RU_PRACH_OCCASIONS_MAX;j++) {
+      ru->prach_rxsigF[j] = (int16_t**)malloc(ru->nb_rx * sizeof(int16_t*));
+      
+      for (i=0; i<ru->nb_rx; i++) {
+	// largest size for PRACH FFT is 4x98304 (16*24576)
+	ru->prach_rxsigF[j][i] = (int16_t*)malloc16_clear( 4*98304*2*sizeof(int16_t) );
+	LOG_D(PHY,"[INIT] prach_vars->rxsigF[%d] = %p\n",i,ru->prach_rxsigF[j][i]);
+      }
     }
     
     AssertFatal(RC.nb_nr_L1_inst <= NUMBER_OF_eNB_MAX,"gNB instances %d > %d\n",
@@ -186,10 +188,12 @@ void nr_phy_free_RU(RU_t *ru)
     for (i = 0; i < ru->nb_rx; i++) free_and_zero(ru->common.rxdataF[i]);
     free_and_zero(ru->common.rxdataF);
 
-    for (i = 0; i < ru->nb_rx; i++) {
-      free_and_zero(ru->prach_rxsigF[i]);
+    for (j=0;j<NUMBER_OF_NR_RU_PRACH_OCCASIONS_MAX;j++) {
+      for (i = 0; i < ru->nb_rx; i++) {
+	free_and_zero(ru->prach_rxsigF[j][i]);
+      }
     }
-
+    
     for (i = 0; i < RC.nb_nr_L1_inst; i++) {
       for (p = 0; p < 15; p++) {
 	  for (j=0; j<ru->nb_tx; j++) free_and_zero(ru->beam_weights[i][p][j]);
diff --git a/openair1/PHY/NR_TRANSPORT/nr_prach.c b/openair1/PHY/NR_TRANSPORT/nr_prach.c
index f8e0cb300877ca2d813b2098db243d9df0fabec2..47939be461ed09beb5a5c0980e97257616e52c6c 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_prach.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_prach.c
@@ -140,7 +140,7 @@ void nr_fill_prach_ru(RU_t *ru,
   ru->prach_list[prach_id].fmt                = prach_pdu->prach_format;
   ru->prach_list[prach_id].numRA              = prach_pdu->num_ra;
   ru->prach_list[prach_id].prachStartSymbol   = prach_pdu->prach_start_symbol;
-	ru->prach_list[prach_id].num_prach_ocas     = prach_pdu->num_prach_ocas;
+  ru->prach_list[prach_id].num_prach_ocas     = prach_pdu->num_prach_ocas;
   pthread_mutex_unlock(&ru->prach_list_mutex);  
 
 }
@@ -160,6 +160,7 @@ void rx_nr_prach_ru(RU_t *ru,
 		    int prachFormat,
 		    int numRA,
 		    int prachStartSymbol,
+		    int prachOccasion,
 		    int frame,
 		    int slot) {
 
@@ -174,7 +175,7 @@ void rx_nr_prach_ru(RU_t *ru,
 
   int msg1_frequencystart   = ru->config.prach_config.num_prach_fd_occasions_list[numRA].k1.value;
 
-  rxsigF            = ru->prach_rxsigF;
+  rxsigF            = ru->prach_rxsigF[prachOccasion];
 
   AssertFatal(ru->if_south == LOCAL_RF,"we shouldn't call this if if_south != LOCAL_RF\n");
 
@@ -541,6 +542,7 @@ void rx_nr_prach_ru(RU_t *ru,
 
 void rx_nr_prach(PHY_VARS_gNB *gNB,
 		 nfapi_nr_prach_pdu_t *prach_pdu,
+		 int prachOccasion,
 		 int frame,
 		 int subframe,
 		 uint16_t *max_preamble,
diff --git a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
index a574661f5b11471e8ef24ed721a5d282b912eca0..543042ff32ecb49cf979ffddb69a253dbfa52c29 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
+++ b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
@@ -288,6 +288,7 @@ void nr_fill_prach(PHY_VARS_gNB *gNB,
 
 void rx_nr_prach(PHY_VARS_gNB *gNB,
                  nfapi_nr_prach_pdu_t *prach_pdu,
+		 int prachOccasion,
                  int frame,
                  int subframe,
                  uint16_t *max_preamble,
@@ -298,6 +299,7 @@ void rx_nr_prach_ru(RU_t *ru,
                     int prach_fmt,
                     int numRA,
                     int prachStartSymbol,
+		    int prachOccasion,
                     int frame,
                     int subframe);
 
diff --git a/openair1/PHY/defs_RU.h b/openair1/PHY/defs_RU.h
index 79a738ada104a14f8811c99350c5623aab37c867..15300426f3e12768596b309edd6304eac126daf4 100644
--- a/openair1/PHY/defs_RU.h
+++ b/openair1/PHY/defs_RU.h
@@ -191,10 +191,11 @@ typedef struct {
   int fmt;
   int numRA;
   int prachStartSymbol;
-	int num_prach_ocas;
+  int num_prach_ocas;
 } RU_PRACH_list_t;
 
 #define NUMBER_OF_NR_RU_PRACH_MAX 8
+#define NUMBER_OF_NR_RU_PRACH_OCCASIONS_MAX 12
 
 typedef struct RU_proc_t_s {
   /// Pointer to associated RU descriptor
@@ -595,8 +596,8 @@ typedef struct RU_t_s {
   RU_PRACH_list_t prach_list[NUMBER_OF_NR_RU_PRACH_MAX];
   /// mutex for prach_list access
   pthread_mutex_t prach_list_mutex;
-  /// received frequency-domain signal for PRACH (IF4p5 RRU)
-  int16_t **prach_rxsigF;
+  /// received frequency-domain signal for PRACH (IF4p5 RRU) 
+  int16_t **prach_rxsigF[NUMBER_OF_NR_RU_PRACH_OCCASIONS_MAX];
   /// received frequency-domain signal for PRACH BR (IF4p5 RRU)
   int16_t **prach_rxsigF_br[4];
   /// sequence number for IF5
diff --git a/openair1/SCHED/prach_procedures.c b/openair1/SCHED/prach_procedures.c
index eb9a2922c555e86fe9023ace2a1f3c85de8ee336..b99bb2ee7d742155f5384a47b3835383abbecc07 100644
--- a/openair1/SCHED/prach_procedures.c
+++ b/openair1/SCHED/prach_procedures.c
@@ -80,7 +80,7 @@ void prach_procedures(PHY_VARS_eNB *eNB,
     ru=eNB->RU_list[i];
 
     for (ru_aa=0,aa=0; ru_aa<ru->nb_rx; ru_aa++,aa++) {
-      eNB->prach_vars.rxsigF[0][aa] = eNB->RU_list[i]->prach_rxsigF[ru_aa];
+      eNB->prach_vars.rxsigF[0][aa] = eNB->RU_list[i]->prach_rxsigF[0][ru_aa];
       int ce_level;
 
       if (br_flag==1)
diff --git a/openair1/SCHED_NR/nr_prach_procedures.c b/openair1/SCHED_NR/nr_prach_procedures.c
index 09cafd92bf19c7da2771629957b38e343b15e1be..6296684b640734989b1e0ffc2200e8a3c08cb0fd 100644
--- a/openair1/SCHED_NR/nr_prach_procedures.c
+++ b/openair1/SCHED_NR/nr_prach_procedures.c
@@ -69,76 +69,92 @@ void L1_nr_prach_procedures(PHY_VARS_gNB *gNB,int frame,int slot) {
   gNB->UL_INFO.rach_ind.pdu_list        = gNB->prach_pdu_indication_list;
   gNB->UL_INFO.rach_ind.number_of_pdus  = 0;
 
-  for (int i=0;i<gNB->num_RU;i++) {
-    ru=gNB->RU_list[i];
-    for (ru_aa=0,aa=0;ru_aa<ru->nb_rx;ru_aa++,aa++) {
-      gNB->prach_vars.rxsigF[aa] = gNB->RU_list[i]->prach_rxsigF[ru_aa];
-    }
-  }
-  nfapi_nr_prach_pdu_t *prach_pdu;
-
-	for(int i = 0; i < NUMBER_OF_NR_PRACH_MAX; i++) {
-    int prach_id=find_nr_prach(gNB,frame,slot,SEARCH_EXIST);
-    if (prach_id>=0) {
-		prach_pdu = &gNB->prach_vars.list[prach_id].pdu;
-	  for(int td_index = 0; td_index < prach_pdu->num_prach_ocas; td_index++) {
-		
-  rx_nr_prach(gNB,
-	      prach_pdu,
-	      frame,
-	      slot,
-	      &max_preamble[0],
-	      &max_preamble_energy[0],
-	      &max_preamble_delay[0]
-	      );
-  free_nr_prach_entry(gNB,prach_id);
-  LOG_I(PHY,"[RAPROC] Frame %d, slot %d : Most likely preamble %d, energy %d dB delay %d (prach_energy counter %d)\n",
+  ru=gNB->RU_list[0];
+
+  int prach_id=find_nr_prach(gNB,frame,slot,SEARCH_EXIST);
+  
+  if (prach_id>=0) {
+    nfapi_nr_prach_pdu_t *prach_pdu = &gNB->prach_vars.list[prach_id].pdu;
+    int prachStartSymbol;
+    uint16_t format,RA_sfn_index;
+    uint8_t start_symbol,N_t_slot,N_dur,N_RA_slot,config_period;
+    
+    get_nr_prach_info_from_index(gNB->gNB_config.prach_config.prach_ConfigurationIndex.value,
+				 frame,slot,
+				 gNB->gNB_config.carrier_config.dl_frequency.value,
+				 gNB->frame_parms.numerology_index,
+				 gNB->frame_parms.frame_type,
+				 &format,
+				 &start_symbol,
+				 &N_t_slot,
+				 &N_dur,
+				 &RA_sfn_index,
+				 &N_RA_slot,
+				 &config_period);
+    
+    for(int prach_oc = 0; prach_oc < NUMBER_OF_NR_RU_PRACH_OCCASIONS_MAX; prach_oc++) {
+      for (ru_aa=0,aa=0;ru_aa<ru->nb_rx;ru_aa++,aa++) {
+	gNB->prach_vars.rxsigF[aa] = ru->prach_rxsigF[prach_oc][ru_aa];
+      }
+
+      prachStartSymbol = prach_pdu->prach_start_symbol+prach_oc*N_dur+14*N_RA_slot;
+     
+      rx_nr_prach(gNB,
+		  prach_pdu,
+		  prach_oc,
+		  frame,
+		  slot,
+		  &max_preamble[0],
+		  &max_preamble_energy[0],
+		  &max_preamble_delay[0]
+		  );
+      free_nr_prach_entry(gNB,prach_id);
+      LOG_I(PHY,"[RAPROC] Frame %d, slot %d : Most likely preamble %d, energy %d dB delay %d (prach_energy counter %d)\n",
         frame,slot,
         max_preamble[0],
         max_preamble_energy[0]/10,
         max_preamble_delay[0],
 	gNB->prach_energy_counter);
 
-  if ((gNB->prach_energy_counter == 100) && 
-      (max_preamble_energy[0] > gNB->measurements.prach_I0+100)) {
-    
-    LOG_I(PHY,"[gNB %d][RAPROC] Frame %d, slot %d Initiating RA procedure with preamble %d, energy %d.%d dB, delay %d start symbol %u freq index %u\n",
-	  gNB->Mod_id,
-	  frame,
-	  slot,
-	  max_preamble[0],
-	  max_preamble_energy[0]/10,
-	  max_preamble_energy[0]%10,
-	  max_preamble_delay[0],
-		prach_pdu->prach_start_symbol,
-		prach_pdu->num_ra);
-    
-    T(T_ENB_PHY_INITIATE_RA_PROCEDURE, T_INT(gNB->Mod_id), T_INT(frame), T_INT(slot),
-      T_INT(max_preamble[0]), T_INT(max_preamble_energy[0]), T_INT(max_preamble_delay[0]));
-    
-    
-    gNB->UL_INFO.rach_ind.number_of_pdus  += 1;
-    
-    gNB->prach_pdu_indication_list[pdu_index].phy_cell_id  = gNB->gNB_config.cell_config.phy_cell_id.value;
-    gNB->prach_pdu_indication_list[pdu_index].symbol_index = prach_pdu->prach_start_symbol + td_index * 4;/*TODO Need to add duration based on prach config index*/ 
-    gNB->prach_pdu_indication_list[pdu_index].slot_index   = slot;
-    gNB->prach_pdu_indication_list[pdu_index].freq_index   = prach_pdu->num_ra;
-    gNB->prach_pdu_indication_list[pdu_index].avg_rssi     = (max_preamble_energy[0]<631) ? (128+(max_preamble_energy[0]/5)) : 254;
-    gNB->prach_pdu_indication_list[pdu_index].avg_snr      = 0xff; // invalid for now
-
-    gNB->prach_pdu_indication_list[pdu_index].num_preamble                        = 1;
-    gNB->prach_pdu_indication_list[pdu_index].preamble_list                       = gNB->preamble_list;
-    gNB->prach_pdu_indication_list[pdu_index].preamble_list[0].preamble_index     = max_preamble[0];
-    gNB->prach_pdu_indication_list[pdu_index].preamble_list[0].timing_advance     = max_preamble_delay[0];
-    gNB->prach_pdu_indication_list[pdu_index].preamble_list[0].preamble_pwr       = 0xffffffff;
-    pdu_index++;
-	}
-  gNB->measurements.prach_I0 = ((gNB->measurements.prach_I0*900)>>10) + ((max_preamble_energy[0]*124)>>10); 
-  if (frame==0) LOG_I(PHY,"prach_I0 = %d.%d dB\n",gNB->measurements.prach_I0/10,gNB->measurements.prach_I0%10);
-  if (gNB->prach_energy_counter < 100) gNB->prach_energy_counter++;
- } 
- }
- }
+      if ((gNB->prach_energy_counter == 100) && 
+	  (max_preamble_energy[0] > gNB->measurements.prach_I0+100)) {
+	
+	LOG_I(PHY,"[gNB %d][RAPROC] Frame %d, slot %d Initiating RA procedure with preamble %d, energy %d.%d dB, delay %d start symbol %u freq index %u\n",
+	      gNB->Mod_id,
+	      frame,
+	      slot,
+	      max_preamble[0],
+	      max_preamble_energy[0]/10,
+	      max_preamble_energy[0]%10,
+	      max_preamble_delay[0],
+	      prach_pdu->prach_start_symbol,
+	      prach_pdu->num_ra);
+	
+	T(T_ENB_PHY_INITIATE_RA_PROCEDURE, T_INT(gNB->Mod_id), T_INT(frame), T_INT(slot),
+	  T_INT(max_preamble[0]), T_INT(max_preamble_energy[0]), T_INT(max_preamble_delay[0]));
+	
+	
+	gNB->UL_INFO.rach_ind.number_of_pdus  += 1;
+	
+	gNB->prach_pdu_indication_list[pdu_index].phy_cell_id  = gNB->gNB_config.cell_config.phy_cell_id.value;
+	gNB->prach_pdu_indication_list[pdu_index].symbol_index = prachStartSymbol; 
+	gNB->prach_pdu_indication_list[pdu_index].slot_index   = slot;
+	gNB->prach_pdu_indication_list[pdu_index].freq_index   = prach_pdu->num_ra;
+	gNB->prach_pdu_indication_list[pdu_index].avg_rssi     = (max_preamble_energy[0]<631) ? (128+(max_preamble_energy[0]/5)) : 254;
+	gNB->prach_pdu_indication_list[pdu_index].avg_snr      = 0xff; // invalid for now
+	
+	gNB->prach_pdu_indication_list[pdu_index].num_preamble                        = 1;
+	gNB->prach_pdu_indication_list[pdu_index].preamble_list                       = gNB->preamble_list;
+	gNB->prach_pdu_indication_list[pdu_index].preamble_list[0].preamble_index     = max_preamble[0];
+	gNB->prach_pdu_indication_list[pdu_index].preamble_list[0].timing_advance     = max_preamble_delay[0];
+	gNB->prach_pdu_indication_list[pdu_index].preamble_list[0].preamble_pwr       = 0xffffffff;
+	pdu_index++;
+      }
+      gNB->measurements.prach_I0 = ((gNB->measurements.prach_I0*900)>>10) + ((max_preamble_energy[0]*124)>>10); 
+      if (frame==0) LOG_I(PHY,"prach_I0 = %d.%d dB\n",gNB->measurements.prach_I0/10,gNB->measurements.prach_I0%10);
+      if (gNB->prach_energy_counter < 100) gNB->prach_energy_counter++;
+    } //if prach_id>0
+  } //for NUMBER_OF_NR_PRACH_OCCASION_MAX
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PRACH_RX,0);
 }
 
diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
index f90cec69ca679a4e6adfb744bb3c754ee8395d31..f50738035cd57ba10777d08778be0ab61293ed48 100644
--- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
@@ -1132,7 +1132,7 @@ int get_nr_prach_info_from_index(uint8_t index,
                                  uint8_t *N_dur,
                                  uint16_t *RA_sfn_index,
                                  uint8_t *N_RA_slot,
-																 uint8_t *config_period) {
+				 uint8_t *config_period) {
 
   int x,y;
   int64_t s_map;
diff --git a/openair2/LAYER2/NR_MAC_gNB/config.c b/openair2/LAYER2/NR_MAC_gNB/config.c
index f9855f1949faefa31cc2394c496108c719b71418..d0c9f6a3eb208969ac8fb5ff9be423c6e8f63af0 100644
--- a/openair2/LAYER2/NR_MAC_gNB/config.c
+++ b/openair2/LAYER2/NR_MAC_gNB/config.c
@@ -174,6 +174,9 @@ void config_common(int Mod_idP, int pdsch_AntennaPorts, NR_ServingCellConfigComm
   cfg->prach_config.restricted_set_config.value = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->restrictedSetConfig;
   cfg->prach_config.restricted_set_config.tl.tag = NFAPI_NR_CONFIG_RESTRICTED_SET_CONFIG_TAG;
   cfg->num_tlv++;
+  cfg->prach_config.prach_ConfigurationIndex.value = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.prach_ConfigurationIndex;
+  cfg->prach_config.prach_ConfigurationIndex.tl.tag = NFAPI_NR_CONFIG_PRACH_CONFIG_INDEX_TAG;
+  cfg->num_tlv++;
 
   switch (scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.msg1_FDM) {
     case 0 :