diff --git a/legal-core/src/main/java/org/opengroup/osdu/legal/countries/LegalTagCountriesService.java b/legal-core/src/main/java/org/opengroup/osdu/legal/countries/LegalTagCountriesService.java
index 56af5bc23d8310514beb46258f3d57af1c55b76f..f25ad3573462c955da0a943662c655a09c9ca8de 100644
--- a/legal-core/src/main/java/org/opengroup/osdu/legal/countries/LegalTagCountriesService.java
+++ b/legal-core/src/main/java/org/opengroup/osdu/legal/countries/LegalTagCountriesService.java
@@ -4,15 +4,22 @@ import org.opengroup.osdu.core.common.model.tenant.TenantInfo;
 import org.springframework.stereotype.Service;
 import org.opengroup.osdu.core.common.model.http.RequestInfo;
 import org.opengroup.osdu.core.common.model.legal.ServiceConfig;
+import org.springframework.web.context.annotation.RequestScope;
 
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 
 @Service
+@RequestScope
 public class LegalTagCountriesService {
 
+    private List<Country> cloudStorageCountries;
+    private Map<String, String> validORDCs;
+
     @Inject
     private LegalTagCountriesTenantRepositories repositories;
 
@@ -25,39 +32,35 @@ public class LegalTagCountriesService {
     @Inject
     private DefaultCountriesRepository defaultCountriesRepository;
 
-    public Map<String, String> getValidCOOs() {
-        Map<String,String> coos = new HashMap<>();
-
+    @PostConstruct
+    private void setup() {
         TenantInfo tenant = requestInfo.getTenantInfo();
         LegalTagCountriesRepository legalTagCountriesRepository = repositories.get(tenant, serviceConfig.getRegion());
+        List<Country> sourceCountries = defaultCountriesRepository.read();
+        List<Country> tenantCountries = legalTagCountriesRepository.read();
+        List<Country> cloudStorageCountries = this.mergeCountriesRepositories(sourceCountries, tenantCountries);
+        this.cloudStorageCountries = Collections.unmodifiableList(cloudStorageCountries);
 
-        generateCOOsFromRepository(coos, new DefaultCountriesRepository(), legalTagCountriesRepository, "none");
-        return coos;
+        Map<String,String> ordcs = new HashMap<>();
+        generateORDCsFromRepository(ordcs, sourceCountries);
+        generateORDCsFromRepository(ordcs, tenantCountries);
+        validORDCs = Collections.unmodifiableMap(ordcs);
     }
 
-    public Map<String, String> getValidCOOs(String dataType) {
-        Map<String,String> coos = new HashMap<>();
-
-        TenantInfo tenant = requestInfo.getTenantInfo();
-        LegalTagCountriesRepository legalTagCountriesRepository = repositories.get(tenant, serviceConfig.getRegion());
+    public Map<String, String> getValidCOOs() {
+        return generateCOOsFromRepository("none");
+    }
 
-        generateCOOsFromRepository(coos, defaultCountriesRepository, legalTagCountriesRepository, dataType);
-        return coos;
+    public Map<String, String> getValidCOOs(String dataType) {
+        return generateCOOsFromRepository(dataType);
     }
 
     public Map<String, String> getValidORDCs() {
-        Map<String,String> ordcs = new HashMap<>();
-
-        TenantInfo tenant = requestInfo.getTenantInfo();
-        LegalTagCountriesRepository legalTagCountriesRepository = repositories.get(tenant, serviceConfig.getRegion());
-
-        generateORDCsFromRepository(ordcs, defaultCountriesRepository);
-        generateORDCsFromRepository(ordcs, legalTagCountriesRepository);
-        return ordcs;
+        return validORDCs;
     }
 
-    private void generateCOOsFromRepository(Map<String, String> coos, LegalTagCountriesRepository defaultCountriesRepository, LegalTagCountriesRepository cloudCountriesRepository, String dataType) {
-        List<Country> cloudStorageCountries = this.mergeCountriesRepositories(defaultCountriesRepository, cloudCountriesRepository);
+    private Map<String,String> generateCOOsFromRepository(String dataType) {
+        Map<String,String> coos = new HashMap<>();
         for (Country country : cloudStorageCountries) {
             if (country.getResidencyRisk() != null &&
                     (country.getResidencyRisk().equals(Country.RESIDENCY_RISK.NO_RESTRICTION) ||
@@ -68,11 +71,10 @@ public class LegalTagCountriesService {
                 coos.put(country.getAlpha2(), country.getName());
             }
         }
+        return Collections.unmodifiableMap(coos);
     }
 
-    private List<Country> mergeCountriesRepositories(LegalTagCountriesRepository defaultRepository, LegalTagCountriesRepository cloudRepository) {
-        List<Country> sourceCountries = defaultRepository.read();
-        List<Country> tenantCountries = cloudRepository.read();
+    private List<Country> mergeCountriesRepositories(List<Country> sourceCountries, List<Country> tenantCountries) {
         for (Country tenantCountry : tenantCountries) {
             for (int i = 0; i < sourceCountries.size(); i++) {
                 if (sourceCountries.get(i).isMatchByAlpha2(tenantCountry)) {
@@ -83,10 +85,8 @@ public class LegalTagCountriesService {
         return sourceCountries;
     }
 
-
-    private void generateORDCsFromRepository(Map<String, String> coos, LegalTagCountriesRepository legalTagCountriesRepository) {
-        List<Country> cloudStorageCountries = legalTagCountriesRepository.read();
-        for (Country country : cloudStorageCountries) {
+    private void generateORDCsFromRepository(Map<String, String> coos, List<Country> countries) {
+        for (Country country : countries) {
             if (country.getResidencyRisk() != null && !country.getResidencyRisk().equals(Country.RESIDENCY_RISK.EMBARGOED)) {
                 coos.put(country.getAlpha2(), country.getName());
             } else {
@@ -94,4 +94,4 @@ public class LegalTagCountriesService {
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/legal-core/src/test/java/org/opengroup/osdu/legal/countries/LegalTagCountriesServiceTests.java b/legal-core/src/test/java/org/opengroup/osdu/legal/countries/LegalTagCountriesServiceTests.java
index 4e98122945083dcb4dad11f18541b6f3aa8411a7..3b3fd803b0965676b6c1a0e7107d2351e16e1b0e 100644
--- a/legal-core/src/test/java/org/opengroup/osdu/legal/countries/LegalTagCountriesServiceTests.java
+++ b/legal-core/src/test/java/org/opengroup/osdu/legal/countries/LegalTagCountriesServiceTests.java
@@ -10,6 +10,7 @@ import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.powermock.modules.junit4.PowerMockRunner;
+import org.powermock.reflect.Whitebox;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -45,13 +46,14 @@ public class LegalTagCountriesServiceTests {
     private DefaultCountriesRepository defaultCountriesRepository;
 
     @Before
-    public void setup() {
+    public void setup() throws Exception {
         DefaultCountriesRepository defaultCountriesRepository = new DefaultCountriesRepository();
         this.listOfCountries = defaultCountriesRepository.read();
         when(this.repositories.get(any(), any())).thenReturn(this.legalTagCountriesRepository);
         when(this.legalTagCountriesRepository.read()).thenReturn(this.listOfCountries);
         when(this.requestInfo.getTenantInfo()).thenReturn(this.tenantInfo);
         when(this.defaultCountriesRepository.read()).thenReturn(this.listOfCountries);
+        Whitebox.invokeMethod(sut, "setup");
     }
 
     @Test