diff --git a/openair1/PHY/CODING/lte_rate_matching.c b/openair1/PHY/CODING/lte_rate_matching.c
index 9aa18db9bda51d6dc95a159d023738148ec681aa..837665ceda1b3118f9faa64f2ec80e7709a58022 100644
--- a/openair1/PHY/CODING/lte_rate_matching.c
+++ b/openair1/PHY/CODING/lte_rate_matching.c
@@ -711,7 +711,7 @@ int lte_rate_matching_turbo_rx(uint32_t RTC,
 #endif
 
   if (Kmimo==0 || Mdlharq==0 || C==0 || Qm==0 || Nl==0) {
-    msg("lte_rate_matching.c: invalid parameters (Kmimo %d, Mdlharq %d, C %d, Qm %d, Nl %d\n",
+    printf("lte_rate_matching.c: invalid parameters (Kmimo %d, Mdlharq %d, C %d, Qm %d, Nl %d\n",
         Kmimo,Mdlharq,C,Qm,Nl);
     return(-1);
   }
diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c
index b4c964ce2e2f20e1e26e4e0ca404d693e3297497..36bb40f3475221acea54872b9692b9eb39a6bfd8 100644
--- a/openair1/PHY/INIT/lte_init.c
+++ b/openair1/PHY/INIT/lte_init.c
@@ -1231,7 +1231,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB,
   LTE_eNB_PUSCH** const eNB_pusch_vars  = phy_vars_eNB->lte_eNB_pusch_vars;
   LTE_eNB_SRS* const eNB_srs_vars       = phy_vars_eNB->lte_eNB_srs_vars;
   LTE_eNB_PRACH* const eNB_prach_vars   = &phy_vars_eNB->lte_eNB_prach_vars;
-  int i, j, eNB_id, UE_id;
+  int i, j, eNB_id, UE_id; 
 
   phy_vars_eNB->total_dlsch_bitrate = 0;
   phy_vars_eNB->total_transmitted_bits = 0;
diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c
index 2e485e66fa0a28db516f9a87e6f8b5636f70c6f0..541349fa55291d9921e6be2e9555bacd12edbd79 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci.c
@@ -139,7 +139,7 @@ uint16_t extract_crc(uint8_t *dci,uint8_t dci_len)
   printf("extract_crc: crc %x\n",crc);
   */
 #ifdef DEBUG_DCI_DECODING
-  msg("dci_crc (%x,%x,%x), dci_len&0x7=%d\n",dci[dci_len>>3],dci[1+(dci_len>>3)],dci[2+(dci_len>>3)],
+  LOG_I(PHY,"dci_crc (%x,%x,%x), dci_len&0x7=%d\n",dci[dci_len>>3],dci[1+(dci_len>>3)],dci[2+(dci_len>>3)],
       dci_len&0x7);
 #endif
 
@@ -152,7 +152,7 @@ uint16_t extract_crc(uint8_t *dci,uint8_t dci_len)
   }
 
 #ifdef DEBUG_DCI_DECODING
-  msg("dci_crc =>%x\n",crc16);
+  LOG_I(PHY,"dci_crc =>%x\n",crc16);
 #endif
 
   //  dci[(dci_len>>3)]&=(0xffff<<(dci_len&0xf));
@@ -396,11 +396,11 @@ void pdcch_demapping(uint16_t *llr,uint16_t *wbar,LTE_DL_FRAME_PARMS *frame_parm
 
       // if REG is allocated to PHICH, skip it
       if (check_phich_reg(frame_parms,kprime,lprime,mi) == 1) {
-        //msg("dci_demapping : skipping REG %d\n",(lprime==0)?kprime/6 : kprime>>2);
-        if ((lprime == 0)&&((kprime%6)==0))
-          re_offset0+=4;
+	//        printf("dci_demapping : skipping REG %d (RE %d)\n",(lprime==0)?kprime/6 : kprime>>2,kprime);
+	if ((lprime == 0)&&((kprime%6)==0))
+	  re_offset0+=4;
       } else { // not allocated to PHICH/PCFICH
-        //  msg("dci_demapping: REG %d\n",(lprime==0)?kprime/6 : kprime>>2);
+	//        printf("dci_demapping: REG %d\n",(lprime==0)?kprime/6 : kprime>>2);
         if (lprime == 0) {
           // first symbol, or second symbol+4 TX antennas skip pilots
           kprime_mod12 = kprime%12;
@@ -411,7 +411,7 @@ void pdcch_demapping(uint16_t *llr,uint16_t *wbar,LTE_DL_FRAME_PARMS *frame_parm
             for (i=0; i<4; i++) {
               wbar[mprime] = llr[tti_offset0+i];
 #ifdef DEBUG_DCI_DECODING
-              msg("[PHY] PDCCH demapping mprime %d => %d (symbol %d re %d) -> (%d,%d)\n",mprime,tti_offset0,symbol_offset,re_offset0,*(char*)&wbar[mprime],*(1+(char*)&wbar[mprime]));
+              LOG_I(PHY,"PDCCH demapping mprime %d.%d <= llr %d (symbol %d re %d) -> (%d,%d)\n",mprime/4,i,tti_offset0+i,symbol_offset,re_offset0,*(char*)&wbar[mprime],*(1+(char*)&wbar[mprime]));
 #endif
               mprime++;
               re_offset0++;
@@ -427,7 +427,7 @@ void pdcch_demapping(uint16_t *llr,uint16_t *wbar,LTE_DL_FRAME_PARMS *frame_parm
             for (i=0; i<4; i++) {
               wbar[mprime] = llr[tti_offset+i];
 #ifdef DEBUG_DCI_DECODING
-              msg("[PHY] PDCCH demapping mprime %d => %d (symbol %d re %d) -> (%d,%d)\n",mprime,tti_offset,symbol_offset,re_offset+i,*(char*)&wbar[mprime],*(1+(char*)&wbar[mprime]));
+              LOG_I(PHY,"PDCCH demapping mprime %d.%d <= llr %d (symbol %d re %d) -> (%d,%d)\n",mprime/4,i,tti_offset+i,symbol_offset,re_offset+i,*(char*)&wbar[mprime],*(1+(char*)&wbar[mprime]));
 #endif
               mprime++;
             }
@@ -466,8 +466,6 @@ void pdcch_deinterleaving(LTE_DL_FRAME_PARMS *frame_parms,uint16_t *z, uint16_t
 
   // undo permutation
   for (i=0; i<Mquad; i++) {
-    //wptr = &wtemp_rx[i<<2];
-    //wptr2 = &wbar[((i+frame_parms->Nid_cell)%Mquad)<<2];
     wptr = &wtemp_rx[((i+frame_parms->Nid_cell)%Mquad)<<2];
     wptr2 = &wbar[i<<2];
 
@@ -475,16 +473,16 @@ void pdcch_deinterleaving(LTE_DL_FRAME_PARMS *frame_parms,uint16_t *z, uint16_t
     wptr[1] = wptr2[1];
     wptr[2] = wptr2[2];
     wptr[3] = wptr2[3];
-    /*
-    msg("pdcch_deinterleaving (%p,%p): quad %d -> (%d,%d %d,%d %d,%d %d,%d)\n",wptr,wptr2,i,
-    ((char*)wptr2)[0],
-    ((char*)wptr2)[1],
-    ((char*)wptr2)[2],
-    ((char*)wptr2)[3],
-    ((char*)wptr2)[4],
-    ((char*)wptr2)[5],
-    ((char*)wptr2)[6],
-    ((char*)wptr2)[7]);
+    /*    
+    printf("pdcch_deinterleaving (%p,%p): quad %d (%d) -> (%d,%d %d,%d %d,%d %d,%d)\n",wptr,wptr2,i,(i+frame_parms->Nid_cell)%Mquad,
+	   ((char*)wptr2)[0],
+	   ((char*)wptr2)[1],
+	   ((char*)wptr2)[2],
+	   ((char*)wptr2)[3],
+	   ((char*)wptr2)[4],
+	   ((char*)wptr2)[5],
+	   ((char*)wptr2)[6],
+	   ((char*)wptr2)[7]);
     */
 
   }
@@ -514,7 +512,7 @@ void pdcch_deinterleaving(LTE_DL_FRAME_PARMS *frame_parms,uint16_t *z, uint16_t
         zptr[2] = wptr[2];
         zptr[3] = wptr[3];
 
-        /*
+	/*        
         printf("deinterleaving ; k %d, index-Nd %d  => (%d,%d,%d,%d,%d,%d,%d,%d)\n",k,(index-ND),
                ((int8_t *)wptr)[0],
                ((int8_t *)wptr)[1],
@@ -524,7 +522,7 @@ void pdcch_deinterleaving(LTE_DL_FRAME_PARMS *frame_parms,uint16_t *z, uint16_t
                ((int8_t *)wptr)[5],
                ((int8_t *)wptr)[6],
                ((int8_t *)wptr)[7]);
-        */
+	*/
         k++;
       }
 
@@ -545,7 +543,7 @@ void pdcch_deinterleaving(LTE_DL_FRAME_PARMS *frame_parms,uint16_t *z, uint16_t
      ((int8_t *)zptr)[5],
      ((int8_t *)zptr)[6],
      ((int8_t *)zptr)[7]);
-    */
+    */    
   }
 
 }
@@ -922,7 +920,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
 
   symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
 #ifdef DEBUG_DCI_DECODING
-  msg("[PHY] extract_rbs_single: symbol_mod %d\n",symbol_mod);
+  LOG_I(PHY, "extract_rbs_single: symbol_mod %d\n",symbol_mod);
 #endif
 
   for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
@@ -1392,7 +1390,7 @@ void pdcch_channel_compensation(int32_t **rxdataF_ext,
 
 
 #ifdef DEBUG_DCI_DECODING
-  msg("[PHY] PDCCH comp: symbol %d\n",symbol);
+  LOG_I(PHY, "PDCCH comp: symbol %d\n",symbol);
 #endif
 
   if (symbol==0)
@@ -1756,9 +1754,9 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars,
     for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++)
       avgs = cmax(avgs,avgP[(aarx<<1)+aatx]);
 
-  log2_maxh = (log2_approx(avgs)/2) + 2 + frame_parms->nb_antennas_rx - 1;
+  log2_maxh = (log2_approx(avgs)/2) + 6 + frame_parms->nb_antennas_rx - 1;
 #ifdef DEBUG_PHY
-  msg("[PDCCH] log2_maxh = %d (%d,%d)\n",log2_maxh,avgP[0],avgs);
+  LOG_I(PHY,"subframe %d: pdcch log2_maxh = %d (%d,%d)\n",subframe,log2_maxh,avgP[0],avgs);
 #endif
 
 
@@ -1946,16 +1944,17 @@ void pdcch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms,
   x2 = (subframe<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.8.2
 
   for (i=0; i<length; i++) {
-    if (i%32==0) {
+    if ((i&0x1f)==0) {
       s = lte_gold_generic(&x1, &x2, reset);
-      //printf("lte_gold[%d]=%x\n",i,s);
+      //      printf("lte_gold[%d]=%x\n",i,s);
       reset = 0;
     }
 
-    // take the quarter of the PBCH that corresponds to this frame
-    //    printf("unscrambling %d : e %d, c %d\n",i,llr[i],((s>>(i&0x1f))&1));
+    
+    //    printf("unscrambling %d : e %d, c %d => ",i,llr[i],((s>>(i&0x1f))&1));
     if (((s>>(i%32))&1)==0)
       llr[i] = -llr[i];
+    //    printf("%d\n",llr[i]);
 
   }
 }
@@ -2013,7 +2012,7 @@ uint8_t get_num_pdcch_symbols(uint8_t num_dci,
   }
 
 
-  msg("[PHY] dci.c: get_num_pdcch_symbols subframe %d FATAL, illegal numCCE %d (num_dci %d)\n",subframe,numCCE,num_dci);
+  LOG_I(PHY," dci.c: get_num_pdcch_symbols subframe %d FATAL, illegal numCCE %d (num_dci %d)\n",subframe,numCCE,num_dci);
   //for (i=0;i<num_dci;i++) {
   //  printf("dci_alloc[%d].L = %d\n",i,dci_alloc[i].L);
   //}
@@ -2093,10 +2092,10 @@ uint8_t generate_dci_top(uint8_t num_ue_spec_dci,
   y[1] = &yseq1[0];
 
   // reset all bits to <NIL>, here we set <NIL> elements as 2
-  //memset(e, 2, DCI_BITS_MAX);
-  // here we interpret NIL as a random QPSK sequence. That makes power estimation easier.
-  for (i=0; i<DCI_BITS_MAX; i++)
-    e[i]=0;//taus()&1;
+  memset(e, 2, DCI_BITS_MAX);
+  //  // here we interpret NIL as a random QPSK sequence. That makes power estimation easier.
+  //  for (i=0; i<DCI_BITS_MAX; i++)
+  //    e[i]=2;//taus()&1;
 
   e_ptr = e;
 
@@ -2173,7 +2172,6 @@ uint8_t generate_dci_top(uint8_t num_ue_spec_dci,
       //((int16_t*)(&(y[1][i])))[0] = (*e_ptr == 1) ? -gain_lin_QPSK : gain_lin_QPSK;
       ((int16_t*)(&(y[0][i])))[0] = (*e_ptr == 2) ? 0 : (*e_ptr == 1) ? -gain_lin_QPSK : gain_lin_QPSK;
       ((int16_t*)(&(y[1][i])))[0] = (*e_ptr == 2) ? 0 : (*e_ptr == 1) ? -gain_lin_QPSK : gain_lin_QPSK;
-
       e_ptr++;
       //((int16_t*)(&(y[0][i])))[1] = (*e_ptr == 1) ? -gain_lin_QPSK : gain_lin_QPSK;
       //((int16_t*)(&(y[1][i])))[1] = (*e_ptr == 1) ? -gain_lin_QPSK : gain_lin_QPSK;
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
index 549464b2cf236534ad2f0edd3b7f2f70ab0937f3..532570adf2a2ce92d341c1cf1397d3c12ecaaf41 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
@@ -45,7 +45,7 @@
 #include "SCHED/extern.h"
 #include "SIMULATION/TOOLS/defs.h"
 //#define DEBUG_DLSCH_DECODING
-
+ 
 
 void free_ue_dlsch(LTE_UE_DLSCH_t *dlsch)
 {
@@ -325,7 +325,7 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
     }
 
 #ifdef DEBUG_DLSCH_DECODING
-    msg("f1 %d, f2 %d, F %d\n",f1f2mat_old[2*iind],f1f2mat_old[1+(2*iind)],(r==0) ? harq_process->F : 0);
+    printf("f1 %d, f2 %d, F %d\n",f1f2mat_old[2*iind],f1f2mat_old[1+(2*iind)],(r==0) ? harq_process->F : 0);
 #endif
 
     start_meas(dlsch_rate_unmatching_stats);
@@ -363,7 +363,7 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
                                    r,
                                    &E)==-1) {
       stop_meas(dlsch_rate_unmatching_stats);
-      msg("dlsch_decoding.c: Problem in rate_matching\n");
+      LOG_E(PHY,"dlsch_decoding.c: Problem in rate_matching\n");
       return(dlsch->max_turbo_iterations);
     } else
       stop_meas(dlsch_rate_unmatching_stats);
@@ -371,7 +371,7 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
     r_offset += E;
 
     /*
-    msg("Subblock deinterleaving, d %p w %p\n",
+    printf("Subblock deinterleaving, d %p w %p\n",
      harq_process->d[r],
      harq_process->w);
     */
@@ -389,29 +389,29 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
               write_output("decoder_in.m","dec",&harq_process->d[0][96],(3*8*Kr_bytes)+12,1,0);
     }
 
-    msg("decoder input(segment %d) :",r);
+    printf("decoder input(segment %d) :",r);
     int i; for (i=0;i<(3*8*Kr_bytes)+12;i++)
-      msg("%d : %d\n",i,harq_process->d[r][96+i]);
-      msg("\n");*/
+      printf("%d : %d\n",i,harq_process->d[r][96+i]);
+      printf("\n");*/
 #endif
 
 
-    //    msg("Clearing c, %p\n",harq_process->c[r]);
+    //    printf("Clearing c, %p\n",harq_process->c[r]);
     memset(harq_process->c[r],0,Kr_bytes);
 
-    //    msg("done\n");
+    //    printf("done\n");
     if (harq_process->C == 1)
       crc_type = CRC24_A;
     else
       crc_type = CRC24_B;
 
     /*
-    msg("decoder input(segment %d)\n",r);
+    printf("decoder input(segment %d)\n",r);
     for (i=0;i<(3*8*Kr_bytes)+12;i++)
       if ((harq_process->d[r][96+i]>7) ||
     (harq_process->d[r][96+i] < -8))
-    msg("%d : %d\n",i,harq_process->d[r][96+i]);
-    msg("\n");
+    printf("%d : %d\n",i,harq_process->d[r][96+i]);
+    printf("\n");
     */
 
     if (err_flag == 0) {
@@ -446,7 +446,7 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
 
 
     if ((err_flag == 0) && (ret>=(1+dlsch->max_turbo_iterations))) {// a Code segment is in error so break;
-      //msg("CRC failed, segment %d\n",r);
+      //printf("CRC failed, segment %d\n",r);
       err_flag = 1;
     }
 
@@ -479,9 +479,9 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
   offset = 0;
 
   /*
-  msg("harq_pid %d\n",harq_pid);
-  msg("F %d, Fbytes %d\n",harq_process->F,harq_process->F>>3);
-  msg("C %d\n",harq_process->C);
+  printf("harq_pid %d\n",harq_pid);
+  printf("F %d, Fbytes %d\n",harq_process->F,harq_process->F>>3);
+  printf("C %d\n",harq_process->C);
   */
   for (r=0; r<harq_process->C; r++) {
     if (r<harq_process->Cminus)
@@ -497,9 +497,9 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
              &harq_process->c[0][(harq_process->F>>3)],
              Kr_bytes - (harq_process->F>>3)- ((harq_process->C>1)?3:0));
       offset = Kr_bytes - (harq_process->F>>3) - ((harq_process->C>1)?3:0);
-      //            msg("copied %d bytes to b sequence (harq_pid %d)\n",
+      //            printf("copied %d bytes to b sequence (harq_pid %d)\n",
       //          Kr_bytes - (harq_process->F>>3),harq_pid);
-      //          msg("b[0] = %x,c[%d] = %x\n",
+      //          printf("b[0] = %x,c[%d] = %x\n",
       //      harq_process->b[0],
       //      harq_process->F>>3,
       //      harq_process->c[0][(harq_process->F>>3)]);
@@ -689,7 +689,7 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue,
   case 0: // SI
     dlsch_ue = phy_vars_ue->dlsch_ue_SI[eNB_id];
     dlsch_eNB = PHY_vars_eNB_g[eNB_id2][CC_id]->dlsch_eNB_SI;
-    //    msg("Doing SI: TBS %d\n",dlsch_ue->harq_processes[0]->TBS>>3);
+    //    printf("Doing SI: TBS %d\n",dlsch_ue->harq_processes[0]->TBS>>3);
     memcpy(dlsch_ue->harq_processes[0]->b,dlsch_eNB->harq_processes[0]->b,dlsch_ue->harq_processes[0]->TBS>>3);
 #ifdef DEBUG_DLSCH_DECODING
     LOG_D(PHY,"SI Decoded\n");
@@ -790,9 +790,9 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue,
 #ifdef DEBUG_DLSCH_DECODING
 
     for (i=0; i<dlsch_ue->harq_processes[0]->TBS>>3; i++)
-      msg("%x.",dlsch_eNB->harq_processes[0]->b[i]);
+      printf("%x.",dlsch_eNB->harq_processes[0]->b[i]);
 
-    msg("\n");
+    printf("\n");
 #endif
 
     /*
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
index 5012d0ac3f4953b78055e5a6981d771dae6beda6..376ba35ed3556a299c675fd2d8537c68e9fdf2ab 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
@@ -1007,7 +1007,7 @@ int allocate_REs_in_RB_MCH(mod_sym_t **txdataF,
   uint8_t first_re,last_re;
   int inc;
 #ifdef DEBUG_DLSCH_MODULATION
-  printf("allocate_re_MCH (mod %d): symbol_offset %d re_offset %d (%d), jj %d -> %d,%d\n",mod_order,symbol_offset,re_offset,skip_dc,*jj, x0[*jj], x0[1+*jj]);
+  printf("allocate_re_MCH (mod %d): symbol_offset %d re_offset %d (%d), jj %d -> %d,%d, gain_lin_QPSK %d,txdataF %p\n",mod_order,symbol_offset,re_offset,skip_dc,*jj, x0[*jj], x0[1+*jj],gain_lin_QPSK,&txdataF[0][symbol_offset]);
 #endif
 
   last_re=12;
@@ -1035,7 +1035,7 @@ int allocate_REs_in_RB_MCH(mod_sym_t **txdataF,
     switch (mod_order) {
     case 2:  //QPSK
 
-      //      printf("%d : %d,%d => ",tti_offset,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
+      //            printf("%d : %d,%d => ",tti_offset,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
       for (aa=0; aa<frame_parms->nb_antennas_tx; aa++)
         ((int16_t*)&txdataF[aa][tti_offset])[0] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i
 
@@ -1046,7 +1046,7 @@ int allocate_REs_in_RB_MCH(mod_sym_t **txdataF,
 
       *jj = *jj + 1;
 
-      //  printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
+      //      printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
       break;
 
     case 4:  //16QAM
@@ -1498,7 +1498,6 @@ int mch_modulation(mod_sym_t **txdataF,
                    LTE_DL_FRAME_PARMS *frame_parms,
                    LTE_eNB_DLSCH_t *dlsch)
 {
-
   uint8_t nsymb,nsymb_pmch;
   uint32_t i,jj,re_allocated,symbol_offset;
   uint16_t l,rb,re_offset;
@@ -1526,7 +1525,7 @@ int mch_modulation(mod_sym_t **txdataF,
   for (l=2; l<nsymb_pmch; l++) {
 
 #ifdef DEBUG_DLSCH_MODULATION
-    msg("Generating MCH (mod %d) in %d\n",mod_order, l);
+    printf("Generating MCH (mod %d) in subframe %d for symbol %d\n",mod_order, subframe_offset,l);
 #endif
 
     re_offset = frame_parms->first_carrier_offset;
@@ -1552,7 +1551,7 @@ int mch_modulation(mod_sym_t **txdataF,
       else
         qam_table_s = NULL;
 
-      //      printf("Allocated rb %d, subframe_offset %d\n",rb,subframe_offset);
+      //      printf("Allocated rb %d, subframe_offset %d,amp %d\n",rb,subframe_offset,amp);
       allocate_REs_in_RB_MCH(txdataF,
                              &jj,
                              re_offset,
diff --git a/openair1/PHY/LTE_TRANSPORT/pcfich.c b/openair1/PHY/LTE_TRANSPORT/pcfich.c
index b2c8ffb677606ac40e75679263b393677bb017d5..8e9038666bd2dc1ce704889c70d71d55310a6267 100644
--- a/openair1/PHY/LTE_TRANSPORT/pcfich.c
+++ b/openair1/PHY/LTE_TRANSPORT/pcfich.c
@@ -78,9 +78,9 @@ void generate_pcfich_reg_mapping(LTE_DL_FRAME_PARMS *frame_parms)
     first_reg = pcfich_reg[3];
   }
 
-#ifdef DEBUG_PCFICH
-  msg("[PHY] pcfich_reg : %d,%d,%d,%d\n",pcfich_reg[0],pcfich_reg[1],pcfich_reg[2],pcfich_reg[3]);
-#endif
+  //#ifdef DEBUG_PCFICH
+  printf("pcfich_reg : %d,%d,%d,%d\n",pcfich_reg[0],pcfich_reg[1],pcfich_reg[2],pcfich_reg[3]);
+  //#endif
 }
 
 void pcfich_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
diff --git a/openair1/PHY/LTE_TRANSPORT/phich.c b/openair1/PHY/LTE_TRANSPORT/phich.c
index b7f0e3bda423c58d7e8d6c57318388492e2c8d6c..d9a67cb0ef96482c55bf0403f6caa48f78494f4c 100644
--- a/openair1/PHY/LTE_TRANSPORT/phich.c
+++ b/openair1/PHY/LTE_TRANSPORT/phich.c
@@ -291,6 +291,7 @@ void generate_phich_reg_mapping(LTE_DL_FRAME_PARMS *frame_parms)
   // compute Ngroup_PHICH (see formula at beginning of Section 6.9 in 36-211
   Ngroup_PHICH = (frame_parms->phich_config_common.phich_resource*frame_parms->N_RB_DL)/48;
 
+
   if (((frame_parms->phich_config_common.phich_resource*frame_parms->N_RB_DL)%48) > 0)
     Ngroup_PHICH++;
 
@@ -299,16 +300,25 @@ void generate_phich_reg_mapping(LTE_DL_FRAME_PARMS *frame_parms)
     Ngroup_PHICH<<=1;
   }
 
-#ifdef DEBUG_PHICH
-  LOG_D(PHY,"Ngroup_PHICH %d (phich_config_common.phich_resource %d,NidCell %d,Ncp %d, frame_type %d)\n",((frame_parms->Ncp == 0)?Ngroup_PHICH:(Ngroup_PHICH>>1)),
-        frame_parms->phich_config_common.phich_resource,
-        frame_parms->Nid_cell,frame_parms->Ncp,frame_parms->frame_type);
-#endif
+  //#ifdef DEBUG_PHICH
+  printf("Ngroup_PHICH %d (phich_config_common.phich_resource %d,phich_config_common.phich_duration %s, NidCell %d,Ncp %d, frame_type %d), smallest pcfich REG %d, n0 %d, n1 %d (first PHICH REG %d)\n",
+	 ((frame_parms->Ncp == NORMAL)?Ngroup_PHICH:(Ngroup_PHICH>>1)),
+	 frame_parms->phich_config_common.phich_resource,
+	 frame_parms->phich_config_common.phich_duration==normal?"normal":"extended",
+	 frame_parms->Nid_cell,frame_parms->Ncp,frame_parms->frame_type,
+	 pcfich_reg[frame_parms->pcfich_first_reg_idx],
+	 n0,
+	 n1,
+	 ((frame_parms->Nid_cell*n0)/n1)%n0);
+  //#endif
 
-  // This is the algorithm from Section 6.9.3 in 36-211
-  for (mprime=0; mprime<((frame_parms->Ncp == 0)?Ngroup_PHICH:(Ngroup_PHICH>>1)); mprime++) {
+  // This is the algorithm from Section 6.9.3 in 36-211, it works only for normal PHICH duration for now ...
 
-    if (frame_parms->Ncp==0) { // normal prefix
+  for (mprime=0; 
+       mprime<((frame_parms->Ncp == NORMAL)?Ngroup_PHICH:(Ngroup_PHICH>>1)); 
+       mprime++) {
+
+    if (frame_parms->phich_config_common.phich_duration==normal) { // normal PHICH duration
 
       frame_parms->phich_reg[mprime][0] = (frame_parms->Nid_cell + mprime)%n0;
 
@@ -326,9 +336,10 @@ void generate_phich_reg_mapping(LTE_DL_FRAME_PARMS *frame_parms)
 
       frame_parms->phich_reg[mprime][1] = (frame_parms->Nid_cell + mprime + (n0/3))%n0;
 
+      
       if (frame_parms->phich_reg[mprime][1]>=pcfich_reg[frame_parms->pcfich_first_reg_idx])
         frame_parms->phich_reg[mprime][1]++;
-
+      
       if (frame_parms->phich_reg[mprime][1]>=pcfich_reg[(frame_parms->pcfich_first_reg_idx+1)&3])
         frame_parms->phich_reg[mprime][1]++;
 
@@ -337,9 +348,10 @@ void generate_phich_reg_mapping(LTE_DL_FRAME_PARMS *frame_parms)
 
       if (frame_parms->phich_reg[mprime][1]>=pcfich_reg[(frame_parms->pcfich_first_reg_idx+3)&3])
         frame_parms->phich_reg[mprime][1]++;
+      
 
       frame_parms->phich_reg[mprime][2] = (frame_parms->Nid_cell + mprime + (2*n0/3))%n0;
-
+      
       if (frame_parms->phich_reg[mprime][2]>=pcfich_reg[frame_parms->pcfich_first_reg_idx])
         frame_parms->phich_reg[mprime][2]++;
 
@@ -351,11 +363,11 @@ void generate_phich_reg_mapping(LTE_DL_FRAME_PARMS *frame_parms)
 
       if (frame_parms->phich_reg[mprime][2]>=pcfich_reg[(frame_parms->pcfich_first_reg_idx+3)&3])
         frame_parms->phich_reg[mprime][2]++;
-
-#ifdef DEBUG_PHICH
-      LOG_D(PHY,"phich_reg :%d => %d,%d,%d\n",mprime,frame_parms->phich_reg[mprime][0],frame_parms->phich_reg[mprime][1],frame_parms->phich_reg[mprime][2]);
-#endif
-    } else { // extended prefix
+      
+      //#ifdef DEBUG_PHICH
+      printf("phich_reg :%d => %d,%d,%d\n",mprime,frame_parms->phich_reg[mprime][0],frame_parms->phich_reg[mprime][1],frame_parms->phich_reg[mprime][2]);
+      //#endif
+    } else { // extended PHICH duration
       frame_parms->phich_reg[mprime<<1][0] = (frame_parms->Nid_cell + mprime)%n0;
       frame_parms->phich_reg[1+(mprime<<1)][0] = (frame_parms->Nid_cell + mprime)%n0;
 
@@ -364,10 +376,10 @@ void generate_phich_reg_mapping(LTE_DL_FRAME_PARMS *frame_parms)
 
       frame_parms->phich_reg[1+(mprime<<1)][1] = ((frame_parms->Nid_cell*n1/n0) + mprime + (n1/3))%n1;
       frame_parms->phich_reg[1+(mprime<<1)][2] = ((frame_parms->Nid_cell*n2/n0) + mprime + (2*n2/3))%n2;
-#ifdef DEBUG_PHICH
-      LOG_D(PHY,"phich_reg :%d => %d,%d,%d\n",mprime<<1,frame_parms->phich_reg[mprime<<1][0],frame_parms->phich_reg[mprime][1],frame_parms->phich_reg[mprime][2]);
-      LOG_D(PHY,"phich_reg :%d => %d,%d,%d\n",1+(mprime<<1),frame_parms->phich_reg[1+(mprime<<1)][0],frame_parms->phich_reg[1+(mprime<<1)][1],frame_parms->phich_reg[1+(mprime<<1)][2]);
-#endif
+      //#ifdef DEBUG_PHICH
+      printf("phich_reg :%d => %d,%d,%d\n",mprime<<1,frame_parms->phich_reg[mprime<<1][0],frame_parms->phich_reg[mprime][1],frame_parms->phich_reg[mprime][2]);
+      printf("phich_reg :%d => %d,%d,%d\n",1+(mprime<<1),frame_parms->phich_reg[1+(mprime<<1)][0],frame_parms->phich_reg[1+(mprime<<1)][1],frame_parms->phich_reg[1+(mprime<<1)][2]);
+      //#endif
     }
   } // mprime loop
 }  // num_pdcch_symbols loop
diff --git a/openair1/PHY/TOOLS/Makefile b/openair1/PHY/TOOLS/Makefile
index 1a18e6e0610feae9eec7d86960647fe14875dac5..d50cde372f2e9694172d33776a58567f3961f834 100644
--- a/openair1/PHY/TOOLS/Makefile
+++ b/openair1/PHY/TOOLS/Makefile
@@ -1,5 +1,5 @@
 lte_dfts: lte_dfts.c
-	gcc -O3 -msse4.1 -o lte_dfts lte_dfts.c fft.c file_output.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR/COMMON -DUSER_MODE -DMR_MAIN -DNB_ANTENNAS_RX=1 # -DD256STATS #-DD64STATS
+	gcc -O3 -mavx2 -o lte_dfts lte_dfts.c time_meas.c file_output.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR/COMMON -DUSER_MODE -DMR_MAIN -DNB_ANTENNAS_RX=1 # -DD256STATS #-DD64STATS
 
 dft_cycles: lte_dfts
 	./lte_dfts | egrep cycles
diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c
index f2eb3f0e65aaa55bf2431a746d68b0f6c71a9667..22649ae7b348dd060874b4b28e26628cd4c22adc 100644
--- a/openair1/PHY/TOOLS/lte_dfts.c
+++ b/openair1/PHY/TOOLS/lte_dfts.c
@@ -53,8 +53,11 @@
 #define print_shorts(s,x) printf("%s %d,%d,%d,%d,%d,%d,%d,%d\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7])
 #define print_ints(s,x) printf("%s %d %d %d %d\n",s,(x)[0],(x)[1],(x)[2],(x)[3])
 
-static int16_t conjugatedft[8] __attribute__((aligned(16))) = {-1,1,-1,1,-1,1,-1,1} ;
+#ifdef AVX2
+static int16_t conjugatedft2[16] __attribute__((aligned(32))) = {1,1,1,1,1,1,1,1,-1,1,-1,1,-1,1,-1,1,-1,1};
+#endif
 
+static int16_t conjugatedft[8] __attribute__((aligned(16))) = {-1,1,-1,1,-1,1,-1,1} ;
 
 static short reflip[8]  __attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1};
 
@@ -857,8 +860,23 @@ static inline void bfly4_tw1(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3,
 static inline void bfly4_tw1(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3,
                              __m128i *y0,__m128i *y1,__m128i *y2,__m128i *y3)
 {
-  register __m128i x1_flip,x3_flip;
+  register __m128i x1_flip,x3_flip,x02t,x13t;
+  register __m128i complex_shuffle = _mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2);
+
+  x02t    = _mm_adds_epi16(*(x0),*(x2));
+  x13t    = _mm_adds_epi16(*(x1),*(x3));
+  *(y0)   = _mm_adds_epi16(x02t,x13t);
+  *(y2)   = _mm_subs_epi16(x02t,x13t);
+  x1_flip = _mm_sign_epi16(*(x1),*(__m128i*)conjugatedft);
+  x1_flip = _mm_shuffle_epi8(x1_flip,complex_shuffle);
+  x3_flip = _mm_sign_epi16(*(x3),*(__m128i*)conjugatedft);
+  x3_flip = _mm_shuffle_epi8(x3_flip,complex_shuffle);
+  x02t    = _mm_subs_epi16(*(x0),*(x2));
+  x13t    = _mm_subs_epi16(x1_flip,x3_flip);
+  *(y1)   = _mm_adds_epi16(x02t,x13t);  // x0 + x1f - x2 - x3f
+  *(y3)   = _mm_subs_epi16(x02t,x13t);  // x0 - x1f - x2 + x3f
 
+  /*
   *(y0) = _mm_adds_epi16(*(x0),_mm_adds_epi16(*(x1),_mm_adds_epi16(*(x2),*(x3))));
   x1_flip = _mm_sign_epi16(*(x1),*(__m128i*)conjugatedft);
   x1_flip = _mm_shuffle_epi8(x1_flip,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2));
@@ -867,7 +885,7 @@ static inline void bfly4_tw1(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3,
   *(y1)   = _mm_adds_epi16(*(x0),_mm_subs_epi16(x1_flip,_mm_adds_epi16(*(x2),x3_flip)));
   *(y2)   = _mm_subs_epi16(*(x0),_mm_subs_epi16(*(x1),_mm_subs_epi16(*(x2),*(x3))));
   *(y3)   = _mm_subs_epi16(*(x0),_mm_adds_epi16(x1_flip,_mm_subs_epi16(*(x2),x3_flip)));
-
+  */
 }
 
 #elif defined(__arm__)
@@ -1417,6 +1435,9 @@ static inline void dft16(int16_t *x,int16_t *y)
 
   __m128i *tw16a_128=(__m128i *)tw16a,*tw16b_128=(__m128i *)tw16b,*x128=(__m128i *)x,*y128=(__m128i *)y;
 
+
+
+#ifndef AVX2
   /*  This is the original version before unrolling
 
   bfly4_tw1(x128,x128+1,x128+2,x128+3,
@@ -1431,6 +1452,7 @@ static inline void dft16(int16_t *x,int16_t *y)
 
   register __m128i x1_flip,x3_flip,x02t,x13t;
   register __m128i ytmp0,ytmp1,ytmp2,ytmp3,xtmp0,xtmp1,xtmp2,xtmp3;
+  register __m128i complex_shuffle = _mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2);
 
   // First stage : 4 Radix-4 butterflies without input twiddles
 
@@ -1439,9 +1461,9 @@ static inline void dft16(int16_t *x,int16_t *y)
   xtmp0   = _mm_adds_epi16(x02t,x13t);
   xtmp2   = _mm_subs_epi16(x02t,x13t);
   x1_flip = _mm_sign_epi16(x128[1],*(__m128i*)conjugatedft);
-  x1_flip = _mm_shuffle_epi8(x1_flip,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2));
+  x1_flip = _mm_shuffle_epi8(x1_flip,complex_shuffle);
   x3_flip = _mm_sign_epi16(x128[3],*(__m128i*)conjugatedft);
-  x3_flip = _mm_shuffle_epi8(x3_flip,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2));
+  x3_flip = _mm_shuffle_epi8(x3_flip,complex_shuffle);
   x02t    = _mm_subs_epi16(x128[0],x128[2]);
   x13t    = _mm_subs_epi16(x1_flip,x3_flip);
   xtmp1   = _mm_adds_epi16(x02t,x13t);  // x0 + x1f - x2 - x3f
@@ -1474,6 +1496,31 @@ static inline void dft16(int16_t *x,int16_t *y)
   y128[1] = _mm_adds_epi16(x02t,x13t);  // x0 + x1f - x2 - x3f
   y128[3] = _mm_subs_epi16(x02t,x13t);  // x0 - x1f - x2 + x3f
 
+#else
+
+  //  x02t    = _mm_adds_epi16(x128[0],x128[2]);
+  //  x13t    = _mm_adds_epi16(x128[1],x128[3]);
+
+  xt      = _mm256_adds_epi16(x256[0],x256[1]);
+
+  xtmp0   = _mm_adds_epi16(x02t,x13t);
+  xtmp2   = _mm_subs_epi16(x02t,x13t);
+
+  x13_flip
+  x1_flip = _mm_sign_epi16(x128[1],*(__m128i*)conjugatedft);
+  x1_flip = _mm_shuffle_epi8(x1_flip,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2));
+  x3_flip = _mm_sign_epi16(x128[3],*(__m128i*)conjugatedft);
+  x3_flip = _mm_shuffle_epi8(x3_flip,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2));
+
+  //  x02t    = _mm_subs_epi16(x128[0],x128[2]);
+  //  x13t    = _mm_subs_epi16(x1_flip,x3_flip);
+  xt      = _mm256_subs_epi16(x256flip0,x256flip1);
+
+  xtmp1   = _mm_adds_epi16(x02t,x13t);  // x0 + x1f - x2 - x3f
+  xtmp3   = _mm_subs_epi16(x02t,x13t);  // x0 - x1f - x2 + x3f
+
+
+#endif
 
 #elif defined(__arm__)
 
@@ -16044,7 +16091,6 @@ void dft1200(int16_t *x,int16_t *y,unsigned char scale_flag)
 #include <string.h>
 #include <stdio.h>
 
-int opp_enabled=1;
 
 int main(int argc, char**argv)
 {
@@ -16057,7 +16103,7 @@ int main(int argc, char**argv)
   int i;
 
   set_taus_seed(0);
-
+  opp_enabled = 1;
  /* 
     ((int16_t *)&tw0)[0] = 32767;
     ((int16_t *)&tw0)[1] = 0;
@@ -16423,7 +16469,7 @@ int main(int argc, char**argv)
 
   }
 
-  printf("\n\n64-point (%f cycles)\n",(double)ts.diff/(double)ts.trials);
+  printf("\n\n64-point (%f cycles, #trials %d)\n",(double)ts.diff/(double)ts.trials,ts.trials);
   write_output("x64.m","x64",x,64,1,1);
   write_output("y64.m","y64",y,64,1,1);
 
diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h
index b73d804ad86a73bdc60dbcdb899af7dbaf845f4d..8519b12b9eeb1866212142662d76b809cd388839 100755
--- a/openair1/PHY/defs.h
+++ b/openair1/PHY/defs.h
@@ -127,7 +127,7 @@ static inline void* malloc16_clear( size_t size )
 
 #define NB_BANDS_MAX 8
 
-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} runmode_t;
+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,
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index c919ea1506c01dc39815a1c94d80427cefcc1830..24e40f472bf9d530e9ad664ad0ece82641aa742a 100755
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -318,10 +318,11 @@ int get_nCCE_offset(const unsigned char L, const int nCCE, const int common_dci,
   if (common_dci == 1) {
     // check CCE(0 ... L-1)
     nb_candidates = (L==4) ? 4 : 2;
+    nb_candidates = min(nb_candidates,nCCE/L);
 
-    for (m = 0 ; m < nb_candidates ; m++) {
+    for (m = nb_candidates-1 ; m >=0 ; m--) {
       search_space_free = 1;
-
+      printf("Checking m %d\n",m);
       for (l=0; l<L; l++) {
         if (CCE_table[(m*L) + l] == 1) {
           search_space_free = 0;
@@ -332,7 +333,7 @@ int get_nCCE_offset(const unsigned char L, const int nCCE, const int common_dci,
       if (search_space_free == 1) {
         for (l=0; l<L; l++)
           CCE_table[(m*L)+l]=1;
-
+	printf("OK");
         return(m*L);
       }
     }
diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c
index 44ce052448de0d4a097ca2a5de55f420c9ff5f40..be4405ae1ee46279bf8476cbf86bf1f40b4954e2 100755
--- a/openair1/SCHED/phy_procedures_lte_ue.c
+++ b/openair1/SCHED/phy_procedures_lte_ue.c
@@ -1961,6 +1961,8 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
              (phy_vars_ue->lte_frame_parms.mode1_flag == 1) ? SISO : ALAMOUTI,
              phy_vars_ue->high_speed_flag,
              phy_vars_ue->is_secondary_ue);
+
+
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_OUT);
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DCI_DECODING, VCD_FUNCTION_IN);
     dci_cnt = dci_decoding_procedure(phy_vars_ue,
@@ -2107,8 +2109,11 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
 
     //if ((phy_vars_ue->UE_mode[eNB_id] != PRACH) &&
     //    (dci_alloc_rx[i].rnti != 0x1234) &&
-    if((dci_alloc_rx[i].rnti == phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti) &&
-        (dci_alloc_rx[i].format != format0)) {
+
+    if ((phy_vars_ue->UE_mode[eNB_id]>PRACH) &&
+	(dci_alloc_rx[i].rnti == phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti) &&
+	(dci_alloc_rx[i].format != format0)) {
+      
 #ifdef DEBUG_PHY_PROC
       LOG_D(PHY,"[UE  %d][DCI][PDSCH %x] frame %d, subframe %d: format %d, num_pdcch_symbols %d, nCCE %d, total CCEs %d\n",
             phy_vars_ue->Mod_id,dci_alloc_rx[i].rnti,
@@ -2118,14 +2123,10 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
             phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->nCCE[subframe_rx],
             get_nCCE(3,&phy_vars_ue->lte_frame_parms,get_mi(&phy_vars_ue->lte_frame_parms,0)));
 
-      /*
-      if (((frame_rx%100) == 0) || (frame_rx < 20))
-      dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
-      */
 
 #endif
 #ifdef DIAG_PHY
-
+      
       if (!(((subframe_rx == 7) && (dci_alloc_rx[i].format == format1E_2A_M10PRB)) ||
             ((subframe_rx == 7) && (dci_alloc_rx[i].format == format1)))) {
         LOG_E(PHY,"[UE  %d][DIAG] frame %d, subframe %d: should not have received C_RNTI Format %d!\n",phy_vars_ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].format);
@@ -2134,40 +2135,40 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
         VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_OUT);
         return(-1);
       }
-
+      
 #endif
-
+      
       //      dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
       if (generate_ue_dlsch_params_from_dci(subframe_rx,
-                                            (void *)&dci_alloc_rx[i].dci_pdu,
-                                            phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,
-                                            dci_alloc_rx[i].format,
-                                            phy_vars_ue->dlsch_ue[eNB_id],
-                                            &phy_vars_ue->lte_frame_parms,
-                                            phy_vars_ue->pdsch_config_dedicated,
-                                            SI_RNTI,
-                                            0,
-                                            P_RNTI)==0) {
+					    (void *)&dci_alloc_rx[i].dci_pdu,
+					    phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,
+					    dci_alloc_rx[i].format,
+					    phy_vars_ue->dlsch_ue[eNB_id],
+					    &phy_vars_ue->lte_frame_parms,
+					    phy_vars_ue->pdsch_config_dedicated,
+					    SI_RNTI,
+					    0,
+					    P_RNTI)==0) {
 
 #ifdef DIAG_PHY
-
+	
         if (phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->mcs != (((frame_rx%1024)%28))) {
           LOG_E(PHY,"[UE  %d][DIAG] frame %d, subframe %d: wrong mcs!\n",phy_vars_ue->Mod_id,frame_rx,subframe_rx,
                 phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->mcs);
           dump_dci(&phy_vars_ue->lte_frame_parms,(void *)&dci_alloc_rx[i]);
         }
-
+	
 #endif
-
-
+	
+	
         phy_vars_ue->dlsch_received[eNB_id]++;
-
+	
 #ifdef DEBUG_PHY_PROC
         LOG_D(PHY,"[UE  %d] Generated UE DLSCH C_RNTI format %d\n",phy_vars_ue->Mod_id,dci_alloc_rx[i].format);
         dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
         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);
 #endif
-
+	
         // we received a CRNTI, so we're in PUSCH
         if (phy_vars_ue->UE_mode[eNB_id] != PUSCH) {
 #ifdef DEBUG_PHY_PROC
@@ -2291,17 +2292,18 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
       phy_vars_ue->ulsch_no_allocation_counter[eNB_id] = 0;
       //dump_dci(&phy_vars_ue->lte_frame_parms,&dci_alloc_rx[i]);
 
-      if (generate_ue_ulsch_params_from_dci((void *)&dci_alloc_rx[i].dci_pdu,
-                                            phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,
-                                            subframe_rx,
-                                            format0,
-                                            phy_vars_ue,
-                                            SI_RNTI,
-                                            0,
-                                            P_RNTI,
-                                            CBA_RNTI,
-                                            eNB_id,
-                                            0)==0) {
+      if ((phy_vars_ue->UE_mode[eNB_id] > PRACH) &&
+	  (generate_ue_ulsch_params_from_dci((void *)&dci_alloc_rx[i].dci_pdu,
+					     phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,
+					     subframe_rx,
+					     format0,
+					     phy_vars_ue,
+					     SI_RNTI,
+					     0,
+					     P_RNTI,
+					     CBA_RNTI,
+					     eNB_id,
+					     0)==0)) {
 
 #ifdef DEBUG_PHY_PROC
         LOG_D(PHY,"[UE  %d] Generate UE ULSCH C_RNTI format 0 (subframe %d)\n",phy_vars_ue->Mod_id,subframe_rx);
@@ -2336,17 +2338,18 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
       phy_vars_ue->ulsch_no_allocation_counter[eNB_id] = 0;
       //dump_dci(&phy_vars_ue->lte_frame_parms,&dci_alloc_rx[i]);
 
-      if (generate_ue_ulsch_params_from_dci((void *)&dci_alloc_rx[i].dci_pdu,
-                                            phy_vars_ue->ulsch_ue[eNB_id]->cba_rnti[0],
-                                            subframe_rx,
-                                            format0,
-                                            phy_vars_ue,
-                                            SI_RNTI,
-                                            0,
-                                            P_RNTI,
-                                            CBA_RNTI,
-                                            eNB_id,
-                                            0)==0) {
+      if ((phy_vars_ue->UE_mode[eNB_id] > PRACH) &&
+	  (generate_ue_ulsch_params_from_dci((void *)&dci_alloc_rx[i].dci_pdu,
+					     phy_vars_ue->ulsch_ue[eNB_id]->cba_rnti[0],
+					     subframe_rx,
+					     format0,
+					     phy_vars_ue,
+					     SI_RNTI,
+					     0,
+					     P_RNTI,
+					     CBA_RNTI,
+					     eNB_id,
+					     0)==0)) {
 
 #ifdef DEBUG_PHY_PROC
         LOG_D(PHY,"[UE  %d] Generate UE ULSCH CBA_RNTI format 0 (subframe %d)\n",phy_vars_ue->Mod_id,subframe_rx);
@@ -2372,7 +2375,18 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
     }
 
   }
-
+/*
+  if ((frame_rx > 1000) && ((frame_rx&1)==0) && (subframe_rx == 5)) {
+    write_output("rxsig0.m","rxs0", phy_vars_ue->lte_ue_common_vars.rxdata[0],10*phy_vars_ue->lte_frame_parms.samples_per_tti,1,1);
+    write_output("rxsigF0.m","rxsF0", phy_vars_ue->lte_ue_common_vars.rxdataF[0],phy_vars_ue->lte_frame_parms.ofdm_symbol_size*2*((phy_vars_ue->lte_frame_parms.Ncp==0)?14:12),2,1);
+    write_output("H00.m","h00",&(phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[0][0][0]),((phy_vars_ue->lte_frame_parms.Ncp==0)?7:6)*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size),1,1);
+
+    write_output("pdcch_rxF_ext0.m","pdcch_rxF_ext0",phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->rxdataF_ext[0],3*12*phy_vars_ue->lte_frame_parms.N_RB_DL,1,1);
+    write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->rxdataF_comp[0],4*12*phy_vars_ue->lte_frame_parms.N_RB_DL,1,1);
+    write_output("pdcch_rxF_llr.m","pdcch_llr",phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->llr,2400,1,4);
+    mac_xface->macphy_exit("debug exit");
+  }
+*/ 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_OUT);
   return(0);
 }
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c
index 2a71111758ab278929a6cffd8c40d5579e5e5ed8..d098de4064063ea5e83bfc806903105e1d8b4522 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim.c
@@ -135,7 +135,7 @@ void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmi
   lte_frame_parms->nb_antennas_tx     = N_tx;
   lte_frame_parms->nb_antennas_rx     = N_rx;
   lte_frame_parms->nb_antennas_tx_eNB = N_tx;
-  lte_frame_parms->phich_config_common.phich_resource         = oneSixth;
+  lte_frame_parms->phich_config_common.phich_resource         = one;
   lte_frame_parms->tdd_config         = tdd_config;
   lte_frame_parms->frame_type         = (fdd_flag==1)?0 : 1;
   //  lte_frame_parms->Csrs = 2;
diff --git a/openair1/SIMULATION/LTE_PHY/mbmssim.c b/openair1/SIMULATION/LTE_PHY/mbmssim.c
index b17ab4808700252d6c2bf85756244945b209c2ec..a6eca1488e40ccc75de068ae83bae3cede89f79d 100644
--- a/openair1/SIMULATION/LTE_PHY/mbmssim.c
+++ b/openair1/SIMULATION/LTE_PHY/mbmssim.c
@@ -140,6 +140,7 @@ int main(int argc, char **argv)
   double **s_re,**s_im,**r_re,**r_im;
   double iqim = 0.0;
   int subframe=1;
+  int sched_subframe;
   char fname[40];//, vname[40];
   uint8_t transmission_mode = 1,n_tx=1,n_rx=2;
   uint16_t Nid_cell=0;
@@ -316,6 +317,9 @@ int main(int argc, char **argv)
     }
   }
 
+
+  sched_subframe = (subframe+9)%10;
+
   if (awgn_flag == 1)
     channel_model = AWGN;
 
@@ -444,7 +448,8 @@ int main(int argc, char **argv)
 
   for (SNR=snr0; SNR<snr1; SNR+=snr_step) {
     PHY_vars_UE->frame_tx=0;
-    PHY_vars_eNB->proc[subframe].frame_tx=0;
+    PHY_vars_eNB->proc[sched_subframe].frame_tx=0;
+    PHY_vars_eNB->proc[sched_subframe].subframe_tx=subframe;
 
     errs[0]=0;
     errs[1]=0;
@@ -467,7 +472,8 @@ int main(int argc, char **argv)
       eNB2UE->first_run = 1;
       memset(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][0][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t));
 
-      generate_mch(PHY_vars_eNB,subframe,input_buffer,0);
+      generate_mch(PHY_vars_eNB,sched_subframe,input_buffer,0);
+
 
       PHY_ofdm_mod(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][0],        // input,
                    txdata[0],         // output
@@ -477,7 +483,7 @@ int main(int argc, char **argv)
                    CYCLIC_PREFIX);
 
       if (n_frames==1) {
-        write_output("txsigF0.m","txsF0", &PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][0][subframe*nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size],
+        write_output("txsigF0.m","txsF0", &PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][0][subframe*nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size],
                      nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,1,1);
         //if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1)
         //write_output("txsigF1.m","txsF1", &PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][1][subframe*nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size],nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,1,1);
@@ -552,6 +558,8 @@ int main(int argc, char **argv)
           get_Qm(PHY_vars_UE->dlsch_ue_MCH[0]->harq_processes[0]->mcs),
           1,2,
           PHY_vars_UE->frame_tx,subframe);
+      PHY_vars_UE->dlsch_ue_MCH[0]->harq_processes[0]->Qm = get_Qm(PHY_vars_UE->dlsch_ue_MCH[0]->harq_processes[0]->mcs);
+
       dlsch_unscrambling(&PHY_vars_UE->lte_frame_parms,1,PHY_vars_UE->dlsch_ue_MCH[0],
                          PHY_vars_UE->dlsch_ue_MCH[0]->harq_processes[0]->G,
                          PHY_vars_UE->lte_ue_pdsch_vars_MCH[0]->llr[0],0,subframe<<1);
@@ -571,7 +579,7 @@ int main(int argc, char **argv)
         errs[0]++;
 
       PHY_vars_UE->frame_tx++;
-      PHY_vars_eNB->proc[subframe].frame_tx++;
+      PHY_vars_eNB->proc[sched_subframe].frame_tx++;
     }
 
     printf("errors %d/%d (Pe %e)\n",errs[round],trials,(double)errs[round]/trials);
diff --git a/openair1/SIMULATION/LTE_PHY/pdcchsim.c b/openair1/SIMULATION/LTE_PHY/pdcchsim.c
index 2ef91c8cefff72de46231d6342877fb43043412d..1852e349ec168b83f49dd4f8f40df2b1baf092af 100644
--- a/openair1/SIMULATION/LTE_PHY/pdcchsim.c
+++ b/openair1/SIMULATION/LTE_PHY/pdcchsim.c
@@ -49,7 +49,6 @@
 #include "PHY/TOOLS/lte_phy_scope.h"
 #endif
 
-
 #define N_TRIALS 100
 
 PHY_VARS_eNB *PHY_vars_eNB,*PHY_vars_eNB1,*PHY_vars_eNB2;
@@ -89,7 +88,7 @@ void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmi
   lte_frame_parms->nb_antennas_tx_eNB     = N_tx;
   lte_frame_parms->nb_antennas_tx     = N_tx;
   lte_frame_parms->nb_antennas_rx     = N_rx;
-  lte_frame_parms->phich_config_common.phich_resource = oneSixth; //half
+  lte_frame_parms->phich_config_common.phich_resource = one; //half
   lte_frame_parms->tdd_config         = tdd_config;
   lte_frame_parms->frame_type         = frame_type;
 
diff --git a/openair2/RRC/LITE/rrc_UE.c b/openair2/RRC/LITE/rrc_UE.c
index ed7c7e3d6f7807a5f48aee17520bdc1172055bd7..69ee1b1b16629a0512bae0a4254701fc79129be6 100644
--- a/openair2/RRC/LITE/rrc_UE.c
+++ b/openair2/RRC/LITE/rrc_UE.c
@@ -710,7 +710,7 @@ rrc_ue_establish_drb(
                     RADIO_ACCESS_BEARER,Rlc_info_um);
    */
 #ifdef PDCP_USE_NETLINK
-#   if !defined(OAI_NW_DRIVER_TYPE_ETHERNET) && !defined(EXMIMO) && !defined(OAI_USRP) && !defined(OAI_BLADERF) && !defined(LINK_ENB_PDCP_TO_GTPV1U)
+#   if !defined(OAI_NW_DRIVER_TYPE_ETHERNET) && !defined(EXMIMO) && !defined(OAI_USRP) && !defined(OAI_BLADERF) && !defined(ETHERNET) && !defined(LINK_ENB_PDCP_TO_GTPV1U)
 #    ifdef OAI_EMU
   ip_addr_offset3 = oai_emulation.info.nb_enb_local;
   ip_addr_offset4 = NB_eNB_INST;
diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c
index 7717d2866ce0e8bdf1af1a2626ecf332e52e4fcd..1f21216fd82e549c0fd9781290410e68f399232f 100644
--- a/openair2/RRC/LITE/rrc_eNB.c
+++ b/openair2/RRC/LITE/rrc_eNB.c
@@ -3049,7 +3049,7 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
                 ctxt_pP->module_id, ctxt_pP->frame, (int)DRB_configList->list.array[i]->drb_Identity);
 #if  defined(PDCP_USE_NETLINK) && !defined(LINK_ENB_PDCP_TO_GTPV1U)
           // can mean also IPV6 since ether -> ipv6 autoconf
