diff --git a/jpa-moxy/round-trip/.gitignore b/jpa-moxy/round-trip/.gitignore
new file mode 100644
index 0000000..5e56e04
--- /dev/null
+++ b/jpa-moxy/round-trip/.gitignore
@@ -0,0 +1 @@
+/bin
diff --git a/jpa-moxy/round-trip/.project b/jpa-moxy/round-trip/.project
new file mode 100644
index 0000000..15966b8
--- /dev/null
+++ b/jpa-moxy/round-trip/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>round-trip</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/jpa/employee/employee.model/.project b/jpa/employee/employee.model/.project
index aa0e7e6..5a922d3 100644
--- a/jpa/employee/employee.model/.project
+++ b/jpa/employee/employee.model/.project
@@ -6,6 +6,11 @@
 	</projects>
 	<buildSpec>
 		<buildCommand>
+			<name>org.python.pydev.PyDevBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
 			<name>org.eclipse.wst.common.project.facet.core.builder</name>
 			<arguments>
 			</arguments>
@@ -32,5 +37,6 @@
 		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+		<nature>org.python.pydev.pythonNature</nature>
 	</natures>
 </projectDescription>
diff --git a/jpa/employee/employee.model/.pydevproject b/jpa/employee/employee.model/.pydevproject
new file mode 100644
index 0000000..40e9f40
--- /dev/null
+++ b/jpa/employee/employee.model/.pydevproject
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?eclipse-pydev version="1.0"?><pydev_project>
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
+</pydev_project>
diff --git a/jpa/employee/employee.model/.settings/org.eclipse.core.resources.prefs b/jpa/employee/employee.model/.settings/org.eclipse.core.resources.prefs
index c015bf3..42133d9 100644
--- a/jpa/employee/employee.model/.settings/org.eclipse.core.resources.prefs
+++ b/jpa/employee/employee.model/.settings/org.eclipse.core.resources.prefs
@@ -1,7 +1,7 @@
 eclipse.preferences.version=1
 encoding//src/main/java=UTF-8
-encoding//src/main/java/eclipselink/example/jpa/employee/services/EditEmployee.java=UTF-8
-encoding//src/main/java/eclipselink/example/jpa/employee/services/EditEmployeeBean.java=UTF-8
+encoding//src/main/java/eclipselink/example/jpa/employee/services/AdminBean.java=UTF-8
+encoding//src/main/java/eclipselink/example/jpa/employee/services/EmployeeRepository.java=UTF-8
 encoding//src/main/resources=UTF-8
 encoding//src/test/java=UTF-8
 encoding/<project>=UTF-8
diff --git a/jpa/employee/employee.model/.settings/org.eclipse.jpt.core.prefs b/jpa/employee/employee.model/.settings/org.eclipse.jpt.core.prefs
index 03921bf..f225875 100644
--- a/jpa/employee/employee.model/.settings/org.eclipse.jpt.core.prefs
+++ b/jpa/employee/employee.model/.settings/org.eclipse.jpt.core.prefs
@@ -1,6 +1,7 @@
 eclipse.preferences.version=1
 org.eclipse.jpt.core.platform=eclipselink2_4
 org.eclipse.jpt.jpa.core.discoverAnnotatedClasses=false
+org.eclipse.jpt.jpa.core.metamodelSourceFolderName=src/main/java
 problem.PROJECT_INACTIVE_CONNECTION=info
 problem.PROJECT_NO_CONNECTION=info
 workspace_preferences_overriden=true
diff --git a/jpa/employee/employee.model/.settings/org.eclipse.wst.validation.prefs b/jpa/employee/employee.model/.settings/org.eclipse.wst.validation.prefs
new file mode 100644
index 0000000..f6a7fbd
--- /dev/null
+++ b/jpa/employee/employee.model/.settings/org.eclipse.wst.validation.prefs
@@ -0,0 +1,8 @@
+DELEGATES_PREFERENCE=delegateValidatorList
+USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;
+USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;
+USER_PREFERENCE=overrideGlobalPreferencesfalse
+eclipse.preferences.version=1
+override=false
+suspend=false
+vf.version=3
diff --git a/jpa/employee/employee.model/.settings/org.eclipse.wst.xml.core.prefs b/jpa/employee/employee.model/.settings/org.eclipse.wst.xml.core.prefs
new file mode 100644
index 0000000..b663641
--- /dev/null
+++ b/jpa/employee/employee.model/.settings/org.eclipse.wst.xml.core.prefs
@@ -0,0 +1,18 @@
+attributeHasNoValue=2
+eclipse.preferences.version=1
+endTagWithAttributes=2
+honourAllSchemaLocations=false
+indicateNoGrammar=-1
+indiciateNoDocumentElement=-1
+markupValidation=false
+missingClosingBracket=2
+missingClosingQuote=2
+missingEndTag=2
+missingQuotes=2
+missingStartTag=2
+missingTagName=2
+namespaceInPITarget=2
+use-project-settings=true
+whitespaceAtStart=2
+whitespaceBeforeTagName=2
+xinclude=false
diff --git a/jpa/employee/employee.model/.settings/org.eclipse.wst.xsl.core.prefs b/jpa/employee/employee.model/.settings/org.eclipse.wst.xsl.core.prefs
new file mode 100644
index 0000000..e28962c
--- /dev/null
+++ b/jpa/employee/employee.model/.settings/org.eclipse.wst.xsl.core.prefs
@@ -0,0 +1,11 @@
+CHECK_CALL_TEMPLATES=2
+CHECK_XPATHS=2
+CIRCULAR_REF=2
+DUPLICATE_PARAMETER=2
+EMPTY_PARAM=1
+MISSING_INCLUDE=2
+MISSING_PARAM=1
+NAME_ATTRIBUTE_EMPTY=2
+NAME_ATTRIBUTE_MISSING=2
+TEMPLATE_CONFLICT=2
+eclipse.preferences.version=1
diff --git a/jpa/employee/employee.model/README.md b/jpa/employee/employee.model/README.md
index 3b165aa..2a1ffd3 100644
--- a/jpa/employee/employee.model/README.md
+++ b/jpa/employee/employee.model/README.md
@@ -3,4 +3,7 @@
 
 Employee example model project illustrating an annotation mapped model. This project is leveraged by the employee.web and employee.web-js projects.
 
-http://wiki.eclipse.org/EclipseLink/Examples/JPA/Employee
\ No newline at end of file
+[EclipseLink Wiki: Employee JPA Example][1]
+  
+  
+[1]: http://wiki.eclipse.org/EclipseLink/Examples/JPA/Employee
\ No newline at end of file
diff --git a/jpa/employee/employee.model/pom.xml b/jpa/employee/employee.model/pom.xml
index 4ded44d..50b6df4 100644
--- a/jpa/employee/employee.model/pom.xml
+++ b/jpa/employee/employee.model/pom.xml
@@ -42,9 +42,9 @@
 		</dependency>
 		
 		<dependency>
-			<groupId>javax</groupId>
-			<artifactId>javaee-api</artifactId>
-			<version>6.0</version>
+			<groupId>org.glassfish</groupId>
+			<artifactId>javax.ejb</artifactId>
+			<version>3.1.1</version>
 			<scope>provided</scope>
 		</dependency>
 	</dependencies>
diff --git a/jpa/employee/employee.model/src/PessimisticLockTest.launch b/jpa/employee/employee.model/src/eclipse/AdminBeanTest.launch
similarity index 86%
rename from jpa/employee/employee.model/src/PessimisticLockTest.launch
rename to jpa/employee/employee.model/src/eclipse/AdminBeanTest.launch
index 4231fbb..d1ba8ed 100644
--- a/jpa/employee/employee.model/src/PessimisticLockTest.launch
+++ b/jpa/employee/employee.model/src/eclipse/AdminBeanTest.launch
@@ -1,7 +1,7 @@
 <?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="/employee.model/src/test/java/test/PessimisticLockTest.java"/>
+<listEntry value="/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/AdminBeanTest.java"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
 <listEntry value="1"/>
@@ -11,7 +11,7 @@
 <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="test.PessimisticLockTest"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="eclipselink.example.jpa.employee.test.services.AdminBeanTest"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="employee.model"/>
 <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/org/eclipse/persistence/eclipselink/2.4.2-SNAPSHOT/eclipselink-2.4.2-SNAPSHOT.jar"/>
diff --git a/jpa/employee/employee.model/src/eclipse/DiagnosticsTest.launch b/jpa/employee/employee.model/src/eclipse/DiagnosticsTest.launch
index edfa2c0..97480c0 100644
--- a/jpa/employee/employee.model/src/eclipse/DiagnosticsTest.launch
+++ b/jpa/employee/employee.model/src/eclipse/DiagnosticsTest.launch
@@ -1,7 +1,7 @@
 <?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="/Employee Example - model/src/test/java/eclipselink/example/jpa/employee/test/services/DiagnosticsTest.java"/>
+<listEntry value="/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/DiagnosticsTest.java"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
 <listEntry value="1"/>
@@ -12,7 +12,7 @@
 <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.jpa.employee.test.services.DiagnosticsTest"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Employee Example - model"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="employee.model"/>
 <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/org/eclipse/persistence/eclipselink/2.4.2-SNAPSHOT/eclipselink-2.4.2-SNAPSHOT.jar"/>
 </launchConfiguration>
diff --git a/jpa/employee/employee.model/src/eclipse/EditEmployeeTest.launch b/jpa/employee/employee.model/src/eclipse/EditEmployeeTest.launch
index 93e0f59..9d6a4f2 100644
--- a/jpa/employee/employee.model/src/eclipse/EditEmployeeTest.launch
+++ b/jpa/employee/employee.model/src/eclipse/EditEmployeeTest.launch
@@ -1,7 +1,7 @@
 <?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="/Employee Example - model/src/test/java/eclipselink/example/jpa/employee/test/services/EditEmployeeTest.java"/>
+<listEntry value="/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/EditEmployeeTest.java"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
 <listEntry value="1"/>
@@ -12,7 +12,7 @@
 <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.jpa.employee.test.services.EditEmployeeTest"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Employee Example - model"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="employee.model"/>
 <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/org/eclipse/persistence/eclipselink/2.4.2-SNAPSHOT/eclipselink-2.4.2-SNAPSHOT.jar"/>
 </launchConfiguration>
diff --git a/jpa/employee/employee.model/src/PageEmployeesTest.launch b/jpa/employee/employee.model/src/eclipse/PageEmployeesTest.launch
similarity index 85%
rename from jpa/employee/employee.model/src/PageEmployeesTest.launch
rename to jpa/employee/employee.model/src/eclipse/PageEmployeesTest.launch
index a5992eb..d591873 100644
--- a/jpa/employee/employee.model/src/PageEmployeesTest.launch
+++ b/jpa/employee/employee.model/src/eclipse/PageEmployeesTest.launch
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<stringAttribute key="bad_container_name" value="/employee.model/src/eclips"/>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/Employee Example - model/src/test/java/eclipselink/example/jpa/employee/test/services/PageEmployeesTest.java"/>
+<listEntry value="/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageEmployeesTest.java"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
 <listEntry value="1"/>
@@ -12,7 +13,7 @@
 <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.jpa.employee.test.services.PageEmployeesTest"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Employee Example - model"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="employee.model"/>
 <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/org/eclipse/persistence/eclipselink/2.4.2-SNAPSHOT/eclipselink-2.4.2-SNAPSHOT.jar"/>
 </launchConfiguration>
