diff --git a/openair1/PHY/LTE_TRANSPORT/slbch.c b/openair1/PHY/LTE_TRANSPORT/slbch.c
index eb8c6c71053ed8247df311cb30082dad4a3ff21a..b961b57f7e19f3b448a41b3c3a9548b1c0a88af0 100644
--- a/openair1/PHY/LTE_TRANSPORT/slbch.c
+++ b/openair1/PHY/LTE_TRANSPORT/slbch.c
@@ -149,7 +149,7 @@ int rx_psbch(PHY_VARS_UE *ue,int frame_rx,int subframe_rx) {
   ru_tmp.N_TA_offset=0;
   ru_tmp.common.rxdata_7_5kHz     = (int32_t**)malloc16(ue->frame_parms.nb_antennas_rx*sizeof(int32_t*)); 
   for (int aa=0;aa<ue->frame_parms.nb_antennas_rx;aa++) 
-    ru_tmp.common.rxdata_7_5kHz[aa] = ue->sl_rxdata_7_5kHz[aa];//(int32_t*)&ue->common_vars.rxdata_syncSL[aa][ue->rx_offsetSL*2];
+    ru_tmp.common.rxdata_7_5kHz[aa] = ue->sl_rxdata_7_5kHz[ue->current_thread_id[0]][aa];//(int32_t*)&ue->common_vars.rxdata_syncSL[aa][ue->rx_offsetSL*2];
   ru_tmp.common.rxdataF = (int32_t**)rxdataF;
   ru_tmp.nb_rx = ue->frame_parms.nb_antennas_rx;
 
@@ -169,7 +169,10 @@ int rx_psbch(PHY_VARS_UE *ue,int frame_rx,int subframe_rx) {
 
   }
   LOG_D(PHY,"Running PBCH detection with Nid_SL %d (is_synchronizedSL %d) rxdata %p\n",ue->frame_parms.Nid_SL,ue->is_synchronizedSL,ue->common_vars.rxdata[0]);
-  
+  LOG_D(PHY,"slbch_decoding: FEP in %d.%d rx signal energy %d dB %d dB\n",frame_rx,subframe_rx,
+         dB_fixed(signal_energy(&ue->common_vars.rxdata[0][ue->frame_parms.samples_per_tti*subframe_rx],ue->frame_parms.samples_per_tti)),
+         dB_fixed(signal_energy(ue->sl_rxdata_7_5kHz[ue->current_thread_id[0]][0],ue->frame_parms.samples_per_tti)));
+ 
   for (int l=0; l<11; l++) {
     slot_fep_ul(&ru_tmp,l%7,(l>6)?1:0,0);
     ulsch_extract_rbs_single((int32_t**)rxdataF,
@@ -367,7 +370,8 @@ int rx_psbch(PHY_VARS_UE *ue,int frame_rx,int subframe_rx) {
                    &ue->slss_rx,
                    &testframe,
                    &testsubframe);
-     AssertFatal(testframe!=frame_rx || testsubframe!=subframe_rx,
+     if (ue->is_synchronizedSL!=0 || ue->is_synchronized!=0) 
+        AssertFatal(testframe==frame_rx && testsubframe==subframe_rx,
 	         "SFN.SF %d.%d != %d.%d\n",testframe,testsubframe,frame_rx,subframe_rx);
      return(0);
   }
diff --git a/openair1/PHY/LTE_TRANSPORT/sldch.c b/openair1/PHY/LTE_TRANSPORT/sldch.c
index cfc64de11cf350bf90c5d9941ad866384db5a5fc..155a78f3b82f00744f1aaa923e67bb99c9e5ae85 100644
--- a/openair1/PHY/LTE_TRANSPORT/sldch.c
+++ b/openair1/PHY/LTE_TRANSPORT/sldch.c
@@ -34,7 +34,7 @@
 #include "PHY/defs.h"
 #include "PHY/LTE_TRANSPORT/proto.h"
 
-#define PSDCH_DEBUG 1
+//#define PSDCH_DEBUG 1
 
 void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subframe_rx,int npsdch,int nprb,int rvidx) {
 
@@ -50,7 +50,9 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
   int32_t avgU[2];
 
 
-  LOG_I(PHY,"sldch_decoding %d.%d npsdch %d rvidx %d sl_fep_done %d\n",frame_rx,subframe_rx,npsdch,rvidx,proc->sl_fep_done);
+  LOG_D(PHY,"sldch_decoding %d.%d npsdch %d rvidx %d sl_fep_done %d\n",frame_rx,subframe_rx,npsdch,rvidx,proc->sl_fep_done);
+
+  if (ue->sldch_received[npsdch] > 0) return;
 
   // slot FEP
   if (proc->sl_fep_done == 0) {
@@ -75,9 +77,10 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
 	slot_fep_ul(&ru_tmp,l,(subframe_rx<<1)+1,0);
     }
   }
-   LOG_I(PHY,"sldch_decoding: FEP in %d.%d for npsdch %d rvidx %d rx signal energy %d dB %d dB\n",frame_rx,subframe_rx,npsdch,rvidx,
+   LOG_D(PHY,"sldch_decoding: FEP in %d.%d for npsdch %d rvidx %d rx signal energy %d (%p) dB %d dB\n",frame_rx,subframe_rx,npsdch,rvidx,
          dB_fixed(signal_energy(&ue->common_vars.rxdata[0][ue->frame_parms.samples_per_tti*subframe_rx],ue->frame_parms.samples_per_tti)),
-         dB_fixed(signal_energy(ue->sl_rxdata_7_5kHz[0],ue->frame_parms.samples_per_tti)));
+         &ue->common_vars.rxdata[0][ue->frame_parms.samples_per_tti*subframe_rx],
+         dB_fixed(signal_energy(ue->sl_rxdata_7_5kHz[ue->current_thread_id[subframe_rx]][0],ue->frame_parms.samples_per_tti)));
 
   for (int l=0; l<Nsymb; l++) {
     ulsch_extract_rbs_single((int32_t**)rxdataF,
@@ -153,7 +156,7 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
   
   log2_maxh = (log2_approx(avgs)/2)+ log2_approx(ue->frame_parms.nb_antennas_rx-1)+4;
 
-  LOG_I(PHY,"sldch_decoding %d.%d npsdch %d log2_maxh %d\n",frame_rx,subframe_rx,npsdch,log2_maxh);
+  LOG_D(PHY,"sldch_decoding %d.%d npsdch %d log2_maxh %d\n",frame_rx,subframe_rx,npsdch,log2_maxh);
 
 
 
@@ -284,9 +287,10 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
     LOG_I(PHY,"SLDCH received for npsdch %d (rvidx %d, iter %d)\n",
 	  npsdch,
 	  rvidx,ret);
+    ue->sldch_received[npsdch] = 1;
   }
 
-  exit(-1);
+  //exit(-1);
 }
 
 void rx_sldch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, int frame_rx,int subframe_rx) {
@@ -303,7 +307,6 @@ void rx_sldch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, int frame_rx,int subframe_rx
   uint32_t absSF_offset,absSF_modP;
   int rvtab[4]={0,2,3,1};
 
-  return;
   absSF_offset = absSF-O;
 
   if (absSF_offset < O) return;
@@ -316,6 +319,8 @@ void rx_sldch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, int frame_rx,int subframe_rx
               sldch->bitmap_length==42,"SLDCH Bitmap_length %x not supported\n",
               sldch->bitmap_length);
 
+  if (absSF_modP == 0) memset((void*)ue->sldch_received,0,sizeof(ue->sldch_received));
+
   if (absSF_modP >= sldch->bitmap_length) return;
   uint64_t SFpos = ((uint64_t)1) << absSF_modP;
   if ((SFpos & sldch->bitmap1) == 0) return;
@@ -348,7 +353,7 @@ void rx_sldch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, int frame_rx,int subframe_rx
     int npsdch;
     int nprb;
 
-    LOG_I(PHY,"LPSDCH %d (%llx), N_TX_SLD %d, Ni %d, Nf %d\n",LPSDCH,sldch->bitmap1,N_TX_SLD,Ni,Nf); 
+    LOG_D(PHY,"LPSDCH %d (%llx), N_TX_SLD %d, Ni %d, Nf %d\n",LPSDCH,sldch->bitmap1,N_TX_SLD,Ni,Nf); 
     // loop over all candidate PRBs 
     for (int a_ji=0;a_ji<Nf;a_ji++){
       jrx = absSF_modP%N_TX_SLD;//i/(Nf/N_TX_SLD);
@@ -358,10 +363,10 @@ void rx_sldch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, int frame_rx,int subframe_rx
       if (nprb<(sldch->N_SL_RB>>1)) nprb+=sldch->prb_Start;
       else                          nprb+=(sldch->prb_End-(sldch->N_SL_RB>>1));
       // call decoding for candidate npsdch
-      if (npsdch==0) {
-        LOG_I(PHY,"SLDCH (RX): absSF_modP %d Trying npsdch %d, j %d rvidx %d (nprb %d)\n",absSF_modP,npsdch,jrx,rvtab[jrx],nprb);
+//      if (npsdch==0) {
+//        LOG_I(PHY,"SLDCH (RX): absSF_modP %d Trying npsdch %d, j %d rvidx %d (nprb %d)\n",absSF_modP,npsdch,jrx,rvtab[jrx],nprb);
         sldch_decoding(ue,proc,frame_rx,subframe_rx,npsdch,nprb,rvtab[jrx]);
-      }
+ //     }
     }
 
   }