-#   if !defined(OAI_NW_DRIVER_TYPE_ETHERNET) && !defined(EXMIMO) && !defined(OAI_USRP) && !defined(OAI_BLADERF)
+#   if !defined(OAI_NW_DRIVER_TYPE_ETHERNET) && !defined(EXMIMO) && !defined(OAI_USRP) && !defined(OAI_BLADERF) && !defined(ETHERNET)
           LOG_I(OIP, "[eNB %d] trying to bring up the OAI interface oai%d\n",
                 ctxt_pP->module_id,
                 ctxt_pP->module_id);
diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
index d66eb79d211d4fff87a568760b1d032025810da7..df8b150502b16d4298c0362a607f6ac7ca5d4d0b 100644
--- a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
+++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
@@ -230,6 +230,11 @@ void trx_eth_end(openair0_device *device)
 
 
 
+}
+
+int openair0_stop(int dummy) {
+
+   return 0;
 }
 
 int num_devices = 0;
diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index f51711e2eb77ec185d36f4b1cf21025e08e801ab..d42f09260791fa9bd96db67d9f990e2f26271e55 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -250,6 +250,8 @@ int UE_scan = 1;
 int UE_scan_carrier = 0;
 runmode_t mode = normal_txrx;
 
+FILE *input_fd=NULL;
+
 
 #ifdef EXMIMO
 #if MAX_NUM_CCs == 1
