diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..30e6052
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,15 @@
+.DS_Store
+.project
+.settings
+.classpath
+.jupiter
+.pydevproject
+*.swp
+*.log
+*.out
+.metadata/
+target/
+*/logs/
+*/sql/
+*/testingLogs/
+*/config/
diff --git a/feature-healthcheck/.gitignore b/feature-healthcheck/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/feature-healthcheck/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/feature-healthcheck/src/test/java/org/onap/policy/drools/healthcheck/HealthCheckFeatureTest.java b/feature-healthcheck/src/test/java/org/onap/policy/drools/healthcheck/HealthCheckFeatureTest.java
index a618f03..1c0b45f 100644
--- a/feature-healthcheck/src/test/java/org/onap/policy/drools/healthcheck/HealthCheckFeatureTest.java
+++ b/feature-healthcheck/src/test/java/org/onap/policy/drools/healthcheck/HealthCheckFeatureTest.java
@@ -22,28 +22,20 @@
 
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.FileWriter;
-import java.io.OutputStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.security.KeyManagementException;
-import java.security.NoSuchAlgorithmException;
 import java.util.Properties;
 
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.onap.policy.drools.healthcheck.HealthCheck.Report;
 import org.onap.policy.drools.healthcheck.HealthCheck.Reports;
-import org.onap.policy.drools.http.client.HttpClient;
-import org.onap.policy.drools.http.server.HttpServletServer;
 import org.onap.policy.drools.persistence.SystemPersistence;
 import org.onap.policy.drools.properties.PolicyProperties;
 import org.onap.policy.drools.system.PolicyEngine;
diff --git a/feature-state-management/.gitignore b/feature-state-management/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/feature-state-management/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/DbAudit.java b/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/DbAudit.java
index a86ac8e..efecf88 100644
--- a/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/DbAudit.java
+++ b/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/DbAudit.java
@@ -44,6 +44,9 @@
   // invoked -- doing this avoids the need to create the table in advance.
   static private boolean createTableNeeded = true;
 
+  synchronized private static void setCreateTableNeeded(boolean b) {
+		DbAudit.createTableNeeded = b;
+	}
   /**
    * @return the single 'DbAudit' instance
    */
@@ -98,26 +101,17 @@
 	String user = properties.getProperty(StateManagementProperties.DB_USER);
 	String password = properties.getProperty(StateManagementProperties.DB_PWD);
 
-	// connection to DB
-	Connection connection = null;
-
-	// supports SQL operations
-	PreparedStatement statement = null;
-	ResultSet rs = null;
-
 	// operation phase currently running -- used to construct an error
 	// message, if needed
 	String phase = null;
 
-	try
+	// create connection to DB
+	phase = "creating connection";
+	if(logger.isDebugEnabled()){
+		logger.debug("DbAudit: Creating connection to {}", url);
+	}
+	try (Connection connection = DriverManager.getConnection(url, user, password))
 	  {
-		// create connection to DB
-		phase = "creating connection";
-		if(logger.isDebugEnabled()){
-			logger.debug("DbAudit: Creating connection to {}", url);
-		}
-
-		connection = DriverManager.getConnection(url, user, password);
 
 		// create audit table, if needed
 		if (createTableNeeded)
@@ -126,93 +120,68 @@
 			if(logger.isDebugEnabled()){
 				logger.info("DbAudit: Creating 'Audit' table, if needed");
 			}
-			statement = connection.prepareStatement
+			try (PreparedStatement statement = connection.prepareStatement
 			  ("CREATE TABLE IF NOT EXISTS Audit (\n"
 			   + " name varchar(64) DEFAULT NULL,\n"
 			   + " UNIQUE KEY name (name)\n"
-			   + ") DEFAULT CHARSET=latin1;");
-			statement.execute();
-			statement.close();
-			createTableNeeded = false;
+			   + ") DEFAULT CHARSET=latin1;")) {
+				statement.execute();
+				DbAudit.setCreateTableNeeded(false);
+			} catch (Exception e) {
+				throw e;
+			}
 		  }
 
 		// insert an entry into the table
 		phase = "insert entry";
 		String key = UUID.randomUUID().toString();
