diff --git a/openair1/PHY/INIT/defs.h b/openair1/PHY/INIT/defs.h
index 8384210fa190e4f80c3b8ef2c4f3cdc9f63790dc..f8d756d0f079e94d42443f9059c9c003e6e46101 100644
--- a/openair1/PHY/INIT/defs.h
+++ b/openair1/PHY/INIT/defs.h
@@ -324,6 +324,15 @@ void phy_config_dedicated_eNB_step2(PHY_VARS_eNB *phy_vars_eNB);
  */
 int phy_init_secsys_eNB(PHY_VARS_eNB *phy_vars_eNb);
 
+/*!
+\fn void phy_config_SL(int Mod_id,SLDCH_t *sldch_rx,SLSCH_t *slsch_rx)
+\brief Configure PHY Sidelink parameters .
+@param Mod_id
+@param sldch_rx Sidelink discovery channel configuration
+@param slsch_rx Sidelink Control/Shared channel configuration
+ */
+int phy_config_SL(int Mod_id,SLDCH_t *sldch_rx,SLSCH_t *slsch_rx);
+
 void free_lte_top(void);
 
 void init_lte_top(LTE_DL_FRAME_PARMS *lte_frame_parms);
diff --git a/openair1/PHY/INIT/lte_init_ue.c b/openair1/PHY/INIT/lte_init_ue.c
index b4dee3b8b97da9b689517062405121256eb07397..8d78b034b1d7c5274292e0ae29d24e5e544f86a1 100644
--- a/openair1/PHY/INIT/lte_init_ue.c
+++ b/openair1/PHY/INIT/lte_init_ue.c
@@ -627,6 +627,16 @@ void phy_init_lte_ue__PDSCH( LTE_UE_PDSCH* const pdsch, const LTE_DL_FRAME_PARMS
   }
 }
 
+int phy_config_SL(int Mod_id,SLDCH_t *sldch_rx,SLSCH_t *slsch_rx) {
+
+   PHY_VARS_UE *ue=PHY_vars_UE_g[Mod_id][0];
+
+   memcpy((void*)&ue->sldch_rx,(void*)sldch_rx,sizeof(SLDCH_t));
+   memcpy((void*)&ue->slsch_rx,(void*)slsch_rx,sizeof(SLSCH_t));
+
+   return(0);
+}
+
 int init_lte_ue_signal(PHY_VARS_UE *ue,
 		       int nb_connected_eNB,
 		       uint8_t abstraction_flag)
diff --git a/openair1/PHY/LTE_TRANSPORT/sldch.c b/openair1/PHY/LTE_TRANSPORT/sldch.c
index 5aaa735e887bbd98b7b7dbea3f73dbf141c41c32..40906ebb7882cf71bd34f3018a08d4a2438c4d0f 100644
--- a/openair1/PHY/LTE_TRANSPORT/sldch.c
+++ b/openair1/PHY/LTE_TRANSPORT/sldch.c
@@ -37,7 +37,6 @@
 void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subframe_rx,int npsdch,int nprb,int rvidx) {
 
   int Nsymb = 7;
-  SLDCH_t *sldch = ue->sldch;
   int16_t **rxdataF_ext      = (int16_t**)ue->pusch_sldch->rxdataF_ext;
   int16_t **drs_ch_estimates = (int16_t**)ue->pusch_sldch->drs_ch_estimates;
   int16_t **rxdataF_comp     = (int16_t**)ue->pusch_sldch->rxdataF_comp;
@@ -49,11 +48,11 @@ 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\n",frame_rx,subframe_rx);
+  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);
 
   // slot FEP