@@ -430,9 +432,10 @@ void help (void) {
   printf("  --debug-ue-prach run normal prach power ramping, but don't continue random-access\n");
   printf("  --calib-prach-tx run normal prach with maximum power, but don't continue random-access\n");
   printf("  --no-L2-connect bypass L2 and upper layers\n");
-  printf("  --ue_rxgain set UE RX gain\n");
-  printf("  --ue_txgain set UE tx gain\n");
-  printf("  --ue_scan_carrier set UE to scan around carrier\n");
+  printf("  --ue-rxgain set UE RX gain\n");
+  printf("  --ue-txgain set UE TX gain\n");
+  printf("  --ue-scan_carrier set UE to scan around carrier\n");
+  printf("  --loop-memory get softmodem (UE) to loop through memory instead of acquiring from HW\n");
   printf("  -C Set the downlink frequecny for all Component carrier\n");
   printf("  -d Enable soft scope and L1 and L2 stats (Xforms)\n");
   printf("  -F Calibrate the EXMIMO borad, available files: exmimo2_2arxg.lime exmimo2_2brxg.lime \n");
@@ -2015,7 +2018,9 @@ static void get_options (int argc, char **argv)
     LONG_OPTION_RXGAIN,
     LONG_OPTION_TXGAIN,
     LONG_OPTION_SCANCARRIER,
-    LONG_OPTION_MAXPOWER
+    LONG_OPTION_MAXPOWER,
+    LONG_OPTION_DUMP_FRAME,
+    LONG_OPTION_LOOPMEMORY
   };
 
   static const struct option long_options[] = {
@@ -2030,6 +2035,8 @@ static void get_options (int argc, char **argv)
     {"ue-txgain",   required_argument,  NULL, LONG_OPTION_TXGAIN},
     {"ue-scan-carrier",   no_argument,  NULL, LONG_OPTION_SCANCARRIER},
     {"ue-max-power",   required_argument,  NULL, LONG_OPTION_MAXPOWER},
+    {"ue-dump-frame", no_argument, NULL, LONG_OPTION_DUMP_FRAME},
+    {"loop-memory", required_argument, NULL, LONG_OPTION_LOOPMEMORY},
     {NULL, 0, NULL, 0}
   };
 
