Index: tck2/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseFailsIfTransactionActive.java
===================================================================
--- tck2/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseFailsIfTransactionActive.java	(revision 937991)
+++ tck2/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseFailsIfTransactionActive.java	(working copy)
@@ -111,6 +111,14 @@
                              failed.toString());
                     }
                 }
+                if (pm1.isClosed()){
+                    fail(ASSERTION_FAILED,
+                         "Unexpected pm1 is closed.");
+                }
+                if (pm2.isClosed()){
+                    fail(ASSERTION_FAILED,
+                         "Unexpected pm2 is closed.");
+                }
             } 
             catch (Exception uex) {
                 setAborted();
Index: tck2/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/Close.java
===================================================================
--- tck2/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/Close.java	(revision 937991)
+++ tck2/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/Close.java	(working copy)
@@ -17,6 +17,9 @@
  
 package org.apache.jdo.tck.api.persistencemanagerfactory;
 
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
 import javax.jdo.JDOFatalUserException;
 import javax.jdo.JDOUserException;
 
@@ -78,7 +81,28 @@
             fail(ASSERTION_FAILED, 
                  "Unexpected exception at pmf.close()/isClosed(): " + ex);
         }
-        
+
+        // pmf.close() on already-closed pmf should not throw an exception
+        try {
+            // don't use closePMF methods because they check isClosed before calling
+            AccessController.doPrivileged(
+                new PrivilegedAction () {
+                    public Object run () {
+                        pmf.close();
+                        return null;
+                    }
+                }
+            );
+        } catch (JDOUserException ex) {
+            // unexpected exception
+            fail(ASSERTION_FAILED, 
+                 "Unexpected exception at repeated pmf.close(): " + ex);
+        } catch (JDOFatalUserException ex) {
+            // unexpected exception
+            fail(ASSERTION_FAILED, 
+                 "Unexpected exception at repeated pmf.close(): " + ex);
+        }
+
         // trying to get a getPersistenceManager should result in a exception
         try {
             pm = pmf.getPersistenceManager();
Index: tck2/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseWithoutPermissionThrowsSecurityException.java
===================================================================
--- tck2/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseWithoutPermissionThrowsSecurityException.java	(revision 937991)
+++ tck2/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseWithoutPermissionThrowsSecurityException.java	(working copy)
@@ -66,11 +66,27 @@
         }
 
         try {
-            pmf.close();
-        } catch (SecurityException ex) {
-            // expected exception if JDOPermission("closePersistenceManagerFactory") is not set
-            if (debug)
-                logger.debug("caught expected exception " + ex.toString());
+            try {
+                pmf.close();
+                fail(ASSERTION_FAILED,
+                    "SecurityException was not thrown when calling pmf.close() without JDOPermission.CLOSE_PERSISTENCE_MANAGER_FACTORY");
+            } catch (SecurityException ex) {
+                // expected exception if JDOPermission("closePersistenceManagerFactory") is not set
+                if (debug)
+                    logger.debug("caught expected exception " + ex.toString());
+            }
+
+            closePMF(pmf);
+
+            try {
+                pmf.close();
+                fail(ASSERTION_FAILED,
+                    "SecurityException was not thrown on repeated call to pmf.close() without JDOPermission.CLOSE_PERSISTENCE_MANAGER_FACTORY");
+            } catch (SecurityException ex) {
+                // expected exception if JDOPermission("closePersistenceManagerFactory") is not set
+                if (debug)
+                    logger.debug("caught expected exception " + ex.toString());
+            }
         }
         finally {
             System.setSecurityManager(oldSecMgr);
Index: tck2/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/AfterCloseSetMethodsThrowException.java
===================================================================
--- tck2/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/AfterCloseSetMethodsThrowException.java	(revision 937991)
+++ tck2/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/AfterCloseSetMethodsThrowException.java	(working copy)
@@ -67,38 +67,68 @@
     public void test() {
         Class[] stringParameters = new Class[]{String.class};
         Class[] booleanParameters = new Class[]{boolean.class};
+        Class[] objectParameters = new Class[]{Object.class};
+        Class[] integerParameters = new Class[]{Integer.class};
         Object[] stringParameter = new Object[]{"Nobody knows the trouble"};
         Object[] booleanParameter = new Object[]{new Boolean(false)};
+        Object[] objectParameter = new Object[]{null};
+        Object[] integerParameter = new Object[]{new Integer(0)};
         
         SetProperty[] setMethods = new SetProperty[] {
             new SetProperty("setConnectionDriverName", stringParameters, stringParameter),
+            new SetProperty("setConnectionFactory", objectParameters, objectParameter),
+            new SetProperty("setConnectionFactory2", objectParameters, objectParameter),
             new SetProperty("setConnectionFactoryName", stringParameters, stringParameter),
             new SetProperty("setConnectionFactory2Name", stringParameters, stringParameter),
+            new SetProperty("setConnectionPassword", stringParameters, stringParameter),
             new SetProperty("setConnectionURL", stringParameters, stringParameter),
             new SetProperty("setConnectionUserName", stringParameters, stringParameter),
-            new SetProperty("setConnectionPassword", stringParameters, stringParameter),
+            new SetProperty("setCopyOnAttach", booleanParameters, booleanParameter),
+            new SetProperty("setDetachAllOnCommit", booleanParameters, booleanParameter),
             new SetProperty("setIgnoreCache", booleanParameters, booleanParameter),
+            new SetProperty("setMapping", stringParameters, stringParameter),
             new SetProperty("setMultithreaded", booleanParameters, booleanParameter),
+            new SetProperty("setName", stringParameters, stringParameter),
             new SetProperty("setNontransactionalRead", booleanParameters, booleanParameter),
             new SetProperty("setNontransactionalWrite", booleanParameters, booleanParameter),
             new SetProperty("setOptimistic", booleanParameters, booleanParameter),
+            new SetProperty("setPersistenceUnitName", stringParameters, stringParameter),
+            new SetProperty("setReadOnly", booleanParameters, booleanParameter),
             new SetProperty("setRestoreValues", booleanParameters, booleanParameter),
-            new SetProperty("setRetainValues", booleanParameters, booleanParameter)
+            new SetProperty("setRetainValues", booleanParameters, booleanParameter),
+            new SetProperty("setServerTimeZoneID", stringParameters, stringParameter),
+            new SetProperty("setTransactionIsolationLevel", stringParameters, stringParameter),
+            new SetProperty("setTransactionType", stringParameters, stringParameter)
         };
        
         GetProperty[] getMethods = new GetProperty[] {
             new GetProperty("getConnectionDriverName"),
+            new GetProperty("getConnectionFactory"),
+            new GetProperty("getConnectionFactory2"),
             new GetProperty("getConnectionFactoryName"),
             new GetProperty("getConnectionFactory2Name"),
             new GetProperty("getConnectionURL"),
             new GetProperty("getConnectionUserName"),
+            new GetProperty("getCopyOnAttach"),
+            new GetProperty("getDataStoreCache"),
+            new GetProperty("getDetachAllOnCommit"),
+            new GetProperty("getFetchGroup"),
+            new GetProperty("getFetchGroups"),
             new GetProperty("getIgnoreCache"),
+            new GetProperty("getMapping"),
             new GetProperty("getMultithreaded"),
+            new GetProperty("getName"),
             new GetProperty("getNontransactionalRead"),
             new GetProperty("getNontransactionalWrite"),
             new GetProperty("getOptimistic"),
+            new GetProperty("getPersistenceUnitName"),
+            new GetProperty("getProperties"),
+            new GetProperty("getReadOnly"),
             new GetProperty("getRestoreValues"),
-            new GetProperty("getRetainValues")
+            new GetProperty("getRetainValues"),
+            new GetProperty("getServerTimeZoneID"),
+            new GetProperty("getTransactionIsolationLevel"),
+            new GetProperty("getTransactionType")
         };
        
         pmf = getPMF();
