Additional test cases for createQuery and find in Temporal Tests/src/tests/internal/TemporalEntityManagerTests.java
diff --git a/Temporal Entity Example/src/temporal/TemporalEntityManager.java b/Temporal Entity Example/src/temporal/TemporalEntityManager.java
index 4acc081..dc22d48 100644
--- a/Temporal Entity Example/src/temporal/TemporalEntityManager.java
+++ b/Temporal Entity Example/src/temporal/TemporalEntityManager.java
@@ -19,6 +19,7 @@
 import java.lang.reflect.Member;
 
 import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
 import javax.persistence.Query;
 import javax.persistence.TypedQuery;
 import javax.persistence.criteria.CriteriaQuery;
@@ -439,7 +440,11 @@
             Query query = createNamedQuery(descriptor.getAlias() + ".find");
             query.setParameter("ID", primaryKey);
 
-            return (T) query.getSingleResult();
+            try {
+                return (T) query.getSingleResult();
+            } catch (NoResultException nre) {
+                return null;
+            }
         }
 
         return (T) super.find(entityClass, primaryKey);
diff --git a/Temporal Entity Example/src/temporal/persistence/DescriptorHelper.java b/Temporal Entity Example/src/temporal/persistence/DescriptorHelper.java
index 3585bb9..c61b60b 100644
--- a/Temporal Entity Example/src/temporal/persistence/DescriptorHelper.java
+++ b/Temporal Entity Example/src/temporal/persistence/DescriptorHelper.java
@@ -98,20 +98,24 @@
     public static ClassDescriptor getEditionDescriptor(Session session, Class<?> entityClass) {
         return getDescriptor(session, entityClass, EDITION);
     }