@@ -2092,6 +2099,16 @@ static void get_options (int argc, char **argv)
 
       break;
 
+    case LONG_OPTION_LOOPMEMORY:
+      mode=loop_through_memory;
+      input_fd = fopen(optarg,"r");
+      AssertFatal(input_fd != NULL,"Please provide an input file\n");
+      break;
+
+   case LONG_OPTION_DUMP_FRAME:
+     mode = rx_dump_frame;
+     break;
+
     case 'M':
 #ifdef ETHERNET
       strcpy(rrh_eNB_ip,optarg);
@@ -2400,12 +2417,14 @@ static void get_options (int argc, char **argv)
                enb_properties->properties[i]->uplink_frequency_offset[CC_id]);
       } // CC_id
     }// i
-  } else if ((UE_flag == 1) && (conf_config_file_name != NULL)) {
-
-    // Here the configuration file is the XER encoded UE capabilities
-    // Read it in and store in asn1c data structures
-    strcpy(uecap_xer,conf_config_file_name);
-    uecap_xer_in=1;
+  } else if (UE_flag == 1) {
+    if (conf_config_file_name != NULL) {
+      
+      // Here the configuration file is the XER encoded UE capabilities
+      // Read it in and store in asn1c data structures
+      strcpy(uecap_xer,conf_config_file_name);
+      uecap_xer_in=1;
+    }
   }
 }
 
