diff --git a/cmake_targets/lte_noS1_build_oai/CMakeLists.txt b/cmake_targets/lte_noS1_build_oai/CMakeLists.txt
index 0a6fe8ca7697d2253372851e4889f47ba6651f70..ebc39abd412476e883bb14e3f5252517ee7bdfd8 100644
--- a/cmake_targets/lte_noS1_build_oai/CMakeLists.txt
+++ b/cmake_targets/lte_noS1_build_oai/CMakeLists.txt
@@ -2,13 +2,13 @@ cmake_minimum_required(VERSION 2.8)
 set(XFORMS True)
 set(RRC_ASN1_VERSION "Rel10")
 set(ENABLE_VCD_FIFO False )
-set(RF_BOARD "EXMIMO")
+set(RF_BOARD "OAI_USRP")
 set(ENABLE_ITTI True)
 set(ENABLE_USE_MME False)
 set(PDCP_USE_NETLINK True)
 set(LINK_ENB_PDCP_TO_IP_DRIVER True)
 set(LINK_ENB_PDCP_TO_GTPV1U False)
-set(PDCP_USE_NETLINK True )
+set(PDCP_USE_NETLINK_QUEUES False)
 set(LINUX True)
 set(SECU False)
 set(NAS_UE False)
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
index bff1a7a8613032d83b14ac6ace99f4861ff18c88..7c6254090f20836654ee67bdec7998788dde1328 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
@@ -39,9 +39,7 @@
 #include "SCHED/extern.h"
 #include "MAC_INTERFACE/defs.h"
 #include "MAC_INTERFACE/extern.h"
-#ifdef USER_MODE
 #include <math.h>
-#endif
 
 #ifdef OPENAIR2
 #include "LAYER2/MAC/defs.h"
@@ -296,12 +294,10 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms )   // LTE_UE_COMMON *com
 
 
 
-#ifdef USER_MODE
 #ifdef DEBUG_PHY
   write_output("primary_sync0.m","psync0",primary_synch0_time,frame_parms->ofdm_symbol_size,1,1);
   write_output("primary_sync1.m","psync1",primary_synch1_time,frame_parms->ofdm_symbol_size,1,1);
   write_output("primary_sync2.m","psync2",primary_synch2_time,frame_parms->ofdm_symbol_size,1,1);
-#endif
 #endif
   return (1);
 }
@@ -310,7 +306,6 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms )   // LTE_UE_COMMON *com
 void lte_sync_time_free(void)
 {
 
-#ifdef USER_MODE
 
   if (sync_corr_ue0) {
     msg("Freeing sync_corr_ue (%p)...\n",sync_corr_ue0);
@@ -342,7 +337,6 @@ void lte_sync_time_free(void)
     free(primary_synch2_time);
   }
 
-#endif
   sync_corr_ue0 = NULL;
   sync_corr_ue1 = NULL;
   sync_corr_ue2 = NULL;
@@ -502,7 +496,7 @@ int lte_sync_time(int **rxdata, ///rx data in time domain
       sync_source,peak_pos,peak_val);
 
 
-#ifdef USER_MODE
+
 
   if (debug_cnt == 0) {
     write_output("sync_corr0_ue.m","synccorr0",sync_corr_ue0,2*length,1,2);
@@ -514,7 +508,7 @@ int lte_sync_time(int **rxdata, ///rx data in time domain
     debug_cnt++;
   }
 
-#endif
+
 #endif
 
 
@@ -574,11 +568,8 @@ int lte_sync_time_eNB(int32_t **rxdata, ///rx data in time domain
 
       //calculate dot product of primary_synch0_time and rxdata[ar][n] (ar=0..nb_ant_rx) and store the sum in temp[n];
       for (ar=0; ar<frame_parms->nb_antennas_rx; ar++)  {
-        //#ifndef USER_MODE
+
         result = dot_product((short*)primary_synch_time, (short*) &(rxdata[ar][n]), frame_parms->ofdm_symbol_size, 15);
-        //#else
-        //        result = dot_product((short*)primary_synch_time, (short*) &(rxdata[ar][n]), frame_parms->ofdm_symbol_size+frame_parms->nb_prefix_samples, 12);
-        //#endif
         //((short*)sync_corr)[2*n]   += ((short*) &result)[0];
         //((short*)sync_corr)[2*n+1] += ((short*) &result)[1];
         sync_corr_eNB[n] += abs32(result);
diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
index 60f56f3b556fba24eabae8714814ec789e55aad4..24d1516bd555edfc3a08b94f9e7b5008a2b0e258 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
@@ -3714,10 +3714,10 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
       }*/
 
     if ((rnti==si_rnti) || (rnti==p_rnti) || (rnti==ra_rnti)) { //
-      if (dlsch0_harq->round == 4) {
+      //      if ((dlsch0_harq->round == 4) || ( {
         dlsch0_harq->round = 0;
         dlsch0_harq->first_tx = 1;
-      }
+	//      }
 
       //  if (dlsch0_harq->round == 0)
       //      ndi = 1-dlsch0_harq->DCINdi;
@@ -3731,8 +3731,15 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
     dlsch0_harq->mimo_mode = frame_parms->mode1_flag == 1 ?SISO : ALAMOUTI;
     dlsch0_harq->dl_power_off = 1; //no power offset
 
-    //LOG_I(PHY,"UE (%x/%d): Subframe %d Format1A DCI: ndi %d, old_ndi %d (first tx %d) harq_status %d\n",dlsch[0]->rnti,harq_pid,subframe,ndi,dlsch0_harq->DCINdi,
-    //dlsch0_harq->first_tx,dlsch0_harq->status);
+    LOG_D(PHY,"UE (%x/%d): Subframe %d Format1A DCI: ndi %d, old_ndi %d (first tx %d) harq_status %d, round %d\n",
+	  dlsch[0]->rnti,
+	  harq_pid,
+	  subframe,
+	  ndi,
+	  dlsch0_harq->DCINdi,
+	  dlsch0_harq->first_tx,
+	  dlsch0_harq->status,
+	  dlsch0_harq->round);
     if ((ndi!=dlsch0_harq->DCINdi)||  // DCI has been toggled or this is the first transmission
         (dlsch0_harq->first_tx==1)) {
       dlsch0_harq->round = 0;
@@ -3746,7 +3753,14 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
     dlsch0_harq->DCINdi = ndi;
 
     dlsch0_harq->mcs = mcs;
-    dlsch0_harq->TBS = TBStable[get_I_TBS(mcs)][NPRB-1];
+    if ((rnti==si_rnti) || (rnti==p_rnti) || (rnti==ra_rnti)) {
+      dlsch0_harq->TBS = TBStable[mcs][NPRB-1];
+      dlsch0_harq->Qm  = 2;
+    }
+    else {
+      dlsch0_harq->TBS = TBStable[get_I_TBS(mcs)][NPRB-1];
+      dlsch0_harq->Qm  = get_Qm(mcs);
+    }
     dlsch[0]->rnti = rnti;
     dlsch0 = dlsch[0];
     //printf("Format 1A: harq_pid %d, nb_rb %d, round %d\n",harq_pid,dlsch0_harq->nb_rb,dlsch0_harq->round);
@@ -3898,6 +3912,12 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
     dlsch0_harq->mcs         = mcs;
 
     dlsch0_harq->TBS         = TBStable[get_I_TBS(mcs)][NPRB-1];
+    if (mcs <= 28)
+      dlsch0_harq->Qm          = get_Qm(mcs);
+    else if (mcs<=31)
+      dlsch0_harq->Qm          = (mcs-28)<<1;
+    else
+      LOG_E(PHY,"invalid mcs %d\n",mcs);
     //    msg("test: MCS %d, NPRB %d, TBS %d\n",mcs,NPRB,dlsch0_harq->TBS);
     dlsch[0]->current_harq_pid = harq_pid;
 
@@ -4238,9 +4258,17 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
 
     if (dlsch0_harq->nb_rb>1) {
       dlsch0_harq->TBS         = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1];
+      if (mcs1 <= 28)
+	dlsch0_harq->Qm          = get_Qm(mcs1);
+      else if (mcs1<=31)
+	dlsch0_harq->Qm          = (mcs1-28)<<1;
+      else
+	LOG_E(PHY,"invalid mcs1 %d\n",mcs1);
+
     } else
       dlsch0_harq->TBS         =0;
 
+
     /*
       if (dlsch0_harq->mcs > 18)
       printf("mcs %d, TBS %d\n",dlsch0_harq->mcs,dlsch0_harq->TBS);
@@ -4256,9 +4284,16 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
 
     if (dlsch1_harq->nb_rb>1) {
       dlsch1_harq->TBS       = TBStable[dlsch1_harq->mcs][dlsch1_harq->nb_rb-1];
+      if (mcs2 <= 28)
+	dlsch1_harq->Qm          = get_Qm(mcs2);
+      else if (mcs1<=31)
+	dlsch1_harq->Qm          = (mcs2-28)<<1;
+      else
+      LOG_E(PHY,"invalid mcs2 %d\n",mcs2);
     } else
       dlsch1_harq->TBS         = 0;
 
+
     dlsch0->rnti = rnti;
     dlsch1->rnti = rnti;
 
@@ -4626,6 +4661,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
       dlsch0_harq->TBS         = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1];
       dlsch1_harq->TBS         = TBStable[get_I_TBS(dlsch1_harq->mcs)][dlsch0_harq->nb_rb-1];
 
+
+      
       if ((dlsch0->active==1) && (dlsch1->active==1)) {
         dlsch0_harq->mimo_mode = LARGE_CDD;
         dlsch1_harq->mimo_mode = LARGE_CDD;
@@ -4644,7 +4681,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
           dlsch0_harq->dl_power_off = 0; //apply power offset
           dlsch1_harq->dl_power_off = 0; //apply power offset
           dlsch0_harq->TBS         = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1];
-          dlsch0_harq->TBS         = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1];
+          dlsch1_harq->TBS         = TBStable[get_I_TBS(dlsch1_harq->mcs)][dlsch1_harq->nb_rb-1];
+
           break;
 
         case 1: // one-layers on TB 0, two on TB 1
@@ -4721,6 +4759,20 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
       LOG_E(PHY,"Illegal number of antennas for eNB %d\n",frame_parms->nb_antennas_tx_eNB);
     }
 
+    if (mcs1 <= 28)
+      dlsch0_harq->Qm          = get_Qm(mcs1);
+    else if (mcs1<=31)
+      dlsch0_harq->Qm          = (mcs1-28)<<1;
+    else
+      LOG_E(PHY,"invalid mcs1 %d\n",mcs1);
+    
+    if (mcs2 <= 28)
+      dlsch1_harq->Qm          = get_Qm(mcs2);
+    else if (mcs2<=31)
+      dlsch1_harq->Qm          = (mcs2-28)<<1;
+    else
+      LOG_E(PHY,"invalid mcs2 %d\n",mcs2);
+    
     //    printf("Format 2A: NPRB=%d (rballoc %x,mcs1 %d, mcs2 %d, frame_type %d N_RB_DL %d,active %d/%d)\n",NPRB,rballoc,mcs1,mcs2,frame_parms->frame_type,frame_parms->N_RB_DL,dlsch0->active,dlsch1->active);
     //printf("UE (%x/%d): Subframe %d Format2A DCI: ndi1 %d, old_ndi1 %d, ndi2 %d, old_ndi2 %d (first tx1 %d, first tx2 %d) harq_status1 %d, harq_status2 %d\n",dlsch0->rnti,harq_pid,subframe,ndi,dlsch0_harq->DCINdi,
     //    dlsch0_harq->first_tx,dlsch1_harq->first_tx,dlsch0_harq->status,dlsch1_harq->status);
diff --git a/openair1/PHY/LTE_TRANSPORT/defs.h b/openair1/PHY/LTE_TRANSPORT/defs.h
index 444a2b12621eb67f29cf4768a3563ee7fc3a7166..8a527e2d7a45cba86c9d780e2f032c582662ec12 100644
--- a/openair1/PHY/LTE_TRANSPORT/defs.h
+++ b/openair1/PHY/LTE_TRANSPORT/defs.h
@@ -515,6 +515,8 @@ typedef struct {
   uint8_t round;
   /// MCS format for this DLSCH
   uint8_t mcs;
+  /// Qm (modulation order) for this DLSCH
+  uint8_t Qm;
   /// Redundancy-version of the current sub-frame
   uint8_t rvidx;
   /// MIMO mode for this DLSCH
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
index 833426685584d169e52f551b441109cafd5ea703..549464b2cf236534ad2f0edd3b7f2f70ab0937f3 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
@@ -244,8 +244,6 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
   */
   A = harq_process->TBS; //2072 for QPSK 1/3
 
-  //  mod_order = get_Qm(harq_process->mcs);
-
   ret = dlsch->max_turbo_iterations;
 
 
@@ -278,8 +276,33 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
   err_flag = 0;
   r_offset = 0;
 
+  unsigned char bw_scaling =1;
+
+  switch (frame_parms->N_RB_DL) {
+  case 6:
+    bw_scaling =16;
+    break;
+
+  case 25:
+    bw_scaling =4;
+    break;
+
+  case 50:
+    bw_scaling =2;
+    break;
+
+  default:
+    bw_scaling =1;
+    break;
+  }
+
+  if (harq_process->C >= MAX_NUM_DLSCH_SEGMENTS/bw_scaling) {
+    LOG_E(PHY,"Illegal harq_process->C %d > %d\n",harq_process->C,MAX_NUM_DLSCH_SEGMENTS/bw_scaling);
+    return((1+dlsch->max_turbo_iterations));
+  }
   for (r=0; r<harq_process->C; r++) {
 
+    
     // Get Turbo interleaver parameters
     if (r<harq_process->Cminus)
       Kr = harq_process->Kminus;
@@ -316,7 +339,7 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
           harq_pid,r, G,
           Kr*3,
           harq_process->TBS,
-          get_Qm(harq_process->mcs),
+          harq_process->Qm,
           harq_process->nb_rb,
           harq_process->Nl,
           harq_process->rvidx,
@@ -335,7 +358,7 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
                                    dlsch->Kmimo,
                                    harq_process->rvidx,
                                    (harq_process->round==0)?1:0,
-                                   get_Qm(harq_process->mcs),
+                                   harq_process->Qm,
                                    harq_process->Nl,
                                    r,
                                    &E)==-1) {
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
index cce09acd41d9fbf03a9c9342798c09a3dc99a831..276f34ce7dd5d262b1441208b370bfd3afa00f53 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
@@ -325,7 +325,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
                                frame_parms,
                                symbol,
                                first_symbol_flag,
-                               get_Qm(dlsch0_harq->mcs),
+                               dlsch0_harq->Qm,
                                nb_rb,
                                lte_ue_pdsch_vars[eNB_id]->log2_maxh,
                                phy_measurements); // log2_maxh+I0_shift
@@ -380,7 +380,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
                                 avg, symbol, nb_rb);
 
         //  LOG_D(PHY,"llr_offset = %d\n",offset_mumimo_llr_drange[dlsch0_harq->mcs][(dlsch1_harq->mcs>>1)-1]);
-        avg[0] = log2_approx(avg[0]) - 13 + offset_mumimo_llr_drange[dlsch0_harq->mcs][(get_Qm(dlsch1_harq->mcs)>>1)-1];
+        avg[0] = log2_approx(avg[0]) - 13 + offset_mumimo_llr_drange[dlsch0_harq->mcs][(dlsch1_harq->Qm>>1)-1];
 
         lte_ue_pdsch_vars[eNB_id]->log2_maxh = cmax(avg[0],0);
         //  printf("log2_maxh =%d\n",lte_ue_pdsch_vars[eNB_id]->log2_maxh);
@@ -391,8 +391,8 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
                                      phy_measurements,
                                      eNB_id,
                                      symbol,
-                                     get_Qm(dlsch0_harq->mcs),
-                                     get_Qm(dlsch1_harq->mcs),
+                                     dlsch0_harq->Qm,
+                                     dlsch1_harq->Qm,
                                      dlsch0_harq->round,
                                      nb_rb,
                                      lte_ue_pdsch_vars[eNB_id]->log2_maxh);
@@ -451,7 +451,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
                                       phy_measurements,
                                       eNB_id,
                                       symbol,
-                                      get_Qm(dlsch0_harq->mcs),
+                                      dlsch0_harq->Qm,
                                       nb_rb,
                                       lte_ue_pdsch_vars[eNB_id]->log2_maxh,
                                       dlsch0_harq->dl_power_off);
