diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c
index e67e1c88e7286071bbb64dc757b2331d779f6061..feec812b984e76453df325fff34383c6fac35180 100644
--- a/targets/RT/USER/lte-enb.c
+++ b/targets/RT/USER/lte-enb.c
@@ -187,7 +187,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam
   {
     wakeup_tx(eNB,eNB->proc.ru_proc);
   }
-  else if(get_nprocs() >= 4)
+  else if(get_nprocs() > 4)
   {
     if(oai_exit) return(-1);
     phy_procedures_eNB_TX(eNB, proc, no_relay, NULL, 1);
@@ -977,6 +977,7 @@ void kill_eNB_proc(int inst) {
     pthread_mutex_destroy(&eNB->UL_INFO_mutex);
     int i;
     for (i=0;i<2;i++) {
+      pthread_cond_signal( &proc_rxtx[i].cond_rxtx );
       LOG_I(PHY, "Joining rxtx[%d] mutex/cond\n",i);
       pthread_join( proc_rxtx[i].pthread_rxtx, (void**)&status );
       LOG_I(PHY, "Destroying rxtx[%d] mutex/cond\n",i);
diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c
index c6de652bc1e30ee63dbe80c6bb5e552c7a4312f7..3ab9a29a751e520a38df0df68a4a769197a4abaa 100644
--- a/targets/RT/USER/lte-ru.c
+++ b/targets/RT/USER/lte-ru.c
@@ -1156,7 +1156,7 @@ void wakeup_eNBs(RU_t *ru) {
 
   LOG_D(PHY,"wakeup_eNBs (num %d) for RU %d\n",ru->num_eNB,ru->idx);
 
-  if (get_nprocs() < 4) {
+  if (get_nprocs() <= 4) {
     // call eNB function directly
   
     char string[20];
@@ -1607,7 +1607,7 @@ static void* ru_thread( void* param ) {
     if (ru->num_eNB>0) wakeup_eNBs(ru);
 
     
-	if(get_nprocs() <4)
+	if(get_nprocs() <= 4)
 	{
       // do TX front-end processing if needed (precoding and/or IDFTs)
       if (ru->feptx_prec) ru->feptx_prec(ru);
@@ -2109,8 +2109,8 @@ void init_RU(char *rf_config_file) {
       }
       else if (ru->function == eNodeB_3GPP) {   
 	ru->do_prach             = 0;                       // no prach processing in RU            
-	ru->feprx                = (get_nprocs()<=4) ? fep_full : ru_fep_full_2thread;                // RX DFTs
-	ru->feptx_ofdm           = (get_nprocs()<=4) ? feptx_ofdm : feptx_ofdm_2thread;              // this is fep with idft and precoding
+	ru->feprx                = (get_nprocs()> 2 && fepw) ? ru_fep_full_2thread : fep_full;                // RX DFTs
+	ru->feptx_ofdm           = (get_nprocs()> 2 && fepw) ? feptx_ofdm_2thread : feptx_ofdm;              // this is fep with idft and precoding
 	ru->feptx_prec           = feptx_prec;              // this is fep with idft and precoding
 	ru->fh_north_in          = NULL;                    // no incoming fronthaul from north
 	ru->fh_north_out         = NULL;                    // no outgoing fronthaul to north