requests.stopPublishing();
 
         // remove the PDP from all groups
+        boolean removed = false;
         try {
-            removeFromGroups(requests.getPdpName());
+            removed = removeFromGroups(requests.getPdpName());
         } catch (PfModelException e) {
             logger.info("unable to remove PDP {} from subgroup", requests.getPdpName(), e);
         }
         PdpStateChange change = new PdpStateChange();
         change.setName(requests.getPdpName());
         change.setState(PdpState.PASSIVE);
-        addRequest(change);
+
+        if (removed) {
+            // send an update, too
+            PdpUpdate update = new PdpUpdate();
+            update.setName(requests.getPdpName());
+
+            addRequest(update, change);
+
+        } else {
+            addRequest(change);
+        }
     }
 
     /**
      * Removes a PDP from all active groups.
      *
      * @param pdpName name of the PDP to be removed
+     * @return {@code true} if the PDP was removed from a group, {@code false} if it was
+     *         not assigned to a group
      * @throws PfModelException if an error occurs
      */
-    public void removeFromGroups(String pdpName) throws PfModelException {
+    public boolean removeFromGroups(String pdpName) throws PfModelException {
 
         try (PolicyModelsProvider dao = daoFactory.create()) {
 
                 }
             }
 
-            if (!updates.isEmpty()) {
+            if (updates.isEmpty()) {
+                return false;
+
+            } else {
                 dao.updatePdpGroups(updates);
+                return true;
             }
         }
     }
      *
      * @param pdpName name of the PDP to be removed
      * @param group group from which it should be removed
