diff --git a/cadc-access-control-admin/build.gradle b/cadc-access-control-admin/build.gradle
index 9edf85b7c974511e06724616903378845298dcbc..44037a6ab5e60e117a735a2fb2e59c7163ead46f 100644
--- a/cadc-access-control-admin/build.gradle
+++ b/cadc-access-control-admin/build.gradle
@@ -3,40 +3,39 @@ plugins {
     id 'maven'
     id 'maven-publish'
     id 'com.jfrog.bintray' version '1.7.1'
+    id 'application'
 }
 
 repositories {
     jcenter()
     mavenLocal()
-
-    // Only here until cadcUtil is in jcenter.
-    maven {
-        url  'http://dl.bintray.com/opencadc/software'
-    }
 }
 
 sourceCompatibility = 1.7
+
 group = 'org.opencadc'
 
-version = '1.0'
+version = '1.0.1'
+
+mainClassName = 'ca.nrc.cadc.ac.admin.Main'
 
 dependencies {
     compile 'log4j:log4j:1.2.+'
     compile 'org.jdom:jdom2:2.+'
-    compile 'javax.servlet:javax.servlet-api:3.+'
     compile 'xerces:xercesImpl:2.+'
     compile 'com.unboundid:unboundid-ldapsdk:2.3.+'
-    compile 'commons-fileupload:commons-fileupload:1.3.+'
     compile 'com.sun.mail:javax.mail:1.+'
 
     compile 'org.opencadc:cadc-util:1.+'
-    compile 'org.opencadc:cadc-log:1.+'
     compile 'org.opencadc:cadc-registry:1.+'
     compile 'org.opencadc:cadc-access-control:1.+'
     compile 'org.opencadc:cadc-access-control-server:1.+'
 
     testCompile 'junit:junit:4.+'
-    testCompile 'org.easymock:easymock:3.+'
-    testCompile 'xerces:xercesImpl:2.+'
-    testCompile 'org.skyscreamer:jsonassert:1.+'
+}
+
+configurations {
+  runtime.exclude group: 'org.springframework'
+  runtime.exclude group: 'org.restlet.jse'
+  runtime.exclude group: 'org.restlet.jee'
 }
