diff --git a/common/utils/itti/intertask_interface.c b/common/utils/itti/intertask_interface.c
index 584493e0b8cf3cdb0ca3c49a97f419aa476778bf..2fc036bdf5fbe043df47d46ec5b2702a99bbc02f 100644
--- a/common/utils/itti/intertask_interface.c
+++ b/common/utils/itti/intertask_interface.c
@@ -982,6 +982,8 @@ void itti_wait_tasks_end(void) {
         signal_handle (&end);
     }
 
+    printf("closing all tasks\n");
+
     do {
         ready_tasks = 0;
 
@@ -1013,6 +1015,8 @@ void itti_wait_tasks_end(void) {
         }
     } while ((ready_tasks > 0) && (retries--));
 
+    printf("ready_tasks %d\n",ready_tasks);
+
     itti_desc.running = 0;
 
 #if defined(OAI_EMU) || defined(RTAI)
diff --git a/common/utils/itti/signals.c b/common/utils/itti/signals.c
index 096024bb0d12dff28b34e467d133a03f37da0338..b202a49f7bdbccb763e510e0ac07668fecef88f6 100644
--- a/common/utils/itti/signals.c
+++ b/common/utils/itti/signals.c
@@ -134,7 +134,7 @@ int signal_handle(int *end)
                 break;
 
             case SIGINT:
-                SIG_DEBUG("Received SIGINT\n");
+                printf("Received SIGINT\n");
                 itti_send_terminate_message(TASK_UNKNOWN);
                 *end = 1;
                 break;
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index ff9fdafa13ec1c335711d8e916aeff2c1dd015f9..bd276efa2f62886fa0e0ab200312094ed1b88af6 100755
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -1312,6 +1312,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
   // there is at least one allocation for PDCCH
   uint8_t smbv_alloc_cnt = 1;
 #endif
+  int frame = phy_vars_eNB->proc[sched_subframe].frame_tx;
   int subframe = phy_vars_eNB->proc[sched_subframe].subframe_tx;
 
   vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_TX,1);
@@ -1320,8 +1321,23 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 #ifdef DEBUG_PHY_PROC
   LOG_D(PHY,"[%s %"PRIu8"] Frame %d subframe %d : Doing phy_procedures_eNB_TX(%d)\n",
 	(r_type == multicast_relay) ? "RN/eNB" : "eNB",
-	phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx, subframe, subframe);
+	phy_vars_eNB->Mod_id, frame, subframe);
 #endif
+
+  for (i=0;i<NUMBER_OF_UE_MAX;i++) {
+    // If we've dropped the UE, go back to PRACH mode for this UE
+    //#if !defined(EXMIMO_IOT)
+    if (phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors == ULSCH_max_consecutive_errors) {
+      LOG_I(PHY,"[eNB %d, CC %d] frame %d, subframe %d, UE %d: ULSCH consecutive error count reached %u, removing UE\n",
+	    phy_vars_eNB->Mod_id,phy_vars_eNB->CC_id,frame,subframe, i, phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors);
+	    phy_vars_eNB->eNB_UE_stats[i].mode = PRACH;
+	    remove_ue(phy_vars_eNB->eNB_UE_stats[i].crnti,phy_vars_eNB,abstraction_flag);
+	    phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors=0;
+    }
+    //#endif
+  }
+
+
 #ifdef OPENAIR2
   // Get scheduling info for next subframe 
   if (phy_vars_eNB->CC_id == 0)
@@ -3364,26 +3380,7 @@ void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 	    phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors++;
 	    //dump_ulsch(phy_vars_eNB, sched_subframe, i);
 	  }
-	
-	  // If we've dropped the UE, go back to PRACH mode for this UE
-	  //#if !defined(EXMIMO_IOT)
-	  if (phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors == ULSCH_max_consecutive_errors) {
-	    LOG_I(PHY,"[eNB %d, CC %d] frame %d, subframe %d, UE %d: ULSCH consecutive error count reached %u, removing UE\n",
-		  phy_vars_eNB->Mod_id,phy_vars_eNB->CC_id,frame,subframe, i, phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors);
-
-	    //	    mac_xface->macphy_exit("Consecutive error count reached");
-
-	    phy_vars_eNB->eNB_UE_stats[i].mode = PRACH;
-#ifdef OPENAIR2
-	    /*	    mac_xface->cancel_ra_proc(phy_vars_eNB->Mod_id,
-				      frame,
-				      phy_vars_eNB->eNB_UE_stats[i].crnti);*/
-#endif
-	    remove_ue(phy_vars_eNB->eNB_UE_stats[i].crnti,phy_vars_eNB,abstraction_flag);
-	    phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors=0;
-	  }
-	  //#endif
-	}
+	}	
       }  // ulsch in error
       else {
 	LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d ULSCH received, setting round to 0, PHICH ACK\n",
diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c
index 1d83ebc323a2d7605976fe85a98fcf6fb4088450..c8a4bb79fca42cb5f1a46795a2f439d8d19db484 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler.c
@@ -97,7 +97,7 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
   int CC_id,i,next_i;
   UE_list_t *UE_list=&eNB_mac_inst[module_idP].UE_list;
 
-  //  LOG_I(MAC,"[eNB %d] Frame %d, Subframe %d, entering MAC scheduler (UE_list->head %d)\n",module_idP, frameP, subframeP,UE_list->head);
+  LOG_D(MAC,"[eNB %d] Frame %d, Subframe %d, entering MAC scheduler (UE_list->head %d)\n",module_idP, frameP, subframeP,UE_list->head);
 
   start_meas(&eNB_mac_inst[module_idP].eNB_scheduler);
   vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER,VCD_FUNCTION_IN);
