Index: java/client/org/apache/derby/client/am/Statement.java
===================================================================
--- java/client/org/apache/derby/client/am/Statement.java	(revisjon 280143)
+++ java/client/org/apache/derby/client/am/Statement.java	(arbeidskopi)
@@ -1393,20 +1393,38 @@
         }
     }
 
+    /**
+     * Mark all ResultSets associated with this statement as
+     * closed. The ResultSets will not be removed from the commit and
+     * rollback listeners list in
+     * <code>org.apache.derby.client.am.Connection</code>.
+     */
     void markResultSetsClosed() {
+        markResultSetsClosed(false);
+    }
+
+    /**
+     * Mark all ResultSets associated with this statement as
+     * closed.
+     *
+     * @param removeListener if true the ResultSets will be removed
+     * from the commit and rollback listeners list in
+     * <code>org.apache.derby.client.am.Connection</code>.
+     */
+    void markResultSetsClosed(boolean removeListener) {
         if (resultSetList_ != null) {
             for (int i = 0; i < resultSetList_.length; i++) {
                 if (resultSetList_[i] != null) {
-                    resultSetList_[i].markClosed();
+                    resultSetList_[i].markClosed(removeListener);
                 }
                 resultSetList_[i] = null;
             }
         }
         if (generatedKeysResultSet_ != null) {
-            generatedKeysResultSet_.markClosed();
+            generatedKeysResultSet_.markClosed(removeListener);
         }
         if (resultSet_ != null) {
-            resultSet_.markClosed();
+            resultSet_.markClosed(removeListener);
         }
         resultSet_ = null;
         resultSetList_ = null;
@@ -1544,7 +1562,7 @@
                 connection_.completeTransactionStart();
             }
 
-            markResultSetsClosed();
+            markResultSetsClosed(true); // true means remove from list of commit and rollback listeners
             markClosedOnServer();
             section_ = newSection;
 
Index: java/client/org/apache/derby/client/am/PreparedStatement.java
===================================================================
--- java/client/org/apache/derby/client/am/PreparedStatement.java	(revisjon 280143)
+++ java/client/org/apache/derby/client/am/PreparedStatement.java	(arbeidskopi)
@@ -1367,7 +1367,7 @@
                 connection_.completeTransactionStart();
             }
 
-            super.markResultSetsClosed();
+            super.markResultSetsClosed(true); // true means remove from list of commit and rollback listeners
 
             switch (sqlMode_) {
             case isUpdate__:
Index: java/client/org/apache/derby/client/am/ResultSet.java
===================================================================
--- java/client/org/apache/derby/client/am/ResultSet.java	(revisjon 280143)
+++ java/client/org/apache/derby/client/am/ResultSet.java	(arbeidskopi)
@@ -388,8 +388,7 @@
                 statement_.resultSetCommitting(this);
             }
         } finally {
-            markClosed();
-            connection_.CommitAndRollbackListeners_.remove(this);
+            markClosed(true);
         }
 
         if (statement_.openOnClient_ && statement_.isCatalogQuery_) {
@@ -2989,12 +2988,31 @@
         }
     }
 
+    /**
+     * Mark this ResultSet as closed. The ResultSet will not be
+     * removed from the commit and rollback listeners list in
+     * <code>org.apache.derby.client.am.Connection</code>.
+     */
     void markClosed() {
+        markClosed(false);
+    }
+
+    /**
+     * Mark this ResultSet as closed.
+     *
+     * @param removeListener if true the ResultSet will be removed
+     * from the commit and rollback listeners list in
+     * <code>org.apache.derby.client.am.Connection</code>.
+     */
+    void markClosed(boolean removeListener) {
         openOnClient_ = false;
         openOnServer_ = false;
         statement_.resetCursorNameAndRemoveFromWhereCurrentOfMappings(); // for SELECT...FOR UPDATE queries
         statement_.removeClientCursorNameFromCache();
         markPositionedUpdateDeletePreparedStatementsClosed();
+        if (removeListener) {
+            connection_.CommitAndRollbackListeners_.remove(this);
+        }
     }
 
     void markClosedOnServer() {