@@ -2869,7 +2888,7 @@ int main( int argc, char **argv )
 #ifdef ETHERNET
 
   if (frame_parms[0]->N_RB_DL == 6) openair0_cfg[0].samples_per_packet = 256;
-  else openair0_cfg[0].samples_per_packet = 1536;
+  else openair0_cfg[0].samples_per_packet = 1024;
 
   printf("HW: samples_per_packet %d\n",openair0_cfg[0].samples_per_packet);
 #endif
@@ -2946,10 +2965,15 @@ int main( int argc, char **argv )
   printf("Initializing openair0 ...");
   openair0_cfg[0].log_level = glog_level;
 
-  if (openair0_device_init(&openair0, &openair0_cfg[0]) <0) {
+
+  if ((mode!=loop_through_memory) && 
+      (openair0_device_init(&openair0, &openair0_cfg[0]) <0)) {
     printf("Exiting, cannot initialize device\n");
     exit(-1);
   }
+  else if (mode==loop_through_memory) {
+    
+  }
 
   printf("Done\n");
 
@@ -3039,6 +3063,13 @@ int main( int argc, char **argv )
           UE[CC_id]->lte_ue_common_vars.txdata[aa][i] = 0x00010001;
     }
 
+    if (input_fd) {
+      printf("Reading in from file to antenna buffer %d\n",0);
+      fread(UE[0]->lte_ue_common_vars.rxdata[0],
+	    sizeof(int32_t),
+	    frame_parms[0]->samples_per_tti*10,
+	    input_fd);
+    }
     //p_exmimo_config->framing.tdd_config = TXRXSWITCH_TESTRX;
   } else {
     openair_daq_vars.timing_advance = 0;
@@ -3260,7 +3291,8 @@ int main( int argc, char **argv )
 
 #ifndef EXMIMO
 #ifndef USRP_DEBUG
-  openair0.trx_start_func(&openair0);
+  if (mode!=loop_through_memory)
+    openair0.trx_start_func(&openair0);
   //  printf("returning from usrp start streaming: %llu\n",get_usrp_time(&openair0));
 #endif
 #endif