import org.onap.policy.controlloop.policy.FinalResult;
 import org.onap.policy.controlloop.policy.Policy;
 import org.onap.policy.controlloop.processor.ControlLoopProcessor;
-import org.onap.policy.drools.system.PolicyEngine;
+import org.onap.policy.drools.system.PolicyEngineConstants;
 import org.onap.policy.guard.GuardResult;
 import org.onap.policy.guard.LockCallback;
 import org.onap.policy.guard.PolicyGuard;
 
         try {
             if (vserverName != null) {
-                String aaiHostUrl = PolicyEngine.manager.getEnvironmentProperty(AAI_URL);
-                String aaiUser = PolicyEngine.manager.getEnvironmentProperty(AAI_USERNAME_PROPERTY);
-                String aaiPassword = PolicyEngine.manager.getEnvironmentProperty(AAI_PASS_PROPERTY);
+                String aaiHostUrl = PolicyEngineConstants.getManager().getEnvironmentProperty(AAI_URL);
+                String aaiUser = PolicyEngineConstants.getManager().getEnvironmentProperty(AAI_USERNAME_PROPERTY);
+                String aaiPassword = PolicyEngineConstants.getManager().getEnvironmentProperty(AAI_PASS_PROPERTY);
                 String aaiGetQueryByVserver = "/aai/v11/nodes/vservers?vserver-name=";
                 String url = aaiHostUrl + aaiGetQueryByVserver;
                 logger.info("AAI Host URL by VServer: {}", url);
         String vnfName = event.getAai().get(GENERIC_VNF_VNF_NAME);
         String vnfId = event.getAai().get(GENERIC_VNF_VNF_ID);
 
-        String aaiHostUrl = PolicyEngine.manager.getEnvironmentProperty(AAI_URL);
-        String aaiUser = PolicyEngine.manager.getEnvironmentProperty(AAI_USERNAME_PROPERTY);
-        String aaiPassword = PolicyEngine.manager.getEnvironmentProperty(AAI_PASS_PROPERTY);
+        String aaiHostUrl = PolicyEngineConstants.getManager().getEnvironmentProperty(AAI_URL);
+        String aaiUser = PolicyEngineConstants.getManager().getEnvironmentProperty(AAI_USERNAME_PROPERTY);
+        String aaiPassword = PolicyEngineConstants.getManager().getEnvironmentProperty(AAI_PASS_PROPERTY);
 
         try {
             if (vnfName != null) {
      * @return the property value
      */
     private static String getPeManagerEnvProperty(String enginePropertyName) {
-        String enginePropertyValue = PolicyEngine.manager.getEnvironmentProperty(enginePropertyName);
+        String enginePropertyValue = PolicyEngineConstants.getManager().getEnvironmentProperty(enginePropertyName);
         if (enginePropertyValue == null) {
             throw new IllegalArgumentException("The value of policy engine manager environment property \""
                     + enginePropertyName + "\" may not be null");
         AaiCqResponse response = null;
         String vserverId = event.getAai().get(VSERVER_VSERVER_NAME);
 
-        String aaiHostUrl = PolicyEngine.manager.getEnvironmentProperty(AAI_URL);
-        String aaiUser = PolicyEngine.manager.getEnvironmentProperty(AAI_USERNAME_PROPERTY);
-        String aaiPassword = PolicyEngine.manager.getEnvironmentProperty(AAI_PASS_PROPERTY);
+        String aaiHostUrl = PolicyEngineConstants.getManager().getEnvironmentProperty(AAI_URL);
+        String aaiUser = PolicyEngineConstants.getManager().getEnvironmentProperty(AAI_USERNAME_PROPERTY);
+        String aaiPassword = PolicyEngineConstants.getManager().getEnvironmentProperty(AAI_PASS_PROPERTY);
 
         response = new AaiManager(new RestManager()).getCustomQueryResponse(aaiHostUrl, aaiUser, aaiPassword, reqId,
                 vserverId);
 
 import org.onap.policy.controlloop.policy.Policy;
 import org.onap.policy.controlloop.policy.PolicyResult;
 import org.onap.policy.database.operationshistory.Dbao;
-import org.onap.policy.drools.system.PolicyEngine;
+import org.onap.policy.drools.system.PolicyEngineConstants;
 import org.onap.policy.guard.Util;
 import org.onap.policy.sdnc.SdncResponse;
 import org.onap.policy.sdnr.PciResponseWrapper;
              * The target vnf-id may not be the same as the source vnf-id specified in the yaml, the target
              * vnf-id is retrieved by a named query to A&AI.
              */
-            if (Boolean.valueOf(PolicyEngine.manager.getEnvironmentProperty(AAI_CUSTOM_QUERY))) {
+            if (Boolean.valueOf(PolicyEngineConstants.getManager().getEnvironmentProperty(AAI_CUSTOM_QUERY))) {
                 GenericVnf genvnf = this.eventManager.getCqResponse((VirtualControlLoopEvent) onset)
                         .getGenericVnfByModelInvariantId(policy.getTarget().getResourceID());
                 if (genvnf == null) {
             } else {
                 this.targetEntity =
                         AppcLcmActorServiceProvider.vnfNamedQuery(policy.getTarget().getResourceID(),
-                                this.targetEntity, PolicyEngine.manager.getEnvironmentProperty("aai.url"),
-                                PolicyEngine.manager.getEnvironmentProperty("aai.username"),
-                                PolicyEngine.manager.getEnvironmentProperty("aai.password"));
+                                this.targetEntity, PolicyEngineConstants.getManager().getEnvironmentProperty("aai.url"),
+                                PolicyEngineConstants.getManager().getEnvironmentProperty("aai.username"),
+                                PolicyEngineConstants.getManager().getEnvironmentProperty("aai.password"));
             }
         }
     }
              */
             try {
                 String vnfId;
-                if (Boolean.valueOf(PolicyEngine.manager.getEnvironmentProperty(AAI_CUSTOM_QUERY))) {
+                if (Boolean.valueOf(PolicyEngineConstants.getManager().getEnvironmentProperty(AAI_CUSTOM_QUERY))) {
                     vnfId = this.eventManager.getCqResponse((VirtualControlLoopEvent) onset).getDefaultGenericVnf()
                             .getVnfId();
                 } else {
 
     private Object startSoOperation(ControlLoopEvent onset, Operation operation) throws AaiException {
         SoActorServiceProvider soActorSp = new SoActorServiceProvider();
-        if (Boolean.valueOf(PolicyEngine.manager.getEnvironmentProperty(AAI_CUSTOM_QUERY))) {
+        if (Boolean.valueOf(PolicyEngineConstants.getManager().getEnvironmentProperty(AAI_CUSTOM_QUERY))) {
             this.operationRequest =
                     soActorSp.constructRequestCq((VirtualControlLoopEvent) onset, operation.clOperation,
                             this.policy, eventManager.getCqResponse((VirtualControlLoopEvent) onset));
 
 
     private Object startVfcOperation(ControlLoopEvent onset, Operation operation) throws AaiException {
-        if (Boolean.valueOf(PolicyEngine.manager.getEnvironmentProperty(AAI_CUSTOM_QUERY))) {
+        if (Boolean.valueOf(PolicyEngineConstants.getManager().getEnvironmentProperty(AAI_CUSTOM_QUERY))) {
             this.operationRequest = VfcActorServiceProvider.constructRequestCq((VirtualControlLoopEvent) onset,
                     operation.clOperation, this.policy,
                     eventManager.getCqResponse((VirtualControlLoopEvent) onset));
         } else {
             this.operationRequest = VfcActorServiceProvider.constructRequest((VirtualControlLoopEvent) onset,
                     operation.clOperation, this.policy, this.eventManager.getVnfResponse(),
-                    PolicyEngine.manager.getEnvironmentProperty("vfc.url"),
-                    PolicyEngine.manager.getEnvironmentProperty("vfc.username"),
-                    PolicyEngine.manager.getEnvironmentProperty("vfc.password"));
+                    PolicyEngineConstants.getManager().getEnvironmentProperty("vfc.url"),
+                    PolicyEngineConstants.getManager().getEnvironmentProperty("vfc.username"),
+                    PolicyEngineConstants.getManager().getEnvironmentProperty("vfc.password"));
         }
         this.currentOperation = operation;
         if (this.operationRequest == null) {
 
     private void storeOperationInDataBase() {
         // Only store in DB if enabled
-        boolean guardEnabled = "false".equalsIgnoreCase(PolicyEngine.manager.getEnvironmentProperty("guard.disabled"));
+        boolean guardEnabled = "false"
+                        .equalsIgnoreCase(PolicyEngineConstants.getManager().getEnvironmentProperty("guard.disabled"));
         if (!guardEnabled) {
             return;
         }
 
         // DB Properties
         Properties props = new Properties();
-        if (PolicyEngine.manager.getEnvironmentProperty(Util.ONAP_KEY_URL) != null
-                && PolicyEngine.manager.getEnvironmentProperty(Util.ONAP_KEY_USER) != null
-                && PolicyEngine.manager.getEnvironmentProperty(Util.ONAP_KEY_PASS) != null) {
-            props.put(Util.ECLIPSE_LINK_KEY_URL, PolicyEngine.manager.getEnvironmentProperty(Util.ONAP_KEY_URL));
-            props.put(Util.ECLIPSE_LINK_KEY_USER, PolicyEngine.manager.getEnvironmentProperty(Util.ONAP_KEY_USER));
-            props.put(Util.ECLIPSE_LINK_KEY_PASS, PolicyEngine.manager.getEnvironmentProperty(Util.ONAP_KEY_PASS));
+        if (PolicyEngineConstants.getManager().getEnvironmentProperty(Util.ONAP_KEY_URL) != null
+                && PolicyEngineConstants.getManager().getEnvironmentProperty(Util.ONAP_KEY_USER) != null
+                        && PolicyEngineConstants.getManager().getEnvironmentProperty(Util.ONAP_KEY_PASS) != null) {
+            props.put(Util.ECLIPSE_LINK_KEY_URL,
+                            PolicyEngineConstants.getManager().getEnvironmentProperty(Util.ONAP_KEY_URL));
+            props.put(Util.ECLIPSE_LINK_KEY_USER,
+                            PolicyEngineConstants.getManager().getEnvironmentProperty(Util.ONAP_KEY_USER));
+            props.put(Util.ECLIPSE_LINK_KEY_PASS,
+                            PolicyEngineConstants.getManager().getEnvironmentProperty(Util.ONAP_KEY_PASS));
             props.put(PersistenceUnitProperties.CLASSLOADER, ControlLoopOperationManager.class.getClassLoader());
         }
 
 
 import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager.NewEventStatus;
 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
 import org.onap.policy.controlloop.policy.PolicyResult;
-import org.onap.policy.drools.system.PolicyEngine;
+import org.onap.policy.drools.system.PolicyEngineConstants;
 import org.onap.policy.guard.GuardResult;
 import org.onap.policy.guard.PolicyGuard;
 import org.onap.policy.guard.PolicyGuard.LockResult;
     public static void setUpSimulator() throws Exception {
         org.onap.policy.simulators.Util.buildAaiSim();
 
-        PolicyEngine.manager.setEnvironmentProperty(AAI_USERNAME, "AAI");
-        PolicyEngine.manager.setEnvironmentProperty(AAI_PASS, "AAI");
-        PolicyEngine.manager.setEnvironmentProperty(AAI_URL, "http://localhost:6666");
+        PolicyEngineConstants.getManager().setEnvironmentProperty(AAI_USERNAME, "AAI");
+        PolicyEngineConstants.getManager().setEnvironmentProperty(AAI_PASS, "AAI");
+        PolicyEngineConstants.getManager().setEnvironmentProperty(AAI_URL, "http://localhost:6666");
     }
 
     @AfterClass
         onset.getAai().put(VNF_ID, VNF_UUID);
         onset.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
 
-        PolicyEngine.manager.setEnvironmentProperty(AAI_URL, "http://localhost:6666");
+        PolicyEngineConstants.getManager().setEnvironmentProperty(AAI_URL, "http://localhost:6666");
     }
 
     @Test
     @Test(expected = AaiException.class)
     public void testQueryAai_QueryException() throws AaiException {
         // Force AAI errors
-        PolicyEngine.manager.setEnvironmentProperty(AAI_URL, INVALID_URL);
+        PolicyEngineConstants.getManager().setEnvironmentProperty(AAI_URL, INVALID_URL);
 
         makeManager(onset).queryAai(onset);
     }
 
 
         // Force AAI error
-        PolicyEngine.manager.setEnvironmentProperty(AAI_URL, INVALID_URL);
+        PolicyEngineConstants.getManager().setEnvironmentProperty(AAI_URL, INVALID_URL);
 
         // re-create manager
         manager = makeManager(onset);
 
 import org.onap.policy.controlloop.policy.Target;
 import org.onap.policy.controlloop.policy.TargetType;
 import org.onap.policy.controlloop.processor.ControlLoopProcessor;
-import org.onap.policy.drools.system.PolicyEngine;
+import org.onap.policy.drools.system.PolicyEngineConstants;
 import org.onap.policy.so.SoResponse;
 import org.onap.policy.so.SoResponseWrapper;
 import org.onap.policy.vfc.VfcResponse;
         onset.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
 
         /* Set environment properties */
-        PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666");
-        PolicyEngine.manager.setEnvironmentProperty("aai.username", "AAI");
-        PolicyEngine.manager.setEnvironmentProperty("aai.password", "AAI");
+        PolicyEngineConstants.getManager().setEnvironmentProperty("aai.url", "http://localhost:6666");
+        PolicyEngineConstants.getManager().setEnvironmentProperty("aai.username", "AAI");
+        PolicyEngineConstants.getManager().setEnvironmentProperty("aai.password", "AAI");
     }
 
     private static EntityManagerFactory emf;
         System.setProperty(OPERATIONS_HISTORY_PU, OPERATIONS_HISTORY_PU_TEST);
 
         // Enter dummy props to avoid nullPointerException
-        PolicyEngine.manager.setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_URL, "a");
-        PolicyEngine.manager.setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_USER, "b");
-        PolicyEngine.manager.setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_PASS, "c");
+        PolicyEngineConstants.getManager().setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_URL, "a");
+        PolicyEngineConstants.getManager().setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_USER, "b");
+        PolicyEngineConstants.getManager().setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_PASS, "c");
 
         // Connect to in-mem db
         emf = Persistence.createEntityManagerFactory(OPERATIONS_HISTORY_PU_TEST);
 
         onsetEvent.getAai().remove(VNF_ID);
         manager.getVnfResponse();
-        if (!Boolean.valueOf(PolicyEngine.manager.getEnvironmentProperty("aai.customQuery"))) {
+        if (!Boolean.valueOf(PolicyEngineConstants.getManager().getEnvironmentProperty("aai.customQuery"))) {
             clom.getEventManager().getVnfResponse().setVnfId(VNF_ID);
             assertEquals(VNF_ID, clom.getTarget(policy));
         }
         SoResponse soResponse = new SoResponse();
         final SoResponseWrapper soRw = new SoResponseWrapper(soResponse, null);
 
-        PolicyEngine.manager.setEnvironmentProperty("guard.disabled", "false");
-        PolicyEngine.manager.setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_URL,
+        PolicyEngineConstants.getManager().setEnvironmentProperty("guard.disabled", "false");
+        PolicyEngineConstants.getManager().setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_URL,
                 "http://somewhere.over.the.rainbow");
-        PolicyEngine.manager.setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_USER, DOROTHY);
-        PolicyEngine.manager.setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_PASS, "Toto");
+        PolicyEngineConstants.getManager().setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_USER, DOROTHY);
+        PolicyEngineConstants.getManager().setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_PASS, "Toto");
 
         assertEquals(PolicyResult.FAILURE, clom.onResponse(soRw));
 
         SoResponse soResponse = new SoResponse();
         final SoResponseWrapper soRw = new SoResponseWrapper(soResponse, null);
 
-        PolicyEngine.manager.setEnvironmentProperty("guard.disabled", "false");
-        PolicyEngine.manager.setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_URL,
+        PolicyEngineConstants.getManager().setEnvironmentProperty("guard.disabled", "false");
+        PolicyEngineConstants.getManager().setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_URL,
                 "http://somewhere.over.the.rainbow");
-        PolicyEngine.manager.setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_USER, DOROTHY);
-        PolicyEngine.manager.setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_PASS, "Toto");
+        PolicyEngineConstants.getManager().setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_USER, DOROTHY);
+        PolicyEngineConstants.getManager().setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_PASS, "Toto");
 
         assertEquals(PolicyResult.FAILURE, clom.onResponse(soRw));
         assertFalse(clom.isOperationRunning());
 
 import org.onap.policy.controlloop.params.ControlLoopParams;
 import org.onap.policy.drools.features.PolicyEngineFeatureApi;
 import org.onap.policy.drools.system.PolicyController;
