diff --git a/openair1/PHY/LTE_TRANSPORT/defs.h b/openair1/PHY/LTE_TRANSPORT/defs.h
index f3db52b18eddcd4dc27c753930139e2806180f24..a13ccb20e6face8c52cd36f9d340f8d7fce942dc 100644
--- a/openair1/PHY/LTE_TRANSPORT/defs.h
+++ b/openair1/PHY/LTE_TRANSPORT/defs.h
@@ -937,7 +937,10 @@ typedef struct {
 } SLSCH_t;
 
 typedef struct {
-
+  /// payload length 
+  int payload_length;
+  /// pointer to payload
+  uint8_t *payload;
 } SLDCH_t;
 
 #define TTI_SYNC 0
diff --git a/openair1/PHY/LTE_TRANSPORT/sldch.c b/openair1/PHY/LTE_TRANSPORT/sldch.c
index a06fed05dee21ae498e893aa7d23fb765e98f181..c14a1b87a961626ef66ea8862fd3e3cf7770a5ba 100644
--- a/openair1/PHY/LTE_TRANSPORT/sldch.c
+++ b/openair1/PHY/LTE_TRANSPORT/sldch.c
@@ -36,8 +36,31 @@
 
 void generate_sldch(PHY_VARS_UE *ue,SLDCH_t *sldch,int frame_tx,int subframe_tx) {
 
-  AssertFatal(1==0,"Should get here yet for UE %d\n",ue->Mod_id);
+  UE_tport_t pdu;
+  size_t sldch_header_len = sizeof(UE_tport_header_t);
+
+  pdu.header.packet_type = SLDCH;
+  pdu.header.absSF = (frame_tx*10)+subframe_tx;
+
+  memcpy((void*)&pdu.sldch,(void*)sldch,sizeof(SLDCH_t)-sizeof(uint8_t*));
+
+  AssertFatal(sldch->payload_length <=1500-sldch_header_len - sizeof(SLDCH_t) + sizeof(uint8_t*),
+                "SLDCH payload length > %d\n",
+                1500-sldch_header_len - sizeof(SLDCH_t) + sizeof(uint8_t*));
+  memcpy((void*)&pdu.payload[0],
+         (void*)sldch->payload,
+         sldch->payload_length);
+
+  LOG_I(PHY,"SLDCH configuration %d bytes, TBS payload %d bytes => %d bytes\n",
+        sizeof(SLDCH_t)-sizeof(uint8_t*),
+        sldch->payload_length,
+        sldch_header_len+sizeof(SLDCH_t)-sizeof(uint8_t*)+sldch->payload_length);
+
+  multicast_link_write_sock(0,
+                            &pdu,
+                            sldch_header_len+sizeof(SLDCH_t)-sizeof(uint8_t*)+sldch->payload_length);
 
 }
 
+
 #endif
diff --git a/openair2/RRC/LITE/proto.h b/openair2/RRC/LITE/proto.h
index 684ecc5d28fbd02b8fc6227000e923d79555487a..98acfa7fbd750cd5970c2ba540be83a48e668df6 100644
--- a/openair2/RRC/LITE/proto.h
+++ b/openair2/RRC/LITE/proto.h
@@ -363,7 +363,7 @@ SL_DiscConfig_r12_t rrc_eNB_get_sidelink_discTXPool(
 /** \brief Process request from control socket
  *  \param arg
  */
-static void *rrc_control_socket_thread_fct(void *arg);
+void *rrc_control_socket_thread_fct(void *arg);
 
 //L2_interface.c
 int8_t
diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c
index ec7a5f24613f90140e3fa339076feb41e21bae24..af39b5bdb61554914de0d6ec0c107894bd11e0f1 100644
--- a/targets/RT/USER/lte-ue.c
+++ b/targets/RT/USER/lte-ue.c
@@ -762,6 +762,7 @@ void ue_stub_rx_handler(unsigned int num_bytes, char *rx_buffer) {
 
   UE_tport_t *pdu = (UE_tport_t*)rx_buffer;
   SLSCH_t *slsch = (SLSCH_t*)&pdu->slsch;
+  SLDCH_t *sldch = (SLDCH_t*)&pdu->sldch;
 
   switch (((UE_tport_header_t*)rx_buffer)->packet_type) {
   case TTI_SYNC:
@@ -788,6 +789,28 @@ void ue_stub_rx_handler(unsigned int num_bytes, char *rx_buffer) {
 		   0,
 		   SL_DISCOVERY_FLAG_NO);
     break;
+
+  case SLDCH:
+
+
+    LOG_I(PHY,"Emulator SFN.SF %d.%d, Got SLDCH packet\n",emulator_absSF/10,emulator_absSF%10);
+    LOG_I(PHY,"Received %d bytes on UE-UE link for SFN.SF %d.%d, sending SLDCH payload (%d bytes) to MAC\n",num_bytes,
+          pdu->header.absSF/10,pdu->header.absSF%10,
+          sldch->payload_length);
+    printf("SLDCH:");
+    for (int i=0;i<sizeof(SLDCH_t);i++) printf("%x ",((uint8_t*)sldch)[i]);
+    printf("\n");
+
+    ue_send_sl_sdu(0,
+                   0,
+                   pdu->header.absSF/10,
+                   pdu->header.absSF%10,
+                   pdu->payload,
+                   sldch->payload_length,
+                   0,
+                   SL_DISCOVERY_FLAG_YES);
+    break;
+
   }
 }