diff --git a/.gitignore b/.gitignore
index b146c45..453831c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,6 +19,6 @@
 *.properties
 b.sh
 b.bat
-*.conf
+ldap/slapd.conf
 *.zip
 *.sav
\ No newline at end of file
diff --git a/README-CONFIG.md b/README-CONFIG.md
index 90ea6a5..3fec824 100644
--- a/README-CONFIG.md
+++ b/README-CONFIG.md
@@ -110,34 +110,38 @@
 ### Optional - Used to override fortress properties at runtime.
 
  These fortress properties may be overridden at runtime by setting as Java System Properties:
- * fortress.host
- * fortress.port
- * fortress.admin.user
- * fortress.admin.pw
- * fortress.min.admin.conn
- * fortress.max.admin.conn
- * fortress.enable.ldap.ssl
- * fortress.enable.ldap.ssl.debug
- * fortress.trust.store
- * fortress.trust.store.password
- * fortress.trust.store.onclasspath
- * fortress.config.realm
- * fortress.config.root
- * fortress.ldap.server.type
- * fortress.is.arbac02
-
+ 
+ | system property name              | description                                                             | default  values                                                       |
+ | --------------------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------- |
+ | fortress.host                     | Hostname or ip address of ldap server                                   | localhost                                                             |
+ | fortress.port                     | Port for the ldap server                                                | openldap:389, apacheds: 1389                                          |
+ | fortress.admin.user               | Service account for access to ldap server                               | openldap: cn=manager,dc=example,dc=com, apacheds: uid=admin,ou=system |
+ | fortress.admin.pw                 | service account password                                                | secret                                                                |
+ | fortress.min.admin.conn           | minimum ldap a|min pool connections                                     | 1                                                                     |
+ | fortress.max.admin.conn           | maximum ldap admin pool connections                                     | 10                                                                    |
+ | fortress.enable.ldap.ssl          | true indicates LDAPS connectivity                                       | false                                                                 |
+ | fortress.enable.ldap.ssl.debug    | true will output additional info to log                                 | false                                                                 |
+ | fortress.trust.store              | Name of truststore (if on classpath) otherwise fully qualified name.    |                                                                       |
+ | fortress.trust.store.password     | The password for Java truststore containing server certificate.         | none                                                                  |    
+ | fortress.trust.store.onclasspath  | true indicates truststore is in Java classpath.                         | true                                                                  |
+ | fortress.suffix                   | The suffix is the toplevel LDAP node of the Directory Information Tree. | dc=example,dc=com                                                     |
+ | fortress.config.realm             | The name of the configuration node in LDAP.                             | Default                                                               |                                          
+ | fortress.config.root              | The DN that points to the base of the LDAP config node.                 | ou=Config,dc=example,dc=com                                           |
+ | fortress.is.arbac02               | Used in Apache Fortress Rest and Web to enforce administrative RBAC.    | false                                                                 |
+ | fortress.ldap.server.type         | Used for non-standard processing like password policies and audits.     | Valid values: apacheds, openldap or other                             |
+ 
  The minimum system.properties to enable fortress apis to work (without a config file):
   * fortress.admin.user
   * fortress.admin.pw=secret
   * fortress.config.root=ou=Config,dc=example,dc=com
 
- If the ldap host and port are not the default (localhost:389) set these two:
+ If the ldap host and/or port are not the default (openldap localhost:389) or (apacheds localhost:1389) set these:
  * fortress.host
  * fortress.port
 ___________________________________________________________________________________
 ## SECTION 5.  Order Artifacts found in the Fortress Configuration Subsystem
 
-This subsystem has been hard wired to the following order:
+This subsystem has been hard-wired to the following order:
  1. fortress.properties file - found on the classpath of that name.
  2. Java system properties - to override any of the 14 properties listed above.
  3. LDAP configuration node - found by config coordinates set in the fortress.properties file itself.
