diff --git a/openair1/PHY/LTE_TRANSPORT/if4_tools.c b/openair1/PHY/LTE_TRANSPORT/if4_tools.c
index e716695c06b21ca6ff70ce8326676264546d7fd4..bbfea66b31c401313e014f220fd43a091a274c12 100644
--- a/openair1/PHY/LTE_TRANSPORT/if4_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/if4_tools.c
@@ -56,7 +56,7 @@ void send_IF4(PHY_VARS_eNB *eNB, int frame, int subframe, uint16_t packet_type)
       
   uint16_t symbol_id, element_id;
   uint16_t db_fulllength, db_halflength; 
-  int slotoffsetF, blockoffsetF; 
+  int slotoffsetF=0, blockoffsetF=0; 
 
   void *tx_buffer=NULL;
   int16_t *data_block=NULL;
@@ -105,7 +105,7 @@ void send_IF4(PHY_VARS_eNB *eNB, int frame, int subframe, uint16_t packet_type)
     slotoffsetF = (subframe)*(fp->ofdm_symbol_size)*((fp->Ncp==1) ? 12 : 14) + 1;
     blockoffsetF = slotoffsetF + fp->ofdm_symbol_size - db_halflength; 
 
-    tx_buffer = malloc(MAC_HEADER_SIZE_BYTES + sizeof_IF4_dl_header_t + db_fulllength*sizeof(int16_t));
+    tx_buffer = malloc(MAC_HEADER_SIZE_BYTES + sizeof_IF4_ul_header_t + db_fulllength*sizeof(int16_t));
     IF4_ul_header_t *ul_header = (IF4_ul_header_t *)(tx_buffer + MAC_HEADER_SIZE_BYTES);
     data_block = (int16_t*)(tx_buffer + MAC_HEADER_SIZE_BYTES + sizeof_IF4_ul_header_t);
 
