diff --git a/openair2/COMMON/s1ap_messages_def.h b/openair2/COMMON/s1ap_messages_def.h
index 81c705ec10508655793bc423d3c0107005d48a5a..a05951bccd3a15cd7558e242e1e0762f9eeddc3a 100644
--- a/openair2/COMMON/s1ap_messages_def.h
+++ b/openair2/COMMON/s1ap_messages_def.h
@@ -1,4 +1,12 @@
-MESSAGE_DEF(S1AP_REGISTER_ENB , MESSAGE_PRIORITY_MED, s1ap_register_eNB_t , s1ap_register_eNB )
-MESSAGE_DEF(S1AP_NAS_FIRST_REQ, MESSAGE_PRIORITY_MED, s1ap_nas_first_req_t, s1ap_nas_first_req)
-MESSAGE_DEF(S1AP_UPLINK_NAS   , MESSAGE_PRIORITY_MED, s1ap_uplink_nas_t   , s1ap_uplink_nas   )
-MESSAGE_DEF(S1AP_DOWNLINK_NAS , MESSAGE_PRIORITY_MED, s1ap_downlink_nas_t , s1ap_downlink_nas )
\ No newline at end of file
+/* eNB application layer -> S1AP messages */
+MESSAGE_DEF(S1AP_REGISTER_ENB              , MESSAGE_PRIORITY_MED, s1ap_register_eNB_t              , s1ap_register_eNB )
+
+/* RRC -> S1AP messages */
+MESSAGE_DEF(S1AP_NAS_FIRST_REQ             , MESSAGE_PRIORITY_MED, s1ap_nas_first_req_t             , s1ap_nas_first_req)
+MESSAGE_DEF(S1AP_UPLINK_NAS                , MESSAGE_PRIORITY_MED, s1ap_uplink_nas_t                , s1ap_uplink_nas   )
+MESSAGE_DEF(S1AP_UE_CAPABILITIES_IND       , MESSAGE_PRIORITY_MED, s1ap_ue_cap_info_ind_t           , s1ap_ue_cap_info_ind)
+MESSAGE_DEF(S1AP_INITIAL_CONTEXT_SETUP_RESP, MESSAGE_PRIORITY_MED, s1ap_initial_context_setup_resp_t, s1ap_initial_context_setup_resp)
+
+/* S1AP -> RRC messages */
+MESSAGE_DEF(S1AP_DOWNLINK_NAS              , MESSAGE_PRIORITY_MED, s1ap_downlink_nas_t              , s1ap_downlink_nas )
+MESSAGE_DEF(S1AP_INITIAL_CONTEXT_SETUP_REQ , MESSAGE_PRIORITY_MED, s1ap_initial_context_setup_req_t , s1ap_initial_context_setup_req )
\ No newline at end of file
diff --git a/openair2/COMMON/s1ap_messages_types.h b/openair2/COMMON/s1ap_messages_types.h
index 2d21ab46bce1c36d3e7b32c5cab5105cc280309e..5af78391d612415b32708e9e5b8c7d63cc58aac4 100644
--- a/openair2/COMMON/s1ap_messages_types.h
+++ b/openair2/COMMON/s1ap_messages_types.h
@@ -20,6 +20,16 @@ typedef struct {
     char ipv6_address[40];
 } net_ip_address_t;
 