@@ -110,8 +110,8 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
     mbsfn_status[CC_id]=0;
   }
   // refresh UE list based on UEs dropped by PHY in previous subframe
-  for (i=UE_list->head;i>0;i=UE_list->next[i]) {
-    LOG_T(MAC,"UE %d: rnti %x (%p)\n",i,UE_RNTI(module_idP,i),mac_xface->get_eNB_UE_stats(module_idP,0,UE_RNTI(module_idP,i)));
+  for (i=UE_list->head;i>=0;i=UE_list->next[i]) {
+    LOG_D(MAC,"UE %d: rnti %x (%p)\n",i,UE_RNTI(module_idP,i),mac_xface->get_eNB_UE_stats(module_idP,0,UE_RNTI(module_idP,i)));
     if (mac_xface->get_eNB_UE_stats(module_idP,0,UE_RNTI(module_idP,i))==NULL)
       mac_remove_ue(module_idP,i,frameP);
   }
diff --git a/openair2/LAYER2/MAC/pre_processor.c b/openair2/LAYER2/MAC/pre_processor.c
index e7b8537e5b41aa12d6751cf2693c8400ac478818..db92f7539f5cd206281eb20a7a983147a8215aa3 100644
--- a/openair2/LAYER2/MAC/pre_processor.c
+++ b/openair2/LAYER2/MAC/pre_processor.c
@@ -196,7 +196,8 @@ void assign_rbs_required (module_id_t Mod_id,
       LOG_D(MAC,"[preprocessor] assign RB for UE %d\n",UE_id);
       for (i=0;i<UE_list->numactiveCCs[UE_id];i++) {
 	CC_id = UE_list->ordered_CCids[i][UE_id];
-
+	frame_parms[CC_id] = mac_xface->get_lte_frame_parms(Mod_id,CC_id); 
+	eNB_UE_stats[CC_id] = mac_xface->get_eNB_UE_stats(Mod_id,CC_id,rnti);	
 	if (eNB_UE_stats[CC_id]->dlsch_mcs1==0) nb_rbs_required[CC_id][UE_id] = 4;  // don't let the TBS get too small
 	else nb_rbs_required[CC_id][UE_id] = min_rb_unit[CC_id];
 	TBS = mac_xface->get_TBS_DL(eNB_UE_stats[CC_id]->dlsch_mcs1,nb_rbs_required[CC_id][UE_id]);
@@ -421,6 +422,7 @@ void dlsch_scheduler_pre_processor (module_id_t   Mod_id,
 
       average_rbs_per_user[CC_id]=0;
 
+      frame_parms[CC_id] = mac_xface->get_lte_frame_parms(Mod_id,CC_id); 
 
       mac_xface->get_ue_active_harq_pid(Mod_id,CC_id,rnti,frameP,subframeP,&harq_pid,&round,0);
       if(round>0)
@@ -694,7 +696,7 @@ void dlsch_scheduler_pre_processor_allocate (module_id_t   Mod_id,
    
     if((rballoc_sub[CC_id][i] == 0)           && 
        (rballoc_sub_UE[CC_id][UE_id][i] == 0) && 
-       (nb_rbs_required_remaining[UE_id]>0)   &&
+       (nb_rbs_required_remaining[CC_id][UE_id]>0)   &&
        (pre_nb_available_rbs[CC_id][UE_id] < nb_rbs_required[CC_id][UE_id])){
       
       // if this UE is not scheduled for TM5
@@ -739,7 +741,7 @@ void ulsch_scheduler_pre_processor(module_id_t module_idP,
   int16_t            total_remaining_rbs[MAX_NUM_CCs];
   uint16_t           max_num_ue_to_be_scheduled=0,total_ue_count=0;
   rnti_t             rnti= -1;
-  uint32_t            nCCE_to_be_used[CC_id];
+  uint32_t            nCCE_to_be_used[MAX_NUM_CCs];
   UE_list_t          *UE_list = &eNB_mac_inst[module_idP].UE_list; 
   UE_TEMPLATE        *UE_template;
   LTE_DL_FRAME_PARMS   *frame_parms;
@@ -832,7 +834,7 @@ void ulsch_scheduler_pre_processor(module_id_t module_idP,
       if(round>0)
 	nb_allocated_rbs[CC_id][UE_id] = UE_list->UE_template[CC_id][UE_id].nb_rb_ul[harq_pid];
       else 
-	nb_allocated_rbs[CC_id][UE_id] = cmin(UE_template->pre_allocated_nb_rb_ul, average_rbs_per_user[CC_id]);
+	nb_allocated_rbs[CC_id][UE_id] = cmin(UE_list->UE_template[CC_id][UE_id].pre_allocated_nb_rb_ul, average_rbs_per_user[CC_id]);
       
       total_allocated_rbs[CC_id]+= nb_allocated_rbs[CC_id][UE_id];
       
diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.c b/openair2/RRC/LITE/MESSAGES/asn1_msg.c
index 073a6610f6fbad31f6fb8f87556e79951360def9..405dbe28266699db29aab04b5c6a5caf9a5d7e84 100644
--- a/openair2/RRC/LITE/MESSAGES/asn1_msg.c
+++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.c
@@ -1077,6 +1077,13 @@ uint8_t do_SIB23(uint8_t Mod_id,
   AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
                enc_rval.failed_type->name, enc_rval.encoded);
 
+#ifdef XER_PRINT
+      int i=0;
+      for (i = 0; i < (enc_rval.encoded+7)/8; i++)
+	printf("%02x ", ((uint8_t*)buffer)[i]);
+      printf("\n");
+#endif
+
 #if defined(ENABLE_ITTI)
 # if !defined(DISABLE_XER_SPRINT)
   {