diff --git a/openair3/NAS/TOOLS/conf2uedata.c b/openair3/NAS/TOOLS/conf2uedata.c
index a3beb27b2d2b7504231a208ca05081db0ed43051..804c8aecdbaf5b23d353a2ef3e28fd14680dea1a 100644
--- a/openair3/NAS/TOOLS/conf2uedata.c
+++ b/openair3/NAS/TOOLS/conf2uedata.c
@@ -18,7 +18,6 @@ int *ocplmn = NULL;
 int *fplmn = NULL;
 int *ehplmn = NULL;
 
-int hplmn_index = 0;
 int plmn_nb = 0;
 int ucplmn_nb = 0;
 int oplmn_nb = 0;
diff --git a/openair3/NAS/TOOLS/conf2uedata.h b/openair3/NAS/TOOLS/conf2uedata.h
index 7ae326bf1c49ab56cd2d7cdb124c003236b07e5c..ed74ccf288b63b23d0e334e4f47eefbbb045cf42 100644
--- a/openair3/NAS/TOOLS/conf2uedata.h
+++ b/openair3/NAS/TOOLS/conf2uedata.h
@@ -49,7 +49,6 @@ extern int *ocplmn;
 extern int *fplmn;
 extern int *ehplmn;
 
-extern int hplmn_index;
 extern int plmn_nb;
 extern int ucplmn_nb;
 extern int oplmn_nb;
diff --git a/openair3/NAS/TOOLS/conf_emm.c b/openair3/NAS/TOOLS/conf_emm.c
index ad877e32efcf145be065ca42849ed41fb2012021..de696592de92c52c6d8e0d09d3400c58ed5fda40 100644
--- a/openair3/NAS/TOOLS/conf_emm.c
+++ b/openair3/NAS/TOOLS/conf_emm.c
@@ -6,11 +6,10 @@
 #include "fs.h"
 
 void gen_emm_data(emm_nvdata_t *emm_data, const char *hplmn, const char *msin) {
-	hplmn_index = get_plmn_index(hplmn);
 	memset(emm_data, 0, sizeof(emm_nvdata_t));
 	int hplmn_index = get_plmn_index(hplmn);
 	emm_data->imsi.length = 8;
-	emm_data->imsi.u.num.parity = get_msin_parity(msin);
+	emm_data->imsi.u.num.parity = get_msin_parity(msin, user_plmn_list[hplmn_index].mcc, user_plmn_list[hplmn_index].mnc);
 	emm_data->imsi.u.num.digit1 = user_plmn_list[hplmn_index].mcc[0];
 	emm_data->imsi.u.num.digit2 = user_plmn_list[hplmn_index].mcc[1];
 	emm_data->imsi.u.num.digit3 = user_plmn_list[hplmn_index].mcc[2];
@@ -69,9 +68,9 @@ int write_emm_data(const char *directory, int user_id, emm_nvdata_t *emm_data) {
     return(EXIT_SUCCESS);
 }
 
-int get_msin_parity(const char * msin) {
-	int imsi_size = strlen(msin) + strlen(user_plmn_list[hplmn_index].mcc)
-			+ strlen(user_plmn_list[hplmn_index].mnc);
+int get_msin_parity(const char * msin, const char *mcc, const char *mnc) {
+	int imsi_size = strlen(msin) + strlen(mcc)
+			+ strlen(mnc);
 	int result = (imsi_size % 2 == 0) ? 0 : 1;
 	return result;
 
diff --git a/openair3/NAS/TOOLS/conf_emm.h b/openair3/NAS/TOOLS/conf_emm.h
index 80562aba55470a3f781ce1761478839c1a68d0d8..996e63ca05c1ab6d5d388fa93c43a972a36e81da 100644
--- a/openair3/NAS/TOOLS/conf_emm.h
+++ b/openair3/NAS/TOOLS/conf_emm.h
@@ -5,6 +5,6 @@
 
 void gen_emm_data(emm_nvdata_t *emm_data, const char *hplmn, const char *msin);
 int write_emm_data(const char *directory, int user_id, emm_nvdata_t *emm_data);
-int get_msin_parity(const char * msin);
+int get_msin_parity(const char * msin, const char *mcc, const char *mnc);
 
 #endif
diff --git a/openair3/NAS/TOOLS/conf_usim.c b/openair3/NAS/TOOLS/conf_usim.c
index ee8ed8e0d0b0fbced8714ff0d4ce96ee892968b6..345309996fc2bba01078105b284c135fc670a226 100644
--- a/openair3/NAS/TOOLS/conf_usim.c
+++ b/openair3/NAS/TOOLS/conf_usim.c
@@ -41,9 +41,12 @@ int parse_ue_sim_param(config_setting_t *ue_setting, int user_id, usim_data_conf
 }
 
 void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data) {
+    int hplmn_index = get_plmn_index(u->hplmn);
 	memset(usim_data, 0, sizeof(usim_data_t));
 	usim_data->imsi.length = 8;
-	usim_data->imsi.u.num.parity = get_msin_parity(u->msin);
+	usim_data->imsi.u.num.parity = get_msin_parity(u->msin,
+		user_plmn_list[hplmn_index].mcc,
+		user_plmn_list[hplmn_index].mnc);
 
 	usim_data->imsi.u.num.digit1 = user_plmn_list[hplmn_index].mcc[0];
 	usim_data->imsi.u.num.digit2 = user_plmn_list[hplmn_index].mcc[1];