+/* Maximum number of e-rabs to be setup/deleted in a single message.
+ * Even if only one bearer will be modified by message.
+ */
+#define S1AP_MAX_E_RAB  11
+
+/* Length of the transport layer address string
+ * 160 bits / 8 bits by char.
+ */
+#define S1AP_TRANSPORT_LAYER_ADDRESS_SIZE (160 / 8)
+
 #define S1AP_MAX_NB_MME_IP_ADDRESS 10
 
 /* Provides the establishment cause for the RRC connection request as provided
@@ -66,9 +76,52 @@ typedef struct {
 } nas_pdu_t, ue_radio_cap_t;
 
 typedef struct {
-    /* For virtual mode, mod_id of the eNB as defined in the rest of the L1/L2 stack */
-    uint8_t mod_id;
+    /* Length of the transport layer address buffer. S1AP layer received a
+     * bit string<1..160> containing one of the following addresses: ipv4,
+     * ipv6, or ipv4 and ipv6. The layer doesn't interpret the buffer but
+     * silently forward it to S1-U.
+     */
+    uint8_t length;
+    uint8_t buffer[20];
+} transport_layer_addr_t;
+
+typedef struct {
+    uint8_t qci;
+    
+} e_rab_level_qos_parameter_t;
+
+typedef struct {
+    /* Unique e_rab_id for the UE. */
+    uint8_t                     e_rab_id;
+    /* Quality of service for this e_rab */
+    e_rab_level_qos_parameter_t qos;
+    /* The NAS PDU should be forwarded by the RRC layer to the NAS layer */
+    nas_pdu_t                   nas_pdu;
+    /* The transport layer address for the IP packets */
+    transport_layer_addr_t      sgw_addr;
+    /* S-GW Tunnel endpoint identifier */
+    uint32_t                    gtp_teid;
+} e_rab_t;
+
+typedef struct {
+    /* Unique e_rab_id for the UE. */
+    uint8_t e_rab_id;
+
+    /* The transport layer address for the IP packets */
+    transport_layer_addr_t eNB_addr;
+
+    /* S-GW Tunnel endpoint identifier */
+    uint32_t gtp_teid;
+} e_rab_setup_t;
+
+typedef struct {
+    /* Unique e_rab_id for the UE. */
+    uint8_t e_rab_id;
+    /* Cause of the failure */
+    //     cause_t cause;
+} e_rab_failed_t;
 
+typedef struct {
     /* Unique eNB_id to identify the eNB within EPC.
      * For macro eNB ids this field should be 20 bits long.
      * For home eNB ids this field should be 28 bits long.
@@ -110,9 +163,6 @@ typedef struct {
  * will be the unique identifier used between RRC and S1AP.
  */
 typedef struct {
-    /* For virtual mode, mod_id of the eNB as defined in the rest of the L1/L2 stack */
-    uint8_t mod_id;
-
     /* RNTI of the mobile */
     uint16_t rnti;
 
@@ -129,9 +179,6 @@ typedef struct {
 } s1ap_nas_first_req_t;
 
 typedef struct {
-    /* For virtual mode, mod_id of the eNB as defined in the rest of the L1/L2 stack */
-    uint8_t mod_id;
-
     /* Unique UE identifier within an eNB */
     unsigned eNB_ue_s1ap_id:24;
 
@@ -141,4 +188,32 @@ typedef struct {
 
 typedef s1ap_uplink_nas_t s1ap_downlink_nas_t;
 
+typedef struct {
+    unsigned eNB_ue_s1ap_id:24;
+
+    /* Number of e_rab to be setup in the list */
+    uint8_t  nb_of_e_rabs;
+    /* list of e_rab to be setup by RRC layers */
+    e_rab_t  e_rab_param[S1AP_MAX_E_RAB];
+} s1ap_initial_context_setup_req_t;
+
+typedef struct {
+    unsigned  eNB_ue_s1ap_id:24;
+
+    /* Number of e_rab setup-ed in the list */
+    uint8_t       nb_of_e_rabs;
+    /* list of e_rab setup-ed by RRC layers */
+    e_rab_setup_t e_rabs[S1AP_MAX_E_RAB];
+
+    /* Number of e_rab failed to be setup in list */
+    uint8_t        nb_of_e_rabs_failed;
+    /* list of e_rabs that failed to be setup */
+    e_rab_failed_t e_rabs_failed[S1AP_MAX_E_RAB];
+} s1ap_initial_context_setup_resp_t;
+
+typedef struct {
+    unsigned  eNB_ue_s1ap_id:24;
+    ue_radio_cap_t ue_radio_cap;
+} s1ap_ue_cap_info_ind_t;
+
 #endif /* S1AP_MESSAGES_TYPES_H_ */