diff --git a/openair1/PHY/NBIoT_TRANSPORT/dlsch_demodulation_NB_IoT.c b/openair1/PHY/NBIoT_TRANSPORT/dlsch_demodulation_NB_IoT.c
index 52bc4ab3f7f18d7ec70205395853f87f769ffd4a..75c53d7c480de2a508f1fe901cb5ccbe130dfb5c 100644
--- a/openair1/PHY/NBIoT_TRANSPORT/dlsch_demodulation_NB_IoT.c
+++ b/openair1/PHY/NBIoT_TRANSPORT/dlsch_demodulation_NB_IoT.c
@@ -31,7 +31,7 @@
  */
 //#include "PHY/defs.h"
 #include "PHY/extern_NB_IoT.h"
-#include "SCHED/defs_NB_IoT.h"
+#include "SCHED_NBIOT/defs_NB_IoT.h"
 #include "defs_NB_IoT.h"
 #include "extern_NB_IoT.h"
 #include "PHY/sse_intrin.h"
diff --git a/openair1/PHY/NBIoT_TRANSPORT/dlsch_modulation_NB_IoT.c b/openair1/PHY/NBIoT_TRANSPORT/dlsch_modulation_NB_IoT.c
index d7770c2ed93c7f43d127b9d0cba2c0c919d4f3a9..fae4723ddf2f50bf2851772ea546a068f4c89f77 100644
--- a/openair1/PHY/NBIoT_TRANSPORT/dlsch_modulation_NB_IoT.c
+++ b/openair1/PHY/NBIoT_TRANSPORT/dlsch_modulation_NB_IoT.c
@@ -33,12 +33,12 @@
 //#include "PHY/defs.h"
 //#include "PHY/defs_NB_IoT.h"
 //#include "PHY/extern_NB_IoT.h"
-#include "PHY/impl_defs_lte.h"
+//#include "PHY/impl_defs_lte.h"
 //#include "PHY/CODING/defs_nb_iot.h"
 //#include "PHY/CODING/extern.h"
 //#include "PHY/CODING/lte_interleaver_inline.h"
-#include "PHY/LTE_TRANSPORT/defs_NB_IoT.h"
-#include "PHY/LTE_TRANSPORT/proto_NB_IoT.h"
+#include "PHY/NBIoT_TRANSPORT/defs_NB_IoT.h"
+#include "PHY/NBIoT_TRANSPORT/proto_NB_IoT.h"
 #include "PHY/impl_defs_lte_NB_IoT.h"
 #include "PHY/impl_defs_top_NB_IoT.h"
 //#include "defs.h"
diff --git a/openair1/PHY/NBIoT_TRANSPORT/proto_NB_IoT.h b/openair1/PHY/NBIoT_TRANSPORT/proto_NB_IoT.h
index 848033218d84f9462f45ca608bf7e95ec9081b5e..f4a0d064d09720d682b2a62e1eab5df85d8c153b 100644
--- a/openair1/PHY/NBIoT_TRANSPORT/proto_NB_IoT.h
+++ b/openair1/PHY/NBIoT_TRANSPORT/proto_NB_IoT.h
@@ -37,6 +37,8 @@
 
 #include "PHY/defs_NB_IoT.h"
 #include "PHY/impl_defs_lte.h"
+#include "PHY/defs_eNB.h"
+#include "PHY/defs_UE.h"
 
 //#include "PHY/LTE_TRANSPORT/defs_NB_IoT.h"
 //#include <math.h>
diff --git a/openair1/PHY/defs_L1_NB_IoT.h b/openair1/PHY/defs_L1_NB_IoT.h
index a47854cb2e5ae799ac557acc5bb5b840c9bc841a..5f132d0ce565a7d31ff50ef8bb6d702fb0779256 100644
--- a/openair1/PHY/defs_L1_NB_IoT.h
+++ b/openair1/PHY/defs_L1_NB_IoT.h
@@ -127,7 +127,9 @@ static inline void* malloc16_clear( size_t size )
 #include "PHY/impl_defs_lte_NB_IoT.h"
 
 #include "PHY/TOOLS/time_meas.h"
+#include "PHY/TOOLS/time_meas_NB_IoT.h"
 //#include "PHY/CODING/defs.h"
+#include "defs_common.h"
 #include "PHY/CODING/defs_NB_IoT.h"
 #include "openair2/PHY_INTERFACE/IF_Module_NB_IoT.h"
 //#include "PHY/TOOLS/defs.h"