diff --git a/cadc-access-control-admin/scripts/userAdmin b/cadc-access-control-admin/scripts/userAdmin
deleted file mode 100755
index aa373c1424aa7ec5b1d02a8394bca1363b0eb5a7..0000000000000000000000000000000000000000
--- a/cadc-access-control-admin/scripts/userAdmin
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-java -Xmx128m -jar ${CADC_ROOT}/lib/cadcAccessControl-Admin.jar $*
diff --git a/cadc-access-control-identity/build.gradle b/cadc-access-control-identity/build.gradle
index 608109ac1dab9a5f7922089a7f8bc794bb3d8625..eff722d478495f414a25a7608c5c7fc0631186e5 100644
--- a/cadc-access-control-identity/build.gradle
+++ b/cadc-access-control-identity/build.gradle
@@ -8,11 +8,6 @@ plugins {
 repositories {
     jcenter()
     mavenLocal()
-
-    // Only here until cadcUtil is in jcenter.
-    maven {
-        url  'http://dl.bintray.com/opencadc/software'
-    }
 }
 
 sourceCompatibility = 1.7
@@ -24,7 +19,6 @@ dependencies {
     compile 'log4j:log4j:1.2.+'
 
     compile 'org.opencadc:cadc-util:1.+'
-    compile 'org.opencadc:cadc-log:1.+'
     compile 'org.opencadc:cadc-registry:1.+'
     compile 'org.opencadc:cadc-vosi:1.+'
     compile 'org.opencadc:cadc-access-control:1.+'
diff --git a/cadc-access-control-server/build.gradle b/cadc-access-control-server/build.gradle
index 64243608b595aabacaa8883b546e2e6e11da51ab..06b670f9e2b17f6aeb4fdcb0908cc1795a8081b0 100644
--- a/cadc-access-control-server/build.gradle
+++ b/cadc-access-control-server/build.gradle
@@ -8,23 +8,17 @@ plugins {
 repositories {
     jcenter()
     mavenLocal()
-
-    // Only here until cadcUtil is in jcenter.
-    maven {
-        url  'http://dl.bintray.com/opencadc/software'
-    }
 }
 
 sourceCompatibility = 1.7
 group = 'org.opencadc'
 
-version = '1.0'
+version = '1.0.1'
 
 dependencies {
     compile 'log4j:log4j:1.2.+'
     compile 'org.jdom:jdom2:2.+'
     compile 'org.json:json:20160212'
-    compile 'javax.servlet:javax.servlet-api:3.+'
     compile 'xerces:xercesImpl:2.+'
     compile 'com.unboundid:unboundid-ldapsdk:2.3.+'
 
@@ -39,5 +33,4 @@ dependencies {
     testCompile 'org.easymock:easymock:3.+'
     testCompile 'xerces:xercesImpl:2.+'
     testCompile 'org.skyscreamer:jsonassert:1.+'
-    testCompile 'commons-logging:commons-logging:1.+'
 }
diff --git a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/ldap/AbstractLdapDAOTest.java b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/ldap/AbstractLdapDAOTest.java
index 7c14a87ec444a249c7dda57a5bddb452e03ee9e0..592b6b12a5511e768f8beee976b5688820ff9aed 100644
--- a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/ldap/AbstractLdapDAOTest.java
+++ b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/ldap/AbstractLdapDAOTest.java
@@ -67,23 +67,24 @@
 
 package ca.nrc.cadc.ac.server.ldap;
 
+import java.lang.reflect.Field;
+import java.util.NoSuchElementException;
+
+import javax.security.auth.Subject;
+import javax.security.auth.x500.X500Principal;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.junit.BeforeClass;
+
 import ca.nrc.cadc.ac.PersonalDetails;
 import ca.nrc.cadc.ac.User;
 import ca.nrc.cadc.ac.UserNotFoundException;
 import ca.nrc.cadc.ac.UserRequest;
 import ca.nrc.cadc.auth.DNPrincipal;
 import ca.nrc.cadc.auth.HttpPrincipal;
-import ca.nrc.cadc.auth.NumericPrincipal;
 import ca.nrc.cadc.util.Log4jInit;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.junit.BeforeClass;
-
-import javax.security.auth.Subject;
-import javax.security.auth.x500.X500Principal;
-import java.lang.reflect.Field;
-import java.util.UUID;
-import java.util.NoSuchElementException;
+import ca.nrc.cadc.util.PropertiesReader;
 
 /**
  * Created by jburke on 2014-11-03.
@@ -132,6 +133,8 @@ public class AbstractLdapDAOTest
     {
         Log4jInit.setLevel("ca.nrc.cadc.ac", Level.DEBUG);
 
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+
         // get the configuration of the development server from and config files...
         try
         {
diff --git a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/ldap/LdapDAOTest.java b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/ldap/LdapDAOTest.java
index 2e99e8a2c67379c320a63b8c46901160c2ef0c7f..db2db5e5e32c8b7202a458d9a2ccac7b6b564ea7 100644
--- a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/ldap/LdapDAOTest.java
+++ b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/ldap/LdapDAOTest.java
@@ -68,34 +68,42 @@
 
 package ca.nrc.cadc.ac.server.ldap;
 
-import ca.nrc.cadc.auth.DNPrincipal;
-import ca.nrc.cadc.auth.HttpPrincipal;
-import ca.nrc.cadc.auth.NumericPrincipal;
-import ca.nrc.cadc.util.Log4jInit;
-import com.unboundid.ldap.sdk.DN;
-import com.unboundid.ldap.sdk.LDAPConnection;
-import com.unboundid.ldap.sdk.LDAPException;
-import com.unboundid.ldap.sdk.LDAPInterface;
+import static org.junit.Assert.assertTrue;
 
-import java.security.PrivilegedAction;
-import org.apache.log4j.Level;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import java.security.PrivilegedExceptionAction;
+import java.util.UUID;
 
 import javax.security.auth.Subject;
 import javax.security.auth.x500.X500Principal;
-import java.security.PrivilegedExceptionAction;
-import java.util.UUID;
 
-import org.junit.Assert;
+import org.apache.log4j.Level;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import com.unboundid.ldap.sdk.LDAPConnection;
+
+import ca.nrc.cadc.auth.HttpPrincipal;
+import ca.nrc.cadc.auth.NumericPrincipal;
+import ca.nrc.cadc.util.Log4jInit;
+import ca.nrc.cadc.util.PropertiesReader;
 
 
 public class LdapDAOTest extends AbstractLdapDAOTest
 {
+    @BeforeClass
+    public static void setUpClass()
+    {
+        Log4jInit.setLevel("ca.nrc.cadc.ac", Level.INFO);
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     @Test
     public void testLdapBindConnection() throws Exception
     {
diff --git a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/ldap/LdapGroupDAOTest.java b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/ldap/LdapGroupDAOTest.java
index 62ac75804def5bf98a134b007d66b0f998f586f6..2390292e35b097f379a52a646b602935e18448b2 100644
--- a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/ldap/LdapGroupDAOTest.java
+++ b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/ldap/LdapGroupDAOTest.java
@@ -77,19 +77,37 @@ import java.util.Collection;
 
 import javax.security.auth.Subject;
 
+import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
+import org.junit.AfterClass;
 import org.junit.Assert;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 import ca.nrc.cadc.ac.Group;
 import ca.nrc.cadc.ac.GroupNotFoundException;
 import ca.nrc.cadc.ac.GroupProperty;
 import ca.nrc.cadc.ac.User;
+import ca.nrc.cadc.util.Log4jInit;
+import ca.nrc.cadc.util.PropertiesReader;
 
 public class LdapGroupDAOTest extends AbstractLdapDAOTest
 {
     private static final Logger log = Logger.getLogger(LdapGroupDAOTest.class);
 
+    @BeforeClass
+    public static void setUpClass()
+    {
+        Log4jInit.setLevel("ca.nrc.cadc.ac", Level.INFO);
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     LdapGroupDAO getGroupDAO() throws Exception
     {
         LdapConnections connections = new LdapConnections(config);
diff --git a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/ldap/LdapUserDAOTest.java b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/ldap/LdapUserDAOTest.java
index 3dcb390f7932721071798cfd9a1b4b0b1f2f88b4..a7b6069aac4f294d51ae4d87647d6fcde0cfa2a3 100644
--- a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/ldap/LdapUserDAOTest.java
+++ b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/ldap/LdapUserDAOTest.java
@@ -84,7 +84,10 @@ import java.util.Collection;
 import javax.security.auth.Subject;
 import javax.security.auth.x500.X500Principal;
 
+import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 import ca.nrc.cadc.ac.PersonalDetails;
@@ -96,9 +99,25 @@ import ca.nrc.cadc.auth.DNPrincipal;
 import ca.nrc.cadc.auth.HttpPrincipal;
 import ca.nrc.cadc.auth.NumericPrincipal;
 import ca.nrc.cadc.auth.SSLUtil;
+import ca.nrc.cadc.util.Log4jInit;
+import ca.nrc.cadc.util.PropertiesReader;
 
 public class LdapUserDAOTest extends AbstractLdapDAOTest
 {
+
+    @BeforeClass
+    public static void setUpClass()
+    {
+        Log4jInit.setLevel("ca.nrc.cadc.ac", Level.INFO);
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     private static final Logger log = Logger.getLogger(LdapUserDAOTest.class);
 
     String createUsername()
diff --git a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/ModifyPasswordServletTest.java b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/ModifyPasswordServletTest.java
index ae310c14fae13ac99398bac4e6929ffadfddbdf9..ff87ffcb7e38209fd042847b9ae0965d61a946c8 100644
--- a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/ModifyPasswordServletTest.java
+++ b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/ModifyPasswordServletTest.java
@@ -83,11 +83,14 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.log4j.Level;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 import ca.nrc.cadc.ac.server.UserPersistence;
 import ca.nrc.cadc.auth.HttpPrincipal;
 import ca.nrc.cadc.util.Log4jInit;
+import ca.nrc.cadc.util.PropertiesReader;
 import ca.nrc.cadc.util.StringUtil;
 
 
@@ -99,6 +102,18 @@ public class ModifyPasswordServletTest
         Log4jInit.setLevel("ca.nrc.cadc.ac", Level.INFO);
     }
 
+    @BeforeClass
+    public static void setUpClass()
+    {
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     public void testSubjectAndPasswords(final Subject subject, final String oldPassword,
             final String newPassword, int responseStatus) throws Exception
     {
diff --git a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/ResetPasswordServletTest.java b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/ResetPasswordServletTest.java
index 0273c031e38365e0994eaa7f2b33287222457557..a98b6c4313ff6fb2bfeb566aef2367781e350820 100644
--- a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/ResetPasswordServletTest.java
+++ b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/ResetPasswordServletTest.java
@@ -83,6 +83,8 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 import ca.nrc.cadc.ac.UserAlreadyExistsException;
@@ -90,6 +92,7 @@ import ca.nrc.cadc.ac.UserNotFoundException;
 import ca.nrc.cadc.ac.server.UserPersistence;
 import ca.nrc.cadc.ac.server.ldap.LdapUserDAO;
 import ca.nrc.cadc.auth.HttpPrincipal;
+import ca.nrc.cadc.util.PropertiesReader;
 import ca.nrc.cadc.util.StringUtil;
 
 
@@ -97,6 +100,18 @@ public class ResetPasswordServletTest
 {
     private static final String EMAIL_ADDRESS = "email@canada.ca";
 
+    @BeforeClass
+    public static void setupClass()
+    {
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     public void testSubjectAndEmailAddress(final Subject subject, final String emailAddress,
             int responseStatus) throws Exception
     {
diff --git a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/UserServletTest.java b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/UserServletTest.java
index da1815dc98d17485330e3fb9423719240595e4b1..ad8243908b91ff78cd03bd069ef09ecb37584a2e 100644
--- a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/UserServletTest.java
+++ b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/UserServletTest.java
@@ -13,17 +13,18 @@ import javax.security.auth.Subject;
 import javax.servlet.ServletConfig;
 import javax.servlet.http.HttpServletRequest;
 
-import junit.framework.Assert;
-
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.easymock.EasyMock;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 import ca.nrc.cadc.ac.server.PluginFactory;
 import ca.nrc.cadc.db.StandaloneContextFactory;
 import ca.nrc.cadc.util.Log4jInit;
 import ca.nrc.cadc.util.PropertiesReader;
+import junit.framework.Assert;
 
 
 public class UserServletTest
@@ -35,6 +36,18 @@ public class UserServletTest
         Log4jInit.setLevel("ca.nrc.cadc.ac", Level.INFO);
     }
 
+    @BeforeClass
+    public static void setupClass()
+    {
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     @Test
     public void getAcceptedContentTypeJSON() throws Exception
     {
diff --git a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/WhoAmIServletTest.java b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/WhoAmIServletTest.java
index ff7df8ebda7d1c16a077dee907ca460f5d3cf276..655eb6d9792efc46bf77e43042de559a2af1716b 100644
--- a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/WhoAmIServletTest.java
+++ b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/WhoAmIServletTest.java
@@ -82,19 +82,19 @@ import javax.security.auth.Subject;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import ca.nrc.cadc.ac.server.web.groups.AddUserMemberActionTest;
-import ca.nrc.cadc.auth.AuthMethod;
-import ca.nrc.cadc.reg.Standards;
-
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
+import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+import ca.nrc.cadc.auth.AuthMethod;
 import ca.nrc.cadc.auth.HttpPrincipal;
+import ca.nrc.cadc.reg.Standards;
 import ca.nrc.cadc.reg.client.LocalAuthority;
 import ca.nrc.cadc.reg.client.RegistryClient;
 import ca.nrc.cadc.util.Log4jInit;
+import ca.nrc.cadc.util.PropertiesReader;
 
 
 public class WhoAmIServletTest
@@ -105,6 +105,13 @@ public class WhoAmIServletTest
     public static void setUpClass()
     {
         Log4jInit.setLevel("ca.nrc.cadc.ac", Level.INFO);
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
     }
 
     @Test
diff --git a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/groups/RemoveUserMemberActionTest.java b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/groups/RemoveUserMemberActionTest.java
index 5647059b751b5676cfb33c83bbac35c0a60b5d7b..c41e3437e0f8aa00dc55e0c08de29035216dfb05 100644
--- a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/groups/RemoveUserMemberActionTest.java
+++ b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/groups/RemoveUserMemberActionTest.java
@@ -80,6 +80,7 @@ import javax.security.auth.x500.X500Principal;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.easymock.EasyMock;
+import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -96,6 +97,7 @@ import ca.nrc.cadc.reg.Standards;
 import ca.nrc.cadc.reg.client.LocalAuthority;
 import ca.nrc.cadc.util.Log4jInit;
 import ca.nrc.cadc.util.ObjectUtil;
+import ca.nrc.cadc.util.PropertiesReader;
 
 /**
  *
@@ -109,6 +111,13 @@ public class RemoveUserMemberActionTest
     public static void setUpClass()
     {
         Log4jInit.setLevel("ca.nrc.cadc.ac", Level.INFO);
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
     }
 
     @Test
diff --git a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/users/GetUserActionTest.java b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/users/GetUserActionTest.java
index 70493c2d9b528b93a7c9158bfd36947b1c15c251..ee32f979238e0817bc5b73c0233fbb5c9cebb455 100644
--- a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/users/GetUserActionTest.java
+++ b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/users/GetUserActionTest.java
@@ -78,7 +78,6 @@ import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.io.Writer;
 import java.security.PrivilegedExceptionAction;
-import java.util.Set;
 import java.util.UUID;
 
 import javax.security.auth.Subject;
@@ -87,6 +86,8 @@ import javax.servlet.http.HttpServletResponse;
 
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 import ca.nrc.cadc.ac.PersonalDetails;
@@ -99,6 +100,7 @@ import ca.nrc.cadc.ac.xml.UserWriter;
 import ca.nrc.cadc.auth.HttpPrincipal;
 import ca.nrc.cadc.auth.NumericPrincipal;
 import ca.nrc.cadc.util.Log4jInit;
+import ca.nrc.cadc.util.PropertiesReader;
 
 public class GetUserActionTest
 {
@@ -109,6 +111,18 @@ public class GetUserActionTest
         Log4jInit.setLevel("ca.nrc.cadc.ac.server", Level.INFO);
     }
 
+    @BeforeClass
+    public static void setupClass()
+    {
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     @Test
     public void writeUserXML() throws Exception
     {
diff --git a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/users/GetUserListActionTest.java b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/users/GetUserListActionTest.java
index b1c0edf1a443fd1b92b6b2068d18242a723d6dd9..84e7cf0f4d3e8fc37a869f0de265915252971340 100644
--- a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/users/GetUserListActionTest.java
+++ b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/users/GetUserListActionTest.java
@@ -83,6 +83,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.log4j.Level;
+import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.skyscreamer.jsonassert.JSONAssert;
@@ -95,6 +96,7 @@ import ca.nrc.cadc.ac.server.web.SyncOutput;
 import ca.nrc.cadc.ac.xml.UserListWriter;
 import ca.nrc.cadc.auth.HttpPrincipal;
 import ca.nrc.cadc.util.Log4jInit;
+import ca.nrc.cadc.util.PropertiesReader;
 
 /**
  *
@@ -106,6 +108,13 @@ public class GetUserListActionTest
     public static void setUpClass()
     {
         Log4jInit.setLevel("ca.nrc.cadc.ac", Level.INFO);
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
     }
 
     @Test
diff --git a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/users/ModifyUserActionTest.java b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/users/ModifyUserActionTest.java
index a082d0012eb4aef6ffce3a9168c03c2cb98f7fea..6797c6190cde249952f7ed023a4c7059a0a666dc 100644
--- a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/users/ModifyUserActionTest.java
+++ b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/users/ModifyUserActionTest.java
@@ -80,7 +80,10 @@ import java.security.Principal;
 
 import javax.servlet.http.HttpServletRequest;
 
+import org.apache.log4j.Level;
 import org.easymock.EasyMock;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 import ca.nrc.cadc.ac.PersonalDetails;
@@ -89,9 +92,25 @@ import ca.nrc.cadc.ac.json.JsonUserWriter;
 import ca.nrc.cadc.ac.server.UserPersistence;
 import ca.nrc.cadc.ac.server.web.SyncOutput;
 import ca.nrc.cadc.auth.HttpPrincipal;
+import ca.nrc.cadc.util.Log4jInit;
+import ca.nrc.cadc.util.PropertiesReader;
 
 public class ModifyUserActionTest
 {
+
+    @BeforeClass
+    public static void setUpClass()
+    {
+        Log4jInit.setLevel("ca.nrc.cadc.ac", Level.INFO);
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     @Test
     public void testModifyUser() throws Exception
     {
diff --git a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/users/UserActionFactoryTest.java b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/users/UserActionFactoryTest.java
index a705944eb520913f48b6135d09629181dbdb6ec5..cd8c6a8d6999d6b5819510a4f3b7c40de58147f3 100644
--- a/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/users/UserActionFactoryTest.java
+++ b/cadc-access-control-server/src/test/java/ca/nrc/cadc/ac/server/web/users/UserActionFactoryTest.java
@@ -72,10 +72,13 @@ import javax.servlet.http.HttpServletRequest;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.easymock.EasyMock;
+import org.junit.AfterClass;
 import org.junit.Assert;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 import ca.nrc.cadc.util.Log4jInit;
+import ca.nrc.cadc.util.PropertiesReader;
 
 
 public class UserActionFactoryTest
@@ -87,6 +90,18 @@ public class UserActionFactoryTest
         Log4jInit.setLevel("ca.nrc.cadc.ac", Level.INFO);
     }
 
+    @BeforeClass
+    public static void setUpClass()
+    {
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     @Test
     public void testCreateUserAction()
     {
diff --git a/cadc-access-control/build.gradle b/cadc-access-control/build.gradle
index 6f3b14406b369605e7e60eed415392469e460a71..31ddc1a724b548266dc4bb53ecf2845eb9f84bde 100644
--- a/cadc-access-control/build.gradle
+++ b/cadc-access-control/build.gradle
@@ -3,22 +3,21 @@ plugins {
     id 'maven'
     id 'maven-publish'
     id 'com.jfrog.bintray' version '1.7.1'
+    id 'application'
 }
 
 repositories {
     jcenter()
     mavenLocal()
-
-    // Only here until cadcUtil is in jcenter.
-    maven {
-        url  'http://dl.bintray.com/opencadc/software'
-    }
 }
 
 sourceCompatibility = 1.7
+
 group = 'org.opencadc'
 
-version = '1.0'
+version = '1.0.1'
+
+mainClassName = 'ca.nrc.cadc.ac.client.GMSClientMain'
 
 dependencies {
     compile 'log4j:log4j:1.2.+'
@@ -33,3 +32,7 @@ dependencies {
     testCompile 'xerces:xercesImpl:2.+'
     testCompile 'org.skyscreamer:jsonassert:1.+'
 }
+
+configurations {
+  runtime.exclude group: 'org.springframework'
+}
diff --git a/cadc-access-control/scripts/cadcGMSClient b/cadc-access-control/scripts/cadcGMSClient
deleted file mode 100755
index cb342c137e5dfca14518a79a154e7c06cc246873..0000000000000000000000000000000000000000
--- a/cadc-access-control/scripts/cadcGMSClient
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/bash
-
-# environment
-#
-# CADC_ROOT : location of installed CADC/CANFAR sofwtare
-# CADC_EXT  : location of external java/lib (default: /usr/cadc/external)
-# C2SRV     : name of the service environment to use (default: www, supported: demo, rc, dev)
-#
-
-# location of jar files
-CL=$CADC_ROOT/lib
-EL=/usr/cadc/external/java/lib
-if [ ! -z $CADC_EXT ]; then
-    EL=$CADC_EXT/java/lib
-fi
-
-# classpath
-echo
-EP="${EL}/jdom2.jar:${EL}/log4j.jar:${EL}/xerces.jar"
-CP="${CL}/cadcUtil.jar:${CL}/cadcRegistryClient.jar:${CL}/cadcAccessControl.jar"
-echo "classpath: ${CP}:${EP}"
-echo
-
-# service environment
-LOCAL=""
-
-if [ "$C2SRV" == "www" ]; then
-    # no-op
-    LOCAL=""
-elif [ "$C2SRV" == "demo" ]; then
-    LOCAL="-Dca.nrc.cadc.reg.client.RegistryClient.shortHostname=demo"
-elif [ "$C2SRV" == "rc" ]; then
-    LOCAL="-Dca.nrc.cadc.reg.client.RegistryClient.shortHostname=rc"
-elif [ "$C2SRV" == "dev" ]; then 
-    LOCAL="-Dca.nrc.cadc.reg.client.RegistryClient.host=$(whoami).cadc.dao.nrc.ca" 
-fi
-echo "registry hack: $LOCAL"
-echo
-
-java $LOCAL -cp "${CP}:${EP}" ca.nrc.cadc.ac.client.GMSClientMain "$@"
-
diff --git a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/client/JsonUserListInputStreamWrapperTest.java b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/client/JsonUserListInputStreamWrapperTest.java
index ce4caa3360b90e476ddbf3ff6e984fc96c5e2e39..b79620b0b0b5c1a8ca7755a22502a0a89fd29975 100644
--- a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/client/JsonUserListInputStreamWrapperTest.java
+++ b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/client/JsonUserListInputStreamWrapperTest.java
@@ -68,21 +68,13 @@
 
 package ca.nrc.cadc.ac.client;
 
-import ca.nrc.cadc.ac.InternalID;
-import ca.nrc.cadc.ac.PersonalDetails;
-import ca.nrc.cadc.ac.TestUtil;
-import ca.nrc.cadc.ac.User;
-import ca.nrc.cadc.ac.json.JsonUserListWriter;
-import ca.nrc.cadc.ac.xml.AbstractReaderWriter;
-import ca.nrc.cadc.auth.HttpPrincipal;
-import ca.nrc.cadc.util.Log4jInit;
+import static org.junit.Assert.assertEquals;
 
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.io.StringWriter;
 import java.io.Writer;
 import java.net.URI;
-import java.security.Principal;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -90,21 +82,41 @@ import java.util.UUID;
 
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
-
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
-import static org.junit.Assert.*;
+import ca.nrc.cadc.ac.InternalID;
+import ca.nrc.cadc.ac.PersonalDetails;
+import ca.nrc.cadc.ac.TestUtil;
+import ca.nrc.cadc.ac.User;
+import ca.nrc.cadc.ac.json.JsonUserListWriter;
+import ca.nrc.cadc.ac.xml.AbstractReaderWriter;
+import ca.nrc.cadc.util.Log4jInit;
+import ca.nrc.cadc.util.PropertiesReader;
 
 
 public class JsonUserListInputStreamWrapperTest
 {
     private static final Logger log = Logger.getLogger(JsonUserListInputStreamWrapperTest.class);
-    
+
     static
     {
         Log4jInit.setLevel("ca.nrc.cadc.ac", Level.INFO);
     }
-    
+
+    @BeforeClass
+    public static void setupClass()
+    {
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     @Test
     public void readInputStream() throws Exception
     {
@@ -131,7 +143,7 @@ public class JsonUserListInputStreamWrapperTest
         userListWriter.write(users, writer);
         String json = writer.toString();
         log.debug("user:\n" + json);
-        
+
         final InputStream inputStream = new ByteArrayInputStream(json.getBytes());
 
         testSubject.read(inputStream);
diff --git a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/client/UserClientTest.java b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/client/UserClientTest.java
index 4aa6144492cbfa9011c3eae711e42264e322414a..f4a9040c139053b323a402c9abe6d22b40fe303a 100644
--- a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/client/UserClientTest.java
+++ b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/client/UserClientTest.java
@@ -81,7 +81,9 @@ import javax.security.auth.x500.X500Principal;
 
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
+import org.junit.AfterClass;
 import org.junit.Assert;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 import ca.nrc.cadc.auth.HttpPrincipal;
@@ -89,6 +91,7 @@ import ca.nrc.cadc.auth.NumericPrincipal;
 import ca.nrc.cadc.reg.Standards;
 import ca.nrc.cadc.reg.client.LocalAuthority;
 import ca.nrc.cadc.util.Log4jInit;
+import ca.nrc.cadc.util.PropertiesReader;
 
 
 public class UserClientTest
@@ -98,6 +101,18 @@ public class UserClientTest
 
     private URI umsServiceURI;
 
+    @BeforeClass
+    public static void setupClass()
+    {
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     public UserClientTest()
     {
         Log4jInit.setLevel("ca.nrc.cadc.ac", Level.INFO);
diff --git a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/json/JsonGroupReaderWriterTest.java b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/json/JsonGroupReaderWriterTest.java
index e2079a714ad88a7c7aba053229e1c4bdc5e64c7a..50b73124358a3570c9e8c938f8cfbeeac94cf812 100644
--- a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/json/JsonGroupReaderWriterTest.java
+++ b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/json/JsonGroupReaderWriterTest.java
@@ -89,6 +89,7 @@ import javax.security.auth.x500.X500Principal;
 
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
+import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -103,6 +104,7 @@ import ca.nrc.cadc.ac.WriterException;
 import ca.nrc.cadc.ac.xml.AbstractReaderWriter;
 import ca.nrc.cadc.auth.HttpPrincipal;
 import ca.nrc.cadc.util.Log4jInit;
+import ca.nrc.cadc.util.PropertiesReader;
 
 /**
  * @author jburke
@@ -111,12 +113,23 @@ public class JsonGroupReaderWriterTest
 {
     private static Logger log = Logger.getLogger(JsonGroupReaderWriterTest.class);
 
-    @BeforeClass
-    public static void setUpClass()
+    static
     {
         Log4jInit.setLevel("ca.nrc.cadc.ac.json", Level.INFO);
     }
 
+    @BeforeClass
+    public static void setupClass()
+    {
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     @Test
     public void testReaderExceptions() throws Exception
     {
diff --git a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/json/JsonUserListReaderWriterTest.java b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/json/JsonUserListReaderWriterTest.java
index c03f4b01c456e8e3ca165d9e1cad280f613d273a..e6b4a7933a9be9d1da71de255ba0299fe1746cc0 100644
--- a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/json/JsonUserListReaderWriterTest.java
+++ b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/json/JsonUserListReaderWriterTest.java
@@ -1,5 +1,22 @@
 package ca.nrc.cadc.ac.json;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.net.URI;
+import java.util.UUID;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
 import ca.nrc.cadc.ac.InternalID;
 import ca.nrc.cadc.ac.PersonalDetails;
 import ca.nrc.cadc.ac.PosixDetails;
@@ -7,21 +24,9 @@ import ca.nrc.cadc.ac.TestUtil;
 import ca.nrc.cadc.ac.User;
 import ca.nrc.cadc.ac.WriterException;
 import ca.nrc.cadc.ac.xml.AbstractReaderWriter;
-import ca.nrc.cadc.auth.HttpPrincipal;
 import ca.nrc.cadc.auth.NumericPrincipal;
 import ca.nrc.cadc.util.Log4jInit;
-import org.json.JSONObject;
-import org.junit.Test;
-import org.skyscreamer.jsonassert.JSONAssert;
-
-import java.io.*;
-import java.net.URI;
-import java.security.Principal;
-import java.util.*;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-
-import static org.junit.Assert.*;
+import ca.nrc.cadc.util.PropertiesReader;
 
 
 /**
@@ -30,12 +35,24 @@ import static org.junit.Assert.*;
 public class JsonUserListReaderWriterTest
 {
     private static final Logger log = Logger.getLogger(JsonUserListReaderWriterTest.class);
-    
+
     static
     {
         Log4jInit.setLevel("ca.nrc.cadc.ac", Level.INFO);
     }
-    
+
+    @BeforeClass
+    public static void setupClass()
+    {
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     @Test
     public void testReaderExceptions()
             throws Exception
diff --git a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/json/JsonUserReaderWriterTest.java b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/json/JsonUserReaderWriterTest.java
index dd88de293772a27f73e56daae329291486ced152..9daa80fcedf0e033a998d53983708cd49311d200 100644
--- a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/json/JsonUserReaderWriterTest.java
+++ b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/json/JsonUserReaderWriterTest.java
@@ -68,6 +68,22 @@
  */
 package ca.nrc.cadc.ac.json;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.net.URI;
+import java.util.UUID;
+
+import org.apache.log4j.Logger;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
 import ca.nrc.cadc.ac.InternalID;
 import ca.nrc.cadc.ac.PersonalDetails;
 import ca.nrc.cadc.ac.PosixDetails;
@@ -76,19 +92,7 @@ import ca.nrc.cadc.ac.User;
 import ca.nrc.cadc.ac.WriterException;
 import ca.nrc.cadc.ac.xml.AbstractReaderWriter;
 import ca.nrc.cadc.auth.NumericPrincipal;
-import org.apache.log4j.Logger;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.net.URI;
-import java.util.UUID;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import ca.nrc.cadc.util.PropertiesReader;
 
 /**
  *
@@ -98,6 +102,18 @@ public class JsonUserReaderWriterTest
 {
     private static Logger log = Logger.getLogger(JsonUserReaderWriterTest.class);
 
+    @BeforeClass
+    public static void setupClass()
+    {
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     @Test
     public void testReaderExceptions()
         throws Exception
@@ -110,7 +126,7 @@ public class JsonUserReaderWriterTest
             fail("null String should throw IllegalArgumentException");
         }
         catch (IllegalArgumentException e) {}
-        
+
         try
         {
             InputStream in = null;
@@ -119,7 +135,7 @@ public class JsonUserReaderWriterTest
             fail("null InputStream should throw IOException");
         }
         catch (IOException e) {}
-        
+
         try
         {
             Reader r = null;
@@ -129,7 +145,7 @@ public class JsonUserReaderWriterTest
         }
         catch (IllegalArgumentException e) {}
     }
-     
+
     @Test
     public void testWriterExceptions()
         throws Exception
@@ -142,7 +158,7 @@ public class JsonUserReaderWriterTest
         }
         catch (WriterException e) {}
     }
-     
+
     @Test
     public void testReadWrite()
         throws Exception
@@ -166,5 +182,5 @@ public class JsonUserReaderWriterTest
         assertNotNull(actual);
         assertEquals(expected, actual);
     }
-    
+
 }
diff --git a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/json/JsonUserRequestReaderWriterTest.java b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/json/JsonUserRequestReaderWriterTest.java
index f383d07b46f6ce302ceb5692dfb0a8e24af5be44..17f68819988570a7f5e1efb1f39c0bd6915b2f37 100644
--- a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/json/JsonUserRequestReaderWriterTest.java
+++ b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/json/JsonUserRequestReaderWriterTest.java
@@ -67,6 +67,21 @@
  */
 package ca.nrc.cadc.ac.json;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.net.URI;
+import java.util.UUID;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
 import ca.nrc.cadc.ac.InternalID;
 import ca.nrc.cadc.ac.PersonalDetails;
 import ca.nrc.cadc.ac.TestUtil;
@@ -75,23 +90,24 @@ import ca.nrc.cadc.ac.UserRequest;
 import ca.nrc.cadc.ac.WriterException;
 import ca.nrc.cadc.ac.xml.AbstractReaderWriter;
 import ca.nrc.cadc.auth.HttpPrincipal;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.net.URI;
-import java.security.Principal;
-import java.util.UUID;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import ca.nrc.cadc.util.PropertiesReader;
 
 
 public class JsonUserRequestReaderWriterTest
 {
+
+    @BeforeClass
+    public static void setupClass()
+    {
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     @Test
     public void testReaderExceptions()
         throws Exception
diff --git a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/GroupListReaderWriterTest.java b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/GroupListReaderWriterTest.java
index 60331f5a132eb14c74eaeaa1f6ef0d21e19fe603..cefbb2a24a2c49163cd3812bb13a394fe13e6483 100644
--- a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/GroupListReaderWriterTest.java
+++ b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/GroupListReaderWriterTest.java
@@ -68,10 +68,10 @@
  */
 package ca.nrc.cadc.ac.xml;
 
-import ca.nrc.cadc.ac.Group;
-import ca.nrc.cadc.ac.WriterException;
-import org.apache.log4j.Logger;
-import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -79,10 +79,14 @@ import java.io.Reader;
 import java.util.ArrayList;
 import java.util.List;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import org.apache.log4j.Logger;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import ca.nrc.cadc.ac.Group;
+import ca.nrc.cadc.ac.WriterException;
+import ca.nrc.cadc.util.PropertiesReader;
 
 /**
  *
@@ -92,6 +96,18 @@ public class GroupListReaderWriterTest
 {
     private static Logger log = Logger.getLogger(GroupListReaderWriterTest.class);
 
+    @BeforeClass
+    public static void setupClass()
+    {
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     @Test
     public void testReaderExceptions()
         throws Exception
@@ -104,7 +120,7 @@ public class GroupListReaderWriterTest
             fail("null String should throw IllegalArgumentException");
         }
         catch (IllegalArgumentException e) {}
-        
+
         try
         {
             InputStream in = null;
@@ -113,7 +129,7 @@ public class GroupListReaderWriterTest
             fail("null InputStream should throw IOException");
         }
         catch (IOException e) {}
-        
+
         try
         {
             Reader r = null;
@@ -123,7 +139,7 @@ public class GroupListReaderWriterTest
         }
         catch (IllegalArgumentException e) {}
     }
-     
+
     @Test
     public void testWriterExceptions()
         throws Exception
@@ -136,15 +152,15 @@ public class GroupListReaderWriterTest
         }
         catch (WriterException e) {}
     }
-     
+
     @Test
     public void testMinimalReadWrite()
         throws Exception
-    {        
+    {
         List<Group> expected = new ArrayList<Group>();
         expected.add(new Group("group1"));
         expected.add(new Group("group2"));
-        
+
         StringBuilder xml = new StringBuilder();
         GroupListWriter groupListWriter = new GroupListWriter();
         groupListWriter.write(expected, xml);
diff --git a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/GroupPropertyReaderWriterTest.java b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/GroupPropertyReaderWriterTest.java
index 0a2598471ee0c64f290d0bee13e48852d1a74f0e..201892be2cd78e200326ee8d5153ca51a6e87391 100644
--- a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/GroupPropertyReaderWriterTest.java
+++ b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/GroupPropertyReaderWriterTest.java
@@ -68,16 +68,22 @@
  */
 package ca.nrc.cadc.ac.xml;
 
-import ca.nrc.cadc.ac.GroupProperty;
-import ca.nrc.cadc.ac.ReaderException;
-import ca.nrc.cadc.ac.WriterException;
-import ca.nrc.cadc.util.Log4jInit;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.jdom2.Element;
+import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import static org.junit.Assert.*;
+
+import ca.nrc.cadc.ac.GroupProperty;
+import ca.nrc.cadc.ac.ReaderException;
+import ca.nrc.cadc.ac.WriterException;
+import ca.nrc.cadc.util.Log4jInit;
+import ca.nrc.cadc.util.PropertiesReader;
 
 /**
  *
@@ -87,6 +93,18 @@ public class GroupPropertyReaderWriterTest extends AbstractReaderWriter
 {
     private static Logger log = Logger.getLogger(GroupPropertyReaderWriterTest.class);
 
+    @BeforeClass
+    public static void setupClass()
+    {
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     @BeforeClass
     public static void setUpClass()
     {
@@ -104,7 +122,7 @@ public class GroupPropertyReaderWriterTest extends AbstractReaderWriter
             fail("null element should throw ReaderException");
         }
         catch (ReaderException e) {}
-         
+
         element = new Element("foo");
         try
         {
@@ -112,7 +130,7 @@ public class GroupPropertyReaderWriterTest extends AbstractReaderWriter
             fail("element not named 'property' should throw ReaderException");
         }
         catch (ReaderException e) {}
-         
+
         element = new Element("property");
         try
         {
@@ -120,7 +138,7 @@ public class GroupPropertyReaderWriterTest extends AbstractReaderWriter
             fail("element without 'key' attribute should throw ReaderException");
         }
         catch (ReaderException e) {}
-         
+
         element.setAttribute("key", "foo");
         try
         {
@@ -128,7 +146,7 @@ public class GroupPropertyReaderWriterTest extends AbstractReaderWriter
             fail("element without 'type' attribute should throw ReaderException");
         }
         catch (ReaderException e) {}
-         
+
         element.setAttribute("type", "Double");
         try
         {
@@ -137,7 +155,7 @@ public class GroupPropertyReaderWriterTest extends AbstractReaderWriter
         }
         catch (ReaderException e) {}
     }
-     
+
     @Test
     public void testWriterExceptions()
         throws Exception
@@ -149,7 +167,7 @@ public class GroupPropertyReaderWriterTest extends AbstractReaderWriter
             fail("null GroupProperty should throw WriterException");
         }
         catch (WriterException e) {}
-         
+
         GroupProperty groupProperty = new GroupProperty("key", new Double(1.0), true);
         try
         {
@@ -158,7 +176,7 @@ public class GroupPropertyReaderWriterTest extends AbstractReaderWriter
         }
         catch (IllegalArgumentException e) {}
     }
-     
+
     @Test
     public void testReadWrite()
         throws Exception
@@ -167,21 +185,21 @@ public class GroupPropertyReaderWriterTest extends AbstractReaderWriter
         GroupProperty expected = new GroupProperty("key", "value", true);
         Element element = getElement(expected);
         assertNotNull(element);
-         
+
         GroupProperty actual = getGroupProperty(element);
         assertNotNull(actual);
-         
+
         assertEquals(expected, actual);
-         
+
         // Integer tuype
         expected = new GroupProperty("key", new Integer(1), false);
         element = getElement(expected);
         assertNotNull(element);
-         
+
         actual = getGroupProperty(element);
         assertNotNull(actual);
-         
+
         assertEquals(expected, actual);
     }
-     
+
 }
diff --git a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/GroupReaderWriterTest.java b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/GroupReaderWriterTest.java
index ee219c9c822927eceb21728a9c69665fb6bd4019..17343df0eb1058d06c2cf84f73e243abfdf1b40a 100644
--- a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/GroupReaderWriterTest.java
+++ b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/GroupReaderWriterTest.java
@@ -85,6 +85,8 @@ import java.util.UUID;
 import javax.security.auth.x500.X500Principal;
 
 import org.apache.log4j.Logger;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 import ca.nrc.cadc.ac.Group;
@@ -96,6 +98,7 @@ import ca.nrc.cadc.ac.TestUtil;
 import ca.nrc.cadc.ac.User;
 import ca.nrc.cadc.ac.WriterException;
 import ca.nrc.cadc.auth.HttpPrincipal;
+import ca.nrc.cadc.util.PropertiesReader;
 
 /**
  *
@@ -105,6 +108,18 @@ public class GroupReaderWriterTest
 {
     private static Logger log = Logger.getLogger(GroupReaderWriterTest.class);
 
+    @BeforeClass
+    public static void setupClass()
+    {
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     @Test
     public void testReaderExceptions()
         throws Exception
diff --git a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/IdentityReaderWriterTest.java b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/IdentityReaderWriterTest.java
index 13f31fa0195b212923c35cfc9129e82ff1abaa73..5e09999ccabc9c4c8a7cae4d191196e3703fb631 100644
--- a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/IdentityReaderWriterTest.java
+++ b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/IdentityReaderWriterTest.java
@@ -68,23 +68,28 @@
  */
 package ca.nrc.cadc.ac.xml;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import java.security.Principal;
+import java.util.UUID;
+
+import javax.management.remote.JMXPrincipal;
+import javax.security.auth.x500.X500Principal;
+
+import org.apache.log4j.Logger;
+import org.jdom2.Element;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
 import ca.nrc.cadc.ac.ReaderException;
 import ca.nrc.cadc.ac.WriterException;
 import ca.nrc.cadc.auth.HttpPrincipal;
 import ca.nrc.cadc.auth.NumericPrincipal;
 import ca.nrc.cadc.auth.OpenIdPrincipal;
-import org.apache.log4j.Logger;
-import org.jdom2.Element;
-import org.junit.Test;
-
-import javax.management.remote.JMXPrincipal;
-import javax.security.auth.x500.X500Principal;
-import java.security.Principal;
-import java.util.UUID;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import ca.nrc.cadc.util.PropertiesReader;
 
 /**
  *
@@ -94,6 +99,18 @@ public class IdentityReaderWriterTest extends AbstractReaderWriter
 {
     private static Logger log = Logger.getLogger(IdentityReaderWriterTest.class);
 
+    @BeforeClass
+    public static void setupClass()
+    {
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     @Test
     public void testReaderExceptions()
         throws Exception
@@ -105,7 +122,7 @@ public class IdentityReaderWriterTest extends AbstractReaderWriter
             fail("null element should throw ReaderException");
         }
         catch (ReaderException e) {}
-         
+
         element = new Element("foo");
         try
         {
@@ -113,7 +130,7 @@ public class IdentityReaderWriterTest extends AbstractReaderWriter
             fail("element not named 'identity' should throw ReaderException");
         }
         catch (ReaderException e) {}
-         
+
         element = new Element("identity");
         try
         {
@@ -121,7 +138,7 @@ public class IdentityReaderWriterTest extends AbstractReaderWriter
             fail("element without 'type' attribute should throw ReaderException");
         }
         catch (ReaderException e) {}
-         
+
         element.setAttribute("type", "foo");
         try
         {
@@ -130,7 +147,7 @@ public class IdentityReaderWriterTest extends AbstractReaderWriter
         }
         catch (ReaderException e) {}
     }
-     
+
     @Test
     public void testWriterExceptions()
         throws Exception
@@ -142,7 +159,7 @@ public class IdentityReaderWriterTest extends AbstractReaderWriter
             fail("null Identity should throw WriterException");
         }
         catch (WriterException e) {}
-         
+
         p = new JMXPrincipal("foo");
         try
         {
@@ -151,7 +168,7 @@ public class IdentityReaderWriterTest extends AbstractReaderWriter
         }
         catch (IllegalArgumentException e) {}
     }
-     
+
     @Test
     public void testReadWrite()
         throws Exception
@@ -160,41 +177,41 @@ public class IdentityReaderWriterTest extends AbstractReaderWriter
         Principal expected = new X500Principal("cn=foo,o=bar");
         Element element = getElement(expected);
         assertNotNull(element);
-         
+
         Principal actual = getPrincipal(element);
         assertNotNull(actual);
-         
+
         assertEquals(expected, actual);
 
         // CADC
         expected = new NumericPrincipal(UUID.randomUUID());
         element = getElement(expected);
         assertNotNull(element);
-         
+
         actual = getPrincipal(element);
         assertNotNull(actual);
-         
+
         assertEquals(expected, actual);
-        
+
         // OpenID
         expected = new OpenIdPrincipal("bar");
         element = getElement(expected);
         assertNotNull(element);
-         
+
         actual = getPrincipal(element);
         assertNotNull(actual);
-         
+
         assertEquals(expected, actual);
-        
+
         // HTTP
         expected = new HttpPrincipal("baz");
         element = getElement(expected);
         assertNotNull(element);
-         
+
         actual = getPrincipal(element);
         assertNotNull(actual);
-         
+
         assertEquals(expected, actual);
     }
-    
+
 }
diff --git a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/UserDetailsReaderWriterTest.java b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/UserDetailsReaderWriterTest.java
index e49735de1aa62767adb19b451dcfdc510bc54cb7..c7ab9890fd5fc61cd74bcb3faa7c1b2ac242de17 100644
--- a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/UserDetailsReaderWriterTest.java
+++ b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/UserDetailsReaderWriterTest.java
@@ -68,17 +68,21 @@
  */
 package ca.nrc.cadc.ac.xml;
 
-import ca.nrc.cadc.ac.PersonalDetails;
-import ca.nrc.cadc.ac.PosixDetails;
-import ca.nrc.cadc.ac.ReaderException;
-import ca.nrc.cadc.ac.WriterException;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
 import org.apache.log4j.Logger;
 import org.jdom2.Element;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import ca.nrc.cadc.ac.PersonalDetails;
+import ca.nrc.cadc.ac.PosixDetails;
+import ca.nrc.cadc.ac.ReaderException;
+import ca.nrc.cadc.ac.WriterException;
+import ca.nrc.cadc.util.PropertiesReader;
 
 /**
  *
@@ -88,6 +92,18 @@ public class UserDetailsReaderWriterTest extends AbstractReaderWriter
 {
     private static Logger log = Logger.getLogger(UserDetailsReaderWriterTest.class);
 
+    @BeforeClass
+    public static void setupClass()
+    {
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     @Test
     public void testReaderExceptions()
         throws Exception
@@ -99,7 +115,7 @@ public class UserDetailsReaderWriterTest extends AbstractReaderWriter
             fail("null element should throw ReaderException");
         }
         catch (ReaderException e) {}
-         
+
         element = new Element("foo");
         try
         {
@@ -124,7 +140,7 @@ public class UserDetailsReaderWriterTest extends AbstractReaderWriter
         }
         catch (ReaderException e) {}
     }
-     
+
     @Test
     public void testWriterExceptions()
         throws Exception
@@ -145,7 +161,7 @@ public class UserDetailsReaderWriterTest extends AbstractReaderWriter
         }
         catch (WriterException e) {}
     }
-     
+
     @Test
     public void testReadWritePersonalDetails()
         throws Exception
@@ -158,7 +174,7 @@ public class UserDetailsReaderWriterTest extends AbstractReaderWriter
         expected.institute = "institute";
         Element element = getElement(expected);
         assertNotNull(element);
-        
+
         PersonalDetails actual = getPersonalDetails(element);
         assertNotNull(actual);
         assertEquals(expected, actual);
@@ -168,7 +184,7 @@ public class UserDetailsReaderWriterTest extends AbstractReaderWriter
         assertEquals(expected.email, actual.email);
         assertEquals(expected.institute, actual.institute);
     }
-    
+
     @Test
     public void testReadWritePosixDetails()
         throws Exception
@@ -176,10 +192,10 @@ public class UserDetailsReaderWriterTest extends AbstractReaderWriter
         PosixDetails expected = new PosixDetails("username", 123l, 456, "/dev/null");
         Element element = getElement(expected);
         assertNotNull(element);
-        
+
         PosixDetails actual = getPosixDetails(element);
         assertNotNull(actual);
         assertEquals(expected, actual);
     }
-    
+
 }
diff --git a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/UserListReaderWriterTest.java b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/UserListReaderWriterTest.java
index 2f304d832de713ec02b2a9a7eea1756de6900fb9..47b88e0501dbb58177885df6e14d6135a750ab5f 100644
--- a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/UserListReaderWriterTest.java
+++ b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/UserListReaderWriterTest.java
@@ -14,6 +14,8 @@ import java.util.List;
 import java.util.UUID;
 
 import org.apache.log4j.Logger;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 import ca.nrc.cadc.ac.InternalID;
@@ -21,11 +23,24 @@ import ca.nrc.cadc.ac.TestUtil;
 import ca.nrc.cadc.ac.User;
 import ca.nrc.cadc.ac.WriterException;
 import ca.nrc.cadc.auth.HttpPrincipal;
+import ca.nrc.cadc.util.PropertiesReader;
 
 public class UserListReaderWriterTest
 {
     private static Logger log = Logger.getLogger(UserListReaderWriterTest.class);
 
+    @BeforeClass
+    public static void setupClass()
+    {
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     @Test
     public void testReaderExceptions()
         throws Exception
diff --git a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/UserReaderWriterTest.java b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/UserReaderWriterTest.java
index 5c496d2239fcbed9419a6623a9bb6600d8f09b2a..4769314b4247e677ebc7e7d0b8e54fe85387c73f 100644
--- a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/UserReaderWriterTest.java
+++ b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/UserReaderWriterTest.java
@@ -68,14 +68,10 @@
  */
 package ca.nrc.cadc.ac.xml;
 
-import ca.nrc.cadc.ac.InternalID;
-import ca.nrc.cadc.ac.PersonalDetails;
-import ca.nrc.cadc.ac.TestUtil;
-import ca.nrc.cadc.ac.User;
-import ca.nrc.cadc.ac.WriterException;
-import ca.nrc.cadc.auth.NumericPrincipal;
-import org.apache.log4j.Logger;
-import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -83,10 +79,20 @@ import java.io.Reader;
 import java.net.URI;
 import java.util.UUID;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import ca.nrc.cadc.ac.InternalID;
+import ca.nrc.cadc.ac.PersonalDetails;
+import ca.nrc.cadc.ac.TestUtil;
+import ca.nrc.cadc.ac.User;
+import ca.nrc.cadc.ac.WriterException;
+import ca.nrc.cadc.auth.NumericPrincipal;
+import ca.nrc.cadc.util.Log4jInit;
+import ca.nrc.cadc.util.PropertiesReader;
 
 /**
  *
@@ -96,10 +102,30 @@ public class UserReaderWriterTest
 {
     private static Logger log = Logger.getLogger(UserReaderWriterTest.class);
 
+    public UserReaderWriterTest()
+    {
+        Log4jInit.setLevel("ca.nrc.cadc.reg", Level.INFO);
+    }
+
+    @BeforeClass
+    public static void setupClass()
+    {
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     @Test
     public void testReaderExceptions()
         throws Exception
     {
+
+        System.out.println("config dir: " + System.getProperty(PropertiesReader.class.getName() + ".dir"));
+
         try
         {
             String s = null;
@@ -108,7 +134,7 @@ public class UserReaderWriterTest
             fail("null String should throw IllegalArgumentException");
         }
         catch (IllegalArgumentException e) {}
-        
+
         try
         {
             InputStream in = null;
@@ -117,7 +143,7 @@ public class UserReaderWriterTest
             fail("null InputStream should throw IOException");
         }
         catch (IOException e) {}
-        
+
         try
         {
             Reader r = null;
@@ -127,7 +153,7 @@ public class UserReaderWriterTest
         }
         catch (IllegalArgumentException e) {}
     }
-     
+
     @Test
     public void testWriterExceptions()
         throws Exception
@@ -140,7 +166,7 @@ public class UserReaderWriterTest
         }
         catch (WriterException e) {}
     }
-     
+
     @Test
     public void testReadWrite()
         throws Exception
@@ -151,7 +177,7 @@ public class UserReaderWriterTest
         TestUtil.setField(expected, new InternalID(uri), AbstractReaderWriter.ID);
         expected.getIdentities().add(new NumericPrincipal(uuid));
         expected.personalDetails = new PersonalDetails("firstname", "lastname");
-        
+
         StringBuilder xml = new StringBuilder();
         UserWriter userWriter = new UserWriter();
         userWriter.write(expected, xml);
@@ -162,5 +188,5 @@ public class UserReaderWriterTest
         assertNotNull(actual);
         assertEquals(expected, actual);
     }
-    
+
 }
diff --git a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/UserRequestReaderWriterTest.java b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/UserRequestReaderWriterTest.java
index f00295093c061ea251664bea85cefc666d4e0f79..3b4a9fad401b6860d0c1528d928c7cb1494e25ef 100644
--- a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/UserRequestReaderWriterTest.java
+++ b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/xml/UserRequestReaderWriterTest.java
@@ -68,15 +68,10 @@
  */
 package ca.nrc.cadc.ac.xml;
 
-import ca.nrc.cadc.ac.InternalID;
-import ca.nrc.cadc.ac.PersonalDetails;
-import ca.nrc.cadc.ac.TestUtil;
-import ca.nrc.cadc.ac.User;
-import ca.nrc.cadc.ac.UserRequest;
-import ca.nrc.cadc.ac.WriterException;
-import ca.nrc.cadc.auth.NumericPrincipal;
-import org.apache.log4j.Logger;
-import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -84,10 +79,21 @@ import java.io.Reader;
 import java.net.URI;
 import java.util.UUID;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import ca.nrc.cadc.ac.InternalID;
+import ca.nrc.cadc.ac.PersonalDetails;
+import ca.nrc.cadc.ac.TestUtil;
+import ca.nrc.cadc.ac.User;
+import ca.nrc.cadc.ac.UserRequest;
+import ca.nrc.cadc.ac.WriterException;
+import ca.nrc.cadc.auth.NumericPrincipal;
+import ca.nrc.cadc.util.Log4jInit;
+import ca.nrc.cadc.util.PropertiesReader;
 
 /**
  *
@@ -97,6 +103,24 @@ public class UserRequestReaderWriterTest
 {
     private static Logger log = Logger.getLogger(UserRequestReaderWriterTest.class);
 
+    public UserRequestReaderWriterTest()
+    {
+        Log4jInit.setLevel("ca.nrc.cadc.ac", Level.INFO);
+    }
+
+    @BeforeClass
+    public static void setupClass()
+    {
+        System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
+        System.out.println("set config dir to: " + System.getProperty(PropertiesReader.class.getName() + ".dir"));
+    }
+
+    @AfterClass
+    public static void teardownClass()
+    {
+        System.clearProperty(PropertiesReader.class.getName() + ".dir");
+    }
+
     @Test
     public void testReaderExceptions()
         throws Exception
@@ -109,7 +133,7 @@ public class UserRequestReaderWriterTest
             fail("null String should throw IllegalArgumentException");
         }
         catch (IllegalArgumentException e) {}
-        
+
         try
         {
             InputStream in = null;
@@ -118,7 +142,7 @@ public class UserRequestReaderWriterTest
             fail("null InputStream should throw IOException");
         }
         catch (IOException e) {}
-        
+
         try
         {
             Reader r = null;
@@ -128,7 +152,7 @@ public class UserRequestReaderWriterTest
         }
         catch (IllegalArgumentException e) {}
     }
-     
+
     @Test
     public void testWriterExceptions()
         throws Exception
@@ -141,7 +165,7 @@ public class UserRequestReaderWriterTest
         }
         catch (WriterException e) {}
     }
-     
+
     @Test
     public void testReadWrite()
         throws Exception
@@ -171,5 +195,5 @@ public class UserRequestReaderWriterTest
         assertEquals(String.valueOf(expected.getPassword()),
                      String.valueOf(actual.getPassword()));
     }
-    
+
 }