-    
+
+    public static ClassDescriptor getEditionViewDescriptor(Session session, Class<?> entityClass) {
+        return getDescriptor(session, entityClass, EDITION_VIEW);
+    }
+
     /**
-     * TODO
+     * Lookup the descriptor based on the object taking into account the
+     * possibility of wrappers being used.
      */
     public static ClassDescriptor getClassDescriptor(Session session, Object entity) {
         Object domainObject = entity;
-        
+
         if (Proxy.isProxyClass(entity.getClass())) {
             InvocationHandler handler = Proxy.getInvocationHandler(entity);
-            
+
             if (handler instanceof EditionWrapperPolicy.Handler<?>) {
                 domainObject = ((EditionWrapperPolicy.Handler<?>) handler).getEntity();
-            }
-            else            if (handler instanceof CurrentWrapperPolicy.CurrentWrapperHandler) {
+            } else if (handler instanceof CurrentWrapperPolicy.CurrentWrapperHandler) {
                 domainObject = ((CurrentWrapperPolicy.CurrentWrapperHandler<?>) handler).getEntity();
             }
         }
diff --git a/Temporal Tests/src/tests/FullPersonWithEditions.java b/Temporal Tests/src/tests/FullPersonWithEditions.java
index 79ddb2b..db353e9 100644
--- a/Temporal Tests/src/tests/FullPersonWithEditions.java
+++ b/Temporal Tests/src/tests/FullPersonWithEditions.java
@@ -611,6 +611,7 @@
         Assert.assertNotNull(es);
         Assert.assertTrue(es.getEntries().isEmpty());
 
+        em.getTransaction().begin();
         Person pAtT5 = em.newEdition(pEdition);
 
         Assert.assertNotNull(pAtT5);
diff --git a/Temporal Tests/src/tests/internal/TemporalEntityManagerTests.java b/Temporal Tests/src/tests/internal/TemporalEntityManagerTests.java
index f498740..ca8dcb0 100644
--- a/Temporal Tests/src/tests/internal/TemporalEntityManagerTests.java
+++ b/Temporal Tests/src/tests/internal/TemporalEntityManagerTests.java
@@ -27,13 +27,18 @@
 import static temporal.Effectivity.EOT;
 
 import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.TypedQuery;
 
 import junit.framework.Assert;
 import model.Person;
 import model.PersonHobby;
 
+import org.eclipse.persistence.descriptors.ClassDescriptor;
 import org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork;
+import org.eclipse.persistence.queries.ObjectLevelReadQuery;
 import org.eclipse.persistence.sessions.DatabaseSession;
+import org.eclipse.persistence.sessions.Session;
 import org.eclipse.persistence.sessions.UnitOfWork;
 import org.eclipse.persistence.sessions.server.ClientSession;
 import org.eclipse.persistence.sessions.server.Server;
@@ -41,6 +46,7 @@
 
 import temporal.EditionSet;
 import temporal.TemporalEntityManager;
+import temporal.persistence.DescriptorHelper;
 import tests.BaseTestCase;
 
 /**
@@ -189,7 +195,7 @@
         TemporalEntityManager em = getEntityManager();
         em.setEffectiveTime(T3);
         EditionSet esT3 = em.getEditionSet();
-        
+
         em.getTransaction().begin();
 
         Person newPersonAtT3 = em.newEntity(Person.class);
@@ -199,10 +205,10 @@
 
         em.setEffectiveTime(T4);
         EditionSet esT4 = em.getEditionSet();
-        
+
         Assert.assertFalse(esT4.hasChanges());
         Assert.assertTrue(esT3.hasChanges());
-        
+
         em.flush();
     }
 
@@ -221,4 +227,74 @@
         // TODO : ?
         em.getTransaction().rollback();
     }
+
+    /**
+     * Verify proper query construction using interface alias. The concrete type
+     * queried will depend on the state (effective time) of the
+     * {@link TemporalEntityManager}
+     */
+    @Test
+    public void createQuery_Person() {
+        TemporalEntityManager em = getEntityManager();
+
+        // Current Query
+        TypedQuery<Person> query = em.createQuery("SELECT p FROM Person p", Person.class);
+        Assert.assertNotNull(query);
+        ClassDescriptor desc = DescriptorHelper.getCurrentDescriptor(em.unwrap(Session.class), Person.class);
+        Assert.assertSame(desc.getJavaClass(), query.unwrap(ObjectLevelReadQuery.class).getReferenceClass());
+        Assert.assertSame(desc, query.unwrap(ObjectLevelReadQuery.class).getDescriptor());
+
+        // Edition Query
+        em.setEffectiveTime(T1);
+        query = em.createQuery("SELECT p FROM Person p", Person.class);
+        Assert.assertNotNull(query);
+        desc = DescriptorHelper.getEditionDescriptor(em.unwrap(Session.class), Person.class);
+        Assert.assertSame(desc.getJavaClass(), query.unwrap(ObjectLevelReadQuery.class).getReferenceClass());
+        Assert.assertSame(desc, query.unwrap(ObjectLevelReadQuery.class).getDescriptor());
+
+        // Current Query again
+        em.clearEffectiveTime();
+        query = em.createQuery("SELECT p FROM Person p", Person.class);
+        Assert.assertNotNull(query);
+        desc = DescriptorHelper.getCurrentDescriptor(em.unwrap(Session.class), Person.class);
+        Assert.assertSame(desc.getJavaClass(), query.unwrap(ObjectLevelReadQuery.class).getReferenceClass());
+        Assert.assertSame(desc, query.unwrap(ObjectLevelReadQuery.class).getDescriptor());
+    }
+
+    @Test
+    public void createQuery_PersonEdition() {
+        TemporalEntityManager em = getEntityManager();
+
+        // Current Query
+        TypedQuery<Person> query = em.createQuery("SELECT p FROM PersonEdition p", Person.class);
+        Assert.assertNotNull(query);
+        ClassDescriptor desc = DescriptorHelper.getEditionDescriptor(em.unwrap(Session.class), Person.class);
+        Assert.assertSame(desc.getJavaClass(), query.unwrap(ObjectLevelReadQuery.class).getReferenceClass());
+        Assert.assertSame(desc, query.unwrap(ObjectLevelReadQuery.class).getDescriptor());
+    }
+
+    @Test
+    public void createQuery_PersonEditionView() {
+        TemporalEntityManager em = getEntityManager();
+
+        // Current Query
+        TypedQuery<Person> query = em.createQuery("SELECT p FROM PersonEditionView p", Person.class);
+        Assert.assertNotNull(query);
+        ClassDescriptor desc = DescriptorHelper.getEditionViewDescriptor(em.unwrap(Session.class), Person.class);
+        Assert.assertSame(desc.getJavaClass(), query.unwrap(ObjectLevelReadQuery.class).getReferenceClass());
+        Assert.assertSame(desc, query.unwrap(ObjectLevelReadQuery.class).getDescriptor());
+    }
+
+    /**
+     * Ensure the find of a non-existent edition returns null and not the
+     * {@link NoResultException} thrown by the .find named query execution.
+     */
+    @Test
+    public void findNonExistent() {
+        TemporalEntityManager em = getEntityManager();
+        em.setEffectiveTime(T3);
+
+        Person result = em.find(Person.class, 123456789l);
+        Assert.assertNull(result);
+    }
 }