@@ -254,6 +256,8 @@ typedef struct {
 
 /// Context data structure for RX/TX portion of subframe processing
 typedef struct {
+  /// Component Carrier index   
+  uint8_t               CC_id;
   /// timestamp transmitted to HW
   openair0_timestamp    timestamp_tx;
   /// subframe to act upon for transmission
@@ -283,6 +287,21 @@ typedef struct {
   pthread_mutex_t       mutex_l2;
   int                   instance_cnt_l2;
   pthread_attr_t        attr_l2;
+  uint32_t              frame_msg5;
+  uint32_t              subframe_msg5;
+  int                   subframe_real;
+  uint8_t               flag_scrambling;
+  uint8_t               flag_msg3;
+  uint8_t               counter_msg3;
+  uint32_t              frame_msg3;
+  uint8_t               flag_msg4;
+  uint8_t               counter_msg4;
+  uint32_t              frame_msg4;
+  uint32_t              subframe_msg4;
+  uint8_t               counter_msg5;
+  uint8_t               flag_msg5;
+  uint32_t              frame_dscr_msg5;
+  uint32_t              subframe_dscr_msg5;
 
 } eNB_rxtx_proc_NB_IoT_t;
 /*
@@ -303,6 +322,8 @@ typedef struct {
 
 /// Context data structure for eNB subframe processing
 typedef struct eNB_proc_NB_IoT_t_s {
+  /// Component Carrier index   
+  uint8_t                 CC_id;
   /// thread index
   int                     thread_index;
   /// timestamp received from HW
@@ -448,6 +469,8 @@ typedef struct eNB_proc_NB_IoT_t_s {
 typedef struct {
   /// index of the current UE RX/TX proc
   int                   proc_id;
+  /// Component Carrier index   
+  uint8_t                 CC_id;
   /// timestamp transmitted to HW
   openair0_timestamp    timestamp_tx;
   /// subframe to act upon for transmission
@@ -482,6 +505,8 @@ typedef struct {
 
 /// Context data structure for eNB subframe processing
 typedef struct {
+  /// Component Carrier index   
+  uint8_t                 CC_id;
   /// Last RX timestamp
   openair0_timestamp      timestamp_rx;
   /// pthread attributes for main UE thread
@@ -514,14 +539,19 @@ typedef struct {
 typedef struct PHY_VARS_eNB_NB_IoT_s {
   /// Module ID indicator for this instance
   module_id_t                   Mod_id;
+  uint8_t                       CC_id;
   uint8_t                       configured;
   eNB_proc_NB_IoT_t             proc;
   int                           num_RU;
   RU_t                          *RU_list[MAX_NUM_RU_PER_eNB];
   /// Ethernet parameters for northbound midhaul interface (L1 to Mac)
-  eth_params_t         eth_params_n;
+  eth_params_t                  eth_params_n;
+
+  eNB_func_NB_IoT_t             node_function;
+  eNB_timing_NB_IoT_t           node_timing;
+  
   /// Ethernet parameters for fronthaul interface (upper L1 to Radio head)
-  eth_params_t         eth_params;
+  eth_params_t                  *eth_params;
   int                           single_thread_flag;
   openair0_rf_map               rf_map;
   int                           abstraction_flag;
@@ -533,7 +563,7 @@ typedef struct PHY_VARS_eNB_NB_IoT_s {
   // indicator for precoding function (eNB,3GPP_eNB_BBU)
   int                           do_precoding;
   IF_Module_NB_IoT_t            *if_inst_NB_IoT;
-  UL_IND_NB_IoT_t               UL_INFO_NB_IoT;
+  UL_IND_NB_IoT_t               UL_INFO;
   pthread_mutex_t               UL_INFO_mutex;
   void                          (*do_prach)(struct PHY_VARS_eNB_NB_IoT_s *eNB,int frame,int subframe);
   void                          (*fep)(struct PHY_VARS_eNB_NB_IoT_s *eNB,eNB_rxtx_proc_NB_IoT_t *proc);
@@ -782,6 +812,8 @@ typedef struct PHY_VARS_eNB_NB_IoT_s {
 typedef struct {
   /// \brief Module ID indicator for this instance
   uint8_t                       Mod_id;
+   /// \brief Component carrier ID for this PHY instance    
+  uint8_t                       CC_id;
   /// \brief Mapping of CC_id antennas to cards
   openair0_rf_map               rf_map;
   //uint8_t local_flag;
diff --git a/openair1/PHY/defs_NB_IoT.h b/openair1/PHY/defs_NB_IoT.h
deleted file mode 100644
index 1ce5099d1d6fee88bbda03e94e1f61e19fbc4063..0000000000000000000000000000000000000000
--- a/openair1/PHY/defs_NB_IoT.h
+++ /dev/null
@@ -1,1130 +0,0 @@
-/*
- * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
- * except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.openairinterface.org/?page_id=698
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *-------------------------------------------------------------------------------
- * For more information about the OpenAirInterface (OAI) Software Alliance:
- *      contact@openairinterface.org
- */
-
-/*! \file PHY/defs.h
- \brief Top-level defines and structure definitions
- \author R. Knopp, F. Kaltenberger
- \date 2011
- \version 0.1
- \company Eurecom
- \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr
- \note
- \warning
-*/
-#ifndef __PHY_DEFS_NB_IOT__H__
-#define __PHY_DEFS_NB_IOT__H__
-
-#define _GNU_SOURCE 
-#include <stdio.h>
-#include <stdlib.h>
-#include <malloc.h>
-#include <string.h>
-#include <math.h>
-#include "common_lib.h"
-
-//#include <complex.h>
-#include "assertions.h"
-#ifdef MEX
-# define msg mexPrintf
-#else
-# ifdef OPENAIR2
-#   if ENABLE_RAL
-#     include "collection/hashtable/hashtable.h"
-#     include "COMMON/ral_messages_types.h"
-#     include "UTIL/queue.h"
-#   endif
-//#   include "log.h"
-#   define msg(aRGS...) LOG_D(PHY, ##aRGS)
-# else
-#   define msg printf
-# endif
-#endif
-//use msg in the real-time thread context
-#define msg_nrt printf
-//use msg_nrt in the non real-time context (for initialization, ...)
-#ifndef malloc16
-#  ifdef __AVX2__
-#    define malloc16(x) memalign(32,x)
-#  else
-#    define malloc16(x) memalign(16,x)
-#  endif
-#endif
-#define free16(y,x) free(y)
-#define bigmalloc malloc
-#define bigmalloc16 malloc16
-#define openair_free(y,x) free((y))
-#define PAGE_SIZE 4096
-
-//#ifdef SHRLIBDEV
-//extern int rxrescale;
-//#define RX_IQRESCALELEN rxrescale
-//#else
-//#define RX_IQRESCALELEN 15
-//#endif
-
-//! \brief Allocate \c size bytes of memory on the heap with alignment 16 and zero it afterwards.
-//! If no more memory is available, this function will terminate the program with an assertion error.
-//******************************************************************************************************
-/*
-static inline void* malloc16_clear( size_t size )
-{
-#ifdef __AVX2__
-  void* ptr = memalign(32, size);
-#else
-  void* ptr = memalign(16, size);
-#endif
-  DevAssert(ptr);
-  memset( ptr, 0, size );
-  return ptr;
-}
-
-*/
-
-
-// #define PAGE_MASK 0xfffff000
-// #define virt_to_phys(x) (x)
-
-// #define openair_sched_exit() exit(-1)
-
-
-// #define max(a,b)  ((a)>(b) ? (a) : (b))
-// #define min(a,b)  ((a)<(b) ? (a) : (b))
-
-
-// #define bzero(s,n) (memset((s),0,(n)))
-
-// #define cmax(a,b)  ((a>b) ? (a) : (b))
-// #define cmin(a,b)  ((a<b) ? (a) : (b))
-
-// #define cmax3(a,b,c) ((cmax(a,b)>c) ? (cmax(a,b)) : (c))
-
-// /// suppress compiler warning for unused arguments
-// #define UNUSED(x) (void)x;
-
-
-#include "PHY/impl_defs_top_NB_IoT.h"
-//#include "impl_defs_top.h"
-//#include "impl_defs_lte.h"
-#include "PHY/impl_defs_lte_NB_IoT.h"
-
-#include "PHY/TOOLS/time_meas_NB_IoT.h"
-//#include "PHY/CODING/defs.h"
-#include "PHY/CODING/defs_NB_IoT.h"
-//#include "PHY/TOOLS/defs.h"
-//#include "platform_types.h"
-///#include "openair1/PHY/LTE_TRANSPORT/defs_nb_iot.h"
-
-////////////////////////////////////////////////////////////////////#ifdef OPENAIR_LTE    (check if this is required)
-
-//#include "PHY/LTE_TRANSPORT/defs.h"
-#include "PHY/NBIoT_TRANSPORT/defs_NB_IoT.h"
-#include "openair2/PHY_INTERFACE/IF_Module_NB_IoT.h"
-
-#include <pthread.h>
-
-#include "targets/ARCH/COMMON/common_lib.h"
-
-#define NUM_DCI_MAX_NB_IoT 32
-
-#define NUMBER_OF_eNB_SECTORS_MAX_NB_IoT 3
-
-#define NB_BANDS_MAX_NB_IoT 8
-
-#include "defs_common.h"
-
-#ifdef OCP_FRAMEWORK
-#include <enums.h>
-#else
-typedef enum {normal_txrx_NB_IoT=0,rx_calib_ue_NB_IoT=1,rx_calib_ue_med_NB_IoT=2,rx_calib_ue_byp_NB_IoT=3,debug_prach_NB_IoT=4,no_L2_connect_NB_IoT=5,calib_prach_tx_NB_IoT=6,rx_dump_frame_NB_IoT=7,loop_through_memory_NB_IoT=8} runmode_NB_IoT_t;
-#endif
-
-/*
-enum transmission_access_mode {
-  NO_ACCESS=0,
-  POSTPONED_ACCESS,
-  CANCELED_ACCESS,
-  UNKNOWN_ACCESS,
-  SCHEDULED_ACCESS,
-  CBA_ACCESS};
-
-typedef enum  {
-  eNodeB_3GPP=0,   // classical eNodeB function
-  eNodeB_3GPP_BBU, // eNodeB with NGFI IF5
-  NGFI_RCC_IF4p5,  // NGFI_RCC (NGFI radio cloud center)
-  NGFI_RAU_IF4p5,
-  NGFI_RRU_IF5,    // NGFI_RRU (NGFI remote radio-unit,IF5)
-  NGFI_RRU_IF4p5   // NGFI_RRU (NGFI remote radio-unit,IF4p5)
-} eNB_func_t;
-
-typedef enum {
-  synch_to_ext_device=0,  // synch to RF or Ethernet device
-  synch_to_other          // synch to another source (timer, other CC_id)
-} eNB_timing_t;
-#endif
-*/
-typedef struct UE_SCAN_INFO_NB_IoT_s {
-  /// 10 best amplitudes (linear) for each pss signals
-  int32_t             amp[3][10];
-  /// 10 frequency offsets (kHz) corresponding to best amplitudes, with respect do minimum DL frequency in the band
-  int32_t             freq_offset_Hz[3][10];
-
-} UE_SCAN_INFO_NB_IoT_t;
-
-/// Top-level PHY Data Structure for RN
-typedef struct {
-  /// Module ID indicator for this instance
-  uint8_t             Mod_id;
-  uint32_t            frame;
-  // phy_vars_eNB_NB_IoT
-  // phy_vars ue
-  // cuurently only used to store and forward the PMCH
-  uint8_t             mch_avtive[10];
-  uint8_t             sync_area[10]; // num SF
-  NB_IoT_UE_DLSCH_t   *dlsch_rn_MCH[10];
-
-} PHY_VARS_RN_NB_IoT;
-/*
-#ifdef OCP_FRAMEWORK
-#include <enums.h>
-#else
-//typedef enum {normal_txrx=0,rx_calib_ue=1,rx_calib_ue_med=2,rx_calib_ue_byp=3,debug_prach=4,no_L2_connect=5,calib_prach_tx=6,rx_dump_frame=7,loop_through_memory=8} runmode_t;
-*/
-// enum transmission_access_mode {
-//   NO_ACCESS=0,
-//   POSTPONED_ACCESS,
-//   CANCELED_ACCESS,
-//   UNKNOWN_ACCESS,
-//   SCHEDULED_ACCESS,
-//   CBA_ACCESS};
-
-typedef enum  {
-  eNodeB_3GPP_NB_IoT=0,   // classical eNodeB function
-  eNodeB_3GPP_BBU_NB_IoT, // eNodeB with NGFI IF5
-  NGFI_RCC_IF4p5_NB_IoT,  // NGFI_RCC (NGFI radio cloud center)
-  NGFI_RAU_IF4p5_NB_IoT,
-  NGFI_RRU_IF5_NB_IoT,    // NGFI_RRU (NGFI remote radio-unit,IF5)
-  NGFI_RRU_IF4p5_NB_IoT   // NGFI_RRU (NGFI remote radio-unit,IF4p5)
-} eNB_func_NB_IoT_t;
-
-typedef enum {
-
-  synch_to_ext_device_NB_IoT=0,  // synch to RF or Ethernet device
-  synch_to_other_NB_IoT          // synch to another source (timer, other CC_id)
-
-} eNB_timing_NB_IoT_t;
-////////////////////////////////////////////////////////////////////#endif
-
-
-typedef struct {
-
-  struct                        PHY_VARS_eNB_NB_IoT_s       *eNB;
-  NB_IoT_eNB_NDLSCH_t           *dlsch;
-  int                           G;
-
-} te_params_NB_IoT;
-
-
-typedef struct {
-
-  struct                        PHY_VARS_eNB_NB_IoT_s       *eNB;
-  int                           UE_id;
-  int                           harq_pid;
-  int                           llr8_flag;
-  int                           ret;
-
-} td_params_NB_IoT;
-
-
-/// Context data structure for RX/TX portion of subframe processing
-typedef struct {
-  /// Component Carrier index
-  uint8_t               CC_id;
-  /// timestamp transmitted to HW
-  openair0_timestamp    timestamp_tx;
-  /// subframe to act upon for transmission
-  int                   subframe_tx;
-  /// subframe to act upon for reception
-  int                   subframe_rx;
-  /// frame to act upon for transmission
-  int                   frame_tx;
-  /// frame to act upon for reception
-  int                   frame_rx;
-  /// \brief Instance count for RXn-TXnp4 processing thread.
-  /// \internal This variable is protected by \ref mutex_rxtx.
-  int                   instance_cnt_rxtx;
-  /// pthread structure for RXn-TXnp4 processing thread
-  pthread_t             pthread_rxtx;
-  /// pthread attributes for RXn-TXnp4 processing thread
-  pthread_attr_t        attr_rxtx;
-  /// condition variable for tx processing thread
-  pthread_cond_t        cond_rxtx;
-  /// mutex for RXn-TXnp4 processing thread
-  pthread_mutex_t       mutex_rxtx;
-  /// scheduling parameters for RXn-TXnp4 thread
-  struct                sched_param sched_param_rxtx;
-  /// NB-IoT for IF_Module
-  pthread_t             pthread_l2;
-  pthread_cond_t        cond_l2;
-  pthread_mutex_t       mutex_l2;
-  int                   instance_cnt_l2;
-  pthread_attr_t        attr_l2;
-  uint32_t              frame_msg5;
-  uint32_t              subframe_msg5;
-  int                   subframe_real;
-  uint8_t               flag_scrambling;
-  uint8_t               flag_msg3;
-  uint8_t               counter_msg3;
-  uint32_t              frame_msg3;
-  uint8_t               flag_msg4;
-  uint8_t               counter_msg4;
-  uint32_t              frame_msg4;
-  uint32_t              subframe_msg4;
-  uint8_t               counter_msg5;
-  uint8_t               flag_msg5;
-  uint32_t              frame_dscr_msg5;
-  uint32_t              subframe_dscr_msg5;
-
-} eNB_rxtx_proc_NB_IoT_t;
-/*
-typedef struct {
-  struct PHY_VARS_eNB_NB_IoT_s *eNB;
-  int UE_id;
-  int harq_pid;
-  int llr8_flag;
-  int ret;
-} td_params;
-
-typedef struct {
-  struct PHY_VARS_eNB_NB_IoT_s *eNB;
-  LTE_eNB_DLSCH_t *dlsch;
-  int G;
-} te_params;
-*/
-
-/// Context data structure for eNB subframe processing
-typedef struct eNB_proc_NB_IoT_t_s {
-  /// Component Carrier index
-  uint8_t                 CC_id;
-  /// thread index
-  int                     thread_index;
-  /// timestamp received from HW
-  openair0_timestamp      timestamp_rx;
-  /// timestamp to send to "slave rru"
-  openair0_timestamp      timestamp_tx;
-  /// subframe to act upon for reception
-  int                     subframe_rx;
-  /// symbol mask for IF4p5 reception per subframe
-  uint32_t                symbol_mask[10];
-  /// subframe to act upon for PRACH
-  int                     subframe_prach;
-  /// frame to act upon for reception
-  int                     frame_rx;
-  /// frame to act upon for transmission
-  int                     frame_tx;
-  /// frame offset for secondary eNBs (to correct for frame asynchronism at startup)
-  int                     frame_offset;
-  /// frame to act upon for PRACH
-  int                     frame_prach;
-  /// \internal This variable is protected by \ref mutex_fep.
-  int                     instance_cnt_fep;
-  /// \internal This variable is protected by \ref mutex_td.
-  int                     instance_cnt_td;
-  /// \internal This variable is protected by \ref mutex_te.
-  int                     instance_cnt_te;
-  /// \brief Instance count for FH processing thread.
-  /// \internal This variable is protected by \ref mutex_FH.
-  int                     instance_cnt_FH;
-  /// \brief Instance count for rx processing thread.
-  /// \internal This variable is protected by \ref mutex_prach.
-  int                     instance_cnt_prach;
-  // instance count for over-the-air eNB synchronization
-  int                     instance_cnt_synch;
-  /// \internal This variable is protected by \ref mutex_asynch_rxtx.
-  int                     instance_cnt_asynch_rxtx;
-  /// pthread structure for FH processing thread
-  pthread_t               pthread_FH;
-  /// pthread structure for eNB single processing thread
-  pthread_t               pthread_single;
-  /// pthread structure for asychronous RX/TX processing thread
-  pthread_t               pthread_asynch_rxtx;
-  /// flag to indicate first RX acquisition
-  int                     first_rx;
-  /// flag to indicate first TX transmission
-  int                     first_tx;
-  /// pthread attributes for parallel fep thread
-  pthread_attr_t          attr_fep;
-  /// pthread attributes for parallel turbo-decoder thread
-  pthread_attr_t          attr_td;
-  /// pthread attributes for parallel turbo-encoder thread
-  pthread_attr_t          attr_te;
-  /// pthread attributes for FH processing thread
-  pthread_attr_t          attr_FH;
-  /// pthread attributes for single eNB processing thread
-  pthread_attr_t          attr_single;
-  /// pthread attributes for prach processing thread
-  pthread_attr_t          attr_prach;
-  /// pthread attributes for over-the-air synch thread
-  pthread_attr_t          attr_synch;
-  /// pthread attributes for asynchronous RX thread
-  pthread_attr_t          attr_asynch_rxtx;
-  /// scheduling parameters for parallel fep thread
-  struct                  sched_param sched_param_fep;
-  /// scheduling parameters for parallel turbo-decoder thread
-  struct                  sched_param sched_param_td;
-  /// scheduling parameters for parallel turbo-encoder thread
-  struct                  sched_param sched_param_te;
-  /// scheduling parameters for FH thread
-  struct                  sched_param sched_param_FH;
-  /// scheduling parameters for single eNB thread
-  struct                  sched_param sched_param_single;
-  /// scheduling parameters for prach thread
-  struct                  sched_param sched_param_prach;
-  /// scheduling parameters for over-the-air synchronization thread
-  struct                  sched_param sched_param_synch;
-  /// scheduling parameters for asynch_rxtx thread
-  struct                  sched_param sched_param_asynch_rxtx;
-  /// pthread structure for parallel fep thread
-  pthread_t               pthread_fep;
-  /// pthread structure for parallel turbo-decoder thread
-  pthread_t               pthread_td;
-  /// pthread structure for parallel turbo-encoder thread
-  pthread_t               pthread_te;
-  /// pthread structure for PRACH thread
-  pthread_t               pthread_prach;
-  /// pthread structure for eNB synch thread
-  pthread_t               pthread_synch;
-  /// condition variable for parallel fep thread
-  pthread_cond_t          cond_fep;
-  /// condition variable for parallel turbo-decoder thread
-  pthread_cond_t          cond_td;
-  /// condition variable for parallel turbo-encoder thread
-  pthread_cond_t          cond_te;
-  /// condition variable for FH thread
-  pthread_cond_t          cond_FH;
-  /// condition variable for PRACH processing thread;
-  pthread_cond_t          cond_prach;
-  // condition variable for over-the-air eNB synchronization
-  pthread_cond_t          cond_synch;
-  /// condition variable for asynch RX/TX thread
-  pthread_cond_t          cond_asynch_rxtx;
-  /// mutex for parallel fep thread
-  pthread_mutex_t         mutex_fep;
-  /// mutex for parallel turbo-decoder thread
-  pthread_mutex_t         mutex_td;
-  /// mutex for parallel turbo-encoder thread
-  pthread_mutex_t         mutex_te;
-  /// mutex for FH
-  pthread_mutex_t         mutex_FH;
-  /// mutex for PRACH thread
-  pthread_mutex_t         mutex_prach;
-  // mutex for over-the-air eNB synchronization
-  pthread_mutex_t         mutex_synch;
-  /// mutex for asynch RX/TX thread
-  pthread_mutex_t         mutex_asynch_rxtx;
-  /// parameters for turbo-decoding worker thread
-  td_params_NB_IoT        tdp;
-  /// parameters for turbo-encoding worker thread
-  te_params_NB_IoT        tep;
-  /// number of slave threads
-  int                     num_slaves;
-  /// array of pointers to slaves
-  struct                  eNB_proc_NB_IoT_t_s           **slave_proc;
-  /// set of scheduling variables RXn-TXnp4 threads
-  // newly added for NB_IoT
-  eNB_rxtx_proc_NB_IoT_t  proc_rxtx[2];
-
-} eNB_proc_NB_IoT_t;
-
-
-/// Context data structure for RX/TX portion of subframe processing
-typedef struct {
-  /// index of the current UE RX/TX proc
-  int                   proc_id;
-  /// Component Carrier index
-  uint8_t               CC_id;
-  /// timestamp transmitted to HW
-  openair0_timestamp    timestamp_tx;
-  /// subframe to act upon for transmission
-  int                   subframe_tx;
-  /// subframe to act upon for reception
-  int                   subframe_rx;
-  /// frame to act upon for transmission
-  int                   frame_tx;
-  /// frame to act upon for reception
-  int                   frame_rx;
-  /// \brief Instance count for RXn-TXnp4 processing thread.
-  /// \internal This variable is protected by \ref mutex_rxtx.
-  int                   instance_cnt_rxtx;
-  /// pthread structure for RXn-TXnp4 processing thread
-  pthread_t             pthread_rxtx;
-  /// pthread attributes for RXn-TXnp4 processing thread
-  pthread_attr_t        attr_rxtx;
-  /// condition variable for tx processing thread
-  pthread_cond_t        cond_rxtx;
-  /// mutex for RXn-TXnp4 processing thread
-  pthread_mutex_t       mutex_rxtx;
-  /// scheduling parameters for RXn-TXnp4 thread
-  struct                sched_param sched_param_rxtx;
-  /// 
-  int                   sub_frame_start;
-  ///
-  int                   sub_frame_step;
-  ///
-  unsigned long long    gotIQs;
-
-} UE_rxtx_proc_NB_IoT_t;
-
-/// Context data structure for eNB subframe processing
-typedef struct {
-  /// Component Carrier index
-  uint8_t                 CC_id;
-  /// Last RX timestamp
-  openair0_timestamp      timestamp_rx;
-  /// pthread attributes for main UE thread
-  pthread_attr_t          attr_ue;
-  /// scheduling parameters for main UE thread
-  struct                  sched_param sched_param_ue;
-  /// pthread descriptor main UE thread
-  pthread_t               pthread_ue;
-  /// \brief Instance count for synch thread.
-  /// \internal This variable is protected by \ref mutex_synch.
-  int                     instance_cnt_synch;
-  /// pthread attributes for synch processing thread
-  pthread_attr_t          attr_synch;
-  /// scheduling parameters for synch thread
-  struct                  sched_param sched_param_synch;
-  /// pthread descriptor synch thread
-  pthread_t               pthread_synch;
-  /// condition variable for UE synch thread;
-  pthread_cond_t          cond_synch;
-  /// mutex for UE synch thread
-  pthread_mutex_t         mutex_synch;
-  /// set of scheduling variables RXn-TXnp4 threads
-  UE_rxtx_proc_NB_IoT_t   proc_rxtx[2];
-
-} UE_proc_NB_IoT_t;
-
-
-
-/// Top-level PHY Data Structure for eNB
-typedef struct PHY_VARS_eNB_NB_IoT_s {
-  /// Module ID indicator for this instance
-  module_id_t                   Mod_id;
-  uint8_t                       CC_id;
-  eNB_proc_NB_IoT_t             proc;
-  eNB_func_NB_IoT_t             node_function;
-  eNB_timing_NB_IoT_t           node_timing;
-  eth_params_t                  *eth_params;
-  int                           single_thread_flag;
-  openair0_rf_map               rf_map;
-  int                           abstraction_flag;
-  openair0_timestamp            ts_offset;
-  // indicator for synchronization state of eNB
-  int                           in_synch;
-  // indicator for master/slave (RRU)
-  int                           is_slave;
-  // indicator for precoding function (eNB,3GPP_eNB_BBU)
-  int                           do_precoding;
-  void                          (*do_prach)(struct PHY_VARS_eNB_NB_IoT_s *eNB,int frame,int subframe);
-  void                          (*fep)(struct PHY_VARS_eNB_NB_IoT_s *eNB,eNB_rxtx_proc_NB_IoT_t *proc);
-  int                           (*td)(struct PHY_VARS_eNB_NB_IoT_s *eNB,int UE_id,int harq_pid,int llr8_flag);
-  int                           (*te)(struct PHY_VARS_eNB_NB_IoT_s *,uint8_t *,uint8_t,NB_IoT_eNB_NDLSCH_t *,int,uint8_t,time_stats_t_NB_IoT *,time_stats_t_NB_IoT *,time_stats_t_NB_IoT *);
-  void                          (*proc_uespec_rx)(struct PHY_VARS_eNB_NB_IoT_s *eNB,eNB_rxtx_proc_NB_IoT_t *proc,const relaying_type_t_NB_IoT r_type);
-  void                          (*proc_tx)(struct PHY_VARS_eNB_NB_IoT_s *eNB,eNB_rxtx_proc_NB_IoT_t *proc,relaying_type_t_NB_IoT r_type,PHY_VARS_RN_NB_IoT *rn);
-  void                          (*tx_fh)(struct PHY_VARS_eNB_NB_IoT_s *eNB,eNB_rxtx_proc_NB_IoT_t *proc);
-  void                          (*rx_fh)(struct PHY_VARS_eNB_NB_IoT_s *eNB,int *frame, int *subframe);
-  int                           (*start_rf)(struct PHY_VARS_eNB_NB_IoT_s *eNB);
-  int                           (*start_if)(struct PHY_VARS_eNB_NB_IoT_s *eNB);
-  void                          (*fh_asynch)(struct PHY_VARS_eNB_NB_IoT_s *eNB,int *frame, int *subframe);
-  uint8_t                       local_flag;
-  uint32_t                      rx_total_gain_dB;
-  NB_IoT_DL_FRAME_PARMS         frame_parms;
-  PHY_MEASUREMENTS_eNB_NB_IoT   measurements[NUMBER_OF_eNB_SECTORS_MAX_NB_IoT]; /// Measurement variables
-  NB_IoT_eNB_COMMON             common_vars;
-  NB_IoT_eNB_SRS                srs_vars[NUMBER_OF_UE_MAX_NB_IoT];
-  NB_IoT_eNB_PBCH               pbch;
-  NB_IoT_eNB_PUSCH              *pusch_vars[NUMBER_OF_UE_MAX_NB_IoT];
-  NB_IoT_eNB_PRACH              prach_vars;
-  //LTE_eNB_DLSCH_t             *dlsch[NUMBER_OF_UE_MAX_NB_IoT][2];             // Nusers times two spatial streams
-  NB_IoT_eNB_NULSCH_t            *ulsch[NUMBER_OF_UE_MAX_NB_IoT+1];              // Nusers + number of RA (the ulsch[0] contains RAR)
-  //LTE_eNB_DLSCH_t             *dlsch_SI,*dlsch_ra;
-  //LTE_eNB_DLSCH_t             *dlsch_MCH;
-  NB_IoT_eNB_UE_stats           UE_stats[NUMBER_OF_UE_MAX_NB_IoT];
-  //LTE_eNB_UE_stats            *UE_stats_ptr[NUMBER_OF_UE_MAX_NB_IoT];
-  /// cell-specific reference symbols
-  uint32_t                      lte_gold_table_NB_IoT[20][2][14];
-  /// UE-specific reference symbols (p=5), TM 7
-  uint32_t                      lte_gold_uespec_port5_table[NUMBER_OF_UE_MAX_NB_IoT][20][38];
-  /// UE-specific reference symbols (p=7...14), TM 8/9/10
-  uint32_t                      lte_gold_uespec_table[2][20][2][21];
-  /// mbsfn reference symbols
-  uint32_t                      lte_gold_mbsfn_table[10][3][42];
-  ///
-  uint32_t                      X_u[64][839];
-  ///
-  uint8_t                       pbch_pdu[4];                                      //PBCH_PDU_SIZE
-  ///
-  char                          eNB_generate_rar;
-  /// Indicator set to 0 after first SR
-  uint8_t                       first_sr[NUMBER_OF_UE_MAX_NB_IoT];
-
-  uint32_t                      max_peak_val;
-  ///
-  int                           max_eNB_id, max_sync_pos;
-  ///
-  int                           N_TA_offset;                        ///timing offset used in TDD
-  /// \brief sinr for all subcarriers of the current link (used only for abstraction).
-  /// first index: ? [0..N_RB_DL*12[
-  double                        *sinr_dB;
-  /// N0 (used for abstraction)
-  double                        N0;
-  ///
-  unsigned char                 first_run_timing_advance[NUMBER_OF_UE_MAX_NB_IoT];
-  unsigned char                 first_run_I0_measurements;
-
-  unsigned char                 cooperation_flag;                   // for cooperative communication
-
-  unsigned char                 is_secondary_eNB;                   // primary by default
-  unsigned char                 is_init_sync;                       /// Flag to tell if initial synchronization is performed. This affects how often the secondary eNB will listen to the PSS from the primary system.
-  unsigned char                 has_valid_precoder;                 /// Flag to tell if secondary eNB has channel estimates to create NULL-beams from, and this B/F vector is created.
-  unsigned char                 PeNB_id;                            /// id of Primary eNB
-  int                           rx_offset;                          /// Timing offset (used if is_secondary_eNB)
-
-  /// hold the precoder for NULL beam to the primary user
-  int                           **dl_precoder_SeNB[3];
-  ///
-  char                          log2_maxp;                          /// holds the maximum channel/precoder coefficient
-  /// if ==0 enables phy only test mode
-  int                           mac_enabled;
-  /// For emulation only (used by UE abstraction to retrieve DCI)
-  uint8_t                       num_common_dci[2];                  // num_dci in even/odd subframes
-  ///
-  uint8_t                       num_ue_spec_dci[2];                 // num_dci in even/odd subframes
-  ///
-  DCI_ALLOC_NB_IoT_t            dci_alloc[2][NUM_DCI_MAX_NB_IoT];   // dci_alloc from even/odd subframes
-  /////////////
-  // PDSCH Varaibles
-  PDSCH_CONFIG_DEDICATED_NB_IoT             pdsch_config_dedicated[NUMBER_OF_UE_MAX_NB_IoT];
-  // PUSCH Varaibles
-  PUSCH_CONFIG_DEDICATED_NB_IoT             pusch_config_dedicated[NUMBER_OF_UE_MAX_NB_IoT];
-  // PUCCH variables
-  PUCCH_CONFIG_DEDICATED_NB_IoT             pucch_config_dedicated[NUMBER_OF_UE_MAX_NB_IoT];
-  // UL-POWER-Control
-  UL_POWER_CONTROL_DEDICATED_NB_IoT         ul_power_control_dedicated[NUMBER_OF_UE_MAX_NB_IoT];
-  // TPC
-  TPC_PDCCH_CONFIG_NB_IoT                   tpc_pdcch_config_pucch[NUMBER_OF_UE_MAX_NB_IoT];
-  ///
-  TPC_PDCCH_CONFIG_NB_IoT                   tpc_pdcch_config_pusch[NUMBER_OF_UE_MAX_NB_IoT];
-  // CQI reporting
-  CQI_REPORT_CONFIG_NB_IoT                  cqi_report_config[NUMBER_OF_UE_MAX_NB_IoT];
-  // SRS Variables
-  SOUNDINGRS_UL_CONFIG_DEDICATED_NB_IoT     soundingrs_ul_config_dedicated[NUMBER_OF_UE_MAX_NB_IoT];
-  ///
-  uint8_t                                   ncs_cell[20][7];
-  // Scheduling Request Config
-  SCHEDULING_REQUEST_CONFIG_NB_IoT          scheduling_request_config[NUMBER_OF_UE_MAX_NB_IoT];
-  // Transmission mode per UE
-  uint8_t                                   transmission_mode[NUMBER_OF_UE_MAX_NB_IoT];
-  /// cba_last successful reception for each group, used for collision detection
-  uint8_t                                   cba_last_reception[4];
-  // Pointers for active physicalConfigDedicated to be applied in current subframe
-  struct                                    PhysicalConfigDedicated                         *physicalConfigDedicated[NUMBER_OF_UE_MAX_NB_IoT];
-  //Pointers for actve physicalConfigDedicated for NB-IoT to be applied in current subframe
-  struct                                    PhysicalConfigDedicated_NB_r13                  *phy_config_dedicated_NB_IoT[NUMBER_OF_UE_MAX_NB_IoT];
-  ///
-  uint32_t                                  rb_mask_ul[4];
-  /// Information regarding TM5
-  MU_MIMO_mode_NB_IoT                       mu_mimo_mode[NUMBER_OF_UE_MAX_NB_IoT];
-  /// target_ue_dl_mcs : only for debug purposes
-  uint32_t                                  target_ue_dl_mcs;
-  /// target_ue_ul_mcs : only for debug purposes
-  uint32_t                                  target_ue_ul_mcs;
-  /// target_ue_dl_rballoc : only for debug purposes
-  uint32_t                                  ue_dl_rb_alloc;
-  /// target ul PRBs : only for debug
-  uint32_t                                  ue_ul_nb_rb;
-  ///check for Total Transmissions
-  uint32_t                                  check_for_total_transmissions;
-  ///check for MU-MIMO Transmissions
-  uint32_t                                  check_for_MUMIMO_transmissions;
-  ///check for SU-MIMO Transmissions
-  uint32_t                                  check_for_SUMIMO_transmissions;
-  ///check for FULL MU-MIMO Transmissions
-  uint32_t                                  FULL_MUMIMO_transmissions;
-  /// Counter for total bitrate, bits and throughput in downlink
-  uint32_t                                  total_dlsch_bitrate;
-  ///
-  uint32_t                                  total_transmitted_bits;
-  ///
-  uint32_t                                  total_system_throughput;
-  ///
-  int                                       hw_timing_advance;
-  ///
-  time_stats_t_NB_IoT                       phy_proc;
-  time_stats_t_NB_IoT                       phy_proc_tx;
-  time_stats_t_NB_IoT                       phy_proc_rx;
-  time_stats_t_NB_IoT                       rx_prach;
-
-  time_stats_t_NB_IoT                       ofdm_mod_stats;
-  time_stats_t_NB_IoT                       dlsch_encoding_stats;
-  time_stats_t_NB_IoT                       dlsch_modulation_stats;
-  time_stats_t_NB_IoT                       dlsch_scrambling_stats;
-  time_stats_t_NB_IoT                       dlsch_rate_matching_stats;
-  time_stats_t_NB_IoT                       dlsch_turbo_encoding_stats;
-  time_stats_t_NB_IoT                       dlsch_interleaving_stats;
-
-  time_stats_t_NB_IoT                       ofdm_demod_stats;
-  time_stats_t_NB_IoT                       rx_dft_stats;
-  time_stats_t_NB_IoT                       ulsch_channel_estimation_stats;
-  time_stats_t_NB_IoT                       ulsch_freq_offset_estimation_stats;
-  time_stats_t_NB_IoT                       ulsch_decoding_stats;
-  time_stats_t_NB_IoT                       ulsch_demodulation_stats;
-  time_stats_t_NB_IoT                       ulsch_rate_unmatching_stats;
-  time_stats_t_NB_IoT                       ulsch_turbo_decoding_stats;
-  time_stats_t_NB_IoT                       ulsch_deinterleaving_stats;
-  time_stats_t_NB_IoT                       ulsch_demultiplexing_stats;
-  time_stats_t_NB_IoT                       ulsch_llr_stats;
-  time_stats_t_NB_IoT                       ulsch_tc_init_stats;
-  time_stats_t_NB_IoT                       ulsch_tc_alpha_stats;
-  time_stats_t_NB_IoT                       ulsch_tc_beta_stats;
-  time_stats_t_NB_IoT                       ulsch_tc_gamma_stats;
-  time_stats_t_NB_IoT                       ulsch_tc_ext_stats;
-  time_stats_t_NB_IoT                       ulsch_tc_intl1_stats;
-  time_stats_t_NB_IoT                       ulsch_tc_intl2_stats;
-
-  #ifdef LOCALIZATION
-  /// time state for localization
-  time_stats_t_NB_IoT                       localization_stats;
-  #endif
-
-  int32_t                                   pucch1_stats_cnt[NUMBER_OF_UE_MAX_NB_IoT][10];
-  int32_t                                   pucch1_stats[NUMBER_OF_UE_MAX_NB_IoT][10*1024];
-  int32_t                                   pucch1_stats_thres[NUMBER_OF_UE_MAX_NB_IoT][10*1024];
-  int32_t                                   pucch1ab_stats_cnt[NUMBER_OF_UE_MAX_NB_IoT][10];
-  int32_t                                   pucch1ab_stats[NUMBER_OF_UE_MAX_NB_IoT][2*10*1024];
-  int32_t                                   pusch_stats_rb[NUMBER_OF_UE_MAX_NB_IoT][10240];
-  int32_t                                   pusch_stats_round[NUMBER_OF_UE_MAX_NB_IoT][10240];
-  int32_t                                   pusch_stats_mcs[NUMBER_OF_UE_MAX_NB_IoT][10240];
-  int32_t                                   pusch_stats_bsr[NUMBER_OF_UE_MAX_NB_IoT][10240];
-  int32_t                                   pusch_stats_BO[NUMBER_OF_UE_MAX_NB_IoT][10240];
-
-  /// RF and Interface devices per CC
-  openair0_device                           rfdevice;
-  openair0_device                           ifdevice;
-  /// Pointer for ifdevice buffer struct
-  if_buffer_t                               ifbuffer;
-
-  //------------------------
-  // NB-IoT
-  //------------------------
-
-  /*
-   * NUMBER_OF_UE_MAX_NB_IoT maybe in the future should be dynamic because could be very large and the memory may explode
-   * (is almost the indication of the number of UE context that we are storing at PHY layer)
-   *
-   * reasoning: the following data structure (ndlsch, nulsch ecc..) are used to store the context that should be transmitted in at least n+4 subframe later
-   * (the minimum interval between NPUSCH and the ACK for this)
-   * the problem is that in NB_IoT the ACK for the UPLINK is contained in the DCI through the NDI field (if this value change from the previous one then it means ACK)
-   * but may we could schedule this DCI long time later so may lots of contents shuld be stored (there is no concept of phich channel in NB-IoT)
-   * For the DL transmission the UE send a proper ACK/NACK message
-   *
-   * *the HARQ process should be killed when the NDI change
-   *
-   * *In the Structure for nulsch we should also store the information related to the subframe (because each time we should read it and understand what should be done
-   * in that subframe)
-   *
-   */
-
-
-  /*
-   * TIMING
-   * the entire transmission and scheduling are done for the "subframe" concept but the subframe = proc->subframe_tx (that in reality is the subframe_rx +4)
-   * (see USER/lte-enb/wakeup_rxtx )
-   *
-   * Related to FAPI:
-   * DCI and  DL_CONFIG.request (also more that 1) and MAC_PDU are transmitted in the same subframe (our assumption) so will be all contained in the schedule_response getting from the scheduler
-   * DCI0 and UL_CONFIG.request are transmitted in the same subframe (our assumption) so contained in the schedule_response
-   *
-   */
-
-  //TODO: check what should be NUMBER_OF_UE_MAX_NB_IoT value
-  NB_IoT_eNB_NPBCH_t        *npbch;
-  NB_IoT_eNB_NPDCCH_t       *npdcch[NUMBER_OF_UE_MAX_NB_IoT];
-  NB_IoT_eNB_NDLSCH_t       *ndlsch[NUMBER_OF_UE_MAX_NB_IoT];
-  NB_IoT_eNB_NULSCH_t       *nulsch[NUMBER_OF_UE_MAX_NB_IoT+1]; //nulsch[0] contains the RAR
-  NB_IoT_eNB_NDLSCH_t       *ndlsch_SI,*ndlsch_ra, *ndlsch_SIB1;
-
-  NB_IoT_DL_FRAME_PARMS     frame_parms_NB_IoT;
-  // DCI for at most 2 DCI pdus
-  DCI_PDU_NB_IoT            *DCI_pdu;
-
-  UL_IND_NB_IoT_t UL_INFO;
-
-} PHY_VARS_eNB_NB_IoT;
-
-//#define debug_msg if (((mac_xface->frame%100) == 0) || (mac_xface->frame < 50)) msg
-
-/// Top-level PHY Data Structure for UE
-typedef struct {
-  /// \brief Module ID indicator for this instance
-  uint8_t                       Mod_id;
-  /// \brief Component carrier ID for this PHY instance
-  uint8_t                       CC_id;
-  /// \brief Mapping of CC_id antennas to cards
-  openair0_rf_map               rf_map;
-  //uint8_t local_flag;
-  /// \brief Indicator of current run mode of UE (normal_txrx, rx_calib_ue, no_L2_connect, debug_prach)
-  runmode_NB_IoT_t              mode;
-  /// \brief Indicator that UE should perform band scanning
-  int                           UE_scan;
-  /// \brief Indicator that UE should perform coarse scanning around carrier
-  int                           UE_scan_carrier;
-  /// \brief Indicator that UE is synchronized to an eNB
-  int                           is_synchronized;
-  /// Data structure for UE process scheduling
-  UE_proc_NB_IoT_t              proc;
-  /// Flag to indicate the UE shouldn't do timing correction at all
-  int                           no_timing_correction;
-  /// \brief Total gain of the TX chain (16-bit baseband I/Q to antenna)
-  uint32_t                      tx_total_gain_dB;
-  /// \brief Total gain of the RX chain (antenna to baseband I/Q) This is a function of rx_gain_mode (and the corresponding gain) and the rx_gain of the card.
-  uint32_t                      rx_total_gain_dB;
-  /// \brief Total gains with maximum RF gain stage (ExpressMIMO2/Lime)
-  uint32_t                      rx_gain_max[4];
-  /// \brief Total gains with medium RF gain stage (ExpressMIMO2/Lime)
-  uint32_t                      rx_gain_med[4];
-  /// \brief Total gains with bypassed RF gain stage (ExpressMIMO2/Lime)
-  uint32_t                      rx_gain_byp[4];
-  /// \brief Current transmit power
-  int16_t                       tx_power_dBm[10];
-  /// \brief Total number of REs in current transmission
-  int                           tx_total_RE[10];
-  /// \brief Maximum transmit power
-  int8_t                        tx_power_max_dBm;
-  /// \brief Number of eNB seen by UE
-  uint8_t                       n_connected_eNB;
-  /// \brief indicator that Handover procedure has been initiated
-  uint8_t                       ho_initiated;
-  /// \brief indicator that Handover procedure has been triggered
-  uint8_t                       ho_triggered;
-  /// \brief Measurement variables.
-  PHY_MEASUREMENTS_NB_IoT       measurements;
-  NB_IoT_DL_FRAME_PARMS         frame_parms;
-  /// \brief Frame parame before ho used to recover if ho fails.
-  NB_IoT_DL_FRAME_PARMS         frame_parms_before_ho;
-  NB_IoT_UE_COMMON              common_vars;
-
-  NB_IoT_UE_PDSCH     *pdsch_vars[2][NUMBER_OF_CONNECTED_eNB_MAX+1]; // two RxTx Threads
-/*
-  LTE_UE_PDSCH_FLP *pdsch_vars_flp[NUMBER_OF_CONNECTED_eNB_MAX+1];
-  LTE_UE_PDSCH     *pdsch_vars_SI[NUMBER_OF_CONNECTED_eNB_MAX+1];
-  LTE_UE_PDSCH     *pdsch_vars_ra[NUMBER_OF_CONNECTED_eNB_MAX+1];
-  LTE_UE_PDSCH     *pdsch_vars_p[NUMBER_OF_CONNECTED_eNB_MAX+1];
-  LTE_UE_PDSCH     *pdsch_vars_MCH[NUMBER_OF_CONNECTED_eNB_MAX];
-  LTE_UE_PBCH      *pbch_vars[NUMBER_OF_CONNECTED_eNB_MAX];
-  LTE_UE_PDCCH     *pdcch_vars[2][NUMBER_OF_CONNECTED_eNB_MAX];
-  LTE_UE_PRACH     *prach_vars[NUMBER_OF_CONNECTED_eNB_MAX];
-*/
-  NB_IoT_UE_DLSCH_t   *dlsch[2][NUMBER_OF_CONNECTED_eNB_MAX][2]; // two RxTx Threads
-/*
-  LTE_UE_ULSCH_t   *ulsch[NUMBER_OF_CONNECTED_eNB_MAX];
-  LTE_UE_DLSCH_t   *dlsch_SI[NUMBER_OF_CONNECTED_eNB_MAX];
-  LTE_UE_DLSCH_t   *dlsch_ra[NUMBER_OF_CONNECTED_eNB_MAX];
-  LTE_UE_DLSCH_t   *dlsch_p[NUMBER_OF_CONNECTED_eNB_MAX];
-  LTE_UE_DLSCH_t   *dlsch_MCH[NUMBER_OF_CONNECTED_eNB_MAX];
-  // This is for SIC in the UE, to store the reencoded data
-  LTE_eNB_DLSCH_t  *dlsch_eNB[NUMBER_OF_CONNECTED_eNB_MAX];
-*/
-  //Paging parameters
-  uint32_t                        IMSImod1024;
-  uint32_t                        PF;
-  uint32_t                        PO;
-  // For abstraction-purposes only
-  uint8_t                         sr[10];
-  uint8_t                         pucch_sel[10];
-  uint8_t                         pucch_payload[22];
-  //UE_MODE_t                     UE_mode[NUMBER_OF_CONNECTED_eNB_MAX];
-  //cell-specific reference symbols
-  uint32_t                        lte_gold_table[7][20][2][14];
-  //UE-specific reference symbols (p=5), TM 7
-  uint32_t                        lte_gold_uespec_port5_table[20][38];
-  //ue-specific reference symbols
-  uint32_t                        lte_gold_uespec_table[2][20][2][21];
-  //mbsfn reference symbols
-  uint32_t                        lte_gold_mbsfn_table[10][3][42];
-  ///
-  uint32_t                        X_u[64][839];
-  /// 
-  uint32_t                        high_speed_flag;
-  uint32_t                        perfect_ce;
-  int16_t                         ch_est_alpha;
-  int                             generate_ul_signal[NUMBER_OF_CONNECTED_eNB_MAX];
-  ///
-  UE_SCAN_INFO_NB_IoT_t           scan_info[NB_BANDS_MAX_NB_IoT];
-  ///
-  char                            ulsch_no_allocation_counter[NUMBER_OF_CONNECTED_eNB_MAX];
-
-/*
-
-  unsigned char ulsch_Msg3_active[NUMBER_OF_CONNECTED_eNB_MAX];
-  uint32_t  ulsch_Msg3_frame[NUMBER_OF_CONNECTED_eNB_MAX];
-  unsigned char ulsch_Msg3_subframe[NUMBER_OF_CONNECTED_eNB_MAX];
-  PRACH_RESOURCES_t *prach_resources[NUMBER_OF_CONNECTED_eNB_MAX];
-  int turbo_iterations, turbo_cntl_iterations;
-  /// \brief ?.
-  /// - first index: eNB [0..NUMBER_OF_CONNECTED_eNB_MAX[ (hard coded)
-  uint32_t total_TBS[NUMBER_OF_CONNECTED_eNB_MAX];
-  /// \brief ?.
-  /// - first index: eNB [0..NUMBER_OF_CONNECTED_eNB_MAX[ (hard coded)
-  uint32_t total_TBS_last[NUMBER_OF_CONNECTED_eNB_MAX];
-  /// \brief ?.
-  /// - first index: eNB [0..NUMBER_OF_CONNECTED_eNB_MAX[ (hard coded)
-  uint32_t bitrate[NUMBER_OF_CONNECTED_eNB_MAX];
-  /// \brief ?.
-  /// - first index: eNB [0..NUMBER_OF_CONNECTED_eNB_MAX[ (hard coded)
-  uint32_t total_received_bits[NUMBER_OF_CONNECTED_eNB_MAX];
-  int dlsch_errors[NUMBER_OF_CONNECTED_eNB_MAX];
-  int dlsch_errors_last[NUMBER_OF_CONNECTED_eNB_MAX];
-  int dlsch_received[NUMBER_OF_CONNECTED_eNB_MAX];
-  int dlsch_received_last[NUMBER_OF_CONNECTED_eNB_MAX];
-  int dlsch_fer[NUMBER_OF_CONNECTED_eNB_MAX];
-  int dlsch_SI_received[NUMBER_OF_CONNECTED_eNB_MAX];
-  int dlsch_SI_errors[NUMBER_OF_CONNECTED_eNB_MAX];
-  int dlsch_ra_received[NUMBER_OF_CONNECTED_eNB_MAX];
-  int dlsch_ra_errors[NUMBER_OF_CONNECTED_eNB_MAX];
-  int dlsch_p_received[NUMBER_OF_CONNECTED_eNB_MAX];
-  int dlsch_p_errors[NUMBER_OF_CONNECTED_eNB_MAX];
-  int dlsch_mch_received_sf[MAX_MBSFN_AREA][NUMBER_OF_CONNECTED_eNB_MAX];
-  int dlsch_mch_received[NUMBER_OF_CONNECTED_eNB_MAX];
-  int dlsch_mcch_received[MAX_MBSFN_AREA][NUMBER_OF_CONNECTED_eNB_MAX];
-  int dlsch_mtch_received[MAX_MBSFN_AREA][NUMBER_OF_CONNECTED_eNB_MAX];
-  int dlsch_mcch_errors[MAX_MBSFN_AREA][NUMBER_OF_CONNECTED_eNB_MAX];
-  int dlsch_mtch_errors[MAX_MBSFN_AREA][NUMBER_OF_CONNECTED_eNB_MAX];
-  int dlsch_mcch_trials[MAX_MBSFN_AREA][NUMBER_OF_CONNECTED_eNB_MAX];
-  int dlsch_mtch_trials[MAX_MBSFN_AREA][NUMBER_OF_CONNECTED_eNB_MAX];
-  int current_dlsch_cqi[NUMBER_OF_CONNECTED_eNB_MAX];
-  unsigned char first_run_timing_advance[NUMBER_OF_CONNECTED_eNB_MAX];
-  uint8_t               generate_prach;
-  uint8_t               prach_cnt;
-  uint8_t               prach_PreambleIndex;
-  //  uint8_t               prach_timer;
-  uint8_t               decode_SIB;
-  uint8_t               decode_MIB;
-  int              rx_offset; /// Timing offset
-  int              rx_offset_diff; /// Timing adjustment for ofdm symbol0 on HW USRP
-  int              timing_advance; ///timing advance signalled from eNB
-  int              hw_timing_advance;
-  int              N_TA_offset; ///timing offset used in TDD
-  /// Flag to tell if UE is secondary user (cognitive mode)
-  unsigned char    is_secondary_ue;
-  /// Flag to tell if secondary eNB has channel estimates to create NULL-beams from.
-  unsigned char    has_valid_precoder;
-  /// hold the precoder for NULL beam to the primary eNB
-  int              **ul_precoder_S_UE;
-  /// holds the maximum channel/precoder coefficient
-  char             log2_maxp;
-*/
-  /// if ==0 enables phy only test mode
-  int              mac_enabled;
-  /// Flag to initialize averaging of PHY measurements
-  int              init_averaging;
-  /// \brief sinr for all subcarriers of the current link (used only for abstraction).
-  /// - first index: ? [0..12*N_RB_DL[
-  double           *sinr_dB;
-  /// \brief sinr for all subcarriers of first symbol for the CQI Calculation.
-  /// - first index: ? [0..12*N_RB_DL[
-  double           *sinr_CQI_dB;
-  /// sinr_effective used for CQI calulcation
-  double           sinr_eff;
-  /// N0 (used for abstraction)
-  double           N0;
-/*
-  /// PDSCH Varaibles
-  PDSCH_CONFIG_DEDICATED pdsch_config_dedicated[NUMBER_OF_CONNECTED_eNB_MAX];
-
-  /// PUSCH Varaibles
-  PUSCH_CONFIG_DEDICATED pusch_config_dedicated[NUMBER_OF_CONNECTED_eNB_MAX];
-
-  /// PUSCH contention-based access vars
-  PUSCH_CA_CONFIG_DEDICATED  pusch_ca_config_dedicated[NUMBER_OF_eNB_MAX]; // lola
-
-  /// PUCCH variables
-
-  PUCCH_CONFIG_DEDICATED pucch_config_dedicated[NUMBER_OF_CONNECTED_eNB_MAX];
-
-  uint8_t ncs_cell[20][7];
-
-  /// UL-POWER-Control
-  UL_POWER_CONTROL_DEDICATED ul_power_control_dedicated[NUMBER_OF_CONNECTED_eNB_MAX];
-
-  /// TPC
-  TPC_PDCCH_CONFIG tpc_pdcch_config_pucch[NUMBER_OF_CONNECTED_eNB_MAX];
-  TPC_PDCCH_CONFIG tpc_pdcch_config_pusch[NUMBER_OF_CONNECTED_eNB_MAX];
-
-  /// CQI reporting
-  CQI_REPORT_CONFIG cqi_report_config[NUMBER_OF_CONNECTED_eNB_MAX];
-
-  /// SRS Variables
-  SOUNDINGRS_UL_CONFIG_DEDICATED soundingrs_ul_config_dedicated[NUMBER_OF_CONNECTED_eNB_MAX];
-
-  /// Scheduling Request Config
-  SCHEDULING_REQUEST_CONFIG scheduling_request_config[NUMBER_OF_CONNECTED_eNB_MAX];
-
-  /// Transmission mode per eNB
-  uint8_t transmission_mode[NUMBER_OF_CONNECTED_eNB_MAX];
-
-  time_stats_t phy_proc;
-  time_stats_t phy_proc_tx;
-  time_stats_t phy_proc_rx[2];
-
-  uint32_t use_ia_receiver;
-
-  time_stats_t ofdm_mod_stats;
-  time_stats_t ulsch_encoding_stats;
-  time_stats_t ulsch_modulation_stats;
-  time_stats_t ulsch_segmentation_stats;
-  time_stats_t ulsch_rate_matching_stats;
-  time_stats_t ulsch_turbo_encoding_stats;
-  time_stats_t ulsch_interleaving_stats;
-  time_stats_t ulsch_multiplexing_stats;
-
-  time_stats_t generic_stat;
-  time_stats_t pdsch_procedures_stat;
-  time_stats_t dlsch_procedures_stat;
-
-  time_stats_t ofdm_demod_stats;
-  time_stats_t dlsch_rx_pdcch_stats;
-  time_stats_t rx_dft_stats;
-  time_stats_t dlsch_channel_estimation_stats;
-  time_stats_t dlsch_freq_offset_estimation_stats;
-  time_stats_t dlsch_decoding_stats[2];
-  time_stats_t dlsch_demodulation_stats;
-  time_stats_t dlsch_rate_unmatching_stats;
-  time_stats_t dlsch_turbo_decoding_stats;
-  time_stats_t dlsch_deinterleaving_stats;
-  time_stats_t dlsch_llr_stats;
-  time_stats_t dlsch_unscrambling_stats;
-  time_stats_t dlsch_rate_matching_stats;
-  time_stats_t dlsch_turbo_encoding_stats;
-  time_stats_t dlsch_interleaving_stats;
-  time_stats_t dlsch_tc_init_stats;
-  time_stats_t dlsch_tc_alpha_stats;
-  time_stats_t dlsch_tc_beta_stats;
-  time_stats_t dlsch_tc_gamma_stats;
-  time_stats_t dlsch_tc_ext_stats;
-  time_stats_t dlsch_tc_intl1_stats;
-  time_stats_t dlsch_tc_intl2_stats;
-  time_stats_t tx_prach;
-
-  /// RF and Interface devices per CC
-  openair0_device rfdevice;
-  time_stats_t dlsch_encoding_SIC_stats;
-  time_stats_t dlsch_scrambling_SIC_stats;
-  time_stats_t dlsch_modulation_SIC_stats;
-  time_stats_t dlsch_llr_stripping_unit_SIC_stats;
-  time_stats_t dlsch_unscrambling_SIC_stats;
-
-#if ENABLE_RAL
-  hash_table_t    *ral_thresholds_timed;
-  SLIST_HEAD(ral_thresholds_gen_poll_s, ral_threshold_phy_t) ral_thresholds_gen_polled[RAL_LINK_PARAM_GEN_MAX];
-  SLIST_HEAD(ral_thresholds_lte_poll_s, ral_threshold_phy_t) ral_thresholds_lte_polled[RAL_LINK_PARAM_LTE_MAX];
-#endif
-*/
-} PHY_VARS_UE_NB_IoT;
-
-
-/*
-void exit_fun(const char* s);
-
-static inline int wait_on_condition(pthread_mutex_t *mutex,pthread_cond_t *cond,int *instance_cnt,char *name) {
-
-  // lock the mutex, if lock successfully, it would return the 0, the other value means failed
-  if (pthread_mutex_lock(mutex) != 0) {
-    LOG_E( PHY, "[SCHED][eNB] error locking mutex for %s\n",name);
-    exit_fun("nothing to add");
-    return(-1);
-  }
-
-  while (*instance_cnt < 0) {
-    // most of the time the thread is waiting here
-    // proc->instance_cnt_rxtx is -1
-    pthread_cond_wait(cond,mutex); // this unlocks mutex_rxtx while waiting and then locks it again
-  }
-
-  if (pthread_mutex_unlock(mutex) != 0) {
-    LOG_E(PHY,"[SCHED][eNB] error unlocking mutex for %s\n",name);
-    exit_fun("nothing to add");
-    return(-1);
-  }
-  return(0);
-}
-
-static inline int wait_on_busy_condition(pthread_mutex_t *mutex,pthread_cond_t *cond,int *instance_cnt,char *name) {
-
-  if (pthread_mutex_lock(mutex) != 0) {
-    LOG_E( PHY, "[SCHED][eNB] error locking mutex for %s\n",name);
-    exit_fun("nothing to add");
-    return(-1);
-  }
-
-  while (*instance_cnt == 0) {
-    // most of the time the thread will skip this
-    // waits only if proc->instance_cnt_rxtx is 0
-    pthread_cond_wait(cond,mutex); // this unlocks mutex_rxtx while waiting and then locks it again
-  }
-
-  if (pthread_mutex_unlock(mutex) != 0) {
-    LOG_E(PHY,"[SCHED][eNB] error unlocking mutex for %s\n",name);
-    exit_fun("nothing to add");
-    return(-1);
-  }
-  return(0);
-}
-
-static inline int release_thread(pthread_mutex_t *mutex,int *instance_cnt,char *name) {
-
-  if (pthread_mutex_lock(mutex) != 0) {
-    LOG_E( PHY, "[SCHED][eNB] error locking mutex for %s\n",name);
-    exit_fun("nothing to add");
-    return(-1);
-  }
-
-  *instance_cnt=*instance_cnt-1;
-
-  if (pthread_mutex_unlock(mutex) != 0) {
-    LOG_E( PHY, "[SCHED][eNB] error unlocking mutex for %s\n",name);
-    exit_fun("nothing to add");
-    return(-1);
-  }
-  return(0);
-}
-
-*/
-
-#include "PHY/INIT/defs_NB_IoT.h"
-#include "PHY/LTE_REFSIG/defs_NB_IoT.h"
-//#include "PHY/MODULATION/defs.h"
-//#include "PHY/LTE_TRANSPORT/proto.h"
-#include "PHY/NBIoT_TRANSPORT/proto_NB_IoT.h"
-//#include "PHY/LTE_ESTIMATION/defs.h"
-//#include "SIMULATION/ETH_TRANSPORT/defs.h"
-//#endif
-#endif //  __PHY_DEFS__H__
diff --git a/openair1/PHY/defs_common.h b/openair1/PHY/defs_common.h
index c038ee07a2782b7a75187cb10bb5654d796aa806..fe47fe05638d2b36b33eb487422858021cb13712 100644
--- a/openair1/PHY/defs_common.h
+++ b/openair1/PHY/defs_common.h
@@ -784,6 +784,28 @@ typedef struct {
   uint8_t RB_ID_NB_IoT;   // to be used
 
   uint8_t flag_free_sf;  // flag to indicate for NPDSCH and NPDCCH process if the current SF already used
+   /// Frequency index of CBMIMO1 card
+  uint8_t freq_idx;
+  /// RX Frequency for ExpressMIMO/LIME
+  uint32_t carrier_freq[4];
+  /// TX Frequency for ExpressMIMO/LIME
+  uint32_t carrier_freqtx[4];
+  /// RX gain for ExpressMIMO/LIME
+  uint32_t rxgain[4];
+  /// TX gain for ExpressMIMO/LIME
+  uint32_t txgain[4];
+  /// RF mode for ExpressMIMO/LIME
+  uint32_t rfmode[4];
+  /// RF RX DC Calibration for ExpressMIMO/LIME
+  uint32_t rxdc[4];
+  /// RF TX DC Calibration for ExpressMIMO/LIME
+  uint32_t rflocal[4];
+  /// RF VCO calibration for ExpressMIMO/LIME
+  uint32_t rfvcolocal[4];
+  /// Turns on second TX of CBMIMO1 card
+  uint8_t dual_tx;
+  /// flag to indicate SISO transmission
+  uint8_t mode1_flag;
   ///////////////////////////////////////////////////////////////////// 
 } LTE_DL_FRAME_PARMS;
 
diff --git a/openair1/PHY/extern_NB_IoT.h b/openair1/PHY/extern_NB_IoT.h
index 5466964b922b17c4cb591a33b49ae42e3976e31b..c28bf4837d2963c56cde6a017d8c2181f66810b7 100644
--- a/openair1/PHY/extern_NB_IoT.h
+++ b/openair1/PHY/extern_NB_IoT.h
@@ -34,7 +34,7 @@ extern  char fmageren_name2[512];
 extern unsigned int RX_DMA_BUFFER[4][NB_ANTENNAS_RX];
 extern unsigned int TX_DMA_BUFFER[4][NB_ANTENNAS_TX];
 */
-#include "PHY/LTE_TRANSPORT/extern_NB_IoT.h"
+#include "PHY/NBIoT_TRANSPORT/extern_NB_IoT.h"
 //#include "SIMULATION/ETH_TRANSPORT/extern.h"
 
 extern unsigned int DAQ_MBOX_NB_IoT;
diff --git a/openair2/COMMON/mac_rrc_primitives.h b/openair2/COMMON/mac_rrc_primitives.h
index 3e8a63a798f5be4636b56fb2cdd4525242bc2c35..2a337cf49602153446abc4d827df528d69e81749 100644
--- a/openair2/COMMON/mac_rrc_primitives.h
+++ b/openair2/COMMON/mac_rrc_primitives.h
@@ -29,7 +29,7 @@
 #endif
 #include "COMMON/platform_types.h"
 #include "COMMON/platform_constants.h"
-
+#include "RRC/LTE/rrc_defs.h"
 #include "LTE_RadioResourceConfigCommonSIB.h"
 #include "LTE_RadioResourceConfigDedicated.h"
 #include "LTE_MeasGapConfig.h"
diff --git a/openair2/ENB_APP/NB_IoT_config.c b/openair2/ENB_APP/NB_IoT_config.c
index 26ba8989e17ae258a29d8490c6ad0e956e5cb03b..1d9d04d72baa0ddce6072c1c5e2406f819fedd91 100755
--- a/openair2/ENB_APP/NB_IoT_config.c
+++ b/openair2/ENB_APP/NB_IoT_config.c
@@ -30,13 +30,13 @@
 #include <string.h>
 #include <inttypes.h>
 
-#include "log.h"
-#include "log_extern.h"
+#include "common/utils/LOG/log.h"
+#include "common/utils/LOG/log_extern.h"
 #include "assertions.h"
 #include "intertask_interface.h"
 #include "s1ap_eNB.h"
 #include "sctp_eNB_task.h"
-#include "SystemInformationBlockType2.h"
+#include "LTE_SystemInformationBlockType2.h"
 
 #include "PHY/phy_extern.h"
 #include "targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h"
diff --git a/openair2/ENB_APP/NB_IoT_paramdef.h b/openair2/ENB_APP/NB_IoT_paramdef.h
index 6409fe63ee56479b9cc1fca486b9d63bd77f8bda..e9f064db2bbecd33c83f14e3584697002264feed 100644
--- a/openair2/ENB_APP/NB_IoT_paramdef.h
+++ b/openair2/ENB_APP/NB_IoT_paramdef.h
@@ -31,14 +31,14 @@
  */
 
 #include "common/config/config_paramdesc.h"
-#include "SystemInformationBlockType2.h"
-#include "DL-GapConfig-NB-r13.h"
-#include "NPRACH-Parameters-NB-r13.h"
-#include "PowerRampingParameters.h"		  
-#include "BCCH-Config-NB-r13.h"
-#include "PCCH-Config-NB-r13.h"
-#include "ACK-NACK-NumRepetitions-NB-r13.h"
-#include "TDD-Config.h"
+#include "LTE_SystemInformationBlockType2.h"
+#include "LTE_DL-GapConfig-NB-r13.h"
+#include "LTE_NPRACH-Parameters-NB-r13.h"
+#include "LTE_PowerRampingParameters.h"		  
+#include "LTE_BCCH-Config-NB-r13.h"
+#include "LTE_PCCH-Config-NB-r13.h"
+#include "LTE_ACK-NACK-NumRepetitions-NB-r13.h"
+#include "LTE_TDD-Config.h"
 
 
 
diff --git a/openair2/LAYER2/MAC/defs.h b/openair2/LAYER2/MAC/defs.h
index aa349cac638c5416a203332dc3fa4a4ca9cd5fe7..43d07ef4a11cbba5aa87a8a6387073ad6329e438 100644
--- a/openair2/LAYER2/MAC/defs.h
+++ b/openair2/LAYER2/MAC/defs.h
@@ -52,23 +52,23 @@
 #include "PHY/defs.h"
 #include "PHY/LTE_TRANSPORT/defs.h"
 #include "COMMON/platform_constants.h"
-#include "BCCH-BCH-Message.h"
-#include "RadioResourceConfigCommon.h"
-#include "RadioResourceConfigDedicated.h"
-#include "MeasGapConfig.h"
-#include "SchedulingInfoList.h"
-#include "TDD-Config.h"
-#include "RACH-ConfigCommon.h"
-#include "MeasObjectToAddModList.h"
-#include "MobilityControlInfo.h"
+#include "LTE_BCCH-BCH-Message.h"
+#include "LTE_RadioResourceConfigCommon.h"
+#include "LTE_RadioResourceConfigDedicated.h"
+#include "LTE_MeasGapConfig.h"
+#include "LTE_SchedulingInfoList.h"
+#include "LTE_TDD-Config.h"
+#include "LTE_RACH-ConfigCommon.h"
+#include "LTE_MeasObjectToAddModList.h"
+#include "LTE_MobilityControlInfo.h"
 #if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0))
-#include "MBSFN-AreaInfoList-r9.h"
-#include "MBSFN-SubframeConfigList.h"
-#include "PMCH-InfoList-r9.h"
-#include "SCellToAddMod-r10.h"
+#include "LTE_MBSFN-AreaInfoList-r9.h"
+#include "LTE_MBSFN-SubframeConfigList.h"
+#include "LTE_PMCH-InfoList-r9.h"
+#include "LTE_SCellToAddMod-r10.h"
 #endif
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-#include "SystemInformationBlockType1-v1310-IEs.h"
+#include "LTE_SystemInformationBlockType1-v1310-IEs.h"
 #endif
 
 #include "nfapi_interface.h"
diff --git a/openair2/LAYER2/MAC/proto_NB_IoT.h b/openair2/LAYER2/MAC/proto_NB_IoT.h
index 7dfae3800383176b444643f199304368329acb2e..6fd21bab9243367ba20cdaf404932668ef8d33cc 100644
--- a/openair2/LAYER2/MAC/proto_NB_IoT.h
+++ b/openair2/LAYER2/MAC/proto_NB_IoT.h
@@ -34,7 +34,7 @@
 #ifndef __LAYER2_MAC_PROTO_NB_IoT_H__
 #define __LAYER2_MAC_PROTO_NB_IoT_H__
 
-#include "openair1/PHY/LTE_TRANSPORT/defs_NB_IoT.h"
+#include "openair1/PHY/NBIoT_TRANSPORT/defs_NB_IoT.h"
 #include "LAYER2/MAC/defs_NB_IoT.h"
 #include "COMMON/platform_types.h"
 #include "openair2/RRC/NBIOT/defs_NB_IoT.h"
@@ -60,12 +60,12 @@ void config_mib_fapi_NB_IoT(
         int                     dl_CarrierFreq,
         int                     ul_CarrierFreq,
         long                    *eutraControlRegionSize,
-        BCCH_BCH_Message_NB_t   *mib_NB_IoT
+        LTE_BCCH_BCH_Message_NB_t   *mib_NB_IoT
         );
 
 void config_sib2_fapi_NB_IoT(
                         int physCellId,
-                        RadioResourceConfigCommonSIB_NB_r13_t   *radioResourceConfigCommon
+                        LTE_RadioResourceConfigCommonSIB_NB_r13_t   *radioResourceConfigCommon
                         );
 
 
@@ -75,10 +75,10 @@ void rrc_mac_config_req_NB_IoT(
     int                                     CC_idP,
     int                                     rntiP,
     rrc_eNB_carrier_data_NB_IoT_t           *carrier,
-    SystemInformationBlockType1_NB_t        *sib1_NB_IoT,
-    RadioResourceConfigCommonSIB_NB_r13_t   *radioResourceConfigCommon,
-    PhysicalConfigDedicated_NB_r13_t        *physicalConfigDedicated,
-    LogicalChannelConfig_NB_r13_t           *logicalChannelConfig,            //FIXME: decide how to use it
+    LTE_SystemInformationBlockType1_NB_t        *sib1_NB_IoT,
+    LTE_RadioResourceConfigCommonSIB_NB_r13_t   *radioResourceConfigCommon,
+    LTE_PhysicalConfigDedicated_NB_r13_t        *physicalConfigDedicated,
+    LTE_LogicalChannelConfig_NB_r13_t           *logicalChannelConfig,            //FIXME: decide how to use it
     uint8_t                                 ded_flag,
     uint8_t                                 ue_list_ded_num);
 
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
index 58b053ec39fb9a2f3e15e4fee103b7694f0dadce..a89af70a27c0cd231102f7be01e5d06519262a9b 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
@@ -82,15 +82,11 @@ hash_table_t  *pdcp_coll_p = NULL;
   static int mbms_socket = -1;
 #endif
 
-ccparams_NB_IoT_t NBconfig ;
-memset((void *)&NBconfig,0,sizeof(ccparams_NB_IoT_t));
-if (NBconfig.NB_IoT_configured > 0)
-{
+
 #include "openair2/RRC/NBIOT/proto_NB_IoT.h"
-#undef maxDRB
-#define maxDRB maxDRB_NB_r13
+#undef LTE_maxDRB
+#define LTE_maxDRB LTE_maxDRB_NB_r13
 
-}
 
 /* pdcp module parameters and related functions*/
 static pdcp_params_t pdcp_params= {0,NULL};
diff --git a/openair2/LAYER2/RLC/rlc_rrc.c b/openair2/LAYER2/RLC/rlc_rrc.c
index f9b1017043a3226ae6661f665f85c3ef4a5190ad..3384ec2f4791e9ca132544b4f20962007f11c809 100644
--- a/openair2/LAYER2/RLC/rlc_rrc.c
+++ b/openair2/LAYER2/RLC/rlc_rrc.c
@@ -150,18 +150,6 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t   * const ctxt_pP
                 &srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.am,
                 rb_id, lc_id);
             }
