diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
index f799f9341bf89fff85468372b7b276b06f6215fb..769a9af02aeafcab2f02ddbcead9dd3fee4b3856 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
@@ -680,6 +680,8 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
 			    time_stats_t *i_stats)
 {
 
+  //start_meas(&eNB->dlsch_turbo_encoding_preperation_stats);
+
   LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
   eNB_proc_t *proc = &eNB->proc;
   unsigned int G;
@@ -701,6 +703,7 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
 
   if (dlsch->harq_processes[harq_pid]->round == 0) {  // this is a new packet
 
+    start_meas(&eNB->dlsch_turbo_encoding_preperation_stats);
     // Add 24-bit crc (polynomial A) to payload
     crc = crc24a(a,
                  A)>>8;
@@ -710,7 +713,9 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
 
     dlsch->harq_processes[harq_pid]->B = A+24;
     memcpy(dlsch->harq_processes[harq_pid]->b,a,(A/8)+4);
+    stop_meas(&eNB->dlsch_turbo_encoding_preperation_stats);
 
+    start_meas(&eNB->dlsch_turbo_encoding_segmentation_stats);
     if (lte_segmentation(dlsch->harq_processes[harq_pid]->b,
                          dlsch->harq_processes[harq_pid]->c,
                          dlsch->harq_processes[harq_pid]->B,
@@ -722,8 +727,26 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
                          &dlsch->harq_processes[harq_pid]->F)<0)
       return(-1);
 
+    stop_meas(&eNB->dlsch_turbo_encoding_segmentation_stats);
 
-
+    proc->tep[0].eNB               = eNB;
+    proc->tep[0].dlsch             = dlsch;
+    proc->tep[0].G                 = G;
+    proc->tep[0].harq_pid          = harq_pid;
+    
+    proc->tep[1].eNB               = eNB;
+    proc->tep[1].dlsch             = dlsch;
+    proc->tep[1].G                 = G;
+    proc->tep[1].harq_pid          = harq_pid;
+    
+    proc->tep[2].eNB               = eNB;
+    proc->tep[2].dlsch             = dlsch;
+    proc->tep[2].G                 = G;
+    proc->tep[2].harq_pid          = harq_pid;
+    
+    start_meas(&eNB->dlsch_turbo_encoding_signal_stats);
+      
+    pthread_mutex_lock( &proc->mutex_te[0] );
     if (proc->instance_cnt_te[0]==0) {
       printf("[eNB] TE thread busy\n");
       exit_fun("TE thread busy");
@@ -733,11 +756,6 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
 
     ++proc->instance_cnt_te[0];
 
-    proc->tep[0].eNB               = eNB;
-    proc->tep[0].dlsch             = dlsch;
-    proc->tep[0].G                 = G;
-    proc->tep[0].harq_pid          = harq_pid;
-
     // wakeup worker to do second half segments
     if (pthread_cond_signal(&proc->cond_te[0]) != 0) {
       printf("[eNB] ERROR pthread_cond_signal for te thread exit\n");
@@ -748,6 +766,7 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
 
     pthread_mutex_unlock( &proc->mutex_te[0] );
 ////////////////////////////////////////////////////////////////
+    pthread_mutex_lock( &proc->mutex_te[1] );
     if (proc->instance_cnt_te[1]==0) {
       printf("[eNB] TE thread busy\n");
       exit_fun("TE thread busy");
@@ -757,11 +776,6 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
 
     ++proc->instance_cnt_te[1];
 
-    proc->tep[1].eNB               = eNB;
-    proc->tep[1].dlsch             = dlsch;
-    proc->tep[1].G                 = G;
-    proc->tep[1].harq_pid          = harq_pid;
-
     // wakeup worker to do second half segments
     if (pthread_cond_signal(&proc->cond_te[1]) != 0) {
       printf("[eNB] ERROR pthread_cond_signal for te thread exit\n");
@@ -773,6 +787,7 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
     pthread_mutex_unlock( &proc->mutex_te[1] );
 
 ////////////////////////////////////////////////////////////////
+    pthread_mutex_lock( &proc->mutex_te[2] );
     if (proc->instance_cnt_te[2]==0) {
       printf("[eNB] TE thread busy\n");
       exit_fun("TE thread busy");
@@ -782,11 +797,6 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
 
     ++proc->instance_cnt_te[2];
 
-    proc->tep[2].eNB               = eNB;
-    proc->tep[2].dlsch             = dlsch;
-    proc->tep[2].G                 = G;
-    proc->tep[2].harq_pid          = harq_pid;
-
     // wakeup worker to do second half segments
     if (pthread_cond_signal(&proc->cond_te[2]) != 0) {
       printf("[eNB] ERROR pthread_cond_signal for te thread exit\n");
@@ -797,6 +807,7 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
     pthread_mutex_unlock( &proc->mutex_te[2] );
 ////////////////////////////////////////////////////////////////
 
+    stop_meas(&eNB->dlsch_turbo_encoding_signal_stats);
     start_meas(te_main_stats);
     for (r=(dlsch->harq_processes[harq_pid]->C>>2)*3; r<dlsch->harq_processes[harq_pid]->C; r++) {
 
diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h
index e4ff721b92e6d64f7f86c7473c5db8c45b58bbc9..a21f3b137861f0c21788bd8c2275134e5c64a86e 100644
--- a/openair1/PHY/defs.h
+++ b/openair1/PHY/defs.h
@@ -1143,8 +1143,11 @@ typedef struct PHY_VARS_eNB_s {
   time_stats_t dlsch_modulation_stats;
   time_stats_t dlsch_scrambling_stats;
   time_stats_t dlsch_rate_matching_stats;
+  time_stats_t dlsch_turbo_encoding_preperation_stats;
+  time_stats_t dlsch_turbo_encoding_segmentation_stats;
   time_stats_t dlsch_turbo_encoding_stats;
   time_stats_t dlsch_turbo_encoding_waiting_stats;
+  time_stats_t dlsch_turbo_encoding_signal_stats;
   time_stats_t dlsch_turbo_encoding_main_stats;
   time_stats_t dlsch_turbo_encoding_wakeup_stats0;
   time_stats_t dlsch_turbo_encoding_wakeup_stats1;
diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c
index 64731c9d8deb42a7e58575d44b0e353f694aa58c..cf5fe49a6a002e6e5f53836c4fc3ea1ad3cb99ff 100644
--- a/targets/RT/USER/lte-enb.c
+++ b/targets/RT/USER/lte-enb.c
@@ -711,7 +711,10 @@ static void* process_stats_thread(void* param) {
        if (eNB->td) print_meas(&eNB->ulsch_decoding_stats,"ulsch_decoding",NULL,NULL);
        if (eNB->te)
        {
+         print_meas(&eNB->dlsch_turbo_encoding_preperation_stats,"dlsch_coding_prepare",NULL,NULL);
+         print_meas(&eNB->dlsch_turbo_encoding_segmentation_stats,"dlsch_segmentation",NULL,NULL);
          print_meas(&eNB->dlsch_encoding_stats,"dlsch_encoding",NULL,NULL);
+         print_meas(&eNB->dlsch_turbo_encoding_signal_stats,"coding_signal",NULL,NULL);
          print_meas(&eNB->dlsch_turbo_encoding_main_stats,"coding_main",NULL,NULL);
          print_meas(&eNB->dlsch_turbo_encoding_waiting_stats,"coding_wait",NULL,NULL);
          print_meas(&eNB->dlsch_turbo_encoding_wakeup_stats0,"coding_worker_0",NULL,NULL);