diff --git a/.gitignore b/.gitignore
index eb5a316..b3ecb72 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
 target
+derby.log
diff --git a/admin.services/eclipse-runconfigs/TestCreateOrmXml.launch b/admin.services/eclipse-runconfigs/TestCreateOrmXml.launch
new file mode 100644
index 0000000..2910eec
--- /dev/null
+++ b/admin.services/eclipse-runconfigs/TestCreateOrmXml.launch
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/extensions/TestCreateOrmXml.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="eclipselink.example.mysports.admin.services.test.extensions.TestCreateOrmXml"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="admin.services"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:${system_property:user.home}/.m2/repository/eclipselink/example/mysports/persistence/0.0.1-SNAPSHOT/persistence-0.0.1-SNAPSHOT.jar"/>
+</launchConfiguration>
diff --git a/admin.services/eclipse-runconfigs/TestCreateStyles.launch b/admin.services/eclipse-runconfigs/TestCreateStyles.launch
new file mode 100644
index 0000000..faf2b52
--- /dev/null
+++ b/admin.services/eclipse-runconfigs/TestCreateStyles.launch
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/style/TestCreateStyles.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="eclipselink.example.mysports.admin.services.test.style.TestCreateStyles"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="admin.services"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:${system_property:user.home}/.m2/repository/eclipselink/example/mysports/persistence/0.0.1-SNAPSHOT/persistence-0.0.1-SNAPSHOT.jar"/>
+</launchConfiguration>
diff --git a/admin.services/pom.xml b/admin.services/pom.xml
index 1d9f636..511ebed 100644
--- a/admin.services/pom.xml
+++ b/admin.services/pom.xml
@@ -5,7 +5,7 @@
 	<artifactId>admin.services</artifactId>
 	<packaging>jar</packaging>
 	<name>MySports Admin Services</name>
-	
+
 	<parent>
 		<groupId>eclipselink.example.mysports</groupId>
 		<artifactId>example</artifactId>
@@ -56,6 +56,20 @@
 			<scope>test</scope>
 		</dependency>
 
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>test.common</artifactId>
+			<version>${project.version}</version>
+			<scope>test</scope>
+		</dependency>
+
+
+		<dependency>
+			<groupId>org.apache.derby</groupId>
+			<artifactId>derby</artifactId>
+			<version>10.9.1.0</version>
+			<scope>test</scope>
+		</dependency>
 	</dependencies>
 
 	<build>
@@ -63,11 +77,22 @@
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.0</version>
 				<configuration>
 					<source>1.6</source>
 					<target>1.6</target>
 				</configuration>
 			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<version>2.12.4</version>
+				<configuration>
+					<argLine>-javaagent:${user.home}\\.m2\\repository\\eclipselink\\example\\mysports\\persistence\\${project.version}\\persistence-${project.version}.jar</argLine>
+				</configuration>
+			</plugin>
+
 		</plugins>
 	</build>
 
diff --git a/admin.services/src/main/resources/META-INF/persistence.xml b/admin.services/src/main/resources/META-INF/persistence.xml
index a4f2b34..80000a9 100644
--- a/admin.services/src/main/resources/META-INF/persistence.xml
+++ b/admin.services/src/main/resources/META-INF/persistence.xml
@@ -11,14 +11,6 @@
     <class>eclipselink.example.mysports.admin.model.HostEnvironment</class>
     <validation-mode>NONE</validation-mode>
     <properties>
-      <property name="eclipselink.logging.timestamp" value="false"/>
-      <property name="eclipselink.logging.thread" value="false"/>
-      <property name="eclipselink.logging.exceptions" value="false"/>
-      <property name="eclipselink.logging.connection" value="false"/>
-      <property name="eclipselink.logging.level.ejb_or_metadata" value="WARNING"/>
-      <property name="eclipselink.logging.level" value="FINE"/>
-      <property name="eclipselink.logging.parameters" value="true"/>
-      <property name="eclipselink.logging.logger" value="DefaultLogger"/>
       <property name="eclipselink.weaving" value="true"/>
     </properties>
   </persistence-unit>
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/services/AppTest.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/AppTest.java
deleted file mode 100644
index d2b7092..0000000
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/services/AppTest.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package eclipselink.example.mysports.admin.services;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-/**
- * Unit test for simple App.
- */
-public class AppTest 
-    extends TestCase
-{
-    /**
-     * Create the test case
-     *
-     * @param testName name of the test case
-     */
-    public AppTest( String testName )
-    {
-        super( testName );
-    }
-
-    /**
-     * @return the suite of tests being tested
-     */
-    public static Test suite()
-    {
-        return new TestSuite( AppTest.class );
-    }
-
-    /**
-     * Rigourous Test :-)
-     */
-    public void testApp()
-    {
-        assertTrue( true );
-    }
-}
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/CreateHostEnvironments.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/CreateHostEnvironments.java
similarity index 97%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/CreateHostEnvironments.java
rename to admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/CreateHostEnvironments.java
index f2d5838..dd0a05c 100644
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/CreateHostEnvironments.java
+++ b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/CreateHostEnvironments.java
@@ -10,7 +10,7 @@
  * Contributors:
  *  dclarke - EclipseLink 2.3 - MySports Demo Bug 344608
  ******************************************************************************/
-package eclipselink.example.mysports.admin.test;
+package eclipselink.example.mysports.admin.services.test;
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/CreateLeagues.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/CreateLeagues.java
similarity index 98%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/CreateLeagues.java
rename to admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/CreateLeagues.java
index 64b3806..68d5d70 100644
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/CreateLeagues.java
+++ b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/CreateLeagues.java
@@ -10,7 +10,7 @@
  * Contributors:
  *  dclarke - EclipseLink 2.3 - MySports Demo Bug 344608
  ******************************************************************************/
-package eclipselink.example.mysports.admin.test;
+package eclipselink.example.mysports.admin.services.test;
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/PersistenceTesting.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/PersistenceTesting.java
similarity index 75%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/PersistenceTesting.java
rename to admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/PersistenceTesting.java
index 5f8c37a..63bcc59 100644
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/PersistenceTesting.java
+++ b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/PersistenceTesting.java
@@ -10,7 +10,7 @@
  * Contributors:
  *  dclarke - EclipseLink 2.4 - MySports Demo Bug 344608
  ******************************************************************************/
-package eclipselink.example.mysports.admin.test;
+package eclipselink.example.mysports.admin.services.test;
 
 import static org.eclipse.persistence.config.PersistenceUnitProperties.CONNECTION_POOL;
 import static org.eclipse.persistence.config.PersistenceUnitProperties.CONNECTION_POOL_INITIAL;