-            /****************************************config srb1bis for NB-IoT********************************************/
-            else if(NBconfig.NB_IoT_configured > 0)
-            {
-              if (rrc_rlc_add_rlc (ctxt_pP, SRB_FLAG_YES, MBMS_FLAG_NO, 3, 3, RLC_MODE_AM) != NULL) {
-              config_req_rlc_am_asn1 (
-                ctxt_pP,
-                SRB_FLAG_YES,
-                &srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.am,
-                3, 3);
-              }
-            } 
-            /************************************************************************************************************/
             else {
               LOG_E(RLC, PROTOCOL_CTXT_FMT" ERROR IN ALLOCATING SRB %d \n",
                     PROTOCOL_CTXT_ARGS(ctxt_pP),
diff --git a/openair2/PHY_INTERFACE/nfapi_interface.h b/openair2/PHY_INTERFACE/nfapi_interface.h
index 2447f658fde4fa19b068f62c53a41dbb859ff4d0..62d8e8c58192afea2e1b26f02a7c7a91b2c1b5de 100644
--- a/openair2/PHY_INTERFACE/nfapi_interface.h
+++ b/openair2/PHY_INTERFACE/nfapi_interface.h
@@ -19,7 +19,7 @@
 #define _NFAPI_INTERFACE_H_
 
 #include "stddef.h"
-#include "ACK-NACK-NumRepetitions-NB-r13.h"
+#include "LTE_ACK-NACK-NumRepetitions-NB-r13.h"
 
 // Constants - update based on implementation
 #define NFAPI_MAX_PHY_RF_INSTANCES 2
diff --git a/openair2/RRC/NBIOT/MESSAGES/asn1_msg_NB_IoT.c b/openair2/RRC/NBIOT/MESSAGES/asn1_msg_NB_IoT.c
index 40056f3c12510546ef1045b44c03843f58f291a4..ba21d683266b901303a282a37cf0bdb3f18276cc 100644
--- a/openair2/RRC/NBIOT/MESSAGES/asn1_msg_NB_IoT.c
+++ b/openair2/RRC/NBIOT/MESSAGES/asn1_msg_NB_IoT.c
@@ -36,7 +36,7 @@
 #include <sysexits.h> /* for EX_* exit codes */
 #include <errno.h>  /* for errno */
 #else
-#include <linux/module.h>  /* Needed by all modules */
+//#include <linux/module.h>  /* Needed by all modules */
 #endif
 #ifdef USER_MODE
 //#include "RRC/NBIOT/defs.h"
diff --git a/openair2/RRC/NBIOT/proto_NB_IoT.h b/openair2/RRC/NBIOT/proto_NB_IoT.h
index 2cb16674baedbac63f6e1d1f33029496c8c4c13b..657075d23b5f46c7ad57db15ea5b81483fc74c21 100644
--- a/openair2/RRC/NBIOT/proto_NB_IoT.h
+++ b/openair2/RRC/NBIOT/proto_NB_IoT.h
@@ -167,9 +167,9 @@ int pdcp_apply_security_NB_IoT(
 //defined in pdcp.c
 boolean_t rrc_pdcp_config_asn1_req_NB_IoT (
   const protocol_ctxt_t* const  ctxt_pP,
-  SRB_ToAddModList_NB_r13_t  *const srb2add_list_pP,
-  DRB_ToAddModList_NB_r13_t  *const drb2add_list_pP,
-  DRB_ToReleaseList_NB_r13_t *const drb2release_list_pP,
+  LTE_SRB_ToAddModList_NB_r13_t  *const srb2add_list_pP,
+  LTE_DRB_ToAddModList_NB_r13_t  *const drb2add_list_pP,
+  LTE_DRB_ToReleaseList_NB_r13_t *const drb2release_list_pP,
   const uint8_t                   security_modeP,
   uint8_t                  *const kRRCenc_pP,
   uint8_t                  *const kRRCint_pP,
@@ -238,9 +238,9 @@ void rrc_data_ind_NB_IoT(
 //defined in rlc_rrc.c
 rlc_op_status_t rrc_rlc_config_asn1_req_NB_IoT (
 	const protocol_ctxt_t   * const ctxt_pP,
-    const SRB_ToAddModList_NB_r13_t   * const srb2add_listP,
-    const DRB_ToAddModList_NB_r13_t   * const drb2add_listP,
-    const DRB_ToReleaseList_NB_r13_t  * const drb2release_listP,
+    const LTE_SRB_ToAddModList_NB_r13_t   * const srb2add_listP,
+    const LTE_DRB_ToAddModList_NB_r13_t   * const drb2add_listP,
+    const LTE_DRB_ToReleaseList_NB_r13_t  * const drb2release_listP,
 	srb1bis_flag_t							srb1bis_flag
     );
 //-------------------------------------------------------------------------
@@ -485,7 +485,7 @@ rrc_eNB_generate_dedicatedRRCConnectionReconfiguration_NB_IoT(
 void rrc_eNB_process_RRCConnectionSetupComplete_NB_IoT(
   const protocol_ctxt_t* const ctxt_pP,
   rrc_eNB_ue_context_NB_IoT_t*         ue_context_pP,
-  RRCConnectionSetupComplete_NB_r13_IEs_t * rrcConnectionSetupComplete_NB
+  LTE_RRCConnectionSetupComplete_NB_r13_IEs_t * rrcConnectionSetupComplete_NB
 );
 
 void rrc_eNB_generate_SecurityModeCommand_NB_IoT(
diff --git a/openair2/RRC/NBIOT/rrc_UE.c b/openair2/RRC/NBIOT/rrc_UE.c
index dc940a076634862512dd2ecfb2adf5b798a2ce8c..773403fb50ef6ab076529bd32fec2e17cafd2b1a 100644
--- a/openair2/RRC/NBIOT/rrc_UE.c
+++ b/openair2/RRC/NBIOT/rrc_UE.c
@@ -45,23 +45,23 @@
 #ifndef CELLULAR
 #include "RRC/NBIOT/MESSAGES/asn1_msg.h"
 #endif
-#include "RRCConnectionRequest.h"
-#include "RRCConnectionReconfiguration.h"
-#include "UL-CCCH-Message.h"
-#include "DL-CCCH-Message.h"
-#include "UL-DCCH-Message.h"
-#include "DL-DCCH-Message.h"
-#include "BCCH-DL-SCH-Message.h"
-#include "PCCH-Message.h"
+#include "LTE_RRCConnectionRequest.h"
+#include "LTE_RRCConnectionReconfiguration.h"
+#include "LTE_UL-CCCH-Message.h"
+#include "LTE_DL-CCCH-Message.h"
+#include "LTE_UL-DCCH-Message.h"
+#include "LTE_DL-DCCH-Message.h"
+#include "LTE_BCCH-DL-SCH-Message.h"
+#include "LTE_PCCH-Message.h"
 #if defined(Rel10) || defined(Rel14)
-#include "MCCH-Message.h"
+#include "LTE_MCCH-Message.h"
 #endif
-#include "MeasConfig.h"
-#include "MeasGapConfig.h"
-#include "MeasObjectEUTRA.h"
-#include "TDD-Config.h"
-#include "UECapabilityEnquiry.h"
-#include "UE-CapabilityRequest.h"
+#include "LTE_MeasConfig.h"
+#include "LTE_MeasGapConfig.h"
+#include "LTE_MeasObjectEUTRA.h"
+#include "LTE_TDD-Config.h"
+#include "LTE_UECapabilityEnquiry.h"
+#include "LTE_UE-CapabilityRequest.h"
 #ifdef PHY_ABSTRACTION
 #include "OCG.h"
 #include "OCG_extern.h"
diff --git a/openair2/RRC/NBIOT/rrc_eNB.c b/openair2/RRC/NBIOT/rrc_eNB.c
index f1acd9b26615ad8dac632a107732e4426dd483a3..475be2c92606242ee840988d802c47fbb020da9a 100644
--- a/openair2/RRC/NBIOT/rrc_eNB.c
+++ b/openair2/RRC/NBIOT/rrc_eNB.c
@@ -39,11 +39,11 @@
 #include "extern_NB_IoT.h"
 #include "LAYER2/MAC/proto_NB_IoT.h"
 #include "RRC/NBIOT/MESSAGES/asn1_msg_NB_IoT.h"
-#include "RRCConnectionRequest-NB.h"
-#include "UL-CCCH-Message-NB.h"
+#include "LTE_RRCConnectionRequest-NB.h"
+#include "LTE_UL-CCCH-Message-NB.h"
 /***************************/
 //#include "DL-CCCH-Message-NB.h"
-#include "UL-DCCH-Message-NB.h"
+#include "LTE_UL-DCCH-Message-NB.h"
 //#include "DL-DCCH-Message-NB.h"
 //#include "SRB-ToAddMod-NB-r13.h"
 /***************************/
@@ -58,14 +58,14 @@
 #include "UTIL/LOG/log.h"
 #include "COMMON/mac_rrc_primitives.h"
 #include "RRC/NBIOT/MESSAGES/asn1_msg.h"
-#include "RRCConnectionRequest.h"
-#include "RRCConnectionReestablishmentRequest.h"
+#include "LTE_RRCConnectionRequest.h"
+#include "LTE_RRCConnectionReestablishmentRequest.h"
 //#include "ReestablishmentCause.h"
-#include "UL-CCCH-Message.h"
-#include "DL-CCCH-Message.h"
-#include "UL-DCCH-Message.h"
-#include "DL-DCCH-Message.h"
-#include "TDD-Config.h"
+#include "LTE_UL-CCCH-Message.h"
+#include "LTE_DL-CCCH-Message.h"
+#include "LTE_UL-DCCH-Message.h"
+#include "LTE_DL-DCCH-Message.h"
+#include "LTE_TDD-Config.h"
 #include "HandoverCommand.h"
 #include "rlc.h"
 #include "SIMULATION/ETH_TRANSPORT/extern.h"
diff --git a/openair3/TEST/EPC_TEST/generate_scenario.h b/openair3/TEST/EPC_TEST/generate_scenario.h
index b2042a894cd54b7e96ce4169373429896e538d76..4ef3e26a34451e59c85e412e4d03957b3b4bbeb7 100644
--- a/openair3/TEST/EPC_TEST/generate_scenario.h
+++ b/openair3/TEST/EPC_TEST/generate_scenario.h
@@ -38,7 +38,7 @@
 #include "platform_constants.h"
 #include "PHY/impl_defs_lte.h"
 #include "s1ap_messages_types.h"
-#include "SystemInformationBlockType2.h"
+#include "LTE_SystemInformationBlockType2.h"
 
 #define IPV4_STR_ADDR_TO_INT_NWBO(AdDr_StR,NwBo,MeSsAgE ) do {\
             struct in_addr inp;\