diff --git a/openair-cn/S1AP/s1ap_eNB_context_management_procedures.c b/openair-cn/S1AP/s1ap_eNB_context_management_procedures.c
index 314dbd3c8f29e31a7bf1808cce25ed61328e19b4..0e6de0b0f269b5f38323e35a76c9368a61ac2e61 100755
--- a/openair-cn/S1AP/s1ap_eNB_context_management_procedures.c
+++ b/openair-cn/S1AP/s1ap_eNB_context_management_procedures.c
@@ -117,7 +117,7 @@ int s1ap_ue_context_release_complete(instance_t instance,
   /* UE associated signalling -> use the allocated stream */
   s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance,
                                    ue_context_p->mme_ref->assoc_id, buffer,
-                                   length, ue_context_p->stream);
+                                   length, ue_context_p->tx_stream);
 
 
   //LG s1ap_eNB_itti_send_sctp_close_association(s1ap_eNB_instance_p->instance,
@@ -234,7 +234,7 @@ int s1ap_ue_context_release_req(instance_t instance,
   /* UE associated signalling -> use the allocated stream */
   s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance,
                                    ue_context_p->mme_ref->assoc_id, buffer,
-                                   length, ue_context_p->stream);
+                                   length, ue_context_p->tx_stream);
 
   return 0;
 }
diff --git a/openair-cn/S1AP/s1ap_eNB_handlers.c b/openair-cn/S1AP/s1ap_eNB_handlers.c
index 9b5ee1b789fbdf02484cbcd416f3d9d25f65c009..34f010d2976a5175bec52f3c0ad4a2385979adca 100644
--- a/openair-cn/S1AP/s1ap_eNB_handlers.c
+++ b/openair-cn/S1AP/s1ap_eNB_handlers.c
@@ -712,12 +712,14 @@ int s1ap_eNB_handle_initial_context_request(uint32_t               assoc_id,
   }
 
   /* Initial context request = UE-related procedure -> stream != 0 */
-  if (stream != ue_desc_p->stream) {
-    S1AP_ERROR("[SCTP %d] Received UE-related procedure on stream (%d) whereas expecting (%d)\n",
-               assoc_id, stream, ue_desc_p->stream);
+  if (stream == 0) {
+    S1AP_ERROR("[SCTP %d] Received UE-related procedure on stream (%d)\n",
+               assoc_id, stream);
     return -1;
   }
 
+  ue_desc_p->rx_stream = stream;
+
   ue_desc_p->mme_ue_s1ap_id = initialContextSetupRequest_p->mme_ue_s1ap_id;
 
   message_p        = itti_alloc_new_message(TASK_S1AP, S1AP_INITIAL_CONTEXT_SETUP_REQ);
diff --git a/openair-cn/S1AP/s1ap_eNB_nas_procedures.c b/openair-cn/S1AP/s1ap_eNB_nas_procedures.c
index 41db38a40a89f2504dea9836fb8d07cc38725d70..612d6dfc7e21784ceac4eccd90c1334e99f7513f 100644
--- a/openair-cn/S1AP/s1ap_eNB_nas_procedures.c
+++ b/openair-cn/S1AP/s1ap_eNB_nas_procedures.c
@@ -226,7 +226,7 @@ int s1ap_eNB_handle_nas_first_req(
     mme_desc_p->nextstream += 1;
   }
 
-  ue_desc_p->stream = mme_desc_p->nextstream;
+  ue_desc_p->tx_stream = mme_desc_p->nextstream;
 
   MSC_LOG_TX_MESSAGE(
     MSC_S1AP_ENB,
@@ -239,7 +239,7 @@ int s1ap_eNB_handle_nas_first_req(
 
   /* Send encoded message over sctp */
   s1ap_eNB_itti_send_sctp_data_req(instance_p->instance, mme_desc_p->assoc_id,
-                                   buffer, length, ue_desc_p->stream);
+                                   buffer, length, ue_desc_p->tx_stream);
 
   return 0;
 }
@@ -295,6 +295,14 @@ int s1ap_eNB_handle_nas_downlink(const uint32_t               assoc_id,
     return -1;
   }
 
+  if (0 == ue_desc_p->rx_stream) {
+	ue_desc_p->rx_stream = stream;
+  } else if (stream != ue_desc_p->rx_stream) {
+    S1AP_ERROR("[SCTP %d] Received UE-related procedure on stream %u, expecting %u\n",
+               assoc_id, stream, ue_desc_p->rx_stream);
+    return -1;
+  }
+
   /* Is it the first outcome of the MME for this UE ? If so store the mme
    * UE s1ap id.
    */
@@ -308,6 +316,7 @@ int s1ap_eNB_handle_nas_downlink(const uint32_t               assoc_id,
                  downlink_NAS_transport_p->mme_ue_s1ap_id,
                  ue_desc_p->mme_ue_s1ap_id
                 );
+      return -1;
     }
   }
 
