diff --git a/common/utils/itti/intertask_interface.c b/common/utils/itti/intertask_interface.c
index 5b15f6e4f87078f0cfd1e93e5a2b19b6bdd13585..caa8ad6d9024fc80c09d55d1be5410411c2ae9da 100644
--- a/common/utils/itti/intertask_interface.c
+++ b/common/utils/itti/intertask_interface.c
@@ -1015,7 +1015,7 @@ void itti_wait_tasks_end(void) {
         if (ready_tasks > 0) {
             usleep (100 * 1000);
         }
-    } while ((ready_tasks > 0) && (retries--));
+    } while ((ready_tasks > 0) && (retries--)&& (!end) );
 
     printf("ready_tasks %d\n",ready_tasks);
 
diff --git a/openair-cn/SCTP/sctp_eNB_task.c b/openair-cn/SCTP/sctp_eNB_task.c
index 8825acf3692d1a0ebb5633975d25409c3180e3a1..33e17d6bbe57fd50280eb03060817ef27ad069d7 100644
--- a/openair-cn/SCTP/sctp_eNB_task.c
+++ b/openair-cn/SCTP/sctp_eNB_task.c
@@ -199,6 +199,7 @@ sctp_handle_new_association_req(
                     &in);
             if (s > 0 ) {
                 if (((struct sockaddr_in*)ifa->ifa_addr)->sin_addr.s_addr == in.s_addr) {
+#if 0
                     memset(&ifr, 0, sizeof(ifr));
                     snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s",ifa->ifa_name);
                     if (setsockopt(sd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(ifr)) < 0) {
@@ -208,7 +209,22 @@ sctp_handle_new_association_req(
                         SCTP_DEBUG("Setsockopt SOL_SOCKET socket bound to : %s\n",
                                 ifa->ifa_name);
                     }
+#else
+		    struct sockaddr_in locaddr;
+		    locaddr.sin_family = AF_INET;
+		    locaddr.sin_port = htons(sctp_new_association_req_p->port);
+		    locaddr.sin_addr.s_addr = in.s_addr;
+
+                    if (sctp_bindx(sd, (struct sockaddr*)&locaddr, 1, SCTP_BINDX_ADD_ADDR) < 0) {
+                        SCTP_ERROR("sctp_bindx SCTP_BINDX_ADD_ADDR failed: %s\n",
+                                   strerror(errno));
+                    } else {
+                        SCTP_DEBUG("sctp_bindx SCTP_BINDX_ADD_ADDR socket bound to : %s\n",
+                                inet_ntoa(locaddr.sin_addr));
+                    }
+#endif
                     break;
+
                 }
             }
         } else if (sctp_new_association_req_p->local_address.ipv6 && family == AF_INET6) {
@@ -298,7 +314,7 @@ sctp_handle_new_association_req(
         }
 
         /* Connect to remote host and port */
-        if (sctp_connectx(sd, (struct sockaddr *)addr, used_address, &assoc_id) < 0)
+        if (sctp_connectx(sd, (struct sockaddr *)addr, 1, &assoc_id) < 0)
         {
             /* sctp_connectx on non-blocking socket return EINPROGRESS */
             if (errno != EINPROGRESS) {
diff --git a/openair1/PHY/impl_defs_top.h b/openair1/PHY/impl_defs_top.h
index 2371749002a8ee8a42f0c6e73e577d5277636f23..d496ac573351661194002326beb1523048f4381e 100755
--- a/openair1/PHY/impl_defs_top.h
+++ b/openair1/PHY/impl_defs_top.h
@@ -326,7 +326,7 @@ typedef struct {
 #if defined(CBMIMO1) || defined(EXMIMO)
 #define MAX_FRAME_NUMBER 0x400
 #define NUMBER_OF_eNB_MAX 1
-#define NUMBER_OF_UE_MAX 2
+#define NUMBER_OF_UE_MAX 16
 #define NUMBER_OF_CONNECTED_eNB_MAX 3
 #else
 #define MAX_FRAME_NUMBER 0xFFFF
diff --git a/openair1/SCHED/defs.h b/openair1/SCHED/defs.h
index 813c8d86c60459e7fe412b9c949186d4e4740759..15e321c880f2732b4c7457ffbcae34bfc2ef8168 100644
--- a/openair1/SCHED/defs.h
+++ b/openair1/SCHED/defs.h
@@ -47,7 +47,7 @@ enum THREAD_INDEX { OPENAIR_THREAD_INDEX = 0,
 #define OPENAIR_THREAD_PRIORITY        255
 
 
-#define OPENAIR_THREAD_STACK_SIZE    8192 //4096 //RTL_PTHREAD_STACK_MIN*6
+#define OPENAIR_THREAD_STACK_SIZE     PTHREAD_STACK_MIN //4096 //RTL_PTHREAD_STACK_MIN*6
 //#define DLC_THREAD_STACK_SIZE        4096 //DLC stack size
 
 enum openair_SCHED_STATUS {
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index 792be8dd2a3ab88c43ad6cee317e07f0ae13df50..74851b692f3bde857d4a05a3e699760298138d5f 100755
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -2402,8 +2402,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
   phy_procedures_emos_eNB_TX(subframe, phy_vars_eNB);
 #endif
 
-#ifndef EXMIMO
-#ifndef USRP
+#if !(defined(EXMIMO) || defined(USRP) || defined (CPRIGW))
   if (abstraction_flag==0) {
     start_meas(&phy_vars_eNB->ofdm_mod_stats);
     do_OFDM_mod(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
@@ -2416,7 +2415,6 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 		&phy_vars_eNB->lte_frame_parms);
     stop_meas(&phy_vars_eNB->ofdm_mod_stats);
   }
-#endif
 #endif
   
   vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_TX,0);
diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c
index 908ce28c33d7e78a6bb37d1728bc99514632d9f0..01dbe9b1253845eb832a422998ce807ca59e1884 100644
--- a/openair2/RRC/LITE/rrc_eNB.c
+++ b/openair2/RRC/LITE/rrc_eNB.c
@@ -560,7 +560,7 @@ rrc_eNB_free_UE_index(
 	eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_idP]);
 
 #if defined(ENABLE_USE_MME)
-  rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ(enb_mod_idP, ue_mod_idP, S1AP_CAUSE_RADIO_NETWORK, 0); // ue_mod_idP ??? or ???
+  rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ(enb_mod_idP, ue_mod_idP, S1AP_CAUSE_RADIO_NETWORK, 21); // send cause 21: connection with ue lost 
   /* From 3GPP 36300v10 p129 : 19.2.2.2.2 S1 UE Context Release Request (eNB triggered)
    * If the E-UTRAN internal reason is a radio link failure detected in the eNB, the eNB shall wait a sufficient time before
    *  triggering the S1 UE Context Release Request procedure
@@ -570,6 +570,7 @@ rrc_eNB_free_UE_index(
 #endif
   eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_idP].Status = RRC_IDLE;
   eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_idP] = 0;
+eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_idP].eNB_ue_s1ap_id = 0;
 
   ctxt.enb_module_id = enb_mod_idP;
   ctxt.ue_module_id  = ue_mod_idP;
@@ -3001,7 +3002,7 @@ int rrc_eNB_decode_ccch(
                     //CONFIG SRB2  (DCCHs, ONE per User)  //meas && lchan Cfg
                     //eNB_rrc_inst[enb_mod_idP].Info.Dtch_bd_config[ue_mod_idP].Status=NEED_RADIO_CONFIG;
                     //eNB_rrc_inst[enb_mod_idP].Info.Dtch_bd_config[ue_mod_idP].Next_eNBeck_frame=Rrc_xface->Frame_index+1;
-                    eNB_rrc_inst[ue_mod_id].Info.Nb_ue++;
+                    eNB_rrc_inst[enb_mod_idP].Info.Nb_ue++;
 
 #ifndef NO_RRM
                     send_msg(&S_rrc, msg_rrc_MR_attach_ind(enb_mod_idP, Mac_id));
@@ -3460,8 +3461,9 @@ void                               *rrc_enb_task(
               break;
 
             case GTPV1U_ENB_DELETE_TUNNEL_RESP:
-                LOG_I(RRC, "[eNB %d] Received message %s, not processed because procedure not synched\n",
-                    instance, msg_name_p);
+                 /* Nothing to do. Apparently everything is done in S1AP processing */
+                //LOG_I(RRC, "[eNB %d] Received message %s, not processed because procedure not synched\n",
+                    //instance, msg_name_p);
               break;
 
 #   endif
diff --git a/openair2/RRC/LITE/rrc_eNB_S1AP.c b/openair2/RRC/LITE/rrc_eNB_S1AP.c
index 425e6fa59e98f8070745759c9e24ed268e85adb5..ba68ff73a1ad63c829f4a6b21b5f4913cd46817c 100644
--- a/openair2/RRC/LITE/rrc_eNB_S1AP.c
+++ b/openair2/RRC/LITE/rrc_eNB_S1AP.c
@@ -859,10 +859,12 @@ int rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_COMMAND (MessageDef *msg_p, const ch
   }
   else {
     rrc_eNB_generate_RRCConnectionRelease(instance, 0 /*frame*/, ue_index);
+/*
       LOG_W(RRC,
               "[eNB %d] In S1AP_UE_CONTEXT_RELEASE_COMMAND: TODO call rrc_eNB_connection_release for eNB %d\n",
               instance,
               eNB_ue_s1ap_id);
+*/
     {
         int      e_rab;
         int      mod_id = 0;
diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.c b/openair2/UTIL/LOG/vcd_signal_dumper.c
index 2fffc3e5f2cbe1bc049696ffc4b392c5f71a6923..4aa7ebff317ee6f0642a5fba328edf1bbb123e14 100644
--- a/openair2/UTIL/LOG/vcd_signal_dumper.c
+++ b/openair2/UTIL/LOG/vcd_signal_dumper.c
@@ -208,6 +208,7 @@ const char* eurecomFunctionsNames[] = {
     "macxface_ue_get_sr",
     
     "ue_send_mch_sdu",
+    "ue_synch",
 
     /*RLC signals   */
     "rlc_data_req",
diff --git a/openair2/UTIL/MEM/mem_block.c b/openair2/UTIL/MEM/mem_block.c
index f7988a34e046c8c3f35e2ab4f3efba4e336bbfdb..21931dfced0681f37c37e4b82065ca9aea9ba76c 100644
--- a/openair2/UTIL/MEM/mem_block.c
+++ b/openair2/UTIL/MEM/mem_block.c
@@ -211,6 +211,7 @@ get_free_mem_block (uint16_t sizeP)
     #endif
   } while (pool_selected++ < 12);
 
+  display_mem_load();
   mac_xface->macphy_exit("[MEM_MNGT][ERROR][FATAL] get_free_mem_block failed");
   return NULL;
 };
diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index 1eb679c2654886574b9041cc753d70d5f4a9b7f9..257a709bf79befc811d7797826031b61a7f1b605 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -844,7 +844,7 @@ void *l2l1_task(void *arg)
 
     result = itti_free (ITTI_MSG_ORIGIN_ID(message_p), message_p);
     AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
-  } while(1);
+  } while(!oai_exit);
 
   return NULL;
 }
@@ -1769,7 +1769,7 @@ static void get_options (int argc, char **argv) {
   //  char                          line[1000];
   //  int                           l;
   int k,i;//,j,k;
-#ifdef USRP
+#if defined(USRP) || defined(CPRIGW)
   int clock_src;
 #endif
   int CC_id;
@@ -1953,7 +1953,7 @@ static void get_options (int argc, char **argv) {
       }
       break;
     case 's':
-#ifdef USRP
+#if defined(USRP) || defined(CPRIGW)
 
       clock_src = atoi(optarg);
       if (clock_src == 0) {