@@ -173,8 +177,8 @@
  mvn install -Dload.file=./ldap/setup/ConfigNodeUpdate.xml
  ```
 
-A refreshes the entire LDAP server DIT, deletes of all entries under the suffix, recreating the DIT node structure, and re-adding of the config node.
-B just updates the config node with the new values, preserving the other data.
+A. refreshes the entire LDAP server DIT, deletes of all entries under the suffix, recreating the DIT node structure, and re-adding of the config node.
+B. just updates the config node with the new values, preserving the other data.
 
 ### More notes:
  * Use caution when running the **refreshLDAPData.xml** script.  It deletes all nodes below the suffix before readding.
diff --git a/README-QUICKSTART-APACHEDS.md b/README-QUICKSTART-APACHEDS.md
index 8f0bf89..0f81c34 100644
--- a/README-QUICKSTART-APACHEDS.md
+++ b/README-QUICKSTART-APACHEDS.md
@@ -41,10 +41,6 @@
 -------------------------------------------------------------------------------
 ## SECTION 1. Prerequisites
 
-Minimum hardware requirements:
- * 2 Cores
- * 4GB RAM
-
 Minimum software requirements:
  * Centos or Debian Machine
  * Java SDK 8++
diff --git a/README-QUICKSTART-DOCKER-APACHEDS.md b/README-QUICKSTART-DOCKER-APACHEDS.md
index 85f68f1..c3fd1d1 100644
--- a/README-QUICKSTART-DOCKER-APACHEDS.md
+++ b/README-QUICKSTART-DOCKER-APACHEDS.md
@@ -35,10 +35,6 @@
 -------------------------------------------------------------------------------
 ## SECTION 1. Prerequisites
 
-Minimum hardware requirements:
- * 2 Cores
- * 4GB RAM
-
 Minimum software requirements:
  * Centos or Debian Machine
  * Java SDK 8++
@@ -48,134 +44,144 @@
 ___________________________________________________________________________________
 ## SECTION 2. Apache Fortress Core Setup using ApacheDS Docker Image
 
-1. Download the apache directory fortress-core source from apache git repo:
+1. Download the package:
 
- a. from the command line:
- ```
- git clone  https://gitbox.apache.org/repos/asf/directory-fortress-core.git
- cd directory-fortress-core
- ```
+ a. from git:
+```
+git clone --branch 2.0.5  https://gitbox.apache.org/repos/asf/directory-fortress-core.git
+cd directory-fortress-core
+```
 
-2. Now build the apache directory fortress docker image (trailing dot matters):
+b. or from Apache:
+```
+wget http://www.apache.org/dist/directory/fortress/dist/2.0.5/fortress-core-2.0.5-source-release.zip
+unzip fortress-core-2.0.5-source-release.zip
+cd fortress-core-2.0.5
+```
 
- ```
- docker build -t apachedirectory/apacheds-for-apache-fortress-tests -f src/docker/apacheds-for-apache-fortress-tests/Dockerfile .
- ```
+2. Prepare the package:
+
+```
+cp build.properties.example build.properties
+```
+
+ * Seeds the apacheds properties with defaults.
+ * [build.properties.example](build.properties.example) contains the default config for the apacheds docker image.
+ * Learn how the fortress config subsystem works: [README-CONFIG](README-CONFIG.md).
+
+3. Now build the apachedirectory apacheds docker image (trailing dot matters):
+
+```
+docker build -t apachedirectory/apacheds-for-apache-fortress-tests -f src/docker/apacheds-for-apache-fortress-tests/Dockerfile .
+```
 
  Or just pull the prebuilt image:
 
- ```
- docker pull apachedirectory/apacheds-for-apache-fortress-tests
- ```
+```
+docker pull apachedirectory/apacheds-for-apache-fortress-tests
+```
 
-3. Run the docker container:
+4. Run the docker container:
 
- ```
- CONTAINER_ID=$(docker run -d -P apachedirectory/apacheds-for-apache-fortress-tests)
- CONTAINER_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "10389/tcp") 0).HostPort}}' $CONTAINER_ID)
- echo $CONTAINER_PORT
- ```
+```
+CONTAINER_ID=$(docker run -d -P apachedirectory/apacheds-for-apache-fortress-tests)
+CONTAINER_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "10389/tcp") 0).HostPort}}' $CONTAINER_ID)
+echo $CONTAINER_PORT
+```
 
- *note: make note of the port as it's needed later
- *depending on your docker setup may need to run as root or sudo priv's.
+ * The '$CONTAINER_PORT' value required for next step.
+ * Depending on your Docker setup, may need to run this step as root or sudo priv's.
 
-4. Prepare fortress to use the apacheds running inside docker container:
+5. Prepare your terminal for execution of maven commands.
 
- ```
- cp build.properties.example build.properties
- ```
+```
+#!/bin/sh
+export M2_HOME=...
+export JAVA_HOME=...
+export PATH=$PATH:$M2_HOME/bin
+export MAVEN_OPTS="
+    -Dfortress.host=localhost  
+    -Dfortress.port=32768"
+```
 
-5. Edit the *build.properties* file:
+ More about 'MAVEN_OPTS': 
+  * Provides the coordinates to the ldap server running inside Docker container.  
+  * Replace the 'fortress.port' value with result from ```echo $CONTAINER_PORT```.
+  * if Docker image running on a different machine, replace fortress.host to point to it.
 
- ```
- vi build.properties
- ```
+6. Run the maven install to build fortress and initialize config settings:
 
-6. Update the *ldap.port* prop:
-
- ```
- ldap.port= port from earlier step
- ```
-
-7. Save and exit
-
-8. Prepare your terminal for execution of maven commands.
-
- ```
- #!/bin/sh
- export M2_HOME=...
- export JAVA_HOME=...
- export PATH=$PATH:$M2_HOME/bin
- ```
-
-9. Run the maven install to build fortress lib and prepare its configuration (fortress.properties):
-
- ```
- mvn clean install
- ```
-
+```
+mvn clean install
+```
 ___________________________________________________________________________________
 ## SECTION 3. Apache Fortress Core Integration Test
 
 1. From fortress core base folder, enter the following commands:
 
- ```
- mvn install -Dload.file=./ldap/setup/refreshLDAPData.xml
- mvn install -Dload.file=./ldap/setup/DelegatedAdminManagerLoad.xml
- ```
+```
+mvn install -Dload.file=./ldap/setup/refreshLDAPData.xml
+```
 
  *These will build the Directory Information Tree (DIT), create the config and data policies needed for the integration test to follow.*
 
 2. Next, enter the following command:
 
- ```
- mvn -Dtest=FortressJUnitTest test
- ```
+```
+mvn -Dtest=FortressJUnitTest test -Dfortress.host=localhost -Dfortress.port=32768
+```
 
- *Tests the APIs against your LDAP server.*
+ More about this step: 
+  * Provides the coordinates to the ldap server running inside Docker container.  
+  * Replace the 'fortress.port' value with result from ```echo $CONTAINER_PORT```.
+  * if Docker image running on a different machine, replace fortress.host to point to it.
+  * Tests the APIs against your LDAP server.*
 
 3. Verify the tests worked:
 
- ```
- Tests run: Failures: 0, Errors: 0, Skipped: 0
- Results :
+```
+Tests run: Failures: 0, Errors: 0, Skipped: 0
+Results :
 
- Tests run: Failures: 0, Errors: 0, Skipped: 0
+Tests run: Failures: 0, Errors: 0, Skipped: 0
 
- [INFO]
- [INFO] --- maven-antrun-plugin:1.8:run (default) @ fortress-core ---
- [INFO] Executing tasks
+[INFO]
+[INFO] --- maven-antrun-plugin:1.8:run (default) @ fortress-core ---
+[INFO] Executing tasks
 
- fortress-load:
- [INFO] Executed tasks
- [INFO] ------------------------------------------------------------------------
- [INFO] BUILD SUCCESS
- ```
+fortress-load:
+[INFO] Executed tasks
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD SUCCESS
+```
 
 4. Rerun the tests to verify teardown APIs work:
 
- ```
- mvn -Dtest=FortressJUnitTest test
- ```
+```
+mvn -Dtest=FortressJUnitTest test -Dfortress.host=localhost -Dfortress.port=32768
+```
+
+ More about this step: 
+  * Again verify fortress.host and fortress.port match your environment.  
 
 5. Verify that worked also:
 
- ```
- Results :
+```
+Results :
 
- Tests run: Failures: 0, Errors: 0, Skipped: 0
+Tests run: Failures: 0, Errors: 0, Skipped: 0
 
- [INFO]
- [INFO] --- maven-antrun-plugin:1.8:run (default) @ fortress-core ---
- [INFO] Executing tasks
+[INFO]
+[INFO] --- maven-antrun-plugin:1.8:run (default) @ fortress-core ---
+[INFO] Executing tasks
 
- fortress-load:
- [INFO] Executed tasks
- [INFO] ------------------------------------------------------------------------
- [INFO] BUILD SUCCESS
- [INFO] ------------------------------------------------------------------------
- ```
- Notice more tests ran this time vs the first time, due to teardown.
+fortress-load:
+[INFO] Executed tasks
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD SUCCESS
+[INFO] ------------------------------------------------------------------------
+```
+ * More tests ran this time vs the first time, due to teardown.
 
  Test Notes:
   * If tests complete without errors Apache Fortress works with your ApacheDS server (in Docker).
@@ -196,44 +202,44 @@
 
 #### Build image
 
- ```
- docker build -t apachedirectory/apacheds-for-apache-fortress-tests -f src/docker/apacheds-for-apache-fortress-tests/Dockerfile .
- ```
+```
+docker build -t apachedirectory/apacheds-for-apache-fortress-tests -f src/docker/apacheds-for-apache-fortress-tests/Dockerfile .
+```
 
  * trailing dot matters
 
  Or just to be sure don't use cached layers:
 
- ```
- docker build   --no-cache=true -t apachedirectory/apacheds-for-apache-fortress-tests -f src/docker/apacheds-for-apache-fortress-tests/Dockerfile .
- ```
+```
+docker build   --no-cache=true -t apachedirectory/apacheds-for-apache-fortress-tests -f src/docker/apacheds-for-apache-fortress-tests/Dockerfile .
+```
 
 #### Run container
 
- ```
- CONTAINER_ID=$(docker run -d -P apachedirectory/apacheds-for-apache-fortress-tests)
- CONTAINER_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "10389/tcp") 0).HostPort}}' $CONTAINER_ID)
- echo $CONTAINER_PORT
- ```
+```
+CONTAINER_ID=$(docker run -d -P apachedirectory/apacheds-for-apache-fortress-tests)
+CONTAINER_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "10389/tcp") 0).HostPort}}' $CONTAINER_ID)
+echo $CONTAINER_PORT
+```
 
 #### Go into the container
 
- ```
- docker exec -it $CONTAINER_ID bash
- ```
+```
+docker exec -it $CONTAINER_ID bash
+```
 
 #### Restart container
 
- ```
- docker restart $CONTAINER_ID
- ```
+```
+docker restart $CONTAINER_ID
+```
 
 #### Stop and delete container
 
- ```
- docker stop $CONTAINER_ID
- docker rm $CONTAINER_ID
- ```
+```
+docker stop $CONTAINER_ID
+docker rm $CONTAINER_ID
+```
 
 ____________________________________________________________________________________
 #### END OF README-QUICKSTART-DOCKER-APACHEDS
diff --git a/README-QUICKSTART-DOCKER-SLAPD.md b/README-QUICKSTART-DOCKER-SLAPD.md
index ed403a9..84919be 100644
--- a/README-QUICKSTART-DOCKER-SLAPD.md
+++ b/README-QUICKSTART-DOCKER-SLAPD.md
@@ -35,10 +35,6 @@
 -------------------------------------------------------------------------------
 ## SECTION 1. Prerequisites
 
-Minimum hardware requirements:
- * 2 Cores
- * 4GB RAM
-
 Minimum software requirements:
  * Centos or Debian Machine
  * Java SDK 8++
@@ -48,145 +44,156 @@
 ___________________________________________________________________________________
 ## SECTION 2. Apache Fortress Core Setup using OpenLDAP Docker Image
 
-1. Download the apache directory fortress-core source from apache git repo:
+1. Download the package:
 
- a. from the command line:
- ```
- git clone  https://gitbox.apache.org/repos/asf/directory-fortress-core.git
- cd directory-fortress-core
- ```
+ a. from git:
+```
+git clone --branch 2.0.5  https://gitbox.apache.org/repos/asf/directory-fortress-core.git
+cd directory-fortress-core
+```
 
-2. Now build the apache directory fortress docker image (trailing dot matters):
+b. or from Apache:
+```
+wget http://www.apache.org/dist/directory/fortress/dist/2.0.5/fortress-core-2.0.5-source-release.zip
+unzip fortress-core-2.0.5-source-release.zip
+cd fortress-core-2.0.5
+```
 
- ```
- docker build -t apachedirectory/openldap-for-apache-fortress-tests -f src/docker/openldap-for-apache-fortress-tests/Dockerfile .
- ```
+2. Prepare the package:
+
+```
+cp build.properties.example build.properties
+cp slapd.properties.example slapd.properties
+```
+
+ * Seeds the openldap properties with defaults.
+ * [slapd.properties.example](slapd.properties.example) contains the default config for openldap docker image.
+ * Learn how the fortress config subsystem works: [README-CONFIG](README-CONFIG.md).
+
+3. Now build the apachedirectory openldap docker image (trailing dot matters):
+
+```
+docker build -t apachedirectory/openldap-for-apache-fortress-tests -f src/docker/openldap-for-apache-fortress-tests/Dockerfile .
+```
 
  Or just pull the prebuilt image:
 
- ```
- docker pull apachedirectory/openldap-for-apache-fortress-tests
- ```
+```
+docker pull apachedirectory/openldap-for-apache-fortress-tests
+```
 
-3. Run the docker container:
+4. Run the docker container:
 
- ```
- CONTAINER_ID=$(docker run -d -P apachedirectory/openldap-for-apache-fortress-tests)
- CONTAINER_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "389/tcp") 0).HostPort}}' $CONTAINER_ID)
- echo $CONTAINER_PORT
- ```
+```
+CONTAINER_ID=$(docker run -d -P apachedirectory/openldap-for-apache-fortress-tests)
+CONTAINER_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "389/tcp") 0).HostPort}}' $CONTAINER_ID)
+echo $CONTAINER_PORT
+```
 
- *note: make note of the port as it's needed later
- *depending on your docker setup may need to run as root or sudo priv's.
+ * The '$CONTAINER_PORT' value required for next step.
+ * Depending on your Docker setup, may need to run this step as root or sudo priv's.
 
-4. Prepare fortress to use the slapd running inside docker container:
+5. Prepare your terminal for execution of maven commands.
 
- ```
- cp build.properties.example build.properties
- cp slapd.properties.example slapd.properties
- ```
+```
+#!/bin/sh
+export M2_HOME=...
+export JAVA_HOME=...
+export PATH=$PATH:$M2_HOME/bin
+export MAVEN_OPTS="
+    -Dfortress.host=localhost  
+    -Dfortress.port=32768"
+```
 
-5. Edit the *slapd.properties* file:
+ More about 'MAVEN_OPTS':  
+  * Provides the coordinates to the ldap server running inside Docker container.  
+  * replace the 'fortress.port' value with result from ```echo $CONTAINER_PORT```.
+  * if Docker image running on a different machine, replace fortress.host to point to it.  
 
- ```
- vi slapd.properties
- ```
+6. Run the maven install to build fortress and initialize config settings:
 
-6. Update the *ldap.port* prop:
-
- ```
- ldap.port= port from earlier step
- ```
-
-7. Save and exit
-
-8. Prepare your terminal for execution of maven commands.
-
- ```
- #!/bin/sh
- export M2_HOME=...
- export JAVA_HOME=...
- export PATH=$PATH:$M2_HOME/bin
- ```
-
-9. Run the maven install to build fortress lib and prepare its configuration (fortress.properties):
-
- ```
- mvn clean install
- ```
+```
+mvn clean install
+```
 ___________________________________________________________________________________
 ## SECTION 3. Apache Fortress Core Integration Test
 
 1. From fortress core base folder, enter the following commands:
 
- ```
- mvn install -Dload.file=./ldap/setup/refreshLDAPData.xml
- mvn install -Dload.file=./ldap/setup/DelegatedAdminManagerLoad.xml
- ```
+```
+mvn install -Dload.file=./ldap/setup/refreshLDAPData.xml
+```
 
  *These will build the Directory Information Tree (DIT), create the config and data policies needed for the integration test to follow.*
 
 2. Next, enter the following command:
 
- ```
- mvn -Dtest=FortressJUnitTest test
- ```
+```
+mvn -Dtest=FortressJUnitTest test -Dfortress.host=localhost -Dfortress.port=32768
+```
 
- *Tests the APIs against your LDAP server.*
+ More about this step: 
+  * Provides the coordinates to the ldap server running inside Docker container.  
+  * Replace the 'fortress.port' value with result from ```echo $CONTAINER_PORT```.
+  * if Docker image running on a different machine, replace fortress.host to point to it.
+  * Tests the APIs against your LDAP server.*
 
 3. Verify the tests worked:
 
- ```
- Tests run: Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 196 sec - in org.apache.directory.fortress.core.impl.FortressJUnitTest
+```
+Tests run: Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 196 sec - in org.apache.directory.fortress.core.impl.FortressJUnitTest
 
- Results :
+Results :
 
- Tests run: Failures: 0, Errors: 0, Skipped: 0
+Tests run: Failures: 0, Errors: 0, Skipped: 0
 
- [INFO]
- [INFO] --- maven-antrun-plugin:1.8:run (default) @ fortress-core ---
- [INFO] Executing tasks
+[INFO]
+[INFO] --- maven-antrun-plugin:1.8:run (default) @ fortress-core ---
+[INFO] Executing tasks
 
- fortress-load:
- [INFO] Executed tasks
- [INFO] ------------------------------------------------------------------------
- [INFO] BUILD SUCCESS
- [INFO] ------------------------------------------------------------------------
- [INFO] Total time: 03:19 min
- [INFO] Finished at: 2016-01-07T09:28:18-06:00
- [INFO] Final Memory: 27M/532M
- [INFO] ------------------------------------------------------------------------
- ```
+fortress-load:
+[INFO] Executed tasks
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD SUCCESS
+[INFO] ------------------------------------------------------------------------
+[INFO] Total time: 03:19 min
+[INFO] Finished at: 2016-01-07T09:28:18-06:00
+[INFO] Final Memory: 27M/532M
+[INFO] ------------------------------------------------------------------------
+```
 
 4. Rerun the tests to verify teardown APIs work:
 
- ```
- mvn -Dtest=FortressJUnitTest test
- ```
+```
+mvn -Dtest=FortressJUnitTest test -Dfortress.host=localhost -Dfortress.port=32768
+```
+
+ More about this step: 
+  * Again verify fortress.host and fortress.port match your environment.  
 
 5. Verify that worked also:
 
- ```
- Tests run: Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 207.081 sec - in org.apache.directory.fortress.core.impl.FortressJUnitTest
+```
+Tests run: Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 207.081 sec - in org.apache.directory.fortress.core.impl.FortressJUnitTest
 
- Results :
+Results :
 
- Tests run: Failures: 0, Errors: 0, Skipped: 0
+Tests run: Failures: 0, Errors: 0, Skipped: 0
 
- [INFO]
- [INFO] --- maven-antrun-plugin:1.8:run (default) @ fortress-core ---
- [INFO] Executing tasks
+[INFO]
+[INFO] --- maven-antrun-plugin:1.8:run (default) @ fortress-core ---
+[INFO] Executing tasks
 
- fortress-load:
- [INFO] Executed tasks
- [INFO] ------------------------------------------------------------------------
- [INFO] BUILD SUCCESS
- [INFO] ------------------------------------------------------------------------
- [INFO] Total time: 03:30 min
- [INFO] Finished at: 2016-01-07T09:33:11-06:00
- [INFO] Final Memory: 27M/531M
- [INFO] ------------------------------------------------------------------------
- ```
+fortress-load:
+[INFO] Executed tasks
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD SUCCESS
+[INFO] ------------------------------------------------------------------------
+[INFO] Total time: 03:30 min
+[INFO] Finished at: 2016-01-07T09:33:11-06:00
+[INFO] Final Memory: 27M/531M
+[INFO] ------------------------------------------------------------------------
+```
  Notice more tests ran this time vs the first time, due to teardown
 
  Test Notes:
@@ -206,44 +213,44 @@
 
 #### Build image
 
- ```
- docker build -t apachedirectory/openldap-for-apache-fortress-tests -f src/docker/openldap-for-apache-fortress-tests/Dockerfile .
- ```
+```
+docker build -t apachedirectory/openldap-for-apache-fortress-tests -f src/docker/openldap-for-apache-fortress-tests/Dockerfile .
+```
 
  * trailing dot matters
 
  Or just to be sure don't use cached layers:
 
- ```
- docker build  --no-cache=true -t apachedirectory/openldap-for-apache-fortress-tests -f src/docker/openldap-for-apache-fortress-tests/Dockerfile .
- ```
+```
+docker build  --no-cache=true -t apachedirectory/openldap-for-apache-fortress-tests -f src/docker/openldap-for-apache-fortress-tests/Dockerfile .
+```
 
 #### Run container
 
- ```
- CONTAINER_ID=$(docker run -d -P apachedirectory/openldap-for-apache-fortress-tests)
- CONTAINER_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "389/tcp") 0).HostPort}}' $CONTAINER_ID)
- echo $CONTAINER_PORT
- ```
+```
+CONTAINER_ID=$(docker run -d -P apachedirectory/openldap-for-apache-fortress-tests)
+CONTAINER_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "389/tcp") 0).HostPort}}' $CONTAINER_ID)
+echo $CONTAINER_PORT
+```
 
 #### Go into the container
 
- ```
- docker exec -it $CONTAINER_ID bash
- ```
+```
+docker exec -it $CONTAINER_ID bash
+```
 
 #### Restart container
 
- ```
- docker restart $CONTAINER_ID
- ```
+```
+docker restart $CONTAINER_ID
+```
 
 #### Stop and delete container
 
- ```
- docker stop $CONTAINER_ID
- docker rm $CONTAINER_ID
- ```
+```
+docker stop $CONTAINER_ID
+docker rm $CONTAINER_ID
+```
 
 ____________________________________________________________________________________
 #### END OF README-QUICKSTART-DOCKER-SLAPD
diff --git a/README-QUICKSTART-SLAPD.md b/README-QUICKSTART-SLAPD.md
index a8072be..7662012 100644
--- a/README-QUICKSTART-SLAPD.md
+++ b/README-QUICKSTART-SLAPD.md
@@ -40,10 +40,6 @@
 -------------------------------------------------------------------------------
 ## SECTION 1. Prerequisites
 
-Minimum hardware requirements:
- * 2 Cores
- * 4GB RAM
-
 Minimum software requirements:
  * Centos or Debian Machine
  * Java SDK 8++
diff --git a/build-config.xml b/build-config.xml
index 270a24e..ea68140 100644
--- a/build-config.xml
+++ b/build-config.xml
@@ -305,8 +305,8 @@
          <replace file="${dst.bootstrap.conf}" token="@ADM_MAX_CONN@" value="${admin.max.conn}"/>
          <replace file="${dst.bootstrap.conf}" token="@LOG_ROOT_DN@" value="${log.admin.user}"/>
          <replace file="${dst.bootstrap.conf}" token="@CFG_LOG_ROOT_PW@" value="${log.admin.pw}"/>
-         <replace file="${dst.bootstrap.conf}" token="@LOG_MIN_CONN@" value="${min.log.conn}"/>
-         <replace file="${dst.bootstrap.conf}" token="@LOG_MAX_CONN@" value="${max.log.conn}"/>
+         <replace file="${dst.bootstrap.conf}" token="@LOG_MIN_CONN@" value="${log.min.conn}"/>
+         <replace file="${dst.bootstrap.conf}" token="@LOG_MAX_CONN@" value="${log.max.conn}"/>
          <replace file="${dst.bootstrap.conf}" token="@USR_MIN_CONN@" value="${user.min.conn}"/>
          <replace file="${dst.bootstrap.conf}" token="@USR_MAX_CONN@" value="${user.max.conn}"/>
          <replace file="${dst.bootstrap.conf}" token="@CFG_CRYPTO_PROP@" value="${crypto.prop}"/>
@@ -343,8 +343,8 @@
          <replace file="${dst.remote.conf}" token="@LOG_ROOT_DN@" value="${log.admin.user}"/>
          <replace file="${dst.remote.conf}" token="@CFG_LOG_ROOT_PW@" value="${log.admin.pw}"/>
          <replace file="${dst.remote.conf}" token="@ROLE_OCCUPANTS@" value="${role.occupants}"/>
-         <replace file="${dst.remote.conf}" token="@LOG_MIN_CONN@" value="${min.log.conn}"/>
-         <replace file="${dst.remote.conf}" token="@LOG_MAX_CONN@" value="${max.log.conn}"/>
+         <replace file="${dst.remote.conf}" token="@LOG_MIN_CONN@" value="${log.min.conn}"/>
+         <replace file="${dst.remote.conf}" token="@LOG_MAX_CONN@" value="${log.max.conn}"/>
          <replace file="${dst.remote.conf}" token="@USR_MIN_CONN@" value="${user.min.conn}"/>
          <replace file="${dst.remote.conf}" token="@USR_MAX_CONN@" value="${user.max.conn}"/>
          <replace file="${dst.remote.conf}" token="@CFG_CRYPTO_PROP@" value="${crypto.prop}"/>
diff --git a/pom.xml b/pom.xml
index 242c8c6..c78d2bf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,7 +33,7 @@
   <version>2.0.6-SNAPSHOT</version>
   <inceptionYear>2007</inceptionYear>
   <description>
-    Apache Fortress is a standards-based Access Management SDK that implements ANSI RBAC INCITS 359.
+    Apache Fortress is an authorization platform that implements ANSI INCITS 359 Role-Based Access Control (RBAC).
   </description>
   <url>https://directory.apache.org/fortress/</url>
 
@@ -529,16 +529,12 @@
           <artifactId>maven-surefire-plugin</artifactId>
           <configuration>
             <argLine>-Xmx1024m</argLine>
-            <systemProperties>
-              <systemProperty>
-                <key>version</key>
-                <value>${project.version}</value>
-              </systemProperty>
-              <systemProperty>
-                <key>tenant</key>
-                <value>${tenant}</value>
-              </systemProperty>
-            </systemProperties>
+
+            <systemPropertyVariables>
+              <version>${project.version}</version>
+              <tenant>${tenant}</tenant>
+            </systemPropertyVariables>
+
             <excludes>
               <exclude>${exclude.tests}</exclude>
             </excludes>
@@ -712,9 +708,10 @@
           <execution>
             <phase>test</phase>
             <configuration>
+              <!--<target name="stop-slapd-win-if-present" depends="slapd.dir.check" if="slapd.dir.exists">-->
               <target name="fortress-load" if="load.file" description="Loads fortress policy into ldap">
                 <echo message="############### Run Fortress Ant script to load policy ###############" />
-                <java classname="org.apache.tools.ant.launch.Launcher" fork="true" failonerror="true" dir="${basedir}" timeout="4000000" taskname="startAnt">
+                <java classname="org.apache.tools.ant.launch.Launcher" fork="true" clonevm="true" failonerror="true" dir="${basedir}" timeout="600000" taskname="startAnt">
                   <classpath>
                     <!-- use config/bootstrap folder for config because the config ldap node isn't (might not be) inserted: -->
                     <pathelement location="./config/bootstrap/" />
@@ -770,9 +767,9 @@
 
     <!-- If JDK11++ pull in the JAXB API dependency. -->
     <profile>
-      <id>java-11</id>
+      <id>jdk-11+</id>
       <activation>
-        <jdk>11</jdk>
+        <jdk>[11,]</jdk>
       </activation>
       <dependencies>
         <dependency>
@@ -783,7 +780,6 @@
       </dependencies>
     </profile>
 
-
     <!-- This profile starts the Fortress Console App -->
     <!-- To execute: mvn -Pconsole test -->
     <profile>
diff --git a/slapd.properties.example b/slapd.properties.example
index ea42f7e..d2afc05 100644
--- a/slapd.properties.example
+++ b/slapd.properties.example
@@ -69,8 +69,8 @@
 user.max.conn=10
 
 # Used for slapd logger connection pool.  Leave zeros when using apacheds:
-min.log.conn=1
-max.log.conn=3
+log.min.conn=1
+log.max.conn=3
 
 #These are passwords used for LDAP audit log service accounts:
 # Audit Pool:
diff --git a/src/docker/apacheds-for-apache-fortress-tests/Dockerfile b/src/docker/apacheds-for-apache-fortress-tests/Dockerfile
index d943071..34e20b4 100644
--- a/src/docker/apacheds-for-apache-fortress-tests/Dockerfile
+++ b/src/docker/apacheds-for-apache-fortress-tests/Dockerfile
@@ -32,7 +32,7 @@
 
 # Install ApacheDS
 RUN \
-    wget http://archive.apache.org/dist//directory/apacheds/dist/${APACHEDS_VERSION}/apacheds-${APACHEDS_VERSION}-amd64.deb -q -O /tmp/apacheds.deb && \
+    wget http://archive.apache.org/dist/directory/apacheds/dist/${APACHEDS_VERSION}/apacheds-${APACHEDS_VERSION}-amd64.deb -q -O /tmp/apacheds.deb && \
     dpkg -i /tmp/apacheds.deb && \
     rm /tmp/apacheds.deb
 
diff --git a/src/docker/apacheds-for-apache-fortress-tests/README.md b/src/docker/apacheds-for-apache-fortress-tests/README.md
index 271702b..24cd953 100644
--- a/src/docker/apacheds-for-apache-fortress-tests/README.md
+++ b/src/docker/apacheds-for-apache-fortress-tests/README.md
@@ -36,3 +36,11 @@
 docker push apachedirectory/apacheds-for-apache-fortress-tests
 ```
 
