diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.c b/openair2/RRC/NR/MESSAGES/asn1_msg.c
index c0676814f798f725d39a58b1cb9a39e7ddd90035..3e38c772daacd842c699b858b4b629d1f671dd7d 100755
--- a/openair2/RRC/NR/MESSAGES/asn1_msg.c
+++ b/openair2/RRC/NR/MESSAGES/asn1_msg.c
@@ -1098,8 +1098,9 @@ void fill_initial_SpCellConfig(int uid,
   pusch_Config->uci_OnPUSCH=NULL;
   pusch_Config->tp_pi2BPSK=NULL;
 
+  // We are using do_srs = 0 here because the periodic SRS will only be enabled in update_cellGroupConfig() if do_srs == 1
   initialUplinkBWP->srs_Config = calloc(1,sizeof(*initialUplinkBWP->srs_Config));
-  config_srs(initialUplinkBWP->srs_Config, scc, uid, configuration->do_SRS);
+  config_srs(initialUplinkBWP->srs_Config, scc, uid, 0);
 
   // configure Scheduling request
   // 40 slot period 
@@ -1354,6 +1355,7 @@ void fill_mastercellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig, NR_CellGr
 }
 
 void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig,
+                            int uid,
                             NR_UE_NR_Capability_t *uecap,
                             const gNB_RrcConfigurationReq* configuration) {
 
@@ -1362,6 +1364,22 @@ void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig,
 
   NR_ServingCellConfigCommon_t *scc = configuration->scc;
 
+  if (configuration &&
+      configuration->do_SRS &&
+      SpCellConfig &&
+      SpCellConfig->spCellConfigDedicated &&
+      SpCellConfig->spCellConfigDedicated->uplinkConfig &&
+      SpCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP) {
+    if (!SpCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->srs_Config) {
+      SpCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->srs_Config =
+          calloc(1,sizeof(*SpCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->srs_Config));
+    }
+    config_srs(SpCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->srs_Config,
+               scc,
+               uid,
+               configuration->do_SRS);
+  }
+
   NR_BWP_DownlinkDedicated_t *bwp_Dedicated = SpCellConfig->spCellConfigDedicated->initialDownlinkBWP;
   set_dl_mcs_table(scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.subcarrierSpacing,
                    configuration->force_256qam_off ? NULL : uecap, bwp_Dedicated, scc);
@@ -1850,6 +1868,7 @@ int16_t do_RRCReconfiguration(
 
     if(cellGroupConfig!=NULL){
       update_cellGroupConfig(cellGroupConfig,
+                             ue_context_pP->local_uid,
                              ue_context_pP->ue_context.UE_Capability_nr,
                              configuration);
 
diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.h b/openair2/RRC/NR/MESSAGES/asn1_msg.h
index aeef5f93a7ef1eac76400206cd0bbf44c9fe595e..f056088da83aff5236d4f97241bbb52bbb399c5b 100644
--- a/openair2/RRC/NR/MESSAGES/asn1_msg.h
+++ b/openair2/RRC/NR/MESSAGES/asn1_msg.h
@@ -112,6 +112,7 @@ void fill_initial_cellGroupConfig(int uid,
                                   const gNB_RrcConfigurationReq *configuration);
 
 void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig,
+                            int uid,
                             NR_UE_NR_Capability_t *uecap,
                             const gNB_RrcConfigurationReq *configuration);
 
diff --git a/openair2/RRC/NR/nr_rrc_config.c b/openair2/RRC/NR/nr_rrc_config.c
index 5bcdf86a95e4a1f3c8020ef0e8d4f9653e2998e3..2e44a8022e9e0969ae9e198c4818360d7ee1f627 100644
--- a/openair2/RRC/NR/nr_rrc_config.c
+++ b/openair2/RRC/NR/nr_rrc_config.c
@@ -200,9 +200,27 @@ void config_srs(NR_SetupRelease_SRS_Config_t *setup_release_srs_Config,
                 int do_srs) {
 
   setup_release_srs_Config->present = NR_SetupRelease_SRS_Config_PR_setup;
-  setup_release_srs_Config->choice.setup = calloc(1,sizeof(*setup_release_srs_Config->choice.setup));
 
-  NR_SRS_Config_t *srs_Config = setup_release_srs_Config->choice.setup;
+  NR_SRS_Config_t *srs_Config;
+  if (setup_release_srs_Config->choice.setup) {
+    srs_Config = setup_release_srs_Config->choice.setup;
+    if (srs_Config->srs_ResourceSetToReleaseList) {
+      free(srs_Config->srs_ResourceSetToReleaseList);
+    }
+    if (srs_Config->srs_ResourceSetToAddModList) {
+      free(srs_Config->srs_ResourceSetToAddModList);
+    }
+    if (srs_Config->srs_ResourceToReleaseList) {
+      free(srs_Config->srs_ResourceToReleaseList);
+    }
+    if (srs_Config->srs_ResourceToAddModList) {
+      free(srs_Config->srs_ResourceToAddModList);
+    }
+    free(srs_Config);
+  }
+
+  setup_release_srs_Config->choice.setup = calloc(1,sizeof(*setup_release_srs_Config->choice.setup));
+  srs_Config = setup_release_srs_Config->choice.setup;
 
   srs_Config->srs_ResourceSetToReleaseList = NULL;
 
@@ -254,9 +272,10 @@ void config_srs(NR_SetupRelease_SRS_Config_t *setup_release_srs_Config,
   srs_res0->freqDomainShift = 0;
   srs_res0->freqHopping.b_SRS = 0;
   srs_res0->freqHopping.b_hop = 0;
-  srs_res0->freqHopping.c_SRS = rrc_get_max_nr_csrs(
-      NRRIV2BW(servingcellconfigcommon->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, 275),
-      srs_res0->freqHopping.b_SRS);
+  srs_res0->freqHopping.c_SRS = servingcellconfigcommon ?
+                                rrc_get_max_nr_csrs(
+                                    NRRIV2BW(servingcellconfigcommon->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, 275),
+                                    srs_res0->freqHopping.b_SRS) : 0;
   srs_res0->groupOrSequenceHopping = NR_SRS_Resource__groupOrSequenceHopping_neither;
   if (do_srs) {
     srs_res0->resourceType.present = NR_SRS_Resource__resourceType_PR_periodic;