}
 
     private void handlePdpHeartbeat(final PdpStatus message, final PolicyModelsProvider databaseProvider)
-            throws PfModelException, PolicyPapException {
-        boolean pdpInstanceFound = false;
+            throws PfModelException {
         Optional<PdpSubGroup> pdpSubgroup = null;
         Optional<Pdp> pdpInstance = null;
+        PdpGroup pdpGroup = null;
 
         final PdpGroupFilter filter =
                 PdpGroupFilter.builder().name(message.getPdpGroup()).groupState(PdpState.ACTIVE).build();
         final List<PdpGroup> pdpGroups = databaseProvider.getFilteredPdpGroups(filter);
         if (!pdpGroups.isEmpty()) {
-            final PdpGroup pdpGroup = pdpGroups.get(0);
+            pdpGroup = pdpGroups.get(0);
             pdpSubgroup = findPdpSubGroup(message, pdpGroup);
             if (pdpSubgroup.isPresent()) {
                 pdpInstance = findPdpInstance(message, pdpSubgroup.get());
                 if (pdpInstance.isPresent()) {
                     processPdpDetails(message, pdpSubgroup.get(), pdpInstance.get(), pdpGroup, databaseProvider);
-                    pdpInstanceFound = true;
+                } else {
+                    LOGGER.debug("PdpInstance not Found in DB. Sending Pdp for registration - {}", message);
+                    registerPdp(message, databaseProvider, pdpGroup);
                 }
             }
         }
-        if (!pdpInstanceFound) {
-            final String errorMessage = "Failed to process heartbeat. No matching PdpGroup/SubGroup Found - ";
-            LOGGER.debug("{}{}", errorMessage, message);
-            throw new PolicyPapException(errorMessage + message);
-        }
     }
 
     private Optional<PdpSubGroup> findPdpSubGroup(final PdpStatus message, final PdpGroup pdpGroup) {
 
 public class PdpHeartbeatListenerTest extends End2EndBase {
 
     private static final String POLICY_VERSION = "1.0.0";
-    private static final String POLICY_NAME = "onap.restart.tca";
+    private static final String POLICY_NAME = "onap.policies.controlloop.operational.Apex.SampleDomain";
     private static final String APEX_TYPE = "apex";
     private static final String DEFAULT_GROUP = "defaultGroup";
     private static final String PDP_NAME = "pdp_1";
                 Arrays.asList(new ToscaPolicyIdentifier(POLICY_NAME, POLICY_VERSION));
         status3.setPolicies(idents3);
         pdpHeartbeatListener.onTopicEvent(INFRA, TOPIC, status3);
-        verifyPdpGroup(DEFAULT_GROUP, 1);
+        verifyPdpGroup(DEFAULT_GROUP, 2);
 
         // Testing pdp registration failure case
         final PdpStatus status4 = new PdpStatus();
                 Arrays.asList(new ToscaPolicyIdentifier(POLICY_NAME, POLICY_VERSION));
         status4.setPolicies(idents4);
         pdpHeartbeatListener.onTopicEvent(INFRA, TOPIC, status4);
-        verifyPdpGroup(DEFAULT_GROUP, 1);
+        verifyPdpGroup(DEFAULT_GROUP, 2);
 
-        // Testing pdp heartbeat failure case with pdp mismatch
+        // Testing pdp heartbeat failure case with pdp state mismatch
         final PdpStatus status5 = new PdpStatus();
         status5.setName(PDP_NAME);
         status5.setState(PdpState.PASSIVE);
                 Arrays.asList(new ToscaPolicyIdentifier(POLICY_NAME, POLICY_VERSION));
         status5.setPolicies(idents5);
         pdpHeartbeatListener.onTopicEvent(INFRA, TOPIC, status5);
-        verifyPdpGroup(DEFAULT_GROUP, 1);
+        verifyPdpGroup(DEFAULT_GROUP, 2);
 
-        // Testing pdp termination case
+        // Testing pdp heartbeat failure case with pdp policies mismatch
         final PdpStatus status6 = new PdpStatus();
         status6.setName(PDP_NAME);
-        status6.setState(PdpState.TERMINATED);
+        status6.setState(PdpState.ACTIVE);
         status6.setPdpGroup(DEFAULT_GROUP);
         status6.setPdpType(APEX_TYPE);
-        status6.setPdpSubgroup(APEX_TYPE);
         status6.setHealthy(PdpHealthStatus.HEALTHY);
+        status6.setPdpSubgroup(APEX_TYPE);
         final List<ToscaPolicyIdentifier> idents6 =
-                Arrays.asList(new ToscaPolicyIdentifier(POLICY_NAME, POLICY_VERSION));
+                Arrays.asList(new ToscaPolicyIdentifier(POLICY_NAME, POLICY_VERSION),
+                        new ToscaPolicyIdentifier("onap.restart.tca", POLICY_VERSION));
         status6.setPolicies(idents6);
         pdpHeartbeatListener.onTopicEvent(INFRA, TOPIC, status6);
+        verifyPdpGroup(DEFAULT_GROUP, 2);
+
+        // Testing pdp heartbeat failure case with pdp no policies
+        final PdpStatus status7 = new PdpStatus();
+        status7.setName(PDP_NAME);
+        status7.setState(PdpState.ACTIVE);
+        status7.setPdpGroup(DEFAULT_GROUP);
+        status7.setPdpType(APEX_TYPE);
+        status7.setHealthy(PdpHealthStatus.HEALTHY);
+        status7.setPdpSubgroup(APEX_TYPE);
+        pdpHeartbeatListener.onTopicEvent(INFRA, TOPIC, status7);
+        verifyPdpGroup(DEFAULT_GROUP, 2);
+
+        // Testing pdp termination case for pdp_1
+        final PdpStatus status8 = new PdpStatus();
+        status8.setName(PDP_NAME);
+        status8.setState(PdpState.TERMINATED);
+        status8.setPdpGroup(DEFAULT_GROUP);
+        status8.setPdpType(APEX_TYPE);
+        status8.setPdpSubgroup(APEX_TYPE);
+        status8.setHealthy(PdpHealthStatus.HEALTHY);
+        final List<ToscaPolicyIdentifier> idents8 =
+                Arrays.asList(new ToscaPolicyIdentifier(POLICY_NAME, POLICY_VERSION));
+        status8.setPolicies(idents8);
+        pdpHeartbeatListener.onTopicEvent(INFRA, TOPIC, status8);
+        verifyPdpGroup(DEFAULT_GROUP, 1);
+
+        // Testing pdp termination case for pdp_2
+        final PdpStatus status9 = new PdpStatus();
+        status9.setName("pdp_2");
+        status9.setState(PdpState.TERMINATED);
+        status9.setPdpGroup(DEFAULT_GROUP);
+        status9.setPdpType(APEX_TYPE);
+        status9.setPdpSubgroup(APEX_TYPE);
+        status9.setHealthy(PdpHealthStatus.HEALTHY);
+        final List<ToscaPolicyIdentifier> idents9 =
+                Arrays.asList(new ToscaPolicyIdentifier(POLICY_NAME, POLICY_VERSION));
+        status9.setPolicies(idents9);
+        pdpHeartbeatListener.onTopicEvent(INFRA, TOPIC, status9);
         verifyPdpGroup(DEFAULT_GROUP, 0);
 
     }