@@ -526,7 +526,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
                                       phy_measurements,
                                       eNB_id,
                                       symbol,
-                                      get_Qm(dlsch0_harq->mcs),
+                                      dlsch0_harq->Qm,
                                       nb_rb,
                                       lte_ue_pdsch_vars[eNB_id]->log2_maxh,
                                       1);
@@ -599,7 +599,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
 
   //    printf("LLR");
 
-  switch (get_Qm(dlsch0_harq->mcs)) {
+  switch (dlsch0_harq->Qm) {
   case 2 :
     if (dlsch0_harq->mimo_mode != LARGE_CDD) {
       if (dual_stream_flag == 0)
@@ -643,7 +643,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
     } else { // TM3
       DevAssert(dlsch1_harq);
 
-      if (get_Qm(dlsch1_harq->mcs) == 2) {
+      if (dlsch1_harq->Qm == 2) {
         /*  dlsch_qpsk_llr(frame_parms,
 	    lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
 	    lte_ue_pdsch_vars[eNB_id]->llr[0],
@@ -667,7 +667,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
                             symbol,first_symbol_flag,nb_rb,
                             adjust_G2(frame_parms,dlsch1_harq->rb_alloc,2,subframe,symbol),
                             lte_ue_pdsch_vars[eNB_id]->llr128_2ndstream);
-      } else if (get_Qm(dlsch1_harq->mcs) == 4) {
+      } else if (dlsch1_harq->Qm == 4) {
         dlsch_qpsk_16qam_llr(frame_parms,
                              lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
                              lte_ue_pdsch_vars[eNB_id]->rxdataF_comp1[dlsch0_harq->round],
diff --git a/openair1/PHY/LTE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_TRANSPORT/initial_sync.c
index 547b73d79fcc98f551d09dc42a7ad6d2b4936091..1ea14be6f7a22c060308837d04ac2a1db63f4102 100644
--- a/openair1/PHY/LTE_TRANSPORT/initial_sync.c
+++ b/openair1/PHY/LTE_TRANSPORT/initial_sync.c
@@ -52,7 +52,7 @@
 #include "common_lib.h"
 extern openair0_config_t openair0_cfg[];
 #endif
-//#define DEBUG_INITIAL_SYNCH
+#define DEBUG_INITIAL_SYNCH
 
 int pbch_detection(PHY_VARS_UE *phy_vars_ue, runmode_t mode) 
 {
@@ -292,6 +292,8 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
   frame_parms->frame_type=FDD;
   init_frame_parms(frame_parms,1);
 
+  //  write_output("rxdata0.m","rxd0",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
+
 #ifdef OAI_USRP
   for (aarx = 0; aarx<frame_parms->nb_antennas_rx;aarx++) {
     rxdata128 = (__m128i*)phy_vars_ue->lte_ue_common_vars.rxdata[aarx];
@@ -304,6 +306,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
                            frame_parms,
                            (int *)&phy_vars_ue->lte_ue_common_vars.eNb_id);
 
+  //  write_output("rxdata1.m","rxd1",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
   if (sync_pos >= frame_parms->nb_prefix_samples)
     sync_pos2 = sync_pos - frame_parms->nb_prefix_samples;
   else
@@ -361,6 +364,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
     init_frame_parms(&phy_vars_ue->lte_frame_parms,1);
     lte_gold(frame_parms,phy_vars_ue->lte_gold_table[0],frame_parms->Nid_cell);
     ret = pbch_detection(phy_vars_ue,mode);
+    //   write_output("rxdata2.m","rxd2",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
 
 #ifdef DEBUG_INITIAL_SYNCH
     LOG_I(PHY,"FDD Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
@@ -407,7 +411,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
       init_frame_parms(&phy_vars_ue->lte_frame_parms,1);
       lte_gold(frame_parms,phy_vars_ue->lte_gold_table[0],frame_parms->Nid_cell);
       ret = pbch_detection(phy_vars_ue,mode);
-
+      //     write_output("rxdata3.m","rxd3",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
 #ifdef DEBUG_INITIAL_SYNCH
       LOG_I(PHY,"FDD Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
             frame_parms->Nid_cell,metric_fdd_ecp,phase_fdd_ecp,flip_fdd_ecp,ret);
@@ -454,7 +458,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
 
       lte_gold(frame_parms,phy_vars_ue->lte_gold_table[0],frame_parms->Nid_cell);
       ret = pbch_detection(phy_vars_ue,mode);
-
+      //      write_output("rxdata4.m","rxd4",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
 
 #ifdef DEBUG_INITIAL_SYNCH
       LOG_I(PHY,"TDD Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
@@ -501,6 +505,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
         lte_gold(frame_parms,phy_vars_ue->lte_gold_table[0],frame_parms->Nid_cell);
         ret = pbch_detection(phy_vars_ue,mode);
 
+	//	write_output("rxdata5.m","rxd5",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
 #ifdef DEBUG_INITIAL_SYNCH
         LOG_I(PHY,"TDD Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
               frame_parms->Nid_cell,metric_tdd_ecp,phase_tdd_ecp,flip_tdd_ecp,ret);
@@ -590,6 +595,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
 
   }
 
+  //  exit_fun("debug exit");
   return ret;
 }
 
diff --git a/openair1/PHY/MODULATION/slot_fep.c b/openair1/PHY/MODULATION/slot_fep.c
index c591c7b5288cb8da99222a94608a015fe71ddfd9..d97401903d5457c9866b7f59d973884effef1652 100644
--- a/openair1/PHY/MODULATION/slot_fep.c
+++ b/openair1/PHY/MODULATION/slot_fep.c
@@ -33,23 +33,6 @@
 
 #define SOFFSET 0
 
-void rescale(int16_t *input,int length)
-{
-#if defined(__x86_64__) || defined(__i386__)
-  __m128i *input128 = (__m128i *)input;
-#elif defined(__arm__)
-  int16x8_t *input128 = (int16x8_t *)input;
-#endif
-  int i;
-
-  for (i=0; i<length>>2; i++) {
-#if defined(__x86_64__) || defined(__i386__)
-    input128[i] = _mm_srai_epi16(input128[i],4);
-#elif defined(__arm__)
-    input128[i] = vshrq_n_s16(input128[i],4);
-#endif
-  }
-}
 
 int slot_fep(PHY_VARS_UE *phy_vars_ue,
              unsigned char l,
@@ -148,18 +131,11 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
         memcpy((void *)tmp_dft_in,
                (void *)&ue_common_vars->rxdata[aa][(rx_offset-nb_prefix_samples0) % frame_length_samples],
                frame_parms->ofdm_symbol_size*sizeof(int));
-#ifdef OAI_USRP
-        rescale((int16_t *)tmp_dft_in,
-                frame_parms->ofdm_symbol_size);
-#endif
         dft((int16_t *)tmp_dft_in,
             (int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
       } else { // use dft input from RX buffer directly
         start_meas(&phy_vars_ue->rx_dft_stats);
-#ifdef OAI_USRP
-        rescale((int16_t *)&ue_common_vars->rxdata[aa][(rx_offset-nb_prefix_samples0) % frame_length_samples],
-                frame_parms->ofdm_symbol_size+nb_prefix_samples0);
-#endif
+
         dft((int16_t *)&ue_common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
             (int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
         stop_meas(&phy_vars_ue->rx_dft_stats);
@@ -186,17 +162,10 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
         memcpy((void *)tmp_dft_in,
                (void *)&ue_common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
                frame_parms->ofdm_symbol_size*sizeof(int));
-#ifdef OAI_USRP
-        rescale((int16_t *)tmp_dft_in,
-                frame_parms->ofdm_symbol_size);
-#endif
         dft((int16_t *)tmp_dft_in,
             (int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
       } else { // use dft input from RX buffer directly
-#ifdef OAI_USRP
-        rescale((int16_t *)&ue_common_vars->rxdata[aa][(rx_offset-nb_prefix_samples) % frame_length_samples],
-                frame_parms->ofdm_symbol_size+nb_prefix_samples);
-#endif
+
         dft((int16_t *)&ue_common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
             (int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
       }
diff --git a/openair1/SCHED/defs.h b/openair1/SCHED/defs.h
index 3f0da65030f49988f297b7ef9f974f9a8174cb87..016a52104be4ce433353a1747a9d2c85cce93947 100644
--- a/openair1/SCHED/defs.h
+++ b/openair1/SCHED/defs.h
@@ -114,7 +114,7 @@ typedef struct {
   int32_t    freq_offset;
   uint32_t   tx_rx_switch_point;
   uint32_t   manual_timing_advance;  /// 1 to override automatic timing advance
-  uint32_t   timing_advance;
+  int32_t   timing_advance;
   uint32_t   dual_tx;                /// 1 for dual-antenna TX, 0 for single-antenna TX
   uint32_t   tdd;                    /// 1 for TDD mode, 0 for FDD mode
   uint32_t   rx_rf_mode;
diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c
index 3db2bf62a426848f8c47b97eb09c970b403a9e56..3a2b6aa4b992e70b69e8d499a8e1860ec473d6ab 100755
--- a/openair1/SCHED/phy_procedures_lte_ue.c
+++ b/openair1/SCHED/phy_procedures_lte_ue.c
@@ -135,7 +135,7 @@ void dump_dlsch(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe,uint8_t
   coded_bits_per_codeword = get_G(&phy_vars_ue->lte_frame_parms,
                                   phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->nb_rb,
                                   phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc,
-                                  get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs),
+                                  phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Qm,
                                   phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Nl,
                                   phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
                                   phy_vars_ue->frame_rx,subframe);
@@ -164,7 +164,7 @@ void dump_dlsch_SI(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe)
   coded_bits_per_codeword = get_G(&phy_vars_ue->lte_frame_parms,
                                   phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->nb_rb,
                                   phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc,
-                                  get_Qm(phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs),
+                                  2,
                                   1,
                                   phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
                                   phy_vars_ue->frame_rx,subframe);
@@ -265,7 +265,7 @@ void dump_dlsch_ra(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe)
   coded_bits_per_codeword = get_G(&phy_vars_ue->lte_frame_parms,
                                   phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->nb_rb,
                                   phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->rb_alloc,
-                                  get_Qm(phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->mcs),
+                                  2,
                                   1,
                                   phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
                                   phy_vars_ue->frame_rx,subframe);
@@ -985,7 +985,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
 #else
           tx_amp = AMP;
 #endif
-          LOG_I(PHY,"[UE  %d][PUSCH %d] Frame %d subframe %d, generating PUSCH, Po_PUSCH: %d dBm, amp %d\n",
+          LOG_D(PHY,"[UE  %d][PUSCH %d] Frame %d subframe %d, generating PUSCH, Po_PUSCH: %d dBm, amp %d\n",
                 Mod_id,harq_pid,frame_tx,subframe_tx,phy_vars_ue->tx_power_dBm, tx_amp);
           start_meas(&phy_vars_ue->ulsch_modulation_stats);
           ulsch_modulation(phy_vars_ue->lte_ue_common_vars.txdataF,
@@ -1246,14 +1246,15 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
 #else //this is the normal case
         ulsch_start = (frame_parms->samples_per_tti*subframe_tx)-phy_vars_ue->N_TA_offset; //-phy_vars_ue->timing_advance;
 #endif //else EXMIMO
-        LOG_D(PHY,"[UE %d] Frame %d, subframe %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d\n",
-	      Mod_id,frame_tx,subframe_tx,
-	      ulsch_start,
-              phy_vars_ue->rx_offset,
-              openair_daq_vars.timing_advance,
-              phy_vars_ue->timing_advance,
-              phy_vars_ue->N_TA_offset);
-
+	if ((frame_tx%100) == 0)
+	  LOG_D(PHY,"[UE %d] Frame %d, subframe %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d\n",
+		Mod_id,frame_tx,subframe_tx,
+		ulsch_start,
+		phy_vars_ue->rx_offset,
+		openair_daq_vars.timing_advance,
+		phy_vars_ue->timing_advance,
+		phy_vars_ue->N_TA_offset);
+ 
 
         if (generate_ul_signal == 1 ) {
 
@@ -1379,7 +1380,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
 #endif
 
           if (abstraction_flag == 0) {
-            LOG_I(PHY,"[UE  %d][RAPROC] Frame %d, Subframe %d : Generating PRACH, preamble %d, TARGET_RECEIVED_POWER %d dBm, PRACH TDD Resource index %d, RA-RNTI %d\n",
+            LOG_D(PHY,"[UE  %d][RAPROC] Frame %d, Subframe %d : Generating PRACH, preamble %d, TARGET_RECEIVED_POWER %d dBm, PRACH TDD Resource index %d, RA-RNTI %d\n",
                   Mod_id,
                   frame_tx,
                   subframe_tx,
@@ -1410,7 +1411,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
             phy_vars_ue->lte_ue_prach_vars[eNB_id]->amp = AMP;
 #endif
 	    if ((mode == calib_prach_tx) && (((phy_vars_ue->frame_tx&0xfffe)%100)==0))
-	      LOG_I(PHY,"[UE  %d][RAPROC] Frame %d, Subframe %d : PRACH TX power %d dBm, amp %d\n",Mod_id,phy_vars_ue->frame_rx,phy_vars_ue->slot_tx>>1,phy_vars_ue->tx_power_dBm,
+	      LOG_D(PHY,"[UE  %d][RAPROC] Frame %d, Subframe %d : PRACH TX power %d dBm, amp %d\n",Mod_id,phy_vars_ue->frame_rx,phy_vars_ue->slot_tx>>1,phy_vars_ue->tx_power_dBm,
 		    phy_vars_ue->lte_ue_prach_vars[eNB_id]->amp);
 
 
@@ -2473,15 +2474,16 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
   }
 
   //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-  LOG_D(PHY,"[UE %d] *********** dlsch->active in subframe %d (%d)=> %d\n",phy_vars_ue->Mod_id,subframe_rx,slot_rx,phy_vars_ue->dlsch_ue[eNB_id][0]->active);
-
   // This is normal processing (i.e. not MBSFN)
   // RX processing of symbols in slot_rx
+
+  
+
   for (l=0; l<n_symb; l++) {
     if (abstraction_flag == 0) {
       start_meas(&phy_vars_ue->ofdm_demod_stats);
       VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
+
       slot_fep(phy_vars_ue,
                l,
                slot_rx,
@@ -2576,7 +2578,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
             (openair_daq_vars.use_ia_receiver ==1)) {
           dual_stream_UE = 1;
           eNB_id_i = phy_vars_ue->n_connected_eNB;
-          i_mod = get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs);
+          i_mod = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Qm;
 
           if (frame_rx%100==0) {
             LOG_I(PHY,"using IA receiver\n");
@@ -2624,7 +2626,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
             phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->G = get_G(&phy_vars_ue->lte_frame_parms,
                 phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->nb_rb,
                 phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc,
-                get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs),
+                phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Qm,
                 phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Nl,
                 phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
                 frame_rx,subframe_prev);
@@ -2782,7 +2784,8 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
               get_G(&phy_vars_ue->lte_frame_parms,
                     phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->nb_rb,
                     phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc,
-                    get_Qm(phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs),1,
+                    2,
+		    1,
                     phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
                     frame_rx,subframe_prev);
 
@@ -2835,7 +2838,17 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
           if (ret == (1+phy_vars_ue->dlsch_ue_SI[eNB_id]->max_turbo_iterations)) {
             phy_vars_ue->dlsch_SI_errors[eNB_id]++;
 #ifdef DEBUG_PHY_PROC
-            LOG_D(PHY,"[UE  %d] Frame %d, subframe %d, received SI in error\n",phy_vars_ue->Mod_id,frame_rx,subframe_prev);
+            LOG_D(PHY,"[UE  %d] Frame %d, subframe %d, received SI in error (TBS %d, mcs %d, rvidx %d, rballoc %X.%X.%X.%X\n",
+		  phy_vars_ue->Mod_id,
+		  frame_rx,
+		  subframe_prev,
+		  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->TBS,
+                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs,
+                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rvidx,
+		  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc[0],
+                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc[1],
+		  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc[2],
+                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc[3]);
 #endif
 
             //dump_dlsch_SI(phy_vars_ue,eNB_id,subframe_prev);
@@ -2847,9 +2860,15 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
 
 #ifdef DEBUG_PHY_PROC
             //if ((frame_rx % 100) == 0)
-            LOG_D(PHY,"[UE  %d] Frame %d, subframe %d, received SI for TBS %d, mcs %d\n",
-                  phy_vars_ue->Mod_id,frame_rx,subframe_prev,phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->TBS,
-                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs);
+            LOG_D(PHY,"[UE  %d] Frame %d, subframe %d, received SI for TBS %d, mcs %d, rvidx %d, rballoc %X.%X.%X.%X\n",
+                  phy_vars_ue->Mod_id,frame_rx,subframe_prev,
+		  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->TBS,
+                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs,
+                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rvidx,
+		  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc[0],
+                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc[1],
+		  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc[2],
+                  phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc[3]);
 #endif
 
 #ifdef OPENAIR2
@@ -2923,10 +2942,11 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
 
         if (abstraction_flag==0) {
           phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->G = get_G(&phy_vars_ue->lte_frame_parms,
-              phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->nb_rb,
-              phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->rb_alloc,
-              get_Qm(phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->mcs),1,
-              phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
+									 phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->nb_rb,
+									 phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->rb_alloc,
+									 2,
+									 1,
+									 phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
               frame_rx,
               subframe_prev);
 
@@ -2950,7 +2970,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
                                phy_vars_ue->dlsch_ue_ra[eNB_id],
                                phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0],
                                subframe_prev,  // subframe
-                               harq_pid,
+			       phy_vars_ue->dlsch_ue_ra[eNB_id]->current_harq_pid,
                                0,0);
         }
 
@@ -3104,7 +3124,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
                 (openair_daq_vars.use_ia_receiver ==1)) {
               dual_stream_UE = 1;
               eNB_id_i = phy_vars_ue->n_connected_eNB;
-              i_mod =  get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs);
+              i_mod =  phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Qm;
             } else {
               dual_stream_UE = 0;
               eNB_id_i = eNB_id+1;
@@ -3173,7 +3193,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
                 (openair_daq_vars.use_ia_receiver ==1)) {
               dual_stream_UE = 1;
               eNB_id_i = phy_vars_ue->n_connected_eNB;
-              i_mod = get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs);
+              i_mod = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Qm;
             } else {
               dual_stream_UE = 0;
               eNB_id_i = eNB_id+1;
@@ -3301,7 +3321,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
           phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->G = get_G(&phy_vars_ue->lte_frame_parms,
               phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->nb_rb,
               phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->rb_alloc,
-              get_Qm(phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->mcs),
+              phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->Qm,
               1,
               2,
               (subframe_rx==9?-1:0)+frame_rx,subframe_rx);
diff --git a/openair1/SCHED/pusch_pc.c b/openair1/SCHED/pusch_pc.c
index 0d7a99b8d25d8000afea013aafcbd8262b27d0ae..e36d887ceb1c38c544573c8655752172a2e94674 100644
--- a/openair1/SCHED/pusch_pc.c
+++ b/openair1/SCHED/pusch_pc.c
@@ -163,7 +163,7 @@ void pusch_power_cntl(PHY_VARS_UE *phy_vars_ue,uint8_t subframe,uint8_t eNB_id,u
 
     phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH += (mac_xface->get_Po_NOMINAL_PUSCH(phy_vars_ue->Mod_id,0) + PL);
 
-    LOG_I(PHY,"[UE  %d][RAPROC] frame %d, subframe %d: Msg3 Po_PUSCH %d dBm (%d,%d,100*PL=%d,%d,%d)\n",
+    LOG_D(PHY,"[UE  %d][RAPROC] frame %d, subframe %d: Msg3 Po_PUSCH %d dBm (%d,%d,100*PL=%d,%d,%d)\n",
           phy_vars_ue->Mod_id,phy_vars_ue->frame_tx,subframe,phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH,
           100*mac_xface->get_Po_NOMINAL_PUSCH(phy_vars_ue->Mod_id,0),
           hundred_times_log10_NPRB[nb_rb-1],
@@ -182,7 +182,7 @@ void pusch_power_cntl(PHY_VARS_UE *phy_vars_ue,uint8_t subframe,uint8_t eNB_id,u
     else if (phy_vars_ue->ulsch_ue[eNB_id]->PHR > 40)
       phy_vars_ue->ulsch_ue[eNB_id]->PHR = 40;
 
-    LOG_I(PHY,"[UE  %d][PUSCH %d] frame %d, subframe %d: Po_PUSCH %d dBm : tx power %d, Po_NOMINAL_PUSCH %d,log10(NPRB) %f,PHR %d, PL %d, alpha*PL %f,delta_IF %f,f_pusch %d\n",
+    LOG_D(PHY,"[UE  %d][PUSCH %d] frame %d, subframe %d: Po_PUSCH %d dBm : tx power %d, Po_NOMINAL_PUSCH %d,log10(NPRB) %f,PHR %d, PL %d, alpha*PL %f,delta_IF %f,f_pusch %d\n",
           phy_vars_ue->Mod_id,harq_pid,phy_vars_ue->frame_tx,subframe,
           phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH,
           phy_vars_ue->tx_power_max_dBm,
diff --git a/openair2/LAYER2/MAC/ra_procedures.c b/openair2/LAYER2/MAC/ra_procedures.c
index 6c3e96e444ae2b82424b9212a96771e3a65ae5d0..086d4dd3c9a669b213ec318d0ec1b242f7dc6d57 100644
--- a/openair2/LAYER2/MAC/ra_procedures.c
+++ b/openair2/LAYER2/MAC/ra_procedures.c
@@ -244,7 +244,7 @@ void Msg3_tx(module_id_t module_idP,uint8_t CC_id,frame_t frameP, uint8_t eNB_id
   }
 
   // start contention resolution timer
-  LOG_I(MAC,"[UE %d][RAPROC] Frame %d : Msg3_tx: Setting contention resolution timer\n",module_idP,frameP);
+  LOG_D(MAC,"[UE %d][RAPROC] Frame %d : Msg3_tx: Setting contention resolution timer\n",module_idP,frameP);
   UE_mac_inst[module_idP].RA_contention_resolution_cnt = 0;
   UE_mac_inst[module_idP].RA_contention_resolution_timer_active = 1;
 #if defined(USER_MODE) && defined(OAI_EMU)
@@ -448,9 +448,45 @@ PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP,int CC_id,frame_t frameP,
           UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER++;
           UE_mac_inst[module_idP].RA_prach_resources.ra_PREAMBLE_RECEIVED_TARGET_POWER +=
             (rach_ConfigCommon->powerRampingParameters.powerRampingStep<<1);  // 2dB increments in ASN.1 definition
-
-          if (UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER == rach_ConfigCommon->ra_SupervisionInfo.preambleTransMax) {
-            LOG_D(MAC,"[UE %d] Frame %d: Maximum number of RACH attempts (%d)\n",module_idP,frameP,rach_ConfigCommon->ra_SupervisionInfo.preambleTransMax);
+	  int preambleTransMax;
+	  switch (rach_ConfigCommon->ra_SupervisionInfo.preambleTransMax) {
+	  case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n3:
+	    preambleTransMax = 3;
+	    break;
+	  case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n4:
+	    preambleTransMax = 4;
+	    break;
+	  case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n5:
+	    preambleTransMax = 5;
+	    break;
+	  case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n6:
+	    preambleTransMax = 6;
+	    break;
+	  case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n7:
+	    preambleTransMax = 7;
+	    break;
+	  case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n8:
+	    preambleTransMax = 8;
+	    break;
+	  case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n10:
+	    preambleTransMax = 10;
+	    break;
+	  case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n20:
+	    preambleTransMax = 20;
+	    break;
+	  case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n50:
+	    preambleTransMax = 50;
+	    break;
+	  case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n100:
+	    preambleTransMax = 100;
+	    break;
+	  case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n200:
+	    preambleTransMax = 200;
+	    break;
+	  } 
+
+          if (UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER == preambleTransMax) {
+            LOG_D(MAC,"[UE %d] Frame %d: Maximum number of RACH attempts (%d)\n",module_idP,frameP,preambleTransMax);
             // send message to RRC
             UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER=1;
             UE_mac_inst[module_idP].RA_prach_resources.ra_PREAMBLE_RECEIVED_TARGET_POWER = get_Po_NOMINAL_PUSCH(module_idP,CC_id);
diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c
index ceaa663537901da445b178cf3d4f58e3375df065..4e293b6185ac15ff6f2b807f87aad7bfccefa405 100644
--- a/openair2/LAYER2/MAC/ue_procedures.c
+++ b/openair2/LAYER2/MAC/ue_procedures.c
@@ -1435,7 +1435,7 @@ void ue_get_sdu(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_t subf
                                          bsr_l,
                                          post_padding); // long_bsr
 
-  LOG_I(MAC,
+  LOG_D(MAC,
         "[UE %d] Generate header :bufflen %d  sdu_length_total %d, num_sdus %d, sdu_lengths[0] %d, sdu_lcids[0] %d => payload offset %d,  dcch_header_len %d, dtch_header_len %d, padding %d,post_padding %d, bsr len %d, phr len %d, reminder %d \n",
         module_idP,buflen, sdu_length_total,num_sdus,sdu_lengths[0],sdu_lcids[0],payload_offset, dcch_header_len,  dtch_header_len,
         short_padding,post_padding, bsr_len, phr_len,buflen-sdu_length_total-payload_offset);
diff --git a/openair2/RRC/LITE/L2_interface.c b/openair2/RRC/LITE/L2_interface.c
index d9c1062ab765f4ee9e1c40ee4720f24aa377b7fa..2dfb0a1a87dce7fa96cf8efcb831741a9c60ab3c 100644
--- a/openair2/RRC/LITE/L2_interface.c
+++ b/openair2/RRC/LITE/L2_interface.c
@@ -362,7 +362,7 @@ mac_rrc_lite_data_ind(
 
   if(eNB_flagP == ENB_FLAG_NO) {
     if(srb_idP == BCCH) {
-      LOG_T(RRC,"[UE %d] Received SDU for BCCH on SRB %d from eNB %d\n",module_idP,srb_idP,eNB_indexP);
+      LOG_D(RRC,"[UE %d] Received SDU for BCCH on SRB %d from eNB %d\n",module_idP,srb_idP,eNB_indexP);
 
 #if defined(ENABLE_ITTI)
       {
diff --git a/openair2/RRC/LITE/defs.h b/openair2/RRC/LITE/defs.h
index a0507c31a86c5bfc85854664e35621fedf102dc8..2847032336cad9eda04737ad693b4b79156f1353 100644
--- a/openair2/RRC/LITE/defs.h
+++ b/openair2/RRC/LITE/defs.h
@@ -189,9 +189,9 @@ typedef enum HO_STATE_e {
 
 typedef struct UE_RRC_INFO_s {
   UE_STATE_t State;
-  uint8_t SIB1Status;
   uint8_t SIB1systemInfoValueTag;
-  uint8_t SIStatus;
+  uint32_t SIStatus;
+  uint32_t SIcnt;
 #ifdef Rel10
   uint8_t MCCHStatus[8]; // MAX_MBSFN_AREA
 #endif
diff --git a/openair2/RRC/LITE/rrc_UE.c b/openair2/RRC/LITE/rrc_UE.c
index 75008b1ac220f8689a807b147feb3080efd58dbd..664c169e3a98368945495814252281d0654ed704 100644
--- a/openair2/RRC/LITE/rrc_UE.c
+++ b/openair2/RRC/LITE/rrc_UE.c
@@ -255,8 +255,8 @@ static void init_SI_UE( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_
 
   UE_rrc_inst[ctxt_pP->module_id].si[eNB_index] = (SystemInformation_t*)malloc16_clear( sizeof(SystemInformation_t) );
 
-  UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1Status = 0;
   UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus = 0;
+  UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIcnt    = 0;
 }
 
 #ifdef Rel10
@@ -2332,12 +2332,15 @@ int decode_BCCH_DLSCH_Message(
   const uint8_t                rsrp )
 {
   BCCH_DL_SCH_Message_t *bcch_message = NULL;
+  SystemInformationBlockType1_t* sib1 = UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index];
+  int i;
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_IN );
 
-  if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1Status == 1) &&
-      (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus == 1)) {
-    // Avoid decoding to prevent memory bloating
+  if (((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&1) == 1) &&  // SIB1 received
+      (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIcnt == sib1->schedulingInfoList.list.count)) {
+    // Avoid decoding  SystemInformationBlockType1_t* sib1 = UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index];
+    // to prevent memory bloating
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_OUT );
     return 0;
   }
@@ -2354,6 +2357,9 @@ int decode_BCCH_DLSCH_Message(
     LOG_E( RRC, "[UE %"PRIu8"] Failed to decode BCCH_DLSCH_MESSAGE (%zu bits)\n",
            ctxt_pP->module_id,
            dec_rval.consumed );
+    for (i=0;i<Sdu_len;i++)
+      printf("%02x ",Sdu[i]);
+    printf("\n");
     // free the memory
     SEQUENCE_free( &asn_DEF_BCCH_DL_SCH_Message, (void*)bcch_message, 1 );
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_OUT );
@@ -2393,7 +2399,7 @@ int decode_BCCH_DLSCH_Message(
     case BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1:
       if ((ctxt_pP->frame % 2) == 0) {
         // even frame
-        if (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1Status == 0) {
+        if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&1) == 0) {
           SystemInformationBlockType1_t* sib1 = UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index];
           memcpy( (void*)sib1,
                   (void*)&bcch_message->message.choice.c1.choice.systemInformationBlockType1,
@@ -2406,7 +2412,7 @@ int decode_BCCH_DLSCH_Message(
       break;
 
     case BCCH_DL_SCH_MessageType__c1_PR_systemInformation:
-      if (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1Status == 1) {
+      if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&1) == 1) {
         // SIB1 with schedulingInfoList is available
 
         SystemInformation_t* si = UE_rrc_inst[ctxt_pP->module_id].si[eNB_index];
@@ -2599,7 +2605,7 @@ static int decode_SIB1( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_
 #endif
                     );
 
-  UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1Status = 1;
+  UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus = 1;
   UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1systemInfoValueTag = sib1->systemInfoValueTag;
 
 #if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME)
@@ -3000,6 +3006,8 @@ static int decode_SI( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_in
 {
 
   SystemInformation_t** si = &UE_rrc_inst[ctxt_pP->module_id].si[eNB_index];
+  int new_sib = 0;
+  SystemInformationBlockType1_t* sib1 = UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index];
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_UE_DECODE_SI, VCD_FUNCTION_IN );
 
@@ -3019,181 +3027,241 @@ static int decode_SI( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_in
 
     switch(typeandinfo->present) {
     case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib2:
-      memcpy( UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index], &typeandinfo->choice.sib2, sizeof(SystemInformationBlockType2_t) );
-      LOG_D( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB2 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
-      dump_sib2( UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index] );
-      LOG_D( RRC, "[FRAME %05"PRIu32"][RRC_UE][MOD %02"PRIu8"][][--- MAC_CONFIG_REQ (SIB2 params  eNB %"PRIu8") --->][MAC_UE][MOD %02"PRIu8"][]\n",
-             ctxt_pP->frame, ctxt_pP->module_id, eNB_index, ctxt_pP->module_id );
-      rrc_mac_config_req(ctxt_pP->module_id, 0, ENB_FLAG_NO, 0, eNB_index,
-                          &UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->radioResourceConfigCommon,
-                          (struct PhysicalConfigDedicated *)NULL,
+      if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&2) == 0) {
+	UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=2;
+	new_sib=1;
+	memcpy( UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index], &typeandinfo->choice.sib2, sizeof(SystemInformationBlockType2_t) );
+	LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB2 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+	dump_sib2( UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index] );
+	LOG_I( RRC, "[FRAME %05"PRIu32"][RRC_UE][MOD %02"PRIu8"][][--- MAC_CONFIG_REQ (SIB2 params  eNB %"PRIu8") --->][MAC_UE][MOD %02"PRIu8"][]\n",
+	       ctxt_pP->frame, ctxt_pP->module_id, eNB_index, ctxt_pP->module_id );
+	rrc_mac_config_req(ctxt_pP->module_id, 0, ENB_FLAG_NO, 0, eNB_index,
+			   &UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->radioResourceConfigCommon,
+			   (struct PhysicalConfigDedicated *)NULL,
 #ifdef Rel10
-                          (SCellToAddMod_r10_t *)NULL,
+			   (SCellToAddMod_r10_t *)NULL,
 #endif
-                          (MeasObjectToAddMod_t **)NULL,
-                          (MAC_MainConfig_t *)NULL,
-                          0,
-                          (struct LogicalChannelConfig *)NULL,
-                          (MeasGapConfig_t *)NULL,
-                          (TDD_Config_t *)NULL,
-                          (MobilityControlInfo_t *)NULL,
-                          NULL,
-                          NULL,
-                          UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->freqInfo.ul_CarrierFreq,
-                          UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->freqInfo.ul_Bandwidth,
-                          &UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->freqInfo.additionalSpectrumEmission,
-                          UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->mbsfn_SubframeConfigList
+			   (MeasObjectToAddMod_t **)NULL,
+			   (MAC_MainConfig_t *)NULL,
+			   0,
+			   (struct LogicalChannelConfig *)NULL,
+			   (MeasGapConfig_t *)NULL,
+			   (TDD_Config_t *)NULL,
+			   (MobilityControlInfo_t *)NULL,
+			   NULL,
+			   NULL,
+			   UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->freqInfo.ul_CarrierFreq,
+			   UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->freqInfo.ul_Bandwidth,
+			   &UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->freqInfo.additionalSpectrumEmission,
+			   UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->mbsfn_SubframeConfigList
 #ifdef Rel10
-                          ,0,
-                          (MBSFN_AreaInfoList_r9_t *)NULL,
-                          (PMCH_InfoList_r9_t *)NULL
+			   ,0,
+			   (MBSFN_AreaInfoList_r9_t *)NULL,
+			   (PMCH_InfoList_r9_t *)NULL
 #endif
 #ifdef CBA
-                          ,0,
-                          0
+			   ,0,
+			   0
 #endif
-                        );
-      UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus = 1;
-      // After SI is received, prepare RRCConnectionRequest
+			   );
+	// After SI is received, prepare RRCConnectionRequest
 #ifdef Rel10
 
-      if (UE_rrc_inst[ctxt_pP->module_id].MBMS_flag < 3) // see -Q option
+	if (UE_rrc_inst[ctxt_pP->module_id].MBMS_flag < 3) // see -Q option
 #endif
 #if !(defined(ENABLE_ITTI) && defined(ENABLE_USE_MME))
-        rrc_ue_generate_RRCConnectionRequest( ctxt_pP, eNB_index );
-
-      LOG_I( RRC, "not sending connection request\n" );
+	  rrc_ue_generate_RRCConnectionRequest( ctxt_pP, eNB_index );
+	
+	LOG_I( RRC, "not sending connection request\n" );
 #endif
-
-      if (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].State == RRC_IDLE) {
-        LOG_I( RRC, "[UE %d] Received SIB1/SIB2/SIB3 Switching to RRC_SI_RECEIVED\n", ctxt_pP->module_id );
-        UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].State = RRC_SI_RECEIVED;
+	
+	if (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].State == RRC_IDLE) {
+	  LOG_I( RRC, "[UE %d] Received SIB1/SIB2/SIB3 Switching to RRC_SI_RECEIVED\n", ctxt_pP->module_id );
+	  UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].State = RRC_SI_RECEIVED;
 #ifdef ENABLE_RAL
-        {
-          MessageDef                            *message_ral_p = NULL;
-          rrc_ral_system_information_ind_t       ral_si_ind;
-
-          message_ral_p = itti_alloc_new_message (TASK_RRC_UE, RRC_RAL_SYSTEM_INFORMATION_IND);
-          memset(&ral_si_ind, 0, sizeof(rrc_ral_system_information_ind_t));
-          ral_si_ind.plmn_id.MCCdigit2 = '0';
-          ral_si_ind.plmn_id.MCCdigit1 = '2';
-          ral_si_ind.plmn_id.MNCdigit3 = '0';
-          ral_si_ind.plmn_id.MCCdigit3 = '8';
-          ral_si_ind.plmn_id.MNCdigit2 = '9';
-          ral_si_ind.plmn_id.MNCdigit1 = '9';
-          ral_si_ind.cell_id        = 1;
-          ral_si_ind.dbm            = 0;
-          //ral_si_ind.dbm            = fifo_dump_emos_UE.PHY_measurements->rx_rssi_dBm[eNB_index];
-          // TO DO
-          ral_si_ind.sinr           = 0;
-          //ral_si_ind.sinr           = fifo_dump_emos_UE.PHY_measurements->subband_cqi_dB[eNB_index][phy_vars_ue->lte_frame_parms.nb_antennas_rx][0];
-          // TO DO
-          ral_si_ind.link_data_rate = 0;
-          memcpy (&message_ral_p->ittiMsg, (void *) &ral_si_ind, sizeof(rrc_ral_system_information_ind_t));
+	  {
+	    MessageDef                            *message_ral_p = NULL;
+	    rrc_ral_system_information_ind_t       ral_si_ind;
+	    
+	    message_ral_p = itti_alloc_new_message (TASK_RRC_UE, RRC_RAL_SYSTEM_INFORMATION_IND);
+	    memset(&ral_si_ind, 0, sizeof(rrc_ral_system_information_ind_t));
+	    ral_si_ind.plmn_id.MCCdigit2 = '0';
+	    ral_si_ind.plmn_id.MCCdigit1 = '2';
+	    ral_si_ind.plmn_id.MNCdigit3 = '0';
+	    ral_si_ind.plmn_id.MCCdigit3 = '8';
+	    ral_si_ind.plmn_id.MNCdigit2 = '9';
+	    ral_si_ind.plmn_id.MNCdigit1 = '9';
+	    ral_si_ind.cell_id        = 1;
+	    ral_si_ind.dbm            = 0;
+	    //ral_si_ind.dbm            = fifo_dump_emos_UE.PHY_measurements->rx_rssi_dBm[eNB_index];
+	    // TO DO
+	    ral_si_ind.sinr           = 0;
+	    //ral_si_ind.sinr           = fifo_dump_emos_UE.PHY_measurements->subband_cqi_dB[eNB_index][phy_vars_ue->lte_frame_parms.nb_antennas_rx][0];
+	    // TO DO
+	    ral_si_ind.link_data_rate = 0;
+	    memcpy (&message_ral_p->ittiMsg, (void *) &ral_si_ind, sizeof(rrc_ral_system_information_ind_t));
 #warning "ue_mod_idP ? for instance ?"
-          itti_send_msg_to_task (TASK_RAL_UE, UE_MODULE_ID_TO_INSTANCE(ctxt_pP->module_id), message_ral_p);
-        }
+	    itti_send_msg_to_task (TASK_RAL_UE, UE_MODULE_ID_TO_INSTANCE(ctxt_pP->module_id), message_ral_p);
+	  }
 #endif
+	}
       }
-
       break; // case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib2
 
     case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib3:
-      memcpy( UE_rrc_inst[ctxt_pP->module_id].sib3[eNB_index], &typeandinfo->choice.sib3, sizeof(SystemInformationBlockType3_t) );
-      LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB3 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
-      dump_sib3( UE_rrc_inst[ctxt_pP->module_id].sib3[eNB_index] );
-      UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus = 1;
-      rrc_set_sub_state( ctxt_pP->module_id, RRC_SUB_STATE_IDLE_SIB_COMPLETE );
+      if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&4) == 0) {
+	UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=4;
+	new_sib=1;
+	memcpy( UE_rrc_inst[ctxt_pP->module_id].sib3[eNB_index], &typeandinfo->choice.sib3, sizeof(SystemInformationBlockType3_t) );
+	LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB3 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+	dump_sib3( UE_rrc_inst[ctxt_pP->module_id].sib3[eNB_index] );
+
+      }
       break;
 
     case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib4:
-      memcpy( UE_rrc_inst[ctxt_pP->module_id].sib4[eNB_index], &typeandinfo->choice.sib4, sizeof(SystemInformationBlockType4_t) );
-      LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB4 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+      if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&8) == 0) {
+	UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=8;
+	new_sib=1;
+	memcpy( UE_rrc_inst[ctxt_pP->module_id].sib4[eNB_index], &typeandinfo->choice.sib4, sizeof(SystemInformationBlockType4_t) );
+	LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB4 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+      }
+
       break;
 
     case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib5:
-      memcpy( UE_rrc_inst[ctxt_pP->module_id].sib5[eNB_index], &typeandinfo->choice.sib5, sizeof(SystemInformationBlockType5_t) );
-      LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB5 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+      if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&16) == 0) {
+	UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=16;
+	new_sib=1;
+     
+	memcpy( UE_rrc_inst[ctxt_pP->module_id].sib5[eNB_index], &typeandinfo->choice.sib5, sizeof(SystemInformationBlockType5_t) );
+	LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB5 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+      }
       break;
 
     case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib6:
-      memcpy( UE_rrc_inst[ctxt_pP->module_id].sib6[eNB_index], &typeandinfo->choice.sib6, sizeof(SystemInformationBlockType6_t) );
-      LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB6 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+      if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&32) == 0) {
+	UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=32;
+	new_sib=1;
+     
+	memcpy( UE_rrc_inst[ctxt_pP->module_id].sib6[eNB_index], &typeandinfo->choice.sib6, sizeof(SystemInformationBlockType6_t) );
+	LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB6 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+      }
       break;
 
     case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib7:
-      memcpy( UE_rrc_inst[ctxt_pP->module_id].sib7[eNB_index], &typeandinfo->choice.sib7, sizeof(SystemInformationBlockType7_t) );
-      LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB7 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+      if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&64) == 0) {
+	UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=64;
+	new_sib=1;
+	memcpy( UE_rrc_inst[ctxt_pP->module_id].sib7[eNB_index], &typeandinfo->choice.sib7, sizeof(SystemInformationBlockType7_t) );
+	LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB7 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+      }
       break;
 
     case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib8:
-      memcpy( UE_rrc_inst[ctxt_pP->module_id].sib8[eNB_index], &typeandinfo->choice.sib8, sizeof(SystemInformationBlockType8_t) );
-      LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB8 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+      if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&128) == 0) {
+	UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=128;
+	new_sib=1;
+	memcpy( UE_rrc_inst[ctxt_pP->module_id].sib8[eNB_index], &typeandinfo->choice.sib8, sizeof(SystemInformationBlockType8_t) );
+	LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB8 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+      }
       break;
 
     case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib9:
-      memcpy( UE_rrc_inst[ctxt_pP->module_id].sib9[eNB_index], &typeandinfo->choice.sib9, sizeof(SystemInformationBlockType9_t) );
-      LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB9 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+      if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&256) == 0) {
+	UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=256;
+	new_sib=1;
+      
+	memcpy( UE_rrc_inst[ctxt_pP->module_id].sib9[eNB_index], &typeandinfo->choice.sib9, sizeof(SystemInformationBlockType9_t) );
+	LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB9 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+      }
       break;
 
     case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib10:
-      memcpy( UE_rrc_inst[ctxt_pP->module_id].sib10[eNB_index], &typeandinfo->choice.sib10, sizeof(SystemInformationBlockType10_t) );
-      LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB10 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+      if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&512) == 0) {
+	UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=512;
+	new_sib=1;
+	memcpy( UE_rrc_inst[ctxt_pP->module_id].sib10[eNB_index], &typeandinfo->choice.sib10, sizeof(SystemInformationBlockType10_t) );
+	LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB10 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+      }
       break;
 
     case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib11:
-      memcpy( UE_rrc_inst[ctxt_pP->module_id].sib11[eNB_index], &typeandinfo->choice.sib11, sizeof(SystemInformationBlockType11_t) );
-      LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB11 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+      if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&1024) == 0) {
+	UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=1024;
+	new_sib=1;
+
+	memcpy( UE_rrc_inst[ctxt_pP->module_id].sib11[eNB_index], &typeandinfo->choice.sib11, sizeof(SystemInformationBlockType11_t) );
+	LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB11 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+      }
       break;
 
 #ifdef Rel10
 
     case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib12_v920:
-      memcpy( UE_rrc_inst[ctxt_pP->module_id].sib12[eNB_index], &typeandinfo->choice.sib12_v920, sizeof(SystemInformationBlockType12_r9_t) );
-      LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB12 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+      if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&2048) == 0) {
+	UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=2048;
+	new_sib=1;
+	memcpy( UE_rrc_inst[ctxt_pP->module_id].sib12[eNB_index], &typeandinfo->choice.sib12_v920, sizeof(SystemInformationBlockType12_r9_t) );
+	LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB12 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+      }
       break;
-
+	
     case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib13_v920:
-      memcpy( UE_rrc_inst[ctxt_pP->module_id].sib13[eNB_index], &typeandinfo->choice.sib13_v920, sizeof(SystemInformationBlockType13_r9_t) );
-      LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB13 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
-      dump_sib13( UE_rrc_inst[ctxt_pP->module_id].sib13[eNB_index] );
-      // adding here function to store necessary parameters for using in decode_MCCH_Message + maybe transfer to PHY layer
-      LOG_D( RRC, "[FRAME %05"PRIu32"][RRC_UE][MOD %02"PRIu8"][][--- MAC_CONFIG_REQ (SIB13 params eNB %"PRIu8") --->][MAC_UE][MOD %02"PRIu8"][]\n",
-             ctxt_pP->frame, ctxt_pP->module_id, eNB_index, ctxt_pP->module_id);
-      rrc_mac_config_req(ctxt_pP->module_id,0,ENB_FLAG_NO,0,eNB_index,
-                         (RadioResourceConfigCommonSIB_t *)NULL,
-                         (struct PhysicalConfigDedicated *)NULL,
-                         (SCellToAddMod_r10_t *)NULL,
-                         (MeasObjectToAddMod_t **)NULL,
-                         (MAC_MainConfig_t *)NULL,
-                         0,
-                         (struct LogicalChannelConfig *)NULL,
-                         (MeasGapConfig_t *)NULL,
-                         (TDD_Config_t *)NULL,
-                         (MobilityControlInfo_t *)NULL,
-                         NULL,
-                         NULL,
-                         NULL,
-                         NULL,
-                         NULL,
-                         (MBSFN_SubframeConfigList_t *)NULL,
-                         0,
-                         &UE_rrc_inst[ctxt_pP->module_id].sib13[eNB_index]->mbsfn_AreaInfoList_r9,
-                         (PMCH_InfoList_r9_t *)NULL
+      if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&4096) == 0) {
+	UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=4096;
+	new_sib=1;
+	
+	memcpy( UE_rrc_inst[ctxt_pP->module_id].sib13[eNB_index], &typeandinfo->choice.sib13_v920, sizeof(SystemInformationBlockType13_r9_t) );
+	LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB13 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
+	dump_sib13( UE_rrc_inst[ctxt_pP->module_id].sib13[eNB_index] );
+	// adding here function to store necessary parameters for using in decode_MCCH_Message + maybe transfer to PHY layer
+	LOG_D( RRC, "[FRAME %05"PRIu32"][RRC_UE][MOD %02"PRIu8"][][--- MAC_CONFIG_REQ (SIB13 params eNB %"PRIu8") --->][MAC_UE][MOD %02"PRIu8"][]\n",
+	       ctxt_pP->frame, ctxt_pP->module_id, eNB_index, ctxt_pP->module_id);
+	rrc_mac_config_req(ctxt_pP->module_id,0,ENB_FLAG_NO,0,eNB_index,
+			   (RadioResourceConfigCommonSIB_t *)NULL,
+			   (struct PhysicalConfigDedicated *)NULL,
+			   (SCellToAddMod_r10_t *)NULL,
+			   (MeasObjectToAddMod_t **)NULL,
+			   (MAC_MainConfig_t *)NULL,
+			   0,
+			   (struct LogicalChannelConfig *)NULL,
+			   (MeasGapConfig_t *)NULL,
+			   (TDD_Config_t *)NULL,
+			   (MobilityControlInfo_t *)NULL,
+			   NULL,
+			   NULL,
+			   NULL,
+			   NULL,
+			   NULL,
+			   (MBSFN_SubframeConfigList_t *)NULL,
+			   0,
+			   &UE_rrc_inst[ctxt_pP->module_id].sib13[eNB_index]->mbsfn_AreaInfoList_r9,
+			   (PMCH_InfoList_r9_t *)NULL
 #ifdef CBA
-                         ,0,
-                         0
+			   ,0,
+			   0
 #endif
-                        );
-      UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus = 1;
-      break;
+			   );
+	break;
+      }
 #endif
-
     default:
       break;
     }
 
   }
+  if (new_sib == 1) {
+    UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIcnt++;
+
+    if (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIcnt == sib1->schedulingInfoList.list.count)
+      rrc_set_sub_state( ctxt_pP->module_id, RRC_SUB_STATE_IDLE_SIB_COMPLETE );
+
+    LOG_I(RRC,"SIStatus %x, SIcnt %d/%d\n", 
+	  UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus,
+	  UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIcnt,
+	  sib1->schedulingInfoList.list.count);
+  }
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_UE_DECODE_SI  , VCD_FUNCTION_OUT);
   return 0;
@@ -3705,7 +3773,7 @@ void *rrc_ue_task( void *args_p )
       break;
 
     case MESSAGE_TEST:
-      LOG_I(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name);
+      LOG_D(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name);
       break;
 
       /* MAC messages */
@@ -3722,7 +3790,7 @@ void *rrc_ue_task( void *args_p )
       break;
 
     case RRC_MAC_OUT_OF_SYNC_IND:
-      LOG_I(RRC, "[UE %d] Received %s: frameP %d, eNB %d\n", ue_mod_id, msg_name,
+      LOG_D(RRC, "[UE %d] Received %s: frameP %d, eNB %d\n", ue_mod_id, msg_name,
             RRC_MAC_OUT_OF_SYNC_IND (msg_p).frame, RRC_MAC_OUT_OF_SYNC_IND (msg_p).enb_index);
 
       UE_rrc_inst[ue_mod_id].Info[RRC_MAC_OUT_OF_SYNC_IND (msg_p).enb_index].N310_cnt ++;
@@ -3743,7 +3811,7 @@ void *rrc_ue_task( void *args_p )
       break;
 
     case RRC_MAC_CCCH_DATA_CNF:
-      LOG_I(RRC, "[UE %d] Received %s: eNB %d\n", ue_mod_id, msg_name,
+      LOG_D(RRC, "[UE %d] Received %s: eNB %d\n", ue_mod_id, msg_name,
             RRC_MAC_CCCH_DATA_CNF (msg_p).enb_index);
 
       // reset the tx buffer to indicate RRC that ccch was successfully transmitted (for example if contention resolution succeeds)
@@ -3751,7 +3819,7 @@ void *rrc_ue_task( void *args_p )
       break;
 
     case RRC_MAC_CCCH_DATA_IND:
-      LOG_I(RRC, "[UE %d] RNTI %x Received %s: frameP %d, eNB %d\n",
+      LOG_D(RRC, "[UE %d] RNTI %x Received %s: frameP %d, eNB %d\n",
             ue_mod_id,
             RRC_MAC_CCCH_DATA_IND (msg_p).rnti,
             msg_name,
@@ -3773,7 +3841,7 @@ void *rrc_ue_task( void *args_p )
 # ifdef Rel10
 
     case RRC_MAC_MCCH_DATA_IND:
-      LOG_I(RRC, "[UE %d] Received %s: frameP %d, eNB %d, mbsfn SA %d\n", ue_mod_id, msg_name,
+      LOG_D(RRC, "[UE %d] Received %s: frameP %d, eNB %d, mbsfn SA %d\n", ue_mod_id, msg_name,
             RRC_MAC_MCCH_DATA_IND (msg_p).frame, RRC_MAC_MCCH_DATA_IND (msg_p).enb_index, RRC_MAC_MCCH_DATA_IND (msg_p).mbsfn_sync_area);
 
       //PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, ENB_FLAG_NO, M_RNTI, RRC_MAC_MCCH_DATA_IND (msg_p).frame, 0);
@@ -3790,14 +3858,14 @@ void *rrc_ue_task( void *args_p )
       /* PDCP messages */
     case RRC_DCCH_DATA_IND:
       PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, RRC_DCCH_DATA_IND (msg_p).module_id, ENB_FLAG_NO, RRC_DCCH_DATA_IND (msg_p).rnti, RRC_DCCH_DATA_IND (msg_p).frame, 0,RRC_DCCH_DATA_IND (msg_p).eNB_index);
-      LOG_I(RRC, "[UE %d] Received %s: frameP %d, DCCH %d, eNB %d\n",
+      LOG_D(RRC, "[UE %d] Received %s: frameP %d, DCCH %d, eNB %d\n",
             RRC_DCCH_DATA_IND (msg_p).module_id,
             msg_name,
             RRC_DCCH_DATA_IND (msg_p).frame,
             RRC_DCCH_DATA_IND (msg_p).dcch_index,
             RRC_DCCH_DATA_IND (msg_p).eNB_index);
 
-      LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT"Received %s DCCH %d, eNB %d\n",
+      LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT"Received %s DCCH %d, eNB %d\n",
             PROTOCOL_RRC_CTXT_UE_ARGS(&ctxt),
             msg_name,
             RRC_DCCH_DATA_IND (msg_p).dcch_index,
@@ -3818,7 +3886,7 @@ void *rrc_ue_task( void *args_p )
     case NAS_CELL_SELECTION_REQ:
       ue_mod_id = 0; /* TODO force ue_mod_id to first UE, NAS UE not virtualized yet */
 
-      LOG_I(RRC, "[UE %d] Received %s: state %d, plmnID %d, rat %x\n", ue_mod_id, msg_name, rrc_get_state(ue_mod_id),
+      LOG_D(RRC, "[UE %d] Received %s: state %d, plmnID %d, rat %x\n", ue_mod_id, msg_name, rrc_get_state(ue_mod_id),
             NAS_CELL_SELECTION_REQ (msg_p).plmnID, NAS_CELL_SELECTION_REQ (msg_p).rat);
 
       if (rrc_get_state(ue_mod_id) == RRC_STATE_INACTIVE) {
@@ -3830,7 +3898,7 @@ void *rrc_ue_task( void *args_p )
       {
         UE_rrc_inst[ue_mod_id].plmnID = NAS_CELL_SELECTION_REQ (msg_p).plmnID;
         UE_rrc_inst[ue_mod_id].rat = NAS_CELL_SELECTION_REQ (msg_p).rat;
-        LOG_I(RRC, "[UE %d] Save cell selection criterion MCC %X%X%X MNC %X%X%X\n",
+        LOG_D(RRC, "[UE %d] Save cell selection criterion MCC %X%X%X MNC %X%X%X\n",
               ue_mod_id,
               UE_rrc_inst[ue_mod_id].plmnID.MCCdigit1,
               UE_rrc_inst[ue_mod_id].plmnID.MCCdigit2,
@@ -3882,7 +3950,7 @@ void *rrc_ue_task( void *args_p )
       break;
 
     case NAS_CONN_ESTABLI_REQ:
-      LOG_I(RRC, "[UE %d] Received %s: cause %d, type %d, s_tmsi %d, plmnID %d\n", ue_mod_id, msg_name, NAS_CONN_ESTABLI_REQ (msg_p).cause,
+      LOG_D(RRC, "[UE %d] Received %s: cause %d, type %d, s_tmsi %d, plmnID %d\n", ue_mod_id, msg_name, NAS_CONN_ESTABLI_REQ (msg_p).cause,
             NAS_CONN_ESTABLI_REQ (msg_p).type, NAS_CONN_ESTABLI_REQ (msg_p).s_tmsi, NAS_CONN_ESTABLI_REQ (msg_p).plmnID);
 
       //PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, ENB_FLAG_NO, NOT_A_RNTI, 0, 0);
@@ -3894,7 +3962,7 @@ void *rrc_ue_task( void *args_p )
       case RRC_STATE_IDLE: {
         if (rrc_get_sub_state(ue_mod_id) == RRC_SUB_STATE_IDLE_SIB_COMPLETE) {
           rrc_ue_generate_RRCConnectionRequest(&ctxt, 0);
-          LOG_I(RRC, "not sending connection request\n");
+          LOG_D(RRC, "not sending connection request\n");
 
           rrc_set_sub_state (ue_mod_id, RRC_SUB_STATE_IDLE_CONNECTING);
         }
@@ -3919,7 +3987,7 @@ void *rrc_ue_task( void *args_p )
       uint32_t length;
       uint8_t *buffer;
 
-      LOG_I(RRC, "[UE %d] Received %s: UEid %d\n", ue_mod_id, msg_name, NAS_UPLINK_DATA_REQ (msg_p).UEid);
+      LOG_D(RRC, "[UE %d] Received %s: UEid %d\n", ue_mod_id, msg_name, NAS_UPLINK_DATA_REQ (msg_p).UEid);
 
       /* Create message for PDCP (ULInformationTransfer_t) */
       length = do_ULInformationTransfer(&buffer, NAS_UPLINK_DATA_REQ (msg_p).nasMsg.length, NAS_UPLINK_DATA_REQ (msg_p).nasMsg.data);
@@ -3940,7 +4008,7 @@ void *rrc_ue_task( void *args_p )
 # if defined(ENABLE_RAL)
 
     case RRC_RAL_SCAN_REQ:
-      LOG_I(RRC, "[UE %d] Received %s: state %d\n", ue_mod_id, msg_name);
+      LOG_D(RRC, "[UE %d] Received %s: state %d\n", ue_mod_id, msg_name);
 
       switch (rrc_get_state(ue_mod_id)) {
       case RRC_STATE_INACTIVE: {
@@ -3987,7 +4055,7 @@ void *rrc_ue_task( void *args_p )
       break;
 
     case PHY_FIND_CELL_IND:
-      LOG_I(RRC, "[UE %d] Received %s: state %d\n", ue_mod_id, msg_name, rrc_get_state(ue_mod_id));
+      LOG_D(RRC, "[UE %d] Received %s: state %d\n", ue_mod_id, msg_name, rrc_get_state(ue_mod_id));
 
       switch (rrc_get_state(ue_mod_id)) {
       case RRC_STATE_IDLE:
@@ -4051,7 +4119,7 @@ void *rrc_ue_task( void *args_p )
              &PHY_MEAS_REPORT_IND(msg_p).link_param,
              sizeof(RRC_RAL_MEASUREMENT_REPORT_IND (message_p).link_param));
 
-      LOG_I(RRC, "[UE %d] PHY_MEAS_REPORT_IN: sending msg %s to %s \n", ue_mod_id, "RRC_RAL_MEASUREMENT_REPORT_IND", "TASK_RAL_UE");
+      LOG_D(RRC, "[UE %d] PHY_MEAS_REPORT_IN: sending msg %s to %s \n", ue_mod_id, "RRC_RAL_MEASUREMENT_REPORT_IND", "TASK_RAL_UE");
       itti_send_msg_to_task(TASK_RAL_UE, instance, message_p);
       break;
     }
@@ -4061,14 +4129,14 @@ void *rrc_ue_task( void *args_p )
       break;
 
     case RRC_RAL_CONNECTION_ESTABLISHMENT_REQ:
-      LOG_I(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name);
+      LOG_D(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name);
 
       switch (rrc_get_state(ue_mod_id)) {
       case RRC_STATE_IDLE: {
         if (rrc_get_sub_state(ue_mod_id) == RRC_SUB_STATE_IDLE_SIB_COMPLETE) {
           PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, ue_mod_id, ENB_FLAG_NO, UE_rrc_inst[ue_mod_id].Info[0].rnti, 0, 0, 0);
           rrc_ue_generate_RRCConnectionRequest(&ctxt, 0);
-          LOG_I(RRC, "not sending connection request\n");
+          LOG_D(RRC, "not sending connection request\n");
           rrc_set_sub_state (ue_mod_id, RRC_SUB_STATE_IDLE_CONNECTING);
         }
 
@@ -4090,7 +4158,7 @@ void *rrc_ue_task( void *args_p )
 
     case RRC_RAL_CONNECTION_RELEASE_REQ:
       ue_mod_id = 0; /* TODO force ue_mod_id to first UE, NAS UE not virtualized yet */
-      LOG_I(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name);
+      LOG_D(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name);
       break;
 #endif
 
diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index 265ccbdcf17bf48a8a32f08cd6e16aeb0186b9c8..1d2fa2c9d18b4e8a65b2f62bcce55e0573179245 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -283,7 +283,7 @@ double rx_gain[MAX_NUM_CCs][4] = {{110,0,0,0}};
 #endif
 
 double sample_rate=30.72e6;
-double bw = 14e6;
+double bw = 10.0e6;
 
 static int                      tx_max_power[MAX_NUM_CCs]; /* =  {0,0}*/;
 
@@ -2537,7 +2537,7 @@ int main( int argc, char **argv )
   }
 
 #endif
-#ifdef NAS_NETLINK
+#ifdef PDCP_USE_NETLINK
   netlink_init();
 #endif
 
@@ -2774,6 +2774,7 @@ int main( int argc, char **argv )
 
   if(frame_parms[0]->N_RB_DL == 100) {
     sample_rate = 30.72e6;
+    bw          = 10.0e6;
 #ifndef EXMIMO
     openair0_cfg[0].samples_per_packet = 2048;
     samples_per_frame = 307200;
@@ -2783,6 +2784,7 @@ int main( int argc, char **argv )
 #endif
   } else if(frame_parms[0]->N_RB_DL == 50) {
     sample_rate = 15.36e6;
+    bw          = 5.0e6;
 #ifndef EXMIMO
     openair0_cfg[0].samples_per_packet = 2048;
     samples_per_frame = 153600;
@@ -2791,6 +2793,7 @@ int main( int argc, char **argv )
 #endif
   } else if (frame_parms[0]->N_RB_DL == 25) {
     sample_rate = 7.68e6;
+    bw          = 2.5e6;
 #ifndef EXMIMO
     openair0_cfg[0].samples_per_packet = 1024;
     samples_per_frame = 76800;
@@ -2799,6 +2802,7 @@ int main( int argc, char **argv )
 #endif
   } else if (frame_parms[0]->N_RB_DL == 6) {
     sample_rate = 1.92e6;
+    bw          = 0.96e6;
 #ifndef EXMIMO
     openair0_cfg[0].samples_per_packet = 256;
     samples_per_frame = 19200;
@@ -2961,8 +2965,11 @@ int main( int argc, char **argv )
 
   // connect the TX/RX buffers
   if (UE_flag==1) {
-    openair_daq_vars.timing_advance = 0;
-
+#ifdef OAI_USRP
+    openair_daq_vars.timing_advance = 160;
+#else
+    openair_daq_vars.timing_advance = 170;
+#endif
     if (setup_ue_buffers(UE,&openair0_cfg[0],rf_map)!=0) {
       printf("Error setting up eNB buffer\n");
       exit(-1);
diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c
index 1f522b56d9f5cbaf7cc005c16fac6101ede976af..6ea807ac6b32f8b1fdb97fb67f485c050227035e 100644
--- a/targets/RT/USER/lte-ue.c
+++ b/targets/RT/USER/lte-ue.c
@@ -390,6 +390,7 @@ static void *UE_thread_synch(void *arg)
  
     case pbch:
 
+      
       if (initial_sync( UE, UE->mode ) == 0) {
 
         hw_slot_offset = (UE->rx_offset<<1) / UE->lte_frame_parms.samples_per_tti;
@@ -410,15 +411,23 @@ static void *UE_thread_synch(void *arg)
 	  switch(UE->lte_frame_parms.N_RB_DL) {
 	  case 6:
 	    openair0_cfg[0].sample_rate =1.92e6;
+	    openair0_cfg[0].rx_bw          =.96e6;
+	    openair0_cfg[0].tx_bw          =.96e6;
 	    break;
 	  case 25:
-	    openair0_cfg[0].sample_rate=7.68e6;
+	    openair0_cfg[0].sample_rate =7.68e6;
+	    openair0_cfg[0].rx_bw          =2.5e6;
+	    openair0_cfg[0].tx_bw          =2.5e6;
 	    break;
 	  case 50:
-	    openair0_cfg[0].sample_rate=15.36e6;
+	    openair0_cfg[0].sample_rate =15.36e6;
+	    openair0_cfg[0].rx_bw          =5.0e6;
+	    openair0_cfg[0].tx_bw          =5.0e6;
 	    break;
 	  case 100:
 	    openair0_cfg[0].sample_rate=30.72e6;
+	    openair0_cfg[0].rx_bw=10.0e6;
+	    openair0_cfg[0].tx_bw=10.0e6;
 	    break;
 	  }
 
@@ -687,6 +696,27 @@ static void *UE_thread_tx(void *arg)
  * \param arg is a pointer to a \ref PHY_VARS_UE structure.
  * \returns a pointer to an int. The storage is not on the heap and must not be freed.
  */
+
+#ifdef OAI_USRP
+void rescale(int16_t *input,int length)
+{
+#if defined(__x86_64__) || defined(__i386__)
+  __m128i *input128 = (__m128i *)input;
+#elif defined(__arm__)
+  int16x8_t *input128 = (int16x8_t *)input;
+#endif
+  int i;
+
+  for (i=0; i<length>>2; i++) {
+#if defined(__x86_64__) || defined(__i386__)
+    input128[i] = _mm_srai_epi16(input128[i],4);
+#elif defined(__arm__)
+    input128[i] = vshrq_n_s16(input128[i],4);
+#endif
+  }
+}
+#endif
+
 static void *UE_thread_rx(void *arg)
 {
   static int UE_thread_rx_retval;
@@ -767,11 +797,78 @@ static void *UE_thread_rx(void *arg)
     for (i=0; i<2; i++) {
       if ((subframe_select( &UE->lte_frame_parms, UE->slot_rx>>1 ) == SF_DL) ||
           (UE->lte_frame_parms.frame_type == FDD)) {
+#ifdef OAI_USRP
+	// this does the adjustments of RX signal amplitude to bring into least 12 significant bits
+	int slot_length = UE->lte_frame_parms.samples_per_tti>>1;
+	int rx_offset = (UE->slot_rx)*slot_length + UE->rx_offset;
+	int frame_length = UE->lte_frame_parms.samples_per_tti*10;
+	int aa;
+	if (rx_offset > frame_length)
+	  rx_offset-=frame_length;
+
+
+	if (rx_offset >= 0) {
+	  if (rx_offset + slot_length < frame_length)
+	    for (aa=0;aa<UE->lte_frame_parms.nb_antennas_rx;aa++)
+	      rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][rx_offset&(~0x3)],
+		      slot_length);
+	  else {
+	    int diff = rx_offset + slot_length - frame_length;
+	    for (aa=0;aa<UE->lte_frame_parms.nb_antennas_rx;aa++){
+	      rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][rx_offset&(~0x3)],
+		      slot_length-diff);
+	      rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][0],
+		      diff);
+	    }
+	  }
+	}
+	else {
+	    for (aa=0;aa<UE->lte_frame_parms.nb_antennas_rx;aa++){
+	      rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][(frame_length+rx_offset)&(~0x3)],
+		      -rx_offset);
+	      rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][0],
+		      slot_length+rx_offset);
+	    }
+	}
+#endif
         phy_procedures_UE_RX( UE, 0, 0, UE->mode, no_relay, NULL );
       }
 
       if ((subframe_select( &UE->lte_frame_parms, UE->slot_rx>>1 ) == SF_S) &&
           ((UE->slot_rx&1) == 0)) {
+#ifdef OAI_USRP
+	// this does the adjustments of RX signal amplitude to bring into least 12 significant bits
+	int slot_length = UE->lte_frame_parms.samples_per_tti>>1;
+	int rx_offset = (UE->slot_rx)*slot_length + UE->rx_offset;
+	int frame_length = UE->lte_frame_parms.samples_per_tti*10;
+	if (rx_offset > frame_length)
+	  rx_offset-=frame_length;
+	int aa;
+
+	if (rx_offset >= 0) {
+	  if (rx_offset + slot_length < frame_length)
+	    for (aa=0;aa<UE->lte_frame_parms.nb_antennas_rx;aa++)
+	      rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][rx_offset&(~0x3)],
+		      slot_length);
+	  else {
+	    int diff = rx_offset + slot_length - frame_length;
+	    for (aa=0;aa<UE->lte_frame_parms.nb_antennas_rx;aa++){
+	      rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][rx_offset&(~0x3)],
+		      slot_length-diff);
+	      rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][0],
+		      diff);
+	    }
+	  }
+	}
+	else {
+	  for (aa=0;aa<UE->lte_frame_parms.nb_antennas_rx;aa++){
+	    rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][(frame_length+rx_offset)&(~0x3)],
+		    -rx_offset);
+	    rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][0],
+		    slot_length+rx_offset);
+	  }
+	}
+#endif
         phy_procedures_UE_RX( UE, 0, 0, UE->mode, no_relay, NULL );
       }
 
@@ -938,9 +1035,9 @@ void *UE_thread(void *arg)
       for (int i=0; i<UE->lte_frame_parms.nb_antennas_rx; i++)
         rxp[i] = (dummy_dump==0) ? (void*)&rxdata[i][rxpos] : (void*)dummy[i];
       
-      //      if (dummy_dump == 0)
-      //	printf("writing %d samples to %d\n",spp - ((first_rx==1) ? rx_off_diff : 0),rxpos);
-
+      /*      if (dummy_dump == 0)
+      	printf("writing %d samples to %d (first_rx %d)\n",spp - ((first_rx==1) ? rx_off_diff : 0),rxpos,first_rx);
+      */
       rxs = openair0.trx_read_func(&openair0,
 				   &timestamp,
 				   rxp,
@@ -952,7 +1049,9 @@ void *UE_thread(void *arg)
         return &UE_thread_retval;
       }
 
-      rx_off_diff = 0;
+      if (rx_off_diff !=0)
+	LOG_I(PHY,"frame %d, rx_offset %d, rx_off_diff %d\n",UE->frame_rx,UE->rx_offset,rx_off_diff);
+
       VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 );
 
       // Transmit TX buffer based on timestamp from RX
@@ -968,7 +1067,7 @@ void *UE_thread(void *arg)
         openair0.trx_write_func(&openair0,
                                 (timestamp+spp*tx_delay-tx_forward_nsamps),
                                 txp,
-                                spp,
+				spp - ((first_rx==1) ? rx_off_diff : 0),
                                 UE->lte_frame_parms.nb_antennas_tx,
                                 1);
 
@@ -980,6 +1079,9 @@ void *UE_thread(void *arg)
       rt_sleep_ns(1000000);
 #endif
 
+      rx_off_diff = 0;
+      first_rx = 0;
+
       rxpos += spp;
       txpos += spp;
 
@@ -1128,6 +1230,7 @@ void *UE_thread(void *arg)
           rx_off_diff = 0;
           LTE_DL_FRAME_PARMS *frame_parms = &UE->lte_frame_parms; // for macro FRAME_LENGTH_COMPLEX_SAMPLES
 
+	  //	  LOG_I(PHY,"UE->rx_offset %d\n",UE->rx_offset);
           if ((UE->rx_offset > RX_OFF_MAX) && (start_rx_stream == 0)) {
             start_rx_stream=1;
             frame=0;
@@ -1148,11 +1251,20 @@ void *UE_thread(void *arg)
 #endif
             UE->rx_offset=0;
             tx_enabled = 1;
-          } else if ((UE->rx_offset < RX_OFF_MIN) && (start_rx_stream==1) && (rx_correction_timer == 0)) {
+          } else if ((UE->rx_offset<(FRAME_LENGTH_COMPLEX_SAMPLES/2)) &&
+		     (UE->rx_offset > RX_OFF_MIN) && 
+		     (start_rx_stream==1) && 
+		     (rx_correction_timer == 0)) {
             rx_off_diff = -UE->rx_offset + RX_OFF_MIN;
+	    LOG_D(PHY,"UE->rx_offset %d > %d, diff %d\n",UE->rx_offset,RX_OFF_MIN,rx_off_diff);
             rx_correction_timer = 5;
-          } else if ((UE->rx_offset > (FRAME_LENGTH_COMPLEX_SAMPLES-RX_OFF_MAX)) && (start_rx_stream==1) && (rx_correction_timer == 0)) {
-            rx_off_diff = FRAME_LENGTH_COMPLEX_SAMPLES-UE->rx_offset;
+          } else if ((UE->rx_offset>(FRAME_LENGTH_COMPLEX_SAMPLES/2)) && 
+		     (UE->rx_offset < (FRAME_LENGTH_COMPLEX_SAMPLES-RX_OFF_MIN)) &&
+		     (start_rx_stream==1) && 
+		     (rx_correction_timer == 0)) {   // moving to the left so drop rx_off_diff samples
+            rx_off_diff = FRAME_LENGTH_COMPLEX_SAMPLES - RX_OFF_MIN - UE->rx_offset;
+	    LOG_D(PHY,"UE->rx_offset %d < %d, diff %d\n",UE->rx_offset,FRAME_LENGTH_COMPLEX_SAMPLES-RX_OFF_MIN,rx_off_diff);(UE->rx_offset>(FRAME_LENGTH_COMPLEX_SAMPLES/2));
+
             rx_correction_timer = 5;
           }