+import org.onap.policy.drools.system.PolicyControllerConstants;
 
 /**
  * Control Loop Management Feature.
      */
     public static class Factory {
         public PolicyController getController(String controllerName) {
-            return PolicyController.factory.get(controllerName);
+            return PolicyControllerConstants.getFactory().get(controllerName);
         }
     }
 }
 
 import org.onap.policy.controlloop.processor.ControlLoopProcessor;
 import org.onap.policy.drools.apps.controlloop.feature.management.ControlLoopManagementFeature;
 import org.onap.policy.drools.controller.DroolsController;
-import org.onap.policy.drools.system.PolicyController;
-import org.onap.policy.drools.system.PolicyEngine;
+import org.onap.policy.drools.system.PolicyControllerConstants;
+import org.onap.policy.drools.system.PolicyEngineConstants;
 import org.onap.policy.rest.RestManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
                     .build();
             }
 
-            DroolsController controller = PolicyController.factory.get(controllerName).getDrools();
+            DroolsController controller = PolicyControllerConstants.getFactory().get(controllerName).getDrools();
 
             controlLoop = new ControlLoopParams();
             controlLoop.setPolicyScope(controller.getGroupId());
         return Response
             .status(Status.OK)
             .entity(new AaiManager(new RestManager())
-                .getCustomQueryResponse(PolicyEngine.manager.getEnvironmentProperty(ControlLoopEventManager.AAI_URL),
-                    PolicyEngine.manager.getEnvironmentProperty(ControlLoopEventManager.AAI_USERNAME_PROPERTY),
-                    PolicyEngine.manager.getEnvironmentProperty(ControlLoopEventManager.AAI_PASS_PROPERTY),
+                .getCustomQueryResponse(
+                    PolicyEngineConstants.getManager()
+                                    .getEnvironmentProperty(ControlLoopEventManager.AAI_URL),
+                    PolicyEngineConstants.getManager().getEnvironmentProperty(
+                                    ControlLoopEventManager.AAI_USERNAME_PROPERTY),
+                    PolicyEngineConstants.getManager().getEnvironmentProperty(
+                                    ControlLoopEventManager.AAI_PASS_PROPERTY),
                     UUID.randomUUID(),
                     vserverId))
             .build();
         return Response
             .status(Status.OK)
             .entity(new AaiManager(new RestManager())
-                .postQuery(PolicyEngine.manager.getEnvironmentProperty(ControlLoopEventManager.AAI_URL),
-                    PolicyEngine.manager.getEnvironmentProperty(ControlLoopEventManager.AAI_USERNAME_PROPERTY),
-                    PolicyEngine.manager.getEnvironmentProperty(ControlLoopEventManager.AAI_PASS_PROPERTY),
+                .postQuery(
+                    PolicyEngineConstants.getManager()
+                                    .getEnvironmentProperty(ControlLoopEventManager.AAI_URL),
+                    PolicyEngineConstants.getManager().getEnvironmentProperty(
+                                    ControlLoopEventManager.AAI_USERNAME_PROPERTY),
+                    PolicyEngineConstants.getManager().getEnvironmentProperty(
+                                    ControlLoopEventManager.AAI_PASS_PROPERTY),
                     ControlLoopEventManager.getAaiNqRequest(vserverId),
                     UUID.randomUUID()))
             .build();
 
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.common.utils.network.NetworkUtil;
 import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager;
-import org.onap.policy.drools.persistence.SystemPersistence;
-import org.onap.policy.drools.properties.DroolsProperties;
-import org.onap.policy.drools.system.PolicyController;
-import org.onap.policy.drools.system.PolicyEngine;
+import org.onap.policy.drools.persistence.SystemPersistenceConstants;
+import org.onap.policy.drools.properties.DroolsPropertyConstants;
+import org.onap.policy.drools.system.PolicyControllerConstants;
+import org.onap.policy.drools.system.PolicyEngineConstants;
 import org.onap.policy.drools.util.KieUtils;
 import org.onap.policy.drools.utils.logging.LoggerUtil;
 import org.onap.policy.simulators.Util;
         System.setProperty("kie.maven.settings.custom", "src/test/resources/settings.xml");
         LoggerUtil.setLevel(LoggerUtil.ROOT_LOGGER, "WARN");
 
-        SystemPersistence.manager.setConfigurationDir("src/test/resources");
-        PolicyEngine.manager.configure(PolicyEngine.manager.defaultTelemetryConfig());
+        SystemPersistenceConstants.getManager().setConfigurationDir("src/test/resources");
+        PolicyEngineConstants.getManager().configure(PolicyEngineConstants.getManager().defaultTelemetryConfig());
 
         ReleaseId releaseId =
             KieUtils.installArtifact(Paths.get(KMODULE_PATH).toFile(), Paths.get(KMODULE_POM_PATH).toFile(),
                 KJAR_DRL_PATH, Paths.get(KMODULE_DRL_PATH).toFile());
 
         Properties controllerProperties = new Properties();
-        controllerProperties.put(DroolsProperties.RULES_GROUPID, releaseId.getGroupId());
-        controllerProperties.put(DroolsProperties.RULES_ARTIFACTID, releaseId.getArtifactId());
-        controllerProperties.put(DroolsProperties.RULES_VERSION, releaseId.getVersion());
+        controllerProperties.put(DroolsPropertyConstants.RULES_GROUPID, releaseId.getGroupId());
+        controllerProperties.put(DroolsPropertyConstants.RULES_ARTIFACTID, releaseId.getArtifactId());
+        controllerProperties.put(DroolsPropertyConstants.RULES_VERSION, releaseId.getVersion());
 
-        PolicyEngine.manager.createPolicyController(CONTROLLER, controllerProperties);
-        PolicyEngine.manager.start();
+        PolicyEngineConstants.getManager().createPolicyController(CONTROLLER, controllerProperties);
+        PolicyEngineConstants.getManager().start();
 
-        HttpClientFactoryInstance.getClientFactory().build(SystemPersistence.manager.getProperties(CLIENT_CONFIG));
+        HttpClientFactoryInstance.getClientFactory()
+                        .build(SystemPersistenceConstants.getManager().getProperties(CLIENT_CONFIG));
 
         if (!NetworkUtil.isTcpPortOpen("localhost", 9696, 6, 10000L)) {
             throw new IllegalStateException("cannot connect to port 9696");
 
         await().atMost(1, TimeUnit.MINUTES).until(isContainerAlive());
 
-        PolicyEngine.manager.setEnvironmentProperty(ControlLoopEventManager.AAI_URL, "http://localhost:6666");
-        PolicyEngine.manager.setEnvironmentProperty(ControlLoopEventManager.AAI_USERNAME_PROPERTY, "AAI");
-        PolicyEngine.manager.setEnvironmentProperty(ControlLoopEventManager.AAI_PASS_PROPERTY, "AAI");
+        PolicyEngineConstants.getManager().setEnvironmentProperty(ControlLoopEventManager.AAI_URL, "http://localhost:6666");
+        PolicyEngineConstants.getManager().setEnvironmentProperty(ControlLoopEventManager.AAI_USERNAME_PROPERTY, "AAI");
+        PolicyEngineConstants.getManager().setEnvironmentProperty(ControlLoopEventManager.AAI_PASS_PROPERTY, "AAI");
 
         Util.buildAaiSim();
     }
      */
     @AfterClass
     public static void tearDown() {
-        PolicyController.factory.get(CONTROLLER).stop();
+        PolicyControllerConstants.getFactory().get(CONTROLLER).stop();
         await().atMost(1, TimeUnit.MINUTES).until(isContainerAlive(), equalTo(Boolean.FALSE));
 
-        PolicyEngine.manager.removePolicyController(CONTROLLER);
-        PolicyEngine.manager.stop();
+        PolicyEngineConstants.getManager().removePolicyController(CONTROLLER);
+        PolicyEngineConstants.getManager().stop();
 
         final Path controllerPath =
-            Paths.get(SystemPersistence.manager.getConfigurationPath().toString(), CONTROLLER_FILE);
+            Paths.get(SystemPersistenceConstants.getManager().getConfigurationPath().toString(), CONTROLLER_FILE);
         try {
             Files.deleteIfExists(controllerPath);
         } catch (Exception ignored) {
         }
 
         Path controllerBakPath =
-            Paths.get(SystemPersistence.manager.getConfigurationPath().toString(), CONTROLLER_FILE_BAK);
+            Paths.get(SystemPersistenceConstants.getManager().getConfigurationPath().toString(), CONTROLLER_FILE_BAK);
 
         try {
             Files.deleteIfExists(controllerBakPath);
      * @return if the container is alive.
      */
     private static Callable<Boolean> isContainerAlive() {
-        return () -> PolicyController.factory.get(CONTROLLER).getDrools().getContainer().isAlive();
+        return () -> PolicyControllerConstants.getFactory().get(CONTROLLER).getDrools().getContainer().isAlive();
     }
 }
 
 import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
 import com.google.common.cache.RemovalListener;
-
 import java.time.Instant;
 import java.time.ZonedDateTime;
 import java.util.ArrayList;
 import java.util.Properties;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
-
 import org.onap.policy.controlloop.ControlLoopOperation;
 import org.onap.policy.controlloop.VirtualControlLoopNotification;
-import org.onap.policy.drools.persistence.SystemPersistence;
+import org.onap.policy.drools.persistence.SystemPersistenceConstants;
 import org.onap.policy.drools.system.PolicyController;
 import org.onap.policy.drools.utils.logging.MdcTransaction;
 import org.slf4j.Logger;
 
     public CacheBasedControlLoopMetricsManager() {
 
-        Properties properties =
-                SystemPersistence.manager.getProperties(ControlLoopMetricsFeature.CONFIGURATION_PROPERTIES_NAME);
+        Properties properties = SystemPersistenceConstants.getManager()
+                        .getProperties(ControlLoopMetricsFeature.CONFIGURATION_PROPERTIES_NAME);
 
         /* cache size */
 
 
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.controlloop.ControlLoopNotificationType;
 import org.onap.policy.controlloop.VirtualControlLoopNotification;
-import org.onap.policy.drools.persistence.SystemPersistence;
+import org.onap.policy.drools.persistence.SystemPersistenceConstants;
 import org.onap.policy.drools.system.PolicyController;
-import org.onap.policy.drools.system.PolicyEngine;
+import org.onap.policy.drools.system.PolicyEngineConstants;
 
 /**
  * ControlLoopMetrics Tests.
 public class ControlLoopMetricsFeatureTest {
 
     private static final String POLICY_CL_MGT = "POLICY-CL-MGT";
-    private static final Path configPath = SystemPersistence.manager.getConfigurationPath();
+    private static final Path configPath = SystemPersistenceConstants.getManager().getConfigurationPath();
     private static PolicyController testController;
 
     /**
      */
     @BeforeClass
     public static void setUp() {
-        SystemPersistence.manager.setConfigurationDir("src/test/resources");
-        testController = PolicyEngine.manager.createPolicyController("metrics",
-                SystemPersistence.manager.getControllerProperties("metrics"));
+        SystemPersistenceConstants.getManager().setConfigurationDir("src/test/resources");
+        testController = PolicyEngineConstants.getManager().createPolicyController("metrics",
+                SystemPersistenceConstants.getManager().getControllerProperties("metrics"));
     }
 
     @AfterClass
     public static void tearDown() {
-        SystemPersistence.manager.setConfigurationDir(configPath.toString());
+        SystemPersistenceConstants.getManager().setConfigurationDir(configPath.toString());
     }
 
     @Test
 
 
 import org.junit.Test;
 import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
-import org.onap.policy.drools.system.PolicyEngine;
+import org.onap.policy.drools.system.PolicyEngineConstants;
 import org.onap.policy.drools.utils.logging.LoggerUtil;
 import org.onap.policy.simulators.Util;
 
         LoggerUtil.setLevel("ROOT", "INFO");
         LoggerUtil.setLevel("org.eclipse.jetty", "WARN");
         final ControlLoopUtilsFeature feature = new ControlLoopUtilsFeature();
-        feature.afterStart(PolicyEngine.manager);
+        feature.afterStart(PolicyEngineConstants.getManager());
         assertNotNull(HttpServletServerFactoryInstance.getServerFactory().get(Util.AAISIM_SERVER_PORT));
         assertNotNull(HttpServletServerFactoryInstance.getServerFactory().get(Util.SOSIM_SERVER_PORT));
         assertNotNull(HttpServletServerFactoryInstance.getServerFactory().get(Util.SOSIM_SERVER_PORT));
 
     private PolicyGuardResponse guardResponse;
 
     /**
-     * Guard url is grabbed from PolicyEngine.manager properties
+     * Guard url is grabbed from PolicyEngine manager properties.
      */
     public CallGuardTask(WorkingMemory wm, String cl, String act,
             String rec, String tar, String reqId, Supplier<Integer> vfcnt) {
 
 import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
-
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.common.endpoints.utils.NetLoggerUtil;
 import org.onap.policy.common.endpoints.utils.NetLoggerUtil.EventType;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
-import org.onap.policy.drools.system.PolicyEngine;
+import org.onap.policy.drools.system.PolicyEngineConstants;
 import org.onap.policy.models.decisions.concepts.DecisionRequest;
 import org.onap.policy.models.decisions.concepts.DecisionResponse;
 import org.onap.policy.rest.RestManager;
      *  Constructor.
      */
     public PolicyGuardXacmlHelper() {
-        this.url = PolicyEngine.manager.getEnvironmentProperty("guard.url");
-        this.user = PolicyEngine.manager.getEnvironmentProperty("pdpx.username");
-        this.pwd = PolicyEngine.manager.getEnvironmentProperty("pdpx.password");
+        this.url = PolicyEngineConstants.getManager().getEnvironmentProperty("guard.url");
+        this.user = PolicyEngineConstants.getManager().getEnvironmentProperty("pdpx.username");
+        this.pwd = PolicyEngineConstants.getManager().getEnvironmentProperty("pdpx.password");
     }
 
     /**
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
-
 import org.apache.commons.io.IOUtils;
 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
 import org.onap.policy.controlloop.policy.guard.ControlLoopGuard;
-import org.onap.policy.drools.system.PolicyEngine;
+import org.onap.policy.drools.system.PolicyEngineConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.yaml.snakeyaml.Yaml;
      * <p>see /guard/src/test/java/org/onap/policy/guard/UtilTest.java for setting test properties
      */
     public static void setGuardEnvProps(String url, String username, String password) {
-        PolicyEngine.manager.setEnvironmentProperty(org.onap.policy.guard.Util.PROP_GUARD_URL, url);
-        PolicyEngine.manager.setEnvironmentProperty(org.onap.policy.guard.Util.PROP_GUARD_USER, username);
-        PolicyEngine.manager.setEnvironmentProperty(org.onap.policy.guard.Util.PROP_GUARD_PASS, password);
+        PolicyEngineConstants.getManager().setEnvironmentProperty(org.onap.policy.guard.Util.PROP_GUARD_URL, url);
+        PolicyEngineConstants.getManager().setEnvironmentProperty(org.onap.policy.guard.Util.PROP_GUARD_USER, username);
+        PolicyEngineConstants.getManager().setEnvironmentProperty(org.onap.policy.guard.Util.PROP_GUARD_PASS, password);
     }
 
     public static void setGuardEnvProp(String key, String value) {
-        PolicyEngine.manager.setEnvironmentProperty(key, value);
+        PolicyEngineConstants.getManager().setEnvironmentProperty(key, value);
     }
 
     public static String getGuardProp(String propName) {
-        return PolicyEngine.manager.getEnvironmentProperty(propName);
+        return PolicyEngineConstants.getManager().getEnvironmentProperty(propName);
     }
 }
 
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
-import org.onap.policy.drools.system.PolicyEngine;
+import org.onap.policy.drools.system.PolicyEngineConstants;
 import org.onap.policy.drools.utils.logging.LoggerUtil;
 
 public class PolicyGuardXacmlHelperTest {
 
     @Test
     public void testInit() {
-        final Properties savedEnvironment = (Properties) PolicyEngine.manager.getEnvironment().clone();
+        final Properties savedEnvironment = (Properties) PolicyEngineConstants.getManager().getEnvironment().clone();
 
         assertNotNull(new PolicyGuardXacmlHelper());
 
-        PolicyEngine.manager.getEnvironment().setProperty(GUARD_URL,
+        PolicyEngineConstants.getManager().getEnvironment().setProperty(GUARD_URL,
                 "http://localhost:6669/pdp/api/getDecision,Dorothy");
         assertNotNull(new PolicyGuardXacmlHelper());
 
-        PolicyEngine.manager.getEnvironment().setProperty(GUARD_URL,
+        PolicyEngineConstants.getManager().getEnvironment().setProperty(GUARD_URL,
                 "http://localhost:6669/pdp/api/getDecision,Dorothy,Toto");
         assertNotNull(new PolicyGuardXacmlHelper());
 
-        PolicyEngine.manager.getEnvironment().setProperty(GUARD_URL,
+        PolicyEngineConstants.getManager().getEnvironment().setProperty(GUARD_URL,
                 "http://localhost:6969/policy/pdpx/v1/decision");
 
-        PolicyEngine.manager.getEnvironment().setProperty("pdpx.timeout", "thisIsNotANumber");
+        PolicyEngineConstants.getManager().getEnvironment().setProperty("pdpx.timeout", "thisIsNotANumber");
         assertNotNull(new PolicyGuardXacmlHelper());
 
-        PolicyEngine.manager.getEnvironment().setProperty("pdpx.timeout", "1000");
+        PolicyEngineConstants.getManager().getEnvironment().setProperty("pdpx.timeout", "1000");
         assertNotNull(new PolicyGuardXacmlHelper());
 
-        PolicyEngine.manager.getEnvironment().remove("pdpx.password");
+        PolicyEngineConstants.getManager().getEnvironment().remove("pdpx.password");
         assertNotNull(new PolicyGuardXacmlHelper());
 
-        PolicyEngine.manager.getEnvironment().setProperty("pdpx.username", "python");
+        PolicyEngineConstants.getManager().getEnvironment().setProperty("pdpx.username", "python");
         assertNotNull(new PolicyGuardXacmlHelper());
 
-        PolicyEngine.manager.getEnvironment().setProperty(GUARD_URL, "///");
+        PolicyEngineConstants.getManager().getEnvironment().setProperty(GUARD_URL, "///");
         assertNotNull(new PolicyGuardXacmlHelper());
 
-        PolicyEngine.manager.getEnvironment().setProperty("guard.disabled", "");
+        PolicyEngineConstants.getManager().getEnvironment().setProperty("guard.disabled", "");
         assertNotNull(new PolicyGuardXacmlHelper());
 
-        PolicyEngine.manager.getEnvironment().setProperty("guard.disabled", "true");
+        PolicyEngineConstants.getManager().getEnvironment().setProperty("guard.disabled", "true");
         assertNotNull(new PolicyGuardXacmlHelper());
 
-        PolicyEngine.manager.getEnvironment().clear();
+        PolicyEngineConstants.getManager().getEnvironment().clear();
         assertNotNull(new PolicyGuardXacmlHelper());
 
-        PolicyEngine.manager.setEnvironment(savedEnvironment);
+        PolicyEngineConstants.getManager().setEnvironment(savedEnvironment);
     }
 }
 
 import java.util.LinkedList;
 import java.util.Iterator;
 
-import org.onap.policy.drools.system.PolicyEngine;
+import org.onap.policy.drools.system.PolicyEngineConstants;
 
 /*
  * This structure mimics the Params structure.
             //
             // Let interested parties know
             //
-            PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+            PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
             
             //
             // Retract it from memory
                 //
                 // Let interested parties know
                 //
-                PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+                PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
                 //
                 // Setup the Overall Control Loop timer
                 //
                 //
                 // Let interested parties know
                 //
-                PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+                PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
                 //
                 // Retract it from memory
                 //
         //
         //
         //
-        PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+        PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
         //
         // Retract the event
         //
                 //
                 // In this case, we are done
                 //
-                PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+                PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
                 //
                 // Unlock the target
                 //
                   //
                   // In this case, we are done
                   //
-                  PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+                  PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
                   //
                   // Unlock the target
                   //
                   notification.setPolicyScope("${policyScope}");
                   notification.setPolicyVersion("${policyVersion}");
       
-                  PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+                  PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
 
                   retract($event);
                 
          notification.setPolicyScope("${policyScope}");
          notification.setPolicyVersion("${policyVersion}");
   
-         PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+         PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
 
          retract($event);
                 
           notification.setPolicyScope("${policyScope}");
           notification.setPolicyVersion("${policyVersion}");
 
-          PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+          PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
 
           switch ($operation.policy.getActor()){
 
               case "APPC":
                   if (request instanceof Request) {
-                      PolicyEngine.manager.deliver("APPC-CL", request);
+                      PolicyEngineConstants.getManager().deliver("APPC-CL", request);
                   }
                   else if (request instanceof LcmRequestWrapper) {
-                      PolicyEngine.manager.deliver("APPC-LCM-READ", request);
+                      PolicyEngineConstants.getManager().deliver("APPC-LCM-READ", request);
                   }
                   break;
               case "SO":
                       SoActorServiceProvider.sendRequest($event.getRequestId().toString(), 
                           new mySoCallback(), 
                           request,
-                          PolicyEngine.manager.getEnvironmentProperty("so.url"),
-                          PolicyEngine.manager.getEnvironmentProperty("so.username"),
-                          PolicyEngine.manager.getEnvironmentProperty("so.password"));
+                          PolicyEngineConstants.getManager().getEnvironmentProperty("so.url"),
+                          PolicyEngineConstants.getManager().getEnvironmentProperty("so.username"),
+                          PolicyEngineConstants.getManager().getEnvironmentProperty("so.password"));
                   }
                   break;
               case "VFC":
                       // Start VFC thread
                       Thread t = new Thread(new VfcManager(new myVfcCallback(),
                           (VfcRequest)request,
-                          PolicyEngine.manager.getEnvironmentProperty("vfc.url"),
-                          PolicyEngine.manager.getEnvironmentProperty("vfc.username"),
-                          PolicyEngine.manager.getEnvironmentProperty("vfc.password")));
+                          PolicyEngineConstants.getManager().getEnvironmentProperty("vfc.url"),
+                          PolicyEngineConstants.getManager().getEnvironmentProperty("vfc.username"),
+                          PolicyEngineConstants.getManager().getEnvironmentProperty("vfc.password")));
                       t.start();
                   }          
                   break;
                       // Start SDNC thread
                       Thread t = new Thread(new SdncManager(new mySdncCallback(), 
                           (SdncRequest)request,
-                          PolicyEngine.manager.getEnvironmentProperty("sdnc.url"),
-                          PolicyEngine.manager.getEnvironmentProperty("sdnc.username"),
-                          PolicyEngine.manager.getEnvironmentProperty("sdnc.password")));
+                          PolicyEngineConstants.getManager().getEnvironmentProperty("sdnc.url"),
+                          PolicyEngineConstants.getManager().getEnvironmentProperty("sdnc.username"),
+                          PolicyEngineConstants.getManager().getEnvironmentProperty("sdnc.password")));
                       t.start();
                   }
                   break;                       
               case "SDNR":
                   if (request instanceof PciRequestWrapper) {
-                      PolicyEngine.manager.deliver("SDNR-CL", request);
+                      PolicyEngineConstants.getManager().deliver("SDNR-CL", request);
                   }
                   break;
           }
             notification.setMessage($operation.getOperationHistory());
             notification.setHistory($operation.getHistory());
           
-            PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+            PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
         }
     
         retract($opTimer);
     notification.setPolicyScope("${policyScope}");
     notification.setPolicyVersion("${policyVersion}");
     
-    PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+    PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
         
     //
     // Now send Guard Request to XACML Guard. In order to bypass the call to Guard, 
     //
     
     // NOTE: The environment properties uses "guard.disabled" but the boolean is guardEnabled
-    boolean guardEnabled = "false".equalsIgnoreCase(PolicyEngine.manager.getEnvironmentProperty("guard.disabled"));
+    boolean guardEnabled = "false".equalsIgnoreCase(PolicyEngineConstants.getManager().getEnvironmentProperty("guard.disabled"));
     
     if(guardEnabled){
     
     notification.setPolicyScope("${policyScope}");
     notification.setPolicyVersion("${policyVersion}");
     
-    PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+    PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
     
     if("Permit".equalsIgnoreCase($guardResponse.getResult())){
     
             //
             // Let interested parties know
             //
-            PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+            PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
         } else {
             notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
             //
             // Let interested parties know
             //
-            PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+            PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
         }
         //
         // Ensure the operation is complete
       } else {
           notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
       }
-      PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+      PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
       //
       // Ensure the operation is complete
       //
       } else {
           notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
       }
-      PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+      PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
       //
       // Ensure the operation is complete
       //
             notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
 
         }
-        PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+        PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
         //
         // Ensure the operation is complete
         //
     //
     // Let interested parties know
     //
-    PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+    PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
     //
     // Get rid of the timer
     //
         //
         // Let interested parties know
         //
-        PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+        PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
     }
     //
     // Retract the event
 
 import java.util.LinkedList;
 import java.util.Iterator;
 
-import org.onap.policy.drools.system.PolicyEngine;
+import org.onap.policy.drools.system.PolicyEngineConstants;
 
 /*
  * This object is to provide support for timeouts
             //
             // Let interested parties know
             //
-            PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+            PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
 
             //
             // Retract it from memory
                 //
                 // Let interested parties know
                 //
-                PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+                PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
                 //
                 // Setup the Overall Control Loop timer
                 //
                 //
                 // Let interested parties know
                 //
-                PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+                PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
                 //
                 // Retract it from memory
                 //
         //
         //
         //
-        PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+        PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
         //
         // Retract the event
         //
                 //
                 // In this case, we are done
                 //
-                PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+                PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
                 //
                 // Unlock the target
                 //
                   //
                   // In this case, we are done
                   //
-                  PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+                  PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
                   //
                   // Unlock the target
                   //
                   notification.setPolicyScope($params.getPolicyScope());
                   notification.setPolicyVersion($params.getPolicyVersion());
 
-                  PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+                  PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
 
                   retract($event);
                 
         notification.setPolicyScope($params.getPolicyScope());
         notification.setPolicyVersion($params.getPolicyVersion());
 
-        PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+        PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
 
         retract($event);
                 
           notification.setPolicyScope($params.getPolicyScope());
           notification.setPolicyVersion($params.getPolicyVersion());
 
-          PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+          PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
 
           switch ($operation.policy.getActor()){
 
               case "APPC":
 
                   if (request instanceof Request) {
-                      PolicyEngine.manager.deliver("APPC-CL", request);
+                      PolicyEngineConstants.getManager().deliver("APPC-CL", request);
                   }
                   else if (request instanceof LcmRequestWrapper) {
-                      PolicyEngine.manager.deliver("APPC-LCM-READ", request);
+                      PolicyEngineConstants.getManager().deliver("APPC-LCM-READ", request);
                   }
                   break;
               case "SO":
                       SoActorServiceProvider.sendRequest($event.getRequestId().toString(), 
                           new mySoCallback(), 
                           request,
-                          PolicyEngine.manager.getEnvironmentProperty("so.url"),
-                          PolicyEngine.manager.getEnvironmentProperty("so.username"),
-                          PolicyEngine.manager.getEnvironmentProperty("so.password"));
+                          PolicyEngineConstants.getManager().getEnvironmentProperty("so.url"),
+                          PolicyEngineConstants.getManager().getEnvironmentProperty("so.username"),
+                          PolicyEngineConstants.getManager().getEnvironmentProperty("so.password"));
                   }
                   break;
               case "VFC":
                       // Start VFC thread
                       Thread t = new Thread(new VfcManager(new myVfcCallback(),
                           (VfcRequest)request,
-                          PolicyEngine.manager.getEnvironmentProperty("vfc.url"),
-                          PolicyEngine.manager.getEnvironmentProperty("vfc.username"),
-                          PolicyEngine.manager.getEnvironmentProperty("vfc.password")));
+                          PolicyEngineConstants.getManager().getEnvironmentProperty("vfc.url"),
+                          PolicyEngineConstants.getManager().getEnvironmentProperty("vfc.username"),
+                          PolicyEngineConstants.getManager().getEnvironmentProperty("vfc.password")));
                       t.start();
                   }
                   break;
               case "SDNR":
                   if (request instanceof PciRequestWrapper) {
-                      PolicyEngine.manager.deliver("SDNR-CL", request);
+                      PolicyEngineConstants.getManager().deliver("SDNR-CL", request);
                   }
                   break;
               
                       // Start SDNC thread
                       Thread t = new Thread(new SdncManager(new mySdncCallback(), 
                           (SdncRequest)request,
-                          PolicyEngine.manager.getEnvironmentProperty("sdnc.url"),
-                          PolicyEngine.manager.getEnvironmentProperty("sdnc.username"),
-                          PolicyEngine.manager.getEnvironmentProperty("sdnc.password")));
+                          PolicyEngineConstants.getManager().getEnvironmentProperty("sdnc.url"),
+                          PolicyEngineConstants.getManager().getEnvironmentProperty("sdnc.username"),
+                          PolicyEngineConstants.getManager().getEnvironmentProperty("sdnc.password")));
                       t.start();
                   }
                   break;                 
             notification.setMessage($operation.getOperationHistory());
             notification.setHistory($operation.getHistory());
 
-            PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+            PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
         }
 
         retract($opTimer);
     notification.setPolicyScope($params.getPolicyScope());
     notification.setPolicyVersion($params.getPolicyVersion());
 
-    PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+    PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
 
     //
     // Now send Guard Request to XACML Guard. In order to bypass the call to Guard,
     //
 
     // NOTE: The environment properties uses "guard.disabled" but the boolean is guardEnabled
-    boolean guardEnabled = "false".equalsIgnoreCase(PolicyEngine.manager.getEnvironmentProperty("guard.disabled"));
+    boolean guardEnabled = "false".equalsIgnoreCase(PolicyEngineConstants.getManager().getEnvironmentProperty("guard.disabled"));
 
     if(guardEnabled){
 
     notification.setPolicyScope($params.getPolicyScope());
     notification.setPolicyVersion($params.getPolicyVersion());
 
-    PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+    PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
 
     if("Permit".equalsIgnoreCase($guardResponse.getResult())){
 
             //
             // Let interested parties know
             //
-            PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+            PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
         } else {
             notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
             //
             // Let interested parties know
             //
-            PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+            PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
         }
         //
         // Ensure the operation is complete
       } else {
           notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
       }
-      PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+      PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
       //
       // Ensure the operation is complete
       //
             notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
 
         }
-        PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+        PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
         //
         // Ensure the operation is complete
         //
     //
     // Let interested parties know
     //
-    PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+    PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
     //
     // Get rid of the timer
     //
         //
         // Let interested parties know
         //
-        PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+        PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
     }
     //
     // Retract the event
       } else {
           notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
       }
-      PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+      PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
 
       ControlLoopResponse clResponse = $operation.getControlLoopResponse($response, $event);
-      PolicyEngine.manager.deliver("DCAE_CL_RSP", clResponse);
+      PolicyEngineConstants.getManager().deliver("DCAE_CL_RSP", clResponse);
       //
       // Ensure the operation is complete
       //
 
 import static org.junit.Assert.fail;
 
 import java.io.IOException;
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
 import java.time.Instant;
 import java.util.HashMap;
-import java.util.List;
-import java.util.Properties;
 import java.util.UUID;
-import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.kie.api.runtime.KieSession;
-import org.kie.api.runtime.rule.FactHandle;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
-import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
 import org.onap.policy.common.endpoints.event.comm.TopicListener;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
-import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
-import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties;
 import org.onap.policy.controlloop.ControlLoopEventStatus;
 import org.onap.policy.controlloop.ControlLoopNotificationType;
 import org.onap.policy.controlloop.ControlLoopTargetType;
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.VirtualControlLoopNotification;
 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
-import org.onap.policy.drools.protocol.coders.EventProtocolCoder;
-import org.onap.policy.drools.protocol.coders.EventProtocolParams;
-import org.onap.policy.drools.protocol.coders.JsonProtocolFilter;
-import org.onap.policy.drools.system.PolicyController;
-import org.onap.policy.drools.system.PolicyEngine;
-import org.onap.policy.drools.utils.logging.LoggerUtil;
 import org.onap.policy.sdnc.SdncRequest;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-public class CcvpnBwControlLoopTest implements TopicListener {
-
-    private static final Logger logger = LoggerFactory.getLogger(CcvpnBwControlLoopTest.class);
-
-    private static List<? extends TopicSink> noopTopics;
-
-    private static KieSession kieSession;
-    private static SupportUtil.Pair<ControlLoopPolicy, String> pair;
-
-    static {
-        /* Set environment properties */
-        SupportUtil.setAaiProps();
-        SupportUtil.setSdncProps();
-        SupportUtil.setGuardProps();
-        LoggerUtil.setLevel(LoggerUtil.ROOT_LOGGER, "INFO");
-    }
+public class CcvpnBwControlLoopTest extends ControlLoopBase implements TopicListener {
 
     /**
      * Setup the simulator.
      */
     @BeforeClass
-    public static void setUpSimulator() {
-        PolicyEngine.manager.configure(new Properties());
-        assertTrue(PolicyEngine.manager.start());
-        Properties noopSinkProperties = new Properties();
-        noopSinkProperties.put(PolicyEndPointProperties.PROPERTY_NOOP_SINK_TOPICS, "POLICY-CL-MGT");
-        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events",
-                "org.onap.policy.controlloop.VirtualControlLoopNotification");
-        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events.custom.gson",
-                "org.onap.policy.controlloop.util.Serialization,gsonPretty");
-        noopTopics = TopicEndpointManager.getManager().addTopicSinks(noopSinkProperties);
-
-        EventProtocolCoder.manager.addEncoder(EventProtocolParams.builder()
-                .groupId("junit.groupId")
-                .artifactId("junit.artifactId")
-                .topic("POLICY-CL-MGT")
-                .eventClass("org.onap.policy.controlloop.VirtualControlLoopNotification")
-                .protocolFilter(new JsonProtocolFilter())
-                .modelClassLoaderHash(1111));
-
-        try {
-            SupportUtil.buildAaiSim();
-            SupportUtil.buildSdncSim();
-            SupportUtil.buildGuardSim();
-        } catch (Exception e) {
-            fail(e.getMessage());
-        }
-
-        /*
-         *
-         * Start the kie session
-         */
-        try {
-            kieSession = startSession(
-                    "../archetype-cl-amsterdam/src/main/resources/archetype-resources/"
-                    + "src/main/resources/__closedLoopControlName__.drl",
-                    "src/test/resources/yaml/policy_ControlLoop_CCVPN_BW.yaml", "type=operational",
-                    "BandwidthOnDemand", "2.0.0");
-        } catch (IOException e) {
-            e.printStackTrace();
-            logger.debug("Could not create kieSession");
-            fail("Could not create kieSession");
-        }
-    }
-
-    /**
-     * Tear down the simulator.
-     */
-    @AfterClass
-    public static void tearDownSimulator() {
-
-        /*
-         * Gracefully shut down the kie session
-         */
-        kieSession.dispose();
-
-        PolicyEngine.manager.stop();
-        HttpServletServerFactoryInstance.getServerFactory().destroy();
-        PolicyController.factory.shutdown();
-        TopicEndpointManager.getManager().shutdown();
+    public static void setUpBeforeClass() {
+        ControlLoopBase.setUpBeforeClass(
+            "../archetype-cl-amsterdam/src/main/resources/archetype-resources/"
+                            + "src/main/resources/__closedLoopControlName__.drl",
+            "src/test/resources/yaml/policy_ControlLoop_CCVPN_BW.yaml",
+            "type=operational",
+            "BandwidthOnDemand", "2.0.0");
     }
 
     @Test
         dumpFacts(kieSession);
     }
 
-    /**
-     * This method will start a kie session and instantiate the Policy Engine.
-     *
-     * @param droolsTemplate the DRL rules file
-     * @param yamlFile the yaml file containing the policies
-     * @param policyScope scope for policy
-     * @param policyName name of the policy
-     * @param policyVersion version of the policy
-     * @return the kieSession to be used to insert facts
-     * @throws IOException IO Exception
-     */
-    private static KieSession startSession(String droolsTemplate, String yamlFile, String policyScope,
-            String policyName, String policyVersion) throws IOException {
-
-        /*
-         * Load policies from yaml
-         */
-        pair = SupportUtil.loadYaml(yamlFile);
-        assertNotNull(pair);
-        assertNotNull(pair.first);
-        assertNotNull(pair.first.getControlLoop());
-        assertNotNull(pair.first.getControlLoop().getControlLoopName());
-        assertTrue(pair.first.getControlLoop().getControlLoopName().length() > 0);
-
-        /*
-         * Construct a kie session
-         */
-        final KieSession kieSession = SupportUtil.buildContainer(droolsTemplate,
-                pair.first.getControlLoop().getControlLoopName(),
-                policyScope, policyName, policyVersion, URLEncoder.encode(pair.second,
-                                                                          StandardCharsets.UTF_8.name()));
-
-        /*
-         * Retrieve the Policy Engine
-         */
-
-        logger.debug("============");
-        logger.debug(URLEncoder.encode(pair.second, StandardCharsets.UTF_8.name()));
-        logger.debug("============");
-
-        return kieSession;
-    }
-
     /*
      * (non-Javadoc)
      *
         event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
         kieSession.insert(event);
     }
-
-    /**
-     * Dumps the kie session facts.
-     *
-     * @param kieSession input session
-     */
-    public static void dumpFacts(KieSession kieSession) {
-        logger.debug("Fact Count: " + kieSession.getFactCount());
-        for (FactHandle handle : kieSession.getFactHandles()) {
-            logger.debug("FACT: " + handle);
-        }
-    }
 }
 
 import static org.junit.Assert.fail;
 
 import java.io.IOException;
-import java.net.URLEncoder;
 import java.time.Instant;
 import java.util.HashMap;
-import java.util.List;
-import java.util.Properties;
 import java.util.UUID;
-import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.kie.api.runtime.KieSession;
-import org.kie.api.runtime.rule.FactHandle;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
-import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
 import org.onap.policy.common.endpoints.event.comm.TopicListener;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
-import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
-import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties;
 import org.onap.policy.controlloop.ControlLoopEventStatus;
 import org.onap.policy.controlloop.ControlLoopNotificationType;
 import org.onap.policy.controlloop.ControlLoopTargetType;
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.VirtualControlLoopNotification;
 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
-import org.onap.policy.drools.protocol.coders.EventProtocolCoder;
-import org.onap.policy.drools.protocol.coders.EventProtocolParams;
-import org.onap.policy.drools.protocol.coders.JsonProtocolFilter;
-import org.onap.policy.drools.system.PolicyController;
-import org.onap.policy.drools.system.PolicyEngine;
-import org.onap.policy.drools.utils.logging.LoggerUtil;
 import org.onap.policy.sdnc.SdncRequest;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-public class CcvpnControlLoopTest implements TopicListener {
-
-    private static final Logger logger = LoggerFactory.getLogger(CcvpnControlLoopTest.class);
-
-    private static List<? extends TopicSink> noopTopics;
-
-    private static KieSession kieSession;
-    private static SupportUtil.Pair<ControlLoopPolicy, String> pair;
-
-    static {
-        /* Set environment properties */
-        SupportUtil.setAaiProps();
-        SupportUtil.setSdncProps();
-        SupportUtil.setGuardProps();
-        LoggerUtil.setLevel(LoggerUtil.ROOT_LOGGER, "INFO");
-    }
+public class CcvpnControlLoopTest extends ControlLoopBase implements TopicListener {
 
     /**
      * Setup the simulator.
      */
     @BeforeClass
-    public static void setUpSimulator() {
-        PolicyEngine.manager.configure(new Properties());
-        assertTrue(PolicyEngine.manager.start());
-        Properties noopSinkProperties = new Properties();
-        noopSinkProperties.put(PolicyEndPointProperties.PROPERTY_NOOP_SINK_TOPICS, "POLICY-CL-MGT");
-        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events",
-                "org.onap.policy.controlloop.VirtualControlLoopNotification");
-        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events.custom.gson",
-                "org.onap.policy.controlloop.util.Serialization,gsonPretty");
-        noopTopics = TopicEndpointManager.getManager().addTopicSinks(noopSinkProperties);
-
-        EventProtocolCoder.manager.addEncoder(EventProtocolParams.builder()
-                .groupId("junit.groupId")
-                .artifactId("junit.artifactId")
-                .topic("POLICY-CL-MGT")
-                .eventClass("org.onap.policy.controlloop.VirtualControlLoopNotification")
-                .protocolFilter(new JsonProtocolFilter())
-                .modelClassLoaderHash(1111));
-
-        try {
-            SupportUtil.buildAaiSim();
-            SupportUtil.buildSdncSim();
-            SupportUtil.buildGuardSim();
-        } catch (Exception e) {
-            fail(e.getMessage());
-        }
-
-        /*
-         *
-         * Start the kie session
-         */
-        try {
-            kieSession = startSession(
-                    "../archetype-cl-amsterdam/src/main/resources/archetype-resources/"
-                    + "src/main/resources/__closedLoopControlName__.drl",
-                    "src/test/resources/yaml/policy_ControlLoop_CCVPN.yaml", "type=operational", "Connectivity Reroute",
-                    "2.0.0");
-        } catch (IOException e) {
-            e.printStackTrace();
-            logger.debug("Could not create kieSession");
-            fail("Could not create kieSession");
-        }
-    }
-
-    /**
-     * Tear down the simulator.
-     */
-    @AfterClass
-    public static void tearDownSimulator() {
-
-        /*
-         * Gracefully shut down the kie session
-         */
-        kieSession.dispose();
-
-        PolicyEngine.manager.stop();
-        HttpServletServerFactoryInstance.getServerFactory().destroy();
-        PolicyController.factory.shutdown();
-        TopicEndpointManager.getManager().shutdown();
+    public static void setUpBeforeClass() {
+        ControlLoopBase.setUpBeforeClass(
+            "../archetype-cl-amsterdam/src/main/resources/archetype-resources/"
+                            + "src/main/resources/__closedLoopControlName__.drl",
+            "src/test/resources/yaml/policy_ControlLoop_CCVPN.yaml",
+            "type=operational",
+            "Connectivity Reroute",
+            "2.0.0");
     }
 
     @Test
         dumpFacts(kieSession);
     }
 
-    /**
-     * This method will start a kie session and instantiate the Policy Engine.
-     *
-     * @param droolsTemplate the DRL rules file
-     * @param yamlFile the yaml file containing the policies
-     * @param policyScope scope for policy
-     * @param policyName name of the policy
-     * @param policyVersion version of the policy
-     * @return the kieSession to be used to insert facts
-     * @throws IOException IO Exception
-     */
-    private static KieSession startSession(String droolsTemplate, String yamlFile, String policyScope,
-            String policyName, String policyVersion) throws IOException {
-
-        /*
-         * Load policies from yaml
-         */
-        pair = SupportUtil.loadYaml(yamlFile);
-        assertNotNull(pair);
-        assertNotNull(pair.first);
-        assertNotNull(pair.first.getControlLoop());
-        assertNotNull(pair.first.getControlLoop().getControlLoopName());
-        assertTrue(pair.first.getControlLoop().getControlLoopName().length() > 0);
-
-        /*
-         * Construct a kie session
-         */
-        final KieSession kieSession = SupportUtil.buildContainer(droolsTemplate,
-                pair.first.getControlLoop().getControlLoopName(),
-                policyScope, policyName, policyVersion, URLEncoder.encode(pair.second, "UTF-8"));
-
-        /*
-         * Retrieve the Policy Engine
-         */
-
-        logger.debug("============");
-        logger.debug(URLEncoder.encode(pair.second, "UTF-8"));
-        logger.debug("============");
-
-        return kieSession;
-    }
-
     /*
      * (non-Javadoc)
      *
         event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
         kieSession.insert(event);
     }
-
-    /**
-     * Dumps the kie session facts.
-     *
-     * @param kieSession input session
-     */
-    public static void dumpFacts(KieSession kieSession) {
-        logger.debug("Fact Count: " + kieSession.getFactCount());
-        for (FactHandle handle : kieSession.getFactHandles()) {
-            logger.debug("FACT: " + handle);
-        }
-    }
 }
-
 
--- /dev/null
+/*-
+ * ============LICENSE_START=======================================================
+ * demo
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.template.demo;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.List;
+import java.util.Properties;
+import java.util.UUID;
+import org.junit.AfterClass;
+import org.kie.api.runtime.KieSession;
+import org.kie.api.runtime.rule.FactHandle;
+import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
+import org.onap.policy.common.endpoints.event.comm.TopicSink;
+import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
+import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties;
+import org.onap.policy.controlloop.policy.ControlLoopPolicy;
+import org.onap.policy.drools.protocol.coders.EventProtocolCoderConstants;
+import org.onap.policy.drools.protocol.coders.EventProtocolParams;
+import org.onap.policy.drools.protocol.coders.JsonProtocolFilter;
+import org.onap.policy.drools.system.PolicyControllerConstants;
+import org.onap.policy.drools.system.PolicyEngineConstants;
+import org.onap.policy.drools.utils.logging.LoggerUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Common super class used by various Control Loop test classes. It manages the simulators
+ * and the kie session.
+ */
+public class ControlLoopBase {
+
+    private static final String JUNIT_ARTIFACT_ID = "junit.artifactId";
+
+    private static final String JUNIT_GROUP_ID = "junit.groupId";
+
+    protected static final Logger logger = LoggerFactory.getLogger(ControlLoopBase.class);
+
+    protected static List<? extends TopicSink> noopTopics;
+
+    protected static KieSession kieSession;
+    protected static SupportUtil.Pair<ControlLoopPolicy, String> pair;
+
+    protected UUID requestId;
+
+    /**
+     * Starts the simulator and the kie session.
+     *
+     * @param droolsTemplate the DRL rules file
+     * @param yamlFile the yaml file containing the policies
+     * @param policyScope scope for policy
+     * @param policyName name of the policy
+     * @param policyVersion version of the policy
+     */
+    public static void setUpBeforeClass(String droolsTemplate, String yamlFile, String policyScope,
+                    String policyName, String policyVersion) {
+
+        /* Set environment properties */
+        SupportUtil.setAaiProps();
+        SupportUtil.setGuardProps();
+        SupportUtil.setSdncProps();
+        SupportUtil.setSoProps();
+        SupportUtil.setVfcProps();
+        SupportUtil.setPuProp();
+
+        LoggerUtil.setLevel(LoggerUtil.ROOT_LOGGER, "INFO");
+
+        PolicyEngineConstants.getManager().configure(new Properties());
+        assertTrue(PolicyEngineConstants.getManager().start());
+        Properties noopSinkProperties = new Properties();
+        noopSinkProperties.put(PolicyEndPointProperties.PROPERTY_NOOP_SINK_TOPICS,
+                        "APPC-LCM-READ,APPC-CL,SDNR-CL,POLICY-CL-MGT");
+        noopSinkProperties.put("noop.sink.topics.APPC-LCM-READ.events", "org.onap.policy.appclcm.LcmRequestWrapper");
+        noopSinkProperties.put("noop.sink.topics.APPC-LCM-READ.events.custom.gson",
+                "org.onap.policy.appclcm.util.Serialization,gson");
+        noopSinkProperties.put("noop.sink.topics.APPC-CL.events", "org.onap.policy.appc.Response");
+        noopSinkProperties.put("noop.sink.topics.APPC-CL.events.custom.gson",
+                "org.onap.policy.appc.util.Serialization,gsonPretty");
+        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events",
+                "org.onap.policy.controlloop.VirtualControlLoopNotification");
+        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events.custom.gson",
+                "org.onap.policy.controlloop.util.Serialization,gsonPretty");
+        noopTopics = TopicEndpointManager.getManager().addTopicSinks(noopSinkProperties);
+
+        EventProtocolCoderConstants.getManager().addEncoder(EventProtocolParams.builder()
+                .groupId(JUNIT_GROUP_ID)
+                .artifactId(JUNIT_ARTIFACT_ID)
+                .topic("POLICY-CL-MGT")
+                .eventClass("org.onap.policy.controlloop.VirtualControlLoopNotification")
+                .protocolFilter(new JsonProtocolFilter())
+                .modelClassLoaderHash(1111));
+        EventProtocolCoderConstants.getManager().addEncoder(EventProtocolParams.builder()
+                .groupId(JUNIT_GROUP_ID)
+                .artifactId(JUNIT_ARTIFACT_ID)
+                .topic("APPC-LCM-READ")
+                .eventClass("org.onap.policy.appclcm.LcmRequestWrapper")
+                .protocolFilter(new JsonProtocolFilter())
+                .modelClassLoaderHash(1111));
+        EventProtocolCoderConstants.getManager().addEncoder(EventProtocolParams.builder()
+                .groupId(JUNIT_GROUP_ID)
+                .artifactId(JUNIT_ARTIFACT_ID)
+                .topic("APPC-CL")
+                .eventClass("org.onap.policy.appc.Request")
+                .protocolFilter(new JsonProtocolFilter())
+                .modelClassLoaderHash(1111));
+        EventProtocolCoderConstants.getManager().addEncoder(EventProtocolParams.builder()
+                .groupId(JUNIT_GROUP_ID)
+                .artifactId(JUNIT_ARTIFACT_ID)
+                .topic("SDNR-CL")
+                .eventClass("org.onap.policy.sdnr.PciRequestWrapper")
+                .protocolFilter(new JsonProtocolFilter())
+                .modelClassLoaderHash(1111));
+        try {
+            SupportUtil.buildAaiSim();
+            SupportUtil.buildSdncSim();
+            SupportUtil.buildSoSim();
+            SupportUtil.buildVfcSim();
+            SupportUtil.buildGuardSim();
+        } catch (Exception e) {
+            fail(e.getMessage());
+        }
+
+
+        /*
+         * Start the kie session
+         */
+        try {
+            kieSession = startSession(droolsTemplate, yamlFile, policyScope,
+                            policyName, policyVersion);
+        } catch (IOException e) {
+            e.printStackTrace();
+            logger.debug("Could not create kieSession");
+            fail("Could not create kieSession");
+        }
+    }
+
+    /**
+     * Stops the simulators and the kie session.
+     */
+    @AfterClass
+    public static void tearDownAfterClass() {
+        /*
+         * Gracefully shut down the kie session
+         */
+        kieSession.dispose();
+
+        PolicyEngineConstants.getManager().stop();
+        HttpServletServerFactoryInstance.getServerFactory().destroy();
+        PolicyControllerConstants.getFactory().shutdown();
+        TopicEndpointManager.getManager().shutdown();
+    }
+
+    /**
+     * This method will start a kie session and instantiate the Policy Engine.
+     *
+     * @param droolsTemplate the DRL rules file
+     * @param yamlFile the yaml file containing the policies
+     * @param policyScope scope for policy
+     * @param policyName name of the policy
+     * @param policyVersion version of the policy
+     * @return the kieSession to be used to insert facts
+     * @throws IOException IO exception
+     */
+    private static KieSession startSession(String droolsTemplate, String yamlFile, String policyScope,
+            String policyName, String policyVersion) throws IOException {
+
+        /*
+         * Load policies from yaml
+         */
+        pair = SupportUtil.loadYaml(yamlFile);
+        assertNotNull(pair);
+        assertNotNull(pair.first);
+        assertNotNull(pair.first.getControlLoop());
+        assertNotNull(pair.first.getControlLoop().getControlLoopName());
+        assertTrue(pair.first.getControlLoop().getControlLoopName().length() > 0);
+
+        /*
+         * Construct a kie session
+         */
+        final KieSession kieSession = SupportUtil.buildContainer(droolsTemplate,
+                pair.first.getControlLoop().getControlLoopName(),
+                policyScope, policyName, policyVersion, URLEncoder.encode(pair.second, "UTF-8"));
+
+        /*
+         * Retrieve the Policy Engine
+         */
+
+        logger.debug("============");
+        logger.debug(URLEncoder.encode(pair.second, "UTF-8"));
+        logger.debug("============");
+
+        return kieSession;
+    }
+
+    /**
+     * This method will dump all the facts in the working memory.
+     *
+     * @param kieSession the session containing the facts
+     */
+    public void dumpFacts(KieSession kieSession) {
+        logger.debug("Fact Count: {}", kieSession.getFactCount());
+        for (FactHandle handle : kieSession.getFactHandles()) {
+            logger.debug("FACT: {}", handle);
+        }
+    }
+
+}
 
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager;
 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
-import org.onap.policy.drools.protocol.coders.EventProtocolCoder;
+import org.onap.policy.drools.protocol.coders.EventProtocolCoderConstants;
 import org.onap.policy.drools.protocol.coders.EventProtocolParams;
 import org.onap.policy.drools.protocol.coders.JsonProtocolFilter;
-import org.onap.policy.drools.system.PolicyController;
-import org.onap.policy.drools.system.PolicyEngine;
+import org.onap.policy.drools.system.PolicyControllerConstants;
+import org.onap.policy.drools.system.PolicyEngineConstants;
 import org.onap.policy.drools.utils.logging.LoggerUtil;
 import org.onap.policy.template.demo.SupportUtil.Pair;
 import org.slf4j.Logger;
     public static void setUpSimulator() {
         LoggerUtil.setLevel(LoggerUtil.ROOT_LOGGER, "INFO");
 
-        saveGuardFlag = PolicyEngine.manager.getEnvironmentProperty(GUARD_DISABLED);
-        PolicyEngine.manager.getEnvironment().setProperty(GUARD_DISABLED, "true");
+        saveGuardFlag = PolicyEngineConstants.getManager().getEnvironmentProperty(GUARD_DISABLED);
+        PolicyEngineConstants.getManager().getEnvironment().setProperty(GUARD_DISABLED, "true");
 
         SupportUtil.setAaiProps();
 
-        PolicyEngine.manager.configure(new Properties());
-        assertTrue(PolicyEngine.manager.start());
+        PolicyEngineConstants.getManager().configure(new Properties());
+        assertTrue(PolicyEngineConstants.getManager().start());
         Properties noopSinkProperties = new Properties();
         noopSinkProperties.put(PolicyEndPointProperties.PROPERTY_NOOP_SINK_TOPICS, "APPC-CL,POLICY-CL-MGT");
         noopSinkProperties.put("noop.sink.topics.APPC-CL.events", "org.onap.policy.appc.Response");
                         "org.onap.policy.controlloop.util.Serialization,gsonPretty");
         final List<TopicSink> noopTopics = TopicEndpointManager.getManager().addTopicSinks(noopSinkProperties);
 
-        EventProtocolCoder.manager.addEncoder(EventProtocolParams.builder()
+        EventProtocolCoderConstants.getManager().addEncoder(EventProtocolParams.builder()
                 .groupId("junit.groupId")
                 .artifactId("junit.artifactId")
                 .topic("POLICY-CL-MGT")
                 .eventClass("org.onap.policy.controlloop.VirtualControlLoopNotification")
                 .protocolFilter(new JsonProtocolFilter())
                 .modelClassLoaderHash(1111));
-        EventProtocolCoder.manager.addEncoder(EventProtocolParams.builder()
+        EventProtocolCoderConstants.getManager().addEncoder(EventProtocolParams.builder()
                 .groupId("junit.groupId")
                 .artifactId("junit.artifactId")
                 .topic("APPC-CL")
     public static void tearDown() {
         kieSession.dispose();
 
-        PolicyEngine.manager.stop();
+        PolicyEngineConstants.getManager().stop();
         HttpServletServerFactoryInstance.getServerFactory().destroy();
-        PolicyController.factory.shutdown();
+        PolicyControllerConstants.getFactory().shutdown();
         TopicEndpointManager.getManager().shutdown();
 
         if (saveGuardFlag == null) {
-            PolicyEngine.manager.getEnvironment().remove(GUARD_DISABLED);
+            PolicyEngineConstants.getManager().getEnvironment().remove(GUARD_DISABLED);
 
         } else {
-            PolicyEngine.manager.getEnvironment().setProperty(GUARD_DISABLED, saveGuardFlag);
+            PolicyEngineConstants.getManager().getEnvironment().setProperty(GUARD_DISABLED, saveGuardFlag);
         }
     }
 
 
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import java.io.IOException;
-import java.net.URLEncoder;
 import java.time.Instant;
 import java.util.HashMap;
-import java.util.List;
-import java.util.Properties;
 import java.util.UUID;
-import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.kie.api.runtime.KieSession;
-import org.kie.api.runtime.rule.FactHandle;
 import org.onap.policy.appclcm.LcmRequest;
 import org.onap.policy.appclcm.LcmRequestWrapper;
 import org.onap.policy.appclcm.LcmResponse;
 import org.onap.policy.appclcm.LcmResponseWrapper;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
-import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
 import org.onap.policy.common.endpoints.event.comm.TopicListener;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
-import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
-import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties;
 import org.onap.policy.controlloop.ControlLoopEventStatus;
 import org.onap.policy.controlloop.ControlLoopNotificationType;
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.VirtualControlLoopNotification;
 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
-import org.onap.policy.drools.protocol.coders.EventProtocolCoder;
-import org.onap.policy.drools.protocol.coders.EventProtocolParams;
-import org.onap.policy.drools.protocol.coders.JsonProtocolFilter;
-import org.onap.policy.drools.system.PolicyController;
-import org.onap.policy.drools.system.PolicyEngine;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-public class ControlLoopFailureTest implements TopicListener {
+public class ControlLoopFailureTest extends ControlLoopBase implements TopicListener {
 
-    private static final Logger logger = LoggerFactory.getLogger(ControlLoopFailureTest.class);
-
-    private static List<? extends TopicSink> noopTopics;
-
-    private static KieSession kieSession;
-    private static SupportUtil.Pair<ControlLoopPolicy, String> pair;
-    private UUID requestId;
     private UUID requestId2;
     private UUID requestId3;
     private int eventCount;
 
-    static {
-        /* Set environment properties */
-        SupportUtil.setAaiProps();
-        SupportUtil.setGuardProps();
-        SupportUtil.setPuProp();
-    }
-
     /**
      * Setup simulator.
      */
     @BeforeClass
-    public static void setUpSimulator() {
-        PolicyEngine.manager.configure(new Properties());
-        assertTrue(PolicyEngine.manager.start());
-        Properties noopSinkProperties = new Properties();
-        noopSinkProperties.put(PolicyEndPointProperties.PROPERTY_NOOP_SINK_TOPICS, "APPC-LCM-READ,POLICY-CL-MGT");
-        noopSinkProperties.put("noop.sink.topics.APPC-LCM-READ.events", "org.onap.policy.appclcm.LcmRequestWrapper");
-        noopSinkProperties.put("noop.sink.topics.APPC-LCM-READ.events.custom.gson",
-                "org.onap.policy.appclcm.util.Serialization,gson");
-        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events",
-                "org.onap.policy.controlloop.VirtualControlLoopNotification");
-        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events.custom.gson",
-                "org.onap.policy.controlloop.util.Serialization,gsonPretty");
-        noopTopics = TopicEndpointManager.getManager().addTopicSinks(noopSinkProperties);
-
-        EventProtocolCoder.manager.addEncoder(EventProtocolParams.builder()
-                .groupId("junit.groupId")
-                .artifactId("junit.artifactId")
-                .topic("POLICY-CL-MGT")
-                .eventClass("org.onap.policy.controlloop.VirtualControlLoopNotification")
-                .protocolFilter(new JsonProtocolFilter())
-                .modelClassLoaderHash(1111));
-        EventProtocolCoder.manager.addEncoder(EventProtocolParams.builder()
-                .groupId("junit.groupId")
-                .artifactId("junit.artifactId")
-                .topic("APPC-LCM-READ")
-                .eventClass("org.onap.policy.appclcm.LcmRequestWrapper")
-                .protocolFilter(new JsonProtocolFilter())
-                .modelClassLoaderHash(1111));
-        try {
-            SupportUtil.buildAaiSim();
-            SupportUtil.buildGuardSim();
-        } catch (Exception e) {
-            fail(e.getMessage());
-        }
-
-        /*
-         * Start the kie session
-         */
-        try {
-            kieSession = startSession(
-                    "../archetype-cl-amsterdam/src/main/resources/archetype-resources"
-                    + "/src/main/resources/__closedLoopControlName__.drl",
-                    "src/test/resources/yaml/policy_ControlLoop_vCPE.yaml",
-                    "service=ServiceDemo;resource=Res1Demo;type=operational", "CL_vCPE",
-                    "org.onap.closed_loop.ServiceDemo:VNFS:1.0.0");
-        } catch (IOException e) {
-            e.printStackTrace();
-            logger.debug("Could not create kieSession");
-            fail("Could not create kieSession");
-        }
-    }
-
-    /**
-     * Tear down simulator.
-     */
-    @AfterClass
-    public static void tearDownSimulator() {
-        /*
-         * Gracefully shut down the kie session
-         */
-        kieSession.dispose();
-
-        PolicyEngine.manager.stop();
-        HttpServletServerFactoryInstance.getServerFactory().destroy();
-        PolicyController.factory.shutdown();
-        TopicEndpointManager.getManager().shutdown();
+    public static void setUpBeforeClass() {
+        ControlLoopBase.setUpBeforeClass(
+            "../archetype-cl-amsterdam/src/main/resources/archetype-resources"
+                            + "/src/main/resources/__closedLoopControlName__.drl",
+            "src/test/resources/yaml/policy_ControlLoop_vCPE.yaml",
+            "service=ServiceDemo;resource=Res1Demo;type=operational",
+            "CL_vCPE",
+            "org.onap.closed_loop.ServiceDemo:VNFS:1.0.0");
     }
 
     /**
          * Print what's left in memory
          */
         dumpFacts(kieSession);
-
-    }
-
-    /**
-     * This method will start a kie session and instantiate the Policy Engine.
-     *
-     * @param droolsTemplate the DRL rules file
-     * @param yamlFile the yaml file containing the policies
-     * @param policyScope scope for policy
-     * @param policyName name of the policy
-     * @param policyVersion version of the policy
-     * @return the kieSession to be used to insert facts
-     * @throws IOException throws IO exception
-     */
-    private static KieSession startSession(String droolsTemplate, String yamlFile, String policyScope,
-            String policyName, String policyVersion) throws IOException {
-
-        /*
-         * Load policies from yaml
-         */
-        pair = SupportUtil.loadYaml(yamlFile);
-        assertNotNull(pair);
-        assertNotNull(pair.first);
-        assertNotNull(pair.first.getControlLoop());
-        assertNotNull(pair.first.getControlLoop().getControlLoopName());
-        assertTrue(pair.first.getControlLoop().getControlLoopName().length() > 0);
-
-        /*
-         * Construct a kie session
-         */
-        final KieSession kieSession = SupportUtil.buildContainer(droolsTemplate,
-                pair.first.getControlLoop().getControlLoopName(),
-                policyScope, policyName, policyVersion, URLEncoder.encode(pair.second, "UTF-8"));
-
-        /*
-         * Retrieve the Policy Engine
-         */
-
-        logger.debug("============");
-        logger.debug(URLEncoder.encode(pair.second, "UTF-8"));
-        logger.debug("============");
-
-        return kieSession;
     }
 
     /*
         event.setClosedLoopEventStatus(status);
         kieSession.insert(event);
     }
-
-    /**
-     * This method will dump all the facts in the working memory.
-     *
-     * @param kieSession the session containing the facts
-     */
-    public void dumpFacts(KieSession kieSession) {
-        logger.debug("Fact Count: {}", kieSession.getFactCount());
-        for (FactHandle handle : kieSession.getFactHandles()) {
-            logger.debug("FACT: {}", handle);
-        }
-    }
-
 }
-
 
 import org.onap.policy.common.endpoints.http.server.HttpServletServer;
 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
 import org.onap.policy.controlloop.policy.guard.ControlLoopGuard;
-import org.onap.policy.drools.system.PolicyEngine;
+import org.onap.policy.drools.system.PolicyEngineConstants;
 import org.onap.policy.guard.PolicyGuardYamlToXacml;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
      *  Set the A&AI properties.
      */
     public static void setAaiProps() {
-        PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666");
-        PolicyEngine.manager.setEnvironmentProperty("aai.username", "AAI");
-        PolicyEngine.manager.setEnvironmentProperty("aai.password", "AAI");
+        PolicyEngineConstants.getManager().setEnvironmentProperty("aai.url", "http://localhost:6666");
+        PolicyEngineConstants.getManager().setEnvironmentProperty("aai.username", "AAI");
+        PolicyEngineConstants.getManager().setEnvironmentProperty("aai.password", "AAI");
     }
 
     /**
      *  Set the SO properties.
      */
     public static void setSoProps() {
-        PolicyEngine.manager.setEnvironmentProperty("so.url", "http://localhost:6667");
-        PolicyEngine.manager.setEnvironmentProperty("so.username", "SO");
-        PolicyEngine.manager.setEnvironmentProperty("so.password", "SO");
+        PolicyEngineConstants.getManager().setEnvironmentProperty("so.url", "http://localhost:6667");
+        PolicyEngineConstants.getManager().setEnvironmentProperty("so.username", "SO");
+        PolicyEngineConstants.getManager().setEnvironmentProperty("so.password", "SO");
     }
 
     /**
      *  Set the SDNC properties.
      */
     public static void setSdncProps() {
-        PolicyEngine.manager.setEnvironmentProperty("sdnc.url", "http://localhost:6670/restconf/operations");
-        PolicyEngine.manager.setEnvironmentProperty("sdnc.username", "sdnc");
-        PolicyEngine.manager.setEnvironmentProperty("sdnc.password", "sdnc");
+        PolicyEngineConstants.getManager().setEnvironmentProperty("sdnc.url", "http://localhost:6670/restconf/operations");
+        PolicyEngineConstants.getManager().setEnvironmentProperty("sdnc.username", "sdnc");
+        PolicyEngineConstants.getManager().setEnvironmentProperty("sdnc.password", "sdnc");
     }
 
     /**
         /*
          * Guard PDP-x connection Properties
          */
-        PolicyEngine.manager.setEnvironmentProperty(org.onap.policy.guard.Util.PROP_GUARD_URL,         "http://localhost:6669/policy/pdpx/v1/decision");
-        PolicyEngine.manager.setEnvironmentProperty(org.onap.policy.guard.Util.PROP_GUARD_USER,        "python");
-        PolicyEngine.manager.setEnvironmentProperty(org.onap.policy.guard.Util.PROP_GUARD_PASS,        "test");
-        PolicyEngine.manager.setEnvironmentProperty(org.onap.policy.guard.Util.PROP_GUARD_DISABLED,    "false");
+        PolicyEngineConstants.getManager().setEnvironmentProperty(org.onap.policy.guard.Util.PROP_GUARD_URL,
+                        "http://localhost:6669/policy/pdpx/v1/decision");
+        PolicyEngineConstants.getManager().setEnvironmentProperty(org.onap.policy.guard.Util.PROP_GUARD_USER, "python");
+        PolicyEngineConstants.getManager().setEnvironmentProperty(org.onap.policy.guard.Util.PROP_GUARD_PASS, "test");
+        PolicyEngineConstants.getManager().setEnvironmentProperty(org.onap.policy.guard.Util.PROP_GUARD_DISABLED,
+                        "false");
     }
 
     /**
      *  Set the VFC properties.
      */
     public static void setVfcProps() {
-        PolicyEngine.manager.setEnvironmentProperty("vfc.url", "http://localhost:6668/api/nslcm/v1");
-        PolicyEngine.manager.setEnvironmentProperty("vfc.username", "VFC");
-        PolicyEngine.manager.setEnvironmentProperty("vfc.password", "VFC");
+        PolicyEngineConstants.getManager().setEnvironmentProperty("vfc.url", "http://localhost:6668/api/nslcm/v1");
+        PolicyEngineConstants.getManager().setEnvironmentProperty("vfc.username", "VFC");
+        PolicyEngineConstants.getManager().setEnvironmentProperty("vfc.password", "VFC");
     }
 
     /**
 
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import java.io.IOException;
-import java.net.URLEncoder;
 import java.time.Instant;
 import java.util.HashMap;
-import java.util.List;
-import java.util.Properties;
 import java.util.UUID;
-import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.kie.api.runtime.KieSession;
-import org.kie.api.runtime.rule.FactHandle;
 import org.onap.policy.appclcm.LcmRequest;
 import org.onap.policy.appclcm.LcmRequestWrapper;
 import org.onap.policy.appclcm.LcmResponse;
 import org.onap.policy.appclcm.LcmResponseWrapper;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
-import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
 import org.onap.policy.common.endpoints.event.comm.TopicListener;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
-import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
-import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties;
 import org.onap.policy.controlloop.ControlLoopEventStatus;
 import org.onap.policy.controlloop.ControlLoopNotificationType;
 import org.onap.policy.controlloop.ControlLoopTargetType;
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.VirtualControlLoopNotification;
 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
-import org.onap.policy.drools.protocol.coders.EventProtocolCoder;
-import org.onap.policy.drools.protocol.coders.EventProtocolParams;
-import org.onap.policy.drools.protocol.coders.JsonProtocolFilter;
-import org.onap.policy.drools.system.PolicyController;
-import org.onap.policy.drools.system.PolicyEngine;
-import org.onap.policy.drools.utils.logging.LoggerUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-public class VcpeControlLoopTest implements TopicListener {
-
-    private static final Logger logger = LoggerFactory.getLogger(VcpeControlLoopTest.class);
-
-    private static List<? extends TopicSink> noopTopics;
-
-    private static KieSession kieSession;
-    private static SupportUtil.Pair<ControlLoopPolicy, String> pair;
-    private UUID requestId;
-
-    static {
-        /* Set environment properties */
-        SupportUtil.setAaiProps();
-        SupportUtil.setGuardProps();
-        SupportUtil.setPuProp();
-        LoggerUtil.setLevel(LoggerUtil.ROOT_LOGGER, "INFO");
-    }
+public class VcpeControlLoopTest extends ControlLoopBase implements TopicListener {
 
     /**
      * Setup the simulator.
      */
     @BeforeClass
-    public static void setUpSimulator() {
-        PolicyEngine.manager.configure(new Properties());
-        assertTrue(PolicyEngine.manager.start());
-        Properties noopSinkProperties = new Properties();
-        noopSinkProperties.put(PolicyEndPointProperties.PROPERTY_NOOP_SINK_TOPICS, "APPC-LCM-READ,POLICY-CL-MGT");
-        noopSinkProperties.put("noop.sink.topics.APPC-LCM-READ.events", "org.onap.policy.appclcm.LcmRequestWrapper");
-        noopSinkProperties.put("noop.sink.topics.APPC-LCM-READ.events.custom.gson",
-                "org.onap.policy.appclcm.util.Serialization,gson");
-        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events",
-                "org.onap.policy.controlloop.VirtualControlLoopNotification");
-        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events.custom.gson",
-                "org.onap.policy.controlloop.util.Serialization,gsonPretty");
-        noopTopics = TopicEndpointManager.getManager().addTopicSinks(noopSinkProperties);
-
-        EventProtocolCoder.manager.addEncoder(EventProtocolParams.builder()
-                .groupId("junit.groupId")
-                .artifactId("junit.artifactId")
-                .topic("POLICY-CL-MGT")
-                .eventClass("org.onap.policy.controlloop.VirtualControlLoopNotification")
-                .protocolFilter(new JsonProtocolFilter())
-                .modelClassLoaderHash(1111));
-        EventProtocolCoder.manager.addEncoder(EventProtocolParams.builder()
-                .groupId("junit.groupId")
-                .artifactId("junit.artifactId")
-                .topic("APPC-LCM-READ")
-                .eventClass("org.onap.policy.appclcm.LcmRequestWrapper")
-                .protocolFilter(new JsonProtocolFilter())
-                .modelClassLoaderHash(1111));
-        try {
-            SupportUtil.buildAaiSim();
-            SupportUtil.buildGuardSim();
-        } catch (Exception e) {
-            fail(e.getMessage());
-        }
-        /*
-         * Start the kie session
-         */
-        try {
-            kieSession = startSession(
-                    "../archetype-cl-amsterdam/src/main/resources/archetype-resources"
-                    + "/src/main/resources/__closedLoopControlName__.drl",
-                    "src/test/resources/yaml/policy_ControlLoop_vCPE.yaml",
-                    "service=ServiceDemo;resource=Res1Demo;type=operational", "CL_vCPE",
-                    "org.onap.closed_loop.ServiceDemo:VNFS:1.0.0");
-        } catch (IOException e) {
-            e.printStackTrace();
-            logger.debug("Could not create kieSession");
-            fail("Could not create kieSession");
-        }
-    }
-
-    /**
-     * Tear down the simulator.
-     */
-    @AfterClass
-    public static void tearDownSimulator() {
-        /*
-         * Gracefully shut down the kie session
-         */
-        kieSession.dispose();
-
-        PolicyEngine.manager.stop();
-        HttpServletServerFactoryInstance.getServerFactory().destroy();
-        PolicyController.factory.shutdown();
-        TopicEndpointManager.getManager().shutdown();
+    public static void setUpBeforeClass() {
+        ControlLoopBase.setUpBeforeClass(
+            "../archetype-cl-amsterdam/src/main/resources/archetype-resources"
+                            + "/src/main/resources/__closedLoopControlName__.drl",
+            "src/test/resources/yaml/policy_ControlLoop_vCPE.yaml",
+            "service=ServiceDemo;resource=Res1Demo;type=operational",
+            "CL_vCPE",
+            "org.onap.closed_loop.ServiceDemo:VNFS:1.0.0");
     }
 
     @Test
          * Print what's left in memory
          */
         dumpFacts(kieSession);
-
-    }
-
-    /**
-     * This method will start a kie session and instantiate the Policy Engine.
-     *
-     * @param droolsTemplate the DRL rules file
-     * @param yamlFile the yaml file containing the policies
-     * @param policyScope scope for policy
-     * @param policyName name of the policy
-     * @param policyVersion version of the policy
-     * @return the kieSession to be used to insert facts
-     * @throws IOException IO exception
-     */
-    private static KieSession startSession(String droolsTemplate, String yamlFile, String policyScope,
-            String policyName, String policyVersion) throws IOException {
-
-        /*
-         * Load policies from yaml
-         */
-        pair = SupportUtil.loadYaml(yamlFile);
-        assertNotNull(pair);
-        assertNotNull(pair.first);
-        assertNotNull(pair.first.getControlLoop());
-        assertNotNull(pair.first.getControlLoop().getControlLoopName());
-        assertTrue(pair.first.getControlLoop().getControlLoopName().length() > 0);
-
-        /*
-         * Construct a kie session
-         */
-        final KieSession kieSession = SupportUtil.buildContainer(droolsTemplate,
-                pair.first.getControlLoop().getControlLoopName(),
-                policyScope, policyName, policyVersion, URLEncoder.encode(pair.second, "UTF-8"));
-
-        /*
-         * Retrieve the Policy Engine
-         */
-
-        logger.debug("============");
-        logger.debug(URLEncoder.encode(pair.second, "UTF-8"));
-        logger.debug("============");
-
-        return kieSession;
     }
 
     /*
         event.setClosedLoopEventStatus(status);
         kieSession.insert(event);
     }
-
-    /**
-     * This method will dump all the facts in the working memory.
-     *
-     * @param kieSession the session containing the facts
-     */
-    public void dumpFacts(KieSession kieSession) {
-        logger.debug("Fact Count: {}", kieSession.getFactCount());
-        for (FactHandle handle : kieSession.getFactHandles()) {
-            logger.debug("FACT: {}", handle);
-        }
-    }
-
 }
 
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import java.io.IOException;
-import java.net.URLEncoder;
 import java.time.Instant;
 import java.util.HashMap;
