diff --git a/pom.xml b/pom.xml
index e495d6d5965f7d506a5fc16480a0337b0f7fc0f2..02c9367fb1be28adb3d999eb191c9196de688c55 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,7 +30,7 @@
         <maven.compiler.source>17</maven.compiler.source>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <openapi.version>2.6.0</openapi.version>
-        <os-core-common.version>3.1.1</os-core-common.version>
+        <os-core-common.version>3.2.0</os-core-common.version>
         <gson.version>2.8.9</gson.version>
         <json-smart.version>2.5.0</json-smart.version>
         <netty.version>4.1.97.Final</netty.version>
diff --git a/provider/register-gc/src/main/java/org/opengroup/osdu/register/provider/gcp/config/RegisterAccessGroups.java b/provider/register-gc/src/main/java/org/opengroup/osdu/register/provider/gcp/config/RegisterAccessGroups.java
new file mode 100644
index 0000000000000000000000000000000000000000..f0683a9086744affcc29403fd030ee7aa33da0ed
--- /dev/null
+++ b/provider/register-gc/src/main/java/org/opengroup/osdu/register/provider/gcp/config/RegisterAccessGroups.java
@@ -0,0 +1,35 @@
+/*
+ Copyright 2020-2024 Google LLC
+ Copyright 2020-2024 EPAM Systems, Inc
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package org.opengroup.osdu.register.provider.gcp.config;
+
+import org.opengroup.osdu.core.common.secret.AccessGroups;
+
+public class RegisterAccessGroups implements AccessGroups {
+  private static final String REGISTER_SECRET_OWNERS_GROUP = "register.secret.owners";
+  private static final String REGISTER_SECRET_VIEWERS_GROUP = "register.secret.viewers";
+
+  @Override
+  public String accessOwnersGroup() {
+    return REGISTER_SECRET_OWNERS_GROUP;
+  }
+
+  @Override
+  public String accessViewersGroup() {
+    return REGISTER_SECRET_VIEWERS_GROUP;
+  }
+}
diff --git a/provider/register-gc/src/main/java/org/opengroup/osdu/register/provider/gcp/secret/SecretClient.java b/provider/register-gc/src/main/java/org/opengroup/osdu/register/provider/gcp/config/SecretApiConfiguration.java
similarity index 54%
rename from provider/register-gc/src/main/java/org/opengroup/osdu/register/provider/gcp/secret/SecretClient.java
rename to provider/register-gc/src/main/java/org/opengroup/osdu/register/provider/gcp/config/SecretApiConfiguration.java
index f88799a131ffe0f28808c9cfed841aae99f05657..b7f68915fd756be7c7887a1e6ec245e331f8ae8c 100644
--- a/provider/register-gc/src/main/java/org/opengroup/osdu/register/provider/gcp/secret/SecretClient.java
+++ b/provider/register-gc/src/main/java/org/opengroup/osdu/register/provider/gcp/config/SecretApiConfiguration.java
@@ -15,17 +15,20 @@
  limitations under the License.
 */
 
-package org.opengroup.osdu.register.provider.gcp.secret;
+package org.opengroup.osdu.register.provider.gcp.config;
 
-import org.opengroup.osdu.core.common.model.secret.SecretModel;
+import org.opengroup.osdu.core.common.secret.AccessGroups;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
 