@@ -22,9 +22,13 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.eclipse.persistence.config.PersistenceUnitProperties;
+
+import eclipselink.example.mysports.test.common.ExamplePropertiesLoader;
+
 public class PersistenceTesting {
 
-    public static Map<String, Object> add(Map<String, Object> properties) {
+    public static Map<String, Object> add(Map<String, Object> properties, boolean replaceTables) {
         Map<String, Object> props = properties;
 
         if (props == null) {
@@ -37,13 +41,21 @@
         props.put(CONNECTION_POOL_READ + CONNECTION_POOL_MIN, "1");
         props.put(CONNECTION_POOL + CONNECTION_POOL_INITIAL, "1");
         props.put(CONNECTION_POOL + CONNECTION_POOL_MIN, "1");
+        
+        if (replaceTables) {
+            props.put(PersistenceUnitProperties.DDL_GENERATION, PersistenceUnitProperties.DROP_AND_CREATE);
+            props.put(PersistenceUnitProperties.DDL_GENERATION_MODE, PersistenceUnitProperties.DDL_DATABASE_GENERATION);
+        }
 
         ExamplePropertiesLoader.loadProperties(props);
         return props;
     }
 
-    public static Map<String, Object> get() {
-        return add(null);
+    public static Map<String, Object> get(boolean replaceTables) {
+        return add(null, replaceTables);
     }
 
+    public static Map<String, Object> get() {
+        return add(null, false);
+    }
 }
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/CreateDatabase.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/TestCreateDatabase.java
similarity index 97%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/CreateDatabase.java
rename to admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/TestCreateDatabase.java
index 44151ac..b718618 100644
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/CreateDatabase.java
+++ b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/TestCreateDatabase.java
@@ -10,7 +10,7 @@
  * Contributors:
  *  dclarke - EclipseLink 2.3 - MySports Demo Bug 344608
  ******************************************************************************/
-package eclipselink.example.mysports.admin.test;
+package eclipselink.example.mysports.admin.services.test;
 
 import java.util.Map;
 
@@ -34,7 +34,7 @@
  * @author dclarke
  * @since EclipseLink 2.3.0
  */
-public class CreateDatabase {
+public class TestCreateDatabase {
 
     /**
      * Using EclipseLink's schema generation when the
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/VerifyModelAndMappings.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/VerifyModelAndMappings.java
similarity index 97%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/VerifyModelAndMappings.java
rename to admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/VerifyModelAndMappings.java
index 38fa33a..6b13ca9 100644
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/VerifyModelAndMappings.java
+++ b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/VerifyModelAndMappings.java
@@ -10,7 +10,7 @@
  * Contributors:
  *  dclarke - EclipseLink 2.3 - MySports Demo Bug 344608
  ******************************************************************************/
-package eclipselink.example.mysports.admin.test;
+package eclipselink.example.mysports.admin.services.test;
 
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.Persistence;
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/extensions/CreateOrmXML.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/extensions/TestCreateOrmXml.java
similarity index 69%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/extensions/CreateOrmXML.java
rename to admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/extensions/TestCreateOrmXml.java
index 282504e..d82785b 100644
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/extensions/CreateOrmXML.java
+++ b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/extensions/TestCreateOrmXml.java
@@ -10,7 +10,7 @@
  * Contributors:
  *  dclarke - EclipseLink 2.3 - MySports Demo Bug 344608
  ******************************************************************************/
-package eclipselink.example.mysports.admin.test.extensions;
+package eclipselink.example.mysports.admin.services.test.extensions;
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
@@ -18,12 +18,17 @@
 
 import org.eclipse.persistence.internal.jpa.metadata.xml.XMLEntityMappings;
 import org.eclipse.persistence.internal.jpa.metadata.xml.XMLEntityMappingsWriter;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 import eclipselink.example.mysports.admin.services.MappingsLoader;
-import eclipselink.example.mysports.admin.test.PersistenceTesting;
+import eclipselink.example.mysports.admin.services.test.PersistenceTesting;
+import eclipselink.example.mysports.admin.services.test.league.ExampleLeagues;
 
-public class CreateOrmXML {
+public class TestCreateOrmXml {
+
+    private static EntityManagerFactory emf;
 
     @Test
     public void createEmpty() {
@@ -35,7 +40,6 @@
 
     @Test
     public void createFromDB() {
-        EntityManagerFactory emf = Persistence.createEntityManagerFactory("MySportsAdmin", PersistenceTesting.get());
         EntityManager em = emf.createEntityManager();
 
         try {
@@ -50,4 +54,17 @@
         }
     }
 
+    @BeforeClass
+    public static void createEMF() {
+        emf = Persistence.createEntityManagerFactory("MySportsAdmin", PersistenceTesting.get(true));
+        
+        new ExampleLeagues().populate(emf);
+    }
+    
+    @AfterClass
+    public static void closeEMF() {
+        if (emf != null && emf.isOpen()) {
+            emf.close();
+        }
+    }
 }
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/league/ExampleLeagues.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/league/ExampleLeagues.java
new file mode 100644
index 0000000..5fb31d3
--- /dev/null
+++ b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/league/ExampleLeagues.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2010-2012 Oracle. All rights reserved.
+ * This program and the accompanying materials are made available under the 
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
+ * which accompanies this distribution. 
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at 
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ *  dclarke - EclipseLink 2.3 - MySports Demo Bug 344608
+ ******************************************************************************/
+package eclipselink.example.mysports.admin.services.test.league;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import eclipselink.example.mysports.admin.model.DataIsolation;
+import eclipselink.example.mysports.admin.model.HostedLeague;
+
+/**
+ * Test fixture that will populate the
+ * 
+ * @author dclarke
+ * @since EclipseLink 2.4.2
+ */
+public class ExampleLeagues {
+
+    private Map<String, HostedLeague> leagues = new HashMap<String, HostedLeague>();
+
+    public ExampleLeagues() {
+
+        HostedLeague osl = new HostedLeague("OSL", "Ottawa Soccer League", "black");
+        osl.setLogoUrl("/logos/osl.png");
+        osl.setDatasourceName("jdbc/MySportsMHL");
+
+        osl.addPlayerExtension("allergies", "java.lang.String", "flex_1");
+
+        this.leagues.put(osl.getId(), osl);
+
+        HostedLeague hthl = new HostedLeague("HTHL", "High Tech Hockey League", "red");
+        hthl.setLogoUrl("/logos/hthl.png");
+        hthl.setDatasourceName("jdbc/MySports");
+
+        hthl.addPlayerExtension("penaltyMinutes", "java.lang.Integer", "flex_1");
+        hthl.addPlayerExtension("position", "java.lang.String", "flex_2");
+
+        this.leagues.put(hthl.getId(), hthl);
+
+        HostedLeague kfl = new HostedLeague("KFL", "Kid's Football League", "green");
+        kfl.setLogoUrl("/logos/kfl.png");
+        kfl.setDatasourceName("jdbc/MySports");
+        kfl.setDataIsolation(DataIsolation.TABLE);
+
+        kfl.addPlayerExtension("position", "java.lang.String", "flex_1");
+
+        this.leagues.put(kfl.getId(), kfl);
+
+        HostedLeague mhl = new HostedLeague("MHL", "Minor Hockey League", "red");
+        mhl.setShared(false);
+        mhl.setDataIsolation(DataIsolation.DATABASE);
+        mhl.setLogoUrl("/logos/hthl.png");
+        mhl.setDatasourceName("jdbc/MySports");
+
+        mhl.addPlayerExtension("position", "java.lang.String", "flex_1");
+
+        this.leagues.put(mhl.getId(), mhl);
+    }
+    
+    public void populate(EntityManagerFactory emf) {
+        EntityManager em = emf.createEntityManager();
+        
+        try {
+            em.getTransaction().begin();
+            
+            for (HostedLeague hl: this.leagues.values()) {
+                em.persist(hl);
+            }
+            
+            em.getTransaction().commit();
+        } finally {
+            em.close();
+        }
+    }
+
+    public void clearDatabase(EntityManagerFactory emf) {
+        EntityManager em = emf.createEntityManager();
+
+        try {
+            em.getTransaction().begin();
+            em.createNativeQuery("DELETE FROM mys_admin_player_ext").executeUpdate();
+            em.createNativeQuery("DELETE FROM mys_admin_team_ext").executeUpdate();
+            em.createNativeQuery("DELETE FROM mys_admin_div_ext").executeUpdate();
+            em.createQuery("DELETE FROM HostedLeague").executeUpdate();
+            em.getTransaction().commit();
+        } finally {
+            em.close();
+        }
+    }
+
+}
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/league/DynamicJAXBTests.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/league/TestDynamicJAXB.java
similarity index 95%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/league/DynamicJAXBTests.java
rename to admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/league/TestDynamicJAXB.java
index 143cc6f..70f7c21 100644
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/league/DynamicJAXBTests.java
+++ b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/league/TestDynamicJAXB.java
@@ -10,7 +10,7 @@
  * Contributors:
  *  dclarke - EclipseLink 2.3 - MySports Demo Bug 344608
  ******************************************************************************/
-package eclipselink.example.mysports.admin.test.league;
+package eclipselink.example.mysports.admin.services.test.league;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -31,7 +31,7 @@
  * @author dclarke
  * @since EclipseLink 2.3.0
  */
-public class DynamicJAXBTests {
+public class TestDynamicJAXB {
 
     @Test
     public void verifyContext() throws Exception {
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/BaseJsonRestTest.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestBaseJsonRest.java
similarity index 95%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/BaseJsonRestTest.java
rename to admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestBaseJsonRest.java
index 01f4e81..5925db2 100644
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/BaseJsonRestTest.java
+++ b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestBaseJsonRest.java
@@ -10,7 +10,7 @@
  * Contributors:
  *  dclarke - EclipseLink 2.4 - MySports Demo Bug 344608
  ******************************************************************************/
-package eclipselink.example.mysports.admin.test.services.glassfish;
+package eclipselink.example.mysports.admin.services.test.services.glassfish;
 
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -39,7 +39,7 @@
  * @author dclarke
  * @since EclipseLink 2.4
  */
-public abstract class BaseJsonRestTest {
+public abstract class TestBaseJsonRest {
 
     protected Unmarshaller createJsonUnmarshaller() throws JAXBException {
         return MOXyContextHelper.createUnmarshaller(MediaType.APPLICATION_JSON);
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/MOXyContextTests.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestMOXyContext.java
similarity index 95%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/MOXyContextTests.java
rename to admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestMOXyContext.java
index 0f40c9f..4c6abe4 100644
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/MOXyContextTests.java
+++ b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestMOXyContext.java
@@ -10,7 +10,7 @@
  * Contributors:
  *  dclarke - EclipseLink 2.4 - MySports Demo Bug 344608
  ******************************************************************************/
-package eclipselink.example.mysports.admin.test.services.glassfish;
+package eclipselink.example.mysports.admin.services.test.services.glassfish;
 
 import java.io.StringReader;
 import java.io.StringWriter;
@@ -34,7 +34,7 @@
  * @author dclarke
  * @since EclipseLink 2.4
  */
-public class MOXyContextTests {
+public class TestMOXyContext {
 
     @Test
     public void createContext() throws JAXBException {
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/ParseJDBCConnectPool_mysports_Tests.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestParseJDBCConnectPool_mysports.java
similarity index 89%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/ParseJDBCConnectPool_mysports_Tests.java
rename to admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestParseJDBCConnectPool_mysports.java
index cfa9e5d..e3015d6 100644
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/ParseJDBCConnectPool_mysports_Tests.java
+++ b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestParseJDBCConnectPool_mysports.java
@@ -10,7 +10,7 @@
  * Contributors:
  *  dclarke - EclipseLink 2.4 - MySports Demo Bug 344608
  ******************************************************************************/
-package eclipselink.example.mysports.admin.test.services.glassfish;
+package eclipselink.example.mysports.admin.services.test.services.glassfish;
 
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
@@ -19,7 +19,7 @@
 
 import eclipselink.example.mysports.admin.services.glassfish.Message;
 
-public class ParseJDBCConnectPool_mysports_Tests extends BaseJsonRestTest{
+public class TestParseJDBCConnectPool_mysports extends TestBaseJsonRest{
 
     @Test
     public void parse() throws Exception {
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/ParseJDBCConnectPool_mysports_property_Tests.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestParseJDBCConnectPool_mysports_property.java
similarity index 88%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/ParseJDBCConnectPool_mysports_property_Tests.java
rename to admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestParseJDBCConnectPool_mysports_property.java
index 2c40b41..982e748 100644
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/ParseJDBCConnectPool_mysports_property_Tests.java
+++ b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestParseJDBCConnectPool_mysports_property.java
@@ -10,7 +10,7 @@
  * Contributors:
  *  dclarke - EclipseLink 2.4 - MySports Demo Bug 344608
  ******************************************************************************/
-package eclipselink.example.mysports.admin.test.services.glassfish;
+package eclipselink.example.mysports.admin.services.test.services.glassfish;
 
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
@@ -19,7 +19,7 @@
 
 import eclipselink.example.mysports.admin.services.glassfish.Result;
 
-public class ParseJDBCConnectPool_mysports_property_Tests extends BaseJsonRestTest {
+public class TestParseJDBCConnectPool_mysports_property extends TestBaseJsonRest {
 
     @Test
     public void parseJSON() throws Exception {
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/ParseJDBCResourcesTests.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestParseJDBCResources.java
similarity index 93%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/ParseJDBCResourcesTests.java
rename to admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestParseJDBCResources.java
index 6666abc..2731f3b 100644
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/ParseJDBCResourcesTests.java
+++ b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestParseJDBCResources.java
@@ -10,7 +10,7 @@
  * Contributors:
  *  dclarke - EclipseLink 2.4 - MySports Demo Bug 344608
  ******************************************************************************/
-package eclipselink.example.mysports.admin.test.services.glassfish;
+package eclipselink.example.mysports.admin.services.test.services.glassfish;
 
 import javax.xml.bind.JAXBElement;
 import javax.xml.bind.Marshaller;
@@ -23,7 +23,7 @@
 
 import eclipselink.example.mysports.admin.services.glassfish.JDBCResource;
 
-public class ParseJDBCResourcesTests extends BaseJsonRestTest {
+public class TestParseJDBCResources extends TestBaseJsonRest {
 
     @Test
     public void parseFromFile() throws Exception {
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/ParseListJDBCConnectionPoolsTests.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestParseListJDBCConnectionPools.java
similarity index 91%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/ParseListJDBCConnectionPoolsTests.java
rename to admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestParseListJDBCConnectionPools.java
index bc814fd..f6a795d 100644
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/ParseListJDBCConnectionPoolsTests.java
+++ b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestParseListJDBCConnectionPools.java
@@ -10,7 +10,7 @@
  * Contributors:
  *  dclarke - EclipseLink 2.4 - MySports Demo Bug 344608
  ******************************************************************************/
-package eclipselink.example.mysports.admin.test.services.glassfish;
+package eclipselink.example.mysports.admin.services.test.services.glassfish;
 
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
@@ -20,7 +20,7 @@
 import eclipselink.example.mysports.admin.services.glassfish.Message;
 import eclipselink.example.mysports.admin.services.glassfish.Result;
 
-public class ParseListJDBCConnectionPoolsTests extends BaseJsonRestTest {
+public class TestParseListJDBCConnectionPools extends TestBaseJsonRest {
 
     @Test
     public void parse() throws Exception {
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/ParseListJDBCResourcesTests.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestParseListJDBCResources.java
similarity index 95%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/ParseListJDBCResourcesTests.java
rename to admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestParseListJDBCResources.java
index 27bc2bd..126bf89 100644
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/ParseListJDBCResourcesTests.java
+++ b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/services/glassfish/TestParseListJDBCResources.java
@@ -10,7 +10,7 @@
  * Contributors:
  *  dclarke - EclipseLink 2.4 - MySports Demo Bug 344608
  ******************************************************************************/
-package eclipselink.example.mysports.admin.test.services.glassfish;
+package eclipselink.example.mysports.admin.services.test.services.glassfish;
 
 import java.net.ConnectException;
 
@@ -27,7 +27,7 @@
 import eclipselink.example.mysports.admin.services.glassfish.RESTOperations;
 import eclipselink.example.mysports.admin.services.glassfish.Result;
 
-public class ParseListJDBCResourcesTests extends BaseJsonRestTest {
+public class TestParseListJDBCResources extends TestBaseJsonRest {
 
     @Test
     public void unmarshalMarshal() throws Exception {
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/style/CreateStyles.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/style/TestCreateStyles.java
similarity index 85%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/style/CreateStyles.java
rename to admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/style/TestCreateStyles.java
index e09dc29..1af0479 100644
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/style/CreateStyles.java
+++ b/admin.services/src/test/java/eclipselink/example/mysports/admin/services/test/style/TestCreateStyles.java
@@ -10,7 +10,7 @@
  * Contributors: dclarke - EclipseLink 2.3 - MySports Demo Bug 344608
  *****************************************************************************
  */
-package eclipselink.example.mysports.admin.test.style;
+package eclipselink.example.mysports.admin.services.test.style;
 
 import java.io.InputStream;
 import java.io.StringWriter;
@@ -28,7 +28,7 @@
 import org.junit.Test;
 
 import eclipselink.example.mysports.admin.model.Style;
-import eclipselink.example.mysports.admin.test.PersistenceTesting;
+import eclipselink.example.mysports.admin.services.test.PersistenceTesting;
 
 /**
  * Create initial styles.
@@ -36,7 +36,7 @@
  * @author dclarke
  * @since EclipseLink 2.3.0
  */
-public class CreateStyles {
+public class TestCreateStyles {
 
     private static EntityManagerFactory emf;
 
@@ -70,7 +70,7 @@
 
     @BeforeClass
     public static void createEMF() {
-        emf = Persistence.createEntityManagerFactory("MySportsAdmin", PersistenceTesting.get());
+        emf = Persistence.createEntityManagerFactory("MySportsAdmin", PersistenceTesting.get(true));
 
         EntityManager em = emf.createEntityManager();
         try {
@@ -88,7 +88,12 @@
     }
 
     private String load(String name) throws Exception {
-        InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("example/mysports/tests/admin/style/" + name + ".css");
+        String resource = "eclipselink/example/mysports/admin/services/test/style/" + name + ".css";
+        InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource);
+        
+        if (in == null) {
+            Assert.fail("Could not find CSS for '" + name + " @ " + resource);
+        }
         StringWriter writer = new StringWriter(in.available());
         for (int ch = in.read(); ch >= 0; ch = in.read()) {
             writer.write(ch);
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/AllTests.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/test/AllTests.java
deleted file mode 100644
index 15c3402..0000000
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/AllTests.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010-2012 Oracle. All rights reserved.
- * This program and the accompanying materials are made available under the 
- * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
- * which accompanies this distribution. 
- * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at 
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *  dclarke - EclipseLink 2.3 - MySports Demo Bug 344608
- ******************************************************************************/
-package eclipselink.example.mysports.admin.test;
-
-import eclipselink.example.mysports.admin.test.style.CreateStyles;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import org.junit.runners.Suite.SuiteClasses;
-
-/**
- * @author dclarke
- * @since EclipseLink 2.3.0
- */
-@RunWith(Suite.class)
-@SuiteClasses({ CreateDatabase.class,
-                VerifyModelAndMappings.class, 
-                CreateHostEnvironments.class,
-                CreateLeagues.class,
-                CreateStyles.class,
-                eclipselink.example.mysports.admin.test.services.glassfish.AllTests.class,
-                })
-public class AllTests {
-
-}
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/extensions/CreateXMLBindingsTests.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/test/extensions/CreateXMLBindingsTests.java
deleted file mode 100644
index b65de33..0000000
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/extensions/CreateXMLBindingsTests.java
+++ /dev/null
@@ -1,17 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010-2012 Oracle. All rights reserved.
- * This program and the accompanying materials are made available under the 
- * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
- * which accompanies this distribution. 
- * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at 
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *  dclarke - EclipseLink 2.3 - MySports Demo Bug 344608
- ******************************************************************************/
-package eclipselink.example.mysports.admin.test.extensions;
-
-public class CreateXMLBindingsTests {
-	// TODO
-}
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/league/AllTests.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/test/league/AllTests.java
deleted file mode 100644
index 5c39e4a..0000000
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/league/AllTests.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010-2012 Oracle. All rights reserved.
- * This program and the accompanying materials are made available under the 
- * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
- * which accompanies this distribution. 
- * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at 
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *  dclarke - EclipseLink 2.3 - MySports Demo Bug 344608
- ******************************************************************************/
-package eclipselink.example.mysports.admin.test.league;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import org.junit.runners.Suite.SuiteClasses;
-
-/**
- * @author dclarke
- * @since EclipseLink 2.3.0
- */
-@RunWith(Suite.class)
-@SuiteClasses({ DynamicJAXBTests.class})
-public class AllTests {
-
-}
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/AllTests.java b/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/AllTests.java
deleted file mode 100644
index 39da8a2..0000000
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/AllTests.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010-2012 Oracle. All rights reserved.
- * This program and the accompanying materials are made available under the 
- * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
- * which accompanies this distribution. 
- * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at 
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *  dclarke - EclipseLink 2.4 - MySports Demo Bug 344608
- ******************************************************************************/
-package eclipselink.example.mysports.admin.test.services.glassfish;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import org.junit.runners.Suite.SuiteClasses;
-
-
-/**
- * @author dclarke
- * @since EclipseLink 2.4
- */
-@RunWith(Suite.class)
-@SuiteClasses({ MOXyContextTests.class,
-                ParseJDBCConnectPool_mysports_Tests.class,
-                ParseJDBCResourcesTests.class,
-                ParseListJDBCConnectionPoolsTests.class,
-                ParseListJDBCResourcesTests.class,
-                ParseJDBCConnectPool_mysports_property_Tests.class,
-                })
-public class AllTests {
-
-}
diff --git a/admin.services/src/test/resource/eclipselink-example-mysports.properties b/admin.services/src/test/resource/eclipselink-example-mysports.properties
new file mode 100644
index 0000000..e3c5237
--- /dev/null
+++ b/admin.services/src/test/resource/eclipselink-example-mysports.properties
@@ -0,0 +1,19 @@
+javax.persistence.jdbc.url=jdbc:derby:target/derby/mysports;create=true
+javax.persistence.jdbc.user=app
+javax.persistence.jdbc.password=app
+javax.persistence.jdbc.driver=org.apache.derby.jdbc.EmbeddedDriver
+
+# Ensure that the data source info in persistence.xml is replaced
+javax.persistence.jtaDataSource=
+javax.persistence.nonJtaDataSource=
+javax.persistence.transactionType=RESOURCE_LOCAL
+
+eclipselink.logging.level=FINE
+eclipselink.logging.connection=false
+eclipselink.logging.timestamp=false
+eclipselink.logging.thread=false
+eclipselink.logging.session=false
+eclipselink.logging.exceptions=false
+eclipselink.logging.level.sql=FINE
+eclipselink.logging.level.metadata=WARNING
+eclipselink.logging.parameters=true
\ No newline at end of file
diff --git a/admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/services/glassfish/eclipselink-example-mysports.properties b/admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/services/glassfish/eclipselink-example-mysports.properties
new file mode 100644
index 0000000..07f4600
--- /dev/null
+++ b/admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/services/glassfish/eclipselink-example-mysports.properties
@@ -0,0 +1,19 @@
+javax.persistence.jdbc.url=jdbc:derby:testmysports;create=true
+javax.persistence.jdbc.user=app
+javax.persistence.jdbc.password=app
+javax.persistence.jdbc.driver=org.apache.derby.jdbc.EmbeddedDriver
+
+# Ensure that the data source info in persistence.xml is replaced
+javax.persistence.jtaDataSource=
+javax.persistence.nonJtaDataSource=
+javax.persistence.transactionType=RESOURCE_LOCAL
+
+eclipselink.logging.level=FINE
+eclipselink.logging.connection=false
+eclipselink.logging.timestamp=false
+eclipselink.logging.thread=false
+eclipselink.logging.session=false
+eclipselink.logging.exceptions=false
+eclipselink.logging.level.sql=FINE
+eclipselink.logging.level.metadata=WARNING
+eclipselink.logging.parameters=true
\ No newline at end of file
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/jdbc-connection-pool_mysports.json b/admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/services/glassfish/jdbc-connection-pool_mysports.json
similarity index 100%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/jdbc-connection-pool_mysports.json
rename to admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/services/glassfish/jdbc-connection-pool_mysports.json
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/jdbc-connection-pool_mysports_property.json b/admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/services/glassfish/jdbc-connection-pool_mysports_property.json
similarity index 100%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/jdbc-connection-pool_mysports_property.json
rename to admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/services/glassfish/jdbc-connection-pool_mysports_property.json
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/jdbc-resource.json b/admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/services/glassfish/jdbc-resource.json
similarity index 100%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/jdbc-resource.json
rename to admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/services/glassfish/jdbc-resource.json
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/list-jdbc-connection-pools.json b/admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/services/glassfish/list-jdbc-connection-pools.json
similarity index 100%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/list-jdbc-connection-pools.json
rename to admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/services/glassfish/list-jdbc-connection-pools.json
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/list-jdbc-resources.json b/admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/services/glassfish/list-jdbc-resources.json
similarity index 100%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/services/glassfish/list-jdbc-resources.json
rename to admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/services/glassfish/list-jdbc-resources.json
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/style/black.css b/admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/style/black.css
similarity index 100%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/style/black.css
rename to admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/style/black.css
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/style/blue.css b/admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/style/blue.css
similarity index 100%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/style/blue.css
rename to admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/style/blue.css
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/style/default.css b/admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/style/default.css
similarity index 100%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/style/default.css
rename to admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/style/default.css
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/style/green.css b/admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/style/green.css
similarity index 100%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/style/green.css
rename to admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/style/green.css
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/style/red.css b/admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/style/red.css
similarity index 100%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/style/red.css
rename to admin.services/src/test/resource/eclipselink/example/mysports/admin/services/test/style/red.css
diff --git a/admin.web/pom.xml b/admin.web/pom.xml
index 632fa67..e3536c3 100644
--- a/admin.web/pom.xml
+++ b/admin.web/pom.xml
@@ -49,7 +49,7 @@
 
 		<dependency>
 			<groupId>${project.groupId}</groupId>
-			<artifactId>persistence</artifactId>
+			<artifactId>test.common</artifactId>
 			<version>${project.version}</version>
 			<scope>test</scope>
 		</dependency>
diff --git a/admin.web/src/test/java/eclipselink/example/mysports/admin/test/AllTests.java b/admin.web/src/test/java/eclipselink/example/mysports/admin/test/AllTests.java
index 4953bf3..1485370 100644
--- a/admin.web/src/test/java/eclipselink/example/mysports/admin/test/AllTests.java
+++ b/admin.web/src/test/java/eclipselink/example/mysports/admin/test/AllTests.java
@@ -12,7 +12,8 @@
  ******************************************************************************/
 package eclipselink.example.mysports.admin.test;
 
-import eclipselink.example.mysports.admin.test.style.CreateStyles;
+import eclipselink.example.mysports.admin.services.test.style.TestCreateStyles;
+
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 import org.junit.runners.Suite.SuiteClasses;
@@ -22,7 +23,7 @@
  * @since EclipseLink 2.3.0
  */
 @RunWith(Suite.class)
-@SuiteClasses({ CreateStyles.class})
+@SuiteClasses({ TestCreateStyles.class})
 public class AllTests {
 
 }
diff --git a/admin.web/src/test/java/eclipselink/example/mysports/admin/test/extensions/CreateOrmXML.java b/admin.web/src/test/java/eclipselink/example/mysports/admin/test/extensions/CreateOrmXML.java
index 282504e..44e3656 100644
--- a/admin.web/src/test/java/eclipselink/example/mysports/admin/test/extensions/CreateOrmXML.java
+++ b/admin.web/src/test/java/eclipselink/example/mysports/admin/test/extensions/CreateOrmXML.java
@@ -21,7 +21,7 @@
 import org.junit.Test;
 
 import eclipselink.example.mysports.admin.services.MappingsLoader;
-import eclipselink.example.mysports.admin.test.PersistenceTesting;
+import eclipselink.example.mysports.admin.services.test.PersistenceTesting;
 
 public class CreateOrmXML {
 
diff --git a/admin.web/src/test/java/eclipselink/example/mysports/admin/test/league/LeagueJAXBTests.java b/admin.web/src/test/java/eclipselink/example/mysports/admin/test/league/LeagueJAXBTests.java
index 665f2d0..c55a448 100644
--- a/admin.web/src/test/java/eclipselink/example/mysports/admin/test/league/LeagueJAXBTests.java
+++ b/admin.web/src/test/java/eclipselink/example/mysports/admin/test/league/LeagueJAXBTests.java
@@ -28,7 +28,7 @@
 
 import eclipselink.example.mysports.admin.jaxrs.MySportsContextResolver;
 import eclipselink.example.mysports.admin.model.HostedLeague;
-import eclipselink.example.mysports.admin.test.PersistenceTesting;
+import eclipselink.example.mysports.admin.services.test.PersistenceTesting;
 
 /**
  * 
diff --git a/admin.web/src/test/java/eclipselink/example/mysports/admin/test/style/CreateStyles.java b/admin.web/src/test/java/eclipselink/example/mysports/admin/test/style/CreateStyles.java
index e09dc29..bed0950 100644
--- a/admin.web/src/test/java/eclipselink/example/mysports/admin/test/style/CreateStyles.java
+++ b/admin.web/src/test/java/eclipselink/example/mysports/admin/test/style/CreateStyles.java
@@ -28,7 +28,7 @@
 import org.junit.Test;
 
 import eclipselink.example.mysports.admin.model.Style;
-import eclipselink.example.mysports.admin.test.PersistenceTesting;
+import eclipselink.example.mysports.admin.services.test.PersistenceTesting;
 
 /**
  * Create initial styles.
diff --git a/application/pom.xml b/application/pom.xml
index d73b2ce..bbb4441 100644
--- a/application/pom.xml
+++ b/application/pom.xml
@@ -56,11 +56,17 @@
 
 		<dependency>
 			<groupId>${project.groupId}</groupId>
-			<artifactId>admin.services</artifactId>
+			<artifactId>test.common</artifactId>
 			<version>${project.version}</version>
 			<scope>test</scope>
 		</dependency>
 
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>admin.services</artifactId>
+			<version>${project.version}</version>
+			<scope>test</scope>
+		</dependency>
 
 		<dependency>
 			<groupId>mysql</groupId>
@@ -96,9 +102,6 @@
 				<artifactId>maven-surefire-plugin</artifactId>
 				<version>2.12.4</version>
 				<configuration>
-					<includes>
-						<include>eclipselink.example.mysports.application.test.AllTests.class</include>
-					</includes>
 					<argLine>-javaagent:${user.home}\\.m2\\repository\\eclipselink\\example\\mysports\\persistence\\${project.version}\\persistence-${project.version}.jar</argLine>
 				</configuration>
 			</plugin>
diff --git a/application/src/test/java/eclipselink/example/mysports/application/test/AllTests.java b/application/src/test/java/eclipselink/example/mysports/application/test/AllTests.java
deleted file mode 100644
index 5b5e001..0000000
--- a/application/src/test/java/eclipselink/example/mysports/application/test/AllTests.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010-2012 Oracle. All rights reserved.
- * This program and the accompanying materials are made available under the 
- * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
- * which accompanies this distribution. 
- * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at 
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *  dclarke - EclipseLink 2.3 - MySports Demo Bug 344608
- ******************************************************************************/
-package eclipselink.example.mysports.application.test;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import org.junit.runners.Suite.SuiteClasses;
-
-/**
- * Top-level test suite running all tests.
- * 
- * @author dclarke
- * @since EclipseLink 2.3.0
- */
-@RunWith(Suite.class)
-@SuiteClasses({ eclipselink.example.mysports.application.test.model.AllTests.class})
-public class AllTests {
-
-}
diff --git a/application/src/test/java/eclipselink/example/mysports/application/test/ExamplePropertiesLoader.java b/application/src/test/java/eclipselink/example/mysports/application/test/ExamplePropertiesLoader.java
deleted file mode 100644
index a05523c..0000000
--- a/application/src/test/java/eclipselink/example/mysports/application/test/ExamplePropertiesLoader.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010-2012 Oracle. All rights reserved.
- * This program and the accompanying materials are made available under the 
- * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
- * which accompanies this distribution. 
- * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at 
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *  dclarke - EclipseLink 2.3 - MySports Demo Bug 344608
- ******************************************************************************/
-package eclipselink.example.mysports.application.test;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.util.Map;
-import java.util.Properties;
-
-/**
- * Helper class that will load persistence unit overrides from a properties file
- * in both the current running folder and the current user's home folder. The
- * goal is to enable developers and users of the example to customize its
- * behaviour without having to modify the source of the example.
- * 
- * @author dclarke
- * @since EclipseLink 2.0.0
- */
-public class ExamplePropertiesLoader {
-
-    public static final String DEFAULT_FILENAME = "eclipselink-example-mysports.properties";
-
-    /**
-     * 
-     * @param properties
-     */
-    public static void loadProperties(Map<String, Object> properties) {
-        loadProperties(properties, DEFAULT_FILENAME);
-    }
-
-    /**
-     * 
-     * @param properties
-     */
-    public static void loadProperties(Map<String, Object> properties, String filename) {
-    	loadProperties(properties, Thread.currentThread().getContextClassLoader(), filename);
-        loadProperties(properties, new File(filename));
-
-        String home = System.getProperty("user.home");
-        loadProperties(properties, new File(home + System.getProperty("file.separator") + filename));
-
-        for (Object key : System.getProperties().keySet()) {
-            String keyName = (String) key;
-
-            if (keyName.startsWith("javax.persistence") || keyName.startsWith("eclipselink")) {
-                String value = System.getProperty(keyName);
-                properties.put(keyName, value);
-            }
-        }
-    }
-
-    /**
-     * 
-     * @param properties
-     * @param filePath
-     */
-    public static void loadProperties(Map<String, Object> properties, File file) {
-        try {
-            if (file.exists()) {
-                Properties exampleProps = new Properties();
-                InputStream in = new FileInputStream(file);
-                exampleProps.load(in);
-                in.close();
-                
-                for (Map.Entry<Object, Object> entry: exampleProps.entrySet()) {
-                    properties.put((String) entry.getKey(), entry.getValue());
-                }
-            }
-        } catch (Exception e) {
-            // ignore
-        }
-    }
-
-    /**
-     * 
-     * @param properties
-     * @param filePath
-     */
-    public static void loadProperties(Map<String, Object> properties, ClassLoader cl, String resource) {
-        try {
-        	InputStream in = cl.getResourceAsStream(resource);
-            if (in != null) {
-                Properties exampleProps = new Properties();
-                exampleProps.load(in);
-                in.close();
-                
-                for (Map.Entry<Object, Object> entry: exampleProps.entrySet()) {
-                    properties.put((String) entry.getKey(), entry.getValue());
-                }
-            }
-        } catch (Exception e) {
-            // ignore
-        }
-    }
-}
diff --git a/application/src/test/java/eclipselink/example/mysports/application/test/TestingLeagueRepository.java b/application/src/test/java/eclipselink/example/mysports/application/test/TestingLeagueRepository.java
index 14bf462..d57d192 100644
--- a/application/src/test/java/eclipselink/example/mysports/application/test/TestingLeagueRepository.java
+++ b/application/src/test/java/eclipselink/example/mysports/application/test/TestingLeagueRepository.java
@@ -26,6 +26,7 @@
 import eclipselink.example.mysports.application.test.admin.MockAdminMetadataSource;
 import eclipselink.example.mysports.mysports.application.MySportsConfig;
 import eclipselink.example.mysports.mysports.application.services.LeagueRepository;
+import eclipselink.example.mysports.test.common.ExamplePropertiesLoader;
 
 /**
  * Add testing specific properties to override the non-JTA data-source
diff --git a/application/src/test/java/eclipselink/example/mysports/application/test/model/AllTests.java b/application/src/test/java/eclipselink/example/mysports/application/test/model/AllTests.java
deleted file mode 100644
index e858104..0000000
--- a/application/src/test/java/eclipselink/example/mysports/application/test/model/AllTests.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010-2012 Oracle. All rights reserved.
- * This program and the accompanying materials are made available under the 
- * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
- * which accompanies this distribution. 
- * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at 
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *  dclarke - EclipseLink 2.3 - MySports Demo Bug 344608
- ******************************************************************************/
-package eclipselink.example.mysports.application.test.model;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import org.junit.runners.Suite.SuiteClasses;
-
-/**
- * @author dclarke
- * @since EclipseLink 2.3.0
- */
-@RunWith(Suite.class)
-@SuiteClasses({ CreateDatabaseTest.class, 
-                VerifyModelAndMappings.class, 
-                HighTechHockeyTest.class, 
-                OttawaSoccerLeagueTest.class,
-                KidsFootballLeagueTest.class,
-                eclipselink.example.mysports.application.test.util.AllTests.class})
-public class AllTests {
-
-}
diff --git a/application/src/test/java/eclipselink/example/mysports/application/test/model/QueryTests.java b/application/src/test/java/eclipselink/example/mysports/application/test/model/QueryTest.java
similarity index 97%
rename from application/src/test/java/eclipselink/example/mysports/application/test/model/QueryTests.java
rename to application/src/test/java/eclipselink/example/mysports/application/test/model/QueryTest.java
index 0a00bb7..efc6cf0 100644
--- a/application/src/test/java/eclipselink/example/mysports/application/test/model/QueryTests.java
+++ b/application/src/test/java/eclipselink/example/mysports/application/test/model/QueryTest.java
@@ -12,7 +12,7 @@
 import eclipselink.example.mysports.mysports.application.MySportsConfig;
 import eclipselink.example.mysports.mysports.application.services.LeagueRepository;
 
-public class QueryTests {
+public class QueryTest {
 
     public static final String LEAGUE = "OSL";
 
diff --git a/application/src/test/java/eclipselink/example/mysports/application/test/util/AllTests.java b/application/src/test/java/eclipselink/example/mysports/application/test/util/AllTests.java
deleted file mode 100644
index e1b1436..0000000
--- a/application/src/test/java/eclipselink/example/mysports/application/test/util/AllTests.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package eclipselink.example.mysports.application.test.util;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import org.junit.runners.Suite.SuiteClasses;
-
-@RunWith(Suite.class)
-@SuiteClasses({AttributeNameLabelTests.class})
-public class AllTests {
-
-}
diff --git a/application/src/test/java/eclipselink/example/mysports/application/test/util/AttributeNameLabelTests.java b/application/src/test/java/eclipselink/example/mysports/application/test/util/TestAttributeNameLabel.java
similarity index 97%
rename from application/src/test/java/eclipselink/example/mysports/application/test/util/AttributeNameLabelTests.java
rename to application/src/test/java/eclipselink/example/mysports/application/test/util/TestAttributeNameLabel.java
index ea9335d..6b86c47 100644
--- a/application/src/test/java/eclipselink/example/mysports/application/test/util/AttributeNameLabelTests.java
+++ b/application/src/test/java/eclipselink/example/mysports/application/test/util/TestAttributeNameLabel.java
@@ -25,7 +25,7 @@
  * @author dclarke
  * @since EclipseLink 2.3.0
  */
-public class AttributeNameLabelTests {
+public class TestAttributeNameLabel {
 
     @Test
     public void test_a() {
diff --git a/application/src/test/resources/eclipselink-example-mysports.properties b/application/src/test/resources/eclipselink-example-mysports.properties
index 20944c9..07f4600 100644
--- a/application/src/test/resources/eclipselink-example-mysports.properties
+++ b/application/src/test/resources/eclipselink-example-mysports.properties
@@ -1,7 +1,7 @@
-javax.persistence.jdbc.driver=com.mysql.jdbc.Driver
-javax.persistence.jdbc.url=jdbc:mysql://localhost:3306/mysports
-javax.persistence.jdbc.user=root
-javax.persistence.jdbc.password=password
+javax.persistence.jdbc.url=jdbc:derby:testmysports;create=true
+javax.persistence.jdbc.user=app
+javax.persistence.jdbc.password=app
+javax.persistence.jdbc.driver=org.apache.derby.jdbc.EmbeddedDriver
 
 # Ensure that the data source info in persistence.xml is replaced
 javax.persistence.jtaDataSource=
diff --git a/persistence/pom.xml b/persistence/pom.xml
index e6654e6..4f901f3 100644
--- a/persistence/pom.xml
+++ b/persistence/pom.xml
@@ -15,19 +15,6 @@
 
 	<dependencies>
 		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<version>4.11</version>
-			<scope>test</scope>
-		</dependency>
-
-		<dependency>
-			<groupId>mysql</groupId>
-			<artifactId>mysql-connector-java</artifactId>
-			<version>5.1.21</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
 			<groupId>org.eclipse.persistence</groupId>
 			<artifactId>eclipselink</artifactId>
 			<version>${eclipselink.version}</version>
@@ -39,12 +26,34 @@
 			</exclusions>
 			<scope>provided</scope>
 		</dependency>
+		
 		<dependency>
 			<groupId>org.eclipse.persistence</groupId>
 			<artifactId>javax.persistence</artifactId>
 			<version>2.0.0</version>
 			<scope>provided</scope>
 		</dependency>
+
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.11</version>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>test.common</artifactId>
+			<version>${project.version}</version>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.derby</groupId>
+			<artifactId>derby</artifactId>
+			<version>10.9.1.0</version>
+			<scope>test</scope>
+		</dependency>
 	</dependencies>
 
 	<build>
@@ -70,6 +79,16 @@
 					</archive>
 				</configuration>
 			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<version>2.12.4</version>
+				<configuration>
+					<argLine>-javaagent:${user.home}\\.m2\\repository\\eclipselink\\example\\mysports\\persistence\\${project.version}\\persistence-${project.version}.jar</argLine>
+				</configuration>
+			</plugin>
+
 		</plugins>
 	</build>
 </project>
diff --git a/persistence/src/test/java/eclipselink/example/mysports/persistence/test/ConfigTest.java b/persistence/src/test/java/eclipselink/example/mysports/persistence/test/ConfigTest.java
index 9ec15c3..e9aa40f 100644
--- a/persistence/src/test/java/eclipselink/example/mysports/persistence/test/ConfigTest.java
+++ b/persistence/src/test/java/eclipselink/example/mysports/persistence/test/ConfigTest.java
@@ -1,38 +1,20 @@
 package eclipselink.example.mysports.persistence.test;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import org.junit.Test;
 
 /**
  * Unit test for simple App.
  */
-public class ConfigTest 
-    extends TestCase
-{
-    /**
-     * Create the test case
-     *
-     * @param testName name of the test case
-     */
-    public ConfigTest( String testName )
-    {
-        super( testName );
-    }
+public class ConfigTest {
 
-    /**
-     * @return the suite of tests being tested
-     */
-    public static Test suite()
-    {
-        return new TestSuite( ConfigTest.class );
-    }
+	@Test
+	public void verifyProviderServices() {
 
-    /**
-     * Rigourous Test :-)
-     */
-    public void testApp()
-    {
-        assertTrue( true );
-    }
+	}
+
+	@Test
+	public void verifyPremainInManifest() {
+
+	}
+
 }
diff --git a/persistence/src/test/java/eclipselink/example/mysports/persistence/test/ProviderTest.java b/persistence/src/test/java/eclipselink/example/mysports/persistence/test/ProviderTest.java
index 9d01e8d..3c4cf8b 100644
--- a/persistence/src/test/java/eclipselink/example/mysports/persistence/test/ProviderTest.java
+++ b/persistence/src/test/java/eclipselink/example/mysports/persistence/test/ProviderTest.java
@@ -4,9 +4,7 @@
 import java.util.Map;
 import javax.persistence.EntityManagerFactory;
 import org.junit.Assert;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import org.junit.Test;
 import org.eclipse.persistence.config.PersistenceUnitProperties;
 import org.eclipse.persistence.jpa.JpaHelper;
 import org.eclipse.persistence.sessions.server.Server;
@@ -16,73 +14,65 @@
 /**
  * Unit test for simple App.
  */
-public class ProviderTest
-        extends TestCase {
+public class ProviderTest {
 
-    /**
-     * Create the test case
-     *
-     * @param testName name of the test case
-     */
-    public ProviderTest(String testName) {
-        super(testName);
-    }
+	@Test
+	public void testNullName() {
+		new TenantPerEMFProvider().createEntityManagerFactory(null, null);
+	}
 
-    /**
-     * @return the suite of tests being tested
-     */
-    public static Test suite() {
-        return new TestSuite(ProviderTest.class);
-    }
+	@Test
+	public void testEmptyName() {
+		new TenantPerEMFProvider().createEntityManagerFactory("", null);
+	}
 
-    public void testNullName() {
-        new TenantPerEMFProvider().createEntityManagerFactory(null, null);
-    }
+	@Test
+	public void testJustSeparator() {
+		try {
+			new TenantPerEMFProvider().createEntityManagerFactory(";", null);
+		} catch (IllegalArgumentException e) {
+			return;
+		}
+		Assert.fail("IllegalArgumentException expected");
+	}
 
-    public void testEmptyName() {
-        new TenantPerEMFProvider().createEntityManagerFactory("", null);
-    }
+	@Test
+	public void testSeparatorEquals() {
+		try {
+			new TenantPerEMFProvider().createEntityManagerFactory(";=", null);
+		} catch (IllegalArgumentException e) {
+			return;
+		}
+		Assert.fail("IllegalArgumentException expected");
 
-    public void testJustSeparator() {
-        try {
-            new TenantPerEMFProvider().createEntityManagerFactory(";", null);
-        } catch (IllegalArgumentException e) {
-            return;
-        }
-        Assert.fail("IllegalArgumentException expected");
-    }
+	}
 
-    public void testSeparatorEquals() {
-        try {
-            new TenantPerEMFProvider().createEntityManagerFactory(";=", null);
-        } catch (IllegalArgumentException e) {
-            return;
-        }
-        Assert.fail("IllegalArgumentException expected");
+	@Test
+	public void testXSeparatorEquals() {
+		try {
+			new TenantPerEMFProvider().createEntityManagerFactory(";X=", null);
+		} catch (IllegalArgumentException e) {
+			return;
+		}
+		Assert.fail("IllegalArgumentException expected");
 
-    }
+	}
 
-    public void testXSeparatorEquals() {
-        try {
-            new TenantPerEMFProvider().createEntityManagerFactory(";X=", null);
-        } catch (IllegalArgumentException e) {
-            return;
-        }
-        Assert.fail("IllegalArgumentException expected");
+	@Test
+	public void testContextX() {
+		Map<String, Object> props = new HashMap<String, Object>();
+		props.put(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML,
+				"META-INF/test-persistence.xml");
+		EntityManagerFactory emf = new TenantPerEMFProvider()
+				.createEntityManagerFactory("test;context=X", props);
 
-    }
+		Assert.assertNotNull(emf);
+		Server session = JpaHelper.getServerSession(emf);
 
-    public void testContextX() {
-        Map<String, Object> props = new HashMap<String, Object>();
-        props.put(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, "META-INF/test-persistence.xml");
-        EntityManagerFactory emf = new TenantPerEMFProvider().createEntityManagerFactory("test;context=X", props);
+		Assert.assertEquals("test;context=X", session.getName());
 
-        Assert.assertNotNull(emf);
-        Server session = JpaHelper.getServerSession(emf);
-        
-        Assert.assertEquals("test;context=X", session.getName());
-                
-        String context = (String) emf.getProperties().get("context");
-        Assert.assertEquals(context, "X");
-    }
+		String context = (String) emf.getProperties().get("context");
+		Assert.assertEquals(context, "X");
+	}
+
 }
diff --git a/persistence/src/test/resources/META-INF/test-persistence.xml b/persistence/src/test/resources/META-INF/test-persistence.xml
index d919de1..970db77 100644
--- a/persistence/src/test/resources/META-INF/test-persistence.xml
+++ b/persistence/src/test/resources/META-INF/test-persistence.xml
@@ -3,10 +3,10 @@
     <persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
         <provider>eclipselink.example.mysports.persistence.TenantPerEMFProvider</provider>
         <properties>
-            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
-            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/mysports"/>
-            <property name="javax.persistence.jdbc.user" value="root"/>
-            <property name="javax.persistence.jdbc.password" value="password"/>
+           <property name="javax.persistence.jdbc.url" value="jdbc:derby:test;create=true"/>
+			<property name="javax.persistence.jdbc.user" value="app"/>
+			<property name="javax.persistence.jdbc.password" value="app"/>
+			<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
         </properties>
     </persistence-unit>
 </persistence>
diff --git a/pom.xml b/pom.xml
index 070bf14..ddb159c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,6 +26,7 @@
 	</properties>
 
 	<modules>
+		<module>test.common</module>
 		<module>persistence</module>
 		<module>admin.services</module>
 		<module>admin.web</module>
diff --git a/test.common/.classpath b/test.common/.classpath
new file mode 100644
index 0000000..18801b6
--- /dev/null
+++ b/test.common/.classpath
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/test.common/.project b/test.common/.project
new file mode 100644
index 0000000..e0e8bb3
--- /dev/null
+++ b/test.common/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>test.common</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+</projectDescription>
diff --git a/test.common/.settings/org.eclipse.jdt.core.prefs b/test.common/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..60105c1
--- /dev/null
+++ b/test.common/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,5 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/test.common/.settings/org.eclipse.m2e.core.prefs b/test.common/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/test.common/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/test.common/pom.xml b/test.common/pom.xml
new file mode 100644
index 0000000..1e17227
--- /dev/null
+++ b/test.common/pom.xml
@@ -0,0 +1,59 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<artifactId>test.common</artifactId>
+	<packaging>jar</packaging>
+	<name>MySports Common Testing</name>
+
+	<parent>
+		<groupId>eclipselink.example.mysports</groupId>
+		<artifactId>example</artifactId>
+		<version>0.0.1-SNAPSHOT</version>
+		<relativePath>../pom.xml</relativePath>
+	</parent>
+
+	<dependencies>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.11</version>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.eclipse.persistence</groupId>
+			<artifactId>eclipselink</artifactId>
+			<version>${eclipselink.version}</version>
+			<exclusions>
+				<exclusion>
+					<artifactId>commonj.sdo</artifactId>
+					<groupId>commonj.sdo</groupId>
+				</exclusion>
+			</exclusions>
+			<scope>provided</scope>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.eclipse.persistence</groupId>
+			<artifactId>javax.persistence</artifactId>
+			<version>2.0.0</version>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>2.3.2</version>
+				<configuration>
+					<source>1.6</source>
+					<target>1.6</target>
+				</configuration>
+			</plugin>
+
+		</plugins>
+	</build>
+</project>
diff --git a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/ExamplePropertiesLoader.java b/test.common/src/main/java/eclipselink/example/mysports/test/common/ExamplePropertiesLoader.java
similarity index 85%
rename from admin.services/src/test/java/eclipselink/example/mysports/admin/test/ExamplePropertiesLoader.java
rename to test.common/src/main/java/eclipselink/example/mysports/test/common/ExamplePropertiesLoader.java
index 8882f21..11bde28 100644
--- a/admin.services/src/test/java/eclipselink/example/mysports/admin/test/ExamplePropertiesLoader.java
+++ b/test.common/src/main/java/eclipselink/example/mysports/test/common/ExamplePropertiesLoader.java
@@ -10,7 +10,7 @@
  * Contributors:
  *  dclarke - EclipseLink 2.3 - MySports Demo Bug 344608
  ******************************************************************************/
-package eclipselink.example.mysports.admin.test;
+package eclipselink.example.mysports.test.common;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -44,7 +44,7 @@
      * @param properties
      */
     public static void loadProperties(Map<String, Object> properties, String filename) {
-    	loadProperties(properties, Thread.currentThread().getContextClassLoader(), filename);
+        loadProperties(properties, Thread.currentThread().getContextClassLoader(), filename);
         loadProperties(properties, new File(filename));
 
         String home = System.getProperty("user.home");
@@ -60,11 +60,6 @@
         }
     }
 
-    /**
-     * 
-     * @param properties
-     * @param filePath
-     */
     public static void loadProperties(Map<String, Object> properties, File file) {
         try {
             if (file.exists()) {
@@ -72,8 +67,8 @@
                 InputStream in = new FileInputStream(file);
                 exampleProps.load(in);
                 in.close();
-                
-                for (Map.Entry<Object, Object> entry: exampleProps.entrySet()) {
+
+                for (Map.Entry<Object, Object> entry : exampleProps.entrySet()) {
                     properties.put((String) entry.getKey(), entry.getValue());
                 }
             }
@@ -82,20 +77,16 @@
         }
     }
 
-    /**
-     * 
-     * @param properties
-     * @param filePath
-     */
     public static void loadProperties(Map<String, Object> properties, ClassLoader cl, String resource) {
         try {
-        	InputStream in = cl.getResourceAsStream(resource);
+            InputStream in = cl.getResourceAsStream(resource);
+            
             if (in != null) {
                 Properties exampleProps = new Properties();
                 exampleProps.load(in);
                 in.close();
-                
-                for (Map.Entry<Object, Object> entry: exampleProps.entrySet()) {
+
+                for (Map.Entry<Object, Object> entry : exampleProps.entrySet()) {
                     properties.put((String) entry.getKey(), entry.getValue());
                 }
             }
diff --git a/test.common/src/main/resources/eclipselink-example-mysports.properties b/test.common/src/main/resources/eclipselink-example-mysports.properties
new file mode 100644
index 0000000..e3c5237
--- /dev/null
+++ b/test.common/src/main/resources/eclipselink-example-mysports.properties
@@ -0,0 +1,19 @@
+javax.persistence.jdbc.url=jdbc:derby:target/derby/mysports;create=true
+javax.persistence.jdbc.user=app
+javax.persistence.jdbc.password=app
+javax.persistence.jdbc.driver=org.apache.derby.jdbc.EmbeddedDriver
+
+# Ensure that the data source info in persistence.xml is replaced
+javax.persistence.jtaDataSource=
+javax.persistence.nonJtaDataSource=
+javax.persistence.transactionType=RESOURCE_LOCAL
+
+eclipselink.logging.level=FINE
+eclipselink.logging.connection=false
+eclipselink.logging.timestamp=false
+eclipselink.logging.thread=false
+eclipselink.logging.session=false
+eclipselink.logging.exceptions=false
+eclipselink.logging.level.sql=FINE
+eclipselink.logging.level.metadata=WARNING
+eclipselink.logging.parameters=true
\ No newline at end of file
