diff --git a/common/utils/LOG/log.h b/common/utils/LOG/log.h
index 240e89a0e732701e13b99552b3846b3f2a85ea2e..d893708a8b5327d6af0fdd72852c6d374eb832d4 100644
--- a/common/utils/LOG/log.h
+++ b/common/utils/LOG/log.h
@@ -167,6 +167,7 @@ extern "C" {
     {"SECURITY",    DEBUG_SECURITY},\
     {"NAS",         DEBUG_NAS},\
     {"RLC",         DEBUG_RLC},\
+    {"DLSCH_DECOD", DEBUG_DLSCH_DECOD},\
     {"UE_TIMING",   UE_TIMING},\
     {NULL,-1}\
   }
diff --git a/common/utils/threadPool/thread-pool.h b/common/utils/threadPool/thread-pool.h
index 0ed8715811e1e7345d0600e7b332a176ff20a9d5..bd55203c7f9413a687363b2acc73e6facd5d4df3 100644
--- a/common/utils/threadPool/thread-pool.h
+++ b/common/utils/threadPool/thread-pool.h
@@ -45,7 +45,7 @@
 #define condwait(condition, mutex) AssertFatal(pthread_cond_wait(&condition, &mutex)==0,"");
 #define condbroadcast(signal) AssertFatal(pthread_cond_broadcast(&signal)==0,"");
 #define condsignal(signal)    AssertFatal(pthread_cond_broadcast(&signal)==0,"");
