diff --git a/executables/nr-ue.c b/executables/nr-ue.c
index fd306e7f7a63b754d6d29b4d896db9b052ae5105..821ccd994310172d269d70796ea7035bc3673064 100644
--- a/executables/nr-ue.c
+++ b/executables/nr-ue.c
@@ -158,6 +158,9 @@ void init_nr_ue_vars(PHY_VARS_NR_UE *ue,
 
   // intialize transport
   init_nr_ue_transport(ue, abstraction_flag);
+
+  // init N_TA offset
+  init_N_TA_offset(ue);
 }
 
 /*!
diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c
index ca12a7ad02a83c73ea2a750ba0c1d99fed432877..f931b59f98f17ecdd6461769ede6171d3adf09aa 100644
--- a/executables/nr-uesoftmodem.c
+++ b/executables/nr-uesoftmodem.c
@@ -685,51 +685,6 @@ int main( int argc, char **argv ) {
 
     UE[CC_id]->rx_total_gain_dB =  (int)rx_gain[CC_id][0] + rx_gain_off;
     UE[CC_id]->tx_power_max_dBm = tx_max_power[CC_id];
-
-    if (UE[CC_id]->frame_parms.frame_type == FDD) {
-      UE[CC_id]->N_TA_offset = 0;
-    } else {
-      int N_RB = UE[CC_id]->frame_parms.N_RB_DL;
-      int N_TA_offset = UE[CC_id]->frame_parms.ul_CarrierFreq < 6e9 ? 400 : 431; // reference samples  for 25600Tc @ 30.72 Ms/s for FR1, same @ 61.44 Ms/s for FR2
-      double factor=1;
-      switch (UE[CC_id]->frame_parms.numerology_index) {
-        case 0: //15 kHz scs
-          AssertFatal(N_TA_offset == 400, "scs_common 15kHz only for FR1\n");
-          if (N_RB <= 25) factor = .25;      // 7.68 Ms/s
-          else if (N_RB <=50) factor = .5;   // 15.36 Ms/s
-          else if (N_RB <=75) factor = 1.0;  // 30.72 Ms/s
-          else if (N_RB <=100) factor = 1.0; // 30.72 Ms/s
-          else AssertFatal(1==0,"Too many PRBS for mu=0\n");
-          break;
-        case 1: //30 kHz sc
-          AssertFatal(N_TA_offset == 400, "scs_common 30kHz only for FR1\n");
-          if (N_RB <= 106) factor = 2.0; // 61.44 Ms/s
-          else if (N_RB <= 275) factor = 4.0; // 122.88 Ms/s
-          break;
-        case 2: //60 kHz scs
-          AssertFatal(1==0,"scs_common should not be 60 kHz\n");
-          break;
-        case 3: //120 kHz scs
-          AssertFatal(N_TA_offset == 431, "scs_common 120kHz only for FR2\n");
-          break;
-        case 4: //240 kHz scs
-          AssertFatal(1==0,"scs_common should not be 60 kHz\n");
-          if (N_RB <= 32) factor = 1.0; // 61.44 Ms/s
-          else if (N_RB <= 66) factor = 2.0; // 122.88 Ms/s
-          else AssertFatal(1==0,"N_RB %d is too big for curretn FR2 implementation\n",N_RB);
-          break;
-
-        if (N_RB == 100)
-          UE[CC_id]->N_TA_offset = 624;
-        else if (N_RB == 50)
-          UE[CC_id]->N_TA_offset = 624/2;
-        else if (N_RB == 25)
-          UE[CC_id]->N_TA_offset = 624/4;
-      }
-      if (UE[CC_id]->frame_parms.threequarter_fs == 1) factor = factor*.75;
-      UE[CC_id]->N_TA_offset = (int)(N_TA_offset * factor);
-      LOG_I(PHY,"UE %d Setting N_TA_offset to %d samples (factor %f, UL Freq %lu, N_RB %d)\n", UE[CC_id]->Mod_id, UE[CC_id]->N_TA_offset, factor, UE[CC_id]->frame_parms.ul_CarrierFreq, N_RB);
-    }
   }
 
   //  printf("tx_max_power = %d -> amp %d\n",tx_max_power[0],get_tx_amp(tx_max_poHwer,tx_max_power));
diff --git a/openair1/PHY/INIT/nr_init_ue.c b/openair1/PHY/INIT/nr_init_ue.c
index d5a6b44a70b9bfad1f1a5249e8dfe2629f45f428..dfc319a41b459bff7e5be422728ff933d901287c 100644
--- a/openair1/PHY/INIT/nr_init_ue.c
+++ b/openair1/PHY/INIT/nr_init_ue.c
@@ -760,6 +760,61 @@ void init_nr_ue_transport(PHY_VARS_NR_UE *ue,
   ue->dlsch_MCH[0]  = new_nr_ue_dlsch(1,NR_MAX_DLSCH_HARQ_PROCESSES,NSOFT,MAX_LDPC_ITERATIONS_MBSFN,ue->frame_parms.N_RB_DL,0);
 }
 
+
+void init_N_TA_offset(PHY_VARS_NR_UE *ue){
+
+  NR_DL_FRAME_PARMS *fp = &ue->frame_parms;
+
+  if (fp->frame_type == FDD) {
+    ue->N_TA_offset = 0;
+  } else {
+    int N_RB = fp->N_RB_DL;
+    int N_TA_offset = fp->ul_CarrierFreq < 6e9 ? 400 : 431; // reference samples  for 25600Tc @ 30.72 Ms/s for FR1, same @ 61.44 Ms/s for FR2
+    double factor = 1;
+    switch (fp->numerology_index) {
+      case 0: //15 kHz scs
+        AssertFatal(N_TA_offset == 400, "scs_common 15kHz only for FR1\n");
+        if (N_RB <= 25) factor = .25;      // 7.68 Ms/s
+        else if (N_RB <=50) factor = .5;   // 15.36 Ms/s
+        else if (N_RB <=75) factor = 1.0;  // 30.72 Ms/s
+        else if (N_RB <=100) factor = 1.0; // 30.72 Ms/s
+        else AssertFatal(1==0, "Too many PRBS for mu=0\n");
+        break;
+      case 1: //30 kHz sc
+        AssertFatal(N_TA_offset == 400, "scs_common 30kHz only for FR1\n");
+        if (N_RB <= 106) factor = 2.0; // 61.44 Ms/s
+        else if (N_RB <= 275) factor = 4.0; // 122.88 Ms/s
+        break;
+      case 2: //60 kHz scs
+        AssertFatal(1==0, "scs_common should not be 60 kHz\n");
+        break;
+      case 3: //120 kHz scs
+        AssertFatal(N_TA_offset == 431, "scs_common 120kHz only for FR2\n");
+        break;
+      case 4: //240 kHz scs
+        AssertFatal(1==0, "scs_common should not be 60 kHz\n");
+        if (N_RB <= 32) factor = 1.0; // 61.44 Ms/s
+        else if (N_RB <= 66) factor = 2.0; // 122.88 Ms/s
+        else AssertFatal(1==0, "N_RB %d is too big for curretn FR2 implementation\n", N_RB);
+        break;
+
+      if (N_RB == 100)
+        ue->N_TA_offset = 624;
+      else if (N_RB == 50)
+        ue->N_TA_offset = 624/2;
+      else if (N_RB == 25)
+        ue->N_TA_offset = 624/4;
+    }
+
+    if (fp->threequarter_fs == 1)
+      factor = factor*.75;
+
+    ue->N_TA_offset = (int)(N_TA_offset * factor);
+
+    LOG_I(PHY,"UE %d Setting N_TA_offset to %d samples (factor %f, UL Freq %lu, N_RB %d)\n", ue->Mod_id, ue->N_TA_offset, factor, fp->ul_CarrierFreq, N_RB);
+  }
+}
+
 void phy_init_nr_top(PHY_VARS_NR_UE *ue) {
   NR_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
   crcTableInit();
diff --git a/openair1/PHY/INIT/phy_init.h b/openair1/PHY/INIT/phy_init.h
index 1862d5f8e00595bf05abb4d58f8f733e43a9227f..5323136e2b22ee84a677cfd5feb7be2e801f2ba8 100644
--- a/openair1/PHY/INIT/phy_init.h
+++ b/openair1/PHY/INIT/phy_init.h
@@ -397,6 +397,7 @@ int nr_init_frame_parms(nfapi_nr_config_request_scf_t *config, NR_DL_FRAME_PARMS
 int nr_init_frame_parms_ue(NR_DL_FRAME_PARMS *frame_parms,fapi_nr_config_request_t *config,int Ncp);
 int init_nr_ue_signal(PHY_VARS_NR_UE *ue,int nb_connected_eNB,uint8_t abstraction_flag);
 void init_nr_ue_transport(PHY_VARS_NR_UE *ue,int abstraction_flag);
+void init_N_TA_offset(PHY_VARS_NR_UE *ue);
 void nr_dump_frame_parms(NR_DL_FRAME_PARMS *frame_parms);
 int phy_init_nr_gNB(PHY_VARS_gNB *gNB, unsigned char is_secondary_gNB, unsigned char abstraction_flag);
 void nr_phy_config_request(NR_PHY_Config_t *gNB);