diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
index 3fa192f7cbaa371485c3a1102dc9b223ea4142be..e03d9cc198c47945f19599fa24cb50db1611e4bd 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
@@ -1876,10 +1876,11 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
     for (int aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++)
        avgs = cmax(avgs, avg[aatx*frame_parms->nb_antennas_rx+aarx]);
   
+  pusch_vars->log2_maxh = (log2_approx(avgs) >> 1);
 
-  if (rel15_ul->nrOfLayers == 2 && rel15_ul->qam_mod_order < 6)
+  if (rel15_ul->nrOfLayers == 2 && rel15_ul->qam_mod_order >= 6)
     pusch_vars->log2_maxh = (log2_approx(avgs) >> 1) - 3; // for MMSE
-  else
+  else if (rel15_ul->nrOfLayers == 1)
     pusch_vars->log2_maxh = (log2_approx(avgs) >> 1) + 1 + log2_approx(frame_parms->nb_antennas_rx >> 2);
   
   if (pusch_vars->log2_maxh < 0)