-
+#define tpool_nbthreads(tpool)   (tpool.nbThreads)
 typedef struct notifiedFIFO_elt_s {
   struct notifiedFIFO_elt_s *next;
   uint64_t key; //To filter out elements
diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c
index 82814cf106b23ec48dcb7ebac1b18c32d79f2f4c..9a8c4cb29657764d205b5d10da7847a6b9285d2e 100644
--- a/executables/nr-uesoftmodem.c
+++ b/executables/nr-uesoftmodem.c
@@ -111,17 +111,10 @@ extern int16_t  nr_dlsch_demod_shift;
 static int      tx_max_power[MAX_NUM_CCs] = {0};
 
 int      single_thread_flag = 1;
-int         threequarter_fs = 0;
-int         UE_scan_carrier = 0;
-int      UE_fo_compensation = 0;
-int UE_no_timing_correction = 0;
-int                 N_RB_DL = 0;
 int                 tddflag = 0;
 int                 vcdflag = 0;
-uint8_t       nb_antenna_tx = 1;
-uint8_t       nb_antenna_rx = 1;
+
 double          rx_gain_off = 0.0;
-uint32_t     timing_advance = 0;
 char             *usrp_args = NULL;
 char       *rrc_config_path = NULL;
 int               dumpframe = 0;
@@ -147,8 +140,7 @@ int16_t           node_synch_ref[MAX_NUM_CCs];
 int               otg_enabled;
 double            cpuf;
 
-runmode_t            mode = normal_txrx;
-int               UE_scan = 0;
+
 int          chain_offset = 0;
 int           card_offset = 0;
 uint64_t num_missed_slots = 0; // counter for the number of missed slots
@@ -222,38 +214,21 @@ nrUE_params_t *get_nrUE_params(void) {
 }
 /* initialie thread pools used for NRUE processing paralleliation */ 
 void init_tpools(uint8_t nun_dlsch_threads) {
-  
-  initTpool("-1,-1", &(nrUE_params.Tpool), false);
-  init_dlsch_tpool(nrUE_params.nr_dlsch_parallel);
+  char *params=calloc(1,(RX_NB_TH*2)+1);
+  for (int i=0; i<RX_NB_TH; i++) {
+    memcpy(params+(i*2),"-1",2);
+  }
+  initTpool(params, &(nrUE_params.Tpool), false);
+  free(params);
+  init_dlsch_tpool( nun_dlsch_threads);
 }
 static void get_options(void) {
 
-  char *loopfile=NULL;
-
-  paramdef_t cmdline_params[] =CMDLINE_PARAMS_DESC_UE ;
-  config_process_cmdline( cmdline_params,sizeof(cmdline_params)/sizeof(paramdef_t),NULL);
-  paramdef_t cmdline_uemodeparams[] = CMDLINE_UEMODEPARAMS_DESC;
-  paramdef_t cmdline_ueparams[] = CMDLINE_NRUEPARAMS_DESC;
-  config_process_cmdline( cmdline_uemodeparams,sizeof(cmdline_uemodeparams)/sizeof(paramdef_t),NULL);
-  config_process_cmdline( cmdline_ueparams,sizeof(cmdline_ueparams)/sizeof(paramdef_t),NULL);
-
-  if ( (cmdline_uemodeparams[CMDLINE_CALIBUERX_IDX].paramflags &  PARAMFLAG_PARAMSET) != 0) mode = rx_calib_ue;
-
-  if ( (cmdline_uemodeparams[CMDLINE_CALIBUERXMED_IDX].paramflags &  PARAMFLAG_PARAMSET) != 0) mode = rx_calib_ue_med;
+  paramdef_t cmdline_params[] =CMDLINE_NRUEPARAMS_DESC ;
+  int numparams = sizeof(cmdline_params)/sizeof(paramdef_t);
+  config_process_cmdline( cmdline_params,numparams,NULL);
 
-  if ( (cmdline_uemodeparams[CMDLINE_CALIBUERXBYP_IDX].paramflags &  PARAMFLAG_PARAMSET) != 0) mode = rx_calib_ue_byp;
 
-  if (cmdline_uemodeparams[CMDLINE_DEBUGUEPRACH_IDX].uptr)
-    if ( *(cmdline_uemodeparams[CMDLINE_DEBUGUEPRACH_IDX].uptr) > 0) mode = debug_prach;
-
-  if (cmdline_uemodeparams[CMDLINE_NOL2CONNECT_IDX].uptr)
-    if ( *(cmdline_uemodeparams[CMDLINE_NOL2CONNECT_IDX].uptr) > 0)  mode = no_L2_connect;
-
-  if (cmdline_uemodeparams[CMDLINE_CALIBPRACHTX_IDX].uptr)
-    if ( *(cmdline_uemodeparams[CMDLINE_CALIBPRACHTX_IDX].uptr) > 0) mode = calib_prach_tx;
-
-  if ((cmdline_uemodeparams[CMDLINE_DUMPMEMORY_IDX].paramflags & PARAMFLAG_PARAMSET) != 0)
-    mode = rx_dump_frame;
 
   if (vcdflag > 0)
     ouput_vcd = 1;
@@ -270,6 +245,38 @@ static void get_options(void) {
 
 // set PHY vars from command line
 void set_options(int CC_id, PHY_VARS_NR_UE *UE){
+  NR_DL_FRAME_PARMS *fp       = &UE->frame_parms;
+  paramdef_t cmdline_params[] = CMDLINE_NRUE_PHYPARAMS_DESC ;
+  int numparams               = sizeof(cmdline_params)/sizeof(paramdef_t);
+
+  UE->mode = normal_txrx;
+
+  config_process_cmdline( cmdline_params,numparams,NULL);
+
+  int pindex = config_paramidx_fromname(cmdline_params,numparams, CALIBRX_OPT);
+  if ( (cmdline_params[pindex].paramflags &  PARAMFLAG_PARAMSET) != 0) UE->mode = rx_calib_ue;
+  
+  pindex = config_paramidx_fromname(cmdline_params,numparams, CALIBRXMED_OPT);
+  if ( (cmdline_params[pindex].paramflags &  PARAMFLAG_PARAMSET) != 0) UE->mode = rx_calib_ue_med;
+
+  pindex = config_paramidx_fromname(cmdline_params,numparams, CALIBRXBYP_OPT);              
+  if ( (cmdline_params[pindex].paramflags &  PARAMFLAG_PARAMSET) != 0) UE->mode = rx_calib_ue_byp;
+
+  pindex = config_paramidx_fromname(cmdline_params,numparams, DBGPRACH_OPT); 
+  if (cmdline_params[pindex].uptr)
+    if ( *(cmdline_params[pindex].uptr) > 0) UE->mode = debug_prach;
+
+  pindex = config_paramidx_fromname(cmdline_params,numparams,NOL2CONNECT_OPT ); 
+  if (cmdline_params[pindex].uptr)
+    if ( *(cmdline_params[pindex].uptr) > 0)  UE->mode = no_L2_connect;
+
+  pindex = config_paramidx_fromname(cmdline_params,numparams,CALIBPRACH_OPT );
+  if (cmdline_params[pindex].uptr)
+    if ( *(cmdline_params[pindex].uptr) > 0) UE->mode = calib_prach_tx;
+
+  pindex = config_paramidx_fromname(cmdline_params,numparams,DUMPFRAME_OPT );
+  if ((cmdline_params[pindex].paramflags & PARAMFLAG_PARAMSET) != 0)
+    UE->mode = rx_dump_frame;
 
   // Init power variables
   tx_max_power[CC_id] = tx_max_power[0];
@@ -277,35 +284,29 @@ void set_options(int CC_id, PHY_VARS_NR_UE *UE){
   tx_gain[0][CC_id]   = tx_gain[0][0];
 
   // Set UE variables
-  UE->UE_scan              = UE_scan;
-  UE->UE_scan_carrier      = UE_scan_carrier;
-  UE->UE_fo_compensation   = UE_fo_compensation;
-  UE->no_timing_correction = UE_no_timing_correction;
-  UE->mode                 = mode;
+
   UE->rx_total_gain_dB     = (int)rx_gain[CC_id][0] + rx_gain_off;
   UE->tx_total_gain_dB     = (int)tx_gain[CC_id][0];
   UE->tx_power_max_dBm     = tx_max_power[CC_id];
   UE->rf_map.card          = card_offset;
   UE->rf_map.chain         = CC_id + chain_offset;
-  UE->timing_advance       = timing_advance;
 
-  LOG_I(PHY,"Set UE mode %d, UE_fo_compensation %d, UE_scan %d, UE_scan_carrier %d, UE_no_timing_correction %d \n", mode, UE_fo_compensation, UE_scan, UE_scan_carrier, UE_no_timing_correction);
+
+  LOG_I(PHY,"Set UE mode %d, UE_fo_compensation %d, UE_scan_carrier %d, UE_no_timing_correction %d \n", 
+  	   UE->mode, UE->UE_fo_compensation, UE->UE_scan_carrier, UE->no_timing_correction);
 
   // Set FP variables
-  NR_DL_FRAME_PARMS *fp = &UE->frame_parms;
-  fp->nb_antennas_tx    = nb_antenna_tx;
-  fp->nb_antennas_rx    = nb_antenna_rx;
-  fp->threequarter_fs   = threequarter_fs;
+
+
+  
   if (tddflag){
     fp->frame_type = TDD;
     LOG_I(PHY, "Set UE frame_type %d\n", fp->frame_type);
   }
-  if (N_RB_DL){
-    fp->N_RB_DL = N_RB_DL;
-    LOG_I(PHY, "Set UE N_RB_DL %d\n", N_RB_DL);
-  }
 
-  LOG_I(PHY, "Set UE nb_rx_antenna %d, nb_tx_antenna %d, threequarter_fs %d\n", nb_antenna_rx, nb_antenna_tx, threequarter_fs);
+  LOG_I(PHY, "Set UE N_RB_DL %d\n", fp->N_RB_DL);
+
+  LOG_I(PHY, "Set UE nb_rx_antenna %d, nb_tx_antenna %d, threequarter_fs %d\n", fp->nb_antennas_rx, fp->nb_antennas_tx, fp->threequarter_fs);
 
 }
 
@@ -555,7 +556,7 @@ int main( int argc, char **argv ) {
   for(int CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
     PHY_vars_UE_g[0][CC_id]->rf_map.card=0;
     PHY_vars_UE_g[0][CC_id]->rf_map.chain=CC_id+chain_offset;
-    PHY_vars_UE_g[0][CC_id]->timing_advance = timing_advance;
+    PHY_vars_UE_g[0][CC_id]->timing_advance = UE[CC_id]->timing_advance;
   }
   
   init_NR_UE_threads(1);
diff --git a/executables/nr-uesoftmodem.h b/executables/nr-uesoftmodem.h
index ec6409cf80cf498f70bd3d8bbfecfd1e9956df42..de5aa377fc6ef9ea0318ebd57a8355ca33c676d7 100644
--- a/executables/nr-uesoftmodem.h
+++ b/executables/nr-uesoftmodem.h
@@ -5,72 +5,62 @@
 #include "PHY/defs_nr_UE.h"
 #include "SIMULATION/ETH_TRANSPORT/proto.h"
 
+
+
+
+#define  CONFIG_HLP_DLSCH_PARA             "number of threads for dlsch processing 0 for no parallelization"
 /***************************************************************************************************************************************/
 /* command line options definitions, CMDLINE_XXXX_DESC macros are used to initialize paramdef_t arrays which are then used as argument
    when calling config_get or config_getlist functions                                                                                 */
 
+#define CALIBRX_OPT       "calib-ue-rx"
+#define CALIBRXMED_OPT    "calib-ue-rx-med"
+#define CALIBRXBYP_OPT    "calib-ue-rx-byp"
+#define DBGPRACH_OPT      "debug-ue-prach"
+#define NOL2CONNECT_OPT   "no-L2-connect"
+#define CALIBPRACH_OPT    "calib-prach-tx"
+#define DUMPFRAME_OPT     "ue-dump-frame"
 
 /*------------------------------------------------------------------------------------------------------------------------------------------*/
 /*                                            command line parameters defining UE running mode                                              */
 /*   optname                     helpstr                paramflags                      XXXptr        defXXXval         type       numelt   */
 /*------------------------------------------------------------------------------------------------------------------------------------------*/
-#define CMDLINE_UEMODEPARAMS_DESC {  \
-    {"calib-ue-rx",              CONFIG_HLP_CALUER,     0,                iptr:&rx_input_level_dBm,   defintval:0,        TYPE_INT,   0},    \
-    {"calib-ue-rx-med",          CONFIG_HLP_CALUERM,    0,                iptr:&rx_input_level_dBm,   defintval:0,        TYPE_INT,   0},    \
-    {"calib-ue-rx-byp",          CONFIG_HLP_CALUERB,    0,                iptr:&rx_input_level_dBm,   defintval:0,        TYPE_INT,   0},    \
-    {"debug-ue-prach",           CONFIG_HLP_DBGUEPR,    PARAMFLAG_BOOL,   uptr:NULL,                  defuintval:1,       TYPE_INT,   0},    \
-    {"no-L2-connect",            CONFIG_HLP_NOL2CN,     PARAMFLAG_BOOL,   uptr:NULL,                  defuintval:1,       TYPE_INT,   0},    \
-    {"calib-prach-tx",           CONFIG_HLP_CALPRACH,   PARAMFLAG_BOOL,   uptr:NULL,                  defuintval:1,       TYPE_INT,   0},    \
-    {"loop-memory",              CONFIG_HLP_UELOOP,     0,                strptr:&loopfile,           defstrval:"iqs.in", TYPE_STRING,0},    \
-    {"ue-dump-frame",            CONFIG_HLP_DUMPFRAME,  PARAMFLAG_BOOL,   iptr:&dumpframe,            defintval:0,        TYPE_INT,   0},    \
-  }
-#define CMDLINE_CALIBUERX_IDX                   0
-#define CMDLINE_CALIBUERXMED_IDX                1
-#define CMDLINE_CALIBUERXBYP_IDX                2
-#define CMDLINE_DEBUGUEPRACH_IDX                3
-#define CMDLINE_NOL2CONNECT_IDX                 4
-#define CMDLINE_CALIBPRACHTX_IDX                5
-#define CMDLINE_MEMLOOP_IDX                     6
-#define CMDLINE_DUMPMEMORY_IDX                  7
-/*------------------------------------------------------------------------------------------------------------------------------------------*/
-
-
-/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/
-/*                                            command line parameters specific to UE                                                                       */
-/*   optname                     helpstr             paramflags                  XXXptr                      defXXXval              type          numelt   */
-/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/
 #define CMDLINE_NRUEPARAMS_DESC {  \
-    {"ue-rxgain",                CONFIG_HLP_UERXG,       0,              dblptr:&(rx_gain[0][0]),            defdblval:0,           TYPE_DOUBLE,   0},     \
-    {"ue-rxgain-off",            CONFIG_HLP_UERXGOFF,    0,              dblptr:&rx_gain_off,                defdblval:0,           TYPE_DOUBLE,   0},     \
-    {"ue-txgain",                CONFIG_HLP_UETXG,       0,              dblptr:&(tx_gain[0][0]),            defdblval:0,           TYPE_DOUBLE,   0},     \
-    {"ue-nb-ant-rx",             CONFIG_HLP_UENANTR,     0,              u8ptr:&nb_antenna_rx,               defuintval:1,          TYPE_UINT8,    0},     \
-    {"ue-nb-ant-tx",             CONFIG_HLP_UENANTT,     0,              u8ptr:&nb_antenna_tx,               defuintval:1,          TYPE_UINT8,    0},     \
-    {"ue-scan-carrier",          CONFIG_HLP_UESCAN,      PARAMFLAG_BOOL, iptr:&UE_scan_carrier,              defintval:0,           TYPE_INT,      0},     \
-    {"ue-fo-compensation",       CONFIG_HLP_UEFO,        PARAMFLAG_BOOL, iptr:&UE_fo_compensation,           defintval:0,           TYPE_INT,      0},     \
-    {"ue-max-power",             NULL,                   0,              iptr:&(tx_max_power[0]),            defintval:90,          TYPE_INT,      0},     \
-    {"r"  ,                      CONFIG_HLP_PRB,         0,              iptr:&(N_RB_DL),                    defintval:25,          TYPE_UINT,     0},     \
-    {"usrp-args",                CONFIG_HLP_USRP_ARGS,   0,              strptr:(char **)&usrp_args,         defstrval:"type=b200", TYPE_STRING,   0}      \
-  }
-
-  
-#define  CONFIG_HLP_DLSCH_PARA             "number of threads for dlsch processing 0 for no parallelization"
-/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
-/*                                            command line parameters common to gNB and UE                                                            */
-/*   optname                helpstr                 paramflags      XXXptr                                 defXXXval              type         numelt */
-/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
-#define CMDLINE_PARAMS_DESC_UE {  \
-  {"single-thread-disable", CONFIG_HLP_NOSNGLT,     PARAMFLAG_BOOL, iptr:&single_thread_flag,                 defintval:1,           TYPE_INT,    0}, \
-  {"dlsch-parallel",        CONFIG_HLP_DLSCH_PARA,  0,              iptr:(int32_t *)&nrUE_params.nr_dlsch_parallel,       defintval:0,           TYPE_UINT8,  0}, \
-  {"nr-dlsch-demod-shift",  CONFIG_HLP_DLSHIFT,     0,              iptr:(int32_t *)&nr_dlsch_demod_shift,    defintval:0,           TYPE_INT,    0}, \
-  {"A" ,                    CONFIG_HLP_TADV,        0,              uptr:&timing_advance,                     defintval:0,           TYPE_UINT,   0}, \
-  {"E" ,                    CONFIG_HLP_TQFS,        PARAMFLAG_BOOL, i8ptr:&(openair0_cfg[0].threequarter_fs), defintval:0,          TYPE_INT8,    0}, \
-  {"T" ,                    CONFIG_HLP_TDD,         PARAMFLAG_BOOL, iptr:&tddflag,                            defintval:0,           TYPE_INT,    0}, \
-  {"V" ,                    CONFIG_HLP_VCD,         PARAMFLAG_BOOL, iptr:&vcdflag,                            defintval:0,           TYPE_INT,    0}, \
-  {"ue-timing-correction-disable", CONFIG_HLP_DISABLETIMECORR, PARAMFLAG_BOOL, iptr:&UE_no_timing_correction, defintval:0,           TYPE_INT,    0}, \
-  {"rrc_config_path",       CONFIG_HLP_RRC_CFG_PATH,0,              strptr:(char **)&rrc_config_path,         defstrval:"./",        TYPE_STRING, 0} \
+    {"usrp-args",                CONFIG_HLP_USRP_ARGS,   0,               strptr:(char **)&usrp_args,         defstrval:"type=b200", TYPE_STRING,   0},    \
+    {"single-thread-disable",    CONFIG_HLP_NOSNGLT,     PARAMFLAG_BOOL,  iptr:&single_thread_flag,           defintval:1,           TYPE_INT,    0}, \
+    {"dlsch-parallel",           CONFIG_HLP_DLSCH_PARA,  0,               iptr:(int32_t *)&nrUE_params.nr_dlsch_parallel,       defintval:0,           TYPE_UINT8,  0}, \
+    {"nr-dlsch-demod-shift",     CONFIG_HLP_DLSHIFT,     0,               iptr:(int32_t *)&nr_dlsch_demod_shift,    defintval:0,     TYPE_INT,    0}, \
+    {"V" ,                       CONFIG_HLP_VCD,         PARAMFLAG_BOOL,  iptr:&vcdflag,                            defintval:0,     TYPE_INT,    0}, \
+    {"rrc_config_path",          CONFIG_HLP_RRC_CFG_PATH,0,               strptr:(char **)&rrc_config_path,         defstrval:"./",  TYPE_STRING, 0} \
 }
 
 
+/*------------------------------------------------------------------------------------------------------------------------------------------*/
+/*                                            command line parameters defining UE running mode                                              */
+/*   optname                     helpstr                paramflags                      XXXptr        defXXXval         type       numelt   */
+/*------------------------------------------------------------------------------------------------------------------------------------------*/
+#define CMDLINE_NRUE_PHYPARAMS_DESC {  \
+    { CALIBRX_OPT,               CONFIG_HLP_CALUER,     0,                iptr:&rx_input_level_dBm,           defintval:0,           TYPE_INT,   0},    \
+    { CALIBRXMED_OPT,            CONFIG_HLP_CALUERM,    0,                iptr:&rx_input_level_dBm,           defintval:0,           TYPE_INT,   0},    \
+    { CALIBRXBYP_OPT,            CONFIG_HLP_CALUERB,    0,                iptr:&rx_input_level_dBm,           defintval:0,           TYPE_INT,   0},    \
+    { DBGPRACH_OPT,              CONFIG_HLP_DBGUEPR,    PARAMFLAG_BOOL,   uptr:NULL,                          defuintval:1,          TYPE_INT,   0},    \
+    { NOL2CONNECT_OPT,           CONFIG_HLP_NOL2CN,     PARAMFLAG_BOOL,   uptr:NULL,                          defuintval:1,          TYPE_INT,   0},    \
+    {CALIBPRACH_OPT,             CONFIG_HLP_CALPRACH,   PARAMFLAG_BOOL,   uptr:NULL,                          defuintval:1,          TYPE_INT,   0},    \
+    { DUMPFRAME_OPT,             CONFIG_HLP_DUMPFRAME,  PARAMFLAG_BOOL,   iptr:&dumpframe,                    defintval:0,           TYPE_INT,   0},    \
+    {"ue-rxgain",                CONFIG_HLP_UERXG,       0,               dblptr:&(rx_gain[0][0]),            defdblval:0,           TYPE_DOUBLE,   0},     \
+    {"ue-rxgain-off",            CONFIG_HLP_UERXGOFF,    0,               dblptr:&rx_gain_off,                defdblval:0,           TYPE_DOUBLE,   0},     \
+    {"ue-txgain",                CONFIG_HLP_UETXG,       0,               dblptr:&(tx_gain[0][0]),            defdblval:0,           TYPE_DOUBLE,   0},     \
+    {"ue-nb-ant-rx",             CONFIG_HLP_UENANTR,     0,               u8ptr:&(fp->nb_antennas_rx),         defuintval:1,          TYPE_UINT8,    0},     \
+    {"ue-nb-ant-tx",             CONFIG_HLP_UENANTT,     0,               u8ptr:&(fp->nb_antennas_tx),         defuintval:1,          TYPE_UINT8,    0},     \
+    {"ue-scan-carrier",          CONFIG_HLP_UESCAN,      PARAMFLAG_BOOL,  iptr:&(UE->UE_scan_carrier),        defintval:0,           TYPE_INT,      0},     \
+    {"ue-fo-compensation",       CONFIG_HLP_UEFO,        PARAMFLAG_BOOL,  iptr:&(UE->UE_fo_compensation),     defintval:0,           TYPE_INT,      0},     \
+    {"ue-max-power",             NULL,                   0,               iptr:&(tx_max_power[0]),            defintval:90,          TYPE_INT,      0},     \
+    {"r"  ,                      CONFIG_HLP_PRB,         0,               iptr:&(fp->N_RB_DL),                defintval:25,          TYPE_UINT,     0},     \
+    {"A" ,                       CONFIG_HLP_TADV,        0,               iptr:&(UE->timing_advance),         defintval:0,           TYPE_INT,   0}, \
+    {"E" ,                       CONFIG_HLP_TQFS,        PARAMFLAG_BOOL,  u8ptr:&(fp->threequarter_fs),       defintval:0,           TYPE_UINT8,    0}, \
+    {"T" ,                       CONFIG_HLP_TDD,         PARAMFLAG_BOOL,  iptr:&tddflag,                            defintval:0,     TYPE_INT,    0}, \
+    {"ue-timing-correction-disable", CONFIG_HLP_DISABLETIMECORR, PARAMFLAG_BOOL, iptr:&(UE->no_timing_correction), defintval:0,         TYPE_INT,    0}, \
+}
 
 
 typedef struct {
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
index 70ff18d22157500ff01c01c980dc59cdb0864c5e..d97bb36717bb0f31f3cd59ad16fb835bf6a4a341 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
@@ -65,11 +65,12 @@ void init_dlsch_tpool(uint8_t nun_dlsch_threads)
     if( nun_dlsch_threads==0)
     	return;
 
-    char *params=malloc(nun_dlsch_threads*3*sizeof(char));
-    for (int i=0; i<nun_dlsch_threads; i++) {
-  	  memcpy(params+(i*3),"-1\0",3);
+  char *params=calloc(1,(nun_dlsch_threads*2)+1);
+  for (int i=0; i<nun_dlsch_threads; i++) {
+    memcpy(params+(i*2),"-1",2);
   }
-    initTpool(params, &pool_dl, false);	
+  initTpool(params, &pool_dl, false);
+  free(params);
 }
 
 
@@ -1434,7 +1435,7 @@ void nr_dlsch_decoding_process(void *arg)
 
   Kr = harq_process->K;
   Kr_bytes = Kr>>3;
-  K_bits_F = Kr-harq_process->F;
+  K_bytes_F = Kr-harq_process->F;
 
   E = nr_get_E(G, harq_process->C, harq_process->Qm, harq_process->Nl, r);
 
@@ -1546,9 +1547,9 @@ void nr_dlsch_decoding_process(void *arg)
         //set first 2*Z_c bits to zeros
         memset(&z[0],0,2*harq_process->Z*sizeof(int16_t));
         //set Filler bits
-        memset((&z[0]+K_bits_F),127,harq_process->F*sizeof(int16_t));
+        memset((&z[0]+K_bytes_F),127,harq_process->F*sizeof(int16_t));
         //Move coded bits before filler bits
-        memcpy((&z[0]+2*harq_process->Z),harq_process->d[r],(K_bits_F-2*harq_process->Z)*sizeof(int16_t));
+        memcpy((&z[0]+2*harq_process->Z),harq_process->d[r],(K_bytes_F-2*harq_process->Z)*sizeof(int16_t));
         //skip filler bits
         memcpy((&z[0]+Kr),harq_process->d[r]+(Kr-2*harq_process->Z),(kc*harq_process->Z-Kr)*sizeof(int16_t));
         //Saturate coded bits before decoding into 8 bits values
@@ -1609,7 +1610,7 @@ void *dlsch_thread(void *arg) {
   notifiedFIFO_elt_t *res_dl;
   initNotifiedFIFO_nothreadSafe(&freeBlocks_dl);
 
-  for (int i=0; i<RX_NB_TH_DL+1; i++){
+  for (int i=0; i<tpool_nbthreads(pool_dl)+1; i++){
     pushNotifiedFIFO_nothreadSafe(&freeBlocks_dl,
                                   newNotifiedFIFO_elt(sizeof(nr_rxtx_thread_data_t), 0,&nf,nr_dlsch_decoding_process));}
 
@@ -1617,7 +1618,7 @@ void *dlsch_thread(void *arg) {
 
     notifiedFIFO_elt_t *res;
 
-    while (nbDlProcessing >= RX_NB_TH_DL) {
+    while (nbDlProcessing >= tpool_nbthreads(pool_dl)) {
       if ( (res=tryPullTpool(&nf, &pool_dl)) != NULL ) {
         //nbDlProcessing--;
         pushNotifiedFIFO_nothreadSafe(&freeBlocks_dl,res);