diff --git a/search-core/src/main/java/org/opengroup/osdu/search/policy/service/PolicyServiceImpl.java b/search-core/src/main/java/org/opengroup/osdu/search/policy/service/PolicyServiceImpl.java
index 3fd32addce44c2e7d237a4f1dc4e7310ff121e14..573264e2b01d241a364ad767d8748d48e45937d9 100644
--- a/search-core/src/main/java/org/opengroup/osdu/search/policy/service/PolicyServiceImpl.java
+++ b/search-core/src/main/java/org/opengroup/osdu/search/policy/service/PolicyServiceImpl.java
@@ -17,22 +17,19 @@ package org.opengroup.osdu.search.policy.service;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.http.HttpStatus;
+import org.opengroup.osdu.core.common.http.HttpResponse;
 import org.opengroup.osdu.core.common.model.http.AppException;
 import org.opengroup.osdu.core.common.model.http.DpsHeaders;
 import org.opengroup.osdu.core.common.policy.IPolicyFactory;
 import org.opengroup.osdu.core.common.policy.IPolicyProvider;
+import org.opengroup.osdu.core.common.policy.PolicyException;
 import org.opengroup.osdu.search.policy.di.PolicyServiceConfiguration;
 import org.opengroup.osdu.search.provider.interfaces.IProviderHeaderService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Service
 @ConditionalOnProperty(value = "service.policy.enabled", havingValue = "true", matchIfMissing = false)
@@ -64,9 +61,29 @@ public class PolicyServiceImpl implements IPolicyService {
             IPolicyProvider serviceClient = this.policyFactory.create(this.headers);
             String esQuery = serviceClient.getCompiledPolicy(searchPolicyRule, unknownsList, input);
             return esQuery.substring(9, esQuery.length() - 1);
-        } catch (Exception e) {
-            String errorMessage = StringUtils.isBlank(e.getMessage()) ? "Error making request to Policy service" : e.getMessage();
-            throw new AppException(HttpStatus.SC_INTERNAL_SERVER_ERROR, "Policy service unavailable", errorMessage, "Error calling translate endpoint", e);
-        }
+    } catch (PolicyException e) {
+      HttpResponse httpResponse = e.getHttpResponse();
+      String errorMessage =
+          StringUtils.isBlank(e.getMessage())
+              ? "Error making request to Policy service"
+              : e.getMessage();
+      throw new AppException(
+          httpResponse.getResponseCode(),
+          errorMessage,
+           httpResponse.getBody(),
+          "Error calling translate endpoint",
+          e);
+    } catch (Exception e) {
+      String errorMessage =
+          StringUtils.isBlank(e.getMessage())
+              ? "Error making request to Policy service"
+              : e.getMessage();
+      throw new AppException(
+          HttpStatus.SC_INTERNAL_SERVER_ERROR,
+          "Policy service unavailable",
+          errorMessage,
+          "Error calling translate endpoint",
+          e);
     }
+  }
 }
diff --git a/search-core/src/test/java/org/opengroup/osdu/search/service/policy/service/PolicyServiceImplTest.java b/search-core/src/test/java/org/opengroup/osdu/search/service/policy/service/PolicyServiceImplTest.java
index 0278eab69cd625f0b476de9e8738f0a6edd672b6..b65aef9c68ed4ef9facaf90de0c80e616ee3ca53 100644
--- a/search-core/src/test/java/org/opengroup/osdu/search/service/policy/service/PolicyServiceImplTest.java
+++ b/search-core/src/test/java/org/opengroup/osdu/search/service/policy/service/PolicyServiceImplTest.java
@@ -1,5 +1,6 @@
 package org.opengroup.osdu.search.service.policy.service;
 
+import org.apache.http.HttpStatus;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -8,6 +9,8 @@ import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.Spy;
 import org.mockito.runners.MockitoJUnitRunner;
+import org.opengroup.osdu.core.common.http.HttpResponse;
+import org.opengroup.osdu.core.common.model.http.AppException;
 import org.opengroup.osdu.core.common.model.http.DpsHeaders;
 import org.opengroup.osdu.core.common.policy.IPolicyFactory;
 import org.opengroup.osdu.core.common.policy.IPolicyProvider;
