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/.settings/org.eclipse.core.resources.prefs b/jpa/employee/employee.model/.settings/org.eclipse.core.resources.prefs
index 5de7f02..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/AdminBean.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/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/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/PessimisticLockTest.launch
deleted file mode 100644
index ea1494d..0000000
--- a/jpa/employee/employee.model/src/PessimisticLockTest.launch
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="4"/>
-</listAttribute>
-<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
-<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
-<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
-<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
-<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="test.PessimisticLockTest"/>
-<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/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
index f7d35c7..4a4b948 100644
--- 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
@@ -70,7 +70,9 @@
         EntityManager em = getEmf().createEntityManager();
 
         try {
+            em.getTransaction().begin();
             new SamplePopulation().createNewEmployees(em, quantity);
+            em.getTransaction().commit();
         } finally {
             em.close();
         }
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 96b3dba..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
@@ -53,13 +53,20 @@
      */
     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/EditEmployeeBean.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EditEmployeeBean.java
deleted file mode 100644
index f630189..0000000
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EditEmployeeBean.java
+++ /dev/null
@@ -1,166 +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.LocalBean;
-import javax.ejb.Stateless;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.LockModeType;
-import javax.persistence.PersistenceUnit;
-
-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
-@LocalBean
-public class EditEmployeeBean {
-
-    private EntityManagerFactory emf;
-
-    private Employee employee;
-
-    private Diagnostics diagnostics;
-
-    public EditEmployeeBean() {
-        super();
-    }
-
-    public EntityManagerFactory getEmf() {
-        return emf;
-    }
-
-    @PersistenceUnit(unitName = "employee")
-    public void setEmf(EntityManagerFactory emf) {
-        this.emf = emf;
-        this.diagnostics = Diagnostics.getInstance(emf);
-    }
-
-    public Diagnostics getDiagnostics() {
-        return diagnostics;
-    }
-
-    public Employee getEmployee() {
-        return employee;
-    }
-
-    public void setEmployee(Employee employee) {
-        this.employee = employee;
-        if (employee != null) {
-            employee.getAddress();
-            employee.getPhoneNumbers().size();
-        }
-    }
-
-    public Employee setEmployee(int id) {
-        EntityManager em = getEmf().createEntityManager();
-
-        try {
-            this.employee = em.find(Employee.class, id);
-            return this.employee;
-        } finally {
-            em.close();
-        }
-    }
-
-    public boolean isNew() {
-        return getEmployee().getId() <= 0;
-    }
-
-    public void save() {
-        EntityManager em = getEmf().createEntityManager();
-
-        try {
-            this.employee = em.merge(getEmployee());
-            em.getTransaction().begin();
-
-            // Ensure the Employee's lock value is incremented
-            em.lock(getEmployee(), LockModeType.OPTIMISTIC_FORCE_INCREMENT);
-
-            em.getTransaction().commit();
-        } finally {
-            em.close();
-        }
-    }
-
-    public void delete() {
-        EntityManager em = getEmf().createEntityManager();
-
-        try {
-            this.employee = em.merge(getEmployee());
-            em.getTransaction().begin();
-            em.remove(getEmployee());
-            em.getTransaction().commit();
-        } finally {
-            setEmployee(null);
-        }
-    }
-
-    public void refresh() {
-        EntityManager em = getEmf().createEntityManager();
-
-        try {
-            if (!em.contains(getEmployee())) {
-                setEmployee(em.merge(getEmployee()));
-            }
-            em.refresh(getEmployee());
-        } finally {
-            em.close();
-        }
-    }
-
-    public int updateVersion() {
-        EntityManager em = getEmf().createEntityManager();
-
-        try {
-            this.employee = em.merge(getEmployee());
-            em.getTransaction().begin();
-            em.createNativeQuery("UPDATE EMPLOYEE SET VERSION = VERSION + 1 WHERE EMP_ID = " + getEmployee().getId()).executeUpdate();
-            em.getTransaction().commit();
-            setEmployee(em.merge(getEmployee()));
-            Number result = (Number) em.createNativeQuery("SELECT VERSION FROM EMPLOYEE WHERE EMP_ID = " + getEmployee().getId()).getSingleResult();
-            return result.intValue();
-        } finally {
-            em.close();
-        }
-    }
-
-    public String removeAddress() {
-        getEmployee().setAddress(null);
-        return null;
-    }
-
-    public String addAddress() {
-        getEmployee().setAddress(new Address());
-        return null;
-    }
-
-    public PhoneNumber addPhone(String type) {
-        if (type != null && !type.isEmpty()) {
-            return getEmployee().addPhoneNumber(type, "", "");
-        }
-        return null;
-    }
-
-    public void remove(PhoneNumber phone) {
-        getEmployee().removePhoneNumber(phone);
-    }
-
-}
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
index a0f69fe..78501f2 100644
--- 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
@@ -58,9 +58,6 @@
 
         Assert.assertEquals(40, admin.getCacheSize("PhoneNumber"));
         Assert.assertEquals(40, admin.getDatabaseCount("PhoneNumber"));
