diff --git a/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdEngine.java b/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdEngine.java
index 464313e..425e0bf 100644
--- a/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdEngine.java
+++ b/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdEngine.java
@@ -686,20 +686,6 @@
     }
 
     /**
-     * removeGroupProperties.
-     *
-     * @param id String
-     * @param properties Properties
-     */
-    public static void removeGroupProperties(String id, Properties properties) {
-        for (Object key : properties.keySet()) {
-            if (key.toString().startsWith(id + ".")) {
-                properties.remove(key);
-            }
-        }
-    }
-
-    /**
      * setGroupProperties.
      *
      * @param group PDPGroup
diff --git a/ONAP-XACML/src/test/java/org/onap/policy/xacml/api/pap/ONAPPapEngineFactoryTest.java b/ONAP-XACML/src/test/java/org/onap/policy/xacml/api/pap/ONAPPapEngineFactoryTest.java
new file mode 100644
index 0000000..94b28b2
--- /dev/null
+++ b/ONAP-XACML/src/test/java/org/onap/policy/xacml/api/pap/ONAPPapEngineFactoryTest.java
@@ -0,0 +1,38 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP-XACML
+ * ================================================================================
+ * 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.xacml.api.pap;
+
+import static org.junit.Assert.assertNotNull;
+
+import com.att.research.xacml.util.FactoryException;
+import org.junit.Test;
+import org.onap.policy.xacml.std.pap.StdEngineFactory;
+
+public class ONAPPapEngineFactoryTest {
+
+    @Test
+    public void test() throws FactoryException {
+        ONAPPapEngineFactory factory =
+                ONAPPapEngineFactory.newInstance(StdEngineFactory.class.getName());
+        assertNotNull(factory);
+    }
+
+}
diff --git a/ONAP-XACML/src/test/java/org/onap/policy/xacml/test/std/pap/StdEngineFactoryTest.java b/ONAP-XACML/src/test/java/org/onap/policy/xacml/test/std/pap/StdEngineFactoryTest.java
index 43d019d..b7fb32a 100644
--- a/ONAP-XACML/src/test/java/org/onap/policy/xacml/test/std/pap/StdEngineFactoryTest.java
+++ b/ONAP-XACML/src/test/java/org/onap/policy/xacml/test/std/pap/StdEngineFactoryTest.java
@@ -22,32 +22,71 @@
 
 package org.onap.policy.xacml.test.std.pap;
 
-import static org.junit.Assert.assertTrue;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.fail;
 
 import com.att.research.xacml.api.pap.PAPException;
 import com.att.research.xacml.std.pap.StdEngine;
 import com.att.research.xacml.util.FactoryException;
-
+import java.io.File;
 import java.io.IOException;
 import java.util.Properties;
-
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import org.onap.policy.xacml.api.pap.PAPPolicyEngine;
 import org.onap.policy.xacml.std.pap.StdEngineFactory;
 
 public class StdEngineFactoryTest {
+
+    private static String systemProperty;
+
+    @Rule
+    public TemporaryFolder folder = new TemporaryFolder();
+
+    @BeforeClass
+    public static void saveSystemProperty() {
+        systemProperty = System.getProperty(StdEngine.PROP_PAP_REPO);
+    }
+
+    /**
+     * restoreSystemProperty.
+     */
+    @AfterClass
+    public static void restoreSystemProperty() {
+        if (systemProperty != null) {
+            System.setProperty(StdEngine.PROP_PAP_REPO, systemProperty);
+        } else {
+            System.clearProperty(StdEngine.PROP_PAP_REPO);
+        }
+    }
+
     @Test
     public void testStdEngineFactory() throws FactoryException, PAPException, IOException {
         StdEngineFactory stdFactory = new StdEngineFactory();
         System.setProperty("xacml.pap.pdps", "src/test/resources/pdps");
-        assertTrue(stdFactory.newEngine() != null);
+        assertNotNull(stdFactory.newEngine());
         Properties properties = new Properties();
         properties.setProperty("xacml.pap.pdps", "src/test/resources/pdps");
-        assertTrue(stdFactory.newEngine(properties) != null);
+        assertNotNull(stdFactory.newEngine(properties));
 
         StdEngineFactory stdFactoryNew = new StdEngineFactory();
         System.setProperty("xacml.pap.pdps", "src/test/resources/pdpstest");
-        assertTrue(stdFactoryNew.newEngine() != null);
+        PAPPolicyEngine engine = stdFactoryNew.newEngine();
+        assertNotNull(engine);
+
+        assertThatExceptionOfType(NullPointerException.class).isThrownBy(() ->
+            engine.newGroup(null, null)
+        );
+
+        assertThatExceptionOfType(NullPointerException.class).isThrownBy(() ->
+            engine.movePDP(null, null)
+        );
+
     }
 
     @Test
