diff --git a/openair3/S1AP/s1ap_eNB_nas_procedures.c b/openair3/S1AP/s1ap_eNB_nas_procedures.c
index ebd5bab4fdd8e1b80ec8a61025fafac4501c19ed..c87f1106e0bf9b63f1bc2073bb47f082567b123a 100644
--- a/openair3/S1AP/s1ap_eNB_nas_procedures.c
+++ b/openair3/S1AP/s1ap_eNB_nas_procedures.c
@@ -124,6 +124,7 @@ int s1ap_eNB_handle_nas_first_req(
   ue_desc_p->mme_ref       = mme_desc_p;
   ue_desc_p->ue_initial_id = s1ap_nas_first_req_p->ue_initial_id;
   ue_desc_p->eNB_instance  = instance_p;
+  ue_desc_p->selected_plmn_identity = s1ap_nas_first_req_p->selected_plmn_identity;
 
   do {
     struct s1ap_eNB_ue_context_s *collision_p;
@@ -172,9 +173,9 @@ int s1ap_eNB_handle_nas_first_req(
   ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_TAI;
   /* Assuming TAI is the TAI from the cell */
   INT16_TO_OCTET_STRING(instance_p->tac, &ie->value.choice.TAI.tAC);
-  MCC_MNC_TO_PLMNID(instance_p->mcc,
-                    instance_p->mnc,
-                    instance_p->mnc_digit_length,
+  MCC_MNC_TO_PLMNID(instance_p->mcc[ue_desc_p->selected_plmn_identity],
+                    instance_p->mnc[ue_desc_p->selected_plmn_identity],
+                    instance_p->mnc_digit_length[ue_desc_p->selected_plmn_identity],
                     &ie->value.choice.TAI.pLMNidentity);
   ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
 
@@ -191,9 +192,9 @@ int s1ap_eNB_handle_nas_first_req(
   MACRO_ENB_ID_TO_CELL_IDENTITY(instance_p->eNB_id,
                                 0, // Cell ID
                                 &ie->value.choice.EUTRAN_CGI.cell_ID);
-  MCC_MNC_TO_TBCD(instance_p->mcc,
-                  instance_p->mnc,
-                  instance_p->mnc_digit_length,
+  MCC_MNC_TO_TBCD(instance_p->mcc[ue_desc_p->selected_plmn_identity],
+                  instance_p->mnc[ue_desc_p->selected_plmn_identity],
+                  instance_p->mnc_digit_length[ue_desc_p->selected_plmn_identity],
                   &ie->value.choice.EUTRAN_CGI.pLMNidentity);
   ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
 
@@ -608,9 +609,9 @@ int s1ap_eNB_nas_uplink(instance_t instance, s1ap_uplink_nas_t *s1ap_uplink_nas_
   ie->criticality = S1AP_Criticality_ignore;
   ie->value.present = S1AP_UplinkNASTransport_IEs__value_PR_EUTRAN_CGI;
   MCC_MNC_TO_PLMNID(
-    s1ap_eNB_instance_p->mcc,
-    s1ap_eNB_instance_p->mnc,
-    s1ap_eNB_instance_p->mnc_digit_length,
+    s1ap_eNB_instance_p->mcc[ue_context_p->selected_plmn_identity],
+    s1ap_eNB_instance_p->mnc[ue_context_p->selected_plmn_identity],
+    s1ap_eNB_instance_p->mnc_digit_length[ue_context_p->selected_plmn_identity],
     &ie->value.choice.EUTRAN_CGI.pLMNidentity);
   //#warning "TODO get cell id from RRC"
   MACRO_ENB_ID_TO_CELL_IDENTITY(s1ap_eNB_instance_p->eNB_id,
@@ -624,9 +625,9 @@ int s1ap_eNB_nas_uplink(instance_t instance, s1ap_uplink_nas_t *s1ap_uplink_nas_
   ie->criticality = S1AP_Criticality_ignore;
   ie->value.present = S1AP_UplinkNASTransport_IEs__value_PR_TAI;
   MCC_MNC_TO_PLMNID(
-    s1ap_eNB_instance_p->mcc,
-    s1ap_eNB_instance_p->mnc,
-    s1ap_eNB_instance_p->mnc_digit_length,
+    s1ap_eNB_instance_p->mcc[ue_context_p->selected_plmn_identity],
+    s1ap_eNB_instance_p->mnc[ue_context_p->selected_plmn_identity],
+    s1ap_eNB_instance_p->mnc_digit_length[ue_context_p->selected_plmn_identity],
     &ie->value.choice.TAI.pLMNidentity);
   TAC_TO_ASN1(s1ap_eNB_instance_p->tac, &ie->value.choice.TAI.tAC);
   ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
diff --git a/openair3/S1AP/s1ap_eNB_ue_context.h b/openair3/S1AP/s1ap_eNB_ue_context.h
index d78c6f7f1a97d42e2654de02b5fb921439c98f21..9adbc5fb2c8af9c9e649a4de05b56f329997cc2b 100644
--- a/openair3/S1AP/s1ap_eNB_ue_context.h
+++ b/openair3/S1AP/s1ap_eNB_ue_context.h
@@ -67,6 +67,11 @@ typedef struct s1ap_eNB_ue_context_s {
   /* Reference to MME data this UE is attached to */
   struct s1ap_eNB_mme_data_s *mme_ref;
 
+  /* Signaled by the UE in RRC Connection Setup Complete and used in NAS Uplink
+   * to route NAS messages correctly. 0-based, not 1-based as in TS 36.331
+   * 6.2.2 RRC Connection Setup Complete! */
+  int selected_plmn_identity;
+
   /* Reference to eNB data this UE is attached to */
   s1ap_eNB_instance_t *eNB_instance;
 } s1ap_eNB_ue_context_t;