diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
index 93c1af8d9184db6cce5e16e5ab36117f949e6833..93f92062eacdffb9a79561a868a0e6eb48cebaa2 100644
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
@@ -1035,6 +1035,11 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext,
 
 
 
+#if defined(__x86_64__) || defined(__i386__)
+__m128 avg128U;
+#elif defined(__arm__)
+int32x4_t avg128U;
+#endif
 
 void ulsch_channel_level(int32_t **drs_ch_estimates_ext,
                          LTE_DL_FRAME_PARMS *frame_parms,
@@ -1045,24 +1050,21 @@ void ulsch_channel_level(int32_t **drs_ch_estimates_ext,
   int16_t rb;
   uint8_t aarx;
 #if defined(__x86_64__) || defined(__i386__)
-  __m128i avg128U;
   __m128i *ul_ch128;
 #elif defined(__arm__)
   int16x4_t *ul_ch128;
-  int32x4_t avg128U;
 #endif
-
   for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
     //clear average level
 #if defined(__x86_64__) || defined(__i386__)
-    avg128U = _mm_setzero_si128();
+    avg128U = _mm_setzero_ps();
     ul_ch128=(__m128i *)drs_ch_estimates_ext[aarx];
 
     for (rb=0; rb<nb_rb; rb++) {
 
-      avg128U = _mm_add_epi32(avg128U,_mm_madd_epi16(ul_ch128[0],ul_ch128[0]));
-      avg128U = _mm_add_epi32(avg128U,_mm_madd_epi16(ul_ch128[1],ul_ch128[1]));
-      avg128U = _mm_add_epi32(avg128U,_mm_madd_epi16(ul_ch128[2],ul_ch128[2]));
+      avg128U = _mm_add_ps(avg128U,_mm_cvtepi32_ps(_mm_madd_epi16(ul_ch128[0],ul_ch128[0])));
+      avg128U = _mm_add_ps(avg128U,_mm_cvtepi32_ps(_mm_madd_epi16(ul_ch128[1],ul_ch128[1])));
+      avg128U = _mm_add_ps(avg128U,_mm_cvtepi32_ps(_mm_madd_epi16(ul_ch128[2],ul_ch128[2])));
 
       ul_ch128+=3;
 
@@ -1089,10 +1091,10 @@ void ulsch_channel_level(int32_t **drs_ch_estimates_ext,
 #endif
 
     DevAssert( nb_rb );
-    avg[aarx] = (((int*)&avg128U)[0] +
-                 ((int*)&avg128U)[1] +
-                 ((int*)&avg128U)[2] +
-                 ((int*)&avg128U)[3])/(nb_rb*12);
+    avg[aarx] = (int)((((float*)&avg128U)[0] +
+                       ((float*)&avg128U)[1] +
+                       ((float*)&avg128U)[2] +
+                       ((float*)&avg128U)[3])/(float)(nb_rb*12));
 
   }
 
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
index 76067ab663c1276ab76a26b262568cac525c9639..abe8b0ef9019e0b559c615adac0ae3406244ff9a 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
@@ -165,6 +165,9 @@ rx_sdu(const module_id_t enb_mod_idP,
 		  UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid],
 		  ul_cqi);
 
+		if(ul_cqi>200){ // too high energy pattern
+		    UE_list->UE_sched_ctrl[UE_id].pusch_snr[CC_idP] = ul_cqi;
+		}
       //      AssertFatal(1==0,"ulsch in error\n");
       if (UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid] == 3) {
         UE_list->UE_sched_ctrl[UE_id].ul_scheduled &= (~(1 << harq_pid));