diff --git a/openair1/PHY/INIT/nr_init_ru.c b/openair1/PHY/INIT/nr_init_ru.c
index 2dcf035866e36f60c865e18f8bf60d593867ac56..ecf558d4ca9193079f4196750085edfcb24a8903 100644
--- a/openair1/PHY/INIT/nr_init_ru.c
+++ b/openair1/PHY/INIT/nr_init_ru.c
@@ -39,6 +39,9 @@ int nr_phy_init_RU(RU_t *ru) {
   int p;
   int re;
 
+  // For memory allocation of ru->prach_rxsigF
+  int mu = fp->numerology_index;
+
   LOG_I(PHY,"Initializing RU signal buffers (if_south %s) nb_tx %d\n",ru_if_types[ru->if_south],ru->nb_tx);
 
   nfapi_nr_config_request_scf_t *cfg;
@@ -107,7 +110,8 @@ int nr_phy_init_RU(RU_t *ru) {
     ru->prach_rxsigF = (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) );
+      // for preamble format 1 and 2, more memory should be allocated
+      ru->prach_rxsigF[i] = (int16_t*)malloc16_clear( fp->ofdm_symbol_size*12*(1<<mu)*2*sizeof(int16_t) );
       LOG_D(PHY,"[INIT] prach_vars->rxsigF[%d] = %p\n",i,ru->prach_rxsigF[i]);
     }
     
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_prach.c b/openair1/PHY/NR_UE_TRANSPORT/nr_prach.c
index abf849202eca5cd3a2a017a463408d963236e22c..a98820b69cb4c6d940f8252b9756da8b06b90024 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_prach.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_prach.c
@@ -337,7 +337,7 @@ int32_t generate_nr_prach( PHY_VARS_NR_UE *ue, uint8_t eNB_id, uint8_t subframe,
     break;
 
   case 1:
-    Ncp = 2*21024;
+    Ncp = 21024;
     break;
 
   case 2:
@@ -400,7 +400,7 @@ int32_t generate_nr_prach( PHY_VARS_NR_UE *ue, uint8_t eNB_id, uint8_t subframe,
       if (prach_fmt == 0) { //24576 samples @ 30.72 Ms/s, 49152 samples @ 61.44 Ms/s
 	idft49152(prachF,prach2,1);
 	// here we have |empty | Prach49152|
-	memmove(prach,prach+(49152<<1),(Ncp<<3));
+	memmove(prach,prach+(49152<<1),(Ncp<<2));
 	// here we have |Prefix | Prach49152|
 	prach_len = 49152+Ncp;
 	dftlen=49152;
@@ -409,7 +409,7 @@ int32_t generate_nr_prach( PHY_VARS_NR_UE *ue, uint8_t eNB_id, uint8_t subframe,
 	idft49152(prachF,prach2,1);
 	memmove(prach2+(49152<<1),prach2,(49152<<2));
 	// here we have |empty | Prach49152 | Prach49152|
-	memmove(prach,prach+(49152<<2),(Ncp<<3));
+	memmove(prach,prach+(49152<<2),(Ncp<<2));
 	// here we have |Prefix | Prach49152 | Prach49152|
 	prach_len = (49152*2)+Ncp;
 	dftlen=49152;
@@ -420,7 +420,7 @@ int32_t generate_nr_prach( PHY_VARS_NR_UE *ue, uint8_t eNB_id, uint8_t subframe,
 	// here we have |empty | Prach49152 | Prach49152| empty49152 | empty49152
 	memmove(prach2+(49152<<2),prach2,(49152<<3));
 	// here we have |empty | Prach49152 | Prach49152| Prach49152 | Prach49152
-	memmove(prach,prach+(49152<<3),(Ncp<<3));
+	memmove(prach,prach+(49152<<3),(Ncp<<2));
 	// here we have |Prefix | Prach49152 | Prach49152| Prach49152 | Prach49152
 	prach_len = (49152*4)+Ncp;
 	dftlen=49152;
@@ -431,7 +431,7 @@ int32_t generate_nr_prach( PHY_VARS_NR_UE *ue, uint8_t eNB_id, uint8_t subframe,
 	// here we have |empty | Prach12288 | Prach12288| empty12288 | empty12288
 	memmove(prach2+(12288<<2),prach2,(12288<<3));
 	// here we have |empty | Prach12288 | Prach12288| Prach12288 | Prach12288
-	memmove(prach,prach+(12288<<3),(Ncp<<3));
+	memmove(prach,prach+(12288<<3),(Ncp<<2));
 	// here we have |Prefix | Prach12288 | Prach12288| Prach12288 | Prach12288
 	prach_len = (12288*4)+Ncp;
 	dftlen=12288;
@@ -540,11 +540,14 @@ int32_t generate_nr_prach( PHY_VARS_NR_UE *ue, uint8_t eNB_id, uint8_t subframe,
 	idft1536(prachF,prach2,1);
 	dftlen=1536;
 	// here we have |empty | Prach1536 |
-	if (prach_fmt != 0xc0)
-	  memmove(prach2+(1536<<1),prach2,(1536<<2));
+	if (prach_fmt != 0xc0) {
+    memmove(prach2+(1536<<1),prach2,(1536<<2));
+    prach_len = (1536*2)+Ncp;
+  }
+  else prach_len = (1536*1)+Ncp;
 	memmove(prach,prach+(1536<<1),(Ncp<<2));
 	// here we have |Prefix | Prach1536 | Prach1536 (if ! 0xc0)  | 
-	prach_len = (1536*2)+Ncp;
+	
       }
       else if (prach_fmt == 0xa2 || prach_fmt == 0xb2) { // 6x1536
 	idft1536(prachF,prach2,1);
@@ -631,7 +634,7 @@ int32_t generate_nr_prach( PHY_VARS_NR_UE *ue, uint8_t eNB_id, uint8_t subframe,
 	// here we have |empty | Prach24576 | Prach24576| Prach24576 | Prach24576
 	memmove(prach,prach+(24576<<3),(Ncp<<2));
 	// here we have |Prefix | Prach24576 | Prach24576| Prach24576 | Prach24576
-	prach_len = (24576*4)+(Ncp<<1);
+	prach_len = (24576*4)+Ncp;
       }
       else if (prach_fmt == 0xa1 || prach_fmt == 0xb1 || prach_fmt == 0xc0) {
 	idft4096(prachF,prach2,1);
@@ -696,7 +699,7 @@ int32_t generate_nr_prach( PHY_VARS_NR_UE *ue, uint8_t eNB_id, uint8_t subframe,
 	idft73728(prachF,prach2,1);
 	dftlen=73728;
 	// here we have |empty | Prach73728|
-	memmove(prach,prach+(73728<<1),(Ncp<<4));
+	memmove(prach,prach+(73728<<1),(Ncp<<2));
 	// here we have |Prefix | Prach73728|
 	prach_len = (73728*1)+Ncp;
       }
@@ -705,7 +708,7 @@ int32_t generate_nr_prach( PHY_VARS_NR_UE *ue, uint8_t eNB_id, uint8_t subframe,
 	dftlen=73728;
 	memmove(prach2+(73728<<1),prach2,(73728<<2));
 	// here we have |empty | Prach73728 | Prach73728|
-	memmove(prach,prach+(73728<<2),(Ncp<<4));
+	memmove(prach,prach+(73728<<2),(Ncp<<2));
 	// here we have |Prefix | Prach73728 | Prach73728|
 	prach_len = (73728*2)+Ncp;
       }
@@ -716,7 +719,7 @@ int32_t generate_nr_prach( PHY_VARS_NR_UE *ue, uint8_t eNB_id, uint8_t subframe,
 	// here we have |empty | Prach73728 | Prach73728| empty73728 | empty73728
 	memmove(prach2+(73728<<2),prach2,(73728<<3));
 	// here we have |empty | Prach73728 | Prach73728| Prach73728 | Prach73728
-	memmove(prach,prach+(73728<<3),(Ncp<<4));
+	memmove(prach,prach+(73728<<3),(Ncp<<2));
 	// here we have |Prefix | Prach73728 | Prach73728| Prach73728 | Prach73728
 	prach_len = (73728*4)+Ncp;
       }
@@ -727,7 +730,7 @@ int32_t generate_nr_prach( PHY_VARS_NR_UE *ue, uint8_t eNB_id, uint8_t subframe,
 	// here we have |empty | Prach18432 | Prach18432| empty18432 | empty18432
 	memmove(prach2+(18432<<2),prach2,(18432<<3));
 	// here we have |empty | Prach18432 | Prach18432| Prach18432 | Prach18432
-	memmove(prach,prach+(18432<<3),(Ncp<<4));
+	memmove(prach,prach+(18432<<3),(Ncp<<2));
 	// here we have |Prefix | Prach18432 | Prach18432| Prach18432 | Prach18432
 	prach_len = (18432*4)+Ncp;
       }
diff --git a/openair1/SIMULATION/NR_PHY/prachsim.c b/openair1/SIMULATION/NR_PHY/prachsim.c
index 3771aa3b3ef67c3ea15b5980832324dc2e3ece81..71715c98bed65d94a50a87fdfe5b0c9b81ce5b9c 100644
--- a/openair1/SIMULATION/NR_PHY/prachsim.c
+++ b/openair1/SIMULATION/NR_PHY/prachsim.c
@@ -530,7 +530,7 @@ int main(int argc, char **argv)
   // multipath channel
   dump_nr_prach_config(&gNB->frame_parms,subframe);
 
-  for (i=0; i<2*frame_parms->samples_per_slot<<1; i++) {
+  for (i=0; i<frame_parms->samples_per_slot<<1; i++) {
     for (aa=0; aa<1; aa++) {
       if (awgn_flag == 0) {
         s_re[aa][i] = ((double)(((short *)&txdata[aa][subframe*frame_parms->samples_per_slot<<1]))[(i<<1)]);
@@ -573,7 +573,7 @@ int main(int argc, char **argv)
 
         if (awgn_flag == 0) {
           multipath_tv_channel(UE2gNB,s_re,s_im,r_re,r_im,
-                               2*frame_parms->samples_per_slot<<1,0);
+                               frame_parms->samples_per_slot<<1,0);
         }
 
         if (n_frames==1) {