@@ -414,7 +419,7 @@ void sldch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,int npr
 
 
 
-  LOG_I(PHY,"Generating SLDCH in %d.%d for rvidx %d, npsdch %d, first rb %d\n",
+  LOG_D(PHY,"Generating SLDCH in %d.%d for rvidx %d, npsdch %d, first rb %d\n",
 	frame_tx,subframe_tx,rvidx,sldch->n_psdch,nprb);
 
   dlsch->harq_processes[0]->nb_rb       = 2;
@@ -574,7 +579,7 @@ void check_and_generate_psdch(PHY_VARS_UE *ue,int frame_tx,int subframe_tx) {
     if (absSF_modP != ((b_1i*N_TX_SLD)+sldch->j)) return;
     
     nprb = 2*a_ji;
-  LOG_I(PHY,"Generating SLDCH in SFN.SF %d.%d (O %d, P %d, n_psdch %d, Nf %d, Ni %d, j %d, a_ji %d) \n",frame_tx,subframe_tx,O,P,sldch->n_psdch,Nf,Ni,sldch->j,a_ji);
+  LOG_D(PHY,"Generating SLDCH in SFN.SF %d.%d (O %d, P %d, n_psdch %d, Nf %d, Ni %d, j %d, a_ji %d) \n",frame_tx,subframe_tx,O,P,sldch->n_psdch,Nf,Ni,sldch->j,a_ji);
 
   }
   else {
diff --git a/openair1/PHY/LTE_TRANSPORT/slsss.c b/openair1/PHY/LTE_TRANSPORT/slsss.c
index 72e765f89519e377b4938a525a2370027e960f0d..598c91d8d5a0d2380d5116815f446e5512409f11 100644
--- a/openair1/PHY/LTE_TRANSPORT/slsss.c
+++ b/openair1/PHY/LTE_TRANSPORT/slsss.c
@@ -211,7 +211,8 @@ int _do_slpss_sss_extract(PHY_VARS_UE *ue,
       pss1_symb = 2;
       sss0_symb = 11;
       sss1_symb = 12;
-      rxdataF   =  (int32_t**)ue->sl_rxdataF;
+      rxdataF   =  (int32_t**)ue->sl_rxdataF[ue->current_thread_id[0]];
+;
 
       pss0_rxF  =  &rxdataF[aarx][(rx_offset + (pss0_symb*(frame_parms->ofdm_symbol_size)))];
       sss0_rxF  =  &rxdataF[aarx][(rx_offset + (sss0_symb*(frame_parms->ofdm_symbol_size)))];
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c
index df1087843d48d9036ea1cb6af934b7fa04bc7d22..a3058df6a9e13309d91b19e1c8e4f1ce122537c2 100644
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c
@@ -404,7 +404,7 @@ void ulsch_modulation(int32_t **txdataF,
   else {
     harq_pid = 0;
     x2 = cinit;
-    LOG_I(PHY,"Setting seed for SL to %x\n",x2);
+    LOG_D(PHY,"Setting seed for SL to %x\n",x2);
   }
 
   if (!ulsch) {
diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h
index e5531c03a17d3f9322300a738ab2db9418ecac3e..5bcba02038030ea1efe78c8e68758f3fd434098a 100644
--- a/openair1/PHY/defs.h
+++ b/openair1/PHY/defs.h
@@ -1312,6 +1312,7 @@ typedef struct {
   LTE_eNB_PUSCH    *pusch_slcch;
   LTE_UE_DLSCH_t   *dlsch_rx_slsch;
   LTE_UE_DLSCH_t   *dlsch_rx_sldch[MAX_SLDCH];
+  int              sldch_received[MAX_SLDCH];
   int16_t          **sl_rxdataF[RX_NB_TH_MAX];
   int16_t          **sl_rxdata_7_5kHz[RX_NB_TH_MAX];
   int16_t          *slsch_dlsch_llr;
diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c
index 6eea2318f7c9f7bf28fe12c4126384bd28a5a129..e919395bda5b94ddefd7eb6d78dab01b529ec830 100644
--- a/openair1/SCHED/phy_procedures_lte_ue.c
+++ b/openair1/SCHED/phy_procedures_lte_ue.c
@@ -1267,9 +1267,8 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, int frame_tx, int subframe_tx, uin
   }
 //#endif
 
-//  if ((frame_tx%100) == 0)
 
-   LOG_I(PHY,"[UE %d] Frame %d, subframe %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d, empty subframe %d\n",
+   LOG_D(PHY,"[UE %d] Frame %d, subframe %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d, empty subframe %d\n",
 	 ue->Mod_id,frame_tx,subframe_tx,
 	 ulsch_start,
 	 ue->rx_offset,
@@ -1345,19 +1344,6 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, int frame_tx, int subframe_tx, uin
     }
 #endif
 #endif
-    LOG_I(PHY,"ULSCH : signal energy %d dB (txdataF %p)\n",dB_fixed(signal_energy(&ue->common_vars.txdata[0][ulsch_start],frame_parms->samples_per_tti)),&ue->common_vars.txdataF[0][subframe_tx*nsymb*frame_parms->ofdm_symbol_size]);
-    //    write_output("txBuff.m","txSignal",&ue->common_vars.txdata[aa][ulsch_start],frame_parms->samples_per_tti,1,1);
-    //    exit(-1);
-    /*
-    only for debug
-    LOG_I(PHY,"ul-signal [subframe: %d, ulsch_start %d, TA: %d, rxOffset: %d, timing_advance: %d, hw_timing_advance: %d]\n",subframe_tx, ulsch_start, ue->N_TA_offset, ue->rx_offset, ue->timing_advance, ue->hw_timing_advance);
-    if( (crash == 1) && (subframe_tx == 0) )
-    {
-      LOG_E(PHY,"***** DUMP TX Signal [ulsch_start %d] *****\n",ulsch_start);
-      write_output("txBuff.m","txSignal",&ue->common_vars.txdata[aa][ulsch_start],frame_parms->samples_per_tti,1,1);
-    }
-    */
-
   } //nb_antennas_tx
 
 #if UE_TIMING_TRACE
@@ -4795,6 +4781,9 @@ void phy_procedures_UE_SL_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc) {
 
   proc->sl_fep_done = 0;
 
+  if (ue->is_SynchRef == 0 && (frame_rx&3) == 0 && subframe_rx == 0) rx_psbch(ue,frame_rx,subframe_rx);
+
+
   rx_sldch(ue,proc,frame_rx,subframe_rx);
 
   if (ue->is_SynchRef == 0 && frame_rx==0 && subframe_rx==0) LOG_I(PHY,"Connected with SyncRef UE (slbch errors %d/%d)\n",
diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c
index 4270fdf9a431135232bd0a18617244f57a70f993..132d29da449c838595a352a1dccb58a1c2af2510 100644
--- a/targets/RT/USER/lte-ue.c
+++ b/targets/RT/USER/lte-ue.c
@@ -1784,19 +1784,10 @@ void *UE_threadSL(void *arg) {
 						 (void**)UE->common_vars.rxdata,
 						 UE->rx_offsetSL,
 						 UE->frame_parms.nb_antennas_rx),"");
-/*
-          AssertFatal(UE->frame_parms.samples_per_tti*40 ==
-                      UE->rfdevice.trx_read_func(&UE->rfdevice,
-                                                 &timestamp,
-                                                 (void**)UE->common_vars.rxdata_syncSL,
-                                                 UE->frame_parms.samples_per_tti*40,
-                                                 UE->frame_parms.nb_antennas_rx),"");
-          write_output("fourframes.m","frames4",UE->common_vars.rxdata_syncSL[0],UE->frame_parms.samples_per_tti*10,1,1);
-          exit(-1);*/ 
 	}
 	UE->rx_offsetSL=0;
 	UE->time_sync_cell=0;
-	for (int i=0;i<RX_NB_TH;i++) UE->proc.proc_rxtx[i].frame_rx=(UE->proc.proc_rxtx[i].frame_rx-1+(subframe_delay/10))&1023; // -1 because we increment frame_rx below in subframe=0
+	for (int i=0;i<RX_NB_TH;i++) UE->proc.proc_rxtx[i].frame_rx=(UE->proc.proc_rxtx[i].frame_rx+3+(subframe_delay/10))&1023; // +3 because we increment frame_rx below in subframe=0 and first pbch is received in +4 frames
       } else { // This is steady-state mode
 	sub_frame++;
 	sub_frame%=10;
@@ -1849,16 +1840,14 @@ void *UE_threadSL(void *arg) {
 	  writeBlockSize=UE->frame_parms.samples_per_tti -UE->rx_offset_diff;
 	}
 
-	LOG_D(PHY,"reading rxp[0] %p (%p) : %d samples\n",
-	      rxp[0],UE->common_vars.rxdata[0],
-	      readBlockSize);
 	AssertFatal(readBlockSize ==
 		    UE->rfdevice.trx_read_func(&UE->rfdevice,
 					       &timestamp,
 					       rxp,
 					       readBlockSize,
 					       UE->frame_parms.nb_antennas_rx),"");
-	LOG_D(PHY,"writing txp[0] %p (%p)\n",txp[0],UE->common_vars.txdata[0]);
+
+
 
 	AssertFatal( writeBlockSize ==
 		     UE->rfdevice.trx_write_func(&UE->rfdevice,