diff --git a/openair1/PHY/CODING/3gpplte_sse.c b/openair1/PHY/CODING/3gpplte_sse.c
index 50c084d2a8bf5e8b5ca38a616158fc624e5d853b..34fcbef6d65485502023d43bdaae9c31de1b9fe4 100755
--- a/openair1/PHY/CODING/3gpplte_sse.c
+++ b/openair1/PHY/CODING/3gpplte_sse.c
@@ -438,10 +438,10 @@ char interleave_compact_byte(short * base_interleaver,unsigned char * input, uns
   uint8_t *systematic2_ptr=(uint8_t *) output;
 #endif
 #ifndef __AVX2__
-  int input_length_words=n>>1;
+  int input_length_words=1+((n-1)>>1);
 #else
-  int input_length_words=n>>2;
-#endif
+  int input_length_words=1+((n-1)>>2);
+#endif 
   for ( i=0; i<  input_length_words ; i ++ ) {
 
 #if defined(__x86_64__) || defined(__i386__)
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
index ece06a5e090160a3603dfacda0ae05c87914608d..b510b6cb9b2d96d0c8117194efaee33ddf804960 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
@@ -996,79 +996,71 @@ int allocate_CCEs(int module_idP,
   int nCCE_max = mac_xface->get_nCCE_max(module_idP,CC_idP,1,subframeP);
   int fCCE;
   int i,j;
-  int allocation_is_feasible = 1;
   DCI_ALLOC_t *dci_alloc;
   int nCCE=0;
 
   LOG_D(MAC,"Allocate CCEs subframe %d, test %d : (common %d,uspec %d)\n",subframeP,test_onlyP,DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci);
   DCI_pdu->num_pdcch_symbols=1;
 
-  while (allocation_is_feasible == 1) {
-    init_CCE_table(module_idP,CC_idP);
-    nCCE=0;
-
-    for (i=0;i<DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci;i++) {
-      dci_alloc = &DCI_pdu->dci_alloc[i];
-      LOG_D(MAC,"Trying to allocate DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n",
-	    i,DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci,
-	    DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci,
-	    dci_alloc->rnti,1<<dci_alloc->L,
-	    nCCE,nCCE_max,DCI_pdu->num_pdcch_symbols);
-
-      if (nCCE + (1<<dci_alloc->L) > nCCE_max) {
-	if (DCI_pdu->num_pdcch_symbols == 3)
-	  allocation_is_feasible = 0;
-	else {
-	  DCI_pdu->num_pdcch_symbols++;
-	  nCCE_max = mac_xface->get_nCCE_max(module_idP,CC_idP,DCI_pdu->num_pdcch_symbols,subframeP);
-	}
-	break;
+try_again:
+  init_CCE_table(module_idP,CC_idP);
+  nCCE=0;
+
+  for (i=0;i<DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci;i++) {
+    dci_alloc = &DCI_pdu->dci_alloc[i];
+    LOG_D(MAC,"Trying to allocate DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n",
+          i,DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci,
+          DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci,
+          dci_alloc->rnti,1<<dci_alloc->L,
+          nCCE,nCCE_max,DCI_pdu->num_pdcch_symbols);
+
+    if (nCCE + (1<<dci_alloc->L) > nCCE_max) {
+      if (DCI_pdu->num_pdcch_symbols == 3)
+        goto failed;
+      DCI_pdu->num_pdcch_symbols++;
+      nCCE_max = mac_xface->get_nCCE_max(module_idP,CC_idP,DCI_pdu->num_pdcch_symbols,subframeP);
+      goto try_again;
+    }
+
+    // number of CCEs left can potentially hold this allocation
+    fCCE = get_nCCE_offset(CCE_table,
+                           1<<(dci_alloc->L),
+                           nCCE_max,
+                           (i<DCI_pdu->Num_common_dci) ? 1 : 0,
+                           dci_alloc->rnti,
+                           subframeP);
+    if (fCCE == -1) {
+      if (DCI_pdu->num_pdcch_symbols == 3) {
+        LOG_I(MAC,"subframe %d: Dropping Allocation for RNTI %x\n",
+              subframeP,dci_alloc->rnti);
+        for (j=0;j<=i;j++){
+          LOG_I(MAC,"DCI %d/%d (%d,%d) : rnti %x dci format %d, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n",
+                i,DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci,
+                DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci,
+                DCI_pdu->dci_alloc[j].rnti,DCI_pdu->dci_alloc[j].format,
+                1<<DCI_pdu->dci_alloc[j].L,
+                nCCE,nCCE_max,DCI_pdu->num_pdcch_symbols);
+        }
+        goto failed;
       }
-      else { // number of CCEs left can potentially hold this allocation
-	if ((fCCE = get_nCCE_offset(CCE_table,
-				    1<<(dci_alloc->L), 
-				    nCCE_max,
-				    (i<DCI_pdu->Num_common_dci) ? 1 : 0, 
-				    dci_alloc->rnti, 
-				    subframeP))>=0) {// the allocation is feasible, rnti rule passes
-
-	  LOG_D(MAC,"Allocating at nCCE %d\n",fCCE);
-	  if (test_onlyP == 0) {
-	    nCCE += (1<<dci_alloc->L);
-	    dci_alloc->firstCCE=fCCE;
-	    LOG_D(MAC,"Allocate CCEs subframe %d, test %d\n",subframeP,test_onlyP);
-	  }
-	} // fCCE>=0
-	else {
-	  if (DCI_pdu->num_pdcch_symbols == 3) {
-	    allocation_is_feasible = 0;
-	    LOG_I(MAC,"subframe %d: Dropping Allocation for RNTI %x\n",
-		  subframeP,dci_alloc->rnti);
-	    for (j=0;j<=i;j++){
-	     
-	      LOG_I(MAC,"DCI %d/%d (%d,%d) : rnti %x dci format %d, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n",
-		    i,DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci,
-		    DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci,
-		    DCI_pdu->dci_alloc[j].rnti,DCI_pdu->dci_alloc[j].format,
-		    1<<DCI_pdu->dci_alloc[j].L,
-		    nCCE,nCCE_max,DCI_pdu->num_pdcch_symbols);
-	    }
-	  }
-	  else {
-	    DCI_pdu->num_pdcch_symbols++;
-	    nCCE_max = mac_xface->get_nCCE_max(module_idP,CC_idP,DCI_pdu->num_pdcch_symbols,subframeP);
-	  }
-	  break;
-	} // fCCE==-1
-      } // nCCE <= nCCE_max
-    } // for i = 0 ... num_dcis  
-    if (allocation_is_feasible==1)
-      return (0);
-  } // allocation_is_feasible == 1
+      DCI_pdu->num_pdcch_symbols++;
+      nCCE_max = mac_xface->get_nCCE_max(module_idP,CC_idP,DCI_pdu->num_pdcch_symbols,subframeP);
+      goto try_again;
+    } // fCCE==-1
+
+    // the allocation is feasible, rnti rule passes
+    nCCE += (1<<dci_alloc->L);
+    LOG_D(MAC,"Allocating at nCCE %d\n",fCCE);
+    if (test_onlyP == 0) {
+      dci_alloc->firstCCE=fCCE;
+      LOG_D(MAC,"Allocate CCEs subframe %d, test %d\n",subframeP,test_onlyP);
+    }
+  } // for i = 0 ... num_dcis
 
-  return(-1);
-  
+  return 0;
 
+failed:
+  return -1;
 }
 
 boolean_t CCE_allocation_infeasible(int module_idP,