diff --git a/datarouter-prov/pom.xml b/datarouter-prov/pom.xml
index f2a5fdd..269e015 100755
--- a/datarouter-prov/pom.xml
+++ b/datarouter-prov/pom.xml
@@ -200,11 +200,10 @@
             <version>1.6.4</version>
             <scope>test</scope>
         </dependency>
-        <!--        <dependency><groupId>org.junit</groupId><artifactId>com.springsource.org.junit</artifactId><version>4.4.0</version></dependency>-->
         <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-            <version>5.1.21</version>
+            <groupId>org.mariadb.jdbc</groupId>
+            <artifactId>mariadb-java-client</artifactId>
+            <version>2.2.5</version>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty.cdi</groupId>
@@ -295,7 +294,13 @@
                     <include>**/log4j.properties</include>
                 </includes>
             </resource>
-            <!-- <resource><directory>src/main/config</directory><filtering>true</filtering><includes><include>**/log4j*.xml</include></includes></resource><resource><directory>src/main/resources</directory><filtering>false</filtering><excludes><exclude>**/cambriaApiVersion.properties</exclude></excludes></resource>-->
+            <resource>
+                <directory>src/test/resources</directory>
+                <filtering>true</filtering>
+                <includes>
+                    <include>**/log4j.properties</include>
+                </includes>
+            </resource>
         </resources>
         <plugins>
             <plugin>
diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/authz/impl/ProvDataProvider.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/authz/impl/ProvDataProvider.java
index 580fe99..0357d17 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/authz/impl/ProvDataProvider.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/authz/impl/ProvDataProvider.java
@@ -52,14 +52,14 @@
 
 	/** Get the identity of the owner of a feed by group id -  Rally : US708115
 	 * 
-	 * @param feedid, user the ID of the feed whose owner is being looked up.
+	 * @param feedId, user the ID of the feed whose owner is being looked up.
 	 * @return the feed owner's identity by group.
 	 */
 	public String getGroupByFeedGroupId(String owner, String feedId);
 	
 	/** Get the identity of the owner of a sub by group id Rally : US708115
 	 * 
-	 * @param subid, user the ID of the feed whose owner is being looked up.
+	 * @param subId, user the ID of the feed whose owner is being looked up.
 	 * @return the feed owner's identity by group.
 	 */
 	public String getGroupBySubGroupId(String owner, String subId);
diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/StatisticsServlet.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/StatisticsServlet.java
index ff0218f..b703050 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/StatisticsServlet.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/StatisticsServlet.java
@@ -356,8 +356,8 @@
 	
 	/**
 	 * queryGeneretor - Generating sql query
-	 * @exception SQL Query parse exception.
-	 * @param Map as key value pare of all user input fields
+	 * @exception ParseException
+	 * @param map as key value pare of all user input fields
 	 */
 	public String queryGeneretor(Map<String, String> map) throws ParseException{
 		 
diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SynchronizerTask.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SynchronizerTask.java
index 1e5751a..2e0fc21 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SynchronizerTask.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SynchronizerTask.java
@@ -83,7 +83,7 @@
  * <ol>
  * <li>Checking DNS once per minute to see which POD the DNS CNAME points to. The CNAME will point to
  * the active (master) POD.</li>
- * <li>On non-master (standby) PODs, fetches provisioning data and logs in order to keep MySQL in sync.</li>
+ * <li>On non-master (standby) PODs, fetches provisioning data and logs in order to keep MariaDB in sync.</li>
  * <li>Providing information to other parts of the system as to the current role (ACTIVE, STANDBY, UNKNOWN)
  * of this POD.</li>
  * </ol>
diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/LOGJSONable.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/LOGJSONable.java
index 20dde64..53897a7 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/LOGJSONable.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/LOGJSONable.java
@@ -27,7 +27,7 @@
 import org.onap.dmaap.datarouter.provisioning.utils.LOGJSONObject;
 
 /**
- * An object that can be represented as a {@link JSONObject}.
+ * An object that can be represented as a {@link LOGJSONObject}.
  * @author Robert Eby
  * @version $Id: JSONable.java,v 1.1 2013/04/26 21:00:26 eby Exp $
  */
diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/DB.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/DB.java
index 0160571..98cc824 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/DB.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/DB.java
@@ -24,32 +24,11 @@
 
 package org.onap.dmaap.datarouter.provisioning.utils;
 
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.LineNumberReader;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.DriverManager;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.NoSuchElementException;
-import java.util.Properties;
-import java.util.Queue;
-import java.util.Set;
-
 import org.apache.log4j.Logger;
-import org.onap.dmaap.datarouter.provisioning.beans.DeliveryRecord;
-import org.onap.dmaap.datarouter.provisioning.beans.ExpiryRecord;
-import org.onap.dmaap.datarouter.provisioning.beans.Loadable;
-import org.onap.dmaap.datarouter.provisioning.beans.PublishRecord;
+
+import java.io.*;
+import java.sql.*;
+import java.util.*;
 
 /**
  * Load the DB JDBC driver, and manage a simple pool of connections to the DB.
@@ -59,15 +38,14 @@
  */
 public class DB {
 	/** The name of the properties file (in CLASSPATH) */
-	public static final String CONFIG_FILE = "provserver.properties";
+	private static final String CONFIG_FILE = "provserver.properties";
 
-	private static String DB_DRIVER   = "com.mysql.jdbc.Driver";
-	private static String DB_URL      = "jdbc:mysql://127.0.0.1:3306/datarouter";
-	private static String DB_LOGIN    = "datarouter";
-	private static String DB_PASSWORD = "datarouter";
+	private static String DB_URL;
+	private static String DB_LOGIN;
+	private static String DB_PASSWORD;
 	private static Properties props;
 	private static Logger intlogger = Logger.getLogger("org.onap.dmaap.datarouter.provisioning.internal");
-	private static Queue<Connection> queue = new LinkedList<Connection>();
+	private static final Queue<Connection> queue = new LinkedList<>();
 
 	public static String HTTPS_PORT;
 	public static String HTTP_PORT;
@@ -80,29 +58,23 @@
 	public DB() {
 		if (props == null) {
 			props = new Properties();
-			InputStream inStream = getClass().getClassLoader().getResourceAsStream(CONFIG_FILE);
-			try {
+			try (InputStream inStream = getClass().getClassLoader().getResourceAsStream(CONFIG_FILE)) {
 				props.load(inStream);
-				DB_DRIVER   = (String) props.get("org.onap.dmaap.datarouter.db.driver");
-				DB_URL      = (String) props.get("org.onap.dmaap.datarouter.db.url");
-				DB_LOGIN    = (String) props.get("org.onap.dmaap.datarouter.db.login");
+				String DB_DRIVER = (String) props.get("org.onap.dmaap.datarouter.db.driver");
+				DB_URL = (String) props.get("org.onap.dmaap.datarouter.db.url");
+				DB_LOGIN = (String) props.get("org.onap.dmaap.datarouter.db.login");
 				DB_PASSWORD = (String) props.get("org.onap.dmaap.datarouter.db.password");
 				HTTPS_PORT = (String) props.get("org.onap.dmaap.datarouter.provserver.https.port");
 				HTTP_PORT = (String) props.get("org.onap.dmaap.datarouter.provserver.http.port");
 				Class.forName(DB_DRIVER);
 			} catch (IOException e) {
-				intlogger.fatal("PROV9003 Opening properties: "+e.getMessage());
+				intlogger.fatal("PROV9003 Opening properties: " + e.getMessage());
 				e.printStackTrace();
 				System.exit(1);
 			} catch (ClassNotFoundException e) {
-				intlogger.fatal("PROV9004 cannot find the DB driver: "+e);
+				intlogger.fatal("PROV9004 cannot find the DB driver: " + e);
 				e.printStackTrace();
 				System.exit(1);
-			} finally {
-				try {
-					inStream.close();
-				} catch (IOException e) {
-				}
 			}
 		}
 	}
@@ -120,41 +92,40 @@
 	 */
 	@SuppressWarnings("resource")
 	public Connection getConnection() throws SQLException {
-		Connection c = null;
-		while (c == null) {
+		Connection connection = null;
+		while (connection == null) {
 			synchronized (queue) {
 				try {
-					c = queue.remove();
-				} catch (NoSuchElementException e) {
+					connection = queue.remove();
+				} catch (NoSuchElementException nseEx) {
 					int n = 0;
 					do {
 						// Try up to 3 times to get a connection
 						try {
-							c = DriverManager.getConnection(DB_URL, DB_LOGIN, DB_PASSWORD);
-						} catch (SQLException e1) {
+							connection = DriverManager.getConnection(DB_URL, DB_LOGIN, DB_PASSWORD);
+						} catch (SQLException sqlEx) {
 							if (++n >= 3)
-								throw e1;
+								throw sqlEx;
 						}
-					} while (c == null);
+					} while (connection == null);
 				}
 			}
-			if (c != null && !c.isValid(1)) {
-				c.close();
-				c = null;
+			if (connection != null && !connection.isValid(1)) {
+				connection.close();
+				connection = null;
 			}
 		}
-		return c;
+		return connection;
 	}
 	/**
 	 * Returns a JDBC connection to the pool.
-	 * @param c the Connection to return
-	 * @throws SQLException
+	 * @param connection the Connection to return
 	 */
-	public void release(Connection c) {
-		if (c != null) {
+	public void release(Connection connection) {
+		if (connection != null) {
 			synchronized (queue) {
-				if (!queue.contains(c))
-					queue.add(c);
+				if (!queue.contains(connection))
+					queue.add(connection);
 			}
 		}
 	}
@@ -165,499 +136,51 @@
 	 * @return true if all retrofits worked, false otherwise
 	 */
 	public boolean runRetroFits() {
-		return retroFit1()
-			&& retroFit2()
-			&& retroFit3()
-			&& retroFit4()
-			&& retroFit5()
-			&& retroFit6()
-			&& retroFit7()
-			&& retroFit8()
-			&& retroFit9()  //New retroFit call to add CREATED_DATE column Rally:US674199 - 1610
-			&& retroFit10() //New retroFit call to add BUSINESS_DESCRIPTION column Rally:US708102 - 1610
-			&& retroFit11() //New retroFit call for groups feature Rally:US708115 - 1610	
-			;
+		return retroFit1();
 	}
+
 	/**
-	 * Retrofit 1 - Make sure the expected tables are in MySQL and are initialized.
-	 * Uses mysql_init_0000 and mysql_init_0001 to setup the DB.
+	 * Retrofit 1 - Make sure the expected tables are in DB and are initialized.
+	 * Uses sql_init_01.sql to setup the DB.
 	 * @return true if the retrofit worked, false otherwise
 	 */
 	private boolean retroFit1() {
-		final String[] expected_tables = {
-			"FEEDS", "FEED_ENDPOINT_ADDRS", "FEED_ENDPOINT_IDS", "PARAMETERS", "SUBSCRIPTIONS"
+		final String[] expectedTables = {
+				"FEEDS", "FEED_ENDPOINT_ADDRS", "FEED_ENDPOINT_IDS", "PARAMETERS",
+				"SUBSCRIPTIONS", "LOG_RECORDS", "INGRESS_ROUTES", "EGRESS_ROUTES",
+				"NETWORK_ROUTES", "NODESETS", "NODES", "GROUPS"
 		};
-		Connection c = null;
+		Connection connection = null;
 		try {
-			c = getConnection();
-			Set<String> tables = getTableSet(c);
+			connection = getConnection();
+			Set<String> actualTables = getTableSet(connection);
 			boolean initialize = false;
-			for (String s : expected_tables) {
-				initialize |= !tables.contains(s);
+			for (String table : expectedTables) {
+				initialize |= !actualTables.contains(table);
 			}
 			if (initialize) {
 				intlogger.info("PROV9001: First time startup; The database is being initialized.");
-				runInitScript(c, 0);		// script 0 creates the provisioning tables
-				runInitScript(c, 1);		// script 1 initializes PARAMETERS
+				runInitScript(connection, 1);
 			}
 		} catch (SQLException e) {
 			intlogger.fatal("PROV9000: The database credentials are not working: "+e.getMessage());
 			return false;
 		} finally {
-			if (c != null)
-				release(c);
+			if (connection != null)
+				release(connection);
 		}
 		return true;
 	}
-	/**
-	 * Retrofit 2 - if the LOG_RECORDS table is missing, add it.
-	 * Uses mysql_init_0002 to create this table.
-	 * @return true if the retrofit worked, false otherwise
-	 */
-	private boolean retroFit2() {
-		Connection c = null;
-		try {
-			// If LOG_RECORDS table is missing, add it
-			c = getConnection();
-			Set<String> tables = getTableSet(c);
-			if (!tables.contains("LOG_RECORDS")) {
-				intlogger.info("PROV9002: Creating LOG_RECORDS table.");
-				runInitScript(c, 2);		// script 2 creates the LOG_RECORDS table
-			}
-		} catch (SQLException e) {
-			intlogger.fatal("PROV9000: The database credentials are not working: "+e.getMessage());
-			return false;
-		} finally {
-			if (c != null)
-				release(c);
-		}
-		return true;
-	}
-	/**
-	 * Retrofit 3 - if the FEEDS_UNIQUEID table (from release 1.0.*) exists, drop it.
-	 * If SUBSCRIPTIONS.SUBID still has the auto_increment attribute, remove it.
-	 * @return true if the retrofit worked, false otherwise
-	 */
-	@SuppressWarnings("resource")
-	private boolean retroFit3() {
-		Connection c = null;
-		try {
-			// if SUBSCRIPTIONS.SUBID still has auto_increment, remove it
-			boolean doremove = false;
-			c = getConnection();
-			DatabaseMetaData md = c.getMetaData();
-			ResultSet rs = md.getColumns("datarouter", "", "SUBSCRIPTIONS", "SUBID");
-			if (rs != null) {
-				while (rs.next()) {
-					doremove = rs.getString("IS_AUTOINCREMENT").equals("YES");
-				}
-				rs.close();
-				rs = null;
-			}
-			if (doremove) {
-				intlogger.info("PROV9002: Modifying SUBSCRIPTIONS SUBID column to remove auto increment.");
-				Statement s = c.createStatement();
-				s.execute("ALTER TABLE SUBSCRIPTIONS MODIFY COLUMN SUBID INT UNSIGNED NOT NULL");
-				s.close();
-			}
-
-			// Remove the FEEDS_UNIQUEID table, if it exists
-			Set<String> tables = getTableSet(c);
-			if (tables.contains("FEEDS_UNIQUEID")) {
-				intlogger.info("PROV9002: Dropping FEEDS_UNIQUEID table.");
-				Statement s = c.createStatement();
-				s.execute("DROP TABLE FEEDS_UNIQUEID");
-				s.close();
-			}
-		} catch (SQLException e) {
-			intlogger.fatal("PROV9000: The database credentials are not working: "+e.getMessage());
-			return false;
-		} finally {
-			if (c != null)
-				release(c);
-		}
-		return true;
-	}
-	private long nextid = 0;	// used for initial creation of LOG_RECORDS table.
-	/**
-	 * Retrofit 4 - if old log tables exist (from release 1.0.*), copy them to LOG_RECORDS, then drop them.
-	 * @return true if the retrofit worked, false otherwise
-	 */
-	@SuppressWarnings("resource")
-	private boolean retroFit4() {
-		Connection c = null;
-		try {
-			c = getConnection();
-			Set<String> tables = getTableSet(c);
-			if (tables.contains("PUBLISH_RECORDS")) {
-				intlogger.info("PROV9002: Copying PUBLISH_RECORDS to LOG_RECORDS table.");
-				copyLogTable("PUBLISH_RECORDS", PublishRecord.class);
-				intlogger.info("PROV9002: Dropping PUBLISH_RECORDS table.");
-				Statement s = c.createStatement();
-				s.execute("DROP TABLE PUBLISH_RECORDS");
-				s.close();
-			}
-			if (tables.contains("DELIVERY_RECORDS")) {
-				intlogger.info("PROV9002: Copying DELIVERY_RECORDS to LOG_RECORDS table.");
-				copyLogTable("DELIVERY_RECORDS", DeliveryRecord.class);
-				intlogger.info("PROV9002: Dropping DELIVERY_RECORDS table.");
-				Statement s = c.createStatement();
-				s.execute("DROP TABLE DELIVERY_RECORDS");
-				s.close();
-			}
-			if (tables.contains("EXPIRY_RECORDS")) {
-				intlogger.info("PROV9002: Copying EXPIRY_RECORDS to LOG_RECORDS table.");
-				copyLogTable("EXPIRY_RECORDS", ExpiryRecord.class);
-				intlogger.info("PROV9002: Dropping EXPIRY_RECORDS table.");
-				Statement s = c.createStatement();
-				s.execute("DROP TABLE EXPIRY_RECORDS");
-				s.close();
-			}
-		} catch (SQLException e) {
-			intlogger.fatal("PROV9000: The database credentials are not working: "+e.getMessage());
-			return false;
-		} finally {
-			if (c != null)
-				release(c);
-		}
-		return true;
-	}
-	/**
-	 * Retrofit 5 - Create the new routing tables required for Release 2.
-	 * Adds a new "SUSPENDED" column to FEEDS and SUBSCRIPTIONS.
-	 * Modifies the LOG_RECORDS table to handle new R2 records.
-	 * @return true if the retrofit worked, false otherwise
-	 */
-	@SuppressWarnings("resource")
-	private boolean retroFit5() {
-		final String[] expected_tables = {
-			"INGRESS_ROUTES", "EGRESS_ROUTES", "NETWORK_ROUTES", "NODESETS", "NODES"
-		};
-		Connection c = null;
-		try {
-			// If expected tables are not present, then add new routing tables
-			c = getConnection();
-			Set<String> tables = getTableSet(c);
-			boolean initialize = false;
-			for (String s : expected_tables) {
-				initialize |= !tables.contains(s);
-			}
-			if (initialize) {
-				intlogger.info("PROV9002: Adding routing tables for Release 2.0.");
-				runInitScript(c, 3);		// script 3 creates the routing tables
-			}
-
-			// Add SUSPENDED column to FEEDS/SUBSCRIPTIONS
-			DatabaseMetaData md = c.getMetaData();
-			for (String tbl : new String[] {"FEEDS", "SUBSCRIPTIONS" }) {
-				boolean add_col = true;
-				ResultSet rs = md.getColumns("datarouter", "", tbl, "SUSPENDED");
-				if (rs != null) {
-					add_col = !rs.next();
-					rs.close();
-					rs = null;
-				}
-				if (add_col) {
-					intlogger.info("PROV9002: Adding SUSPENDED column to "+tbl+" table.");
-					Statement s = c.createStatement();
-					s.execute("ALTER TABLE "+tbl+" ADD COLUMN SUSPENDED BOOLEAN DEFAULT FALSE");
-					s.close();
-				}
-			}
-
-			// Modify LOG_RECORDS for R2
-			intlogger.info("PROV9002: Modifying LOG_RECORDS table.");
-			Statement s = c.createStatement();
-			s.execute("ALTER TABLE LOG_RECORDS MODIFY COLUMN TYPE ENUM('pub', 'del', 'exp', 'pbf', 'dlx') NOT NULL");
-			s.close();
-			s = c.createStatement();
-			s.execute("ALTER TABLE LOG_RECORDS MODIFY COLUMN REASON ENUM('notRetryable', 'retriesExhausted', 'diskFull', 'other')");
-			s.close();
-			boolean add_col = true;
-			ResultSet rs = md.getColumns("datarouter", "", "LOG_RECORDS", "CONTENT_LENGTH_2");
-			if (rs != null) {
-				add_col = !rs.next();
-				rs.close();
-				rs = null;
-			}
-			if (add_col) {
-				intlogger.info("PROV9002: Fixing two columns in LOG_RECORDS table (this may take some time).");
-				s = c.createStatement();
-				s.execute("ALTER TABLE LOG_RECORDS MODIFY COLUMN CONTENT_LENGTH BIGINT NOT NULL, ADD COLUMN CONTENT_LENGTH_2 BIGINT AFTER RECORD_ID");
-				s.close();
-			}
-		} catch (SQLException e) {
-			intlogger.fatal("PROV9000: The database credentials are not working: "+e.getMessage());
-			return false;
-		} finally {
-			if (c != null)
-				release(c);
-		}
-		return true;
-	}
-	/**
-	 * Retrofit 6 - Adjust LOG_RECORDS.USER to be 50 chars (MR #74).
-	 * @return true if the retrofit worked, false otherwise
-	 */
-	@SuppressWarnings("resource")
-	private boolean retroFit6() {
-		Connection c = null;
-		try {
-			c = getConnection();
-			// Modify LOG_RECORDS for R2
-			intlogger.info("PROV9002: Modifying LOG_RECORDS.USER length.");
-			Statement s = c.createStatement();
-			s.execute("ALTER TABLE LOG_RECORDS MODIFY COLUMN USER VARCHAR(50)");
-			s.close();
-		} catch (SQLException e) {
-			intlogger.fatal("PROV9000: The database credentials are not working: "+e.getMessage());
-			return false;
-		} finally {
-			if (c != null)
-				release(c);
-		}
-		return true;
-	}
-	/**
-	 * Retrofit 7 - Adjust LOG_RECORDS.FEED_FILEID and LOG_RECORDS.DELIVERY_FILEID to be 256 chars.
-	 * @return true if the retrofit worked, false otherwise
-	 */
-	@SuppressWarnings("resource")
-	private boolean retroFit7() {
-		Connection c = null;
-		try {
-			c = getConnection();
-			// Modify LOG_RECORDS for long (>128) FILEIDs
-			intlogger.info("PROV9002: Modifying LOG_RECORDS.USER length.");
-			Statement s = c.createStatement();
-			s.execute("ALTER TABLE LOG_RECORDS MODIFY COLUMN FEED_FILEID VARCHAR(256), MODIFY COLUMN DELIVERY_FILEID VARCHAR(256)");
-			s.close();
-		} catch (SQLException e) {
-			intlogger.fatal("PROV9000: The database credentials are not working: "+e.getMessage());
-			return false;
-		} finally {
-			if (c != null)
-				release(c);
-		}
-		return true;
-	}
-	/**
-	 * Retrofit 8 - Adjust FEEDS.NAME to be 255 chars (MR #74).
-	 * @return true if the retrofit worked, false otherwise
-	 */
-	@SuppressWarnings("resource")
-	private boolean retroFit8() {
-		Connection c = null;
-		try {
-			c = getConnection();
-			intlogger.info("PROV9002: Modifying FEEDS.NAME length.");
-			Statement s = c.createStatement();
-			s.execute("ALTER TABLE FEEDS MODIFY COLUMN NAME VARCHAR(255)");
-			s.close();
-		} catch (SQLException e) {
-			intlogger.fatal("PROV9000: The database credentials are not working: "+e.getMessage());
-			return false;
-		} finally {
-			if (c != null)
-				release(c);
-		}
-		return true;
-	}
-	
-	/**
-	 * Retrofit 9 - Add column FEEDS.CREATED_DATE and SUBSCRIPTIONS.CREATED_DATE, 1610 release user story US674199.
-	 * @return true if the retrofit worked, false otherwise
-	 */
-
-	@SuppressWarnings("resource")		
-	private boolean retroFit9() {		
-		Connection c = null;		
-		try {		
-			c = getConnection();		
-			// Add CREATED_DATE column to FEEDS/SUBSCRIPTIONS tables
-			DatabaseMetaData md = c.getMetaData();		
-			for (String tbl : new String[] {"FEEDS", "SUBSCRIPTIONS" }) {		
-				boolean add_col = true;		
-				ResultSet rs = md.getColumns("datarouter", "", tbl, "CREATED_DATE");		
-				if (rs != null) {		
-					add_col = !rs.next();		
-					rs.close();		
-					rs = null;		
-				}		
-				if (add_col) {		
-					intlogger.info("PROV9002: Adding CREATED_DATE column to "+tbl+" table.");		
-					Statement s = c.createStatement();
-					s.execute("ALTER TABLE "+tbl+" ADD COLUMN CREATED_DATE timestamp DEFAULT CURRENT_TIMESTAMP");		
-					s.close();		
-				}		
-			}						
-		} catch (SQLException e) {		
-			intlogger.fatal("PROV9000: The database credentials are not working: "+e.getMessage());		
-			return false;		
-		} finally {		
-			if (c != null)		
-				release(c);		
-		}		
-		return true;		
-	}
-
-	/**
-	 * Retrofit 10 -Adding business BUSINESS_DESCRIPTION to FEEDS table (Rally
-	 * US708102).
-	 * 
-	 * @return true if the retrofit worked, false otherwise
-	 */
-
-	@SuppressWarnings("resource")
-	private boolean retroFit10() {
-		Connection c = null;
-		boolean addColumn = true;
-		
-		try {
-
-			c = getConnection();		
-			// Add BUSINESS_DESCRIPTION column to FEEDS table
-			DatabaseMetaData md = c.getMetaData();		
-				boolean add_col = true;		
-				ResultSet rs = md.getColumns("datarouter", "", "FEEDS", "BUSINESS_DESCRIPTION");		
-				if (rs != null) {		
-					add_col = !rs.next();		
-					rs.close();		
-					rs = null;		
-				}	
-		if(add_col) {
-			intlogger
-					.info("PROV9002: Adding BUSINESS_DESCRIPTION column to FEEDS table.");
-			Statement s = c.createStatement();
-			s.execute("ALTER TABLE FEEDS ADD COLUMN BUSINESS_DESCRIPTION varchar(1000) DEFAULT NULL AFTER DESCRIPTION, MODIFY COLUMN DESCRIPTION VARCHAR(1000)");
-			s.close();
-			}
-		}
-		catch (SQLException e) {
-			intlogger
-					.fatal("PROV9000: The database credentials are not working: "
-							+ e.getMessage());
-			return false;
-		} finally {
-			if (c != null)
-				release(c);
-		}
-		return true;
-	}
-
-
-	/*New retroFit method is added for groups feature Rally:US708115 - 1610	
-	* @retroFit11()
-	* @parmas: none
-	* @return - boolean if table and fields are created (Group table, group id in FEEDS, SUBSCRIPTION TABLES)
-	*/
-	@SuppressWarnings("resource")	
-	private boolean retroFit11() {		
-		final String[] expected_tables = {		
-			"GROUPS"		
-		};		
-		Connection c = null;		
-			
-		try {		
-			// If expected tables are not present, then add new routing tables		
-			c = getConnection();		
-			Set<String> tables = getTableSet(c);		
-			boolean initialize = false;		
-			for (String s : expected_tables) {		
-				initialize |= !tables.contains(s);		
-			}		
-			if (initialize) {		
-				intlogger.info("PROV9002: Adding GROUPS table for Release 1610.");		
-				runInitScript(c, 4);		// script 4 creates the routing tables		
-			}		
-					
-			// Add GROUPID column to FEEDS/SUBSCRIPTIONS		
-			DatabaseMetaData md = c.getMetaData();		
-			for (String tbl : new String[] {"FEEDS", "SUBSCRIPTIONS" }) {		
-				boolean add_col = true;		
-				ResultSet rs = md.getColumns("datarouter", "", tbl, "GROUPID");		
-				if (rs != null) {		
-					add_col = !rs.next();		
-					rs.close();		
-					rs = null;		
-				}		
-				if (add_col) {		
-					intlogger.info("PROV9002: Adding GROUPID column to "+tbl+" table.");		
-					Statement s = c.createStatement();		
-					s.execute("ALTER TABLE "+tbl+" ADD COLUMN GROUPID INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER FEEDID");		
-					s.close();		
-				}		
-			}						
-		} catch (SQLException e) {		
-			intlogger.fatal("PROV9000: The database credentials are not working: "+e.getMessage());		
-			return false;		
-		} finally {		
-			if (c != null)		
-				release(c);		
-		}		
-		return true;		
-	}
-
-
-	/**
-	 * Copy the log table <i>table_name</i> to LOG_RECORDS;
-	 * @param table_name the name of the old (1.0.*) table to copy
-	 * @param table_class the class used to instantiate a record from the table
-	 * @throws SQLException if there is a problem getting a MySQL connection
-	 */
-	@SuppressWarnings("resource")
-	private void copyLogTable(String table_name, Class<? extends Loadable> table_class) throws SQLException {
-		long start = System.currentTimeMillis();
-		int n = 0;
-		Connection c1 = getConnection();
-		Connection c2 = getConnection();
-
-		try {
-			Constructor<? extends Loadable> cnst = table_class.getConstructor(ResultSet.class);
-			PreparedStatement ps = c2.prepareStatement(LogfileLoader.INSERT_SQL);
-			Statement stmt = c1.createStatement();
-			ResultSet rs = stmt.executeQuery("select * from "+table_name);
-			while (rs.next()) {
-				Loadable rec = cnst.newInstance(rs);
-				rec.load(ps);
-				ps.setLong(18, ++nextid);
-				ps.executeUpdate();
-				if ((++n % 10000) == 0)
-					intlogger.debug("  "+n+" records done.");
-			}
-			stmt.close();
-			ps.close();
-		} catch (SQLException e) {
-			e.printStackTrace();
-		} catch (NoSuchMethodException e) {
-			e.printStackTrace();
-		} catch (SecurityException e) {
-			e.printStackTrace();
-		} catch (InstantiationException e) {
-			e.printStackTrace();
-		} catch (IllegalAccessException e) {
-			e.printStackTrace();
-		} catch (IllegalArgumentException e) {
-			e.printStackTrace();
-		} catch (InvocationTargetException e) {
-			e.printStackTrace();
-		}
-
-		release(c1);
-		release(c2);
-		long x = (System.currentTimeMillis() - start);
-		intlogger.debug("  "+n+" records done in "+x+" ms.");
-	}
 
 	/**
 	 * Get a set of all table names in the DB.
-	 * @param c a DB connection
+	 * @param connection a DB connection
 	 * @return the set of table names
 	 */
-	private Set<String> getTableSet(Connection c) {
+	private Set<String> getTableSet(Connection connection) {
 		Set<String> tables = new HashSet<String>();
 		try {
-			DatabaseMetaData md = c.getMetaData();
+			DatabaseMetaData md = connection.getMetaData();
 			ResultSet rs = md.getTables("datarouter", "", "", null);
 			if (rs != null) {
 				while (rs.next()) {
@@ -672,19 +195,19 @@
 	/**
 	 * Initialize the tables by running the initialization scripts located in the directory specified
 	 * by the property <i>org.onap.dmaap.datarouter.provserver.dbscripts</i>.  Scripts have names of
-	 * the form mysql_init_NNNN.
-	 * @param c a DB connection
-	 * @param n the number of the mysql_init_NNNN script to run
+	 * the form sql_init_NN.sql
+	 * @param connection a DB connection
+	 * @param scriptId the number of the sql_init_NN.sql script to run
 	 */
-	private void runInitScript(Connection c, int n) {
-		String scriptdir = (String) props.get("org.onap.dmaap.datarouter.provserver.dbscripts");
+	private void runInitScript(Connection connection, int scriptId) {
+		String scriptDir = (String) props.get("org.onap.dmaap.datarouter.provserver.dbscripts");
 		StringBuilder sb = new StringBuilder();
 		try {
-			String scriptfile = String.format("%s/mysql_init_%04d", scriptdir, n);
-			if (!(new File(scriptfile)).exists())
+			String scriptFile = String.format("%s/sql_init_%02d.sql", scriptDir, scriptId);
+			if (!(new File(scriptFile)).exists())
 				return;
 
-			LineNumberReader in = new LineNumberReader(new FileReader(scriptfile));
+			LineNumberReader in = new LineNumberReader(new FileReader(scriptFile));
 			String line;
 			while ((line = in.readLine()) != null) {
 				if (!line.startsWith("--")) {
@@ -694,7 +217,7 @@
 						// Execute one DDL statement
 						String sql = sb.toString();
 						sb.setLength(0);
-						Statement s = c.createStatement();
+						Statement s = connection.createStatement();
 						s.execute(sql);
 						s.close();
 					}
diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/LogfileLoader.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/LogfileLoader.java
index 830e21c..45b8788 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/LogfileLoader.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/LogfileLoader.java
@@ -59,7 +59,7 @@
 
 /**
  * This class provides methods that run in a separate thread, in order to process logfiles uploaded into the spooldir.
- * These logfiles are loaded into the MySQL LOG_RECORDS table. In a running provisioning server, there should only be
+ * These logfiles are loaded into the MariaDB LOG_RECORDS table. In a running provisioning server, there should only be
  * two places where records can be loaded into this table; here, and in the method DB.retroFit4() which may be run at
  * startup to load the old (1.0) style log tables into LOG_RECORDS;
  * <p>This method maintains an {@link RLEBitSet} which can be used to easily see what records are presently in the
@@ -148,7 +148,7 @@
 	}
 	/**
 	 * Run continuously to look for new logfiles in the spool directory and import them into the DB.
-	 * The spool is checked once per second.  If free space on the MySQL filesystem falls below
+	 * The spool is checked once per second.  If free space on the MariaDB filesystem falls below
 	 * REQUIRED_FREE_PCT (normally 20%) then the oldest logfile entries are removed and the LOG_RECORDS
 	 * table is compacted until free space rises above the threshold.
 	 */
@@ -361,72 +361,7 @@
 			db.release(conn);
 		}
 	}
-// OLD CODE - commented here for historical purposes
-//
-//	private boolean pruneRecordsOldAlgorithm() {
-//		// Determine space available -- available space must be at least 20% under /opt/app/mysql
-//		int pct = getFreePercentage();
-//		boolean did1 = false;
-//		while (pct < REQUIRED_FREE_PCT) {
-//			logger.info("PROV8008: Free space is " + pct + "% - removing old log entries");
-//			boolean didit = removeOldestEntries();
-//			pct = didit ? getFreePercentage() : 100; // don't loop endlessly
-//			did1 |= didit;
-//		}
-//		return did1;
-//	}
-//	private int getFreePercentage() {
-//		FileSystem fs = (Paths.get("/opt/app/mysql")).getFileSystem();
-//		long total = 0;
-//		long avail = 0;
-//		try {
-//			for (FileStore store : fs.getFileStores()) {
-//				total += store.getTotalSpace();
-//				avail += store.getUsableSpace();
-//			}
-//		} catch (IOException e) {
-//		}
-//		try { fs.close(); } catch (Exception e) { }
-//		return (int)((avail * 100) / total);
-//	}
-//	private boolean removeOldestEntries() {
-//		// Remove the last days worth of entries
-//		Connection conn = null;
-//		try {
-//			conn = db.getConnection();
-//			Statement stmt = conn.createStatement();
-//			ResultSet rs = stmt.executeQuery("select min(event_time) as MIN from LOG_RECORDS");
-//			if (rs != null) {
-//				if (rs.next()) {
-//					// Compute the end of the first day of logs
-//					long first = rs.getLong("MIN");
-//					Calendar cal = new GregorianCalendar();
-//					cal.setTime(new Date(first));
-//					cal.add(Calendar.DAY_OF_YEAR, 1);
-//					cal.set(Calendar.HOUR_OF_DAY, 0);
-//					cal.set(Calendar.MINUTE, 0);
-//					cal.set(Calendar.SECOND, 0);
-//					cal.set(Calendar.MILLISECOND, 0);
-//					if (!stmt.execute("delete from LOG_RECORDS where event_time < " + cal.getTimeInMillis())) {
-//						int count = stmt.getUpdateCount();
-//						logger.info("PROV0009: Removed "+count+" old log entries.");
-//						stmt.execute("OPTIMIZE TABLE LOG_RECORDS");
-//					}
-//					rs.close();
-//					stmt.close();
-//					return true;
-//				}
-//				rs.close();
-//			}
-//			stmt.close();
-//		} catch (SQLException e) {
-//			System.err.println(e);
-//			e.printStackTrace();
-//		} finally {
-//			db.release(conn);
-//		}
-//		return false;
-//	}
+
 	@SuppressWarnings("resource")
 	private int[] process(File f) {
 		int ok = 0, total = 0;
diff --git a/datarouter-prov/src/main/resources/docker-compose/database/install_db.sql b/datarouter-prov/src/main/resources/docker-compose/database/install_db.sql
deleted file mode 100644
index 64a0762..0000000
--- a/datarouter-prov/src/main/resources/docker-compose/database/install_db.sql
+++ /dev/null
@@ -1,143 +0,0 @@
-CREATE DATABASE IF NOT EXISTS datarouter;
-
-CREATE USER 'datarouter'@'%' IDENTIFIED BY 'datarouter';
-
-GRANT ALL PRIVILEGES ON * . * TO 'datarouter'@'%';
-
-use datarouter;
-
-CREATE TABLE FEEDS (
-    FEEDID         INT UNSIGNED NOT NULL PRIMARY KEY,
-    NAME           VARCHAR(20) NOT NULL,
-    VERSION        VARCHAR(20) NOT NULL,
-    DESCRIPTION    VARCHAR(256),
-    AUTH_CLASS     VARCHAR(32) NOT NULL,
-    PUBLISHER      VARCHAR(8) NOT NULL,
-    SELF_LINK      VARCHAR(256),
-    PUBLISH_LINK   VARCHAR(256),
-    SUBSCRIBE_LINK VARCHAR(256),
-    LOG_LINK       VARCHAR(256),
-    DELETED        BOOLEAN DEFAULT FALSE,
-    LAST_MOD       TIMESTAMP DEFAULT CURRENT_TIMESTAMP
-);
-
-CREATE TABLE FEED_ENDPOINT_IDS (
-    FEEDID        INT UNSIGNED NOT NULL,
-    USERID        VARCHAR(20) NOT NULL,
-    PASSWORD      VARCHAR(32) NOT NULL
-);
-
-CREATE TABLE FEED_ENDPOINT_ADDRS (
-    FEEDID        INT UNSIGNED NOT NULL,
-    ADDR          VARCHAR(44) NOT NULL
-);
-
-CREATE TABLE SUBSCRIPTIONS (
-    SUBID              INT UNSIGNED NOT NULL PRIMARY KEY,
-    FEEDID             INT UNSIGNED NOT NULL,
-    DELIVERY_URL       VARCHAR(256),
-    DELIVERY_USER      VARCHAR(20),
-    DELIVERY_PASSWORD  VARCHAR(32),
-    DELIVERY_USE100    BOOLEAN DEFAULT FALSE,
-    METADATA_ONLY      BOOLEAN DEFAULT FALSE,
-    SUBSCRIBER         VARCHAR(8) NOT NULL,
-    SELF_LINK          VARCHAR(256),
-    LOG_LINK           VARCHAR(256),
-    LAST_MOD           TIMESTAMP DEFAULT CURRENT_TIMESTAMP
-);
-
-CREATE TABLE PARAMETERS (
-    KEYNAME        VARCHAR(32) NOT NULL PRIMARY KEY,
-    VALUE          VARCHAR(4096) NOT NULL
-);
-
-CREATE TABLE LOG_RECORDS (
-    TYPE	   ENUM('pub', 'del', 'exp') NOT NULL,
-    EVENT_TIME     BIGINT NOT NULL,           /* time of the publish request */
-    PUBLISH_ID     VARCHAR(64) NOT NULL,      /* unique ID assigned to this publish attempt */
-    FEEDID         INT UNSIGNED NOT NULL,     /* pointer to feed in FEEDS */
-    REQURI         VARCHAR(256) NOT NULL,     /* request URI */
-    METHOD         ENUM('DELETE', 'GET', 'HEAD', 'OPTIONS', 'PUT', 'POST', 'TRACE') NOT NULL, /* HTTP method */
-    CONTENT_TYPE   VARCHAR(256) NOT NULL,     /* content type of published file */
-    CONTENT_LENGTH BIGINT UNSIGNED NOT NULL,  /* content length of published file */
-
-    FEED_FILEID    VARCHAR(128),		/* file ID of published file */
-    REMOTE_ADDR    VARCHAR(40),			/* IP address of publishing endpoint */
-    USER           VARCHAR(20),			/* user name of publishing endpoint */
-    STATUS         SMALLINT,			/* status code returned to delivering agent */
-
-    DELIVERY_SUBID INT UNSIGNED,		/* pointer to subscription in SUBSCRIPTIONS */
-    DELIVERY_FILEID  VARCHAR(128),		/* file ID of file being delivered */
-    RESULT         SMALLINT,			/* result received from subscribing agent */
-
-    ATTEMPTS       INT,				/* deliveries attempted */
-    REASON         ENUM('notRetryable', 'retriesExhausted'),
-
-    RECORD_ID      BIGINT UNSIGNED NOT NULL PRIMARY KEY, /* unique ID for this record */
-
-    INDEX (FEEDID) USING BTREE,
-    INDEX (DELIVERY_SUBID) USING BTREE,
-    INDEX (RECORD_ID) USING BTREE
-) ENGINE = MyISAM;
-
-CREATE TABLE INGRESS_ROUTES (
-    SEQUENCE  INT UNSIGNED NOT NULL,
-    FEEDID    INT UNSIGNED NOT NULL,
-    USERID    VARCHAR(20),
-    SUBNET    VARCHAR(44),
-    NODESET   INT UNSIGNED NOT NULL
-);
-
-CREATE TABLE EGRESS_ROUTES (
-    SUBID    INT UNSIGNED NOT NULL PRIMARY KEY,
-    NODEID   INT UNSIGNED NOT NULL
-);
-
-CREATE TABLE NETWORK_ROUTES (
-    FROMNODE INT UNSIGNED NOT NULL,
-    TONODE   INT UNSIGNED NOT NULL,
-    VIANODE  INT UNSIGNED NOT NULL
-);
-
-CREATE TABLE NODESETS (
-    SETID   INT UNSIGNED NOT NULL,
-    NODEID  INT UNSIGNED NOT NULL
-);
-
-CREATE TABLE NODES (
-    NODEID  INT UNSIGNED NOT NULL PRIMARY KEY,
-    NAME    VARCHAR(255) NOT NULL,
-    ACTIVE  BOOLEAN DEFAULT TRUE
-);
-
-CREATE TABLE GROUPS (
-    GROUPID  INT UNSIGNED NOT NULL PRIMARY KEY,
-    AUTHID    VARCHAR(100) NOT NULL,
-    NAME    VARCHAR(50) NOT NULL,
-    DESCRIPTION    VARCHAR(255),
-    CLASSIFICATION    VARCHAR(20) NOT NULL,
-    MEMBERS    TINYTEXT,
-    LAST_MOD       TIMESTAMP DEFAULT CURRENT_TIMESTAMP
-);
-
--- 'PROV_AUTH_ADDRESSES', '192.168.56.1' ipv4 address of provision server
-INSERT INTO PARAMETERS VALUES
-	('ACTIVE_POD',  'prov.datarouternew.com'),
-	('PROV_ACTIVE_NAME',  'prov.datarouternew.com'),
-	('STANDBY_POD', ''),
-	('PROV_NAME',   'prov.datarouternew.com'),
-	('NODES',       'node.datarouternew.com'),
-	('PROV_DOMAIN', 'datarouternew.com'),
-	('DELIVERY_INIT_RETRY_INTERVAL', '10'),
-	('DELIVERY_MAX_AGE', '86400'),
-	('DELIVERY_MAX_RETRY_INTERVAL', '3600'),
-	('DELIVERY_RETRY_RATIO', '2'),
-	('LOGROLL_INTERVAL', '300'),
-	('PROV_AUTH_ADDRESSES', 'prov.datarouternew.com'), 
-	('PROV_AUTH_SUBJECTS', ''),
-	('PROV_MAXFEED_COUNT',	'10000'),
-	('PROV_MAXSUB_COUNT',	'100000'),
-	('PROV_REQUIRE_CERT', 'false'),
-	('PROV_REQUIRE_SECURE', 'false'),
-	('_INT_VALUES', 'LOGROLL_INTERVAL|PROV_MAXFEED_COUNT|PROV_MAXSUB_COUNT|DELIVERY_INIT_RETRY_INTERVAL|DELIVERY_MAX_RETRY_INTERVAL|DELIVERY_RETRY_RATIO|DELIVERY_MAX_AGE')
-	;
\ No newline at end of file
diff --git a/datarouter-prov/src/main/resources/docker-compose/docker-compose.yml b/datarouter-prov/src/main/resources/docker-compose/docker-compose.yml
index 1c33e3b..eece155 100644
--- a/datarouter-prov/src/main/resources/docker-compose/docker-compose.yml
+++ b/datarouter-prov/src/main/resources/docker-compose/docker-compose.yml
@@ -21,49 +21,77 @@
 # *
 #-------------------------------------------------------------------------------
 version: '2.1'
-services: 
+services:
   datarouter-prov:
-    image: onap/dmaap/datarouter-prov
+    image: nexus3.onap.org:10003/onap/dmaap/datarouter-prov
     container_name: datarouter-prov
     hostname: prov.datarouternew.com
     ports:
      - "8443:8443"
      - "8080:8080"  
-#    volumes:
-#     - ./prov_data/proserver.properties:/opt/app/datartr/etc/proserver.properties
+    volumes:
+     - ./prov_data/proserver.properties:/opt/app/datartr/etc/proserver.properties
 #     - ./prov_data/datarouter-prov-jar-with-dependencies.jar:/opt/app/datartr/lib/datarouter-prov-jar-with-dependencies.jar
-#      - ./prov_data/addSubscriber.txt:/opt/app/datartr/addSubscriber.txt
-#      - ./prov_data/addFeed3.txt:/opt/app/datartr/addFeed3.txt
-    entrypoint: ["bash", "-c", "sleep 10; /bin/sh -c ./startup.sh"]
+     - ./prov_data/addSubscriber.txt:/opt/app/datartr/addSubscriber.txt
+     - ./prov_data/addFeed3.txt:/opt/app/datartr/addFeed3.txt
+    entrypoint: ["bash", "-c", "./startup.sh"]
     depends_on:
-      mysql_container:
+      mariadb_container:
         condition: service_healthy
+    healthcheck:
+      test: ["CMD", "curl", "-f", "http://prov.datarouternew.com:8080/internal/prov"]
+      interval: 10s
+      timeout: 10s
+      retries: 5
     extra_hosts:
-      - "node.datarouternew.com:172.18.0.4"
-    
+      - "node.datarouternew.com:172.100.0.4"
+    networks:
+      testing_net:
+        ipv4_address: 172.100.0.3
+
   datarouter-node:
-    image: onap/dmaap/datarouter-node
+    image: nexus3.onap.org:10003/onap/dmaap/datarouter-node
     container_name: datarouter-node
     hostname: node.datarouternew.com
     ports:
      - "9443:8443"
      - "9090:8080"
-#    volumes:
-#     - ./node_data/node.properties:/opt/app/datartr/etc/node.properties
-    entrypoint: ["bash", "-c", "sleep 15; /bin/sh -c ./startup.sh"]    
+    volumes:
+     - ./node_data/node.properties:/opt/app/datartr/etc/node.properties
+    entrypoint: ["bash", "-c", "./startup.sh"]
     depends_on:
-      - datarouter-prov
+      datarouter-prov:
+        condition: service_healthy
     extra_hosts:
-      - "prov.datarouternew.com:172.18.0.3"
+      - "prov.datarouternew.com:172.100.0.3"
+    networks:
+      testing_net:
+        ipv4_address: 172.100.0.4
       
-  mysql_container:
-    image: mysql/mysql-server:5.6
-    container_name: mysql
+  mariadb_container:
+    image: mariadb:10.2.14
+    container_name: mariadb
     ports:
       - "3306:3306"
     environment:
-      MYSQL_ROOT_PASSWORD: att2017
-    volumes:
-      - ./database:/tmp/database
-      - ./database:/docker-entrypoint-initdb.d
-    
+      MYSQL_ROOT_PASSWORD: datarouter
+      MYSQL_DATABASE: datarouter
+      MYSQL_USER: datarouter
+      MYSQL_PASSWORD: datarouter
+    healthcheck:
+      test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
+      interval: 10s
+      timeout: 10s
+      retries: 5
+
+    networks:
+      testing_net:
+        ipv4_address: 172.100.0.2
+
+networks:
+  testing_net:
+    driver: bridge
+    ipam:
+      driver: default
+      config:
+        - subnet: 172.100.0.0/16
diff --git a/datarouter-prov/src/main/resources/docker-compose/prov_data/addFeed3.txt b/datarouter-prov/src/main/resources/docker-compose/prov_data/addFeed3.txt
index a21c7ae..03eabb7 100644
--- a/datarouter-prov/src/main/resources/docker-compose/prov_data/addFeed3.txt
+++ b/datarouter-prov/src/main/resources/docker-compose/prov_data/addFeed3.txt
@@ -31,7 +31,7 @@
      "authorization": {
           "classification": "unclassified",
           "endpoint_addrs": [
-               "172.18.0.3",
+               "172.100.0.3",
 			],
           "endpoint_ids": [
                {
diff --git a/datarouter-prov/src/main/resources/docker-compose/prov_data/addSubscriber.txt b/datarouter-prov/src/main/resources/docker-compose/prov_data/addSubscriber.txt
index e974631..15ca309 100644
--- a/datarouter-prov/src/main/resources/docker-compose/prov_data/addSubscriber.txt
+++ b/datarouter-prov/src/main/resources/docker-compose/prov_data/addSubscriber.txt
@@ -24,9 +24,9 @@
                 "delivery" :	
                				
                 { 
-                                "url" : "http://172.18.0.3:7070/", 
-                                "user" : "LOGIN", 
-                                "password" : "PASSWORD", 
+                                "url" : "http://172.100.0.3:7070/",
+                                "user" : "datarouter",
+                                "password" : "datarouter",
                                 "use100" : true 
                 },
                 "metadataOnly" : false, 
diff --git a/datarouter-prov/src/main/resources/docker-compose/prov_data/provserver.properties b/datarouter-prov/src/main/resources/docker-compose/prov_data/provserver.properties
index b722a64..f37330a 100644
--- a/datarouter-prov/src/main/resources/docker-compose/prov_data/provserver.properties
+++ b/datarouter-prov/src/main/resources/docker-compose/prov_data/provserver.properties
@@ -38,11 +38,11 @@
 org.onap.dmaap.datarouter.provserver.truststore.password = changeit
 org.onap.dmaap.datarouter.provserver.accesslog.dir       = /opt/app/datartr/logs
 org.onap.dmaap.datarouter.provserver.spooldir            = /opt/app/datartr/spool
-#org.onap.dmaap.datarouter.provserver.dbscripts          = /home/eby/dr2/cvs/datarouter/prov/misc/
+org.onap.dmaap.datarouter.provserver.dbscripts           = /opt/app/datartr/etc/misc
 org.onap.dmaap.datarouter.provserver.logretention        = 30
 
 # Database access
-org.onap.dmaap.datarouter.db.driver   = com.mysql.jdbc.Driver
-org.onap.dmaap.datarouter.db.url      = jdbc:mysql://172.18.0.2:3306/datarouter
+org.onap.dmaap.datarouter.db.driver   = org.mariadb.jdbc.Driver
+org.onap.dmaap.datarouter.db.url      = jdbc:mariadb://172.100.0.2:3306/datarouter
 org.onap.dmaap.datarouter.db.login    = datarouter
 org.onap.dmaap.datarouter.db.password = datarouter
diff --git a/datarouter-prov/src/main/resources/misc/drtrprov b/datarouter-prov/src/main/resources/misc/drtrprov
index 2afb6ec..9f86c23 100644
--- a/datarouter-prov/src/main/resources/misc/drtrprov
+++ b/datarouter-prov/src/main/resources/misc/drtrprov
@@ -56,7 +56,7 @@
 # 	fi
 	if [ "`pgrep -u mysql mysqld`" = "" ]
 	then
-		echo MySQL is not running.  It must be started before drtrprov
+		echo MariaDB is not running.  It must be started before drtrprov
 		exit 0
 	fi
 	PIDS=`pids`
diff --git a/datarouter-prov/src/main/resources/misc/mysql_dr_schema.sql b/datarouter-prov/src/main/resources/misc/mysql_dr_schema.sql
deleted file mode 100644
index 837030c..0000000
--- a/datarouter-prov/src/main/resources/misc/mysql_dr_schema.sql
+++ /dev/null
@@ -1,139 +0,0 @@
-create database datarouter;
-
-use datarouter;
-
-CREATE TABLE FEEDS (
-    FEEDID         INT UNSIGNED NOT NULL PRIMARY KEY,
-    NAME           VARCHAR(20) NOT NULL,
-    VERSION        VARCHAR(20) NOT NULL,
-    DESCRIPTION    VARCHAR(256),
-    AUTH_CLASS     VARCHAR(32) NOT NULL,
-    PUBLISHER      VARCHAR(8) NOT NULL,
-    SELF_LINK      VARCHAR(256),
-    PUBLISH_LINK   VARCHAR(256),
-    SUBSCRIBE_LINK VARCHAR(256),
-    LOG_LINK       VARCHAR(256),
-    DELETED        BOOLEAN DEFAULT FALSE,
-    LAST_MOD       TIMESTAMP DEFAULT CURRENT_TIMESTAMP
-);
-
-CREATE TABLE FEED_ENDPOINT_IDS (
-    FEEDID        INT UNSIGNED NOT NULL,
-    USERID        VARCHAR(20) NOT NULL,
-    PASSWORD      VARCHAR(32) NOT NULL
-);
-
-CREATE TABLE FEED_ENDPOINT_ADDRS (
-    FEEDID        INT UNSIGNED NOT NULL,
-    ADDR          VARCHAR(44) NOT NULL
-);
-
-CREATE TABLE SUBSCRIPTIONS (
-    SUBID              INT UNSIGNED NOT NULL PRIMARY KEY,
-    FEEDID             INT UNSIGNED NOT NULL,
-    DELIVERY_URL       VARCHAR(256),
-    DELIVERY_USER      VARCHAR(20),
-    DELIVERY_PASSWORD  VARCHAR(32),
-    DELIVERY_USE100    BOOLEAN DEFAULT FALSE,
-    METADATA_ONLY      BOOLEAN DEFAULT FALSE,
-    SUBSCRIBER         VARCHAR(8) NOT NULL,
-    SELF_LINK          VARCHAR(256),
-    LOG_LINK           VARCHAR(256),
-    LAST_MOD           TIMESTAMP DEFAULT CURRENT_TIMESTAMP
-);
-
-CREATE TABLE PARAMETERS (
-    KEYNAME        VARCHAR(32) NOT NULL PRIMARY KEY,
-    VALUE          VARCHAR(4096) NOT NULL
-);
-
-CREATE TABLE LOG_RECORDS (
-    TYPE	   ENUM('pub', 'del', 'exp') NOT NULL,
-    EVENT_TIME     BIGINT NOT NULL,           /* time of the publish request */
-    PUBLISH_ID     VARCHAR(64) NOT NULL,      /* unique ID assigned to this publish attempt */
-    FEEDID         INT UNSIGNED NOT NULL,     /* pointer to feed in FEEDS */
-    REQURI         VARCHAR(256) NOT NULL,     /* request URI */
-    METHOD         ENUM('DELETE', 'GET', 'HEAD', 'OPTIONS', 'PUT', 'POST', 'TRACE') NOT NULL, /* HTTP method */
-    CONTENT_TYPE   VARCHAR(256) NOT NULL,     /* content type of published file */
-    CONTENT_LENGTH BIGINT UNSIGNED NOT NULL,  /* content length of published file */
-
-    FEED_FILEID    VARCHAR(128),		/* file ID of published file */
-    REMOTE_ADDR    VARCHAR(40),			/* IP address of publishing endpoint */
-    USER           VARCHAR(20),			/* user name of publishing endpoint */
-    STATUS         SMALLINT,			/* status code returned to delivering agent */
-
-    DELIVERY_SUBID INT UNSIGNED,		/* pointer to subscription in SUBSCRIPTIONS */
-    DELIVERY_FILEID  VARCHAR(128),		/* file ID of file being delivered */
-    RESULT         SMALLINT,			/* result received from subscribing agent */
-
-    ATTEMPTS       INT,				/* deliveries attempted */
-    REASON         ENUM('notRetryable', 'retriesExhausted'),
-
-    RECORD_ID      BIGINT UNSIGNED NOT NULL PRIMARY KEY, /* unique ID for this record */
-
-    INDEX (FEEDID) USING BTREE,
-    INDEX (DELIVERY_SUBID) USING BTREE,
-    INDEX (RECORD_ID) USING BTREE
-) ENGINE = MyISAM;
-
-CREATE TABLE INGRESS_ROUTES (
-    SEQUENCE  INT UNSIGNED NOT NULL,
-    FEEDID    INT UNSIGNED NOT NULL,
-    USERID    VARCHAR(20),
-    SUBNET    VARCHAR(44),
-    NODESET   INT UNSIGNED NOT NULL
-);
-
-CREATE TABLE EGRESS_ROUTES (
-    SUBID    INT UNSIGNED NOT NULL PRIMARY KEY,
-    NODEID   INT UNSIGNED NOT NULL
-);
-
-CREATE TABLE NETWORK_ROUTES (
-    FROMNODE INT UNSIGNED NOT NULL,
-    TONODE   INT UNSIGNED NOT NULL,
-    VIANODE  INT UNSIGNED NOT NULL
-);
-
-CREATE TABLE NODESETS (
-    SETID   INT UNSIGNED NOT NULL,
-    NODEID  INT UNSIGNED NOT NULL
-);
-
-CREATE TABLE NODES (
-    NODEID  INT UNSIGNED NOT NULL PRIMARY KEY,
-    NAME    VARCHAR(255) NOT NULL,
-    ACTIVE  BOOLEAN DEFAULT TRUE
-);
-
-CREATE TABLE GROUPS (
-    GROUPID  INT UNSIGNED NOT NULL PRIMARY KEY,
-    AUTHID    VARCHAR(100) NOT NULL,
-    NAME    VARCHAR(50) NOT NULL,
-    DESCRIPTION    VARCHAR(255),
-    CLASSIFICATION    VARCHAR(20) NOT NULL,
-    MEMBERS    TINYTEXT,
-    LAST_MOD       TIMESTAMP DEFAULT CURRENT_TIMESTAMP
-);
-
--- 'PROV_AUTH_ADDRESSES', '192.168.56.1' ipv4 address of provision server
-INSERT INTO PARAMETERS VALUES
-	('ACTIVE_POD',  '127.0.0.1'),
-	('PROV_ACTIVE_NAME',  '${PROV_ACTIVE_NAME}'),
-	('STANDBY_POD', '${DRTR_PROV_STANDBYPOD}'),
-	('PROV_NAME',   'ALCDTL47TJ6015:6080'),
-	('NODES',       '127.0.0.1:8080'),
-	('PROV_DOMAIN', '127.0.0.1'),
-	('DELIVERY_INIT_RETRY_INTERVAL', '10'),
-	('DELIVERY_MAX_AGE', '86400'),
-	('DELIVERY_MAX_RETRY_INTERVAL', '3600'),
-	('DELIVERY_RETRY_RATIO', '2'),
-	('LOGROLL_INTERVAL', '300'),
-	('PROV_AUTH_ADDRESSES', '192.168.56.1'), 
-	('PROV_AUTH_SUBJECTS', ''),
-	('PROV_MAXFEED_COUNT',	'10000'),
-	('PROV_MAXSUB_COUNT',	'100000'),
-	('PROV_REQUIRE_CERT', 'false'),
-	('PROV_REQUIRE_SECURE', 'false'),
-	('_INT_VALUES', 'LOGROLL_INTERVAL|PROV_MAXFEED_COUNT|PROV_MAXSUB_COUNT|DELIVERY_INIT_RETRY_INTERVAL|DELIVERY_MAX_RETRY_INTERVAL|DELIVERY_RETRY_RATIO|DELIVERY_MAX_AGE')
-	;
\ No newline at end of file
diff --git a/datarouter-prov/src/main/resources/misc/notes b/datarouter-prov/src/main/resources/misc/notes
index e3f872e..4888dc2 100644
--- a/datarouter-prov/src/main/resources/misc/notes
+++ b/datarouter-prov/src/main/resources/misc/notes
@@ -71,8 +71,8 @@
 	file is specified.
 
 DRTR_PROV_DBLOGIN (default datarouter)
-	The login used to access MySQL
+	The login used to access MariaDB
 DRTR_PROV_DBPASS (default datarouter)
-	The password used to access MySQL
+	The password used to access MariaDB
 DRTR_PROV_DBSCRIPTS (default /opt/app/datartr/etc)
 	The directory containing DB initialization scripts
diff --git a/datarouter-prov/src/main/resources/misc/runreports b/datarouter-prov/src/main/resources/misc/runreports
index 170d6ef..f6037f4 100644
--- a/datarouter-prov/src/main/resources/misc/runreports
+++ b/datarouter-prov/src/main/resources/misc/runreports
@@ -47,7 +47,7 @@
 fi
 if [ "`pgrep -u mysql mysqld`" = "" ]
 then
-	echo MySQL is not running.  It must be started before runreports
+	echo MariaDB is not running.  It must be started before runreports
 	exit 1
 fi
 
diff --git a/datarouter-prov/src/main/resources/misc/sql_init_01.sql b/datarouter-prov/src/main/resources/misc/sql_init_01.sql
new file mode 100644
index 0000000..e1dfd0c
--- /dev/null
+++ b/datarouter-prov/src/main/resources/misc/sql_init_01.sql
@@ -0,0 +1,148 @@
+use datarouter;
+
+CREATE TABLE FEEDS (
+    FEEDID         INT UNSIGNED NOT NULL PRIMARY KEY,
+    GROUPID        INT(10) UNSIGNED NOT NULL DEFAULT 0,
+    NAME           VARCHAR(255) NOT NULL,
+    VERSION        VARCHAR(20) NOT NULL,
+    DESCRIPTION    VARCHAR(1000),
+    BUSINESS_DESCRIPTION VARCHAR(1000) DEFAULT NULL,
+    AUTH_CLASS     VARCHAR(32) NOT NULL,
+    PUBLISHER      VARCHAR(8) NOT NULL,
+    SELF_LINK      VARCHAR(256),
+    PUBLISH_LINK   VARCHAR(256),
+    SUBSCRIBE_LINK VARCHAR(256),
+    LOG_LINK       VARCHAR(256),
+    DELETED        BOOLEAN DEFAULT FALSE,
+    LAST_MOD       TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+    SUSPENDED      BOOLEAN DEFAULT FALSE,
+    CREATED_DATE   TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+);
+
+CREATE TABLE FEED_ENDPOINT_IDS (
+    FEEDID        INT UNSIGNED NOT NULL,
+    USERID        VARCHAR(20) NOT NULL,
+    PASSWORD      VARCHAR(32) NOT NULL
+);
+
+CREATE TABLE FEED_ENDPOINT_ADDRS (
+    FEEDID        INT UNSIGNED NOT NULL,
+    ADDR          VARCHAR(44) NOT NULL
+);
+
+CREATE TABLE SUBSCRIPTIONS (
+    SUBID              INT UNSIGNED NOT NULL PRIMARY KEY,
+    FEEDID             INT UNSIGNED NOT NULL,
+    GROUPID            INT(10) UNSIGNED NOT NULL DEFAULT 0,
+    DELIVERY_URL       VARCHAR(256),
+    DELIVERY_USER      VARCHAR(20),
+    DELIVERY_PASSWORD  VARCHAR(32),
+    DELIVERY_USE100    BOOLEAN DEFAULT FALSE,
+    METADATA_ONLY      BOOLEAN DEFAULT FALSE,
+    SUBSCRIBER         VARCHAR(8) NOT NULL,
+    SELF_LINK          VARCHAR(256),
+    LOG_LINK           VARCHAR(256),
+    LAST_MOD           TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+    SUSPENDED          BOOLEAN DEFAULT FALSE,
+    CREATED_DATE       TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+
+);
+
+CREATE TABLE PARAMETERS (
+    KEYNAME        VARCHAR(32) NOT NULL PRIMARY KEY,
+    VALUE          VARCHAR(4096) NOT NULL
+);
+
+CREATE TABLE LOG_RECORDS (
+    TYPE           ENUM('pub', 'del', 'exp', 'pbf', 'dlx') NOT NULL,
+    EVENT_TIME     BIGINT NOT NULL,           /* time of the publish request */
+    PUBLISH_ID     VARCHAR(64) NOT NULL,      /* unique ID assigned to this publish attempt */
+    FEEDID         INT UNSIGNED NOT NULL,     /* pointer to feed in FEEDS */
+    REQURI         VARCHAR(256) NOT NULL,     /* request URI */
+    METHOD         ENUM('DELETE', 'GET', 'HEAD', 'OPTIONS', 'PUT', 'POST', 'TRACE') NOT NULL, /* HTTP method */
+    CONTENT_TYPE   VARCHAR(256) NOT NULL,     /* content type of published file */
+    CONTENT_LENGTH BIGINT NOT NULL,  /* content length of published file */
+
+    FEED_FILEID    VARCHAR(256),        /* file ID of published file */
+    REMOTE_ADDR    VARCHAR(40),         /* IP address of publishing endpoint */
+    USER           VARCHAR(50),         /* user name of publishing endpoint */
+    STATUS         SMALLINT,            /* status code returned to delivering agent */
+
+    DELIVERY_SUBID INT UNSIGNED,        /* pointer to subscription in SUBSCRIPTIONS */
+    DELIVERY_FILEID  VARCHAR(256),      /* file ID of file being delivered */
+    RESULT         SMALLINT,            /* result received from subscribing agent */
+
+    ATTEMPTS       INT,             /* deliveries attempted */
+    REASON         ENUM('notRetryable', 'retriesExhausted', 'diskFull', 'other'),
+
+    RECORD_ID      BIGINT UNSIGNED NOT NULL PRIMARY KEY, /* unique ID for this record */
+    CONTENT_LENGTH_2 BIGINT,
+
+    INDEX (FEEDID) USING BTREE,
+    INDEX (DELIVERY_SUBID) USING BTREE,
+    INDEX (RECORD_ID) USING BTREE
+) ENGINE = MyISAM;
+
+CREATE TABLE INGRESS_ROUTES (
+    SEQUENCE  INT UNSIGNED NOT NULL,
+    FEEDID    INT UNSIGNED NOT NULL,
+    USERID    VARCHAR(20),
+    SUBNET    VARCHAR(44),
+    NODESET   INT UNSIGNED NOT NULL
+);
+
+CREATE TABLE EGRESS_ROUTES (
+    SUBID    INT UNSIGNED NOT NULL PRIMARY KEY,
+    NODEID   INT UNSIGNED NOT NULL
+);
+
+CREATE TABLE NETWORK_ROUTES (
+    FROMNODE INT UNSIGNED NOT NULL,
+    TONODE   INT UNSIGNED NOT NULL,
+    VIANODE  INT UNSIGNED NOT NULL
+);
+
+CREATE TABLE NODESETS (
+    SETID   INT UNSIGNED NOT NULL,
+    NODEID  INT UNSIGNED NOT NULL
+);
+
+CREATE TABLE NODES (
+    NODEID  INT UNSIGNED NOT NULL PRIMARY KEY,
+    NAME    VARCHAR(255) NOT NULL,
+    ACTIVE  BOOLEAN DEFAULT TRUE
+);
+
+CREATE TABLE GROUPS (
+    GROUPID  INT UNSIGNED NOT NULL PRIMARY KEY,
+    AUTHID    VARCHAR(100) NOT NULL,
+    NAME    VARCHAR(50) NOT NULL,
+    DESCRIPTION    VARCHAR(255),
+    CLASSIFICATION    VARCHAR(20) NOT NULL,
+    MEMBERS    TINYTEXT,
+    LAST_MOD       TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+);
+
+INSERT INTO PARAMETERS VALUES
+    ('ACTIVE_POD',  'prov.datarouternew.com'),
+    ('PROV_ACTIVE_NAME',  'prov.datarouternew.com'),
+    ('STANDBY_POD', ''),
+    ('PROV_NAME',   'prov.datarouternew.com'),
+    ('NODES',       '172.100.0.1|node.datarouternew.com'),
+    ('PROV_DOMAIN', 'datarouternew.com'),
+    ('DELIVERY_INIT_RETRY_INTERVAL', '10'),
+    ('DELIVERY_MAX_AGE', '86400'),
+    ('DELIVERY_MAX_RETRY_INTERVAL', '3600'),
+    ('DELIVERY_RETRY_RATIO', '2'),
+    ('LOGROLL_INTERVAL', '300'),
+    ('PROV_AUTH_ADDRESSES', '172.100.0.1|prov.datarouternew.com|node.datarouternew.com'),
+    ('PROV_AUTH_SUBJECTS', ''),
+    ('PROV_MAXFEED_COUNT',  '10000'),
+    ('PROV_MAXSUB_COUNT',   '100000'),
+    ('PROV_REQUIRE_CERT', 'false'),
+    ('PROV_REQUIRE_SECURE', 'false'),
+    ('_INT_VALUES', 'LOGROLL_INTERVAL|PROV_MAXFEED_COUNT|PROV_MAXSUB_COUNT|DELIVERY_INIT_RETRY_INTERVAL|DELIVERY_MAX_RETRY_INTERVAL|DELIVERY_RETRY_RATIO|DELIVERY_MAX_AGE')
+    ;
+
+INSERT INTO FEED_ENDPOINT_ADDRS VALUES
+    (1,  '172.100.0.1');
\ No newline at end of file
diff --git a/datarouter-prov/src/main/resources/provserver.properties b/datarouter-prov/src/main/resources/provserver.properties
index b722a64..f37330a 100644
--- a/datarouter-prov/src/main/resources/provserver.properties
+++ b/datarouter-prov/src/main/resources/provserver.properties
@@ -38,11 +38,11 @@
 org.onap.dmaap.datarouter.provserver.truststore.password = changeit
 org.onap.dmaap.datarouter.provserver.accesslog.dir       = /opt/app/datartr/logs
 org.onap.dmaap.datarouter.provserver.spooldir            = /opt/app/datartr/spool
-#org.onap.dmaap.datarouter.provserver.dbscripts          = /home/eby/dr2/cvs/datarouter/prov/misc/
+org.onap.dmaap.datarouter.provserver.dbscripts           = /opt/app/datartr/etc/misc
 org.onap.dmaap.datarouter.provserver.logretention        = 30
 
 # Database access
-org.onap.dmaap.datarouter.db.driver   = com.mysql.jdbc.Driver
-org.onap.dmaap.datarouter.db.url      = jdbc:mysql://172.18.0.2:3306/datarouter
+org.onap.dmaap.datarouter.db.driver   = org.mariadb.jdbc.Driver
+org.onap.dmaap.datarouter.db.url      = jdbc:mariadb://172.100.0.2:3306/datarouter
 org.onap.dmaap.datarouter.db.login    = datarouter
 org.onap.dmaap.datarouter.db.password = datarouter
diff --git a/datarouter-prov/src/main/resources/startup.sh b/datarouter-prov/src/main/resources/startup.sh
deleted file mode 100644
index e69de29..0000000
--- a/datarouter-prov/src/main/resources/startup.sh
+++ /dev/null
diff --git a/datarouter-prov/src/test/java/datarouter/provisioning/testBase.java b/datarouter-prov/src/test/java/datarouter/provisioning/testBase.java
index d124af4..dd8e86c 100644
--- a/datarouter-prov/src/test/java/datarouter/provisioning/testBase.java
+++ b/datarouter-prov/src/test/java/datarouter/provisioning/testBase.java
@@ -32,6 +32,7 @@
 import java.security.KeyStore;
 import java.util.Properties;
 
+import org.apache.commons.io.FileUtils;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.http.StatusLine;
@@ -49,7 +50,7 @@
 
 public class testBase {
 	/** The properties file to read the DB properties from */
-	public static final String CONFIG_FILE = "tests.properties";
+	public static final String CONFIG_FILE = "integration_test.properties";
 
 	public Properties props;
 	protected AbstractHttpClient httpclient;
@@ -145,6 +146,7 @@
 		// shut down the connection manager to ensure
 		// immediate deallocation of all system resources
 		httpclient.getConnectionManager().shutdown();
+		FileUtils.deleteDirectory(new File("./unit-test-logs"));
 	}
 
 	protected void ckResponse(HttpResponse response, int expect) {
diff --git a/datarouter-prov/src/test/resources/integration_test.properties b/datarouter-prov/src/test/resources/integration_test.properties
new file mode 100644
index 0000000..36b2ac3
--- /dev/null
+++ b/datarouter-prov/src/test/resources/integration_test.properties
@@ -0,0 +1,5 @@
+test.keystore=self_signed/keystore.jks
+test.kspassword=changeit
+test.truststore=self_signed/cacerts.jks
+test.tspassword=changeit
+test.host=https://prov.datarouternew.com:8443
\ No newline at end of file
diff --git a/datarouter-prov/src/test/resources/log4j.properties b/datarouter-prov/src/test/resources/log4j.properties
new file mode 100644
index 0000000..b3be5b0
--- /dev/null
+++ b/datarouter-prov/src/test/resources/log4j.properties
@@ -0,0 +1,68 @@
+#-------------------------------------------------------------------------------
+# ============LICENSE_START==================================================
+# * org.onap.dmaap
+# * ===========================================================================
+# * Copyright � 2017 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====================================================
+# *
+# * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+# *
+#-------------------------------------------------------------------------------
+
+
+log4j.rootLogger=debug, eventlog, intlog, pelog
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d %5p [%t] - %m%n
+
+#
+# Logger used for provisioning events
+#
+log4j.logger.org.onap.dmaap.datarouter.provisioning.events=debug, eventlog
+log4j.additivity.org.onap.dmaap.datarouter.provisioning.events=false
+
+log4j.appender.eventlog=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.eventlog.file=./unit-test-logs/provevent.log
+log4j.appender.eventlog.datePattern='.'yyyyMMdd
+log4j.appender.eventlog.append=true
+log4j.appender.eventlog.layout=org.apache.log4j.PatternLayout
+log4j.appender.eventlog.layout.ConversionPattern=%d %-5p [%t] - %m%n
+
+#
+# Logger used for internal provisioning server events
+#
+log4j.logger.org.onap.dmaap.datarouter.provisioning.internal=debug, intlog
+log4j.additivity.org.onap.dmaap.datarouter.provisioning.internal=false
+
+log4j.appender.intlog=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.intlog.file=./unit-test-logs/provint.log
+log4j.appender.intlog.datePattern='.'yyyyMMdd
+log4j.appender.intlog.append=true
+log4j.appender.intlog.layout=org.apache.log4j.PatternLayout
+log4j.appender.intlog.layout.ConversionPattern=%d %-5p [%t] - %m%n
+
+#
+# Logger used for policy engine
+#
+log4j.logger.org.onap.dmaap.datarouter.authz.impl.ProvAuthorizer=debug, pelog
+log4j.additivity.org.onap.dmaap.datarouter.authz.impl.ProvAuthorizer=false
+
+log4j.appender.pelog=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.pelog.file=./unit-test-logs/policyengine.log
+log4j.appender.pelog.datePattern='.'yyyyMMdd
+log4j.appender.pelog.append=true
+log4j.appender.pelog.layout=org.apache.log4j.PatternLayout
+log4j.appender.pelog.layout.ConversionPattern=%d %-5p [%t] - %m%n