-  if (ue->sl_fep_done == 0) {
-    ue->sl_fep_done = 1;
+  if (proc->sl_fep_done == 0) {
+    proc->sl_fep_done = 1;
     RU_t ru_tmp;
     memset((void*)&ru_tmp,0,sizeof(RU_t));
     
@@ -64,7 +63,6 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
     ru_tmp.common.rxdataF = (int32_t**)rxdataF;
     ru_tmp.nb_rx = ue->frame_parms.nb_antennas_rx;
     
-    
     remove_7_5_kHz(&ru_tmp,(subframe_rx<<1));
     remove_7_5_kHz(&ru_tmp,(subframe_rx<<1)+1);
 
@@ -75,6 +73,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 for npsdch %d rvidx %d rx signal energy %d dB %d dB\n",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,ue->frame_parms.samples_per_tti)));
+
   for (int l=0; l<Nsymb; l++) {
     ulsch_extract_rbs_single((int32_t**)rxdataF,
 			     (int32_t**)rxdataF_ext,
@@ -114,7 +116,7 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
 			    0, //v
 			    0, //cyclic_shift
 			    3,
-			    1, // interpolation
+			    0, // interpolation
 			    0);
 
   lte_ul_channel_estimation(&ue->frame_parms,
@@ -128,14 +130,14 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
 			    0,//v
 			    0,//cyclic_shift,
 			    10,
-			    1, // interpolation
+			    0, // interpolation
 			    0);
 
   ulsch_channel_level(drs_ch_estimates,
 		      &ue->frame_parms,
 		      avgU,
 		      2);
- 
+
 #ifdef PSDCH_DEBUG
   write_output("drs_ext0.m","drsest0",drs_ch_estimates[0],ue->frame_parms.N_RB_UL*12*14,1,1);
 #endif
@@ -149,96 +151,8 @@ 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);
 
-  for (int l=0; l<(Nsymb<<1)-1; l++) {
-
-    if (((ue->frame_parms.Ncp == 0) && ((l==3) || (l==10)))||   // skip pilots
-        ((ue->frame_parms.Ncp == 1) && ((l==2) || (l==8)))) {
-      l++;
-    }
-
-    ulsch_channel_compensation(
-			       rxdataF_ext,
-			       drs_ch_estimates,
-			       ul_ch_mag,
-			       NULL,
-			       rxdataF_comp,
-			       &ue->frame_parms,
-			       l,
-			       2, //Qm
-			       2, //nb_rb
-			       log2_maxh); // log2_maxh+I0_shift
-
-    if (ue->frame_parms.nb_antennas_rx > 1)
-      ulsch_detection_mrc(&ue->frame_parms,
-			  rxdataF_comp,
-			  ul_ch_mag,
-			  NULL,
-			  l,
-			  2 //nb_rb
-			  );
-    
-    freq_equalization(&ue->frame_parms,
-		      rxdataF_comp,
-		      ul_ch_mag,
-		      NULL,
-		      l,
-		      24,
-		      2);
-  
-  }
-  lte_idft(&ue->frame_parms,
-           rxdataF_comp[0],
-           24);
-
-#ifdef PSDCH_DEBUG
-  write_output("sldch_rxF_comp.m","sldchrxF_comp",rxdataF_comp[0],ue->frame_parms.N_RB_UL*12*14,1,1);
-#endif
-  lte_ul_channel_estimation(&ue->frame_parms,
-			    (int32_t**)drs_ch_estimates,
-			    (int32_t**)NULL,
-			    (int32_t**)rxdataF_ext,
-			    2,
-			    frame_rx,
-			    subframe_rx,
-			    0, //u
-			    0, //v
-			    0, //cyclic_shift
-			    3,
-			    1, // interpolation
-			    0);
-
-  lte_ul_channel_estimation(&ue->frame_parms,
-			    (int32_t**)drs_ch_estimates,
-			    (int32_t**)NULL,
-			    (int32_t**)rxdataF_ext,
-			    2,
-			    frame_rx,
-			    subframe_rx,
-			    0,//u
-			    0,//v
-			    0,//cyclic_shift,
-			    10,
-			    1, // interpolation
-			    0);
-
-  ulsch_channel_level(drs_ch_estimates,
-		      &ue->frame_parms,
-		      avgU,
-		      2);
- 
-#ifdef PSDCH_DEBUG
-  write_output("drs_ext0.m","drsest0",drs_ch_estimates[0],ue->frame_parms.N_RB_UL*12*14,1,1);
-#endif
-
-  avgs = 0;
-  
-  for (int aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++)
-    avgs = cmax(avgs,avgU[aarx]);
-  
-  //      log2_maxh = 4+(log2_approx(avgs)/2);
-  
-  log2_maxh = (log2_approx(avgs)/2)+ log2_approx(ue->frame_parms.nb_antennas_rx-1)+4;
 
 
   for (int l=0; l<(Nsymb<<1)-1; l++) {
@@ -249,11 +163,11 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
     }
 
     ulsch_channel_compensation(
-			       rxdataF_ext,
-			       drs_ch_estimates,
-			       ul_ch_mag,
+			       (int32_t**)rxdataF_ext,
+			       (int32_t**)drs_ch_estimates,
+			       (int32_t**)ul_ch_mag,
 			       NULL,
-			       rxdataF_comp,
+			       (int32_t**)rxdataF_comp,
 			       &ue->frame_parms,
 			       l,
 			       2, //Qm
@@ -262,16 +176,16 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
 
     if (ue->frame_parms.nb_antennas_rx > 1)
       ulsch_detection_mrc(&ue->frame_parms,
-			  rxdataF_comp,
-			  ul_ch_mag,
+			  (int32_t**)rxdataF_comp,
+			  (int32_t**)ul_ch_mag,
 			  NULL,
 			  l,
 			  2 //nb_rb
 			  );
     
     freq_equalization(&ue->frame_parms,
-		      rxdataF_comp,
-		      ul_ch_mag,
+		      (int32_t**)rxdataF_comp,
+		      (int32_t**)ul_ch_mag,
 		      NULL,
 		      l,
 		      24,
@@ -298,17 +212,17 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
     }
 
     ulsch_qpsk_llr(&ue->frame_parms,
-		   rxdataF_comp,
-		   (int32_t *)ue->slsch_ulsch_llr,
+		   (int32_t **)rxdataF_comp,
+		   (int16_t *)ue->slsch_ulsch_llr,
 		   l,
 		   2,
-		   (int32_t *)&llrp);
+		   &llrp);
   }
-  
+ /* 
   write_output("sldch_llr.m","sldchllr",ue->sldch_ulsch_llr[npsdch],
                12*2*(ue->frame_parms.symbols_per_tti),
                1,0);
-  
+  */
 
   // unscrambling
 
@@ -363,9 +277,9 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
 			   0,
 			   1);
 