-		statement = connection.prepareStatement
-		  ("INSERT INTO Audit (name) VALUES (?)");
-		statement.setString(1, key);
-		statement.executeUpdate();
-		statement.close();
-
+		try (PreparedStatement statement = connection.prepareStatement
+		  ("INSERT INTO Audit (name) VALUES (?)")) {
+			statement.setString(1, key);
+			statement.executeUpdate();
+		} catch (Exception e) {
+			throw e;
+		}
+		
 		// fetch the entry from the table
 		phase = "fetch entry";
-		statement = connection.prepareStatement
-		  ("SELECT name FROM Audit WHERE name = ?");
-		statement.setString(1, key);
-		rs = statement.executeQuery();
-		if (rs.first())
-		  {
-			// found entry
-			if(logger.isDebugEnabled()){
-				logger.debug("DbAudit: Found key {}", rs.getString(1));
+		try (PreparedStatement statement = connection.prepareStatement
+		  ("SELECT name FROM Audit WHERE name = ?")) {
+			statement.setString(1, key);
+			try (ResultSet rs = statement.executeQuery()) {
+				if (rs.first())
+				  {
+					// found entry
+					if(logger.isDebugEnabled()){
+						logger.debug("DbAudit: Found key {}", rs.getString(1));
+					}
+				  }
+				else
+				  {
+					logger.error
+					  ("DbAudit: can't find newly-created entry with key {}", key);
+					setResponse("Can't find newly-created entry");
+				  }
+			} catch (Exception e) {
+				throw e;
 			}
-		  }
-		else
-		  {
-			logger.error
-			  ("DbAudit: can't find newly-created entry with key {}", key);
-			setResponse("Can't find newly-created entry");
-		  }
-		statement.close();
-
+		}
 		// delete entries from table
 		phase = "delete entry";
-		statement = connection.prepareStatement
-		  ("DELETE FROM Audit WHERE name = ?");
-		statement.setString(1, key);
-		statement.executeUpdate();
-		statement.close();
-		statement = null;
-	  }
+		try (PreparedStatement statement = connection.prepareStatement
+		  ("DELETE FROM Audit WHERE name = ?")) {
+			statement.setString(1, key);
+			statement.executeUpdate();
+		} catch (Exception e) {
+			throw e;
+		}
+	}
 	catch (Exception e)
 	  {
 		String message = "DbAudit: Exception during audit, phase = " + phase;
 		logger.error(message, e);
 		setResponse(message);
 	  }
-	finally
-	  {
-		if (rs != null)
-		  {
-			try
-			  {
-				rs.close();
-			  }
-			catch (Exception e)
-			  {
-			  }
-		  }
-		if (statement != null)
-		  {
-			try
-			  {
-				statement.close();
-			  }
-			catch (Exception e)
-			  {
-			  }
-		  }
-		if (connection != null)
-		  {
-			try
-			  {
-				connection.close();
-			  }
-			catch (Exception e)
-			  {
-			  }
-		  }
-	  }
   }
+
 }
diff --git a/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/DroolsPDPIntegrityMonitor.java b/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/DroolsPDPIntegrityMonitor.java
index 73f6f73..2dc2e26 100644
--- a/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/DroolsPDPIntegrityMonitor.java
+++ b/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/DroolsPDPIntegrityMonitor.java
@@ -20,20 +20,17 @@
 
 package org.onap.policy.drools.statemanagement;
 
-import java.io.File;
-import java.io.FileInputStream;
 import java.net.InetSocketAddress;
 import java.util.ArrayList;
 import java.util.Properties;
 
 import org.onap.policy.common.im.IntegrityMonitor;
 import org.onap.policy.common.im.IntegrityMonitorException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.onap.policy.drools.core.PolicyContainer;
 import org.onap.policy.drools.http.server.HttpServletServer;
 import org.onap.policy.drools.properties.Startable;
 import org.onap.policy.drools.utils.PropertyUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * This class extends 'IntegrityMonitor' for use in the 'Drools PDP'
@@ -351,10 +348,11 @@
 					try {
 						server.waitedStart(5);
 					} catch (Exception e) {
-						e.printStackTrace();
+						logger.error("Exception waiting for servers to start: ", e);
 					}
 				}
 			} catch (Exception e) {
+				logger.error("Exception building servers", e);
 				return false;
 			}
 			