diff --git a/jpa/employee/employee.model/src/PageIdsInEmployeesTest.launch b/jpa/employee/employee.model/src/eclipse/PageIdsInEmployeesTest.launch
similarity index 85%
rename from jpa/employee/employee.model/src/PageIdsInEmployeesTest.launch
rename to jpa/employee/employee.model/src/eclipse/PageIdsInEmployeesTest.launch
index 64f1985..d2e961d 100644
--- a/jpa/employee/employee.model/src/PageIdsInEmployeesTest.launch
+++ b/jpa/employee/employee.model/src/eclipse/PageIdsInEmployeesTest.launch
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<stringAttribute key="bad_container_name" value="/employee.model/src/eclips"/>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/Employee Example - model/src/test/java/eclipselink/example/jpa/employee/test/services/PageIdsInEmployeesTest.java"/>
+<listEntry value="/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageIdsInEmployeesTest.java"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
 <listEntry value="1"/>
@@ -12,7 +13,7 @@
 <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.jpa.employee.test.services.PageIdsInEmployeesTest"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Employee Example - model"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="employee.model"/>
 <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/org/eclipse/persistence/eclipselink/2.4.2-SNAPSHOT/eclipselink-2.4.2-SNAPSHOT.jar"/>
 </launchConfiguration>
diff --git a/jpa/employee/employee.model/src/StreamEmployeesTest.launch b/jpa/employee/employee.model/src/eclipse/StreamEmployeesTest.launch
similarity index 85%
rename from jpa/employee/employee.model/src/StreamEmployeesTest.launch
rename to jpa/employee/employee.model/src/eclipse/StreamEmployeesTest.launch
index a0668ae..c708c0d 100644
--- a/jpa/employee/employee.model/src/StreamEmployeesTest.launch
+++ b/jpa/employee/employee.model/src/eclipse/StreamEmployeesTest.launch
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<stringAttribute key="bad_container_name" value="/employee.model/src/eclips"/>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/Employee Example - model/src/test/java/eclipselink/example/jpa/employee/test/services/StreamEmployeesTest.java"/>
+<listEntry value="/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/StreamEmployeesTest.java"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
 <listEntry value="1"/>
@@ -12,7 +13,7 @@
 <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.jpa.employee.test.services.StreamEmployeesTest"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Employee Example - model"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="employee.model"/>
 <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/org/eclipse/persistence/eclipselink/2.4.2-SNAPSHOT/eclipselink-2.4.2-SNAPSHOT.jar"/>
 </launchConfiguration>
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Address_.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Address_.java
index 2dc8e93..173f440 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Address_.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Address_.java
@@ -4,7 +4,7 @@
 import javax.persistence.metamodel.SingularAttribute;
 import javax.persistence.metamodel.StaticMetamodel;
 
-@Generated(value="Dali", date="2013-02-14T13:15:29.490-0500")
+@Generated(value="Dali", date="2013-05-08T15:16:26.628-0400")
 @StaticMetamodel(Address.class)
 public class Address_ {
 	public static volatile SingularAttribute<Address, Integer> id;
@@ -13,4 +13,5 @@
 	public static volatile SingularAttribute<Address, String> province;
 	public static volatile SingularAttribute<Address, String> postalCode;
 	public static volatile SingularAttribute<Address, String> street;
+	public static volatile SingularAttribute<Address, Long> version;
 }
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Employee.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Employee.java
index a641b6f..3ae747d 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Employee.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Employee.java
@@ -95,10 +95,6 @@
     @Version
     private Long version;
     
-    @ManyToMany
-    @JoinTable(joinColumns = @JoinColumn(name = "EMP_ID"), inverseJoinColumns = @JoinColumn(name = "PROJ_ID"), name = "PROJ_EMP")
-    private List<Project> projects = new ArrayList<Project>();
-
     @ManyToOne(fetch = LAZY)
     @JoinColumn(name = "MANAGER_ID")
     private Employee manager;
@@ -171,24 +167,6 @@
         this.version = version;
     }
 
-    public List<Project> getProjects() {
-        return projects;
-    }
-
-    public void setProjects(List<Project> projectList) {
-        this.projects = projectList;
-    }
-
-    public Project addProject(Project project) {
-        getProjects().add(project);
-        return project;
-    }
-
-    public Project removeProject(Project project) {
-        getProjects().remove(project);
-        return project;
-    }
-
     public Employee getManager() {
         return manager;
     }
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Employee_.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Employee_.java
index f5d5af9..bbde128 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Employee_.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Employee_.java
@@ -5,7 +5,7 @@
 import javax.persistence.metamodel.SingularAttribute;
 import javax.persistence.metamodel.StaticMetamodel;
 
