diff --git a/common/utils/itti/intertask_interface.c b/common/utils/itti/intertask_interface.c
index 9e49a0a9b365f2714b7310330c1645281b90a198..284428348f04fdce96a68f3d1648fc21892a6554 100644
--- a/common/utils/itti/intertask_interface.c
+++ b/common/utils/itti/intertask_interface.c
@@ -383,7 +383,7 @@ void itti_subscribe_event_fd(task_id_t task_id, int fd)
         itti_desc.tasks[task_id].events,
         itti_desc.tasks[task_id].nb_events * sizeof(struct epoll_event));
 
-    event.events  = EPOLLIN;
+    event.events  = EPOLLIN | EPOLLERR;
     event.data.fd = fd;
 
     /* Add the event fd to the list of monitored events */
@@ -395,6 +395,8 @@ void itti_subscribe_event_fd(task_id_t task_id, int fd)
         /* Always assert on this condition */
         DevAssert(0 == 1);
     }
+
+    ITTI_DEBUG("Successfully subscribed fd %d for task %s\n", fd, itti_get_task_name(task_id));
 }
 
 void itti_unsubscribe_event_fd(task_id_t task_id, int fd)
@@ -579,7 +581,7 @@ int itti_create_task(task_id_t task_id, void *(*start_routine)(void *), void *ar
     itti_desc.threads[thread_id].task_state = TASK_STATE_STARTING;
 
     result = pthread_create (&itti_desc.threads[thread_id].task_thread, NULL, start_routine, args_p);
-    DevCheck(result>= 0, task_id, thread_id, result);
+    DevCheck(result >= 0, task_id, thread_id, result);
 
     /* Wait till the thread is completely ready */
     while (itti_desc.threads[thread_id].task_state != TASK_STATE_READY)
@@ -663,7 +665,8 @@ int itti_init(task_id_t task_max, thread_id_t thread_max, MessagesIds messages_i
         }
 
         itti_desc.tasks[task_id].task_event_fd = eventfd(0, EFD_SEMAPHORE);
-        if (itti_desc.tasks[task_id].task_event_fd == -1) {
+        if (itti_desc.tasks[task_id].task_event_fd == -1)
+        {
             ITTI_ERROR("eventfd failed: %s\n", strerror(errno));
             /* Always assert on this condition */
             DevAssert(0 == 1);
@@ -673,17 +676,20 @@ int itti_init(task_id_t task_max, thread_id_t thread_max, MessagesIds messages_i
 
         itti_desc.tasks[task_id].events = malloc(sizeof(struct epoll_event));
 
-        itti_desc.tasks[task_id].events->events  = EPOLLIN;
+        itti_desc.tasks[task_id].events->events  = EPOLLIN | EPOLLERR;
         itti_desc.tasks[task_id].events->data.fd = itti_desc.tasks[task_id].task_event_fd;
 
         /* Add the event fd to the list of monitored events */
         if (epoll_ctl(itti_desc.tasks[task_id].epoll_fd, EPOLL_CTL_ADD,
             itti_desc.tasks[task_id].task_event_fd, itti_desc.tasks[task_id].events) != 0)
         {
-            ITTI_ERROR("epoll_ctl failed: %s\n", strerror(errno));
+            ITTI_ERROR("epoll_ctl (EPOLL_CTL_ADD) failed: %s\n", strerror(errno));
             /* Always assert on this condition */
             DevAssert(0 == 1);
         }
+
+        ITTI_DEBUG("Successfully subscribed fd %d for task %s\n",
+                   itti_desc.tasks[task_id].task_event_fd, itti_get_task_name(task_id));
 #else
         STAILQ_INIT (&itti_desc.tasks[task_id].message_queue);
         itti_desc.tasks[task_id].message_in_queue = 0;
diff --git a/openair-cn/S1AP/s1ap_eNB_default_values.h b/openair-cn/S1AP/s1ap_eNB_default_values.h
index 41d80eabd51c0d5234eb9b5619a8e574cc2aed1c..11fd0a81c68609a7534351bf8ee2f775f50cbe91 100644
--- a/openair-cn/S1AP/s1ap_eNB_default_values.h
+++ b/openair-cn/S1AP/s1ap_eNB_default_values.h
@@ -14,9 +14,4 @@
 #define X2AP_PORT_NUMBER        (36422)
 #define X2AP_SCTP_PPID          (27)
 
-#define SCTP_OUT_STREAMS        (64)
-#define SCTP_IN_STREAMS         (64)
-#define SCTP_MAX_ATTEMPTS       (2)
-#define SCTP_RECV_BUFFER_SIZE   (1024)
-
 #endif /* S1AP_ENB_DEFAULT_VALUES_H_ */
diff --git a/openair-cn/SCTP/sctp_common.c b/openair-cn/SCTP/sctp_common.c
index 26b2dd281e939629d46f6bb72a225b5508dcbf12..84d0119bee61e8dea4d6f79876eb21019c477c44 100644
--- a/openair-cn/SCTP/sctp_common.c
+++ b/openair-cn/SCTP/sctp_common.c
@@ -61,9 +61,10 @@ int sctp_set_init_opt(int sd, uint16_t instreams, uint16_t outstreams,
     memset((void *)&init, 0, sizeof(struct sctp_initmsg));
 
     /* Request a number of streams */
-    init.sinit_num_ostreams  = outstreams;
-    init.sinit_max_instreams = instreams;
-    init.sinit_max_attempts  = max_attempts;
+    init.sinit_num_ostreams   = outstreams;
+    init.sinit_max_instreams  = instreams;
+    init.sinit_max_attempts   = max_attempts;
+    init.sinit_max_init_timeo = init_timeout;
 
     if (setsockopt(sd, IPPROTO_SCTP, SCTP_INITMSG, &init, sizeof(struct sctp_initmsg)) < 0)
     {
diff --git a/openair-cn/SCTP/sctp_common.h b/openair-cn/SCTP/sctp_common.h
index a9e2494a2116ac3408d6df5825c0d4a3cc4d7e42..ffc2920ef23fd6de85dbd7c9cf4d4548e40f28de 100644
--- a/openair-cn/SCTP/sctp_common.h
+++ b/openair-cn/SCTP/sctp_common.h
@@ -47,11 +47,6 @@
 # define SCTP_ERROR(x, args...) LOG_E(SCTP, x, ##args)
 # define SCTP_WARN(x, args...)  LOG_W(SCTP, x, ##args)
 # define SCTP_DEBUG(x, args...) LOG_D(SCTP, x, ##args)
-
-# define SCTP_OUT_STREAMS        (64)
-# define SCTP_IN_STREAMS         (64)
-# define SCTP_MAX_ATTEMPTS       (5)
-# define SCTP_RECV_BUFFER_SIZE   (1024)
 #else
 # define SCTP_ERROR(x, args...) do { fprintf(stderr, "[SCTP][E]"x, ##args); } while(0)
 # define SCTP_DEBUG(x, args...) do { fprintf(stdout, "[SCTP][D]"x, ##args); } while(0)
diff --git a/openair-cn/SCTP/sctp_default_values.h b/openair-cn/SCTP/sctp_default_values.h
new file mode 100644
index 0000000000000000000000000000000000000000..770a6aa439c8d470257cd4875e06d1ff7d069dbb
--- /dev/null
+++ b/openair-cn/SCTP/sctp_default_values.h
@@ -0,0 +1,10 @@
+#ifndef SCTP_DEFAULT_VALUES_H_
+#define SCTP_DEFAULT_VALUES_H_
+
+#define SCTP_OUT_STREAMS        (64)
+#define SCTP_IN_STREAMS         (64)
+#define SCTP_MAX_ATTEMPTS       (2)
+#define SCTP_TIMEOUT            (5)
+#define SCTP_RECV_BUFFER_SIZE   (1024)
+
+#endif /* SCTP_DEFAULT_VALUES_H_ */
diff --git a/openair-cn/SCTP/sctp_eNB_task.c b/openair-cn/SCTP/sctp_eNB_task.c
index d52eca54ac0eed9603a5c3b391f59142d7451fea..1f74c4656e9b9d9378235746eeed688bc7d578c6 100644
--- a/openair-cn/SCTP/sctp_eNB_task.c
+++ b/openair-cn/SCTP/sctp_eNB_task.c
@@ -46,6 +46,7 @@
 
 #include "intertask_interface.h"
 
+#include "sctp_default_values.h"
 #include "sctp_common.h"
 #include "sctp_eNB_itti_messaging.h"
 
@@ -122,7 +123,6 @@ void sctp_handle_new_association_req(
     int     sd;
     int32_t assoc_id;
 
-    struct sctp_initmsg         init;
     struct sctp_event_subscribe events;
 
     struct sctp_cnx_list_elm_s *sctp_cnx = NULL;
@@ -142,18 +142,12 @@ void sctp_handle_new_association_req(
     /* Add the socket to list of fd monitored by ITTI */
     itti_subscribe_event_fd(TASK_SCTP, sd);
 
-    /* Request a number of in/out streams */
-    init.sinit_num_ostreams  = SCTP_OUT_STREAMS;
-    init.sinit_max_instreams = SCTP_IN_STREAMS;
-    init.sinit_max_attempts  = SCTP_MAX_ATTEMPTS;
-
-    SCTP_DEBUG("Requesting (%d %d) (in out) streams\n", init.sinit_num_ostreams,
-               init.sinit_max_instreams);
-
-    if (setsockopt(sd, IPPROTO_SCTP, SCTP_INITMSG,
-                   &init, (socklen_t)sizeof(struct sctp_initmsg)) < 0) {
+    if (sctp_set_init_opt(sd, SCTP_IN_STREAMS, SCTP_OUT_STREAMS,
+        SCTP_MAX_ATTEMPTS, SCTP_TIMEOUT) != 0)
+    {
         SCTP_ERROR("Setsockopt IPPROTO_SCTP_INITMSG failed: %s\n",
                    strerror(errno));
+        itti_unsubscribe_event_fd(TASK_SCTP, sd);
         close(sd);
         return;
     }
@@ -229,8 +223,6 @@ void sctp_handle_new_association_req(
             address_index++;
         }
 
-        SCTP_DEBUG("Connecting...\n");
-
         /* Connect to remote host and port */
         if (sctp_connectx(sd, (struct sockaddr *)addr, used_address, &assoc_id) < 0)
         {
@@ -413,6 +405,8 @@ inline void sctp_eNB_read_from_socket(struct sctp_cnx_list_elm_s *sctp_cnx)
         if (errno == ENOTCONN) {
             itti_unsubscribe_event_fd(TASK_SCTP, sctp_cnx->sd);
 
+            SCTP_DEBUG("Received not connected for sd %d\n", sctp_cnx->sd);
+
             sctp_itti_send_association_resp(
                 sctp_cnx->task_id, sctp_cnx->instance, -1,
                 sctp_cnx->cnx_id, SCTP_STATE_UNREACHABLE, 0, 0);
diff --git a/openair2/COMMON/sctp_messages_types.h b/openair2/COMMON/sctp_messages_types.h
index 96080a0b0ae7ac1092284f85dddcdeb479dbd8af..078b8da4b9fbb8ee3c6fa2e4e351eace0e75feaf 100644
--- a/openair2/COMMON/sctp_messages_types.h
+++ b/openair2/COMMON/sctp_messages_types.h
@@ -3,7 +3,7 @@
 
 enum sctp_state_e {
     SCTP_STATE_CLOSED,
-    SCTP_STATE_SHUTDOWN_PENDING,
+    SCTP_STATE_SHUTDOWN,
     SCTP_STATE_ESTABLISHED,
     SCTP_STATE_UNREACHABLE
 };