-import java.util.List;
-import java.util.Properties;
 import java.util.UUID;
-import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.kie.api.runtime.KieSession;
-import org.kie.api.runtime.rule.FactHandle;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
-import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
 import org.onap.policy.common.endpoints.event.comm.TopicListener;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
-import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
-import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties;
 import org.onap.policy.controlloop.ControlLoopEventStatus;
 import org.onap.policy.controlloop.ControlLoopNotificationType;
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.VirtualControlLoopNotification;
 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
-import org.onap.policy.drools.protocol.coders.EventProtocolCoder;
-import org.onap.policy.drools.protocol.coders.EventProtocolParams;
-import org.onap.policy.drools.protocol.coders.JsonProtocolFilter;
-import org.onap.policy.drools.system.PolicyController;
-import org.onap.policy.drools.system.PolicyEngine;
-import org.onap.policy.drools.utils.logging.LoggerUtil;
 import org.onap.policy.so.SoRequest;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-public class VdnsControlLoopTest implements TopicListener {
-
-    private static final Logger logger = LoggerFactory.getLogger(VdnsControlLoopTest.class);
-
-    private static List<? extends TopicSink> noopTopics;
-
-    private static KieSession kieSession;
-    private static SupportUtil.Pair<ControlLoopPolicy, String> pair;
-    private UUID requestId;
-
-    static {
-        /* Set environment properties */
-        SupportUtil.setAaiProps();
-        SupportUtil.setSoProps();
-        SupportUtil.setGuardProps();
-        SupportUtil.setPuProp();
-        LoggerUtil.setLevel(LoggerUtil.ROOT_LOGGER, "INFO");
-    }
+public class VdnsControlLoopTest extends ControlLoopBase implements TopicListener {
 
     /**
      * Setup the simulator.
      */
     @BeforeClass
-    public static void setUpSimulator() {
-        PolicyEngine.manager.configure(new Properties());
-        assertTrue(PolicyEngine.manager.start());
-        Properties noopSinkProperties = new Properties();
-        noopSinkProperties.put(PolicyEndPointProperties.PROPERTY_NOOP_SINK_TOPICS, "POLICY-CL-MGT");
-        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events",
-                "org.onap.policy.controlloop.VirtualControlLoopNotification");
-        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events.custom.gson",
-                "org.onap.policy.controlloop.util.Serialization,gsonPretty");
-        noopTopics = TopicEndpointManager.getManager().addTopicSinks(noopSinkProperties);
-
-        EventProtocolCoder.manager.addEncoder(EventProtocolParams.builder()
-                .groupId("junit.groupId")
-                .artifactId("junit.artifactId")
-                .topic("POLICY-CL-MGT")
-                .eventClass("org.onap.policy.controlloop.VirtualControlLoopNotification")
-                .protocolFilter(new JsonProtocolFilter())
-                .modelClassLoaderHash(1111));
-
-        try {
-            SupportUtil.buildAaiSim();
-            SupportUtil.buildSoSim();
-            SupportUtil.buildGuardSim();
-        } catch (Exception e) {
-            fail(e.getMessage());
-        }
-
-        /*
-         * Start the kie session
-         */
-        try {
-            kieSession = startSession(
-                    "../archetype-cl-amsterdam/src/main/resources/archetype-resources/"
-                    + "src/main/resources/__closedLoopControlName__.drl",
-                    "src/test/resources/yaml/policy_ControlLoop_SO-test.yaml", "type=operational", "CL_vDNS", "v2.0");
-        } catch (IOException e) {
-            e.printStackTrace();
-            logger.debug("Could not create kieSession");
-            fail("Could not create kieSession");
-        }
-    }
-
-    /**
-     * Tear down the simulator.
-     */
-    @AfterClass
-    public static void tearDownSimulator() {
-
-        /*
-         * Gracefully shut down the kie session
-         */
-        kieSession.dispose();
-
-        PolicyEngine.manager.stop();
-        HttpServletServerFactoryInstance.getServerFactory().destroy();
-        PolicyController.factory.shutdown();
-        TopicEndpointManager.getManager().shutdown();
+    public static void setUpBeforeClass() {
+        ControlLoopBase.setUpBeforeClass(
+            "../archetype-cl-amsterdam/src/main/resources/archetype-resources/"
+                            + "src/main/resources/__closedLoopControlName__.drl",
+            "src/test/resources/yaml/policy_ControlLoop_SO-test.yaml",
+            "type=operational",
+            "CL_vDNS",
+            "v2.0");
     }
 
     @Test
         dumpFacts(kieSession);
     }
 
