private static final Logger LOGGER = LoggerFactory.getLogger(LegacyApiRestController.class);
 
     /**
-     * Retrieves all versions of a particular guard policy.
+     * Retrieves the latest version of a particular guard policy.
      *
      * @param policyId the ID of specified guard policy
      *
      * @return the Response object containing the results of the API operation
      */
     @GET
-    @Path("/policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/{policyId}")
-    @ApiOperation(value = "Retrieve all versions of a particular guard policy",
-            notes = "Returns a list of all versions of the specified guard policy",
+    @Path("/policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/{policyId}/versions/latest")
+    @ApiOperation(value = "Retrieve the latest version of a particular guard policy",
+            notes = "Returns the latest version of the specified guard policy",
             response = LegacyGuardPolicyOutput.class, responseContainer = "Map",
             responseHeaders = {
                     @ResponseHeader(name = "X-MinorVersion",
             @ApiResponse(code = 404, message = "Resource Not Found"),
             @ApiResponse(code = 500, message = "Internal Server Error")
         })
-    public Response getAllVersionsOfGuardPolicy(
+    public Response getLatestVersionOfGuardPolicy(
             @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId,
             @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) {
 
             return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
                     .entity(policies).build();
         } catch (PfModelException | PfModelRuntimeException pfme) {
-            LOGGER.error("GET /policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/{}",
-                    policyId, pfme);
+            LOGGER.error("GET /policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/{}"
+                + "/versions/latest", policyId, pfme);
             return addLoggingHeaders(addVersionControlHeaders(
                     Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
                     .entity(pfme.getErrorResponse()).build();
     }
 
     /**
-     * Retrieves all versions of a particular operational policy.
+     * Retrieves the latest version of a particular operational policy.
      *
      * @param policyId the ID of specified operational policy
      *
      * @return the Response object containing the results of the API operation
      */
     @GET
-    @Path("/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/{policyId}")
-    @ApiOperation(value = "Retrieve all versions of a particular operational policy",
-            notes = "Returns a list of all versions of the specified operational policy",
+    @Path("/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/{policyId}/versions/latest")
+    @ApiOperation(value = "Retrieve the latest version of a particular operational policy",
+            notes = "Returns the latest version of the specified operational policy",
             response = LegacyOperationalPolicy.class,
             responseHeaders = {
                     @ResponseHeader(name = "X-MinorVersion",
             @ApiResponse(code = 404, message = "Resource Not Found"),
             @ApiResponse(code = 500, message = "Internal Server Error")
         })
-    public Response getAllVersionsOfOperationalPolicy(
+    public Response getLatestVersionOfOperationalPolicy(
             @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId,
             @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) {
 
             return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
                     .entity(policy).build();
         } catch (PfModelException | PfModelRuntimeException pfme) {
-            LOGGER.error("GET /policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/{}",
-                    policyId, pfme);
+            LOGGER.error("GET /policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/{}"
+                + "/versions/latest", policyId, pfme);
             return addLoggingHeaders(addVersionControlHeaders(
                     Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
                     .entity(pfme.getErrorResponse()).build();
 
     public Map<String, LegacyGuardPolicyOutput> fetchGuardPolicy(String policyId, String policyVersion)
             throws PfModelException {
 
-        return modelsProvider.getGuardPolicy(policyId);
+        if (policyVersion != null) {
+            validateLegacyGuardPolicyVersion(policyVersion);
+        }
+        return modelsProvider.getGuardPolicy(policyId, policyVersion);
     }
 
     /**
      *
      * @return the map of LegacyGuardPolicyOutput objectst
      */
-    public Map<String, LegacyGuardPolicyOutput> createGuardPolicy(LegacyGuardPolicyInput body) throws PfModelException {
+    public Map<String, LegacyGuardPolicyOutput> createGuardPolicy(LegacyGuardPolicyInput body)
+            throws PfModelException {
 
         return modelsProvider.createGuardPolicy(body);
     }
             throws PfModelException {
 
         validateDeleteEligibility(policyId, policyVersion);
+        validateLegacyGuardPolicyVersion(policyVersion);
 
-        return modelsProvider.deleteGuardPolicy(policyId);
+        return modelsProvider.deleteGuardPolicy(policyId, policyVersion);
     }
 
     /**
         }
     }
 
+    /**
+     * Validates whether the legacy guard policy version is an integer.
+     *
+     * @param policyVersion the version of policy
+     *
+     * @throws PfModelException the PfModel parsing exception
+     */
+    private void validateLegacyGuardPolicyVersion(String policyVersion) throws PfModelException {
+
+        try {
+            Integer.valueOf(policyVersion);
+        } catch (NumberFormatException exc) {
+            throw new PfModelException(Response.Status.BAD_REQUEST,
+                    "legacy policy version is not an integer", exc);
+        }
+    }
+
     /**
      * Constructs returned message for policy delete rule violation.
      *
 
     public LegacyOperationalPolicy fetchOperationalPolicy(String policyId, String policyVersion)
             throws PfModelException {
 
-        return modelsProvider.getOperationalPolicy(policyId);
+        if (policyVersion != null) {
+            validateLegacyOperationalPolicyVersion(policyVersion);
+        }
+        return modelsProvider.getOperationalPolicy(policyId, policyVersion);
     }
 
     /**
             throws PfModelException {
 
         validateDeleteEligibility(policyId, policyVersion);
+        validateLegacyOperationalPolicyVersion(policyVersion);
 
-        return modelsProvider.deleteOperationalPolicy(policyId);
+        return modelsProvider.deleteOperationalPolicy(policyId, policyVersion);
     }
 
     /**
         }
     }
 
+    /**
+     * Validates whether the legacy operational policy version is an integer.
+     *
+     * @param policyVersion the version of policy
+     *
+     * @throws PfModelException the PfModel parsing exception
+     */
+    private void validateLegacyOperationalPolicyVersion(String policyVersion) throws PfModelException {
+
+        try {
+            Integer.valueOf(policyVersion);
+        } catch (NumberFormatException exc) {
+            throw new PfModelException(Response.Status.BAD_REQUEST,
+                    "legacy policy version is not an integer", exc);
+        }
+    }
+
     /**
      * Constructs returned message for policy delete rule violation.
      *
 
 
     private static final String GUARD_POLICIES =
             "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies";
-    private static final String GUARD_POLICIES_VDNS_FL =
-            "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.frequency.scaleout";
-    private static final String GUARD_POLICIES_VDNS_MINMAX =
-            "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.minmax.scaleout";
+    private static final String GUARD_POLICIES_VDNS_FL_LATEST =
+            "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.frequency.scaleout"
+            + "/versions/latest";
+    private static final String GUARD_POLICIES_VDNS_MINMAX_LATEST =
+            "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.minmax.scaleout"
+            + "/versions/latest";
     private static final String GUARD_POLICIES_VDNS_FL_VERSION = "policytypes/"
-        + "onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.frequency.scaleout/versions/1.0.0";
+        + "onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.frequency.scaleout/versions/1";
     private static final String GUARD_POLICIES_VDNS_MINMAX_VERSION = "policytypes/"
-        + "onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.minmax.scaleout/versions/1.0.0";
+        + "onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.minmax.scaleout/versions/1";
 
     private static final String OPS_POLICIES =
             "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies";
-    private static final String OPS_POLICIES_VCPE =
-            "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/operational.restart";
-    private static final String OPS_POLICIES_VDNS =
-            "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/operational.scaleout";
-    private static final String OPS_POLICIES_VFIREWALL =
-            "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/operational.modifyconfig";
+    private static final String OPS_POLICIES_VCPE_LATEST =
+            "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/operational.restart"
+            + "/versions/latest";
+    private static final String OPS_POLICIES_VDNS_LATEST =
+            "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/operational.scaleout"
+            + "/versions/latest";
+    private static final String OPS_POLICIES_VFIREWALL_LATEST =
+            "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/operational.modifyconfig"
+            + "/versions/latest";
     private static final String OPS_POLICIES_VCPE_VERSION = "policytypes/"
-        + "onap.policies.controlloop.Guard/versions/1.0.0/policies/operational.restart/versions/1.0.0";
+        + "onap.policies.controlloop.Guard/versions/1.0.0/policies/operational.restart/versions/1";
     private static final String OPS_POLICIES_VDNS_VERSION = "policytypes/"
-        + "onap.policies.controlloop.Guard/versions/1.0.0/policies/operational.scaleout/versions/1.0.0";
+        + "onap.policies.controlloop.Guard/versions/1.0.0/policies/operational.scaleout/versions/1";
     private static final String OPS_POLICIES_VFIREWALL_VERSION = "policytypes/"
-        + "onap.policies.controlloop.Guard/versions/1.0.0/policies/operational.modifyconfig/versions/1.0.0";
+        + "onap.policies.controlloop.Guard/versions/1.0.0/policies/operational.modifyconfig/versions/1";
 
     private static String KEYSTORE = System.getProperty("user.dir") + "/src/test/resources/ssl/policy-keystore";
     private Main main;
 
         assertThatCode(() -> {
             main = startApiService(true);
-            Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL, true);
+            Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL_LATEST, true);
             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
-            assertEquals("no policy found for policy ID: guard.frequency.scaleout",
+            assertEquals("no policy found for policy: guard.frequency.scaleout:null",
                     error.getErrorMessage());
 
             rawResponse = readResource(GUARD_POLICIES_VDNS_FL_VERSION, true);
             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
             error = rawResponse.readEntity(ErrorResponse.class);
-            assertEquals("no policy found for policy ID: guard.frequency.scaleout",
+            assertEquals("no policy found for policy: guard.frequency.scaleout:1",
                     error.getErrorMessage());
 
-            rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX, true);
+            rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_LATEST, true);
             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
             error = rawResponse.readEntity(ErrorResponse.class);
-            assertEquals("no policy found for policy ID: guard.minmax.scaleout",
+            assertEquals("no policy found for policy: guard.minmax.scaleout:null",
                     error.getErrorMessage());
 
             rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_VERSION, true);
             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
             error = rawResponse.readEntity(ErrorResponse.class);
-            assertEquals("no policy found for policy ID: guard.minmax.scaleout",
+            assertEquals("no policy found for policy: guard.minmax.scaleout:1",
                     error.getErrorMessage());
         }).doesNotThrowAnyException();
     }
 
         assertThatCode(() -> {
             main = startApiService(true);
-            Response rawResponse = readResource(OPS_POLICIES_VCPE, true);
+            Response rawResponse = readResource(OPS_POLICIES_VCPE_LATEST, true);
             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
-            assertEquals("no policy found for policy ID: operational.restart",
+            assertEquals("no policy found for policy: operational.restart:null",
                     error.getErrorMessage());
 
             rawResponse = readResource(OPS_POLICIES_VCPE_VERSION, true);
             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
             error = rawResponse.readEntity(ErrorResponse.class);
-            assertEquals("no policy found for policy ID: operational.restart",
+            assertEquals("no policy found for policy: operational.restart:1",
                     error.getErrorMessage());
 
-            rawResponse = readResource(OPS_POLICIES_VDNS, true);
+            rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, true);
             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
             error = rawResponse.readEntity(ErrorResponse.class);
-            assertEquals("no policy found for policy ID: operational.scaleout",
+            assertEquals("no policy found for policy: operational.scaleout:null",
                     error.getErrorMessage());
 
             rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, true);
             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
             error = rawResponse.readEntity(ErrorResponse.class);
-            assertEquals("no policy found for policy ID: operational.scaleout",
+            assertEquals("no policy found for policy: operational.scaleout:1",
                     error.getErrorMessage());
 
-            rawResponse = readResource(OPS_POLICIES_VFIREWALL, true);
+            rawResponse = readResource(OPS_POLICIES_VFIREWALL_LATEST, true);
             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
             error = rawResponse.readEntity(ErrorResponse.class);
-            assertEquals("no policy found for policy ID: operational.modifyconfig",
+            assertEquals("no policy found for policy: operational.modifyconfig:null",
                     error.getErrorMessage());
 
             rawResponse = readResource(OPS_POLICIES_VFIREWALL_VERSION, true);
             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
             error = rawResponse.readEntity(ErrorResponse.class);
-            assertEquals("no policy found for policy ID: operational.modifyconfig",
+            assertEquals("no policy found for policy: operational.modifyconfig:1",
                     error.getErrorMessage());
         }).doesNotThrowAnyException();
     }
             Response rawResponse = deleteResource(GUARD_POLICIES_VDNS_FL_VERSION, true);
             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
-            assertEquals("no policy found for policy ID: guard.frequency.scaleout",
+            assertEquals("no policy found for policy: guard.frequency.scaleout:1",
                     error.getErrorMessage());
         }).doesNotThrowAnyException();
     }
             Response rawResponse = deleteResource(OPS_POLICIES_VCPE_VERSION, true);
             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
-            assertEquals("no policy found for policy ID: operational.restart",
+            assertEquals("no policy found for policy: operational.restart:1",
                     error.getErrorMessage());
         }).doesNotThrowAnyException();
     }
 
     private static StandardCoder standardCoder;
 
     private static final String POLICY_RESOURCE = "policies/vDNS.policy.guard.frequency.input.json";
+    private static final String POLICY_RESOURCE_VER1 = "policies/vDNS.policy.guard.frequency.input.ver1.json";
+    private static final String POLICY_RESOURCE_VER2 = "policies/vDNS.policy.guard.frequency.input.ver2.json";
     private static final String POLICY_TYPE_RESOURCE =
             "policytypes/onap.policies.controlloop.guard.FrequencyLimiter.json";
     private static final String POLICY_TYPE_ID = "onap.policies.controlloop.guard.FrequencyLimiter:1.0.0";
 
         assertThatThrownBy(() -> {
             guardPolicyProvider.fetchGuardPolicy("dummy", null);
-        }).hasMessage("no policy found for policy ID: dummy");
+        }).hasMessage("no policy found for policy: dummy:null");
 
         assertThatThrownBy(() -> {
             guardPolicyProvider.fetchGuardPolicy("dummy", "dummy");
-        }).hasMessage("no policy found for policy ID: dummy");
+        }).hasMessage("legacy policy version is not an integer");
+
+        assertThatCode(() -> {
+            String policyTypeString = ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE);
+            ToscaServiceTemplate policyTypeServiceTemplate =
+                    standardCoder.decode(policyTypeString, ToscaServiceTemplate.class);
+            policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
+
+            String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE_VER1);
+            LegacyGuardPolicyInput policyToCreate = standardCoder.decode(policyString, LegacyGuardPolicyInput.class);
+            Map<String, LegacyGuardPolicyOutput> createdPolicy = guardPolicyProvider.createGuardPolicy(policyToCreate);
+            assertNotNull(createdPolicy);
+            assertFalse(createdPolicy.isEmpty());
+
+            policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE_VER2);
+            policyToCreate = standardCoder.decode(policyString, LegacyGuardPolicyInput.class);
+            createdPolicy = guardPolicyProvider.createGuardPolicy(policyToCreate);
+            assertNotNull(createdPolicy);
+            assertFalse(createdPolicy.isEmpty());
+
+            Map<String, LegacyGuardPolicyOutput> firstVersion =
+                    guardPolicyProvider.fetchGuardPolicy("guard.frequency.scaleout", "1");
+            assertNotNull(firstVersion);
+            assertEquals("1",
+                    firstVersion.get("guard.frequency.scaleout").getMetadata().get("policy-version").toString());
+
+            Map<String, LegacyGuardPolicyOutput> latestVersion =
+                    guardPolicyProvider.fetchGuardPolicy("guard.frequency.scaleout", null);
+            assertNotNull(latestVersion);
+            assertEquals("2",
+                    latestVersion.get("guard.frequency.scaleout").getMetadata().get("policy-version").toString());
+        }).doesNotThrowAnyException();
+
+        assertThatThrownBy(() -> {
+            guardPolicyProvider.fetchGuardPolicy("guard.frequency.scaleout", "1.0.0");
+        }).hasMessage("legacy policy version is not an integer");
+
+        assertThatThrownBy(() -> {
+            guardPolicyProvider.fetchGuardPolicy("guard.frequency.scaleout", "latest");
+        }).hasMessage("legacy policy version is not an integer");
+
+        assertThatCode(() -> {
+            guardPolicyProvider.deleteGuardPolicy("guard.frequency.scaleout", "1");
+            guardPolicyProvider.deleteGuardPolicy("guard.frequency.scaleout", "2");
+            policyTypeProvider.deletePolicyType("onap.policies.controlloop.guard.FrequencyLimiter", "1.0.0");
+        }).doesNotThrowAnyException();
     }
 
     @Test
             ToscaServiceTemplate policyTypeServiceTemplate =
                     standardCoder.decode(policyTypeString, ToscaServiceTemplate.class);
             policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
-        }).doesNotThrowAnyException();
 
-        assertThatCode(() -> {
             String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
             LegacyGuardPolicyInput policyToCreate = standardCoder.decode(policyString, LegacyGuardPolicyInput.class);
             Map<String, LegacyGuardPolicyOutput> createdPolicy = guardPolicyProvider.createGuardPolicy(policyToCreate);
         }).hasMessage("version is marked @NonNull but is null");
 
         assertThatThrownBy(() -> {
-            guardPolicyProvider.deleteGuardPolicy("dummy", "dummy");
-        }).hasMessage("no policy found for policy ID: dummy");
+            guardPolicyProvider.deleteGuardPolicy("dummy", "1.0.0");
+        }).hasMessage("legacy policy version is not an integer");
 
         assertThatCode(() -> {
             String policyTypeString = ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE);
             ToscaServiceTemplate policyTypeServiceTemplate =
                     standardCoder.decode(policyTypeString, ToscaServiceTemplate.class);
             policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
-        }).doesNotThrowAnyException();
 
-        assertThatCode(() -> {
             String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
             LegacyGuardPolicyInput policyToCreate = standardCoder.decode(policyString, LegacyGuardPolicyInput.class);
             Map<String, LegacyGuardPolicyOutput> createdPolicy = guardPolicyProvider.createGuardPolicy(policyToCreate);
             assertNotNull(createdPolicy);
             assertFalse(createdPolicy.isEmpty());
-        }).doesNotThrowAnyException();
 
-        assertThatCode(() -> {
             Map<String, LegacyGuardPolicyOutput> deletedPolicy = guardPolicyProvider
-                    .deleteGuardPolicy("guard.frequency.scaleout", "1.0.0");
+                    .deleteGuardPolicy("guard.frequency.scaleout", "1");
             assertNotNull(deletedPolicy);
             assertFalse(deletedPolicy.isEmpty());
             assertTrue(deletedPolicy.containsKey("guard.frequency.scaleout"));
             assertEquals("onap.policies.controlloop.guard.FrequencyLimiter",
                     deletedPolicy.get("guard.frequency.scaleout").getType());
-            assertEquals("1.0.0", deletedPolicy.get("guard.frequency.scaleout").getVersion());
+            assertEquals("1",
+                    deletedPolicy.get("guard.frequency.scaleout").getMetadata().get("policy-version").toString());
         }).doesNotThrowAnyException();
 
         assertThatThrownBy(() -> {
-            guardPolicyProvider.deleteGuardPolicy("guard.frequency.scaleout", "1.0.0");
-        }).hasMessage("no policy found for policy ID: guard.frequency.scaleout");
+            guardPolicyProvider.deleteGuardPolicy("guard.frequency.scaleout", "1");
+        }).hasMessage("no policy found for policy: guard.frequency.scaleout:1");
 
         assertThatCode(() -> {
             policyTypeProvider.deletePolicyType("onap.policies.controlloop.guard.FrequencyLimiter", "1.0.0");
         }).doesNotThrowAnyException();
-
     }
 }
 
 
         assertThatThrownBy(() -> {
             operationalPolicyProvider.fetchOperationalPolicy("dummy", null);
-        }).hasMessage("no policy found for policy ID: dummy");
+        }).hasMessage("no policy found for policy: dummy:null");
 
         assertThatThrownBy(() -> {
             operationalPolicyProvider.fetchOperationalPolicy("dummy", "dummy");
-        }).hasMessage("no policy found for policy ID: dummy");
+        }).hasMessage("legacy policy version is not an integer");
+
+        assertThatCode(() -> {
+            String policyTypeString = ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE);
+            ToscaServiceTemplate policyTypeServiceTemplate =
+                    standardCoder.decode(policyTypeString, ToscaServiceTemplate.class);
+            policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
+
+            String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
+            LegacyOperationalPolicy policyToCreate = standardCoder.decode(policyString, LegacyOperationalPolicy.class);
+            LegacyOperationalPolicy createdPolicy = operationalPolicyProvider.createOperationalPolicy(policyToCreate);
+            assertNotNull(createdPolicy);
+
+            policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
+            policyToCreate = standardCoder.decode(policyString, LegacyOperationalPolicy.class);
+            createdPolicy = operationalPolicyProvider.createOperationalPolicy(policyToCreate);
+            assertNotNull(createdPolicy);
+
+            LegacyOperationalPolicy firstVersion =
+                    operationalPolicyProvider.fetchOperationalPolicy("operational.restart", "1");
+            assertNotNull(firstVersion);
+            assertEquals("1",
+                    firstVersion.getPolicyVersion());
+
+            LegacyOperationalPolicy latestVersion =
+                    operationalPolicyProvider.fetchOperationalPolicy("operational.restart", null);
+            assertNotNull(latestVersion);
+            assertEquals("2",
+                    latestVersion.getPolicyVersion());
+        }).doesNotThrowAnyException();
+
+        assertThatThrownBy(() -> {
+            operationalPolicyProvider.fetchOperationalPolicy("operational.restart", "1.0.0");
+        }).hasMessage("legacy policy version is not an integer");
+
+        assertThatThrownBy(() -> {
+            operationalPolicyProvider.fetchOperationalPolicy("operational.restart", "latest");;
+        }).hasMessage("legacy policy version is not an integer");
+
+        assertThatCode(() -> {
+            operationalPolicyProvider.deleteOperationalPolicy("operational.restart", "1");
+            operationalPolicyProvider.deleteOperationalPolicy("operational.restart", "2");
+            policyTypeProvider.deletePolicyType("onap.policies.controlloop.Operational", "1.0.0");
+        }).doesNotThrowAnyException();
     }
 
     @Test
             ToscaServiceTemplate policyTypeServiceTemplate =
                     standardCoder.decode(policyTypeString, ToscaServiceTemplate.class);
             policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
-        }).doesNotThrowAnyException();
 
-        assertThatCode(() -> {
             String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
             LegacyOperationalPolicy policyToCreate = standardCoder.decode(policyString, LegacyOperationalPolicy.class);
             LegacyOperationalPolicy createdPolicy = operationalPolicyProvider.createOperationalPolicy(policyToCreate);
 
         assertThatThrownBy(() -> {
             operationalPolicyProvider.deleteOperationalPolicy("dummy", "dummy");
-        }).hasMessage("no policy found for policy ID: dummy");
+        }).hasMessage("legacy policy version is not an integer");
 
         assertThatCode(() -> {
             String policyTypeString = ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE);
             ToscaServiceTemplate policyTypeServiceTemplate =
                     standardCoder.decode(policyTypeString, ToscaServiceTemplate.class);
             policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
-        }).doesNotThrowAnyException();
 
-        assertThatCode(() -> {
             String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
             LegacyOperationalPolicy policyToCreate = standardCoder.decode(policyString, LegacyOperationalPolicy.class);
             LegacyOperationalPolicy createdPolicy = operationalPolicyProvider.createOperationalPolicy(policyToCreate);
             assertNotNull(createdPolicy);
-        }).doesNotThrowAnyException();
 
-        assertThatCode(() -> {
             LegacyOperationalPolicy deletedPolicy = operationalPolicyProvider
-                    .deleteOperationalPolicy("operational.restart", "1.0.0");
+                    .deleteOperationalPolicy("operational.restart", "1");
             assertNotNull(deletedPolicy);
             assertEquals("operational.restart", deletedPolicy.getPolicyId());
             assertTrue(deletedPolicy.getContent()
         }).doesNotThrowAnyException();
 
         assertThatThrownBy(() -> {
-            operationalPolicyProvider.deleteOperationalPolicy("operational.restart", "1.0.0");
-        }).hasMessage("no policy found for policy ID: operational.restart");
+            operationalPolicyProvider.deleteOperationalPolicy("operational.restart", "1");
+        }).hasMessage("no policy found for policy: operational.restart:1");
 
         assertThatCode(() -> {
             policyTypeProvider.deletePolicyType("onap.policies.controlloop.Operational", "1.0.0");
 
     public void testFetchPolicies() {
 
         assertThatThrownBy(() -> {
-            policyProvider.fetchPolicies("dummy", "dummy", null, null);
-        }).hasMessage("policy with ID null:null and type dummy:dummy does not exist");
+            policyProvider.fetchPolicies("dummy", "1.0.0", null, null);
+        }).hasMessage("policy with ID null:null and type dummy:1.0.0 does not exist");
 
         assertThatThrownBy(() -> {
-            policyProvider.fetchPolicies("dummy", "dummy", "dummy", null);
-        }).hasMessage("policy with ID dummy:null and type dummy:dummy does not exist");
+            policyProvider.fetchPolicies("dummy", "1.0.0", "dummy", null);
+        }).hasMessage("policy with ID dummy:null and type dummy:1.0.0 does not exist");
 
         assertThatThrownBy(() -> {
-            policyProvider.fetchPolicies("dummy", "dummy", "dummy", "dummy");
-        }).hasMessage("policy with ID dummy:dummy and type dummy:dummy does not exist");
+            policyProvider.fetchPolicies("dummy", "1.0.0", "dummy", "1.0.0");
+        }).hasMessage("policy with ID dummy:1.0.0 and type dummy:1.0.0 does not exist");
     }
 
     @Test
     public void testCreatePolicy() {
 
         assertThatThrownBy(() -> {
-            policyProvider.createPolicy("dummy", "dummy", new ToscaServiceTemplate());
-        }).hasMessage("policy type with ID dummy:dummy does not exist");
+            policyProvider.createPolicy("dummy", "1.0.0", new ToscaServiceTemplate());
+        }).hasMessage("policy type with ID dummy:1.0.0 does not exist");
 
         assertThatCode(() -> {
             String policyTypeString = ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE);
     public void testDeletePolicy() {
 
         assertThatThrownBy(() -> {
-            policyProvider.deletePolicy("dummy", "dummy", "dummy", "dummy");
-        }).hasMessage("policy with ID dummy:dummy and type dummy:dummy does not exist");
+            policyProvider.deletePolicy("dummy", "1.0.0", "dummy", "1.0.0");
+        }).hasMessage("policy with ID dummy:1.0.0 and type dummy:1.0.0 does not exist");
 
         assertThatCode(() -> {
             String policyTypeString = ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE);
 
--- /dev/null
+{
+  "policy-id" : "guard.frequency.scaleout",
+  "policy-version" : "1",
+  "content" : {
+            "actor": "SO",
+            "recipe": "scaleOut",
+            "targets": ".*",
+            "clname": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
+            "limit": "1",
+            "timeWindow": "10",
+            "timeUnits": "minute",
+            "guardActiveStart": "00:00:01-05:00",
+            "guardActiveEnd": "23:59:59-05:00"
+   }
+}
 
--- /dev/null
+{
+  "policy-id" : "guard.frequency.scaleout",
+  "policy-version" : "2",
+  "content" : {
+            "actor": "SO",
+            "recipe": "scaleOut",
+            "targets": ".*",
+            "clname": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
+            "limit": "1",
+            "timeWindow": "10",
+            "timeUnits": "minute",
+            "guardActiveStart": "00:00:01-05:00",
+            "guardActiveEnd": "23:59:59-05:00"
+   }
+}
 
         <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
 
         <policy.common.version>1.4.0</policy.common.version>
-        <policy.models.version>2.0.0</policy.models.version>
+        <policy.models.version>2.0.1-SNAPSHOT</policy.models.version>
     </properties>
 
     <modules>