diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index a0b13cdb7b72a461525c85df74983720f560d4f0..f2ba4783134cdd150852410f27ae4cebc629e70a 100644
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -889,7 +889,7 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
         LOG_E(PHY,"Unknown number for N_RB_UL %d\n",fp->N_RB_UL);
         break;
       }
-
+      SR_payload = 0;
       switch (uci->type) {
       case SR:
       case HARQ_SR:
@@ -973,8 +973,34 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
 
 	}
 	else { // frame_type == TDD
-
-
+#if 1
+	      metric[0] = rx_pucch(eNB,
+	                   uci->pucch_fmt,
+	                   i,
+	                   uci->n_pucch_1[0][0],
+	                   0, //n2_pucch
+	                   uci->srs_active, // shortened format
+	                   pucch_b0b1[0],
+	                   frame,
+	                   subframe,
+	                   PUCCH1a_THRES);
+	      if (uci->type==HARQ_SR && metric[0] > metric_SR) SR_payload = 0;
+	      else if (SR_payload == 1) fill_sr_indication(eNB,uci->rnti,frame,subframe,metric_SR);
+
+	      if (uci->type==HARQ_SR && metric[0] <= metric_SR) {
+	          SR_payload = 1;
+	          metric[0] = rx_pucch(eNB,
+	                     uci->pucch_fmt,
+	                     i,
+	                     uci->n_pucch_1_0_sr[0],
+	                     0, //n2_pucch
+	                     uci->srs_active, // shortened format
+	                     pucch_b0b1[0],
+	                     frame,
+	                     subframe,
+	                     PUCCH1a_THRES);
+	      }
+#else
 	  // if SR was detected, use the n1_pucch from SR
 	  if (SR_payload==1) {
 #ifdef DEBUG_PHY_PROC
@@ -1024,8 +1050,17 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
 #ifdef DEBUG_PHY_PROC
  	      LOG_D(PHY,"RNTI %x type %d SR_payload %d  Frame %d Subframe %d  pucch_b0b1[0][0] %d pucch_b0b1[0][1] %d pucch_b0b1[1][0] %d pucch_b0b1[1][1] %d  \n",
 	              uci->rnti,uci->type,SR_payload,frame,subframe,pucch_b0b1[0][0],pucch_b0b1[0][1],pucch_b0b1[1][0],pucch_b0b1[1][1]);
+#endif
 #endif
 	  
+	  if(uci->pucch_fmt == pucch_format1a) {
+	    LOG_D(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d pucch1a (TDD) payload %d (metric %d)\n",
+	      eNB->Mod_id,uci->rnti,frame,subframe,pucch_b0b1[0][0],metric[0]);
+	    
+	    uci->stat = metric[0];
+	    fill_uci_harq_indication(eNB,uci,frame,subframe,pucch_b0b1[0],0,0xffff);
+	  }
+	  else if(uci->pucch_fmt == pucch_format1b) {
 	  if (SR_payload == 1) { // this implements Table 7.3.1 from 36.213
 	    if (pucch_b0b1[0][0] == 4) { // there isn't a likely transmission
 	      harq_ack[0] = 4; // DTX
@@ -1325,6 +1360,7 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
 	AssertFatal(1==0,"Unsupported UCI type %d\n",uci->type);
 	break;
       }
+      }
     
       if (SR_payload == 1) {
 	LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d Got SR for PUSCH, transmitting to MAC\n",eNB->Mod_id,
@@ -2010,6 +2046,7 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
  
       switch (harq_ack[0]) {
       case 0:
+      case 4:
           pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 0;
 	break;
       case 1: // check if M=1,4,7
@@ -2018,7 +2055,9 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
 	    pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 1;
 	  release_harq(eNB,UE_id,0,frame,subframe,0xffff);
 	  release_harq(eNB,UE_id,1,frame,subframe,0xffff);
-	}
+	}else{
+          pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 0;
+        }
 	break;
       case 2: // check if M=2,5,8
 	if (uci->num_pucch_resources == 2 || tdd_config5_sf2scheds == 2 || 
@@ -2026,7 +2065,9 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
 	    pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 1;
 	  release_harq(eNB,UE_id,0,frame,subframe,0xffff);
 	  release_harq(eNB,UE_id,1,frame,subframe,0xffff);
-	}
+	}else{
+          pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 0;
+        }
 	break;
       case 3: // check if M=3,6,9
 	if (uci->num_pucch_resources == 3 || tdd_config5_sf2scheds == 3 || 
@@ -2034,7 +2075,9 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
 	    pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 1;
 	  release_harq(eNB,UE_id,0,frame,subframe,0xffff);
 	  release_harq(eNB,UE_id,1,frame,subframe,0xffff);
-	}
+	}else{
+          pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 0;
+        }
 	break;
       }
       break;