-    /**
-     * This method will start a kie session and instantiate the Policy Engine.
-     *
-     * @param droolsTemplate the DRL rules file
-     * @param yamlFile the yaml file containing the policies
-     * @param policyScope scope for policy
-     * @param policyName name of the policy
-     * @param policyVersion version of the policy
-     * @return the kieSession to be used to insert facts
-     * @throws IOException IO Exception
-     */
-    private static KieSession startSession(String droolsTemplate, String yamlFile, String policyScope,
-            String policyName, String policyVersion) throws IOException {
-
-        /*
-         * Load policies from yaml
-         */
-        pair = SupportUtil.loadYaml(yamlFile);
-        assertNotNull(pair);
-        assertNotNull(pair.first);
-        assertNotNull(pair.first.getControlLoop());
-        assertNotNull(pair.first.getControlLoop().getControlLoopName());
-        assertTrue(pair.first.getControlLoop().getControlLoopName().length() > 0);
-
-        /*
-         * Construct a kie session
-         */
-        final KieSession kieSession = SupportUtil.buildContainer(droolsTemplate,
-                pair.first.getControlLoop().getControlLoopName(),
-                policyScope, policyName, policyVersion, URLEncoder.encode(pair.second, "UTF-8"));
-
-        /*
-         * Retrieve the Policy Engine
-         */
-
-        logger.debug("============");
-        logger.debug(URLEncoder.encode(pair.second, "UTF-8"));
-        logger.debug("============");
-
-        return kieSession;
-    }
-
     /*
      * (non-Javadoc)
      *
         event.setClosedLoopEventStatus(status);
         kieSession.insert(event);
     }
-
-    /**
-     * This method will dump all the facts in the working memory.
-     *
-     * @param kieSession the session containing the facts
-     */
-    public void dumpFacts(KieSession kieSession) {
-        logger.debug("Fact Count: {}", kieSession.getFactCount());
-        for (FactHandle handle : kieSession.getFactHandles()) {
-            logger.debug("FACT: {}", handle);
-        }
-    }
 }
 
 import static org.junit.Assert.fail;
 
 import java.io.IOException;
