diff --git a/openair1/PHY/LTE_TRANSPORT/pucch.c b/openair1/PHY/LTE_TRANSPORT/pucch.c
index db671f048c9d066c5413742e0b94ab51d6b37816..fc54fcca8f6803b26b3e0c3b3051b9821ab1215c 100644
--- a/openair1/PHY/LTE_TRANSPORT/pucch.c
+++ b/openair1/PHY/LTE_TRANSPORT/pucch.c
@@ -523,29 +523,8 @@ void generate_pucch2x(int32_t **txdataF,
   pucch2x_modulation(btilde,d,amp);
 
   // add extra symbol for 2a/2b
-  d[20]=0;
-  d[21]=0;
-  if (fmt==pucch_format2a)
-    d[20] = (B2 == 0) ? amp : -amp;
-  else if (fmt==pucch_format2b) {
-    switch (B2) {
-    case 0:
-      d[20] = amp;
-      break;
-    case 1:
-      d[21] = -amp;
-      break;
-    case 2:
-      d[21] = amp;
-      break;
-    case 3:
-      d[20] = -amp;
-      break;
-    default:
-      AssertFatal(1==0,"Illegal modulation symbol %d for PUCCH %s\n",B2,pucch_format_string[fmt]);
-      break;
-    }
-  }
+
+
 
 
 #ifdef DEBUG_PUCCH_TX
@@ -584,10 +563,47 @@ void generate_pucch2x(int32_t **txdataF,
               //LOG_I(PHY,"slot %d ofdm# %d ==> d[%d,%d] \n",ns,l,data_ind,n);
           }
           else {
-              ((int16_t *)&zptr[n])[0] = ((int32_t)amp*ref_re>>15);
-              ((int16_t *)&zptr[n])[1] = ((int32_t)amp*ref_im>>15);
-              //LOG_I(PHY,"slot %d ofdm# %d ==> dmrs[%d] \n",ns,l,n);
-          }
+	    if (l==1){
+	      ((int16_t *)&zptr[n])[0] = ((int32_t)amp*ref_re>>15);
+	      ((int16_t *)&zptr[n])[1] = ((int32_t)amp*ref_im>>15);
+	    }
+	    else if (fmt==pucch_format2a) {
+	      d[20]=amp;
+	      d[21]=amp;
+	      if (B2 == 0) {
+		((int16_t *)&zptr[n])[0] = ((int32_t)amp*ref_re>>15);
+		((int16_t *)&zptr[n])[1] = ((int32_t)amp*ref_im>>15);
+	      }
+	      else {
+		((int16_t *)&zptr[n])[0] = -((int32_t)amp*ref_re>>15);
+		((int16_t *)&zptr[n])[1] = -((int32_t)amp*ref_im>>15);
+	      }
+	      //LOG_I(PHY,"slot %d ofdm# %d ==> dmrs[%d] \n",ns,l,n);
+	    }
+	    else if (fmt==pucch_format2b) {
+	      switch (B2) {
+	      case 0: // 1
+		((int16_t *)&zptr[n])[0] = ((int32_t)amp*ref_re>>15);
+		((int16_t *)&zptr[n])[1] = ((int32_t)amp*ref_im>>15);
+		break;
+	      case 1: // -j
+		((int16_t *)&zptr[n])[1] = ((int32_t)amp*ref_re>>15);
+		((int16_t *)&zptr[n])[0] = -((int32_t)amp*ref_im>>15);
+		break;
+	      case 2: // -1
+		((int16_t *)&zptr[n])[0] = -((int32_t)amp*ref_re>>15);
+		((int16_t *)&zptr[n])[1] = -((int32_t)amp*ref_im>>15);
+		break;
+	      case 3: // j
+		((int16_t *)&zptr[n])[1] = -((int32_t)amp*ref_re>>15);
+		((int16_t *)&zptr[n])[0] = ((int32_t)amp*ref_im>>15);
+		break;
+	      default:
+		AssertFatal(1==0,"Illegal modulation symbol %d for PUCCH %s\n",B2,pucch_format_string[fmt]);
+		break;
+	      }
+	    }// fmt==pucch_format2b
+          }// l==1 || l==5
           alpha_ind = (alpha_ind + n_cs)%12;
       } // n
       zptr+=12;