diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/jca/operations/JCAProjectCreationOperationTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/jca/operations/JCAProjectCreationOperationTest.java
index 1eff146..c7d9ee6 100644
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/jca/operations/JCAProjectCreationOperationTest.java
+++ b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/jca/operations/JCAProjectCreationOperationTest.java
@@ -52,6 +52,11 @@
     	OperationTestCase.runAndVerify(dm);
     }
     
+    public void testConnector16_Defaults() throws Exception{
+    	IDataModel dm = getConnectorDataModel("iConnector", null, null, JavaEEFacetConstants.CONNECTOR_16);
+    	OperationTestCase.runAndVerify(dm);
+    }
+    
     public void testConnector10_WithEAR() throws Exception{
     	IDataModel dm = getConnectorDataModel("cConnector", "myEAR", null, JavaEEFacetConstants.CONNECTOR_1);
     	OperationTestCase.runAndVerify(dm);
@@ -62,6 +67,11 @@
     	OperationTestCase.runAndVerify(dm);
     }
     
+    public void testConnector16_WithEAR() throws Exception{
+    	IDataModel dm = getConnectorDataModel("jConnector", "herEAR", null, JavaEEFacetConstants.CONNECTOR_16);
+    	OperationTestCase.runAndVerify(dm);
+    }
+    
     public void testConnector10_ChangedSrouceFolder() throws Exception{
     	IDataModel dm = getConnectorDataModel("eConnector",null, "mySrc", JavaEEFacetConstants.CONNECTOR_1);
     	OperationTestCase.runAndVerify(dm);
@@ -72,6 +82,11 @@
     	OperationTestCase.runAndVerify(dm);
     }
     
+    public void testConnector16_ChangedSrouceFolder() throws Exception{
+    	IDataModel dm = getConnectorDataModel("kConnector", null, "herSrc", JavaEEFacetConstants.CONNECTOR_16);
+    	OperationTestCase.runAndVerify(dm);
+    }
+    
     public void testConnector10_ChangedSrouceFolder_WithEAR() throws Exception{
     	IDataModel dm = getConnectorDataModel("gConnector", "coolEAR", "theirSrc", JavaEEFacetConstants.CONNECTOR_1);
     	OperationTestCase.runAndVerify(dm);
@@ -81,6 +96,11 @@
     	IDataModel dm = getConnectorDataModel("hConnector", "netoEAR", "weSrc", JavaEEFacetConstants.CONNECTOR_15);
     	OperationTestCase.runAndVerify(dm);
     }
+    
+    public void testConnector16_ChangedSrouceFolder_WithEAR() throws Exception{
+    	IDataModel dm = getConnectorDataModel("lConnector", "niceEAR", "hisSrc", JavaEEFacetConstants.CONNECTOR_16);
+    	OperationTestCase.runAndVerify(dm);
+    }
 
     /**
      * Creates and returns an Connector Data Model with the given name and of the given version.
@@ -117,6 +137,10 @@
             IDataModel javaFacetModel = facetMap.getFacetDataModel(IJ2EEFacetConstants.JAVA);
             javaFacetModel.setProperty(IFacetDataModelProperties.FACET_VERSION, JavaEEFacetConstants.JAVA_5);
         }
+        else if(version == JavaEEFacetConstants.CONNECTOR_16) {
+            IDataModel javaFacetModel = facetMap.getFacetDataModel(IJ2EEFacetConstants.JAVA);
+            javaFacetModel.setProperty(IFacetDataModelProperties.FACET_VERSION, JavaEEFacetConstants.JAVA_6);
+        }
         
     	return dm;
     }