-//  printf("slsch decoding round %d ret %d\n",ue->dlsch_rx_slsch->harq_processes[0]->round,ret);
+//  printf("slsch decoding round %d ret %d\n",ue->dlsch_rx_sldch->harq_processes[0]->round,ret);
   if (ret<ue->dlsch_rx_sldch[npsdch]->max_turbo_iterations) {
-    LOG_D(PHY,"SLDCH received for npsdch %d (rvidx %d, iter %d)\n",
+    LOG_I(PHY,"SLDCH received for npsdch %d (rvidx %d, iter %d)\n",
 	  npsdch,
 	  rvidx,ret);
   }
@@ -374,13 +288,14 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
 
 void rx_sldch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, int frame_rx,int subframe_rx) {
 
+  SLDCH_t *sldch = &ue->sldch_rx;
+
   AssertFatal(frame_rx<1024 && frame_rx>=0,"frame %d is illegal\n",frame_rx);
   AssertFatal(subframe_rx<10 && subframe_rx>=0,"subframe %d is illegal\n",subframe_rx);
-  SLDCH_t *sldch = &ue->sldch;
   AssertFatal(sldch!=NULL,"SLDCH is null\n");
 
-  uint32_t O = ue->sldch->offsetIndicator;
-  uint32_t P = ue->sldch->discPeriod;
+  uint32_t O = sldch->offsetIndicator;
+  uint32_t P = sldch->discPeriod;
   uint32_t absSF = (frame_rx*10)+subframe_rx;
   uint32_t absSF_offset,absSF_modP;
   int rvtab[4]={0,2,3,1};
@@ -390,7 +305,14 @@ void rx_sldch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, int frame_rx,int subframe_rx
   if (absSF_offset < O) return;
 
   absSF_modP = absSF_offset%P;
+  // compute parameters
+  AssertFatal(sldch->bitmap_length==4 || sldch->bitmap_length==8 ||
+              sldch->bitmap_length==12 || sldch->bitmap_length==16 ||
+              sldch->bitmap_length==30 || sldch->bitmap_length==40 ||
+              sldch->bitmap_length==42,"SLDCH Bitmap_length %x not supported\n",
+              sldch->bitmap_length);
 
+  if (absSF_modP >= sldch->bitmap_length) return;
   uint64_t SFpos = ((uint64_t)1) << absSF_modP;
   if ((SFpos & sldch->bitmap1) == 0) return;
 
@@ -404,14 +326,13 @@ void rx_sldch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, int frame_rx,int subframe_rx
 	      sldch->bitmap_length);
 
   int LPSDCH=0;
-  for (int i=0;i<sldch->bitmap_length;i++) if (((((uint64_t)1)<<i)&sldch->bitmap1) == 1) LPSDCH++;
+  for (int i=0;i<sldch->bitmap_length;i++) if (((((uint64_t)1)<<i)&sldch->bitmap1) > 00) LPSDCH++;
   
   AssertFatal(sldch->type == disc_type1 || sldch->type == disc_type2B,
 	      "unknown Discovery type %d\n",sldch->type);
 
   int N_TX_SLD = 1+sldch->numRetx;
   uint32_t M_RB_PSDCH_RP = sldch->N_SL_RB;