+Note:  Login
+
+```groovy
+docker login
+Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
+Username: whatever
+Password: *****
+```
diff --git a/src/docker/openldap-for-apache-fortress-tests/slapd.conf b/src/docker/openldap-for-apache-fortress-tests/slapd.conf
new file mode 100644
index 0000000..9348a0c
--- /dev/null
+++ b/src/docker/openldap-for-apache-fortress-tests/slapd.conf
@@ -0,0 +1,149 @@
+#
+#   Licensed to the Apache Software Foundation (ASF) under one
+#   or more contributor license agreements.  See the NOTICE file
+#   distributed with this work for additional information
+#   regarding copyright ownership.  The ASF licenses this file
+#   to you 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.
+#
+#
+# Fortress slapd.conf default settings.
+
+include		/etc/ldap/schema/core.schema
+include		/etc/ldap/schema/ppolicy.schema
+include		/etc/ldap/schema/cosine.schema
+include		/etc/ldap/schema/inetorgperson.schema
+include		/etc/ldap/schema/nis.schema
+include		/etc/ldap/schema/openldap.schema
+include		/etc/ldap/schema/fortress.schema
+include		/etc/ldap/schema/rbac.schema
+
+disallow bind_anon
+idletimeout 0
+sizelimit 5000
+timelimit 60
+threads 4
+loglevel 32768
+gentlehup on
+sortvals  roleOccupant
+
+pidfile		/var/run/slapd/slapd.pid
+argsfile	/var/run/slapd/slapd.args
+
+modulepath	/usr/lib/ldap
+moduleload	back_mdb.la
+moduleload	ppolicy.la
+moduleload  accesslog.la
+moduleload  dds.la
+moduleload  back_monitor.la
+
+# Global ACLS:
+# RootDSE is always readable
+access to dn.base="" by * read
+
+# For tooling:
+access to dn.base="cn=subschema"
+  by * read
+
+password-hash {SSHA}
+
+#######################################################################
+# History DB Settings
+#######################################################################
+database	 mdb
+maxreaders 64
+maxsize 1000000000
+suffix		"cn=log"
+rootdn      "cn=Manager,cn=log"
+rootpw      "{SSHA}pSOV2TpCxj2NMACijkcMko4fGrFopctU"
+index objectClass,reqDN,reqAuthzID,reqStart,reqAttr eq
+directory	"/var/lib/ldap/hist"
+access to *
+    by dn.base="cn=Manager,cn=log" write
+dbnosync
+checkpoint   64 5
+
+# Accesslog is readable by replicator and fortress:
+access to dn.subtree="cn=log"
+        by dn.exact="cn=replicator,dc=admin,dc=example,dc=com" read
+        by dn.exact="cn=fortress-admin,dc=admin,dc=example,dc=com" read
+        by * break
+
+#######################################################################
+# Default DB Settings
+#######################################################################
+database	mdb
+maxreaders 64
+maxsize 1000000000
+suffix		"dc=example,dc=com"
+rootdn      "cn=Manager,dc=example,dc=com"
+rootpw      "{SSHA}pSOV2TpCxj2NMACijkcMko4fGrFopctU"
+
+index uidNumber,gidNumber,objectclass eq
+index cn,sn,ftObjNm,ftOpNm,ftRoleName,uid,ou eq,sub
+index ftId,ftPermName,ftRoles,ftUsers,ftRA,ftARA eq
+index roleOccupant eq
+
+directory	"/var/lib/ldap/dflt"
+overlay accesslog
+logdb   "cn=log"
+dbnosync
+checkpoint	64 5
+
+# The fortress admin needs write access to the whole DIT
+access to dn.subtree="dc=example,dc=com"
+        by dn.exact="cn=fortress-admin,dc=admin,dc=example,dc=com" write
+        by * break
+
+# Accesslog is readable by replicator and fortress:
+access to dn.subtree="cn=log"
+        by dn.exact="cn=replicator,dc=admin,dc=example,dc=com" read
+        by dn.exact="cn=fortress-admin,dc=admin,dc=example,dc=com" read
+        by * break
+
+# Allow anonymous ability to bind:
+access to dn.subtree="dc=example,dc=com" attrs=userPassword
+  by anonymous auth
+  by * break
+
+# For audit trail:
+# Allow users access to modify their own pw & fortress audit attrs.
+access to dn.subtree="dc=example,dc=com" attrs=userPassword,ftModifier,ftModCode,ftModId
+  by self =wx
+  by * none
+
+# Allow users compare access to a fortress perm op name:
+access to dn.subtree="dc=example,dc=com" attrs=ftOpNm
+  by users compare
+
+#######################################################################
+# Audit Log Settings
+#######################################################################
+logops bind writes compare
+logoldattr ftModifier ftModCode ftModId ftRC ftRA ftARC ftARA ftCstr ftId ftPermName ftObjNm ftOpNm ftObjId ftGroups ftRoles ftUsers ftType
+logpurge 5+00:00 1+00:00
+
+#######################################################################
+# PW Policy Settings
+#######################################################################
+# Enable the Password Policy overlay to enforce password policies on this database.
+overlay     ppolicy
+ppolicy_default "cn=PasswordPolicy,ou=Policies,dc=example,dc=com"
+ppolicy_use_lockout
+ppolicy_hash_cleartext
+
+#######################################################################
+# Monitor database
+#######################################################################
+database monitor
+
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/ConfigDAO.java b/src/main/java/org/apache/directory/fortress/core/impl/ConfigDAO.java
index 1a35b98..4db5e9f 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/ConfigDAO.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/ConfigDAO.java
@@ -87,7 +87,6 @@
     public static final String GID_NUMBER_SEQUENCE = "ftGidNumber";
     public static final String UID_NUMBER_SEQUENCE = "ftUidNumber";
 
