diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index 12fbefe979dee3b572022f9f99fbc1fe9ef0e3ed..69cd78c0adaf2550ce8230e71bbfe28fee4afb46 100644
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -708,7 +708,7 @@ void fill_sr_indication(PHY_VARS_eNB *eNB,uint16_t rnti,int frame,int subframe,u
   pdu->rx_ue_information.tl.tag                       = NFAPI_RX_UE_INFORMATION_TAG;
   pdu->rx_ue_information.rnti                         = rnti;
 
-  int SNRtimes10 = dB_fixed_times10(stat) - 200;//(10*eNB->measurements.n0_power_dB[0]);
+  int SNRtimes10 = dB_fixed_times10(stat) - 300;//(10*eNB->measurements.n0_power_dB[0]);
 
 
   pdu->ul_cqi_information.tl.tag = NFAPI_UL_CQI_INFORMATION_TAG;
@@ -1334,8 +1334,8 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
             ulsch->rnti,
             dB_fixed(eNB->pusch_vars[i]->ulsch_power[0]),
             dB_fixed(eNB->pusch_vars[i]->ulsch_power[1]),
-            20,//eNB->measurements.n0_power_dB[0],
-            20,//eNB->measurements.n0_power_dB[1],
+            30,//eNB->measurements.n0_power_dB[0],
+            30,//eNB->measurements.n0_power_dB[1],
             ulsch_harq->o_ACK[0],
             ulsch_harq->o_ACK[1],
             ret,
@@ -1574,7 +1574,7 @@ void fill_rx_indication(PHY_VARS_eNB *eNB,int UE_id,int frame,int subframe)
   pdu->rx_indication_rel8.timing_advance = timing_advance_update;
 
   // estimate UL_CQI for MAC (from antenna port 0 only)
-  int SNRtimes10 = dB_fixed_times10(eNB->pusch_vars[UE_id]->ulsch_power[0]) - 200;//(10*eNB->measurements.n0_power_dB[0]);
+  int SNRtimes10 = dB_fixed_times10(eNB->pusch_vars[UE_id]->ulsch_power[0]) - 300;//(10*eNB->measurements.n0_power_dB[0]);
 
   if      (SNRtimes10 < -640) pdu->rx_indication_rel8.ul_cqi=0;
   else if (SNRtimes10 >  635) pdu->rx_indication_rel8.ul_cqi=255;
@@ -1847,7 +1847,7 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
 
   // estimate UL_CQI for MAC (from antenna port 0 only)
   pdu->ul_cqi_information.tl.tag = NFAPI_UL_CQI_INFORMATION_TAG;
-  int SNRtimes10 = dB_fixed_times10(uci->stat) - 200;//(10*eNB->measurements.n0_power_dB[0]);
+  int SNRtimes10 = dB_fixed_times10(uci->stat) - 300;//(10*eNB->measurements.n0_power_dB[0]);
 
   if (SNRtimes10 < -100) LOG_I(PHY,"uci->stat %d \n",uci->stat);
 
diff --git a/openair2/ENB_APP/MACRLC_paramdef.h b/openair2/ENB_APP/MACRLC_paramdef.h
index b006be82b9926f1a1178680de5938cefb94c2e38..ef7d5987852bfaa90c3c17d72f3445e2879e6e53 100644
--- a/openair2/ENB_APP/MACRLC_paramdef.h
+++ b/openair2/ENB_APP/MACRLC_paramdef.h
@@ -55,6 +55,8 @@
 #define CONFIG_STRING_MACRLC_REMOTE_S_PORTD                "remote_s_portd"
 #define CONFIG_STRING_MACRLC_SCHED_MODE                    "scheduler_mode"
 #define CONFIG_STRING_MACRLC_PHY_TEST_MODE                 "phy_test_mode"
+#define CONFIG_MACRLC_PUSCH10xSNR                          "puSch10xSnr"
+#define CONFIG_MACRLC_PUCCH10xSNR                          "puCch10xSnr"
 
 /*-------------------------------------------------------------------------------------------------------------------------------------------------------*/
 /*                                            MacRLC  configuration parameters                                                                           */
@@ -80,6 +82,8 @@
 {CONFIG_STRING_MACRLC_REMOTE_S_PORTD,                    NULL,     0,          uptr:NULL,           defintval:50021,           TYPE_UINT,     0},        \
 {CONFIG_STRING_MACRLC_SCHED_MODE,                        NULL,     0,          strptr:NULL,         defstrval:"default",       TYPE_STRING,   0},        \
 {CONFIG_STRING_MACRLC_PHY_TEST_MODE,                     NULL,     0,          uptr:NULL,           defintval:1,               TYPE_UINT,     0},        \
+{CONFIG_MACRLC_PUSCH10xSNR,  		                 NULL,     0,          iptr:NULL,           defintval:200,             TYPE_INT,      0},        \
+{CONFIG_MACRLC_PUCCH10xSNR,  		                 NULL,     0,          iptr:NULL,           defintval:200,             TYPE_INT,      0},        \
 }
 #define MACRLC_CC_IDX                                          0
 #define MACRLC_TRANSPORT_N_PREFERENCE_IDX                      1
