diff --git a/openair1/SCHED_NR/nr_ru_procedures.c b/openair1/SCHED_NR/nr_ru_procedures.c
index 7b1962ef5bb8bb0f2d3ebf55f74783e3e50465df..137454d6b5f5c41992139b70fe7d8f6d57893cd6 100644
--- a/openair1/SCHED_NR/nr_ru_procedures.c
+++ b/openair1/SCHED_NR/nr_ru_procedures.c
@@ -134,6 +134,7 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) {
 
   start_meas(&ru->ofdm_total_stats);
   if(ru->num_gNB != 0){//L1 RU on same machine
+    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 1 );
     for(j=0; j<2; ++j){//half slot 
       for(i=0; i<ru->nb_tx; ++i){
         if(j == 0){
@@ -153,7 +154,7 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) {
           feptx[i+ru->nb_tx].aa                      = i;
           feptx[i+ru->nb_tx].index                   = i+ru->nb_tx;
           feptx[i+ru->nb_tx].ru                      = ru;
-          feptx[i+ru->nb_tx].symbol                  = fp->symbols_per_tti>>1;
+          feptx[i+ru->nb_tx].symbol                  = fp->symbols_per_slot>>1;
           feptx[i+ru->nb_tx].slot                    = slot;
           feptx[i+ru->nb_tx].nb_antenna_ports        = nb_antenna_ports;
           feptx[i+ru->nb_tx].instance_cnt_feptx      = 0;
@@ -239,7 +240,6 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) {
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RU_TX_OFDM_MASK, proc->feptx_mask );
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 0 );
 
-  //write_output
 
   stop_meas(&ru->ofdm_total_stats);
 
@@ -274,9 +274,9 @@ static void *nr_feptx_thread(void *param) {
     ofdm_mask_full   = (1<<(ru->nb_tx*2))-1;
 
     if(ru->num_gNB != 0){
-      half_slot = feptx->half_slot;
       txdataF_offset = ((slot%2)*fp->samples_per_slot_wCP);
-      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 1);
+      ////////////precoding////////////
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC+feptx->index+1 , 1);
       start_meas(&ru->precoding_stats);
       if (ru->nb_tx == 1) {
         AssertFatal(fp->N_ssb==ru->nb_tx,"Attempting to transmit %d SSB while Nb_tx = %d",fp->N_ssb,ru->nb_tx);
@@ -284,14 +284,14 @@ static void *nr_feptx_thread(void *param) {
           if ((fp->L_ssb >> p) & 0x01){
             memcpy((void*)&ru->common.txdataF_BF[0][l*fp->ofdm_symbol_size],
                  (void*)&ru->gNB_list[0]->common_vars.txdataF[0][txdataF_offset + l*fp->ofdm_symbol_size],
-                 (fp->symbols_per_tti>>1)*fp->ofdm_symbol_size*sizeof(int32_t));
+                 (fp->samples_per_slot_wCP>>1)*sizeof(int32_t));
           }
         }
       }
       else {
         bw  = ru->beam_weights[0];
         txdataF = &ru->gNB_list[0]->common_vars.txdataF[0][txdataF_offset];
-        for(i=0; i<fp->symbols_per_tti>>1; ++i){
+        for(i=0; i<fp->symbols_per_slot>>1; ++i){
           nr_beam_precoding(&txdataF,
                         ru->common.txdataF_BF,
                         fp,
@@ -303,15 +303,16 @@ static void *nr_feptx_thread(void *param) {
         }
       }
       stop_meas(&ru->precoding_stats);
-      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 0);
-
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC+feptx->index+1 , 0);
 
+      ////////////FEPTX////////////
       start_meas(&ru->ofdm_mod_stats);
-      nr_feptx0(ru,slot,start,fp->symbols_per_tti>>1,aa);
+      nr_feptx0(ru,slot,start,fp->symbols_per_slot>>1,aa);
       stop_meas(&ru->ofdm_mod_stats);
 
+      if (release_thread(&feptx->mutex_feptx,&feptx->instance_cnt_feptx,"NR feptx thread")<0) break;
+
       AssertFatal((ret=pthread_mutex_lock(&ru->proc.mutex_feptx))==0,"mutex_lock return %d\n",ret);
-      feptx->instance_cnt_feptx = -1;
       ru->proc.feptx_mask |= 1<<(feptx->index);
       if(ru->proc.feptx_mask == ofdm_mask_full)
         AssertFatal(pthread_cond_signal(&ru->proc.cond_feptx) == 0,"ERROR pthread_cond_signal for precoding and ofdm finish\n");
@@ -321,7 +322,7 @@ static void *nr_feptx_thread(void *param) {
     }// if L1 RU on same machine
 
     else{
-      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 1);
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC+feptx->index+1 , 1);
       start_meas(&ru->precoding_stats);
       if (ru->nb_tx == 1) {
         AssertFatal(fp->N_ssb==ru->nb_tx,"Attempting to transmit %d SSB while Nb_tx = %d",fp->N_ssb,ru->nb_tx);
@@ -345,7 +346,7 @@ static void *nr_feptx_thread(void *param) {
                         nb_antenna_ports);
       }
       stop_meas(&ru->precoding_stats);
-      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 0);
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC+feptx->index+1 , 0);
 
 
       start_meas(&ru->ofdm_mod_stats);
