diff --git a/openair1/PHY/LTE_TRANSPORT/if4_tools.c b/openair1/PHY/LTE_TRANSPORT/if4_tools.c
new file mode 100644
index 0000000000000000000000000000000000000000..669b7a6739ab9d6ef2e8abb361bbe55806af0869
--- /dev/null
+++ b/openair1/PHY/LTE_TRANSPORT/if4_tools.c
@@ -0,0 +1,186 @@
+/*******************************************************************************
+    OpenAirInterface
+    Copyright(c) 1999 - 2014 Eurecom
+
+    OpenAirInterface is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+
+    OpenAirInterface is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenAirInterface.The full GNU General Public License is
+   included in this distribution in the file called "COPYING". If not,
+   see <http://www.gnu.org/licenses/>.
+
+  Contact Information
+  OpenAirInterface Admin: openair_admin@eurecom.fr
+  OpenAirInterface Tech : openair_tech@eurecom.fr
+  OpenAirInterface Dev  : openair4g-devel@lists.eurecom.fr
+
+  Address      : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
+
+ *******************************************************************************/
+
+/*! \file PHY/LTE_TRANSPORT/if4_tools.c
+* \brief 
+* \author Mauricio Gunther, S. Sandeep Kumar, Raymond Knopp
+* \date 2016
+* \version 0.1
+* \company Eurecom
+* \email: knopp@eurecom.fr 
+* \note
+* \warning
+*/
+
+#include "PHY/LTE_TRANSPORT/if4_tools.h"
+
+// Define how data blocks are stored and transferred
+
+
+void send_IF4(PHY_VARS_eNB *eNB, int subframe){
+	eNB_proc_t *proc = &eNB->proc;
+	//int frame=proc->frame_tx;
+	//int subframe=proc->subframe_tx;
+
+	LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
+
+	uint32_t i,j;
+	float *data_block = malloc(length*sizeof(long));
+
+  // Generate IF4 packet (for now DL) with frame status information
+  dl_packet = gen_IF4_dl_packet( /* ADD INFO and data_block pointer */ );
+	
+	for(i=0; i<fp->symbols_per_tti; i++) {
+    
+    // Do compression of the two parts and generate data blocks
+    
+    symbol = eNB->common_vars.txdataF[0][0 /*antenna number*/][subframe*fp->ofdm_symbol_size*(fp->symbols_per_tti)]
+    data_block[j] = Atan(symbol[fp->ofmd_symbol_size - NrOfNonZeroValues + j -1])<<16 + Atan(symbol[fp->ofmd_symbol_size - NrOfNonZeroValues + j]);
+    data_block[j+NrOfNonZeroValues] = Atan(subframe[i][j+1])<<16 + Atan(subframe[i][j+2]);
+    
+    // Set data blocks and update subframe no./other information to generated packet
+    
+    
+    // Write the packet(s) to the fronthaul
+    
+  }
+  		    
+}
+
+void recv_IF4( /* ADD INFO and data_block pointer */ ) {
+
+  // Read packet(s) from the fronthaul
+  
+  // Apply reverse processing - decompression
+  
+  // Generate and return the OFDM symbols (txdataF)
+  
+}
+
+IF4_dl_packet gen_IF4_dl_packet( /* ADD INFO and data_block pointer */ ) {  
+  IF4_dl_packet dl_packet;
+  
+  // Set destination and source address
+  
+  // Set Type and Sub-Type
+  dl_packet.type = ; //08_0A ? 
+  dl_packet.sub_type = 0x0020;
+
+  // Leave reserved as it is 
+  //dl_packet.rsvd = ;
+  
+  // Set frame status
+  dl_packet.frame_status.ant_num = ;
+  dl_packet.frame_status.ant_start = ;
+  dl_packet.frame_status.rf_num = ;
+  dl_packet.frame_status.sf_num = ;
+  dl_packet.frame_status.sym_num = ;
+  //dl_packet.frame_status.rsvd = ;
+    
+  // Set data blocks if sent
+  if (data_block != NULL) {
+    
+  } else {
+    
+  }
+  
+  // Set frame check sequence
+  dl_packet.fcs = ;
+  
+  return dl_packet;
+}
+
+IF4_ul_packet gen_IF4_ul_packet( /* ADD INFO and data_block pointer */ ) {
+  IF4_ul_packet ul_packet;
+
+  // Set destination and source address
+  
+  // Set Type and Sub-Type
+  ul_packet.type = ; //08_0A ? 
+  ul_packet.sub_type = 0x0019;
+
+  // Leave reserved as it is 
+  //ul_packet.rsvd = ;
+  
+  // Set frame status
+  ul_packet.frame_status.ant_num = ;
+  ul_packet.frame_status.ant_start = ;
+  ul_packet.frame_status.rf_num = ;
+  ul_packet.frame_status.sf_num = ;
+  ul_packet.frame_status.sym_num = ;
+  //ul_packet.frame_status.rsvd = ;
+    
+  // Set antenna specific gain
+  ul_packet.gain0.exponent = ;
+  //ul_packet.gain0.rsvd = ;
+  
+  // Set data blocks if sent
+  if (data_block != NULL) {
+    
+  } else {
+    
+  }
+  
+  // Set frame check sequence
+  ul_packet.fcs = ;
+  
+  return ul_packet;
+}
+
+IF4_prach_packet gen_IF4_prach_packet( /* ADD INFO and data_block pointer */ ) {
+  IF4_prach_packet prach_packet;
+
+  // Set destination and source address
+  
+  // Set Type and Sub-Type
+  prach_packet.type = ; //08_0A ? 
+  prach_packet.sub_type = 0x0021;
+
+  // Leave reserved as it is 
+  //prach_packet.rsvd = ;
+  
+  // Set LTE Prach configuration
+  //prach_packet.prach_conf.rsvd = ;
+  prach_packet.prach_conf.ant = ;
+  prach_packet.prach_conf.rf_num = ;
+  prach_packet.prach_conf.sf_num = ;
+  prach_packet.prach_conf.exponent = ;  
+      
+  // Set data blocks if sent
+  if (data_block != NULL) {
+    
+  } else {
+    
+  }
+  
+  // Set frame check sequence
+  prach_packet.fcs = ;
+  
+  return prach_packet;
+} 
diff --git a/openair1/PHY/LTE_TRANSPORT/if4_tools.h b/openair1/PHY/LTE_TRANSPORT/if4_tools.h
new file mode 100644
index 0000000000000000000000000000000000000000..3b25e82c6ac6cc627057dd4a763d916df1f6fd40
--- /dev/null
+++ b/openair1/PHY/LTE_TRANSPORT/if4_tools.h
@@ -0,0 +1,164 @@
+/*******************************************************************************
+    OpenAirInterface
+    Copyright(c) 1999 - 2014 Eurecom
+
+    OpenAirInterface is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+
+    OpenAirInterface is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenAirInterface.The full GNU General Public License is
+   included in this distribution in the file called "COPYING". If not,
+   see <http://www.gnu.org/licenses/>.
+
+  Contact Information
+  OpenAirInterface Admin: openair_admin@eurecom.fr
+  OpenAirInterface Tech : openair_tech@eurecom.fr
+  OpenAirInterface Dev  : openair4g-devel@lists.eurecom.fr
+
+  Address      : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
+
+ *******************************************************************************/
+
+/*! \file PHY/LTE_TRANSPORT/if4_tools.h
+* \brief 
+* \author S. Sandeep Kumar, Raymond Knopp
+* \date 2016
+* \version 0.1
+* \company Eurecom
+* \email: ee13b1025@iith.ac.in, knopp@eurecom.fr 
+* \note
+* \warning
+*/
+
+#include <stdint.h>
+
+/// IF4 Frame Status (32 bits)
+struct IF4_frame_status {
+  /// Antenna Numbers
+  uint32_t ant_num:3;
+  /// Antenna Start
+  uint32_t ant_start:3;
+  /// Radio Frame Number
+  uint32_t rf_num:16;
+  /// Sub-frame Number
+  uint32_t sf_num:4;
+  /// Symbol Number
+  uint32_t sym_num:4;
+  /// Reserved
+  uint32_t rsvd:2;    
+};
+
+/// IF4 Antenna Gain (16 bits)
+struct IF4_gain {
+  /// Reserved 
+  uint32_t rsvd:10;
+  /// FFT Exponent Output
+  uint32_t exponent:6;  
+};  
+
+/// IF4 LTE PRACH Configuration (32 bits)
+struct IF4_lte_prach_conf {
+  /// Reserved
+  uint32_t rsvd:3;
+  /// Antenna Indication
+  uint32_t ant:3;
+  /// Radio Frame Number
+  uint32_t rf_num:16;
+  /// Sub-frame Number
+  uint32_t sf_num:4;
+  /// FFT Exponent Output
+  uint32_t exponent:6;  
+};
+  
+struct IF4_dl_packet {
+  /// Destination Address
+  
+  /// Source Address
+  
+  /// Type
+  uint16_t type; 
+  /// Sub-Type
+  uint16_t sub_type;
+  /// Reserved
+  uint32_t rsvd;
+  /// Frame Status
+  IF4_frame_status frame_status;
+  /// Data Blocks
+  
+  /// Frame Check Sequence
+  uint32_t fcs; 
+};
+
+struct IF4_ul_packet {
+  /// Destination Address
+  
+  /// Source Address
+  
+  /// Type
+  uint16_t type;
+  /// Sub-Type
+  uint16_t sub_type;
+  /// Reserved
+  uint32_t rsvd;
+  /// Frame Status
+  IF4_frame_status frame_status;
+  /// Gain 0
+  IF4_gain gain0;
+  /// Gain 1
+  IF4_gain gain1;
+  /// Gain 2
+  IF4_gain gain2;
+  /// Gain 3
+  IF4_gain gain3;
+  /// Gain 4
+  IF4_gain gain4;
+  /// Gain 5
+  IF4_gain gain5;
+  /// Gain 6
+  IF4_gain gain6;
+  /// Gain 7
+  IF4_gain gain7;
+  /// Data Blocks
+  
+  /// Frame Check Sequence
+  uint32_t fcs;
+};
+
+struct IF4_prach_packet {
+  /// Destination Address 
+  
+  /// Source Address
+  
+  /// Type
+  uint16_t type;
+  /// Sub-Type
+  uint16_t sub_type;
+  /// Reserved
+  uint32_t rsvd;
+  /// LTE Prach Configuration
+  IF4_lte_prach_conf prach_conf;
+  /// Prach Data Block (one antenna)
+  
+  /// Frame Check Sequence
+  uint32_t fcs;
+};
+
+// Needs to be checked
+
+IF4_dl_packet gen_IF4_dl_packet();
+
+IF4_ul_packet gen_IF4_ul_packet();
+
+IF4_prach_packet gen_IF4_prach_packet();
+
+void send_IF4(PHY_VARS_eNB *eNB, int subframe);
+
+void recv_IF4(PHY_VARS_eNB *eNB, int subframe);
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index 9d43f21106ee4f7a1062ec82bf68cbf58d98b09e..c6245e65e037abc3684f480f8bae0a5e7b223689 100755
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -2562,6 +2562,9 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl
 	//recv_IF4(eNB,subframe<<1);
 	//recv_IF4(eNB,1+(subframe<<1));
 	
+	    // Tobi aka mr monaco: ETH
+	
+	    
       }
       else { // should not get here
 	AssertFatal(1==0, "Unknown eNB->node_function %d",eNB->node_function);