-  int first_prb;
 
   if (sldch->type == disc_type1) {
     int Ni = LPSDCH/N_TX_SLD;
@@ -423,16 +344,17 @@ 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); 
     // loop over all candidate PRBs 
-    for (int i=0;i<Nf;i++){
-      jrx = i/(Nf/N_TX_SLD);
-      npsdch = (i%(Nf/N_TX_SLD))*Ni +((absSF/N_TX_SLD)%Ni);
-      nprb = i<<1;
+    for (int a_ji=0;a_ji<Nf;a_ji++){
+      jrx = absSF_modP%N_TX_SLD;//i/(Nf/N_TX_SLD);
+      // b_1= absSF_ModP/N_TX_SLD
+      npsdch = Ni*((a_ji+Nf-(jrx*Nf/N_TX_SLD))%Nf) + ((absSF_modP/N_TX_SLD)%Ni);
+      nprb = a_ji<<1;
       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
-      LOG_I(PHY,"SLDCH (RX): Trying npsdch %d, j %d (nprb %d)\n",npsdch,jrx,nprb);
+      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]);
     }
 
@@ -480,12 +402,10 @@ void sldch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,int npr
   int tx_amp;
   uint32_t Nsymb = 7;
   // 24 REs/PRB * 2*(Nsymb-1) symbols * 2 bits/RE 
-  uint32_t E = 24*(Nsymb-1)*2*2;
 
   AssertFatal(sldch!=NULL,"ue->sldch is null\n");
   
 