@@ -57,25 +96,54 @@
         String tmpdir = System.getProperty("java.io.tmpdir");
         props.setProperty(StdEngine.PROP_PAP_REPO, tmpdir);
 
-        // Set the system property temporarily
-        String systemKey = StdEngine.PROP_PAP_REPO;
-        String oldProperty = System.getProperty(systemKey);
-        System.setProperty(systemKey, tmpdir);
-
         // Test factory failure cases
         try {
             StdEngineFactory factory = new StdEngineFactory();
-            factory.newEngine();
-            factory.newEngine(props);
+            assertNotNull(factory.newEngine());
+            assertNotNull(factory.newEngine(props));
         } catch (Exception ex) {
             fail("Not expecting any exceptions: " + ex);
         }
 
-        // Restore the original system property
-        if (oldProperty != null) {
-            System.setProperty(systemKey, oldProperty);
-        } else {
-            System.clearProperty(systemKey);
-        }
+    }
+
+    @Test
+    public void testException() throws FactoryException, PAPException, IOException {
+        Properties props = new Properties();
+        File myFolder = folder.newFolder("idontexist");
+        props.setProperty(StdEngine.PROP_PAP_REPO, myFolder.getAbsolutePath());
+        StdEngineFactory factory = new StdEngineFactory();
+        assertNotNull(factory.newEngine(props));
+
+        //
+        //
+        //
+        myFolder.setReadOnly();
+        assertThatExceptionOfType(PAPException.class).isThrownBy(() ->
+            factory.newEngine(props)
+        );
+
+        //
+        //
+        //
+        File myFile = folder.newFile("iamafile");
+        props.setProperty(StdEngine.PROP_PAP_REPO, myFile.getAbsolutePath());
+        assertThatExceptionOfType(PAPException.class).isThrownBy(() ->
+            factory.newEngine(props)
+        );
+
+        //
+        //
+        //
+        props.setProperty(StdEngine.PROP_PAP_REPO, myFolder.getAbsolutePath() + "/badparent/dontexist");
+        assertNull(factory.newEngine(props));
+
+        //
+        //
+        //
+        System.setProperty(StdEngine.PROP_PAP_REPO, myFolder.getAbsolutePath() + "/badparent/dontexist");
+
+        assertNull(factory.newEngine());
+
     }
 }
diff --git a/ONAP-XACML/src/test/java/org/onap/policy/xacml/test/std/pap/StdEngineTest.java b/ONAP-XACML/src/test/java/org/onap/policy/xacml/test/std/pap/StdEngineTest.java
index b57a6be..79c2893 100644
--- a/ONAP-XACML/src/test/java/org/onap/policy/xacml/test/std/pap/StdEngineTest.java
+++ b/ONAP-XACML/src/test/java/org/onap/policy/xacml/test/std/pap/StdEngineTest.java
@@ -62,6 +62,11 @@
     @Rule
     public ExpectedException expectedException = ExpectedException.none();
 
+    /**
+     * setUpClass.
+     *
+     * @throws IOException IOException
+     */
     @BeforeClass
     public static void setUpClass() throws IOException {
         new File("target/test/resources/pdps").mkdirs();
@@ -73,6 +78,12 @@
                 StandardCopyOption.REPLACE_EXISTING);
     }
 
+    /**
+     * setUp.
+     *
+     * @throws PAPException PAPException
+     * @throws IOException IOException
+     */
     @Before
     public void setUp() throws PAPException, IOException {
 