@@ -366,7 +364,7 @@
 			try {
 				server.stop();
 			} catch (Exception e) {
-				e.printStackTrace();
+				logger.error("Exception during stop", e);
 			}
 			
 			return true;
diff --git a/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/IntegrityMonitorRestManager.java b/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/IntegrityMonitorRestManager.java
index f502429..ed522fc 100644
--- a/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/IntegrityMonitorRestManager.java
+++ b/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/IntegrityMonitorRestManager.java
@@ -77,8 +77,6 @@
 						im = DroolsPDPIntegrityMonitor.getInstance();
 					} catch (Exception e) {
 						logger.error("IntegrityMonitorRestManager: test() interface caught an exception", e);
-						e.printStackTrace();
-						
 						body.append("\nException: " + e + "\n");
 						responseValue = 500;
 					}
diff --git a/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/RepositoryAudit.java b/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/RepositoryAudit.java
index 6171572..84cb7e3 100644
--- a/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/RepositoryAudit.java
+++ b/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/RepositoryAudit.java
@@ -335,11 +335,17 @@
 		// place output in 'fileContents' (replacing the Return characters
 		// with Newline)
 		byte[] outputData = new byte[(int)output.length()];
-		FileInputStream fis = new FileInputStream(output);
-		fis.read(outputData);
-		String fileContents = new String(outputData).replace('\r','\n');
-		fis.close();
-
+		String fileContents;
+		try (FileInputStream fis = new FileInputStream(output)) {
+			//
+			// Ideally this should be in a loop or even better use
+			// Java 8 nio functionality.
+			//
+			int bytesRead = fis.read(outputData);
+			logger.info("fileContents read {} bytes", bytesRead);
+			fileContents = new String(outputData).replace('\r','\n');
+		}
+		
 		// generate log messages from 'Downloading' and 'Downloaded'
 		// messages within the 'mvn' output
 		int index = 0;
diff --git a/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/StateManagementFeature.java b/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/StateManagementFeature.java
index 6d47039..0143c58 100644
--- a/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/StateManagementFeature.java
+++ b/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/StateManagementFeature.java
@@ -24,14 +24,13 @@
 import java.util.Observer;
 import java.util.Properties;
 
-import org.onap.policy.drools.statemanagement.StateManagementFeatureAPI;
 import org.onap.policy.common.im.StandbyStatusException;
 import org.onap.policy.common.im.StateManagement;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.onap.policy.drools.core.PolicySessionFeatureAPI;
 import org.onap.policy.drools.features.PolicyEngineFeatureAPI;
 import org.onap.policy.drools.utils.PropertyUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * If this feature is supported, there is a single instance of it.
@@ -100,14 +99,12 @@
 				}
 			}
 		} catch (Exception e1) {
-			String msg = "  \n";
 			if(logger.isDebugEnabled()){
 				logger.debug("StateManagementFeature.globalInit(): DroolsPDPIntegrityMonitor"
 					+ " initialization failed with exception:", e1);
 			}
 			logger.error("DroolsPDPIntegrityMonitor.init(): StateManagementFeature startup failed "
 					+ "to get DroolsPDPIntegrityMonitor instance:", e1);
-			e1.printStackTrace();
 		}
 	}
 	
diff --git a/feature-state-management/src/test/java/org/onap/policy/drools/statemanagement/test/StateManagementTest.java b/feature-state-management/src/test/java/org/onap/policy/drools/statemanagement/test/StateManagementTest.java
index e458dce..1cd6178 100644
--- a/feature-state-management/src/test/java/org/onap/policy/drools/statemanagement/test/StateManagementTest.java
+++ b/feature-state-management/src/test/java/org/onap/policy/drools/statemanagement/test/StateManagementTest.java
@@ -35,14 +35,13 @@
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.onap.policy.common.im.StateManagement;
 import org.onap.policy.drools.core.PolicySessionFeatureAPI;
 import org.onap.policy.drools.statemanagement.StateManagementFeatureAPI;
 import org.onap.policy.drools.statemanagement.StateManagementProperties;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class StateManagementTest {
 		