-  int mcs   = 8;
 
 
   LOG_I(PHY,"Generating SLDCH for rvidx %d, npsdch %d, first rb %d\n",
@@ -609,7 +529,7 @@ void check_and_generate_psdch(PHY_VARS_UE *ue,int frame_tx,int subframe_tx) {
   absSF_modP = absSF_offset%P;
 
   uint64_t SFpos = ((uint64_t)1) << absSF_modP;
-  LOG_D(PHY,"SLDCH: SFN.SF %d.%d : absSF_modP %d, bitmap1 %x\n",frame_tx,subframe_tx,absSF_modP,sldch->bitmap1);
+  LOG_D(PHY,"SLDCH: SFN.SF %d.%d : absSF_modP %d, bitmap1 %llx\n",frame_tx,subframe_tx,absSF_modP,sldch->bitmap1);
 
   if ((SFpos & sldch->bitmap1) == 0) return;
 
diff --git a/openair1/PHY/LTE_TRANSPORT/slsch.c b/openair1/PHY/LTE_TRANSPORT/slsch.c
index dfffa4a549ffe2f1a210ef109f0446772c1b117a..46cf131661d3155e27b1820ce2c9c85d67c79af8 100644
--- a/openair1/PHY/LTE_TRANSPORT/slsch.c
+++ b/openair1/PHY/LTE_TRANSPORT/slsch.c
@@ -784,7 +784,7 @@ void generate_slsch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,SLSCH_t *slsch,int fram
 }
 
 
-void pscch_decoding(PHY_VARS_UE *ue,int frame_rx,int subframe_rx,int a,int slot) {
+void pscch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subframe_rx,int a,int slot) {
 
   int Nsymb = 7 - slot;
   SLSCH_t *slsch = &ue->slsch_rx;
@@ -809,7 +809,7 @@ void pscch_decoding(PHY_VARS_UE *ue,int frame_rx,int subframe_rx,int a,int slot)
   else                             nprb = slsch->prb_End_SC-(slsch->N_SL_RB_SC>>1)+amod;
 
   // slot FEP
-  if (ue->sl_fep_done == 0) {
+  if (proc->sl_fep_done == 0) {
     RU_t ru_tmp;
     memset((void*)&ru_tmp,0,sizeof(RU_t));
     
@@ -1068,7 +1068,7 @@ void pscch_decoding(PHY_VARS_UE *ue,int frame_rx,int subframe_rx,int a,int slot)
 
 }	
 
-void rx_slcch(PHY_VARS_UE *ue,int frame_rx,int subframe_rx) {
+void rx_slcch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subframe_rx) {
 
   AssertFatal(frame_rx<1024 && frame_rx>=0,"frame %d is illegal\n",frame_rx);
   AssertFatal(subframe_rx<10 && subframe_rx>=0,"subframe %d is illegal\n",subframe_rx);
@@ -1118,8 +1118,8 @@ void rx_slcch(PHY_VARS_UE *ue,int frame_rx,int subframe_rx) {
   uint32_t b1=slsch->n_pscch%LPSCCH;
   uint32_t b2=(slsch->n_pscch + 1 + (a1%(LPSCCH-1)))%LPSCCH;
 
-  if (absSF_modP == b1)      pscch_decoding(ue,frame_rx,subframe_rx,a1,0);	
-  else if (absSF_modP == b2) pscch_decoding(ue,frame_rx,subframe_rx,a2,1);
+  if (absSF_modP == b1)      pscch_decoding(ue,proc,frame_rx,subframe_rx,a1,0);	
+  else if (absSF_modP == b2) pscch_decoding(ue,proc,frame_rx,subframe_rx,a2,1);
   else return;
 
 
@@ -1143,8 +1143,8 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
   LOG_I(PHY,"slsch_decoding %d.%d => lmod10 %d\n",frame_rx,subframe_rx,ljmod10);
 
   // slot FEP
-  if (ue->sl_fep_done == 0) {
-    ue->sl_fep_done = 1;
+  if (proc->sl_fep_done == 0) {
+    proc->sl_fep_done = 1;
     RU_t ru_tmp;
     memset((void*)&ru_tmp,0,sizeof(RU_t));
     
diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h
index 5b62605c0cae421ab8d53645db96cdb554d36a6e..578c06f5f5fac3edc465ee1795b8d5a8f1a7c325 100644
--- a/openair1/PHY/defs.h
+++ b/openair1/PHY/defs.h
@@ -625,6 +625,8 @@ typedef struct {
   int sub_frame_start;
   int sub_frame_step;
   unsigned long long gotIQs;
+  /// indicator that slot_fep has been done for subframe (for sidelink)
+  int sl_fep_done;
 } UE_rxtx_proc_t;
 
 /// Context data structure for eNB subframe processing
@@ -1299,7 +1301,6 @@ typedef struct {
   // This is for SIC in the UE, to store the reencoded data
   LTE_eNB_DLSCH_t  *dlsch_eNB[NUMBER_OF_CONNECTED_eNB_MAX];
   // Sidelink-specific variables
-  int              sl_fep_done;
   SL_chan_t        sl_chan;
   LTE_eNB_DLSCH_t  *dlsch_slsch;
   LTE_UE_ULSCH_t   *ulsch_slsch;
@@ -1331,6 +1332,7 @@ typedef struct {
   uint32_t         slsch_errors;
   uint32_t         slsch_rxcnt[4];
   SLDCH_t          *sldch;
+  SLDCH_t          sldch_rx;
   int              sldch_sdu_active;
   pthread_mutex_t  slss_mutex;
   pthread_mutex_t  sldch_mutex;
diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c
index 8447e9cabb82c2cefca47d37849ffeb720eef33d..c64211a5b098339afa556cbea987c5cd88093c99 100644
--- a/openair1/SCHED/phy_procedures_lte_ue.c
+++ b/openair1/SCHED/phy_procedures_lte_ue.c
@@ -4793,7 +4793,9 @@ void phy_procedures_UE_SL_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc) {
 
   LOG_D(PHY,"SFN.SF %d.%d Running Steady-state SL UE procedures\n",frame_rx,subframe_rx);
 
-  if (ue->is_SynchRef == 0 && (frame_rx&3) == 0 && subframe_rx == 0) rx_psbch(ue,frame_rx,subframe_rx);
+  proc->sl_fep_done = 0;
+
+  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",
                                                 ue->slbch_errors,ue->slbch_rxops);
diff --git a/openair2/LAYER2/MAC/config_ue.c b/openair2/LAYER2/MAC/config_ue.c
index e3042f791bfbac0165d48a698be41c90b6c9cb07..93e0fa1c9d1b4ee440a194be6a63d1b062358849 100644
--- a/openair2/LAYER2/MAC/config_ue.c
+++ b/openair2/LAYER2/MAC/config_ue.c
@@ -740,6 +740,7 @@ rrc_mac_config_req_ue(module_id_t Mod_idP,
   /// Number of retransmissions (numRetx-r12)
     UE_mac_inst[Mod_idP].sldch.numRetx = discrxpool->numRetx_r13;
 
+    phy_config_SL(Mod_idP,&UE_mac_inst[Mod_idP].sldch,&UE_mac_inst[Mod_idP].slsch);
 
   }
   if (directFrameNumber_r12<1025) UE_mac_inst[Mod_idP].directFrameNumber_r12     = directFrameNumber_r12;