@@ -15,15 +18,12 @@ import org.opengroup.osdu.core.common.policy.PolicyException;
 import org.opengroup.osdu.search.policy.di.PolicyServiceConfiguration;
 import org.opengroup.osdu.search.policy.service.PolicyServiceImpl;
 import org.opengroup.osdu.search.provider.interfaces.IProviderHeaderService;
-import org.opengroup.osdu.search.service.IEntitlementsExtensionService;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
-import static org.mockito.ArgumentMatchers.any;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThrows;
+import static org.mockito.ArgumentMatchers.*;
 
 @RunWith(MockitoJUnitRunner.class)
 public class PolicyServiceImplTest {
@@ -84,4 +84,69 @@ public class PolicyServiceImplTest {
         Mockito.when(serviceClient.getCompiledPolicy("data.osdu.partition[\"dpi\"].search.allow == true", unknownsList, input)).thenReturn(PolicyServiceResponse);
         Assert.assertNotNull(sut.getCompiledPolicy(providerHeaderService));
     }
+
+    @Test
+    public void throw_policy_exception() throws PolicyException {
+        List<String> groups = new ArrayList<>(Arrays.asList("AAA", "BBB"));
+        Map<String, Object> userData = new HashMap<>();
+        userData.put("groups", groups);
+        Map<String, Object> input = new HashMap<>();
+        input.put("groups", groups);
+        input.put("operation", "view");
+        ArrayList<String> unknownsList = new ArrayList<>();
+        unknownsList.add("input.record");
+        Map<String, String> dpsHeaders = new HashMap<>();
+        dpsHeaders.put("groups", "AAA,BBB");
+        Mockito.when(headers.getHeaders()).thenReturn(dpsHeaders);
+        Mockito.when(headers.getPartitionId()).thenReturn("dpi");
+        Mockito.when(providerHeaderService.getDataGroupsHeader())
+                .thenReturn("groups");
+        Mockito.when(policyFactory.create(any())).thenReturn(serviceClient);
+
+        String searchPolicyId = "osdu.instance.search";
+        Mockito.when(policyServiceConfiguration.getId()).thenReturn(searchPolicyId);
+
+        HttpResponse httpResponse = new HttpResponse();
+        httpResponse.setBody("{\\\"detail\\\":\\\"Translate API Error: expected query in format data.osdu.partition...\\\"}");
+        httpResponse.setResponseCode(HttpStatus.SC_BAD_REQUEST);
+        PolicyException policyException = new PolicyException("Error making request to Policy service", httpResponse);
+        Mockito.when(serviceClient.getCompiledPolicy(anyString(), anyList(), anyMap())).thenThrow(policyException);
+
+        AppException exception = assertThrows(AppException.class, () -> {
+            sut.getCompiledPolicy(providerHeaderService);
+        });
+        assertEquals(HttpStatus.SC_BAD_REQUEST, ((PolicyException)exception.getOriginalException()).getResponse().getResponseCode());
+
+    }
+
+    @Test
+    public void throw_any_exception() throws PolicyException {
+        List<String> groups = new ArrayList<>(Arrays.asList("AAA", "BBB"));
+        Map<String, Object> userData = new HashMap<>();
+        userData.put("groups", groups);
+        Map<String, Object> input = new HashMap<>();
+        input.put("groups", groups);
+        input.put("operation", "view");
+        ArrayList<String> unknownsList = new ArrayList<>();
+        unknownsList.add("input.record");
+        Map<String, String> dpsHeaders = new HashMap<>();
+        dpsHeaders.put("groups", "AAA,BBB");
+        Mockito.when(headers.getHeaders()).thenReturn(dpsHeaders);
+        Mockito.when(headers.getPartitionId()).thenReturn("dpi");
+        Mockito.when(providerHeaderService.getDataGroupsHeader())
+                .thenReturn("groups");
+        Mockito.when(policyFactory.create(any())).thenReturn(serviceClient);
+
+        String searchPolicyId = "osdu.instance.search";
+        Mockito.when(policyServiceConfiguration.getId()).thenReturn(searchPolicyId);
+
+        Mockito.when(serviceClient.getCompiledPolicy(anyString(), anyList(), anyMap())).thenThrow(new RuntimeException());
+
+        AppException exception = assertThrows(AppException.class, () -> {
+            sut.getCompiledPolicy(providerHeaderService);
+        });
+        
+        assertEquals(HttpStatus.SC_INTERNAL_SERVER_ERROR, exception.getError().getCode());
+
+    }
 }