-import java.net.URLEncoder;
 import java.time.Instant;
 import java.util.HashMap;
-import java.util.List;
-import java.util.Properties;
 import java.util.UUID;
-import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.kie.api.runtime.KieSession;
-import org.kie.api.runtime.rule.FactHandle;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
-import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
 import org.onap.policy.common.endpoints.event.comm.TopicListener;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
-import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
-import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties;
 import org.onap.policy.controlloop.ControlLoopEventStatus;
 import org.onap.policy.controlloop.ControlLoopNotificationType;
 import org.onap.policy.controlloop.ControlLoopTargetType;
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.VirtualControlLoopNotification;
 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
-import org.onap.policy.drools.protocol.coders.EventProtocolCoder;
-import org.onap.policy.drools.protocol.coders.EventProtocolParams;
-import org.onap.policy.drools.protocol.coders.JsonProtocolFilter;
-import org.onap.policy.drools.system.PolicyController;
-import org.onap.policy.drools.system.PolicyEngine;
-import org.onap.policy.drools.utils.logging.LoggerUtil;
 import org.onap.policy.vfc.VfcRequest;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 
-public class VfcControlLoopTest implements TopicListener {
-
-    private static final Logger logger = LoggerFactory.getLogger(VfcControlLoopTest.class);
-
-    private static List<? extends TopicSink> noopTopics;
-
-    private static KieSession kieSession;
-    private static SupportUtil.Pair<ControlLoopPolicy, String> pair;
-    private UUID requestId;
-
-    static {
-        /* Set environment properties */
-        SupportUtil.setAaiProps();
-        SupportUtil.setVfcProps();
-        SupportUtil.setGuardProps();
-        SupportUtil.setPuProp();
-        LoggerUtil.setLevel(LoggerUtil.ROOT_LOGGER, "INFO");
-    }
+public class VfcControlLoopTest extends ControlLoopBase implements TopicListener {
 
     /**
      * Setup the simulator.
      */
     @BeforeClass
-    public static void setUpSimulator() {
-        PolicyEngine.manager.configure(new Properties());
-        assertTrue(PolicyEngine.manager.start());
-        Properties noopSinkProperties = new Properties();
-        noopSinkProperties.put(PolicyEndPointProperties.PROPERTY_NOOP_SINK_TOPICS, "POLICY-CL-MGT");
-        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events",
-                "org.onap.policy.controlloop.VirtualControlLoopNotification");
-        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events.custom.gson",
-                "org.onap.policy.controlloop.util.Serialization,gsonPretty");
-        noopTopics = TopicEndpointManager.getManager().addTopicSinks(noopSinkProperties);
-
-        EventProtocolCoder.manager.addEncoder(EventProtocolParams.builder()
-                .groupId("junit.groupId")
-                .artifactId("junit.artifactId")
-                .topic("POLICY-CL-MGT")
-                .eventClass("org.onap.policy.controlloop.VirtualControlLoopNotification")
-                .protocolFilter(new JsonProtocolFilter())
-                .modelClassLoaderHash(1111));
-
-        try {
-            SupportUtil.buildAaiSim();
-            SupportUtil.buildVfcSim();
-            SupportUtil.buildGuardSim();
-        } catch (Exception e) {
-            fail(e.getMessage());
-        }
-        /*
-         *
-         * Start the kie session
-         */
-        try {
-            kieSession = startSession(
-                    "../archetype-cl-amsterdam/src/main/resources/archetype-resources/"
-                    + "src/main/resources/__closedLoopControlName__.drl",
-                    "src/test/resources/yaml/policy_ControlLoop_VFC.yaml", "type=operational", "CL_VoLTE", "v2.0");
-        } catch (IOException e) {
-            e.printStackTrace();
-            logger.debug("Could not create kieSession");
-            fail("Could not create kieSession");
-        }
-    }
-
-    /**
-     * Tear down the simulator.
-     */
-    @AfterClass
-    public static void tearDownSimulator() {
-
-        /*
-         * Gracefully shut down the kie session
-         */
-        kieSession.dispose();
-
-        PolicyEngine.manager.stop();
-        HttpServletServerFactoryInstance.getServerFactory().destroy();
-        PolicyController.factory.shutdown();
-        TopicEndpointManager.getManager().shutdown();
+    public static void setUpBeforeClass() {
+        ControlLoopBase.setUpBeforeClass(
+            "../archetype-cl-amsterdam/src/main/resources/archetype-resources/"
+                            + "src/main/resources/__closedLoopControlName__.drl",
+            "src/test/resources/yaml/policy_ControlLoop_VFC.yaml",
+            "type=operational",
+            "CL_VoLTE",
+            "v2.0");
     }
 
     @Test
         dumpFacts(kieSession);
     }
 