@@ -406,7 +407,7 @@ void nr_init_feptx_thread(RU_t *ru) {
   RU_feptx_t *feptx = proc->feptx;
   int i = 0;
 
-  for(i=0; i<16; i++){
+  for(i=0; i<(ru->nb_tx*2); i++){
     feptx[i].instance_cnt_feptx         = -1;
     
     pthread_mutex_init( &feptx[i].mutex_feptx, NULL);
diff --git a/targets/RT/USER/gNB_usrp.gtkw b/targets/RT/USER/gNB_usrp.gtkw
index 416dd3b62ba48806e7df7fdf43f1dd6d265ae09d..e6726e7d9feb67e3c2f57a5b9cf38f202d8b112f 100644
--- a/targets/RT/USER/gNB_usrp.gtkw
+++ b/targets/RT/USER/gNB_usrp.gtkw
@@ -1,15 +1,15 @@
 [*]
-[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
-[*] Fri Sep  6 15:01:30 2019
+[*] GTKWave Analyzer v3.3.61 (w)1999-2014 BSI
+[*] Tue Dec 17 15:31:51 2019
 [*]
-[dumpfile] "/tmp/gNB_prec.vcd"
-[dumpfile_mtime] "Fri Sep  6 14:59:50 2019"
-[dumpfile_size] 13106022
-[savefile] "/homes/wangts/openairinterface5g/targets/RT/USER/gNB_usrp.gtkw"
-[timestart] 2183320000
+[dumpfile] "/tmp/gNB.vcd"
+[dumpfile_mtime] "Tue Dec 17 15:25:49 2019"
+[dumpfile_size] 6343431
+[savefile] "/home/wangts/openairinterface5g/targets/RT/USER/gNB_usrp.gtkw"
+[timestart] 1517712000
 [size] 1920 1018
-[pos] -1 -1
-*-18.423141 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[pos] -9 -33
+*-19.276148 1518358451 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
 [sst_width] 386
 [signals_width] 344
 [sst_expanded] 1
@@ -60,9 +60,11 @@ functions.phy_procedures_ru_feprx0
 functions.phy_procedures_ru_feprx1
 functions.phy_procedures_ru_feptx_ofdm0
 functions.phy_procedures_ru_feptx_ofdm1
+functions.phy_procedures_ru_feptx_ofdm2
 functions.phy_procedures_ru_feptx_prec0
 functions.phy_procedures_ru_feptx_prec1
-@23
+functions.phy_procedures_ru_feptx_prec2
+@22
 variables.ru_tx_ofdm_mask[63:0]
 [pattern_trace] 1
 [pattern_trace] 0