diff --git a/executables/nr-ue.c b/executables/nr-ue.c
index 10a9ca317be754143ff93f502a124f1ce7ad557c..82b11f9b7fd29c464b4ffdef9b0525b572ffea90 100644
--- a/executables/nr-ue.c
+++ b/executables/nr-ue.c
@@ -220,7 +220,6 @@ static void UE_synch(void *arg) {
       LOG_I(PHY, "[UE thread Synch] Running Initial Synch (mode %d)\n",UE->mode);
 
       uint64_t dl_carrier, ul_carrier;
-      double rx_gain_off = 0;
       nr_get_carrier_frequencies(&UE->frame_parms, &dl_carrier, &ul_carrier);
 
       if (nr_initial_sync(&syncD->proc, UE, 2) == 0) {
@@ -230,7 +229,7 @@ static void UE_synch(void *arg) {
 
         // rerun with new cell parameters and frequency-offset
         // todo: the freq_offset computed on DL shall be scaled before being applied to UL
-        nr_rf_card_config(&openair0_cfg[UE->rf_map.card], rx_gain_off, ul_carrier, dl_carrier, freq_offset);
+        nr_rf_card_config_freq(&openair0_cfg[UE->rf_map.card], ul_carrier, dl_carrier, freq_offset);
 
         LOG_I(PHY,"Got synch: hw_slot_offset %d, carrier off %d Hz, rxgain %f (DL %f Hz, UL %f Hz)\n",
               hw_slot_offset,
@@ -264,7 +263,7 @@ static void UE_synch(void *arg) {
 
           freq_offset *= -1;
 
-          nr_rf_card_config(&openair0_cfg[UE->rf_map.card], rx_gain_off, ul_carrier, dl_carrier, freq_offset);
+          nr_rf_card_config_freq(&openair0_cfg[UE->rf_map.card], ul_carrier, dl_carrier, freq_offset);
 
           LOG_I(PHY, "Initial sync failed: trying carrier off %d Hz\n", freq_offset);
 
diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c
index cbc79912a2c96f0b1679790e72695702dc2008fd..010251d134e4295c6e05c502c2ab94a6f75fcc47 100644
--- a/executables/nr-uesoftmodem.c
+++ b/executables/nr-uesoftmodem.c
@@ -376,7 +376,8 @@ void init_openair0(void) {
 
     nr_get_carrier_frequencies(frame_parms, &dl_carrier, &ul_carrier);
 
-    nr_rf_card_config(&openair0_cfg[card], rx_gain_off, ul_carrier, dl_carrier, freq_off);
+    nr_rf_card_config_freq(&openair0_cfg[card], ul_carrier, dl_carrier, freq_off);
+    nr_rf_card_config_gain(&openair0_cfg[card], rx_gain_off);
 
     openair0_cfg[card].configFilename = get_softmodem_params()->rf_config_file;
 
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
index 1e7e10def70891889b033605743d55b403711e95..6453e429862a672d76dac9b41d1dbc25b99c2f69 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
@@ -1477,11 +1477,13 @@ void nr_get_carrier_frequencies(NR_DL_FRAME_PARMS *fp,
   @param dl_Carrier     DL carrier to be set
   @param freq_offset    Freq offset to be set
 */
-void nr_rf_card_config(openair0_config_t *openair0_cfg,
-                       double rx_gain_off,
-                       uint64_t ul_Carrier,
-                       uint64_t dl_Carrier,
-                       int freq_offset);
+void nr_rf_card_config_gain(openair0_config_t *openair0_cfg,
+                            double rx_gain_off);
+
+void nr_rf_card_config_freq(openair0_config_t *openair0_cfg,
+                            uint64_t ul_Carrier,
+                            uint64_t dl_Carrier,
+                            int freq_offset);
 
 
 void print_CQI(void *o,UCI_format_t uci_format,uint8_t eNB_id,int N_RB_DL);
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_ue_rf_helpers.c b/openair1/PHY/NR_UE_TRANSPORT/nr_ue_rf_helpers.c
index 6cf782d9d83d0ce0c11edaceba8ce880dda505a1..29cccdcf8811dbc9605bf6c9a532a5d9d99abf85 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_ue_rf_helpers.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_ue_rf_helpers.c
@@ -48,11 +48,9 @@ void nr_get_carrier_frequencies(NR_DL_FRAME_PARMS *fp, uint64_t *dl_carrier, uin
 
 }
 
-void nr_rf_card_config(openair0_config_t *openair0_cfg,
-                       double rx_gain_offset,
-                       uint64_t ul_carrier,
-                       uint64_t dl_carrier,
-                       int freq_offset){
+
+void nr_rf_card_config_gain(openair0_config_t *openair0_cfg,
+                            double rx_gain_off){
 
   uint8_t mod_id     = 0;
   uint8_t cc_id      = 0;
@@ -61,6 +59,36 @@ void nr_rf_card_config(openair0_config_t *openair0_cfg,
   double rx_gain     = ue->rx_total_gain_dB;
   double tx_gain     = ue->tx_total_gain_dB;
 
+  for (int i = rf_chain; i < rf_chain + 4; i++) {
+
+    if (tx_gain)
+      openair0_cfg->tx_gain[i] = tx_gain;
+    if (rx_gain)
+      openair0_cfg->rx_gain[i] = rx_gain - rx_gain_off;
+
+    openair0_cfg->autocal[i] = 1;
+
+    if (i < openair0_cfg->rx_num_channels) {
+      LOG_I(PHY, "HW: Configuring channel %d (rf_chain %d): setting tx_gain %f, rx_gain %f\n",
+        i,
+        rf_chain,
+        openair0_cfg->tx_gain[i],
+        openair0_cfg->rx_gain[i]);
+    }
+
+  }
+}
+
+void nr_rf_card_config_freq(openair0_config_t *openair0_cfg,
+                            uint64_t ul_carrier,
+                            uint64_t dl_carrier,
+                            int freq_offset){
+
+  uint8_t mod_id     = 0;
+  uint8_t cc_id      = 0;
+  PHY_VARS_NR_UE *ue = PHY_vars_UE_g[mod_id][cc_id];
+  int rf_chain       = ue->rf_map.chain;
+
   for (int i = rf_chain; i < rf_chain + 4; i++) {
 
     if (i < openair0_cfg->rx_num_channels)
@@ -73,22 +101,15 @@ void nr_rf_card_config(openair0_config_t *openair0_cfg,
     else
       openair0_cfg->tx_freq[i] = 0.0;
 
-    if (tx_gain)
-      openair0_cfg->tx_gain[i] = tx_gain;
-    if (rx_gain)
-      openair0_cfg->rx_gain[i] = rx_gain - rx_gain_offset;
-
     openair0_cfg->autocal[i] = 1;
 
     if (i < openair0_cfg->rx_num_channels) {
-      LOG_I(PHY, "HW: Configuring channel %d (rf_chain %d): setting tx_gain %f, rx_gain %f, tx_freq %f Hz, rx_freq %f Hz\n",
+      LOG_I(PHY, "HW: Configuring channel %d (rf_chain %d): setting tx_freq %f Hz, rx_freq %f Hz\n",
         i,
         rf_chain,
-        openair0_cfg->tx_gain[i],
-        openair0_cfg->rx_gain[i],
         openair0_cfg->tx_freq[i],
         openair0_cfg->rx_freq[i]);
     }
 
   }
-}
\ No newline at end of file
+}
diff --git a/targets/ARCH/rfsimulator/simulator.c b/targets/ARCH/rfsimulator/simulator.c
index 3bd4285cffc12f59d8190ccad89d7abf6d26bdc3..40badb54a62bbd4a8dda861346d9ad1c084a20b7 100644
--- a/targets/ARCH/rfsimulator/simulator.c
+++ b/targets/ARCH/rfsimulator/simulator.c
@@ -805,6 +805,7 @@ int device_init(openair0_device *device, openair0_config_t *openair0_cfg) {
   device->trx_read_func      = rfsimulator_read;
   /* let's pretend to be a b2x0 */
   device->type = RFSIMULATOR;
+  openair0_cfg[0].rx_gain[0] = 0;
   device->openair0_cfg=&openair0_cfg[0];
   device->priv = rfsimulator;
   device->trx_write_init = rfsimulator_write_init;