-    /**
-     * This method will start a kie session and instantiate the Policy Engine.
-     *
-     * @param droolsTemplate the DRL rules file
-     * @param yamlFile the yaml file containing the policies
-     * @param policyScope scope for policy
-     * @param policyName name of the policy
-     * @param policyVersion version of the policy
-     * @return the kieSession to be used to insert facts
-     * @throws IOException IO Exception
-     */
-    private static KieSession startSession(String droolsTemplate, String yamlFile, String policyScope,
-            String policyName, String policyVersion) throws IOException {
-
-        /*
-         * Load policies from yaml
-         */
-        pair = SupportUtil.loadYaml(yamlFile);
-        assertNotNull(pair);
-        assertNotNull(pair.first);
-        assertNotNull(pair.first.getControlLoop());
-        assertNotNull(pair.first.getControlLoop().getControlLoopName());
-        assertTrue(pair.first.getControlLoop().getControlLoopName().length() > 0);
-
-        /*
-         * Construct a kie session
-         */
-        final KieSession kieSession = SupportUtil.buildContainer(droolsTemplate,
-                pair.first.getControlLoop().getControlLoopName(),
-                policyScope, policyName, policyVersion, URLEncoder.encode(pair.second, "UTF-8"));
-
-        /*
-         * Retrieve the Policy Engine
-         */
-
-        logger.debug("============");
-        logger.debug(URLEncoder.encode(pair.second, "UTF-8"));
-        logger.debug("============");
-
-        return kieSession;
-    }
-
     /*
      * (non-Javadoc)
      *
         event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
         kieSession.insert(event);
     }
-
-    /**
-     * Dumps the kie session facts.
-     *
-     * @param kieSession input session
-     */
-    public static void dumpFacts(KieSession kieSession) {
-        logger.debug("Fact Count: " + kieSession.getFactCount());
-        for (FactHandle handle : kieSession.getFactHandles()) {
-            logger.debug("FACT: " + handle);
-        }
-    }
-
 }