@@ -126,7 +126,7 @@ void send_IF4(PHY_VARS_eNB *eNB, int frame, int subframe, uint16_t packet_type)
 			
       // Write the packet(s) to the fronthaul 
       if ((eNB->ifdevice.trx_write_func(&eNB->ifdevice,
-                                        (int64_t) symbol_id,
+                                        symbol_id,
                                         &tx_buffer,
                                         db_fulllength,
       			                            1,
@@ -156,7 +156,7 @@ void send_IF4(PHY_VARS_eNB *eNB, int frame, int subframe, uint16_t packet_type)
               
     // Write the packet to the fronthaul
     if ((eNB->ifdevice.trx_write_func(&eNB->ifdevice,
-                                      (int64_t) symbol_id,
+                                      symbol_id,
                                       &tx_buffer,
                                       db_fulllength,
                                       1,
@@ -172,7 +172,7 @@ void send_IF4(PHY_VARS_eNB *eNB, int frame, int subframe, uint16_t packet_type)
 }
 
 
-void recv_IF4(PHY_VARS_eNB *eNB, int frame, int subframe, uint16_t *packet_type, uint32_t *symbol_number) {
+void recv_IF4(PHY_VARS_eNB *eNB, int frame, int subframe, uint16_t *packet_type, uint32_t *symbol_number, uint16_t expected_packet) {
   LTE_DL_FRAME_PARMS *fp = &eNB->frame_parms;
   int32_t **txdataF = eNB->common_vars.txdataF[0];
   int32_t **rxdataF = eNB->common_vars.rxdataF[0];
@@ -182,30 +182,31 @@ void recv_IF4(PHY_VARS_eNB *eNB, int frame, int subframe, uint16_t *packet_type,
   uint16_t db_fulllength, db_halflength; 
   int slotoffsetF, blockoffsetF; 
   
-  *packet_type = 0;
-  
+  if (expected_packet == IF4_PDLFFT) {
+    db_fulllength = = (12*fp->N_RB_DL); 
+  } else {
+    db_fulllength = = (12*fp->N_RB_UL);     
+  }  
+  db_halflength = db_fulllength>>1;
+
   int64_t *ret_type=(int64_t*)malloc(sizeof(int64_t)); 
   void *rx_buffer=NULL;
-  void **buff=NULL;
   int16_t *data_block=NULL;
    
   // Read packet(s) from the fronthaul    
   if (eNB->ifdevice.trx_read_func(&eNB->ifdevice,
                                   ret_type,
-                                  buff,
-                                  0,
+                                  &rx_buffer,
+                                  db_fulllength,
                                   0) < 0) {
     perror("ETHERNET read");
   }
   
   *packet_type = *ret_type;
-  rx_buffer = buff[0];
   
   if (*packet_type == IF4_PDLFFT) {
     data_block = (int16_t*) (rx_buffer+sizeof_IF4_dl_header_t);
-      
-    db_halflength = (12*fp->N_RB_DL)>>1;
-    
+          
     // Calculate from received packet
     slotoffsetF = (subframe)*(fp->ofdm_symbol_size)*((fp->Ncp==1) ? 12 : 14) + 1;
     blockoffsetF = slotoffsetF + fp->ofdm_symbol_size - db_halflength; 
@@ -224,9 +225,7 @@ void recv_IF4(PHY_VARS_eNB *eNB, int frame, int subframe, uint16_t *packet_type,
         
   } else if (*packet_type == IF4_PULFFT) {
     data_block = (int16_t*) (rx_buffer+sizeof_IF4_ul_header_t);
-      
-    db_halflength = (12*fp->N_RB_UL)>>1;
-    
+          
     // Calculate from received packet
     slotoffsetF = (subframe)*(fp->ofdm_symbol_size)*((fp->Ncp==1) ? 12 : 14) + 1;
     blockoffsetF = slotoffsetF + fp->ofdm_symbol_size - db_halflength; 
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index 16386dfed6ed7de3d7a623ba92dfa0b72c347ceb..cb033eb9046a363d05ee8f49e5b5122b0539a031 100755
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -2604,9 +2604,8 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl
       if (eNB->node_function == NGFI_RRU_IF4 && is_prach_subframe(fp, frame, subframe)<=0) {
 
 			  /// **** send_IF4 of rxdataF to RCC (no prach now) **** ///
-        
         VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4, 1 );   
-        //send_IF4(eNB, frame, subframe, IF4_PULFFT);
+        send_IF4(eNB, frame, subframe, IF4_PULFFT);
         VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4, 0 );   
         
       }
diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c b/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
index 5041d188a34461f9cec12eae127ba412a78ce9ff..0cb4fdfabbd490e675545a07cb01055fd91c866e 100644
--- a/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
+++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
@@ -303,14 +303,15 @@ int trx_eth_read_raw(openair0_device *device, openair0_timestamp *timestamp, voi
 
 int trx_eth_read_raw_IF4(openair0_device *device, openair0_timestamp *timestamp, void **buff, int nsamps, int cc) {
 
+  // Read nblocks info from packet itself
   int nblocks = nsamps;  
   int bytes_received=0;
   eth_state_t *eth = (eth_state_t*)device->priv;
   int Mod_id = device->Mod_id;
   
-  ssize_t packet_size = MAC_HEADER_SIZE_BYTES + sizeof_IF4_dl_header_t;
-    
+  ssize_t packet_size = MAC_HEADER_SIZE_BYTES + sizeof_IF4_dl_header_t;    
   void *test_buffer = (void*)malloc(packet_size);
+  
   void *rx_buffer=NULL;
   IF4_dl_header_t *test_header = (IF4_dl_header_t*)(test_buffer + MAC_HEADER_SIZE_BYTES);
   
@@ -339,7 +340,7 @@ int trx_eth_read_raw_IF4(openair0_device *device, openair0_timestamp *timestamp,
     packet_size = RAW_IF4_PRACH_SIZE_BYTES - packet_size;                 
   }
 
-  memcpy(buff[0], test_header, sizeof_IF4_dl_header_t);    
+  memcpy(buff[0], test_header, sizeof_IF4_dl_header_t);
   rx_buffer = (void*)(buff[0]+sizeof_IF4_dl_header_t);
   
   bytes_received = 0;
diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
index 3c1e1796e605905fd2265860d138b8da06530485..cfe857f9a2e53aa2dfa10832af11a647cd52785a 100644
--- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
@@ -654,8 +654,8 @@ extern "C" {
   }
 
   /* device specific */
-  openair0_cfg[0].txlaunch_wait = 1;//manage when TX processing is triggered
-  openair0_cfg[0].txlaunch_wait_slotcount = 1; //manage when TX processing is triggered
+  //openair0_cfg[0].txlaunch_wait = 1;//manage when TX processing is triggered
+  //openair0_cfg[0].txlaunch_wait_slotcount = 1; //manage when TX processing is triggered
   openair0_cfg[0].iq_txshift = 4;//shift
   openair0_cfg[0].iq_rxrescale = 15;//rescale iqs
   
diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c
index fb224615fe05c33b02e0069a7b7fd7f67b408af8..08390d1f6ba8ca267a1be28260867e09b4e515ba 100644
--- a/targets/RT/USER/lte-enb.c
+++ b/targets/RT/USER/lte-enb.c
@@ -127,7 +127,7 @@ extern volatile int             start_UE;
 #endif
 extern volatile int                    oai_exit;
 
-extern openair0_config_t *openair0_cfg;
+extern openair0_config_t openair0_cfg[MAX_CARDS];
 
 extern pthread_cond_t sync_cond;
 extern pthread_mutex_t sync_mutex;
@@ -483,10 +483,9 @@ static void* eNB_thread_rxtx( void* param ) {
 	}
       } else {
 
-        /// **** recv_IF4 of txdataF from RCC **** ///     
-        
+        /// **** recv_IF4 of txdataF from RCC **** ///             
         VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4, 1 );   
-        //recv_IF4(eNB, frame, subframe, packet_type, symbol_number);        
+        //recv_IF4(PHY_vars_eNB_g[0][proc->CC_id], proc->frame_tx, proc->subframe_tx, packet_type, symbol_number);        
         VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4, 0 );   
         
       }
@@ -533,8 +532,7 @@ static void* eNB_thread_rxtx( void* param ) {
 
     } else { 
 	 
-      /// **** send_IF4 of txdataF to RRU **** /// 
-      
+      /// **** send_IF4 of txdataF to RRU **** ///       
       VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4, 1 );   
       send_IF4(PHY_vars_eNB_g[0][proc->CC_id], proc->frame_tx, proc->subframe_tx, IF4_PDLFFT);
       VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4, 0 );