-     * @return {@code true} if the PDP was removed from the, {@code false} if it was not
-     *         assigned to the group
+     * @return {@code true} if the PDP was removed from the group, {@code false} if it was
+     *         not assigned to the group
      */
     private boolean removeFromGroup(String pdpName, PdpGroup group) {
         for (PdpSubGroup subgrp : group.getPdpSubgroups()) {
             Pdp instance = iter.next();
 
             if (pdpName.equals(instance.getInstanceId())) {
-                logger.info("removed {} from group={} version={} subgroup={}", pdpName, group.getName(),
-                                group.getVersion(), subgrp.getPdpType());
+                logger.info("removed {} from group={} subgroup={}", pdpName, group.getName(), subgrp.getPdpType());
                 iter.remove();
                 subgrp.setCurrentInstanceCount(subgrp.getPdpInstances().size());
                 return true;
 
         Optional<PdpSubGroup> subGroup = null;
         final PdpGroupFilter filter = PdpGroupFilter.builder().pdpType(message.getPdpType())
                 .policyTypeList(message.getSupportedPolicyTypes()).matchPolicyTypesExactly(true)
-                .groupState(PdpState.ACTIVE).version(PdpGroupFilter.LATEST_VERSION).build();
+                .groupState(PdpState.ACTIVE).build();
         final List<PdpGroup> pdpGroups = databaseProvider.getFilteredPdpGroups(filter);
         for (final PdpGroup pdpGroup : pdpGroups) {
             subGroup = findPdpSubGroup(message, pdpGroup);
 
         pdpSubGroup.setCurrentInstanceCount(pdpSubGroup.getCurrentInstanceCount() + 1);
 
-        databaseProvider.updatePdpSubGroup(pdpGroup.getName(), pdpGroup.getVersion(), pdpSubGroup);
+        databaseProvider.updatePdpSubGroup(pdpGroup.getName(), pdpSubGroup);
 
         LOGGER.debug("Updated PdpSubGroup in DB - {} belonging to PdpGroup - {}", pdpSubGroup, pdpGroup);
     }
             final PolicyModelsProvider databaseProvider) throws PfModelException {
         pdpSubGroup.getPdpInstances().remove(pdpInstance);
         pdpSubGroup.setCurrentInstanceCount(pdpSubGroup.getCurrentInstanceCount() - 1);
-        databaseProvider.updatePdpSubGroup(pdpGroup.getName(), pdpGroup.getVersion(), pdpSubGroup);
+        databaseProvider.updatePdpSubGroup(pdpGroup.getName(), pdpSubGroup);
 
         LOGGER.debug("Deleted PdpInstance - {} belonging to PdpSubGroup - {} and PdpGroup - {}", pdpInstance,
                 pdpSubGroup, pdpGroup);
     private void updatePdpHealthStatus(final PdpStatus message, final PdpSubGroup pdpSubgroup, final Pdp pdpInstance,
             final PdpGroup pdpGroup, final PolicyModelsProvider databaseProvider) throws PfModelException {
         pdpInstance.setHealthy(message.getHealthy());
-        databaseProvider.updatePdp(pdpGroup.getName(), pdpGroup.getVersion(), pdpSubgroup.getPdpType(), pdpInstance);
+        databaseProvider.updatePdp(pdpGroup.getName(), pdpSubgroup.getPdpType(), pdpInstance);
 
         LOGGER.debug("Updated Pdp in DB - {}", pdpInstance);
     }
 
         final PolicyModelsProviderFactoryWrapper modelProviderWrapper =
                 Registry.get(PapConstants.REG_PAP_DAO_FACTORY, PolicyModelsProviderFactoryWrapper.class);
         try (PolicyModelsProvider databaseProvider = modelProviderWrapper.create()) {
-            pdpGroups.setGroups(databaseProvider.getPdpGroups(null, null));
+            pdpGroups.setGroups(databaseProvider.getPdpGroups(null));
         }
         LOGGER.debug("PdpGroup Query Response - {}", pdpGroups);
         return Pair.of(Response.Status.OK, pdpGroups);
 
      *
      * @param requestId request ID used in ONAP logging
      * @param groupName name of the PDP group to be deleted
-     * @param version version of the PDP group
      * @param state state of the PDP group
      * @return a response
      */
     // @formatter:off
     @PUT
-    @Path("pdps/groups/{name}/versions/{version}")
+    @Path("pdps/groups/{name}")
     @ApiOperation(value = "Change state of a PDP Group",
         notes = "Changes state of PDP Group, returning optional error details",
         response = PdpGroupStateChangeResponse.class,
     public Response changeGroupState(
             @HeaderParam(REQUEST_ID_NAME) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) final UUID requestId,
             @ApiParam(value = "PDP Group Name", required = true) @PathParam("name") final String groupName,
-            @ApiParam(value = "PDP Group Version", required = true) @PathParam("version") final String version,
             @ApiParam(value = "PDP Group State", required = true) @QueryParam("state") final PdpState state) {
 
         try {
-            final Pair<Status, PdpGroupStateChangeResponse> pair = provider.changeGroupState(groupName, version, state);
+            final Pair<Status, PdpGroupStateChangeResponse> pair = provider.changeGroupState(groupName, state);
             return addLoggingHeaders(addVersionControlHeaders(Response.status(pair.getLeft())), requestId)
                     .entity(pair.getRight()).build();
         } catch (final PfModelException exp) {
 
      * Changes state of a PDP group.
      *
      * @param groupName name of the PDP group
-     * @param groupVersion version of the PDP group
      * @param pdpGroupState state of the PDP group
      * @return a pair containing the status and the response
      * @throws PfModelException in case of errors
      */
     public Pair<Response.Status, PdpGroupStateChangeResponse> changeGroupState(final String groupName,
-            final String groupVersion, final PdpState pdpGroupState) throws PfModelException {
+            final PdpState pdpGroupState) throws PfModelException {
         synchronized (updateLock) {
             switch (pdpGroupState) {
                 case ACTIVE:
-                    handleActiveState(groupName, groupVersion);
+                    handleActiveState(groupName);
                     break;
                 case PASSIVE:
-                    handlePassiveState(groupName, groupVersion);
+                    handlePassiveState(groupName);
                     break;
                 default:
                     throw new PfModelException(Response.Status.BAD_REQUEST,
         }
     }
 
-    private void handleActiveState(final String groupName, final String groupVersion) throws PfModelException {
+    private void handleActiveState(final String groupName) throws PfModelException {
         try (PolicyModelsProvider databaseProvider = modelProviderWrapper.create()) {
             final PdpGroupFilter filter = PdpGroupFilter.builder().name(groupName).groupState(PdpState.ACTIVE).build();
             final List<PdpGroup> activePdpGroups = databaseProvider.getFilteredPdpGroups(filter);
-            final List<PdpGroup> pdpGroups = databaseProvider.getPdpGroups(groupName, groupVersion);
+            final List<PdpGroup> pdpGroups = databaseProvider.getPdpGroups(groupName);
             if (activePdpGroups.isEmpty() && !pdpGroups.isEmpty()) {
                 updatePdpGroupAndPdp(databaseProvider, pdpGroups, PdpState.ACTIVE);
                 sendPdpMessage(pdpGroups.get(0), PdpState.ACTIVE, databaseProvider);
-            } else if (!pdpGroups.isEmpty() && !activePdpGroups.isEmpty()
-                    && !pdpGroups.get(0).getVersion().equals(activePdpGroups.get(0).getVersion())) {
+            } else if (!pdpGroups.isEmpty() && !activePdpGroups.isEmpty()) {
                 updatePdpGroupAndPdp(databaseProvider, pdpGroups, PdpState.ACTIVE);
                 updatePdpGroup(databaseProvider, activePdpGroups, PdpState.PASSIVE);
                 sendPdpMessage(pdpGroups.get(0), PdpState.ACTIVE, databaseProvider);
         }
     }
 
-    private void handlePassiveState(final String groupName, final String groupVersion) throws PfModelException {
+    private void handlePassiveState(final String groupName) throws PfModelException {
         try (PolicyModelsProvider databaseProvider = modelProviderWrapper.create()) {
-            final List<PdpGroup> pdpGroups = databaseProvider.getPdpGroups(groupName, groupVersion);
+            final List<PdpGroup> pdpGroups = databaseProvider.getPdpGroups(groupName);
             if (!pdpGroups.isEmpty() && !PdpState.PASSIVE.equals(pdpGroups.get(0).getPdpGroupState())) {
                 updatePdpGroupAndPdp(databaseProvider, pdpGroups, PdpState.PASSIVE);
                 sendPdpMessage(pdpGroups.get(0), PdpState.PASSIVE, databaseProvider);
 
             final String originalJson = ResourceUtils.getResourceAsString("PapDb.json");
             final PdpGroups pdpGroupsToCreate = standardCoder.decode(originalJson, PdpGroups.class);
             final List<PdpGroup> pdpGroupsFromDb = databaseProvider.getPdpGroups(
-                    pdpGroupsToCreate.getGroups().get(0).getName(), pdpGroupsToCreate.getGroups().get(0).getVersion());
+                    pdpGroupsToCreate.getGroups().get(0).getName());
             if (pdpGroupsFromDb.isEmpty()) {
                 databaseProvider.createPdpGroups(pdpGroupsToCreate.getGroups());
                 LOGGER.debug("Created initial pdpGroup in DB - {}", pdpGroupsToCreate);
 
 import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
 
 public class PdpModifyRequestMapTest extends CommonRequestBase {
     private static final String MY_REASON = "my reason";
-    private static final String MY_VERSION = "1.2.3";
 
     /**
      * Used to capture input to dao.createPdpGroups().
     }
 
     @Test
-    public void testDisablePdp() {
+    public void testDisablePdp() throws Exception {
+        map.addRequest(update);
+
+        // put the PDP in a group
+        PdpGroup group = makeGroup(MY_GROUP);
+        group.setPdpSubgroups(Arrays.asList(makeSubGroup(MY_SUBGROUP, PDP1)));
+
+        when(dao.getFilteredPdpGroups(any())).thenReturn(Arrays.asList(group));
+
+        // indicate failure
+        invokeFailureHandler(1);
+
+        // should have stopped publishing
+        verify(requests).stopPublishing();
+
+        // should have published a new update
+        PdpMessage msg2 = getSingletons(3).get(1).getMessage();
+        assertNotNull(msg2);
+        assertTrue(msg2 instanceof PdpUpdate);
+
+        // update should have null group & subgroup
+        update = (PdpUpdate) msg2;
+        assertEquals(PDP1, update.getName());
+        assertNull(update.getPdpGroup());
+        assertNull(update.getPdpSubgroup());
+
+        // should have published a state-change
+        msg2 = getSingletons(3).get(2).getMessage();
+        assertNotNull(msg2);
+        assertTrue(msg2 instanceof PdpStateChange);
+
+        change = (PdpStateChange) msg2;
+        assertEquals(PDP1, change.getName());
+        assertEquals(PdpState.PASSIVE, change.getState());
+    }
+
+    @Test
+    public void testDisablePdp_NotInGroup() {
         map.addRequest(update);
 
         // indicate failure
     public void testRemoveFromGroup() throws Exception {
         map.addRequest(change);
 
-        PdpGroup group = makeGroup(MY_GROUP, MY_VERSION);
+        PdpGroup group = makeGroup(MY_GROUP);
         group.setPdpSubgroups(Arrays.asList(makeSubGroup(MY_SUBGROUP + "a", PDP1 + "a"),
                         makeSubGroup(MY_SUBGROUP, PDP1), makeSubGroup(MY_SUBGROUP + "c", PDP1 + "c")));
 
     public void testRemoveFromGroup_NoMatchingSubgroup() throws Exception {
         map.addRequest(change);
 
-        PdpGroup group = makeGroup(MY_GROUP, MY_VERSION);
+        PdpGroup group = makeGroup(MY_GROUP);
         group.setPdpSubgroups(Arrays.asList(makeSubGroup(MY_SUBGROUP, DIFFERENT)));
 
         when(dao.getFilteredPdpGroups(any())).thenReturn(Arrays.asList(group));
     public void testRemoveFromSubgroup() throws Exception {
         map.addRequest(change);
 
-        PdpGroup group = makeGroup(MY_GROUP, MY_VERSION);
+        PdpGroup group = makeGroup(MY_GROUP);
         group.setPdpSubgroups(Arrays.asList(makeSubGroup(MY_SUBGROUP, PDP1, PDP1 + "x", PDP1 + "y")));
 
         when(dao.getFilteredPdpGroups(any())).thenReturn(Arrays.asList(group));
         return Whitebox.getInternalState(request, "listener");
     }
 
-    private PdpGroup makeGroup(String name, String version) {
+    private PdpGroup makeGroup(String name) {
         PdpGroup group = new PdpGroup();
 
         group.setName(name);
-        group.setVersion(version);
 
         return group;
     }
 
 
     @Test
     public void testSwagger() throws Exception {
-        super.testSwagger(GROUP_ENDPOINT + "/{name}/versions/{version}");
+        super.testSwagger(GROUP_ENDPOINT + "/{name}");
     }
 
     @Test
     public void testchangeGroupState() throws Exception {
-        final String uri = GROUP_ENDPOINT + "/my-name/versions/1.2.3?state=ACTIVE";
+        final String uri = GROUP_ENDPOINT + "/my-name?state=ACTIVE";
 
         final Invocation.Builder invocationBuilder = sendRequest(uri);
         Response rawresp = invocationBuilder.put(Entity.json(""));
 
         PdpGroup group = new PdpGroup();
         group.setName("drools-group");
         group.setDescription("my description");
-        group.setVersion("my-version");
         group.setPdpSubgroups(Arrays.asList(subgrp));
 
         return Entity.entity(group, MediaType.APPLICATION_JSON);