diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/platform/database/OraclePlatform.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/platform/database/OraclePlatform.java
index d9430d9..c4d4df8 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/platform/database/OraclePlatform.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/platform/database/OraclePlatform.java
@@ -32,6 +32,7 @@
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Types;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Hashtable;
 import java.util.Iterator;
@@ -975,6 +976,7 @@ public void printSQLSelectStatement(DatabaseCall call, ExpressionSQLPrinter prin
                     Vector fields = new Vector();
                     statement.enableFieldAliasesCaching();
                     String queryString = printOmittingForUpdate(statement, printer, fields);
+                    duplicateCallParameters(call);
                     call.setFields(fields);
 
                     /* Prints a query similar to the below:
@@ -1040,6 +1042,17 @@ public void printSQLSelectStatement(DatabaseCall call, ExpressionSQLPrinter prin
     }
 
     @SuppressWarnings("unchecked")
+    // Bug #453208 - Duplicate call parameters since the query is performed twice
+    private void duplicateCallParameters(DatabaseCall call) {
+        ArrayList newParameterList = new ArrayList(call.getParameters());
+        newParameterList.addAll(call.getParameters());
+        call.setParameters(newParameterList);
+        ArrayList<Integer> newParameterTypesList = new ArrayList(call.getParameterTypes());
+        newParameterTypesList.addAll(call.getParameterTypes());
+        call.setParameterTypes(newParameterTypesList);
+    }
+
+    @SuppressWarnings("unchecked")
     private String printOmittingForUpdate(SQLSelectStatement statement, ExpressionSQLPrinter printer, Vector fields) {
         boolean originalShouldPrintForUpdate = this.shouldPrintForUpdateClause;
         Writer originalWriter = printer.getWriter();
diff --git a/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa/jpql/AdvancedQueryTestSuite.java b/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa/jpql/AdvancedQueryTestSuite.java
index 804a30b..5379fd8 100644
--- a/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa/jpql/AdvancedQueryTestSuite.java
+++ b/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa/jpql/AdvancedQueryTestSuite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2016 Oracle and/or its affiliates. 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.
@@ -29,6 +29,7 @@
 import javax.persistence.Query;
 import javax.persistence.EntityManager;
 import javax.persistence.RollbackException;
+import javax.persistence.TypedQuery;
 
 import junit.framework.Test;
 import junit.framework.TestSuite;
@@ -2714,7 +2715,8 @@ public void testQueryPESSIMISTICLockWithLimit() throws InterruptedException {
         EntityManager em = createEntityManager();
         beginTransaction(em);
         try {
-            Query query = em.createQuery("Select e from Employee e");
+            TypedQuery<Employee> query = em.createQuery("Select e from Employee e where e.lastName != :lastName", Employee.class);
+            query.setParameter("lastName", "Chanley");
             query.setHint(QueryHints.PESSIMISTIC_LOCK, PessimisticLock.Lock);
             query.setFirstResult(5);
             query.setMaxResults(2);
@@ -2734,14 +2736,14 @@ public void testQueryPESSIMISTICLockWithLimit() throws InterruptedException {
                         public void run() {
                         try {
                             beginTransaction(em2);
-                            Query query2 = em2.createQuery("select e from Employee e where e.id = :id");
+                            TypedQuery<Employee> query2 = em2.createQuery("select e from Employee e where e.id = :id", Employee.class);
                             query2.setParameter("id", e.getId());
                             query2.setHint(QueryHints.PESSIMISTIC_LOCK_TIMEOUT, 5);
-                            Employee emp = (Employee) query2.getSingleResult(); // might wait for lock to be released
+                            Employee emp = query2.getSingleResult(); // might wait for lock to be released
                             emp.setFirstName("Trouba");
                             commitTransaction(em2); // might wait for lock to be released
                         } catch (javax.persistence.RollbackException ex) {
-                            if (ex.getMessage().indexOf("org.eclipse.persistence.exceptions.DatabaseException") == -1) {
+                            if (!ex.getMessage().contains("org.eclipse.persistence.exceptions.DatabaseException")) {
                                 ex.printStackTrace();
                                 fail("it's not the right exception:" + ex);
                             }