diff --git a/Temporal Tests/src/tests/internal/VerifyConfigTests.java b/Temporal Tests/src/tests/internal/VerifyConfigTests.java
index a4a8809..20d4c59 100644
--- a/Temporal Tests/src/tests/internal/VerifyConfigTests.java
+++ b/Temporal Tests/src/tests/internal/VerifyConfigTests.java
@@ -233,5 +233,15 @@
 
         // TODO: Verify FK fields
     }
+    
+    /**
+     * Important that JPQL caching is disabled to ensure 
+     */
+    @Test
+    public void verifyJPQLCcaheingDisabled() {
+        Server session = JpaHelper.getServerSession(getEMF());
+        Assert.assertEquals(0, session.getProject().getJPQLParseCacheMaxSize());
+    }
+
 
 }
diff --git a/Temporal WAR/WebContent/index.xhtml b/Temporal WAR/WebContent/index.xhtml
index 0148385..7281997 100644
--- a/Temporal WAR/WebContent/index.xhtml
+++ b/Temporal WAR/WebContent/index.xhtml
@@ -40,6 +40,7 @@
 					<f:facet name="header">Effectivity</f:facet>
 					<h:outputText value="#{person.effectivity}"></h:outputText>
 				</h:column>
+				<f:facet name="footer"><div align="right"><h:commandLink action="create-edition" value="Create"/></div></f:facet>
 			</h:dataTable>
 		</h:form>
 	</p>
@@ -71,9 +72,9 @@
 					<h:outputText value="#{person.effectivity}" />
 				</h:column>
 			</h:dataTable>
-
+<p/>
 			<h:dataTable value="#{persistenceBean.allEditions}" var="person"
-				bgcolor="whitesmoke" border="2" width="400">
+				bgcolor="whitesmoke" border="2" width="600">
 				<f:facet name="header">
 					<h:outputText value="All Future Person Editions"></h:outputText>
 				</f:facet>
@@ -97,6 +98,10 @@
 					<f:facet name="header">Effectivity</f:facet>
 					<h:outputText value="#{person.effectivity}" />
 				</h:column>
+				<h:column>
+					<h:commandButton value="Edit"/>
+					<h:commandButton value="Delete"/>
+				</h:column>
 			</h:dataTable>
 		</h:form>
 
diff --git a/Temporal WAR/src/temporal/web/CreateEditionBean.java b/Temporal WAR/src/temporal/web/CreateEditionBean.java
index c28a14f..fc3a355 100644
--- a/Temporal WAR/src/temporal/web/CreateEditionBean.java
+++ b/Temporal WAR/src/temporal/web/CreateEditionBean.java
@@ -15,7 +15,6 @@
 import javax.ejb.EJB;
 import javax.faces.bean.ManagedBean;
 
-import model.Person;
 import temporal.ejb.PersonService;
 
 @ManagedBean
@@ -64,6 +63,6 @@
 
     public String create() {
         getService().create(getId(), getName(), getEffective());
-        return "success";
+        return "index?faces-redirect=true";
     }
 }