-@Generated(value="Dali", date="2013-02-14T13:15:29.493-0500")
+@Generated(value="Dali", date="2013-05-08T15:16:26.635-0400")
 @StaticMetamodel(Employee.class)
 public class Employee_ {
 	public static volatile SingularAttribute<Employee, Integer> id;
@@ -14,7 +14,6 @@
 	public static volatile SingularAttribute<Employee, String> lastName;
 	public static volatile SingularAttribute<Employee, Double> salary;
 	public static volatile SingularAttribute<Employee, Long> version;
-	public static volatile ListAttribute<Employee, Project> projects;
 	public static volatile SingularAttribute<Employee, Employee> manager;
 	public static volatile ListAttribute<Employee, Employee> managedEmployees;
 	public static volatile ListAttribute<Employee, PhoneNumber> phoneNumbers;
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/LargeProject.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/LargeProject.java
deleted file mode 100644
index 5b3af9b..0000000
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/LargeProject.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1998, 2011 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 - initial JPA Employee example using XML (bug 217884)
- *              mbraeuer - annotated version
- ******************************************************************************/
-package eclipselink.example.jpa.employee.model;
-
-import static javax.persistence.TemporalType.TIMESTAMP;
-
-import java.util.Calendar;
-
-import javax.persistence.*;
-
-/**
- * 
- * @author dclarke
- * @since EclipseLink 1.0
- */
-@Entity
-@Table(name = "LPROJECT")
-@DiscriminatorValue("L")
-public class LargeProject extends Project {
-	@Basic
-	private double budget;
-	@Basic
-	@Temporal(TIMESTAMP)
-	private Calendar milestone = Calendar.getInstance();
-
-	public LargeProject() {
-		super();
-	}
-
-	public double getBudget() {
-		return this.budget;
-	}
-
-	public void setBudget(double budget) {
-		this.budget = budget;
-	}
-
-	public Calendar getMilestone() {
-		return milestone;
-	}
-
-	public void setMilestone(Calendar milestone) {
-		this.milestone = milestone;
-	}
-}
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/LargeProject_.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/LargeProject_.java
deleted file mode 100644
index 02b9c7f..0000000
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/LargeProject_.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package eclipselink.example.jpa.employee.model;
-
-import java.util.Calendar;
-import javax.annotation.Generated;
-import javax.persistence.metamodel.SingularAttribute;
-import javax.persistence.metamodel.StaticMetamodel;
-
-@Generated(value="Dali", date="2013-02-14T13:15:29.495-0500")
-@StaticMetamodel(LargeProject.class)
-public class LargeProject_ extends Project_ {
-	public static volatile SingularAttribute<LargeProject, Double> budget;
-	public static volatile SingularAttribute<LargeProject, Calendar> milestone;
-}
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Project.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Project.java
deleted file mode 100644
index 0790d83..0000000
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Project.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1998, 2011 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 - initial JPA Employee example using XML (bug 217884)
- *              mbraeuer - annotated version
- ******************************************************************************/
-package eclipselink.example.jpa.employee.model;
-
-import static javax.persistence.FetchType.LAZY;
-import static javax.persistence.InheritanceType.JOINED;
-
-import javax.persistence.*;
-
-/**
- * 
- * @author dclarke
- * @since EclipseLink 1.0
- */
-@Entity 
-@Inheritance(strategy = JOINED)
-@DiscriminatorColumn(name = "PROJ_TYPE")
-public abstract class Project {
-    
-    @Id
-    @Column(name = "PROJ_ID")
-    @GeneratedValue
-    private int id;
-    
-    @Basic
-    @Column(name = "PROJ_NAME")
-    private String name;
-    
-    @Basic
-    @Column(name = "DESCRIP")
-    private String description;
-    
-    @Version
-    private Long version;
-    
-    @ManyToOne(fetch = LAZY)
-    @JoinColumn(name = "LEADER_ID")
-    private Employee teamLeader;
-
-    public Project() {
-    }
-
-    public String getDescription() {
-        return this.description;
-    }
-
-    public void setDescription(String descrip) {
-        this.description = descrip;
-    }
-
-    public int getId() {
-        return this.id;
-    }
-
-    public void setId(int projId) {
-        this.id = projId;
-    }
-
-    public String getName() {
-        return this.name;
-    }
-
-    public void setName(String projName) {
-        this.name = projName;
-    }
-
-    public Long getVersion() {
-        return version;
-    }
-
-    public void setVersion(Long version) {
-        this.version = version;
-    }
-
-    public Employee getTeamLeader() {
-        return this.teamLeader;
-    }
-
-    public void setTeamLeader(Employee employee) {
-        this.teamLeader = employee;
-    }
-}
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Project_.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Project_.java
deleted file mode 100644
index 14144ca..0000000
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Project_.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package eclipselink.example.jpa.employee.model;
-
-import javax.annotation.Generated;
-import javax.persistence.metamodel.SingularAttribute;
-import javax.persistence.metamodel.StaticMetamodel;
-
-@Generated(value="Dali", date="2013-02-14T13:15:29.499-0500")
-@StaticMetamodel(Project.class)
-public class Project_ {
-	public static volatile SingularAttribute<Project, Integer> id;
-	public static volatile SingularAttribute<Project, String> name;
-	public static volatile SingularAttribute<Project, String> description;
-	public static volatile SingularAttribute<Project, Long> version;
-	public static volatile SingularAttribute<Project, Employee> teamLeader;
-}
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SamplePopulation.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SamplePopulation.java
index 66a982f..8bfda6a 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SamplePopulation.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SamplePopulation.java
@@ -27,13 +27,13 @@
  */
 public class SamplePopulation {
 
+    /**
+     * Create the specified number of random sample employees.  
+     */
     public void createNewEmployees(EntityManager em, int quantity) {
-        em.getTransaction().begin();
-
         for (int index = 0; index < quantity; index++) {
             em.persist(createRandomEmployee());
         }
-        em.getTransaction().commit();
     }
 
     private static final String[] MALE_FIRST_NAMES = { "Jacob", "Ethan", "Michael", "Alexander", "William", "Joshua", "Daniel", "Jayden", "Noah", "Anthony" };
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SmallProject.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SmallProject.java
deleted file mode 100644
index ad345f8..0000000
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SmallProject.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1998, 2011 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 - initial JPA Employee example using XML (bug 217884)
- *              mbraeuer - annotated version
- ******************************************************************************/
-package eclipselink.example.jpa.employee.model;
-
-import javax.persistence.*;
-
-/**
- * 
- * @author dclarke
- * @since EclipseLink 1.0
- */
-@Entity
-@Table(name = "PROJECT")
-@DiscriminatorValue("S")
-public class SmallProject extends Project {
-
-	private SmallProject() {
-		super();
-	}
-
-	public SmallProject(String name, String description) {
-		this();
-		setName(name);
-		setDescription(description);
-	}
-
-}
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SmallProject_.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SmallProject_.java
deleted file mode 100644
index d909260..0000000
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SmallProject_.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package eclipselink.example.jpa.employee.model;
-
-import javax.annotation.Generated;
-import javax.persistence.metamodel.StaticMetamodel;
-
-@Generated(value="Dali", date="2013-02-14T13:15:29.500-0500")
-@StaticMetamodel(SmallProject.class)
-public class SmallProject_ extends Project_ {
-}
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/AdminBean.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/AdminBean.java
new file mode 100644
index 0000000..4a4b948
--- /dev/null
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/AdminBean.java
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright (c) 2010-2013 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.jpa.employee.services;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ejb.LocalBean;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
+import javax.persistence.metamodel.EntityType;
+
+import org.eclipse.persistence.descriptors.ClassDescriptor;
+import org.eclipse.persistence.internal.sessions.IdentityMapAccessor;
+import org.eclipse.persistence.sessions.server.Server;
+import org.eclipse.persistence.tools.schemaframework.SchemaManager;
+
+import eclipselink.example.jpa.employee.model.Employee;
+import eclipselink.example.jpa.employee.model.SamplePopulation;
+
+/**
+ * Edit service for an {@link Employee} instance.
+ * 
+ * @author dclarke
+ * @since EclipseLink 2.4.2
+ */
+@Stateless
+@LocalBean
+public class AdminBean {
+
+    private EntityManagerFactory emf;
+
+    public EntityManagerFactory getEmf() {
+        return emf;
+    }
+
+    @PersistenceUnit(unitName = "employee")
+    public void setEmf(EntityManagerFactory emf) {
+        this.emf = emf;
+    }
+
+    public String resetDatabase() {
+        EntityManager em = getEmf().createEntityManager();
+
+        try {
+            SchemaManager sm = new SchemaManager(em.unwrap(Server.class));
+            sm.replaceDefaultTables();
+            sm.replaceSequences();
+
+            em.unwrap(Server.class).getIdentityMapAccessor().initializeAllIdentityMaps();
+        } finally {
+            em.close();
+        }
+        return null;
+    }
+
+    public String populateDatabase(int quantity) {
+        EntityManager em = getEmf().createEntityManager();
+
+        try {
+            em.getTransaction().begin();
+            new SamplePopulation().createNewEmployees(em, quantity);
+            em.getTransaction().commit();
+        } finally {
+            em.close();
+        }
+        return null;
+    }
+
+    public int getCacheSize(String typeName) {
+        EntityManager em = getEmf().createEntityManager();
+        Server session = em.unwrap(Server.class);
+        ClassDescriptor descriptor = session.getDescriptorForAlias(typeName);
+        if (descriptor != null) {
+            return ((IdentityMapAccessor) session.getIdentityMapAccessor()).getIdentityMap(descriptor.getJavaClass()).getSize();
+        } else {
+            return -1;
+        }
+    }
+
+    public int getDatabaseCount(String type) {
+        EntityManager em = getEmf().createEntityManager();
+
+        try {
+            return em.createQuery("SELECT COUNT(o) FROM " + type + " o", Number.class).getSingleResult().intValue();
+        } finally {
+            em.close();
+        }
+    }
+
+    /**
+     * Construct a list of valid type names based on the JAP metamodel. Only
+     * include types that are inheritance roots (no super type).
+     */
+    public List<String> getTypes() {
+        List<String> typeNames = new ArrayList<String>();
+        for (EntityType<?> type : getEmf().getMetamodel().getEntities()) {
+            if (type.getSupertype() == null) {
+                typeNames.add(type.getName());
+            }
+        }
+        return typeNames;
+    }
+
+}
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/Diagnostics.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/Diagnostics.java
index 3652b3b..dfcffd4 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/Diagnostics.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/Diagnostics.java
@@ -27,7 +27,9 @@
 import org.eclipse.persistence.sessions.server.Server;
 
 /**
- * TODO
+ * SessionLog proxy {@link InvocationHandler} used to intercept SQL logging
+ * messages so this sample application can display the SQL executed by the most
+ * recent operations.
  * 
  * @author dclarke
  * @since EclipseLink 2.4.2
@@ -46,20 +48,25 @@
     private SessionLog log;
 
     /**
-     * TODO
-     * 
-     * @param emf
-     * @return
+     * Lookup the Diagnostics instance and registered as the SessionLog (proxy).
+     * If one does not exist then create one.
      */
     public static Diagnostics getInstance(EntityManagerFactory emf) {
         EntityManager em = emf.createEntityManager();
+        try {
+            return getInstance(em);
+        } finally {
+            em.close();
+        }
+    }
+
+    public static Diagnostics getInstance(EntityManager em) {
         Server session = em.unwrap(Server.class);
-        em.close();
 
         Diagnostics diagnostics = (Diagnostics) session.getProperty(DIAGNOSTICS);
 
         if (diagnostics == null) {
-            synchronized (emf) {
+            synchronized (em.unwrap(Server.class)) {
                 diagnostics = (Diagnostics) session.getProperty(DIAGNOSTICS);
                 if (diagnostics == null) {
                     diagnostics = new Diagnostics(session);
@@ -108,7 +115,9 @@
 
         if (trace != null && "log".equals(method.getName()) && args.length == 1) {
             SessionLogEntry entry = (SessionLogEntry) args[0];
-            trace.add(entry);
+            if (SessionLog.SQL.equals(entry.getNameSpace())) {
+                trace.add(entry.getMessage());
+            }
         }
 
         return method.invoke(getLog(), args);
@@ -117,15 +126,13 @@
 
     public static class SQLTrace {
 
-        private List<SessionLogEntry> entries = new ArrayList<SessionLogEntry>();
+        private List<String> entries = new ArrayList<String>();
 
-        protected void add(SessionLogEntry entry) {
-            if (SessionLog.SQL.equals(entry.getNameSpace())) {
-                this.entries.add(entry);
-            }
+        protected void add(String entry) {
+            this.entries.add(entry);
         }
 
-        public List<SessionLogEntry> getEntries() {
+        public List<String> getEntries() {
             return entries;
         }
 
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EditEmployee.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EditEmployee.java
deleted file mode 100644
index ccac3c8..0000000
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EditEmployee.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package eclipselink.example.jpa.employee.services;
-
-import javax.ejb.Local;
-
-import eclipselink.example.jpa.employee.model.Employee;
-import eclipselink.example.jpa.employee.model.PhoneNumber;
-
-/**
- * 
- * @author dclarke
- * @since EclipseLink 2.4.2
- */
-@Local
-public interface EditEmployee {
-
-    public abstract Employee getEmployee();
-
-    public abstract void setEmployee(Employee employee);
-
-    public abstract boolean isNew();
-
-    /**
-     * 
-     * @return
-     */
-    public abstract void save();
-
-    public abstract void delete();
-
-    public abstract void refresh();
-
-    /**
-     * Force the optimistic version field to be updated so that the save
-     * operations will fail.
-     */
-    public abstract int updateVersion();
-
-    public abstract String removeAddress();
-
-    public abstract String addAddress();
-
-    public abstract PhoneNumber addPhone(String type);
-
-    public abstract void remove(PhoneNumber phone);
-
-    public abstract void close();
-
-}
\ No newline at end of file
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EditEmployeeBean.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EditEmployeeBean.java
deleted file mode 100644
index 4b7399d..0000000
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EditEmployeeBean.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010-2013 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.jpa.employee.services;
-
-import javax.ejb.Local;
-import javax.ejb.Stateless;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.LockModeType;
-
-import eclipselink.example.jpa.employee.model.Address;
-import eclipselink.example.jpa.employee.model.Employee;
-import eclipselink.example.jpa.employee.model.PhoneNumber;
-
-/**
- * Edit service for an {@link Employee} instance.
- * 
- * @author dclarke
- * @since EclipseLink 2.4.2
- */
-@Stateless
-@Local(EditEmployee.class)
-public class EditEmployeeBean implements EditEmployee {
-
-    private EntityManager entityManager;
-
-    private Employee employee;
-
-    public EditEmployeeBean() {
-        super();
-    }
-
-    public EditEmployeeBean(EntityManagerFactory emf, Integer id) {
-        this.entityManager = emf.createEntityManager();
-        if (id != null) {
-            setEmployee(getEntityManager().find(Employee.class, id));
-        } else {
-            this.employee = new Employee();
-        }
-    }
-
-    protected EntityManager getEntityManager() {
-        return this.entityManager;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see eclipselink.example.jpa.employee.services.EditEmployee#getEmployee()
-     */
-    @Override
-    public Employee getEmployee() {
-        return employee;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see eclipselink.example.jpa.employee.services.EditEmployee#setEmployee(
-     * eclipselink.example.jpa.employee.model.Employee)
-     */
-    @Override
-    public void setEmployee(Employee employee) {
-        this.employee = employee;
-        if (employee != null) {
-            employee.getAddress();
-            employee.getPhoneNumbers().size();
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see eclipselink.example.jpa.employee.services.EditEmployee#isNew()
-     */
-    @Override
-    public boolean isNew() {
-        return getEmployee().getId() <= 0;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see eclipselink.example.jpa.employee.services.EditEmployee#save()
-     */
-    @Override
-    public void save() {
-        getEntityManager().getTransaction().begin();
-
-        // Ensure the Employee's lock value is incremented
-        getEntityManager().lock(getEmployee(), LockModeType.OPTIMISTIC_FORCE_INCREMENT);
-
-        getEntityManager().getTransaction().commit();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see eclipselink.example.jpa.employee.services.EditEmployee#delete()
-     */
-    @Override
-    public void delete() {
-        try {
-            getEntityManager().getTransaction().begin();
-            getEntityManager().remove(getEmployee());
-            getEntityManager().getTransaction().commit();
-        } finally {
-            setEmployee(null);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see eclipselink.example.jpa.employee.services.EditEmployee#refresh()
-     */
-    @Override
-    public void refresh() {
-        if (!getEntityManager().contains(getEmployee())) {
-            setEmployee(getEntityManager().merge(getEmployee()));
-        }
-        getEntityManager().refresh(getEmployee());
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * eclipselink.example.jpa.employee.services.EditEmployee#updateVersion()
-     */
-    @Override
-    public int updateVersion() {
-        getEntityManager().detach(getEmployee());
-        getEntityManager().getTransaction().begin();
-        getEntityManager().createNativeQuery("UPDATE EMPLOYEE SET VERSION = VERSION + 1 WHERE EMP_ID = " + getEmployee().getId()).executeUpdate();
-        getEntityManager().getTransaction().commit();
-        setEmployee(getEntityManager().merge(getEmployee()));
-        Number result = (Number) getEntityManager().createNativeQuery("SELECT VERSION FROM EMPLOYEE WHERE EMP_ID = " + getEmployee().getId()).getSingleResult();
-        return result.intValue();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * eclipselink.example.jpa.employee.services.EditEmployee#removeAddress()
-     */
-    @Override
-    public String removeAddress() {
-        getEmployee().setAddress(null);
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see eclipselink.example.jpa.employee.services.EditEmployee#addAddress()
-     */
-    @Override
-    public String addAddress() {
-        getEmployee().setAddress(new Address());
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * eclipselink.example.jpa.employee.services.EditEmployee#addPhone(java.
-     * lang.String)
-     */
-    @Override
-    public PhoneNumber addPhone(String type) {
-        if (type != null && !type.isEmpty()) {
-            return getEmployee().addPhoneNumber(type, "", "");
-        }
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * eclipselink.example.jpa.employee.services.EditEmployee#remove(eclipselink
-     * .example.jpa.employee.model.PhoneNumber)
-     */
-    @Override
-    public void remove(PhoneNumber phone) {
-        getEmployee().removePhoneNumber(phone);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see eclipselink.example.jpa.employee.services.EditEmployee#close()
-     */
-    @Override
-    public void close() {
-        getEntityManager().close();
-    }
-
-}
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EmployeeCriteria.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EmployeeCriteria.java
index 4982cdb..b70602c 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EmployeeCriteria.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EmployeeCriteria.java
@@ -12,6 +12,7 @@
  ******************************************************************************/
 package eclipselink.example.jpa.employee.services;
 
+import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
@@ -20,7 +21,11 @@
 
 import eclipselink.example.jpa.employee.model.Employee;
 import eclipselink.example.jpa.employee.model.Employee_;
-import eclipselink.example.jpa.employee.services.EntityPaging.Type;
+import eclipselink.example.jpa.employee.services.paging.EntityPaging;
+import eclipselink.example.jpa.employee.services.paging.EntityPaging.Type;
+import eclipselink.example.jpa.employee.services.paging.FirstMaxPaging;
+import eclipselink.example.jpa.employee.services.paging.IdInPaging;
+import eclipselink.example.jpa.employee.services.paging.StreamPaging;
 
 /**
  * TODO
@@ -79,6 +84,14 @@
     }
 
     @SuppressWarnings("unchecked")
+    public CriteriaQuery<Employee> createQuery(EntityManager em) {
+        CriteriaBuilder cb = em.getCriteriaBuilder();
+        CriteriaQuery<Employee> query = cb.createQuery(Employee.class);
+        Root<Employee> employee = query.from(Employee.class);
+        return (CriteriaQuery<Employee>) addWhereOrder(cb, query, employee, true);
+    }
+
+    @SuppressWarnings("unchecked")
     public CriteriaQuery<Number> createIdQuery(EntityManagerFactory emf) {
         CriteriaBuilder cb = emf.getCriteriaBuilder();
         CriteriaQuery<Number> query = cb.createQuery(Number.class);
@@ -116,7 +129,7 @@
         return query;
     }
 
-    public EntityPaging<Employee> getPaging(EntityManagerFactory emf) {
+    protected EntityPaging<Employee> getPaging(EntityManagerFactory emf) {
         if (getPagingType() != null) {
             Type type = EntityPaging.Type.valueOf(getPagingType());
 
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EmployeeRepository.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EmployeeRepository.java
new file mode 100644
index 0000000..6aca440
--- /dev/null
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EmployeeRepository.java
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * Copyright (c) 2010-2013 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.jpa.employee.services;
+
+import java.util.List;
+
+import javax.ejb.LocalBean;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.LockModeType;
+import javax.persistence.PersistenceContext;
+import javax.persistence.criteria.CriteriaQuery;
+
+import eclipselink.example.jpa.employee.model.Address;
+import eclipselink.example.jpa.employee.model.Employee;
+import eclipselink.example.jpa.employee.model.PhoneNumber;
+import eclipselink.example.jpa.employee.services.paging.EntityPaging;
+
+/**
+ * Edit service for an {@link Employee} instance.
+ * 
+ * @author dclarke
+ * @since EclipseLink 2.4.2
+ */
+@Stateless
+@LocalBean
+public class EmployeeRepository {
+
+    private EntityManager entityManager;
+
+    private Diagnostics diagnostics;
+
+    public EntityManager getEntityManager() {
+        return entityManager;
+    }
+
+    @PersistenceContext(unitName = "employee")
+    public void setEntityManager(EntityManager entityManager) {
+        this.entityManager = entityManager;
+        this.diagnostics = Diagnostics.getInstance(entityManager);
+    }
+
+    public Diagnostics getDiagnostics() {
+        return diagnostics;
+    }
+
+    public Employee find(int id) {
+        return getEntityManager().find(Employee.class, id);
+    }
+
+    public Employee save(Employee employee) {
+        Employee emp = getEntityManager().merge(employee);
+
+        // Ensure the Employee's lock value is incremented
+        getEntityManager().lock(emp, LockModeType.OPTIMISTIC_FORCE_INCREMENT);
+        getEntityManager().flush();
+        return emp;
+    }
+
+    public void delete(Employee employee) {
+        Employee emp = getEntityManager().merge(employee);
+        getEntityManager().remove(emp);
+    }
+
+    public Employee refresh(Employee employee) {
+        Employee emp = employee;
+        if (!getEntityManager().contains(employee)) {
+            emp = getEntityManager().merge(employee);
+        }
+        getEntityManager().refresh(emp);
+        return emp;
+    }
+
+    public int updateVersion(Employee employee) {
+        Employee emp = getEntityManager().merge(employee);
+        getEntityManager().createNativeQuery("UPDATE EMPLOYEE SET VERSION = VERSION + 1 WHERE EMP_ID = " + emp.getId()).executeUpdate();
+        Number result = (Number) getEntityManager().createNativeQuery("SELECT VERSION FROM EMPLOYEE WHERE EMP_ID = " + emp.getId()).getSingleResult();
+        return result.intValue();
+    }
+
+    public void removeAddress(Employee employee) {
+        Employee emp = getEntityManager().merge(employee);
+        emp.setAddress(null);
+    }
+
+    public Address addAddress(Employee employee) {
+        Employee emp = getEntityManager().merge(employee);
+        emp.setAddress(new Address());
+        return emp.getAddress();
+    }
+
+    public PhoneNumber addPhone(Employee employee, String type) {
+        if (type != null && !type.isEmpty()) {
+            Employee emp = getEntityManager().merge(employee);
+            return emp.addPhoneNumber(type, "", "");
+        }
+        return null;
+    }
+
+    public void remove(Employee employee, PhoneNumber phone) {
+        Employee emp = getEntityManager().merge(employee);
+        PhoneNumber p = getEntityManager().merge(phone);
+        emp.removePhoneNumber(p);
+    }
+
+    public EntityPaging<Employee> getPaging(EmployeeCriteria criteria) {
+        return criteria.getPaging(getEntityManager().getEntityManagerFactory());
+    }
+
+    public List<Employee> getEmployees(EmployeeCriteria criteria) {
+        CriteriaQuery<Employee> cq = criteria.createQuery(getEntityManager());
+        return getEntityManager().createQuery(cq).getResultList();
+    }
+}
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EntityPaging.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/EntityPaging.java
similarity index 97%
rename from jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EntityPaging.java
rename to jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/EntityPaging.java
index e1737c2..3cd6609 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EntityPaging.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/EntityPaging.java
@@ -10,7 +10,7 @@
  * Contributors:
  *      dclarke - initial 
  ******************************************************************************/
-package eclipselink.example.jpa.employee.services;
+package eclipselink.example.jpa.employee.services.paging;
 
 import java.util.List;
 
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/FirstMaxPaging.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/FirstMaxPaging.java
similarity index 97%
rename from jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/FirstMaxPaging.java
rename to jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/FirstMaxPaging.java
index 2aac129..db8eae0 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/FirstMaxPaging.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/FirstMaxPaging.java
@@ -10,7 +10,7 @@
  * Contributors:
  *      dclarke - initial 
  ******************************************************************************/
-package eclipselink.example.jpa.employee.services;
+package eclipselink.example.jpa.employee.services.paging;
 
 import java.util.List;
 
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/IdInPaging.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/IdInPaging.java
similarity index 97%
rename from jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/IdInPaging.java
rename to jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/IdInPaging.java
index 16df376..31490e6 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/IdInPaging.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/IdInPaging.java
@@ -10,7 +10,7 @@
  * Contributors:
  *      dclarke - initial 
  ******************************************************************************/
-package eclipselink.example.jpa.employee.services;
+package eclipselink.example.jpa.employee.services.paging;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/StreamPaging.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/StreamPaging.java
similarity index 97%
rename from jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/StreamPaging.java
rename to jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/StreamPaging.java
index aa0e2de..06accf9 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/StreamPaging.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/StreamPaging.java
@@ -10,7 +10,7 @@
  * Contributors:
  *      dclarke - initial 
  ******************************************************************************/
-package eclipselink.example.jpa.employee.services;
+package eclipselink.example.jpa.employee.services.paging;
 
 import java.util.List;
 
diff --git a/jpa/employee/employee.model/src/main/resources/META-INF/persistence.xml b/jpa/employee/employee.model/src/main/resources/META-INF/persistence.xml
index 2d93a10..8046947 100644
--- a/jpa/employee/employee.model/src/main/resources/META-INF/persistence.xml
+++ b/jpa/employee/employee.model/src/main/resources/META-INF/persistence.xml
@@ -1,14 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-	<persistence-unit name="employee" transaction-type="RESOURCE_LOCAL">
-		<non-jta-data-source>java:global/employeeDS</non-jta-data-source>
-		<class>eclipselink.example.jpa.employee.model.Project</class>
+	<persistence-unit name="employee" transaction-type="JTA">
+		<jta-data-source>java:global/employeeDS</jta-data-source>
 		<class>eclipselink.example.jpa.employee.model.Address</class>
 		<class>eclipselink.example.jpa.employee.model.Employee</class>
 		<class>eclipselink.example.jpa.employee.model.PhoneNumber</class>
 		<class>eclipselink.example.jpa.employee.model.EmploymentPeriod</class>
-		<class>eclipselink.example.jpa.employee.model.LargeProject</class>
-		<class>eclipselink.example.jpa.employee.model.SmallProject</class>
 		<properties>
 			<property name="eclipselink.logging.level" value="FINE"/>
 			<property name="eclipselink.logging.timestamp" value="false"/>
diff --git a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/PersistenceTesting.java b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/PersistenceTesting.java
index 303eded..c74b7ae 100644
--- a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/PersistenceTesting.java
+++ b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/PersistenceTesting.java
@@ -36,7 +36,8 @@
         // SE testing
         props.put(PersistenceUnitProperties.NON_JTA_DATASOURCE, "");
         props.put(PersistenceUnitProperties.JTA_DATASOURCE, "");
-
+        props.put(PersistenceUnitProperties.TRANSACTION_TYPE, "RESOURCE_LOCAL");
+        
         // Configure the use of embedded derby for the tests allowing system
         // properties of the same name to override
         setProperty(props, PersistenceUnitProperties.JDBC_DRIVER, "org.apache.derby.jdbc.EmbeddedDriver");
diff --git a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/AdminBeanTest.java b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/AdminBeanTest.java
new file mode 100644
index 0000000..78501f2
--- /dev/null
+++ b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/AdminBeanTest.java
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2010-2013 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 - initial
+ ******************************************************************************/
+package eclipselink.example.jpa.employee.test.services;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eclipselink.example.jpa.employee.model.SamplePopulation;
+import eclipselink.example.jpa.employee.services.Diagnostics;
+import eclipselink.example.jpa.employee.services.AdminBean;
+import eclipselink.example.jpa.employee.test.PersistenceTesting;
+
+public class AdminBeanTest {
+
+    private AdminBean admin;
+
+    public AdminBean getAdmin() {
+        return admin;
+    }
+
+    @Test
+    public void verifyReset() {
+        for (String type : getAdmin().getTypes()) {
+            Assert.assertEquals(0, admin.getCacheSize(type));
+            Assert.assertEquals(0, admin.getDatabaseCount(type));
+        }
+    }
+
+    @Test
+    public void popuate() {
+        verifyReset();
+
+        getAdmin().populateDatabase(20);
+
+        Assert.assertEquals(20, admin.getCacheSize("Employee"));
+        Assert.assertEquals(20, admin.getDatabaseCount("Employee"));
+
+        Assert.assertEquals(20, admin.getCacheSize("Address"));
+        Assert.assertEquals(20, admin.getDatabaseCount("Address"));
+
+        Assert.assertEquals(40, admin.getCacheSize("PhoneNumber"));
+        Assert.assertEquals(40, admin.getDatabaseCount("PhoneNumber"));
+    }
+
+    @Test
+    public void verifyTypeNames() {
+        List<String> types = getAdmin().getTypes();
+
+        Assert.assertNotNull(types);
+        Assert.assertEquals(3, types.size());
+
+        Assert.assertTrue(types.contains("Employee"));
+        Assert.assertTrue(types.contains("Address"));
+        Assert.assertTrue(types.contains("PhoneNumber"));
+    }
+
+    private static EntityManagerFactory emf;
+
+    public static EntityManagerFactory getEmf() {
+        return emf;
+    }
+
+    @Before
+    public void resetDatabase() {
+        this.admin = new AdminBean();
+        this.admin.setEmf(getEmf());
+        this.admin.resetDatabase();
+    }
+
+    @BeforeClass
+    public static void createEMF() {
+        emf = PersistenceTesting.createEMF(true);
+
+        EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
+        new SamplePopulation().createNewEmployees(em, 25);
+        em.getTransaction().commit();
+        em.close();
+
+        Diagnostics.getInstance(emf);
+        emf.getCache().evictAll();
+    }
+
+    @AfterClass
+    public static void closeEMF() {
+        if (emf != null && emf.isOpen()) {
+            emf.close();
+        }
+        emf = null;
+    }
+
+}
diff --git a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/DiagnosticsTest.java b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/DiagnosticsTest.java
index 1e01073..351897f 100644
--- a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/DiagnosticsTest.java
+++ b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/DiagnosticsTest.java
@@ -75,7 +75,9 @@
         emf = PersistenceTesting.createEMF(true);
 
         EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
         new SamplePopulation().createNewEmployees(em, 25);
+        em.getTransaction().commit();
         em.close();
 
         Diagnostics.getInstance(emf);
diff --git a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/EditEmployeeTest.java b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/EditEmployeeTest.java
index 22f9265..62899bd 100644
--- a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/EditEmployeeTest.java
+++ b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/EditEmployeeTest.java
@@ -17,15 +17,16 @@
 import javax.persistence.OptimisticLockException;
 import javax.persistence.RollbackException;
 
+import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+import eclipselink.example.jpa.employee.model.Employee;
 import eclipselink.example.jpa.employee.model.SamplePopulation;
-import eclipselink.example.jpa.employee.services.EditEmployee;
-import eclipselink.example.jpa.employee.services.EditEmployeeBean;
+import eclipselink.example.jpa.employee.services.EmployeeRepository;
 import eclipselink.example.jpa.employee.test.PersistenceTesting;
 
 /**
@@ -38,42 +39,34 @@
 
     @Test
     public void saveWithoutChanges() {
-        EditEmployee edit = new EditEmployeeBean(getEmf(), sampleId);
+        Employee emp = this.repository.find(sampleId);
 
-        try {
-            edit.save();
-        } finally {
-            edit.close();
-        }
+        Assert.assertNotNull(emp);
+
+        repository.save(emp);
     }
 
     @Test
     public void incrementSalary() {
-        EditEmployee edit = new EditEmployeeBean(getEmf(), sampleId);
+        Employee emp = this.repository.find(sampleId);
 
-        try {
-            edit.getEmployee().setSalary(edit.getEmployee().getSalary() + 1);
-            edit.save();
-        } finally {
-            edit.close();
-        }
+        emp.setSalary(emp.getSalary() + 1);
+
+        repository.save(emp);
     }
 
     @Test
     public void optimisticLockFailure() {
-        EditEmployee edit = new EditEmployeeBean(getEmf(), sampleId);
+        Employee emp = this.repository.find(sampleId);
 
         try {
-            edit.updateVersion();
-            edit.getEmployee().setSalary(edit.getEmployee().getSalary() + 1);
-            edit.save();
-        } catch (RollbackException e) {
-            if (e.getCause() instanceof OptimisticLockException) {
-                return;
-            }
-            throw e;
-        } finally {
-            edit.close();
+            repository.updateVersion(emp);
+            emp.setSalary(emp.getSalary() + 1);
+            repository.save(emp);
+
+        } catch (OptimisticLockException e) {
+            getRepository().getEntityManager().getTransaction().rollback();
+            return;
         }
 
         Assert.fail("OptimisticLockException not thrown");
@@ -81,16 +74,33 @@
 
     @Test
     public void refreshUpdateAddress() {
-        EditEmployee edit = new EditEmployeeBean(getEmf(), sampleId);
+        Employee emp = this.repository.find(sampleId);
 
-        try {
-            edit.refresh();
-            edit.getEmployee().getAddress().setCity("Ottawa");
-            edit.save();
-        } finally {
-            edit.close();
+        emp = repository.refresh(emp);
+        emp.getAddress().setCity("Ottawa");
+        repository.save(emp);
+
+    }
+
+    private EmployeeRepository repository;
+
+    @Before
+    public void setup() {
+        this.repository = new EmployeeRepository();
+        this.repository.setEntityManager(getEmf().createEntityManager());
+        this.repository.getEntityManager().getTransaction().begin();
+    }
+
+    @After
+    public void close() {
+        if (this.repository.getEntityManager().getTransaction().isActive()) {
+            this.repository.getEntityManager().getTransaction().commit();
         }
+        this.repository.getEntityManager().close();
+    }
 
+    public EmployeeRepository getRepository() {
+        return repository;
     }
 
     private static EntityManagerFactory emf;
@@ -111,7 +121,9 @@
         emf = PersistenceTesting.createEMF(true);
 
         EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
         new SamplePopulation().createNewEmployees(em, 1);
+        em.getTransaction().commit();
 
         sampleId = em.createQuery("SELECT e.id FROM Employee e", Integer.class).getSingleResult();
         em.close();
diff --git a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageEmployeesTest.java b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageEmployeesTest.java
index d308860..a1becc9 100644
--- a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageEmployeesTest.java
+++ b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageEmployeesTest.java
@@ -17,17 +17,20 @@
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 
+import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
 import eclipselink.example.jpa.employee.model.Employee;
 import eclipselink.example.jpa.employee.model.SamplePopulation;
 import eclipselink.example.jpa.employee.services.Diagnostics;
+import eclipselink.example.jpa.employee.services.EmployeeRepository;
 import eclipselink.example.jpa.employee.services.Diagnostics.SQLTrace;
+import eclipselink.example.jpa.employee.services.paging.EntityPaging;
 import eclipselink.example.jpa.employee.services.EmployeeCriteria;
-import eclipselink.example.jpa.employee.services.EntityPaging;
 import eclipselink.example.jpa.employee.test.PersistenceTesting;
 
 /**
@@ -40,10 +43,8 @@
 
     @Test
     public void page5ByIndex() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
 
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -51,11 +52,12 @@
         criteria.setLastName(null);
         criteria.setPageSize(5);
         criteria.setPagingType(EntityPaging.Type.PAGE.name());
-        EntityPaging<Employee> paging = criteria.getPaging(getEmf());
+        
+        EntityPaging<Employee> paging = getRepository().getPaging(criteria);
         
         Assert.assertEquals(25, paging.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -73,15 +75,12 @@
 
         Assert.assertFalse(paging.hasNext());
 
-        em.close();
     }
 
     @Test
     public void page5ByNext() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
 
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -89,11 +88,12 @@
         criteria.setLastName(null);
         criteria.setPageSize(5);
         criteria.setPagingType(EntityPaging.Type.PAGE.name());
-        EntityPaging<Employee> paging = criteria.getPaging(getEmf());
+        
+        EntityPaging<Employee> paging = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, paging.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -111,15 +111,12 @@
 
         Assert.assertFalse(paging.hasNext());
 
-        em.close();
     }
 
     @Test
     public void page10ByIndex() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
 
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -127,11 +124,12 @@
         criteria.setLastName(null);
         criteria.setPageSize(10);
         criteria.setPagingType(EntityPaging.Type.PAGE.name());
-        EntityPaging<Employee> paging = criteria.getPaging(getEmf());
+        
+        EntityPaging<Employee> paging = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, paging.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -150,15 +148,12 @@
 
         Assert.assertFalse(paging.hasNext());
 
-        em.close();
     }
 
     @Test
     public void page10ByNext() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
 
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -166,11 +161,12 @@
         criteria.setLastName(null);
         criteria.setPageSize(10);
         criteria.setPagingType(EntityPaging.Type.PAGE.name());
-        EntityPaging<Employee> paging = criteria.getPaging(getEmf());
+        
+        EntityPaging<Employee> paging = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, paging.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -189,7 +185,6 @@
 
         Assert.assertFalse(paging.hasNext());
 
-        em.close();
     }
 
     private static EntityManagerFactory emf;
@@ -203,7 +198,9 @@
         emf = PersistenceTesting.createEMF(true);
 
         EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
         new SamplePopulation().createNewEmployees(em, 25);
+        em.getTransaction().commit();
         em.close();
 
         emf.getCache().evictAll();
@@ -217,4 +214,27 @@
         emf = null;
     }
 
+    private EmployeeRepository repository;
+    
+    @Before
+    public void setup() {
+        this.repository = new EmployeeRepository();
+        this.repository.setEntityManager(getEmf().createEntityManager());
+        this.repository.getEntityManager().getTransaction().begin();
+    }
+    
+    @After
+    public void close() {
+        this.repository.getEntityManager().getTransaction().commit();
+        this.repository.getEntityManager().close();
+    }
+
+    public EmployeeRepository getRepository() {
+        return repository;
+    }
+    
+    public Diagnostics getDiagnostics() {
+        return getRepository().getDiagnostics();
+    }
+
 }
diff --git a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageIdsInEmployeesTest.java b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageIdsInEmployeesTest.java
index 5f7a6a5..5d3c448 100644
--- a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageIdsInEmployeesTest.java
+++ b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageIdsInEmployeesTest.java
@@ -17,8 +17,10 @@
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 
+import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -27,7 +29,8 @@
 import eclipselink.example.jpa.employee.services.Diagnostics;
 import eclipselink.example.jpa.employee.services.Diagnostics.SQLTrace;
 import eclipselink.example.jpa.employee.services.EmployeeCriteria;
-import eclipselink.example.jpa.employee.services.EntityPaging;
+import eclipselink.example.jpa.employee.services.EmployeeRepository;
+import eclipselink.example.jpa.employee.services.paging.EntityPaging;
 import eclipselink.example.jpa.employee.test.PersistenceTesting;
 
 /**
@@ -40,10 +43,8 @@
 
     @Test
     public void page5ByIndex() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
 
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -51,11 +52,12 @@
         criteria.setLastName(null);
         criteria.setPageSize(5);
         criteria.setPagingType(EntityPaging.Type.PAGE_IN.name());
-        EntityPaging<Employee> paging = criteria.getPaging(getEmf());
+
+        EntityPaging<Employee> paging = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, paging.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -73,15 +75,11 @@
 
         Assert.assertFalse(paging.hasNext());
 
-        em.close();
     }
 
     @Test
     public void page5ByNext() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
-
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -89,11 +87,11 @@
         criteria.setLastName(null);
         criteria.setPageSize(5);
         criteria.setPagingType(EntityPaging.Type.PAGE_IN.name());
-        EntityPaging<Employee> paging = criteria.getPaging(getEmf());
+        EntityPaging<Employee> paging = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, paging.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -111,15 +109,11 @@
 
         Assert.assertFalse(paging.hasNext());
 
-        em.close();
     }
 
     @Test
     public void page10ByIndex() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
-
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -127,11 +121,12 @@
         criteria.setLastName(null);
         criteria.setPageSize(10);
         criteria.setPagingType(EntityPaging.Type.PAGE_IN.name());
-        EntityPaging<Employee> paging = criteria.getPaging(getEmf());
+
+        EntityPaging<Employee> paging = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, paging.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -150,15 +145,11 @@
 
         Assert.assertFalse(paging.hasNext());
 
-        em.close();
     }
 
     @Test
     public void page10ByNext() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
-
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -166,11 +157,11 @@
         criteria.setLastName(null);
         criteria.setPageSize(10);
         criteria.setPagingType(EntityPaging.Type.PAGE_IN.name());
-        EntityPaging<Employee> paging = criteria.getPaging(getEmf());
+        EntityPaging<Employee> paging = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, paging.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -189,7 +180,6 @@
 
         Assert.assertFalse(paging.hasNext());
 
-        em.close();
     }
 
     private static EntityManagerFactory emf;
@@ -203,7 +193,9 @@
         emf = PersistenceTesting.createEMF(true);
 
         EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
         new SamplePopulation().createNewEmployees(em, 25);
+        em.getTransaction().commit();
         em.close();
 
         emf.getCache().evictAll();
@@ -217,4 +209,27 @@
         emf = null;
     }
 
+    private EmployeeRepository repository;
+
+    @Before
+    public void setup() {
+        this.repository = new EmployeeRepository();
+        this.repository.setEntityManager(getEmf().createEntityManager());
+        this.repository.getEntityManager().getTransaction().begin();
+    }
+
+    @After
+    public void close() {
+        this.repository.getEntityManager().getTransaction().commit();
+        this.repository.getEntityManager().close();
+    }
+
+    public EmployeeRepository getRepository() {
+        return repository;
+    }
+
+    public Diagnostics getDiagnostics() {
+        return getRepository().getDiagnostics();
+    }
+
 }
diff --git a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/StreamEmployeesTest.java b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/StreamEmployeesTest.java
index 51ad195..0b36c6e 100644
--- a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/StreamEmployeesTest.java
+++ b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/StreamEmployeesTest.java
@@ -18,8 +18,10 @@
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 
+import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -28,7 +30,8 @@
 import eclipselink.example.jpa.employee.services.Diagnostics;
 import eclipselink.example.jpa.employee.services.Diagnostics.SQLTrace;
 import eclipselink.example.jpa.employee.services.EmployeeCriteria;
-import eclipselink.example.jpa.employee.services.EntityPaging;
+import eclipselink.example.jpa.employee.services.EmployeeRepository;
+import eclipselink.example.jpa.employee.services.paging.EntityPaging;
 import eclipselink.example.jpa.employee.test.PersistenceTesting;
 
 /**
@@ -41,10 +44,7 @@
 
     @Test
     public void streamAllNext() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
-
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -52,11 +52,11 @@
         criteria.setLastName(null);
         criteria.setPageSize(5);
         criteria.setPagingType(EntityPaging.Type.CURSOR.name());
-        EntityPaging<Employee> stream = criteria.getPaging(getEmf());
+        EntityPaging<Employee> stream = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, stream.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -87,19 +87,14 @@
             stream.next();
         } catch (IllegalStateException e) {
             return;
-        } finally {
-            em.close();
-        }
+        } 
 
         Assert.fail("IllegalStateException not thrown on next()");
     }
 
     @Test
     public void streamAllNext10() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
-
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -107,11 +102,11 @@
         criteria.setLastName(null);
         criteria.setPageSize(10);
         criteria.setPagingType(EntityPaging.Type.CURSOR.name());
-        EntityPaging<Employee> stream = criteria.getPaging(getEmf());
+        EntityPaging<Employee> stream = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, stream.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -146,19 +141,14 @@
             stream.next();
         } catch (IllegalStateException e) {
             return;
-        } finally {
-            em.close();
-        }
+        } 
 
         Assert.fail("IllegalStateException not thrown on next()");
     }
 
     @Test
     public void streamAllPrevious() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
-
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -166,11 +156,11 @@
         criteria.setLastName(null);
         criteria.setPageSize(5);
         criteria.setPagingType(EntityPaging.Type.CURSOR.name());
-        EntityPaging<Employee> stream = criteria.getPaging(getEmf());
+        EntityPaging<Employee> stream = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, stream.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -224,19 +214,14 @@
             stream.previous();
         } catch (IllegalStateException e) {
             return;
-        } finally {
-            em.close();
-        }
+        } 
 
         Assert.fail("IllegalStateException not thrown on previous()");
     }
 
     @Test
     public void streamAllPreviousGet() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
-
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -244,11 +229,12 @@
         criteria.setLastName(null);
         criteria.setPageSize(5);
         criteria.setPagingType(EntityPaging.Type.CURSOR.name());
-        EntityPaging<Employee> stream = criteria.getPaging(getEmf());
+        
+        EntityPaging<Employee> stream = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, stream.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -302,9 +288,7 @@
             stream.previous();
         } catch (IllegalStateException e) {
             return;
-        } finally {
-            em.close();
-        }
+        } 
 
         Assert.fail("IllegalStateException not thrown on previous()");
     }
@@ -320,11 +304,9 @@
         emf = PersistenceTesting.createEMF(true);
 
         EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
         new SamplePopulation().createNewEmployees(em, 25);
-
-        Number count = em.createNamedQuery("Employee.count", Number.class).getSingleResult();
-        Assert.assertEquals(25, count.intValue());
-
+        em.getTransaction().commit();
         em.close();
 
         emf.getCache().evictAll();
@@ -338,4 +320,27 @@
         emf = null;
     }
 
+    private EmployeeRepository repository;
+    
+    @Before
+    public void setup() {
+        this.repository = new EmployeeRepository();
+        this.repository.setEntityManager(getEmf().createEntityManager());
+        this.repository.getEntityManager().getTransaction().begin();
+    }
+    
+    @After
+    public void close() {
+        this.repository.getEntityManager().getTransaction().commit();
+        this.repository.getEntityManager().close();
+    }
+
+    public EmployeeRepository getRepository() {
+        return repository;
+    }
+    
+    public Diagnostics getDiagnostics() {
+        return getRepository().getDiagnostics();
+    }
+
 }
diff --git a/jpa/employee/employee.model/src/test/java/example/JavaSEExample.java b/jpa/employee/employee.model/src/test/java/example/JavaSEExample.java
index b715358..dca4972 100644
--- a/jpa/employee/employee.model/src/test/java/example/JavaSEExample.java
+++ b/jpa/employee/employee.model/src/test/java/example/JavaSEExample.java
@@ -20,8 +20,6 @@
 
 import eclipselink.example.jpa.employee.model.Employee;
 import eclipselink.example.jpa.employee.model.SamplePopulation;
-import eclipselink.example.jpa.employee.services.EmployeeCriteria;
-import eclipselink.example.jpa.employee.services.EntityPaging;
 import eclipselink.example.jpa.employee.test.PersistenceTesting;
 
 /**
@@ -42,7 +40,9 @@
         try {
             EntityManager em = emf.createEntityManager();
 
+            em.getTransaction().begin();
             new SamplePopulation().createNewEmployees(em, 10);
+            em.getTransaction().commit();
             em.clear();
 
             example.queryAllEmployees(em);
@@ -57,8 +57,6 @@
             example.deleteEmployee(em, 1);
             em.clear();
 
-            example.pagingIdIn(emf);
-
             em.close();
 
         } finally {
@@ -112,16 +110,4 @@
 
     }
 
-    public void pagingIdIn(EntityManagerFactory emf) {
-        EmployeeCriteria criteria = new EmployeeCriteria();
-        criteria.setFirstName(null);
-        criteria.setLastName(null);
-        criteria.setPagingType(EntityPaging.Type.PAGE.name());
-
-        EntityPaging<Employee> paging = criteria.getPaging(emf);
-
-        paging.get(1);
-        paging.get(2);
-    }
-
 }
diff --git a/jpa/employee/employee.web/README.md b/jpa/employee/employee.web/README.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/jpa/employee/employee.web/README.md
diff --git a/jpa/employee/employee.web/pom.xml b/jpa/employee/employee.web/pom.xml
index 74c1cba..8dab3e2 100644
--- a/jpa/employee/employee.web/pom.xml
+++ b/jpa/employee/employee.web/pom.xml
@@ -14,26 +14,8 @@
 	<name>Employee Web App</name>
 
 	<dependencies>
-		<dependency>
-			<groupId>${eclipselink.groupid}</groupId>
-			<artifactId>${eclipselink.artifactid}</artifactId>
-			<version>${eclipselink.version}</version>
-			<exclusions>
-				<exclusion>
-					<artifactId>commonj.sdo</artifactId>
-					<groupId>commonj.sdo</groupId>
-				</exclusion>
-			</exclusions>
-			<scope>provided</scope>
-		</dependency>
 
 		<!-- EclipseLink JPA-RS Web Fragment -->
-		<dependency>
-			<groupId>${eclipselink.groupid}</groupId>
-			<artifactId>org.eclipse.persistence.jpars</artifactId>
-			<version>${eclipselink.version}</version>
-			<scope>provided</scope>
-		</dependency>
 
 		<dependency>
 			<groupId>junit</groupId>
@@ -42,12 +24,6 @@
 			<scope>test</scope>
 		</dependency>
 
-		<dependency>
-			<groupId>org.apache.derby</groupId>
-			<artifactId>derby</artifactId>
-			<version>10.9.1.0</version>
-			<scope>test</scope>
-		</dependency>
 
 		<dependency>
 			<groupId>eclipselink.example.jpa</groupId>
@@ -55,12 +31,6 @@
 			<version>2.4.2-SNAPSHOT</version>
 		</dependency>
 
-		<dependency>
-			<groupId>javax</groupId>
-			<artifactId>javaee-api</artifactId>
-			<version>6.0</version>
-			<scope>provided</scope>
-		</dependency>
 <!-- 
 		<dependency>
 			<groupId>com.sun.jersey.jersey-test-framework</groupId>
@@ -69,6 +39,24 @@
 			<scope>test</scope>
 		</dependency>
  -->
+		<dependency>
+			<groupId>javax.faces</groupId>
+			<artifactId>javax.faces-api</artifactId>
+			<version>2.1</version>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.glassfish</groupId>
+			<artifactId>javax.ejb</artifactId>
+			<version>3.1.1</version>
+			<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>
diff --git a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/Admin.java b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/Admin.java
index 413d449..6267a30 100644
--- a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/Admin.java
+++ b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/Admin.java
@@ -12,16 +12,13 @@
  ******************************************************************************/
 package eclipselink.example.jpa.employee.web;
 
+import java.util.List;
+
+import javax.ejb.EJB;
 import javax.faces.bean.ManagedBean;
 import javax.faces.bean.RequestScoped;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.PersistenceUnit;
 
-import org.eclipse.persistence.sessions.server.Server;
-import org.eclipse.persistence.tools.schemaframework.SchemaManager;
-
-import eclipselink.example.jpa.employee.model.SamplePopulation;
+import eclipselink.example.jpa.employee.services.AdminBean;
 
 /**
  * TODO
@@ -33,41 +30,58 @@
 @RequestScoped
 public class Admin {
 
-    private EntityManagerFactory emf;
+    private AdminBean adminBean;
 
-    public EntityManagerFactory getEmf() {
-        return emf;
+    private List<String> typeNames;
+
+    private boolean displaySql = false;
+
+    public AdminBean getAdminBean() {
+        return adminBean;
     }
 
-    @PersistenceUnit(unitName = "employee")
-    public void setEmf(EntityManagerFactory emf) {
-        this.emf = emf;
+    @EJB
+    public void setAdminBean(AdminBean adminBean) {
+        this.adminBean = adminBean;
     }
 
     public String resetDatabase() {
-        EntityManager em = getEmf().createEntityManager();
-
-        try {
-            SchemaManager sm = new SchemaManager(em.unwrap(Server.class));
-            sm.replaceDefaultTables();
-            sm.replaceSequences();
-
-            em.unwrap(Server.class).getIdentityMapAccessor().initializeAllIdentityMaps();
-        } finally {
-            em.close();
-        }
-        return null;
+        return getAdminBean().resetDatabase();
     }
 
     public String populateDatabase() {
-        EntityManager em = getEmf().createEntityManager();
+        return getAdminBean().populateDatabase(25);
+    }
 
-        try {
-            new SamplePopulation().createNewEmployees(em, 25);
-        } finally {
-            em.close();
+    public List<String> getTypeNames() {
+        if (this.typeNames == null) {
+            this.typeNames = getAdminBean().getTypes();
         }
-        return null;
+        return typeNames;
+    }
+
+    public boolean isDisplaySql() {
+        return displaySql;
+    }
+
+    public void setDisplaySql(boolean displaySql) {
+        this.displaySql = displaySql;
+    }
+
+    public void toggleSqlDisplay() {
+        this.displaySql = !this.displaySql;
+    }
+
+    public String getToggleSqlDisplayButton() {
+        return isDisplaySql() ? "Disable SQL Display" : "Enable SQL Display";
+    }
+
+    public String getCacheSize(String typeName) {
+        int size = getAdminBean().getCacheSize(typeName);
+        if (size < 0) {
+            return "Error";
+        }
+        return Integer.toString(size);
     }
 
 }
diff --git a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/BaseBean.java b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/BaseBean.java
deleted file mode 100644
index c94032f..0000000
--- a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/BaseBean.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010-2013 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 - initial
- ******************************************************************************/
-package eclipselink.example.jpa.employee.web;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.context.FacesContext;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-
-import org.eclipse.persistence.logging.SessionLogEntry;
-
-import eclipselink.example.jpa.employee.services.Diagnostics;
-import eclipselink.example.jpa.employee.services.Diagnostics.SQLTrace;
-
-/**
- * Return list of available Leagues from JAX-RS call to MySports Admin app.
- * 
- * @author dclarke
- * @since EclipseLink 2.4.2
- */
-public abstract class BaseBean {
-
-    private EntityManagerFactory emf;
-
-    private Diagnostics diagnostics;
-    
-    public EntityManagerFactory getEmf() {
-        return emf;
-    }
-
-    protected void setEmf(EntityManagerFactory emf) {
-        this.emf = emf;
-        this.diagnostics = Diagnostics.getInstance(emf);
-    }
-    
-    protected EntityManager createEntityManager() {
-        EntityManager em = getEmf().createEntityManager();
-        startSqlCapture();
-        return em;
-    }
-    
-    protected void close(EntityManager em) {
-        if (em.getTransaction().isActive()) {
-            em.getTransaction().rollback();
-        }
-        em.close();
-        stopSqlCapture();
-    }
-
-    protected void startSqlCapture() {
-        this.diagnostics.start();
-    }
-
-    protected void stopSqlCapture() {
-        addMessages(this.diagnostics.stop());
-    }
-
-    /**
-     * Add each SQL string to the messages TODO: Allow this to be
-     * enabled/disabled
-     */
-    private void addMessages(SQLTrace sqlTrace) {
-        for (SessionLogEntry entry : sqlTrace.getEntries()) {
-            FacesContext.getCurrentInstance().addMessage("SQL", new FacesMessage(entry.getMessage()));
-        }
-    }
-
-}
diff --git a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/Config.java b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/Config.java
deleted file mode 100644
index b5b230a..0000000
--- a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/Config.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010-2013 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 - initial
- ******************************************************************************/
-package eclipselink.example.jpa.employee.web;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.PersistenceUnit;
-
-import org.eclipse.persistence.descriptors.ClassDescriptor;
-import org.eclipse.persistence.internal.sessions.IdentityMapAccessor;
-import org.eclipse.persistence.sessions.server.Server;
-
-/**
- * TODO
- * 
- * @author dclarke
- * @since EclipseLink 2.4.2
- */
-@ManagedBean
-@SessionScoped
-public class Config {
-
-    private List<String> typeNames;
-
-    private boolean displaySql = false;
-
-    public Config() {
-        this.typeNames = new ArrayList<String>();
-        this.typeNames.add("Employee");
-        this.typeNames.add("Address");
-        this.typeNames.add("PhoneNumber");
-        this.typeNames.add("Project");
-    }
-
-    private EntityManagerFactory emf;
-
-    public EntityManagerFactory getEmf() {
-        return emf;
-    }
-
-    @PersistenceUnit(unitName = "employee")
-    public void setEmf(EntityManagerFactory emf) {
-        this.emf = emf;
-    }
-
-    public List<String> getTypeNames() {
-        return typeNames;
-    }
-
-    public boolean isDisplaySql() {
-        return displaySql;
-    }
-
-    public void setDisplaySql(boolean displaySql) {
-        this.displaySql = displaySql;
-    }
-
-    public void toggleSqlDisplay() {
-        this.displaySql = !this.displaySql;
-    }
-
-    public String getToggleSqlDisplayButton() {
-        return isDisplaySql() ? "Disable SQL Display" : "Enable SQL Display";
-    }
-
-    public String getCacheSize(String typeName) {
-        System.out.println("Config.getCacheSize('" + typeName + "')");
-        EntityManager em = getEmf().createEntityManager();
-        Server session = em.unwrap(Server.class);
-        ClassDescriptor descriptor = session.getDescriptorForAlias(typeName);
-        if (descriptor != null) {
-            int size = ((IdentityMapAccessor) session.getIdentityMapAccessor()).getIdentityMap(descriptor.getJavaClass()).getSize();
-            return Integer.toString(size);
-        } else {
-            return "N/A";
-        }
-    }
-}
diff --git a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EditEmployee.java b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EditEmployee.java
index 9976fb0..fdb6ba3 100644
--- a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EditEmployee.java
+++ b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EditEmployee.java
@@ -13,21 +13,20 @@
 package eclipselink.example.jpa.employee.web;
 
 import javax.annotation.PostConstruct;
+import javax.ejb.EJB;
 import javax.faces.application.FacesMessage;
 import javax.faces.bean.ManagedBean;
 import javax.faces.bean.ViewScoped;
 import javax.faces.context.FacesContext;
 import javax.faces.context.Flash;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.LockModeType;
 import javax.persistence.OptimisticLockException;
-import javax.persistence.PersistenceUnit;
 import javax.persistence.RollbackException;
 
 import eclipselink.example.jpa.employee.model.Address;
 import eclipselink.example.jpa.employee.model.Employee;
 import eclipselink.example.jpa.employee.model.PhoneNumber;
+import eclipselink.example.jpa.employee.services.Diagnostics.SQLTrace;
+import eclipselink.example.jpa.employee.services.EmployeeRepository;
 
 /**
  * Backing bean to edit or create an {@link Employee}.
@@ -37,20 +36,28 @@
  */
 @ManagedBean
 @ViewScoped
-public class EditEmployee extends BaseBean {
+public class EditEmployee {
 
     private Employee employee;
 
-    /**
-     * TODO
-     */
     private String type;
 
     boolean create = false;
 
+    private EmployeeRepository repository;
+
     protected static final String PAGE = "/employee/edit";
     protected static final String PAGE_REDIRECT = "/employee/edit?faces-redirect=true";
 
+    public EmployeeRepository getRepository() {
+        return repository;
+    }
+
+    @EJB
+    public void setRepository(EmployeeRepository repository) {
+        this.repository = repository;
+    }
+
     @PostConstruct
     private void init() {
         Flash flashScope = FacesContext.getCurrentInstance().getExternalContext().getFlash();
@@ -65,7 +72,7 @@
     }
 
     public Employee getEmployee() {
-        return employee;
+        return this.employee;
     }
 
     public String getEmployeeId() {
@@ -87,72 +94,31 @@
         return  getEmployee() != null && getEmployee().getId() <= 0;
     }
 
-    @PersistenceUnit(unitName = "employee")
-    public void setEmf(EntityManagerFactory emf) {
-        super.setEmf(emf);
-    }
-
     /**
      * 
      * @return
      */
     public String save() {
-        EntityManager em = createEntityManager();
-
         try {
-            em.getTransaction().begin();
-            if (getEmployee().getAddress() != null) {
-               // em.merge(getEmployee().getAddress());
-            }
-            this.employee = em.merge(getEmployee());
-            // Ensure the Employee's lock value is incremented
-            em.lock(this.employee, LockModeType.OPTIMISTIC_FORCE_INCREMENT);
-            
-            em.getTransaction().commit();
-            if (isCreate()) {
-                em.refresh(getEmployee());
-            }
+            this.employee = getRepository().save(getEmployee());
         } catch (RollbackException e) {
             if (e.getCause() instanceof OptimisticLockException) {
                 FacesContext.getCurrentInstance().addMessage("OptimisticLockException", new FacesMessage("Commit Failed: Optimistic Lock Exception."));
             } else {
                 throw e;
             }
-        } finally {
-            close(em);
         }
         return null;
     }
     
     public String delete() {
-        EntityManager em = createEntityManager();
-        try {
-            this.employee = em.find(Employee.class, getEmployee().getId());
-            // TODO: Handle find failure
-            em.getTransaction().begin();
-            em.remove(getEmployee());
-            em.getTransaction().commit();
-
-        } finally {
-            close(em);
-            this.employee = null;
-        }
-        return cancel();
+        getRepository().delete(getEmployee());
+        return null;
     }
 
 
     public String refresh() {
-        EntityManager em = createEntityManager();
-
-        try {
-            this.employee = em.find(Employee.class, getEmployee().getId());
-            em.refresh(getEmployee());
-            getEmployee().getAddress();
-            getEmployee().getPhoneNumbers().size();
-            em.detach(employee);
-        } finally {
-            close(em);
-        }
+        this.employee = getRepository().refresh(getEmployee());
         return null;
     }
 
@@ -165,19 +131,7 @@
      * operations will fail.
      */
     public String updateVersion() {
-        EntityManager em = createEntityManager();
-        int newVersion = -1;
-
-        try {
-            em.getTransaction().begin();
-            em.createNativeQuery("UPDATE EMPLOYEE SET VERSION = VERSION + 1 WHERE EMP_ID = " + getEmployee().getId()).executeUpdate();
-            em.getTransaction().commit();
-
-            Number result = (Number) em.createNativeQuery("SELECT VERSION FROM EMPLOYEE WHERE EMP_ID = " + getEmployee().getId()).getSingleResult();
-            newVersion = result.intValue();
-        } finally {
-            close(em);
-        }
+       int newVersion = getRepository().updateVersion(getEmployee());
 
         FacesContext.getCurrentInstance().addMessage("Update version", new FacesMessage("DATABASE EMPLOYEE ID: " + getEmployee().getId() + " VERSION= " + newVersion));
 
@@ -208,5 +162,20 @@
         getEmployee().removePhoneNumber(phone);
         return null;
     }
+    
+    protected void stopSqlCapture() {
+        addMessages(getRepository().getDiagnostics().stop());
+    }
+
+    /**
+     * Add each SQL string to the messages TODO: Allow this to be
+     * enabled/disabled
+     */
+    private void addMessages(SQLTrace sqlTrace) {
+        for (String entry : sqlTrace.getEntries()) {
+            FacesContext.getCurrentInstance().addMessage("SQL", new FacesMessage(entry));
+        }
+    }
+
 
 }
diff --git a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EditEmployeeView.java b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EditEmployeeView.java
index a41e814..ea47358 100644
--- a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EditEmployeeView.java
+++ b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EditEmployeeView.java
@@ -13,26 +13,20 @@
 package eclipselink.example.jpa.employee.web;
 
 import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
+import javax.ejb.EJB;
 import javax.faces.application.FacesMessage;
 import javax.faces.bean.ManagedBean;
 import javax.faces.bean.ViewScoped;
 import javax.faces.context.FacesContext;
 import javax.faces.context.Flash;
-import javax.persistence.EntityManagerFactory;
 import javax.persistence.OptimisticLockException;
-import javax.persistence.PersistenceUnit;
-import javax.persistence.RollbackException;
-
-import org.eclipse.persistence.logging.SessionLogEntry;
 
 import eclipselink.example.jpa.employee.model.Address;
 import eclipselink.example.jpa.employee.model.Employee;
 import eclipselink.example.jpa.employee.model.PhoneNumber;
 import eclipselink.example.jpa.employee.services.Diagnostics;
 import eclipselink.example.jpa.employee.services.Diagnostics.SQLTrace;
-import eclipselink.example.jpa.employee.services.EditEmployee;
-import eclipselink.example.jpa.employee.services.EditEmployeeBean;
+import eclipselink.example.jpa.employee.services.EmployeeRepository;
 
 /**
  * Backing bean to edit or create an {@link Employee}.
@@ -44,17 +38,15 @@
 @ViewScoped
 public class EditEmployeeView {
 
-    private EditEmployee edit;
+    private EmployeeRepository repository;
+
+    private Employee employee;
 
     /**
      * Value used to create new unique {@link PhoneNumber}
      */
     private String type;
 
-    private EntityManagerFactory emf;
-
-    private Diagnostics diagnostics;
-
     protected static final String PAGE = "/employee/edit";
     protected static final String PAGE_REDIRECT = "/employee/edit?faces-redirect=true";
 
@@ -65,18 +57,23 @@
         setEmployee(id);
     }
 
-    public EditEmployee getEdit() {
-        return edit;
+    @EJB
+    public EmployeeRepository getRepository() {
+        return repository;
+    }
+
+    public void setRepository(EmployeeRepository repository) {
+        this.repository = repository;
     }
 
     public Employee getEmployee() {
-        return getEdit().getEmployee();
+        return this.employee;
     }
 
     public void setEmployee(int id) {
         getDiagnostics().start();
-        this.edit = new EditEmployeeBean(getEmf(), id);
-        addMessages(getDiagnostics().stop());
+        this.employee = getRepository().find(id);
+
     }
 
     public String getEmployeeId() {
@@ -95,21 +92,11 @@
     }
 
     public boolean isCreate() {
-        return getEdit().isNew();
-    }
-
-    @PersistenceUnit(unitName = "employee")
-    public void setEmf(EntityManagerFactory emf) {
-        this.emf = emf;
-        this.diagnostics = Diagnostics.getInstance(emf);
-    }
-
-    public EntityManagerFactory getEmf() {
-        return emf;
+        return getEmployee() != null && getEmployee().getId() <= 0;
     }
 
     public Diagnostics getDiagnostics() {
-        return diagnostics;
+        return getRepository().getDiagnostics();
     }
 
     /**
@@ -119,30 +106,26 @@
     public String save() {
         try {
             getDiagnostics().start();
-            getEdit().save();
-        } catch (RollbackException e) {
-            if (e.getCause() instanceof OptimisticLockException) {
-                FacesContext.getCurrentInstance().addMessage("EclipseLink", new FacesMessage("OptimisticLockException: Could not save changes"));
-            } else {
-                throw e;
-            }
+            getRepository().save(getEmployee());
+        } catch (OptimisticLockException e) {
+            FacesContext.getCurrentInstance().addMessage("EclipseLink", new FacesMessage("OptimisticLockException: Could not save changes"));
         } finally {
-            addMessages(getDiagnostics().stop());
+            stopSqlCapture();
         }
         return null;
     }
 
     public String delete() {
         getDiagnostics().start();
-        getEdit().delete();
-        addMessages(getDiagnostics().stop());
+        getRepository().delete(getEmployee());
+        stopSqlCapture();
         return cancel();
     }
 
     public String refresh() {
         getDiagnostics().start();
-        getEdit().refresh();
-        addMessages(getDiagnostics().stop());
+        this.employee = getRepository().refresh(getEmployee());
+        stopSqlCapture();
         return null;
     }
 
@@ -156,8 +139,8 @@
      */
     public String updateVersion() {
         getDiagnostics().start();
-        getEdit().updateVersion();
-        addMessages(getDiagnostics().stop());
+        getRepository().updateVersion(getEmployee());
+        stopSqlCapture();
         return null;
     }
 
@@ -176,7 +159,7 @@
     }
 
     public String addPhone() {
-        PhoneNumber newPhone = getEdit().addPhone(getType());
+        PhoneNumber newPhone = getRepository().addPhone(getEmployee(), getType());
         if (newPhone == null) {
             FacesContext.getCurrentInstance().addMessage("input", new FacesMessage("Invalid type. Phone number could not be added"));
         }
@@ -189,18 +172,13 @@
         return null;
     }
 
-    @PreDestroy
-    public void destroy() {
-        getEdit().close();
+    protected void stopSqlCapture() {
+        addMessages(getRepository().getDiagnostics().stop());
     }
 
-    /**
-     * Add each SQL string to the messages TODO: Allow this to be
-     * enabled/disabled
-     */
     private void addMessages(SQLTrace sqlTrace) {
-        for (SessionLogEntry entry : sqlTrace.getEntries()) {
-            FacesContext.getCurrentInstance().addMessage("SQL", new FacesMessage(entry.getMessage()));
+        for (String entry : sqlTrace.getEntries()) {
+            FacesContext.getCurrentInstance().addMessage("SQL", new FacesMessage(entry));
         }
     }
 
diff --git a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EmployeeResults.java b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EmployeeResults.java
index b614d2b..ccd39c4 100644
--- a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EmployeeResults.java
+++ b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EmployeeResults.java
@@ -15,18 +15,18 @@
 import java.util.List;
 
 import javax.annotation.PostConstruct;
+import javax.ejb.EJB;
+import javax.faces.application.FacesMessage;
 import javax.faces.bean.ManagedBean;
 import javax.faces.bean.ViewScoped;
 import javax.faces.context.FacesContext;
 import javax.faces.context.Flash;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.PersistenceUnit;
-import javax.persistence.criteria.CriteriaQuery;
 
 import eclipselink.example.jpa.employee.model.Employee;
+import eclipselink.example.jpa.employee.services.Diagnostics.SQLTrace;
 import eclipselink.example.jpa.employee.services.EmployeeCriteria;
-import eclipselink.example.jpa.employee.services.EntityPaging;
+import eclipselink.example.jpa.employee.services.EmployeeRepository;
+import eclipselink.example.jpa.employee.services.paging.EntityPaging;
 
 /**
  * Backing bean to manage search results for an Employee query. The results can
@@ -37,10 +37,12 @@
  */
 @ManagedBean
 @ViewScoped
-public class EmployeeResults extends BaseBean {
+public class EmployeeResults {
 
     protected static final String PAGE = "/employee/results?faces-redirect=true";
 
+    private EmployeeRepository repository;
+
     /**
      * Current employees being shown
      */
@@ -50,9 +52,13 @@
 
     private int currentPage = 1;
 
-    @PersistenceUnit(unitName = "employee")
-    public void setEmf(EntityManagerFactory emf) {
-        super.setEmf(emf);
+    public EmployeeRepository getRepository() {
+        return repository;
+    }
+
+    @EJB
+    public void setRepository(EmployeeRepository repository) {
+        this.repository = repository;
     }
 
     public EntityPaging<Employee> getPaging() {
@@ -67,25 +73,19 @@
         this.currentPage = 1;
         this.employees = null;
 
-        this.paging = criteria.getPaging(getEmf());
+        this.paging = getRepository().getPaging(criteria);
 
         if (!hasPaging()) {
-            EntityManager em = createEntityManager();
-            try {
-                startSqlCapture();
-                CriteriaQuery<Employee> cq = criteria.createQuery(getEmf());
-                this.employees = em.createQuery(cq).getResultList();
-            } finally {
-                close(em);
-            }
+            getRepository().getDiagnostics().start();
+            this.employees = getRepository().getEmployees(criteria);
         }
     }
 
     public List<Employee> getEmployees() {
         if (this.employees == null && hasPaging()) {
-            startSqlCapture();
+            getRepository().getDiagnostics().start();
             this.employees = getPaging().get(this.currentPage);
-            this.stopSqlCapture();
+            stopSqlCapture();
         }
         return this.employees;
     }
@@ -142,5 +142,20 @@
 
         return EditEmployee.PAGE;
     }
+    
+    protected void stopSqlCapture() {
+        addMessages(getRepository().getDiagnostics().stop());
+    }
+
+    /**
+     * Add each SQL string to the messages TODO: Allow this to be
+     * enabled/disabled
+     */
+    private void addMessages(SQLTrace sqlTrace) {
+        for (String entry : sqlTrace.getEntries()) {
+            FacesContext.getCurrentInstance().addMessage("SQL", new FacesMessage(entry));
+        }
+    }
+
 
 }
diff --git a/jpa/employee/employee.web/src/main/webapp/WEB-INF/lib/org.eclipse.persistence.jpars-2.4.2-SNAPSHOT.jar b/jpa/employee/employee.web/src/main/webapp/WEB-INF/lib/org.eclipse.persistence.jpars-2.4.2-SNAPSHOT.jar
deleted file mode 100644
index 66a062d..0000000
--- a/jpa/employee/employee.web/src/main/webapp/WEB-INF/lib/org.eclipse.persistence.jpars-2.4.2-SNAPSHOT.jar
+++ /dev/null
Binary files differ
diff --git a/jpa/employee/employee.web/src/main/webapp/admin.xhtml b/jpa/employee/employee.web/src/main/webapp/admin.xhtml
index aff04c9..d4b226a 100644
--- a/jpa/employee/employee.web/src/main/webapp/admin.xhtml
+++ b/jpa/employee/employee.web/src/main/webapp/admin.xhtml
@@ -21,15 +21,15 @@
 					action="#{admin.populateDatabase}" class="menu-button"
 					style="width: 400" />
 				<p />
-				<h:commandButton value="#{config.toggleSqlDisplayButton}"
-					action="#{config.toggleSqlDisplay}" class="menu-button"
+				<h:commandButton value="#{admin.toggleSqlDisplayButton}"
+					action="#{admin.toggleSqlDisplay}" class="menu-button"
 					style="width: 400" />
 				<p />
 			</div>
 		</h:form>
 		<h2>Entity Status</h2>
 		<h:form>
-			<h:dataTable var="type" value="#{config.typeNames}"
+			<h:dataTable var="type" value="#{admin.typeNames}"
 				class="table-design" width="500">
 				<h:column>
 					<f:facet name="header">Type</f:facet>
@@ -40,7 +40,7 @@
 						<div align="center">Cache Size</div>
 					</f:facet>
 					<div align="center">
-						<h:outputLabel value="#{config.getCacheSize(type)}" />
+						<h:outputLabel value="#{admin.getCacheSize(type)}" />
 					</div>
 				</h:column>
 			</h:dataTable>
diff --git a/jpa/employee/employee.web/src/test/java/tests/MainTest.java b/jpa/employee/employee.web/src/test/java/tests/MainTest.java
deleted file mode 100644
index cf6540d..0000000
--- a/jpa/employee/employee.web/src/test/java/tests/MainTest.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package tests;
-import org.junit.Test;
-
-public class MainTest  {
-
-    public MainTest()throws Exception {
-        //super("org.eclipse.persistence.jpa.rs.service");
-    }
-
-    @Test
-    public void testHelloWorld() {
-        /**
-        WebResource webResource = resource();
-        String responseMsg = webResource.path("persistence").get(String.class);
-        assertEquals("Hello World", responseMsg);
-        */
-    }
-
-}
\ No newline at end of file
diff --git a/jpa/employee/pom.xml b/jpa/employee/pom.xml
index 1580b6d..557f286 100644
--- a/jpa/employee/pom.xml
+++ b/jpa/employee/pom.xml
@@ -49,15 +49,11 @@
 	</properties>
 
 	<repositories>
-		<repository>
-			<id>Java.Net</id>
-			<url>http://download.java.net/maven/2/</url>
-		</repository>
-		<repository>
-			<id>EclipseLink</id>
-			<url>http://download.eclipse.org/rt/eclipselink/maven.repo</url>
-		</repository>
-	</repositories>
+        <repository>
+            <id>oss.sonatype.org</id>
+            <name>OSS Sonatype Staging</name>
+            <url>https://oss.sonatype.org/content/groups/staging</url>
+        </repository>	</repositories>
 	
 	<modules>
         <module>employee.model</module>