-
     private final String[] CONFIG_OBJ_CLASS =
     {
         SchemaConstants.DEVICE_OC, GlobalIds.PROPS_AUX_OBJECT_CLASS_NAME, GlobalIds.FT_CONFIG_AUX_OBJECT_CLASS_NAME
@@ -101,7 +100,6 @@
         SchemaConstants.CN_AT, GlobalIds.PROPS, GID_NUMBER_SEQUENCE, UID_NUMBER_SEQUENCE
     };
 
-
     /**
      * Package private default constructor.
      */
@@ -331,7 +329,7 @@
         Configuration configuration = new Configuration();
         LdapConnection ld = null;
         String dn = getDn( name );
-        LOG.debug( "getConfig dn [{}]", dn );
+        LOG.info( "getConfig dn [{}]", dn );
         try
         {
             ld = getAdminConnection();
@@ -404,6 +402,6 @@
      */
     private String getDn( String name )
     {
-        return SchemaConstants.CN_AT + "=" + name + "," + CONFIG_ROOT_DN;
+        return SchemaConstants.CN_AT + "=" + name + "," + Config.getInstance().getProperty( GlobalIds.CONFIG_ROOT_PARAM );
     }
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/directory/fortress/core/util/Config.java b/src/main/java/org/apache/directory/fortress/core/util/Config.java
index 8b96bf9..3b64e89 100755
--- a/src/main/java/org/apache/directory/fortress/core/util/Config.java
+++ b/src/main/java/org/apache/directory/fortress/core/util/Config.java
@@ -76,6 +76,7 @@
     private static final String EXT_TRUST_STORE_ONCLASSPATH = "fortress.trust.store.onclasspath";
     private static final String EXT_CONFIG_REALM = "fortress.config.realm";
     private static final String EXT_CONFIG_ROOT_DN = "fortress.config.root";
+    private static final String EXT_CONFIG_SUFFIX = "fortress.suffix";
     private static final String EXT_SERVER_TYPE = "fortress.ldap.server.type";
     private static final String EXT_IS_ARBAC02 = "fortress.is.arbac02";
 
@@ -677,6 +678,15 @@
             LOG.info( PREFIX, GlobalIds.TRUST_STORE_ON_CLASSPATH, szValue );
         }
 