-
 
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import java.io.IOException;
-import java.net.URLEncoder;
 import java.time.Instant;
 import java.util.HashMap;
-import java.util.List;
-import java.util.Properties;
 import java.util.UUID;
-import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.kie.api.runtime.KieSession;
-import org.kie.api.runtime.rule.FactHandle;
 import org.onap.policy.appc.Request;
 import org.onap.policy.appc.Response;
 import org.onap.policy.appc.ResponseCode;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
-import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
 import org.onap.policy.common.endpoints.event.comm.TopicListener;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
-import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
-import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties;
 import org.onap.policy.controlloop.ControlLoopEventStatus;
 import org.onap.policy.controlloop.ControlLoopNotificationType;
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.VirtualControlLoopNotification;
 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
-import org.onap.policy.drools.protocol.coders.EventProtocolCoder;
-import org.onap.policy.drools.protocol.coders.EventProtocolParams;
-import org.onap.policy.drools.protocol.coders.JsonProtocolFilter;
-import org.onap.policy.drools.system.PolicyController;
-import org.onap.policy.drools.system.PolicyEngine;
-import org.onap.policy.drools.utils.logging.LoggerUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class VfwControlLoopTest implements TopicListener {
-
-    private static final Logger logger = LoggerFactory.getLogger(VfwControlLoopTest.class);
-
-    private static List<? extends TopicSink> noopTopics;
-
-    private static KieSession kieSession;
-    private static SupportUtil.Pair<ControlLoopPolicy, String> pair;
-    private UUID requestId;
-
-    static {
-        /* Set environment properties */
-        SupportUtil.setAaiProps();
-        SupportUtil.setGuardProps();
-        SupportUtil.setPuProp();
-        LoggerUtil.setLevel(LoggerUtil.ROOT_LOGGER, "INFO");
-    }
+
+public class VfwControlLoopTest extends ControlLoopBase implements TopicListener {
 
     /**
      * Setup the simulator.
      */
     @BeforeClass
-    public static void setUpSimulator() {
-        PolicyEngine.manager.configure(new Properties());
-        assertTrue(PolicyEngine.manager.start());
-        Properties noopSinkProperties = new Properties();
-        noopSinkProperties.put(PolicyEndPointProperties.PROPERTY_NOOP_SINK_TOPICS, "APPC-CL,POLICY-CL-MGT");
-        noopSinkProperties.put("noop.sink.topics.APPC-CL.events", "org.onap.policy.appc.Response");
-        noopSinkProperties.put("noop.sink.topics.APPC-CL.events.custom.gson",
-                "org.onap.policy.appc.util.Serialization,gsonPretty");
-        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events",
-                "org.onap.policy.controlloop.VirtualControlLoopNotification");
-        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events.custom.gson",
-                "org.onap.policy.controlloop.util.Serialization,gsonPretty");
-        noopTopics = TopicEndpointManager.getManager().addTopicSinks(noopSinkProperties);
-
-        EventProtocolCoder.manager.addEncoder(EventProtocolParams.builder()
-                .groupId("junit.groupId")
-                .artifactId("junit.artifactId")
-                .topic("POLICY-CL-MGT")
-                .eventClass("org.onap.policy.controlloop.VirtualControlLoopNotification")
-                .protocolFilter(new JsonProtocolFilter())
-                .modelClassLoaderHash(1111));
-        EventProtocolCoder.manager.addEncoder(EventProtocolParams.builder()
-                .groupId("junit.groupId")
-                .artifactId("junit.artifactId")
-                .topic("APPC-CL")
-                .eventClass("org.onap.policy.appc.Request")
-                .protocolFilter(new JsonProtocolFilter())
-                .modelClassLoaderHash(1111));
-
-        try {
-            SupportUtil.buildAaiSim();
-            SupportUtil.buildGuardSim();
-        } catch (Exception e) {
-            fail(e.getMessage());
-        }
-
-        /*
-         * Start the kie session
-         */
-        try {
-            kieSession = startSession(
-                    "../archetype-cl-amsterdam/src/main/resources/archetype-resources/src/"
-                    + "main/resources/__closedLoopControlName__.drl",
-                    "src/test/resources/yaml/policy_ControlLoop_vFW.yaml",
-                    "service=ServiceDemo;resource=Res1Demo;type=operational", "CL_vFW",
-                    "org.onap.closed_loop.ServiceDemo:VNFS:1.0.0");
-        } catch (IOException e) {
-            e.printStackTrace();
-            logger.debug("Could not create kieSession");
-            fail("Could not create kieSession");
-        }
-    }
-
-    /**
-     * Tear down the simulator.
-     */
-    @AfterClass
-    public static void tearDownSimulator() {
-        /*
-         * Gracefully shut down the kie session
-         */
-        kieSession.dispose();
-
-        PolicyEngine.manager.stop();
-        HttpServletServerFactoryInstance.getServerFactory().destroy();
-        PolicyController.factory.shutdown();
-        TopicEndpointManager.getManager().shutdown();
+    public static void setUpBeforeClass() {
+        ControlLoopBase.setUpBeforeClass(
+            "../archetype-cl-amsterdam/src/main/resources/archetype-resources/src/"
+                            + "main/resources/__closedLoopControlName__.drl",
+            "src/test/resources/yaml/policy_ControlLoop_vFW.yaml",
+            "service=ServiceDemo;resource=Res1Demo;type=operational",
+            "CL_vFW",
+            "org.onap.closed_loop.ServiceDemo:VNFS:1.0.0");
     }
 
     @Test
         dumpFacts(kieSession);
     }
 
-    /**
-     * This method will start a kie session and instantiate the Policy Engine.
-     *
-     * @param droolsTemplate the DRL rules file
-     * @param yamlFile the yaml file containing the policies
-     * @param policyScope scope for policy
-     * @param policyName name of the policy
-     * @param policyVersion version of the policy
-     * @return the kieSession to be used to insert facts
-     * @throws IOException IO Exception
-     */
-    private static KieSession startSession(String droolsTemplate, String yamlFile, String policyScope,
-            String policyName, String policyVersion) throws IOException {
-
-        /*
-         * Load policies from yaml
-         */
-        pair = SupportUtil.loadYaml(yamlFile);
-        assertNotNull(pair);
-        assertNotNull(pair.first);
-        assertNotNull(pair.first.getControlLoop());
-        assertNotNull(pair.first.getControlLoop().getControlLoopName());
-        assertTrue(pair.first.getControlLoop().getControlLoopName().length() > 0);
-
-        /*
-         * Construct a kie session
-         */
-        final KieSession kieSession = SupportUtil.buildContainer(droolsTemplate,
-                pair.first.getControlLoop().getControlLoopName(),
-                policyScope, policyName, policyVersion, URLEncoder.encode(pair.second, "UTF-8"));
-
-        /*
-         * Retrieve the Policy Engine
-         */
-
-        logger.debug("============");
-        logger.debug(URLEncoder.encode(pair.second, "UTF-8"));
-        logger.debug("============");
-
-        return kieSession;
-    }
-
     /*
      * @see org.onap.policy.drools.PolicyEngineListener#newEventNotification(java.lang.String)
      */
         event.setClosedLoopEventStatus(status);
         kieSession.insert(event);
     }