@@ -425,7 +434,7 @@ int s1ap_eNB_nas_uplink(instance_t instance, s1ap_uplink_nas_t *s1ap_uplink_nas_
   /* UE associated signalling -> use the allocated stream */
   s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance,
                                    ue_context_p->mme_ref->assoc_id, buffer,
-                                   length, ue_context_p->stream);
+                                   length, ue_context_p->tx_stream);
 
   return 0;
 }
@@ -503,7 +512,7 @@ void s1ap_eNB_nas_non_delivery_ind(instance_t instance,
   /* UE associated signalling -> use the allocated stream */
   s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance,
                                    ue_context_p->mme_ref->assoc_id, buffer,
-                                   length, ue_context_p->stream);
+                                   length, ue_context_p->tx_stream);
 }
 
 //------------------------------------------------------------------------------
@@ -593,7 +602,7 @@ int s1ap_eNB_initial_ctxt_resp(
   /* UE associated signalling -> use the allocated stream */
   s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance,
                                    ue_context_p->mme_ref->assoc_id, buffer,
-                                   length, ue_context_p->stream);
+                                   length, ue_context_p->tx_stream);
 
   return ret;
 }
@@ -672,7 +681,7 @@ int s1ap_eNB_ue_capabilities(instance_t instance,
   /* UE associated signalling -> use the allocated stream */
   s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance,
                                    ue_context_p->mme_ref->assoc_id, buffer,
-                                   length, ue_context_p->stream);
+                                   length, ue_context_p->tx_stream);
 
   return ret;
 }
diff --git a/openair-cn/S1AP/s1ap_eNB_trace.c b/openair-cn/S1AP/s1ap_eNB_trace.c
index 5a523c1fd35c5d27b21ae4f59e3eb3b2c88f0918..e792c811207f61639d6867140adb006156016480 100644
--- a/openair-cn/S1AP/s1ap_eNB_trace.c
+++ b/openair-cn/S1AP/s1ap_eNB_trace.c
@@ -76,7 +76,7 @@ void s1ap_eNB_generate_trace_failure(struct s1ap_eNB_ue_context_s *ue_desc_p,
 
   s1ap_eNB_itti_send_sctp_data_req(ue_desc_p->mme_ref->s1ap_eNB_instance->instance,
                                    ue_desc_p->mme_ref->assoc_id, buffer,
-                                   length, ue_desc_p->stream);
+                                   length, ue_desc_p->tx_stream);
 }
 
 int s1ap_eNB_handle_trace_start(uint32_t               assoc_id,
diff --git a/openair-cn/S1AP/s1ap_eNB_ue_context.h b/openair-cn/S1AP/s1ap_eNB_ue_context.h
index 911f6e3671725d82694420329b429a53db155b67..a153fa19522a49ee70fa3ff0409a95b24255e53b 100644
--- a/openair-cn/S1AP/s1ap_eNB_ue_context.h
+++ b/openair-cn/S1AP/s1ap_eNB_ue_context.h
@@ -66,7 +66,8 @@ typedef struct s1ap_eNB_ue_context_s {
   uint32_t mme_ue_s1ap_id;
 
   /* Stream used for this particular UE */
-  int32_t stream;
+  int32_t tx_stream;
+  int32_t rx_stream;
 
   /* Current UE state. */
   s1ap_ue_state ue_state;