+        // Check to see if the suffix has been overridden by a system property:
+        szValue = System.getProperty( EXT_CONFIG_SUFFIX );
+        if( StringUtils.isNotEmpty( szValue ))
+        {
+            config.setProperty( GlobalIds.SUFFIX, szValue );
+            LOG.info( PREFIX, GlobalIds.SUFFIX, szValue );
+
+        }
+
         // Check to see if the config realm name has been overridden by a system property:
         szValue = System.getProperty( EXT_CONFIG_REALM );
         if( StringUtils.isNotEmpty( szValue ))
@@ -685,7 +695,7 @@
             LOG.info( PREFIX, GlobalIds.CONFIG_REALM, szValue );
         }
 
-        // Check to see if the config realm name has been overridden by a system property:
+        // Check to see if the config node dn has been overridden by a system property:
         szValue = System.getProperty( EXT_CONFIG_ROOT_DN );
         if( StringUtils.isNotEmpty( szValue ))
         {
@@ -703,11 +713,9 @@
 
         // Check to see if ARBAC02 checking enforced in service layer:
         szValue = System.getProperty( EXT_IS_ARBAC02 );
-        LOG.info( PREFIX, GlobalIds.IS_ARBAC02, szValue );
-
         if( StringUtils.isNotEmpty( szValue ))
         {
-            Boolean isArbac02 = new Boolean(szValue);
+            Boolean isArbac02 = Boolean. valueOf( szValue );
             config.setProperty( GlobalIds.IS_ARBAC02, isArbac02.booleanValue() );
             LOG.info( PREFIX, GlobalIds.IS_ARBAC02, isArbac02.booleanValue() );
         }