-public interface SecretClient {
+@Configuration
+public class SecretApiConfiguration {
 
-  SecretModel retrieveSecret(String secretKey);
+  @Autowired public RegisterConfigurationProperties configurationProperties;
 
-  SecretModel createSecret(String secretKey, String secretValue);
-
-  SecretModel updateSecret(String secretKey, String secretValue);
-
-  void removeSecret(String secretKey);
+  @Bean
+  public AccessGroups accessGroups() {
+    return new RegisterAccessGroups();
+  }
 }
diff --git a/provider/register-gc/src/main/java/org/opengroup/osdu/register/provider/gcp/secret/SecretClientImpl.java b/provider/register-gc/src/main/java/org/opengroup/osdu/register/provider/gcp/secret/SecretClientImpl.java
deleted file mode 100644
index 5478cbcb9763d5979b3bf510c7a98e031c901936..0000000000000000000000000000000000000000
--- a/provider/register-gc/src/main/java/org/opengroup/osdu/register/provider/gcp/secret/SecretClientImpl.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- Copyright 2020-2024 Google LLC
- Copyright 2020-2024 EPAM Systems, Inc
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-package org.opengroup.osdu.register.provider.gcp.secret;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import java.net.URI;
-import java.time.OffsetDateTime;
-import java.util.HashMap;
-import java.util.Map;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.http.HttpStatus;
-import org.opengroup.osdu.core.common.http.HttpRequest;
-import org.opengroup.osdu.core.common.http.HttpResponse;
-import org.opengroup.osdu.core.common.http.IHttpClient;
-import org.opengroup.osdu.core.common.model.entitlements.Acl;
-import org.opengroup.osdu.core.common.model.http.AppException;
-import org.opengroup.osdu.core.common.model.http.DpsHeaders;
-import org.opengroup.osdu.core.common.model.secret.SecretModel;
-import org.opengroup.osdu.core.common.util.IServiceAccountJwtClient;
-import org.opengroup.osdu.register.provider.gcp.config.RegisterConfigurationProperties;
-import org.opengroup.osdu.register.provider.gcp.constant.RegisterConstants;
-import org.opengroup.osdu.register.provider.gcp.gson.OffsetDateTimeAdapter;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
-import org.springframework.stereotype.Service;
-
-// Todo: move it to core-common
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class SecretClientImpl implements SecretClient {
-
-  private static final String HTTP_CODE_STRING = "HTTP code = %s.";
-  private static final String INTERNAL_SERVER_ERROR_STRING = "Internal Server Error.";
-
-  private final RegisterConfigurationProperties configurationProperties;
-  private final IHttpClient httpClient;
-  private final DpsHeaders dpsHeaders;
-  private final IServiceAccountJwtClient serviceAccountJwtClient;
-
-  private final Gson gson =
-      new GsonBuilder()
-          .registerTypeAdapter(OffsetDateTime.class, new OffsetDateTimeAdapter())
-          .create();
-
-  @Override
-  public SecretModel retrieveSecret(String secretKey) {
-    String url = createUrl(secretKey);
-    Map<String, String> headers = buildHttpHeaders();
-    HttpRequest request = HttpRequest.get().url(url).headers(headers).build();
-
-    HttpResponse response = httpClient.send(request);
-
-    log.debug(HTTP_CODE_STRING.formatted(response.getResponseCode()));
-
-    checkHttpResponse(response.getResponseCode());
-
-    return getSecretModel(response);
-  }
-
-  @Override
-  public SecretModel createSecret(String secretKey, String secretValue) {
-    String url = createUrl();
-    SecretModel secret =
-        SecretModel.builder()
-            .id(secretKey)
-            .value(secretValue)
-            .isEnabled(true)
-            .secretAcls(buildAcl())
-            .build();
-    Map<String, String> headers = buildHttpHeaders();
-    HttpRequest request = HttpRequest.post(secret).url(url).headers(headers).build();
-
-    HttpResponse response = httpClient.send(request);
-
-    log.debug(HTTP_CODE_STRING.formatted(response.getResponseCode()));
-
-    return getSecretModel(response);
-  }
-
-  private Acl buildAcl() {
-    String partitionId = dpsHeaders.getPartitionId();
-    String domain = configurationProperties.getDomain();
-
-    String ownersAcl =
-        String.format(
-            "%s@%s.%s", RegisterConstants.REGISTER_SECRET_OWNERS_GROUP, partitionId, domain);
-
-    String viewersAcl =
-        String.format(
-            "%s@%s.%s", RegisterConstants.REGISTER_SECRET_VIEWERS_GROUP, partitionId, domain);
-
-    return new Acl(new String[] {viewersAcl}, new String[] {ownersAcl});
-  }
-
-  @Override
-  public SecretModel updateSecret(String secretKey, String secretValue) {
-    String url = createUrl(secretKey);
-    Map<String, String> headers = buildHttpHeaders();
-    SecretModel secret =
-        SecretModel.builder()
-            .id(secretKey)
-            .value(secretValue)
-            .secretAcls(buildAcl())
-            .isEnabled(true)
-            .build();
-    HttpRequest request = HttpRequest.patch(secret).url(url).headers(headers).build();
-
-    HttpResponse response = httpClient.send(request);
-
-    checkHttpResponse(response.getResponseCode());
-
-    log.debug(HTTP_CODE_STRING.formatted(response.getResponseCode()));
-
-    return getSecretModel(response);
-  }
-
-  private void checkHttpResponse(int responseCode) {
-    if (responseCode != HttpStatus.SC_OK && responseCode != HttpStatus.SC_NO_CONTENT) {
-      throw new AppException(
-          HttpStatus.SC_INTERNAL_SERVER_ERROR,
-          INTERNAL_SERVER_ERROR_STRING,
-          INTERNAL_SERVER_ERROR_STRING);
-    }
-  }
-
-  @Override
-  public void removeSecret(String secretKey) {
-    String url = createUrl(secretKey);
-    Map<String, String> headers = buildHttpHeaders();
-    HttpRequest request = HttpRequest.delete().url(url).headers(headers).build();
-
-    HttpResponse response = httpClient.send(request);
-
-    log.debug(HTTP_CODE_STRING.formatted(response.getResponseCode()));
-
-    checkHttpResponse(response.getResponseCode());
-  }
-
-  private String createUrl() {
-    return createUrl(null);
-  }
-
-  private String createUrl(String secretName) {
-    String path =
-        (secretName == null || secretName.isEmpty())
-            ? "/secrets"
-            : String.format("/secrets/%s", secretName);
-    return URI.create(configurationProperties.getSecretApi() + path).normalize().toString();
-  }
-
-  private Map<String, String> buildHttpHeaders() {
-    Map<String, String> headers = new HashMap<>();
-
-    headers.put(DpsHeaders.DATA_PARTITION_ID, dpsHeaders.getPartitionId());
-    headers.put(
-        HttpHeaders.AUTHORIZATION, serviceAccountJwtClient.getIdToken(dpsHeaders.getPartitionId()));
-    headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
-    return headers;
-  }
-
-  private SecretModel getSecretModel(HttpResponse response) {
-    try {
-      return gson.fromJson(response.getBody(), SecretModel.class);
-    } catch (Exception e) {
-      throw new AppException(
-          HttpStatus.SC_INTERNAL_SERVER_ERROR, INTERNAL_SERVER_ERROR_STRING, e.getMessage(), e);
-    }
-  }
-}
diff --git a/provider/register-gc/src/main/java/org/opengroup/osdu/register/provider/gcp/subscriber/OsmAccess.java b/provider/register-gc/src/main/java/org/opengroup/osdu/register/provider/gcp/subscriber/OsmAccess.java
index e5b41e764643fa0bbace3b9734cbbd585bfe4bb2..dbec9399f5202826c8b12d5fbb31100497e533eb 100644
--- a/provider/register-gc/src/main/java/org/opengroup/osdu/register/provider/gcp/subscriber/OsmAccess.java
+++ b/provider/register-gc/src/main/java/org/opengroup/osdu/register/provider/gcp/subscriber/OsmAccess.java
@@ -31,8 +31,13 @@ import java.util.concurrent.locks.ReentrantLock;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.opengroup.osdu.core.common.model.http.AppException;
-import org.opengroup.osdu.core.common.model.secret.SecretModel;
+import org.opengroup.osdu.core.common.model.http.DpsHeaders;
 import org.opengroup.osdu.core.common.model.tenant.TenantInfo;
+import org.opengroup.osdu.core.common.secret.AccessGroups;
+import org.opengroup.osdu.core.common.secret.SecretClient;
+import org.opengroup.osdu.core.common.secret.SecretClientFactory;
+import org.opengroup.osdu.core.common.secret.SecretModel;
+import org.opengroup.osdu.core.common.util.IServiceAccountJwtClient;
 import org.opengroup.osdu.core.gcp.oqm.driver.OqmDriverRuntimeException;
 import org.opengroup.osdu.core.gcp.oqm.model.OqmSubscription;
 import org.opengroup.osdu.core.gcp.oqm.model.OqmTopic;
@@ -43,7 +48,6 @@ import org.opengroup.osdu.core.gcp.osm.model.query.GetQuery;
 import org.opengroup.osdu.core.gcp.osm.service.Context;
 import org.opengroup.osdu.core.gcp.osm.service.Transaction;
 import org.opengroup.osdu.core.gcp.osm.translate.ExceptionClassifier;
-import org.opengroup.osdu.register.provider.gcp.secret.SecretClient;
 import org.opengroup.osdu.register.provider.gcp.subscriber.model.SubscriptionDto;
 import org.opengroup.osdu.register.subscriber.model.*;
 import org.opengroup.osdu.register.utils.Constants;
@@ -63,8 +67,11 @@ public class OsmAccess implements IDatastoreAccess {
 
   private final Context context;
   private final TenantInfo tenantInfo;
-  private final SecretClient secretClient;
   private final SubscriptionEventPublisher publisher;
+  private final SecretClientFactory secretFactory;
+  private final IServiceAccountJwtClient tokenService;
+  private final DpsHeaders dpsHeaders;
+  private final AccessGroups accessGroups;
 
   ReentrantLock subscriptionDeleteLock = new ReentrantLock();
 
@@ -158,6 +165,7 @@ public class OsmAccess implements IDatastoreAccess {
             "A subscriber already exists with the same topic and endpoint combination");
 
       subscriptionRequest.setCreatedOnEpoch(new Timestamp(System.currentTimeMillis()));
+      SecretClient secretClient = secretFactory.create(dpsHeaders, tokenService, accessGroups);
       secretClient.createSecret(
           generateID(subscriptionRequest.getId()), subscriptionRequest.getSecretValue());
       Subscription createdSubscription =
@@ -202,6 +210,7 @@ public class OsmAccess implements IDatastoreAccess {
           new GetQuery<>(SubscriptionDto.class, getDestination(), eq("id", id));
       SubscriptionDto existingSubscription = context.getOne(q);
       if (existingSubscription != null) {
+        SecretClient secretClient = secretFactory.create(dpsHeaders, tokenService, accessGroups);
         secretClient.removeSecret(generateID(id));
         context.deleteById(SubscriptionDto.class, getDestination(), id);
         publisher.sendSubscriptionLifecycleEvent(
@@ -244,6 +253,7 @@ public class OsmAccess implements IDatastoreAccess {
       if (existingSubscription != null) {
         Subscription updatedSubscriptionRequest = getSubscriptionByDto(existingSubscription);
         updatedSubscriptionRequest.setSecret(secret);
+        SecretClient secretClient = secretFactory.create(dpsHeaders, tokenService, accessGroups);
         secretClient.updateSecret(
             generateID(updatedSubscriptionRequest.getId()), secret.toString());
         context.upsert(getDtoBySubscription(updatedSubscriptionRequest), getDestination());
@@ -288,7 +298,7 @@ public class OsmAccess implements IDatastoreAccess {
     BeanUtils.copyProperties(subscriptionDto, subscription);
 
     if (!Strings.isNullOrEmpty(subscriptionDto.getSecretType())) {
-
+      SecretClient secretClient = secretFactory.create(dpsHeaders, tokenService, accessGroups);
       SecretModel secretModel = secretClient.retrieveSecret(generateID(subscriptionDto.getId()));
       if (subscriptionDto.getSecretType().equals(Constants.GSASecret)) {
         GsaSecret gsaSecret = new GsaSecret();
diff --git a/provider/register-gc/src/main/java/org/opengroup/osdu/register/provider/gcp/util/SecretFactory.java b/provider/register-gc/src/main/java/org/opengroup/osdu/register/provider/gcp/util/SecretFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..a081d2d5a87bd383984e41452560fab33a7f66af
--- /dev/null
+++ b/provider/register-gc/src/main/java/org/opengroup/osdu/register/provider/gcp/util/SecretFactory.java
@@ -0,0 +1,47 @@
+/*
+ Copyright 2020-2024 Google LLC
+ Copyright 2020-2024 EPAM Systems, Inc
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package org.opengroup.osdu.register.provider.gcp.util;
+
+import org.opengroup.osdu.core.common.secret.SecretAPIConfig;
+import org.opengroup.osdu.core.common.secret.SecretClientFactory;
+import org.opengroup.osdu.core.common.secret.SecretClientFactoryImpl;
+import org.opengroup.osdu.register.provider.gcp.config.RegisterConfigurationProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.config.AbstractFactoryBean;
+import org.springframework.stereotype.Component;
+
+@Component
+public class SecretFactory extends AbstractFactoryBean<SecretClientFactory> {
+
+  @Autowired private RegisterConfigurationProperties serviceConfig;
+
+  @Override
+  public Class<?> getObjectType() {
+    return SecretClientFactory.class;
+  }
+
+  @Override
+  protected SecretClientFactory createInstance() throws Exception {
+    SecretAPIConfig apiConfig =
+        SecretAPIConfig.builder()
+            .secretApi(serviceConfig.getSecretApi())
+            .domain(serviceConfig.getDomain())
+            .build();
+    return new SecretClientFactoryImpl(apiConfig);
+  }
+}
diff --git a/provider/register-gc/src/test/java/org/opengroup/osdu/register/provider/gcp/secret/SecretClientTest.java b/provider/register-gc/src/test/java/org/opengroup/osdu/register/provider/gcp/secret/SecretClientTest.java
deleted file mode 100644
index a9a3a4898a1066e77c8cde117b011c7a7e326914..0000000000000000000000000000000000000000
--- a/provider/register-gc/src/test/java/org/opengroup/osdu/register/provider/gcp/secret/SecretClientTest.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- Copyright 2020-2024 Google LLC
- Copyright 2020-2024 EPAM Systems, Inc
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-package org.opengroup.osdu.register.provider.gcp.secret;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.when;
-
-import com.google.gson.Gson;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-import org.opengroup.osdu.core.common.http.HttpRequest;
-import org.opengroup.osdu.core.common.http.HttpResponse;
-import org.opengroup.osdu.core.common.http.IHttpClient;
-import org.opengroup.osdu.core.common.model.http.AppException;
-import org.opengroup.osdu.core.common.model.http.DpsHeaders;
-import org.opengroup.osdu.core.common.model.secret.SecretModel;
-import org.opengroup.osdu.core.common.util.IServiceAccountJwtClient;
-import org.opengroup.osdu.register.provider.gcp.config.RegisterConfigurationProperties;
-
-@RunWith(MockitoJUnitRunner.class)
-public class SecretClientTest {
-
-  private static final String SECRET_KEY_1_VAL = "secret_key_1";
-  private static final String SECRET_VALUE_1_VAL = "secret_value_1";
-  private static final String SECRET_VALUE_2_VAL = "secret_value_2";
-  private static final String TENANT_1_VAL = "tenant_1";
-  private static final String TOKEN_1_VAL = "token_1";
-  private static final String SECRET_API = "secret_host";
-
-  @Mock private RegisterConfigurationProperties configurationProperties;
-
-  @Mock private DpsHeaders dpsHeaders;
-
-  @Mock private IServiceAccountJwtClient tokenService;
-
-  @Mock private IHttpClient httpClient;
-
-  @InjectMocks private SecretClientImpl secretClient;
-
-  @Before
-  public void setUp() {
-    when(dpsHeaders.getPartitionId()).thenReturn(TENANT_1_VAL);
-    when(tokenService.getIdToken(any())).thenReturn(TOKEN_1_VAL);
-    when(configurationProperties.getSecretApi()).thenReturn(SECRET_API);
-  }
-
-  @Test
-  public void createSecretTest() {
-    SecretModel expectedResult =
-        SecretModel.builder()
-            .id(SECRET_KEY_1_VAL)
-            .value(SECRET_VALUE_1_VAL)
-            .isEnabled(true)
-            .build();
-    HttpResponse httpResponse = createHttpResponse(expectedResult, 200);
-
-    when(httpClient.send(any(HttpRequest.class))).thenReturn(httpResponse);
-
-    SecretModel actualResult = secretClient.createSecret(SECRET_KEY_1_VAL, SECRET_VALUE_1_VAL);
-
-    assertEquals(expectedResult, actualResult);
-  }
-
-  @Test
-  public void exceptionCreateSecretTest() {
-    HttpResponse httpResponse = new HttpResponse();
-    httpResponse.setBody("invalid_body");
-    httpResponse.setResponseCode(404);
-
-    when(httpClient.send(any(HttpRequest.class))).thenReturn(httpResponse);
-
-    assertThrows(
-        AppException.class, () -> secretClient.createSecret(SECRET_KEY_1_VAL, SECRET_VALUE_1_VAL));
-  }
-
-  @Test
-  public void retrieveSecretTest() {
-    SecretModel expectedResult =
-        SecretModel.builder()
-            .id(SECRET_KEY_1_VAL)
-            .value(SECRET_VALUE_1_VAL)
-            .isEnabled(true)
-            .build();
-    HttpResponse httpResponse = createHttpResponse(expectedResult, 200);
-
-    when(httpClient.send(any(HttpRequest.class))).thenReturn(httpResponse);
-
-    SecretModel actualResult = secretClient.retrieveSecret(SECRET_KEY_1_VAL);
-
-    assertEquals(expectedResult, actualResult);
-  }
-
-  @Test
-  public void exceptionRetrieveSecretTest() {
-    HttpResponse httpResponse = new HttpResponse();
-    httpResponse.setResponseCode(404);
-
-    when(httpClient.send(any(HttpRequest.class))).thenReturn(httpResponse);
-
-    assertThrows(AppException.class, () -> secretClient.retrieveSecret(SECRET_KEY_1_VAL));
-  }
-
-  @Test
-  public void updateSecretTest() {
-    SecretModel expectedResult =
-        SecretModel.builder()
-            .id(SECRET_KEY_1_VAL)
-            .value(SECRET_VALUE_2_VAL)
-            .isEnabled(true)
-            .build();
-    HttpResponse httpResponse = createHttpResponse(expectedResult, 200);
-
-    when(httpClient.send(any(HttpRequest.class))).thenReturn(httpResponse);
-
-    SecretModel actualResult = secretClient.updateSecret(SECRET_KEY_1_VAL, SECRET_VALUE_2_VAL);
-
-    assertEquals(expectedResult, actualResult);
-  }
-
-  @Test
-  public void exceptionUpdateSecretTest() {
-    HttpResponse httpResponse = new HttpResponse();
-    httpResponse.setResponseCode(404);
-
-    when(httpClient.send(any(HttpRequest.class))).thenReturn(httpResponse);
-
-    assertThrows(
-        AppException.class, () -> secretClient.updateSecret(SECRET_KEY_1_VAL, SECRET_VALUE_2_VAL));
-  }
-
-  @Test
-  public void removeSecretTest() {
-    HttpResponse httpResponse = new HttpResponse();
-    httpResponse.setResponseCode(200);
-
-    when(httpClient.send(any(HttpRequest.class))).thenReturn(httpResponse);
-
-    secretClient.removeSecret(SECRET_KEY_1_VAL);
-  }
-
-  @Test
-  public void exceptionRemoveSecretTest() {
-    HttpResponse httpResponse = new HttpResponse();
-    httpResponse.setResponseCode(404);
-
-    when(httpClient.send(any(HttpRequest.class))).thenReturn(httpResponse);
-
-    assertThrows(AppException.class, () -> secretClient.removeSecret(SECRET_KEY_1_VAL));
-  }
-
-  private HttpResponse createHttpResponse(SecretModel secretModel, int responseCode) {
-    HttpResponse httpResponse = new HttpResponse();
-    httpResponse.setBody((new Gson()).toJson(secretModel));
-    httpResponse.setResponseCode(responseCode);
-    return httpResponse;
-  }
-}
diff --git a/provider/register-gc/src/test/java/org/opengroup/osdu/register/provider/gcp/subscriber/OsmAccessTest.java b/provider/register-gc/src/test/java/org/opengroup/osdu/register/provider/gcp/subscriber/OsmAccessTest.java
index 44ffc570a12c11fc70dd1d13b9756dc8f5b7fb0b..655206ed5df54e1960d1090854317682bbc654cf 100644
--- a/provider/register-gc/src/test/java/org/opengroup/osdu/register/provider/gcp/subscriber/OsmAccessTest.java
+++ b/provider/register-gc/src/test/java/org/opengroup/osdu/register/provider/gcp/subscriber/OsmAccessTest.java
@@ -44,12 +44,14 @@ import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.opengroup.osdu.core.common.model.http.AppException;
 import org.opengroup.osdu.core.common.model.tenant.TenantInfo;
+import org.opengroup.osdu.core.common.secret.SecretClient;
+import org.opengroup.osdu.core.common.secret.SecretClientFactory;
 import org.opengroup.osdu.core.gcp.oqm.driver.OqmDriverRuntimeException;
 import org.opengroup.osdu.core.gcp.osm.model.query.GetQuery;
 import org.opengroup.osdu.core.gcp.osm.service.Transaction;
 import org.opengroup.osdu.core.gcp.osm.translate.ExceptionClassifier.ExceptionClassification;
-import org.opengroup.osdu.register.provider.gcp.secret.SecretClient;
 import org.opengroup.osdu.register.provider.gcp.subscriber.model.SubscriptionDto;
+import org.opengroup.osdu.register.provider.gcp.util.SecretFactory;
 import org.opengroup.osdu.register.subscriber.model.GsaSecret;
 import org.opengroup.osdu.register.subscriber.model.GsaSecretValue;
 import org.opengroup.osdu.register.subscriber.model.Secret;
@@ -98,6 +100,9 @@ class OsmAccessTest {
   @Mock
   private Transaction transaction;
 
+  @Mock
+  private SecretClientFactory secretFactory;
+
   @Mock
   private SubscriptionEventPublisher publisher;
 
@@ -115,6 +120,7 @@ class OsmAccessTest {
   void getReturnsSubscriptionFroHmacSecret() {
     SubscriptionDto existingSubscription = buildSubscriptionDto(Constants.HMACSecret);
 
+    when(secretFactory.create(any(), any(), any())).thenReturn(secretClient);
     when(context.getOne(any())).thenReturn(existingSubscription);
     when(secretClient.retrieveSecret(any()).getValue()).thenReturn(S_HMAC_SECRET);
 
@@ -129,6 +135,7 @@ class OsmAccessTest {
     SubscriptionDto existingSubscription = buildSubscriptionDto(Constants.GSASecret);
 
     when(context.getOne(any())).thenReturn(existingSubscription);
+    when(secretFactory.create(any(), any(), any())).thenReturn(secretClient);
     when(secretClient.retrieveSecret(any()).getValue()).thenReturn(S_GSA_SECRET);
 
     Subscription subscription = osmAccess.get(S_ID);
@@ -142,6 +149,7 @@ class OsmAccessTest {
     SubscriptionDto existingSubscription = buildSubscriptionDto(Constants.HMACSecret);
     when(context.getResultsAsList(any())).thenReturn(List.of(existingSubscription));
     when(secretClient.retrieveSecret(any()).getValue()).thenReturn(S_HMAC_SECRET);
+    when(secretFactory.create(any(), any(), any())).thenReturn(secretClient);
 
     List<Subscription> subscriptionList = osmAccess.query(S_NOTIFICATION);
 
@@ -166,6 +174,7 @@ class OsmAccessTest {
   void delete() {
     when(context.beginTransaction(any())).thenReturn(transaction);
     when(context.getOne(any())).thenReturn(buildSubscriptionDto(Constants.HMACSecret));
+    when(secretFactory.create(any(), any(), any())).thenReturn(secretClient);
 
     boolean result = osmAccess.delete(S_ID);
 
@@ -182,6 +191,7 @@ class OsmAccessTest {
     when(context.beginTransaction(any())).thenReturn(transaction);
     when(context.getOne(any())).thenReturn(buildSubscriptionDto(Constants.HMACSecret));
     when(context.classifyException(any())).thenReturn(exceptionClassification);
+    when(secretFactory.create(any(), any(), any())).thenReturn(secretClient);
     doThrow(new RuntimeException()).when(context)
         .deleteById(eq(SubscriptionDto.class), any(), eq(S_ID));
 
@@ -217,6 +227,7 @@ class OsmAccessTest {
   void create() {
     when(context.beginTransaction(any())).thenReturn(transaction);
     when(context.createAndGet(any(), any())).thenReturn(buildSubscriptionDto(Constants.HMACSecret));
+    when(secretFactory.create(any(), any(), any())).thenReturn(secretClient);
 
     osmAccess.create(buildSubscription(Constants.HMACSecret));
 
@@ -228,6 +239,7 @@ class OsmAccessTest {
   @Test
   void createSetsNewTimestamp() {
     when(context.beginTransaction(any())).thenReturn(transaction);
+    when(secretFactory.create(any(), any(), any())).thenReturn(secretClient);
 
     Subscription subscription = buildSubscription(Constants.HMACSecret);
     Timestamp timestamp = subscription.getCreatedOnEpoch();
@@ -247,6 +259,7 @@ class OsmAccessTest {
   void createWithException(ExceptionClassification exceptionClassification) {
     when(context.beginTransaction(any())).thenReturn(transaction);
     when(context.classifyException(any())).thenReturn(exceptionClassification);
+    when(secretFactory.create(any(), any(), any())).thenReturn(secretClient);
     doThrow(new RuntimeException()).when(context).createAndGet(any(), any());
 
     try {
@@ -265,6 +278,7 @@ class OsmAccessTest {
   void patch() {
     when(context.beginTransaction(any())).thenReturn(transaction);
     when(context.getOne(any())).thenReturn(buildSubscriptionDto(Constants.HMACSecret));
+    when(secretFactory.create(any(), any(), any())).thenReturn(secretClient);
 
     Secret secret = new HmacSecret(S_NEW_SECRET_KEY);
     boolean result = osmAccess.patch(S_ID, secret);
@@ -297,6 +311,7 @@ class OsmAccessTest {
     when(context.beginTransaction(any())).thenReturn(transaction);
     when(context.getOne(any())).thenReturn(buildSubscriptionDto(Constants.HMACSecret));
     when(context.classifyException(any())).thenReturn(exceptionClassification);
+    when(secretFactory.create(any(), any(), any())).thenReturn(secretClient);
     doThrow(new RuntimeException()).when(context).upsert(any(), any());
 
     try {
@@ -317,6 +332,7 @@ class OsmAccessTest {
     SubscriptionDto dto2 = buildSubscriptionDto(Constants.HMACSecret);
     dto2.setId(S_SECOND_ID);
 
+    when(secretFactory.create(any(), any(), any())).thenReturn(secretClient);
     when(context.getResultsAsList(ArgumentMatchers.<GetQuery<SubscriptionDto>>any()))
         .thenReturn(List.of(dto1, dto2));
 
@@ -335,6 +351,7 @@ class OsmAccessTest {
 
     when(context.getResultsAsList(ArgumentMatchers.<GetQuery<SubscriptionDto>>any()))
         .thenReturn(List.of(dto1, dto2));
+    when(secretFactory.create(any(), any(), any())).thenReturn(secretClient);
 
     when(secretClient.retrieveSecret(any()).getValue())
         .thenReturn(S_HMAC_SECRET)
diff --git a/testing/register-test-gc/pom.xml b/testing/register-test-gc/pom.xml
index 1bc0867146bc2ec75a30d3e4ef86d4bf1a61e2f9..8c6404c88c3b2fbb93452e3247e1ec4c213cece1 100644
--- a/testing/register-test-gc/pom.xml
+++ b/testing/register-test-gc/pom.xml
@@ -41,7 +41,7 @@
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
-            <version>1.18.26</version>
+            <version>1.18.34</version>
         </dependency>
         <dependency>
             <groupId>jakarta.json</groupId>