-
-    /**
-     * This method will dump all the facts in the working memory.
-     *
-     * @param kieSession the session containing the facts
-     */
-    public void dumpFacts(KieSession kieSession) {
-        logger.debug("Fact Count: {}", kieSession.getFactCount());
-        for (FactHandle handle : kieSession.getFactHandles()) {
-            logger.debug("FACT: {}", handle);
-        }
-    }
 }
 
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import java.io.IOException;
-import java.net.URLEncoder;
 import java.time.Instant;
 import java.util.HashMap;
-import java.util.List;
-import java.util.Properties;
 import java.util.UUID;
-import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.kie.api.runtime.KieSession;
-import org.kie.api.runtime.rule.FactHandle;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
-import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
 import org.onap.policy.common.endpoints.event.comm.TopicListener;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
-import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
-import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties;
 import org.onap.policy.controlloop.ControlLoopEventStatus;
 import org.onap.policy.controlloop.ControlLoopNotificationType;
 import org.onap.policy.controlloop.ControlLoopTargetType;
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.VirtualControlLoopNotification;
 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
-import org.onap.policy.drools.protocol.coders.EventProtocolCoder;
-import org.onap.policy.drools.protocol.coders.EventProtocolParams;
-import org.onap.policy.drools.protocol.coders.JsonProtocolFilter;
-import org.onap.policy.drools.system.PolicyController;
-import org.onap.policy.drools.system.PolicyEngine;
-import org.onap.policy.drools.utils.logging.LoggerUtil;
 import org.onap.policy.sdnr.PciRequest;
 import org.onap.policy.sdnr.PciRequestWrapper;
 import org.onap.policy.sdnr.PciResponse;
 import org.onap.policy.sdnr.PciResponseWrapper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-public class VpciControlLoopTest implements TopicListener {
-
-    private static final Logger logger = LoggerFactory.getLogger(VpciControlLoopTest.class);
-
-    private static List<? extends TopicSink> noopTopics;
-
-    private static KieSession kieSession;
-    private static SupportUtil.Pair<ControlLoopPolicy, String> pair;
-    private UUID requestId;
-
-    static {
-        /* Set environment properties */
-        SupportUtil.setAaiProps();
-        SupportUtil.setGuardProps();
-        SupportUtil.setPuProp();
-        LoggerUtil.setLevel(LoggerUtil.ROOT_LOGGER, "DEBUG");
-    }
+public class VpciControlLoopTest extends ControlLoopBase implements TopicListener {
 
     /**
      * Setup the simulator.
      */
     @BeforeClass
-    public static void setUpSimulator() {
-        PolicyEngine.manager.configure(new Properties());
-        assertTrue(PolicyEngine.manager.start());
-        Properties noopSinkProperties = new Properties();
-        noopSinkProperties.put(PolicyEndPointProperties.PROPERTY_NOOP_SINK_TOPICS, "SDNR-CL,POLICY-CL-MGT");
-        noopSinkProperties.put("noop.sink.topics.SDNR-CL.events", "org.onap.policy.sdnr.PciRequestWrapper");
-        noopSinkProperties.put("noop.sink.topics.SDNR-CL.events.custom.gson",
-                "org.onap.policy.sdnr.util.Serialization,gson");
-        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events",
-                "org.onap.policy.controlloop.VirtualControlLoopNotification");
-        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events.custom.gson",
-                "org.onap.policy.controlloop.util.Serialization,gsonPretty");
-        noopTopics = TopicEndpointManager.getManager().addTopicSinks(noopSinkProperties);
-
-        EventProtocolCoder.manager.addEncoder(EventProtocolParams.builder()
-                .groupId("junit.groupId")
-                .artifactId("junit.artifactId")
-                .topic("POLICY-CL-MGT")
-                .eventClass("org.onap.policy.controlloop.VirtualControlLoopNotification")
-                .protocolFilter(new JsonProtocolFilter())
-                .modelClassLoaderHash(1111));
-        EventProtocolCoder.manager.addEncoder(EventProtocolParams.builder()
-                .groupId("junit.groupId")
-                .artifactId("junit.artifactId")
-                .topic("SDNR-CL")
-                .eventClass("org.onap.policy.sdnr.PciRequestWrapper")
-                .protocolFilter(new JsonProtocolFilter())
-                .modelClassLoaderHash(1111));
-        try {
-            SupportUtil.buildAaiSim();
-            SupportUtil.buildGuardSim();
-        } catch (Exception e) {
-            fail(e.getMessage());
-        }
-        /*
-         * Start the kie session
-         */
-        try {
-            kieSession = startSession(
-                    "../archetype-cl-amsterdam/src/main/resources/archetype-resources"
-                            + "/src/main/resources/__closedLoopControlName__.drl",
-                    "src/test/resources/yaml/policy_ControlLoop_vPCI.yaml", "type=operational", "CL_vPCI", "v3.0.0");
-        } catch (IOException e) {
-            e.printStackTrace();
-            logger.debug("Could not create kieSession");
-            fail("Could not create kieSession");
-        }
-    }
-
-    /**
-     * Tear down the simulator.
-     */
-    @AfterClass
-    public static void tearDownSimulator() {
-        /*
-         * Gracefully shut down the kie session
-         */
-        kieSession.dispose();
-
-        PolicyEngine.manager.stop();
-        HttpServletServerFactoryInstance.getServerFactory().destroy();
-        PolicyController.factory.shutdown();
-        TopicEndpointManager.getManager().shutdown();
+    public static void setUpBeforeClass() {
+        ControlLoopBase.setUpBeforeClass(
+            "../archetype-cl-amsterdam/src/main/resources/archetype-resources"
+                    + "/src/main/resources/__closedLoopControlName__.drl",
+            "src/test/resources/yaml/policy_ControlLoop_vPCI.yaml",
+            "type=operational",
+            "CL_vPCI",
+            "v3.0.0");
     }
 
     @Test
 
     }
 
-    /**
-     * This method will start a kie session and instantiate the Policy Engine.
-     *
-     * @param droolsTemplate
-     *            the DRL rules file
-     * @param yamlFile
-     *            the yaml file containing the policies
-     * @param policyScope
-     *            scope for policy
-     * @param policyName
-     *            name of the policy
-     * @param policyVersion
-     *            version of the policy
-     * @return the kieSession to be used to insert facts
-     * @throws IOException
-     *             IO exception
-     */
-    private static KieSession startSession(String droolsTemplate, String yamlFile, String policyScope,
-            String policyName, String policyVersion) throws IOException {
-
-        /*
-         * Load policies from yaml
-         */
-        pair = SupportUtil.loadYaml(yamlFile);
-        assertNotNull(pair);
-        assertNotNull(pair.first);
-        assertNotNull(pair.first.getControlLoop());
-        assertNotNull(pair.first.getControlLoop().getControlLoopName());
-        assertTrue(pair.first.getControlLoop().getControlLoopName().length() > 0);
-
-        /*
-         * Construct a kie session
-         */
-        final KieSession kieSession = SupportUtil.buildContainer(droolsTemplate,
-                pair.first.getControlLoop().getControlLoopName(), policyScope, policyName, policyVersion,
-                URLEncoder.encode(pair.second, "UTF-8"));
-
-        /*
-         * Retrieve the Policy Engine
-         */
-
-        logger.debug("======controlloop======");
-        logger.debug(((ControlLoopPolicy) pair.first).toString());
-        logger.debug("======policies======");
-        logger.debug(URLEncoder.encode(pair.second, "UTF-8"));
-        logger.debug("============");
-
-        return kieSession;
-    }
-
     /*
      * (non-Javadoc)
      *
         logger.debug("\n============ event ===========\n {}", event);
         kieSession.insert(event);
     }
-
-    /**
-     * This method will dump all the facts in the working memory.
-     *
-     * @param kieSession
-     *            the session containing the facts
-     */
-    public void dumpFacts(KieSession kieSession) {
-        logger.debug("Fact Count: {}", kieSession.getFactCount());
-        for (FactHandle handle : kieSession.getFactHandles()) {
-            logger.debug("FACT: {}", handle);
-        }
-    }
-
 }
 
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import java.io.IOException;
-import java.net.URLEncoder;
 import java.time.Instant;
 import java.util.HashMap;
-import java.util.List;
-import java.util.Properties;
 import java.util.UUID;
-import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.kie.api.runtime.KieSession;
-import org.kie.api.runtime.rule.FactHandle;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
-import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
 import org.onap.policy.common.endpoints.event.comm.TopicListener;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
-import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
-import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties;
 import org.onap.policy.controlloop.ControlLoopEventStatus;
 import org.onap.policy.controlloop.ControlLoopNotificationType;
 import org.onap.policy.controlloop.ControlLoopTargetType;
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.VirtualControlLoopNotification;
 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
-import org.onap.policy.drools.protocol.coders.EventProtocolCoder;
-import org.onap.policy.drools.protocol.coders.EventProtocolParams;
-import org.onap.policy.drools.protocol.coders.JsonProtocolFilter;
-import org.onap.policy.drools.system.PolicyController;
-import org.onap.policy.drools.system.PolicyEngine;
-import org.onap.policy.drools.utils.logging.LoggerUtil;
 import org.onap.policy.sdnr.PciRequest;
 import org.onap.policy.sdnr.PciRequestWrapper;
 import org.onap.policy.sdnr.PciResponse;
 import org.onap.policy.sdnr.PciResponseWrapper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-public class VsonhControlLoopTest implements TopicListener {
-
-    private static final Logger logger = LoggerFactory.getLogger(VsonhControlLoopTest.class);
-
-    private static List<? extends TopicSink> noopTopics;
-
-    private static KieSession kieSession;
-    private static SupportUtil.Pair<ControlLoopPolicy, String> pair;
-    private UUID requestId;
-
-    static {
-        /* Set environment properties */
-        SupportUtil.setAaiProps();
-        SupportUtil.setGuardProps();
-        SupportUtil.setPuProp();
-        LoggerUtil.setLevel(LoggerUtil.ROOT_LOGGER, "DEBUG");
-    }
+public class VsonhControlLoopTest extends ControlLoopBase implements TopicListener {
 
     /**
      * Setup the simulator.
      */
     @BeforeClass
-    public static void setUpSimulator() {
-        PolicyEngine.manager.configure(new Properties());
-        assertTrue(PolicyEngine.manager.start());
-        Properties noopSinkProperties = new Properties();
-        noopSinkProperties.put(PolicyEndPointProperties.PROPERTY_NOOP_SINK_TOPICS, "SDNR-CL,POLICY-CL-MGT");
-        noopSinkProperties.put("noop.sink.topics.SDNR-CL.events", "org.onap.policy.sdnr.PciRequestWrapper");
-        noopSinkProperties.put("noop.sink.topics.SDNR-CL.events.custom.gson",
-                "org.onap.policy.sdnr.util.Serialization,gson");
-        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events",
-                "org.onap.policy.controlloop.VirtualControlLoopNotification");
-        noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events.custom.gson",
-                "org.onap.policy.controlloop.util.Serialization,gsonPretty");
-        noopTopics = TopicEndpointManager.getManager().addTopicSinks(noopSinkProperties);
-
-        EventProtocolCoder.manager.addEncoder(EventProtocolParams.builder()
-                .groupId("junit.groupId")
-                .artifactId("junit.artifactId")
-                .topic("POLICY-CL-MGT")
-                .eventClass("org.onap.policy.controlloop.VirtualControlLoopNotification")
-                .protocolFilter(new JsonProtocolFilter())
-                .modelClassLoaderHash(1111));
-        EventProtocolCoder.manager.addEncoder(EventProtocolParams.builder()
-                .groupId("junit.groupId")
-                .artifactId("junit.artifactId")
-                .topic("SDNR-CL")
-                .eventClass("org.onap.policy.sdnr.PciRequestWrapper")
-                .protocolFilter(new JsonProtocolFilter())
-                .modelClassLoaderHash(1111));
-        try {
-            SupportUtil.buildAaiSim();
-            SupportUtil.buildGuardSim();
-        } catch (Exception e) {
-            fail(e.getMessage());
-        }
-        /*
-         * Start the kie session
-         */
-        try {
-            kieSession = startSession(
-                    "../archetype-cl-amsterdam/src/main/resources/archetype-resources"
-                            + "/src/main/resources/__closedLoopControlName__.drl",
-                    "src/test/resources/yaml/policy_ControlLoop_vSONH.yaml", "type=operational", "CL_vSONH", "v4.0.0");
-        } catch (IOException e) {
-            e.printStackTrace();
-            logger.debug("Could not create kieSession");
-            fail("Could not create kieSession");
-        }
-    }
-
-    /**
-     * Tear down the simulator.
-     */
-    @AfterClass
-    public static void tearDownSimulator() {
-        /*
-         * Gracefully shut down the kie session
-         */
-        kieSession.dispose();
-
-        PolicyEngine.manager.stop();
-        HttpServletServerFactoryInstance.getServerFactory().destroy();
-        PolicyController.factory.shutdown();
-        TopicEndpointManager.getManager().shutdown();
+    public static void setUpBeforeClass() {
+        ControlLoopBase.setUpBeforeClass(
+            "../archetype-cl-amsterdam/src/main/resources/archetype-resources"
+                    + "/src/main/resources/__closedLoopControlName__.drl",
+            "src/test/resources/yaml/policy_ControlLoop_vSONH.yaml",
+            "type=operational",
+            "CL_vSONH",
+            "v4.0.0");
     }
 
     @Test
 
     }
 
-    /**
-     * This method will start a kie session and instantiate the Policy Engine.
-     *
-     * @param droolsTemplate
-     *            the DRL rules file
-     * @param yamlFile
-     *            the yaml file containing the policies
-     * @param policyScope
-     *            scope for policy
-     * @param policyName
-     *            name of the policy
-     * @param policyVersion
-     *            version of the policy
-     * @return the kieSession to be used to insert facts
-     * @throws IOException
-     *             IO exception
-     */
-    private static KieSession startSession(String droolsTemplate, String yamlFile, String policyScope,
-            String policyName, String policyVersion) throws IOException {
-
-        /*
-         * Load policies from yaml
-         */
-        pair = SupportUtil.loadYaml(yamlFile);
-        assertNotNull(pair);
-        assertNotNull(pair.first);
-        assertNotNull(pair.first.getControlLoop());
-        assertNotNull(pair.first.getControlLoop().getControlLoopName());
-        assertTrue(pair.first.getControlLoop().getControlLoopName().length() > 0);
-
-        /*
-         * Construct a kie session
-         */
-        final KieSession kieSession = SupportUtil.buildContainer(droolsTemplate,
-                pair.first.getControlLoop().getControlLoopName(), policyScope, policyName, policyVersion,
-                URLEncoder.encode(pair.second, "UTF-8"));
-
-        /*
-         * Retrieve the Policy Engine
-         */
-
-        logger.debug("======controlloop======");
-        logger.debug(((ControlLoopPolicy) pair.first).toString());
-        logger.debug("======policies======");
-        logger.debug(URLEncoder.encode(pair.second, "UTF-8"));
-        logger.debug("============");
-
-        return kieSession;
-    }
-
     /*
      * (non-Javadoc)
      *
         logger.debug("\n============ event ===========\n {}", event);
         kieSession.insert(event);
     }
-
-    /**
-     * This method will dump all the facts in the working memory.
-     *
-     * @param kieSession
-     *            the session containing the facts
-     */
-    public void dumpFacts(KieSession kieSession) {
-        logger.debug("Fact Count: {}", kieSession.getFactCount());
-        for (FactHandle handle : kieSession.getFactHandles()) {
-            logger.debug("FACT: {}", handle);
-        }
-    }
-
 }