-
-        Assert.assertEquals(0, admin.getCacheSize("Project"));
-        Assert.assertEquals(0, admin.getDatabaseCount("Project"));
     }
 
     @Test
@@ -68,12 +65,11 @@
         List<String> types = getAdmin().getTypes();
 
         Assert.assertNotNull(types);
-        Assert.assertEquals(4, types.size());
+        Assert.assertEquals(3, types.size());
 
         Assert.assertTrue(types.contains("Employee"));
         Assert.assertTrue(types.contains("Address"));
         Assert.assertTrue(types.contains("PhoneNumber"));
-        Assert.assertTrue(types.contains("Project"));
     }
 
     private static EntityManagerFactory emf;
@@ -94,7 +90,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/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 a9284f4..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,6 +17,7 @@
 import javax.persistence.OptimisticLockException;
 import javax.persistence.RollbackException;
 
+import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.Before;
@@ -25,7 +26,7 @@
 
 import eclipselink.example.jpa.employee.model.Employee;
 import eclipselink.example.jpa.employee.model.SamplePopulation;
-import eclipselink.example.jpa.employee.services.EditEmployeeBean;
+import eclipselink.example.jpa.employee.services.EmployeeRepository;
 import eclipselink.example.jpa.employee.test.PersistenceTesting;
 
 /**
@@ -36,44 +37,36 @@
  */
 public class EditEmployeeTest {
 
-    private EditEmployeeBean edit = new EditEmployeeBean();
-
-    @Before
-    public void setup() {
-        this.edit = new EditEmployeeBean();
-        this.edit.setEmf(getEmf());
-    }
-
     @Test
     public void saveWithoutChanges() {
-        Employee emp = this.edit.setEmployee(sampleId);
-        
+        Employee emp = this.repository.find(sampleId);
+
         Assert.assertNotNull(emp);
 
-        edit.save();
+        repository.save(emp);
     }
 
     @Test
     public void incrementSalary() {
-        edit.setEmployee(sampleId);
+        Employee emp = this.repository.find(sampleId);
 
-        edit.getEmployee().setSalary(edit.getEmployee().getSalary() + 1);
-        edit.save();
+        emp.setSalary(emp.getSalary() + 1);
+
+        repository.save(emp);
     }
 
     @Test
     public void optimisticLockFailure() {
-        edit.setEmployee(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;
+            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,14 +74,35 @@
 
     @Test
     public void refreshUpdateAddress() {
-        edit.setEmployee(sampleId);
+        Employee emp = this.repository.find(sampleId);
 
-        edit.refresh();
-        edit.getEmployee().getAddress().setCity("Ottawa");
-        edit.save();
+        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;
 
     private static int sampleId;
@@ -107,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/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/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/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 e13deaf..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
@@ -20,16 +20,13 @@
 import javax.faces.context.FacesContext;
 import javax.faces.context.Flash;
 import javax.persistence.OptimisticLockException;
-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.EditEmployeeBean;
+import eclipselink.example.jpa.employee.services.EmployeeRepository;
 
 /**
  * Backing bean to edit or create an {@link Employee}.
@@ -41,7 +38,9 @@
 @ViewScoped
 public class EditEmployeeView {
 
-    private EditEmployeeBean edit;
+    private EmployeeRepository repository;
+
+    private Employee employee;
 
     /**
      * Value used to create new unique {@link PhoneNumber}
@@ -58,23 +57,23 @@
         setEmployee(id);
     }
 
-    public EditEmployeeBean getEdit() {
-        return edit;
+    @EJB
+    public EmployeeRepository getRepository() {
+        return repository;
     }
 
-    @EJB
-    public void setEdit(EditEmployeeBean edit) {
-        this.edit = edit;
+    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.setEmployee(id);
-        addMessages(getDiagnostics().stop());
+        this.employee = getRepository().find(id);
+
     }
 
     public String getEmployeeId() {
@@ -93,11 +92,11 @@
     }
 
     public boolean isCreate() {
-        return getEdit().isNew();
+        return getEmployee() != null && getEmployee().getId() <= 0;
     }
 
     public Diagnostics getDiagnostics() {
-        return getEdit().getDiagnostics();
+        return getRepository().getDiagnostics();
     }
 
     /**
@@ -107,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;
     }
 
@@ -144,8 +139,8 @@
      */
     public String updateVersion() {
         getDiagnostics().start();
-        getEdit().updateVersion();
-        addMessages(getDiagnostics().stop());
+        getRepository().updateVersion(getEmployee());
+        stopSqlCapture();
         return null;
     }
 
@@ -164,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"));
         }
@@ -177,13 +172,13 @@
         return null;
     }
 
-    /**
-     * Add each SQL string to the messages TODO: Allow this to be
-     * enabled/disabled
-     */
+    protected void stopSqlCapture() {
+        addMessages(getRepository().getDiagnostics().stop());
+    }
+
     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/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