@@ -100,4 +104,6 @@
 #define MACRLC_REMOTE_S_PORTD_IDX                              16
 #define MACRLC_SCHED_MODE_IDX                                  17
 #define MACRLC_PHY_TEST_IDX                                    18
+#define MACRLC_PUSCH10xSNR_IDX                                 19
+#define MACRLC_PUCCH10xSNR_IDX                                 20
 /*---------------------------------------------------------------------------------------------------------------------------------------------------------*/
diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c
index a56db1161e69518eca0cb8ced96e6f7fdd8d9819..3b65dfafdbafa734c709bef2e263f0641b733010 100644
--- a/openair2/ENB_APP/enb_config.c
+++ b/openair2/ENB_APP/enb_config.c
@@ -388,6 +388,8 @@ void RCconfig_macrlc() {
     RC.nb_mac_CC = (int*)malloc(RC.nb_macrlc_inst*sizeof(int));
 
     for (j=0;j<RC.nb_macrlc_inst;j++) {
+      RC.mac[j]->puSch10xSnr = *(MacRLC_ParamList.paramarray[j][MACRLC_PUSCH10xSNR_IDX ].iptr);
+      RC.mac[j]->puCch10xSnr = *(MacRLC_ParamList.paramarray[j][MACRLC_PUCCH10xSNR_IDX ].iptr);
       RC.nb_mac_CC[j] = *(MacRLC_ParamList.paramarray[j][MACRLC_CC_IDX].iptr);
       //RC.mac[j]->phy_test = *(MacRLC_ParamList.paramarray[j][MACRLC_PHY_TEST_IDX].iptr);
       //printf("PHY_TEST = %d,%d\n", RC.mac[j]->phy_test, j);
diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c
index 86a7dbe98f3c2e9646a02d38fc259798aa35c9a3..c222aff64bf6ed2194075983e57d00d08826c978 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler.c
@@ -537,7 +537,6 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP,
   // refresh UE list based on UEs dropped by PHY in previous subframe
   for (i = 0; i < MAX_MOBILES_PER_ENB; i++) {
     if (UE_list->active[i]) {
-
       rnti = UE_RNTI(module_idP, i);
       CC_id = UE_PCCID(module_idP, i);
       
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
index 3eb28cee594c99a267d2bce2d0550114d1704195..dc2efa21348516d280d920628cd08c3affd6c1af 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
@@ -1426,10 +1426,10 @@ schedule_ue_spec(module_id_t module_idP,slice_id_t slice_idP,
 	  // this is the normalized RX power
 	  eNB_UE_stats = &UE_list->eNB_UE_stats[CC_id][UE_id];
 
-	  /* TODO: fix how we deal with power, unit is not dBm, it's special from nfapi */
-	  normalized_rx_power = ue_sched_ctl->pucch1_snr[CC_id];
-	  target_rx_power = 208;
-
+	  /* unit is not dBm, it's special from nfapi */
+	  // converting to dBm: ToDo: Noise power hard coded to 30
+	  normalized_rx_power = (5*ue_sched_ctl->pucch1_snr[CC_id]-640)/10+30;
+	  target_rx_power= eNB->puCch10xSnr/10 + 30;
 	  // this assumes accumulated tpc
 	  // make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out
 	  int32_t framex10psubframe = UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_frame * 10 + UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_subframe;
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
index 4b8d4188b45c9cf8ebc25a368ac817a698fbcb1c..e58972c5e77214b644ea691ec0017cc119b7765d 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
@@ -1182,8 +1182,7 @@ schedule_ulsch_rnti(module_id_t module_idP,
   uint8_t status = 0;
   uint8_t rb_table_index = -1;
   uint32_t cqi_req, cshift, ndi, tpc;
-  int32_t normalized_rx_power;
-  int32_t target_rx_power = -90;
+  int32_t normalized_rx_power, target_rx_power;
   static int32_t tpc_accumulated = 0;
   int n;
   int CC_id = 0;
@@ -1350,9 +1349,10 @@ schedule_ulsch_rnti(module_id_t module_idP,
 	  //compute the expected ULSCH RX power (for the stats)
 
 	  // this is the normalized RX power and this should be constant (regardless of mcs
-	  normalized_rx_power = UE_sched_ctrl->pusch_snr[CC_id];
-	  target_rx_power = 178;
-
+	  //is not in dBm, unit from nfapi, converting to dBm: ToDo: Noise power hard coded to 30
+	  normalized_rx_power = (5*UE_sched_ctrl->pusch_snr[CC_id]-640)/10+30;
+	  target_rx_power= mac->puSch10xSnr/10 + 30;
+	  //printf("\n mac->puSch10xSnr = %d,  normalized_rx_power = %d, target_rx_power = %d \n",mac->puSch10xSnr,normalized_rx_power,target_rx_power);
 	  // this assumes accumulated tpc
 	  // make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out
 	  int32_t framex10psubframe = UE_template->pusch_tpc_tx_frame * 10 + UE_template->pusch_tpc_tx_subframe;
diff --git a/openair2/LAYER2/MAC/mac.h b/openair2/LAYER2/MAC/mac.h
index 8bef29101be6b63b3b09746a0f261cbd9e15a3e5..b96d2aee8d2285d8c3bc4541ba84a38b860a57d3 100644
--- a/openair2/LAYER2/MAC/mac.h
+++ b/openair2/LAYER2/MAC/mac.h
@@ -1274,6 +1274,9 @@ typedef struct eNB_MAC_INST_s {
   UE_free_list_t UE_free_list;
   /// for scheduling selection
   SCHEDULER_MODES scheduler_mode;
+
+  int32_t puSch10xSnr;
+  int32_t puCch10xSnr;
 } eNB_MAC_INST;
 
 /*
diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c
index 003450ed126d1ee2fabd2094187824dea6c68ba9..d32da8ac7259fad0c17cfb06c266669059a71e76 100644
--- a/openair2/LAYER2/MAC/main.c
+++ b/openair2/LAYER2/MAC/main.c
@@ -58,23 +58,27 @@ void mac_top_init_eNB(void)
 	  RC.nb_macrlc_inst);
 
     if (RC.nb_macrlc_inst > 0) {
-	RC.mac =
-	    (eNB_MAC_INST **) malloc16(RC.nb_macrlc_inst *
-				       sizeof(eNB_MAC_INST *));
+      if (RC.mac == NULL){
+		RC.mac =
+			(eNB_MAC_INST **) malloc16(RC.nb_macrlc_inst *
+						   sizeof(eNB_MAC_INST *));
+        }
 	AssertFatal(RC.mac != NULL,
 		    "can't ALLOCATE %zu Bytes for %d eNB_MAC_INST with size %zu \n",
 		    RC.nb_macrlc_inst * sizeof(eNB_MAC_INST *),
 		    RC.nb_macrlc_inst, sizeof(eNB_MAC_INST));
 	for (i = 0; i < RC.nb_macrlc_inst; i++) {
-	    RC.mac[i] = (eNB_MAC_INST *) malloc16(sizeof(eNB_MAC_INST));
-	    AssertFatal(RC.mac != NULL,
-			"can't ALLOCATE %zu Bytes for %d eNB_MAC_INST with size %zu \n",
-			RC.nb_macrlc_inst * sizeof(eNB_MAC_INST *),
-			RC.nb_macrlc_inst, sizeof(eNB_MAC_INST));
-	    LOG_D(MAC,
-		  "[MAIN] ALLOCATE %zu Bytes for %d eNB_MAC_INST @ %p\n",
-		  sizeof(eNB_MAC_INST), RC.nb_macrlc_inst, RC.mac);
-	    bzero(RC.mac[i], sizeof(eNB_MAC_INST));
+            if (RC.mac[i] == NULL) {
+                RC.mac[i] = (eNB_MAC_INST *) malloc16(sizeof(eNB_MAC_INST));
+                AssertFatal(RC.mac[i] != NULL,
+                            "can't ALLOCATE %zu Bytes for %d eNB_MAC_INST with size %zu \n",
+                            RC.nb_macrlc_inst * sizeof(eNB_MAC_INST *),
+                            RC.nb_macrlc_inst, sizeof(eNB_MAC_INST));
+                LOG_D(MAC,
+                      "[MAIN] ALLOCATE %zu Bytes for %d eNB_MAC_INST @ %p\n",
+                      sizeof(eNB_MAC_INST), RC.nb_macrlc_inst, RC.mac);
+                bzero(RC.mac[i], sizeof(eNB_MAC_INST));
+            }
 	    RC.mac[i]->Mod_id = i;
 	    for (j = 0; j < MAX_NUM_CCs; j++) {
 		RC.mac[i]->DL_req[j].dl_config_request_body.
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf
index dacddb4201d08b77d3565408c53446ccc0e01668..3064a29c698ababb992a6fc3562efcd262a02276 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf
@@ -164,6 +164,8 @@ MACRLCs = (
 	num_cc = 1;
 	tr_s_preference = "local_L1";
 	tr_n_preference = "local_RRC";
+        puSch10xSnr     =  200;
+        puCch10xSnr     =  200;
         }  
 );
 
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
index 3d88df5982e44cc1130de373e605059d4b059455..15e52c7cdd9131f49b59c71c55d84cdbce46387a 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
@@ -199,6 +199,8 @@ MACRLCs = (
 	tr_s_preference = "local_L1";
 	tr_n_preference = "local_RRC";
 	phy_test_mode = 1;
+        puSch10xSnr     =  200;
+        puCch10xSnr     =  200;
         }  
 );