reworked jpa project wizards/properties to handle SE vs EE cases
diff --git a/jpa/plugins/org.eclipse.jpt.core/plugin.properties b/jpa/plugins/org.eclipse.jpt.core/plugin.properties
index f3f14d6..f6bc34f 100644
--- a/jpa/plugins/org.eclipse.jpt.core/plugin.properties
+++ b/jpa/plugins/org.eclipse.jpt.core/plugin.properties
@@ -39,13 +39,17 @@
 
 NO_OP_LIBRARY_PROVIDER_WARNING = Library configuration is disabled. The user may need to configure further classpath changes later.
 NO_OP_LIBRARY_PROVIDER_MESSAGE = The JPA facet requires a JPA implementation library to be present on the project classpath. By disabling library configuration, the user takes on the responsibility of ensuring that the classpath is configured appropriately via alternate means.
+JPA_WTP_LIBRARY_PROVIDER_LABEL=User Library for EE Project
 
 JPA_PREREQ_GROUP_LABEL="JPA prerequisite facets"
 JPA_FACET_LABEL=JPA
 JPA_FACET_DESCRIPTION=Adds support for writing persistent meta-data using the Java Persistence API (JPA).
-JPA_1.0_PRESET_LABEL=Minimal JPA 1.0 Configuration
-JPA_2.0_PRESET_LABEL=Minimal JPA 2.0 Configuration
-JPA_TEMPLATE_LABEL=JPA Project
+JPA_SE_TEMPLATE_LABEL=JPA SE Project
+JPA_EE_TEMPLATE_LABEL=JPA EE Project
+JPA_1.0_SE_PRESET_LABEL=Minimal JPA 1.0 Configuration
+JPA_1.0_EE_PRESET_LABEL=Minimal JPA 1.0 EE Configuration
+JPA_2.0_SE_PRESET_LABEL=Minimal JPA 2.0 Configuration
+JPA_2.0_EE_PRESET_LABEL=Minimal JPA 2.0 EE Configuration
 JPA_VALIDATOR=JPA Validator
 JPA_PROBLEM=JPA Problem
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/plugin.xml b/jpa/plugins/org.eclipse.jpt.core/plugin.xml
index 840585e..4c9e5c0 100644
--- a/jpa/plugins/org.eclipse.jpt.core/plugin.xml
+++ b/jpa/plugins/org.eclipse.jpt.core/plugin.xml
@@ -125,6 +125,13 @@
 			properties="isLatestSupportedVersion"
 			class="org.eclipse.jpt.core.internal.resource.xml.JpaXmlResourcePropertyTester"/>
 		
+		<propertyTester
+			id="org.eclipse.jpt.core.propertyTester.facet"
+			type="org.eclipse.wst.common.project.facet.core.IProjectFacetVersion"
+			namespace="org.eclipse.jpt.core"
+			properties="group"
+			class="org.eclipse.jpt.core.internal.FacetVersionPropertyTester"/>
+		
 	</extension>
 	
 	
@@ -259,6 +266,15 @@
 	******************************************
 	-->
 	
+	<extension
+		point="org.eclipse.jst.common.project.facet.core.legacyLibraryProviderDetectors">
+		
+		<detector
+			class="org.eclipse.jpt.core.internal.facet.LegacyJpaLibraryProviderDetector"/>
+		
+	</extension>
+	
+	
 	<extension 
 		point="org.eclipse.jst.common.project.facet.core.libraryProviders">
 		
@@ -284,128 +300,259 @@
 			</enablement>
 		</provider>
 		
-		<provider 
-			id="jpa-generic1_0-user-library-provider" 
-			extends="wtp-user-library-provider">
-			<param name="validator" value="org.eclipse.jpt.core.internal.utility.KeyClassesValidator"/>
-			<param name="validator.param.0" value="javax.persistence.Entity"/>
+		<provider
+			id="jpa-user-library-provider"
+			extends="user-library-provider"
+			abstract="true">
 			<enablement>
 				<and>
 					<with variable="requestingProjectFacet">
 						<test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jpt.jpa" forcePluginActivation="true"/>
 					</with>
-					<with variable="jpaPlatform">
-						<equals value="generic"/>
+					<with variable="projectFacets">
+						<iterate>
+							<not>
+								<test property="org.eclipse.jpt.core.group" value="modules" forcePluginActivation="true"/>
+							</not>
+						</iterate>
+					</with>
+				</and>		
+			</enablement>
+		</provider>
+		
+		<provider
+			id="jpa-wtp-user-library-provider"
+			extends="wtp-user-library-provider"
+			abstract="true">
+			<label>%JPA_WTP_LIBRARY_PROVIDER_LABEL</label>
+			<enablement>
+				<and>
+					<with variable="requestingProjectFacet">
+						<test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jpt.jpa" forcePluginActivation="true"/>
+					</with>
+					<not>
+						<with variable="projectFacets">
+							<iterate>
+								<not>
+									<test property="org.eclipse.jpt.core.group" value="modules" forcePluginActivation="true"/>
+								</not>
+							</iterate>
+						</with>
+					</not>
+				</and>		
+			</enablement>
+		</provider>
+		
+		<provider 
+			id="jpa-osgi-bundles-library-provider"
+			extends="osgi-bundles-library-provider"
+			abstract="true">
+			<enablement>
+				<and>
+					<with variable="requestingProjectFacet">
+						<test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jpt.jpa" forcePluginActivation="true"/>
+					</with>
+					<with variable="projectFacets">
+						<iterate>
+							<not>
+								<test property="org.eclipse.jpt.core.group" value="modules" forcePluginActivation="true"/>
+							</not>
+						</iterate>
 					</with>
 				</and>
 			</enablement>
 		</provider>
 		
 		<provider 
+			id="jpa-wtp-osgi-bundles-library-provider"
+			extends="wtp-osgi-bundles-library-provider"
+			abstract="true">
+			<enablement>
+				<and>
+					<with variable="requestingProjectFacet">
+						<test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jpt.jpa" forcePluginActivation="true"/>
+					</with>
+					<not>
+						<with variable="projectFacets">
+							<iterate>
+								<not>
+									<test property="org.eclipse.jpt.core.group" value="modules" forcePluginActivation="true"/>
+								</not>
+							</iterate>
+						</with>
+					</not>
+				</and>
+			</enablement>
+		</provider>
+		
+		<provider 
+			id="jpa-generic1_0-user-library-provider" 
+			extends="jpa-user-library-provider">
+			<param name="validator" value="org.eclipse.jpt.core.internal.utility.KeyClassesValidator"/>
+			<param name="validator.param.0" value="javax.persistence.Entity"/>
+			<enablement>
+				<with variable="jpaPlatform">
+					<equals value="generic"/>
+				</with>
+			</enablement>
+		</provider>
+		
+		<provider 
+			id="jpa-generic1_0-wtp-user-library-provider" 
+			extends="jpa-wtp-user-library-provider">
+			<param name="validator" value="org.eclipse.jpt.core.internal.utility.KeyClassesValidator"/>
+			<param name="validator.param.0" value="javax.persistence.Entity"/>
+			<enablement>
+				<with variable="jpaPlatform">
+					<equals value="generic"/>
+				</with>
+			</enablement>
+		</provider>
+		
+		<provider 
 			id="jpa-generic2_0-user-library-provider" 
-			extends="wtp-user-library-provider">
+			extends="jpa-user-library-provider">
 			<param name="validator" value="org.eclipse.jpt.core.internal.utility.KeyClassesValidator"/>
 			<param name="validator.param.0" value="javax.persistence.Entity"/>
 			<param name="validator.param.1" value="javax.persistence.ElementCollection"/>
 			<enablement>
-				<and>
-					<with variable="requestingProjectFacet">
-						<test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jpt.jpa" forcePluginActivation="true"/>
-					</with>
-					<with variable="jpaPlatform">
-						<equals value="generic2_0"/>
-					</with>
-				</and>
+				<with variable="jpaPlatform">
+					<equals value="generic2_0"/>
+				</with>
 			</enablement>
 		</provider>
 		
-	</extension>
-	
-	
-	<extension
-		point="org.eclipse.jst.common.project.facet.core.legacyLibraryProviderDetectors">
+		<provider 
+			id="jpa-generic2_0-wtp-user-library-provider" 
+			extends="jpa-wtp-user-library-provider">
+			<param name="validator" value="org.eclipse.jpt.core.internal.utility.KeyClassesValidator"/>
+			<param name="validator.param.0" value="javax.persistence.Entity"/>
+			<param name="validator.param.1" value="javax.persistence.ElementCollection"/>
+			<enablement>
+				<with variable="jpaPlatform">
+					<equals value="generic2_0"/>
+				</with>
+			</enablement>
+		</provider>
 		
-		<detector
-			class="org.eclipse.jpt.core.internal.facet.LegacyJpaLibraryProviderDetector"/>
-		
-	</extension>
-	
-	
-	<extension point="org.eclipse.jst.common.project.facet.core.libraryProviders">
-		
-		<provider id="eclipselink-102-osgi-bundles-library-provider" extends="wtp-osgi-bundles-library-provider">
+		<provider 
+			id="eclipselink-102-osgi-bundles-library-provider"
+			extends="jpa-osgi-bundles-library-provider">
 			<label>EclipseLink 1.0.x</label>
-				<param name="container.label" value="EclipseLink 1.0.x"/>
-				<param name="bundle.0" value="javax.persistence:[1.0.0, 2.0.0)"/>
-				<param name="bundle.1" value="org.eclipse.persistence.core:[1.0.0, 1.1.0)"/>
-				<param name="bundle.2" value="org.eclipse.persistence.jpa:[1.0.0, 1.1.0)"/>
-				<param name="bundle.3" value="org.eclipse.persistence.asm:[1.0.0, 1.1.0)"/>
-				<param name="bundle.4" value="org.eclipse.persistence.antlr:[1.0.0, 1.1.0)"/>
-			<enablement>
-				<with variable="requestingProjectFacet">
-					<test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jpt.jpa" forcePluginActivation="true"/>
-				</with>
-			</enablement>
+			<param name="container.label" value="EclipseLink 1.0.x"/>
+			<param name="bundle.0" value="javax.persistence:[1.0.0, 2.0.0)"/>
+			<param name="bundle.1" value="org.eclipse.persistence.core:[1.0.0, 1.1.0)"/>
+			<param name="bundle.2" value="org.eclipse.persistence.jpa:[1.0.0, 1.1.0)"/>
+			<param name="bundle.3" value="org.eclipse.persistence.asm:[1.0.0, 1.1.0)"/>
+			<param name="bundle.4" value="org.eclipse.persistence.antlr:[1.0.0, 1.1.0)"/>
 		</provider>
 		
-		<provider id="eclipselink-110-osgi-bundles-library-provider" extends="wtp-osgi-bundles-library-provider">
+		<provider 
+			id="eclipselink-102-wtp-osgi-bundles-library-provider"
+			extends="jpa-wtp-osgi-bundles-library-provider">
+			<label>EclipseLink 1.0.x</label>
+			<param name="container.label" value="EclipseLink 1.0.x"/>
+			<param name="bundle.0" value="javax.persistence:[1.0.0, 2.0.0)"/>
+			<param name="bundle.1" value="org.eclipse.persistence.core:[1.0.0, 1.1.0)"/>
+			<param name="bundle.2" value="org.eclipse.persistence.jpa:[1.0.0, 1.1.0)"/>
+			<param name="bundle.3" value="org.eclipse.persistence.asm:[1.0.0, 1.1.0)"/>
+			<param name="bundle.4" value="org.eclipse.persistence.antlr:[1.0.0, 1.1.0)"/>
+		</provider>
+		
+		<provider 
+			id="eclipselink-110-osgi-bundles-library-provider" 
+			extends="jpa-osgi-bundles-library-provider">
 			<label>EclipseLink 1.1.x</label>
-				<param name="container.label" value="EclipseLink 1.1.x"/>
-				<param name="bundle.0" value="javax.persistence:[1.99.0, 2.1.0)"/>
-				<param name="bundle.1" value="org.eclipse.persistence.core:[1.1.0, 1.2.0)"/>
-				<param name="bundle.2" value="org.eclipse.persistence.jpa:[1.1.0, 1.2.0)"/>
-				<param name="bundle.3" value="org.eclipse.persistence.asm:[1.1.0, 1.2.0)"/>
-				<param name="bundle.4" value="org.eclipse.persistence.antlr:[1.1.0, 1.2.0)"/>
-			<enablement>
-				<with variable="requestingProjectFacet">
-					<test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jpt.jpa" forcePluginActivation="true"/>
-				</with>
-			</enablement>
+			<param name="container.label" value="EclipseLink 1.1.x"/>
+			<param name="bundle.0" value="javax.persistence:[1.99.0, 2.1.0)"/>
+			<param name="bundle.1" value="org.eclipse.persistence.core:[1.1.0, 1.2.0)"/>
+			<param name="bundle.2" value="org.eclipse.persistence.jpa:[1.1.0, 1.2.0)"/>
+			<param name="bundle.3" value="org.eclipse.persistence.asm:[1.1.0, 1.2.0)"/>
+			<param name="bundle.4" value="org.eclipse.persistence.antlr:[1.1.0, 1.2.0)"/>
 		</provider>
 		
-		<provider id="eclipselink-120-osgi-bundles-library-provider" extends="wtp-osgi-bundles-library-provider">
+		<provider 
+			id="eclipselink-110-wtp-osgi-bundles-library-provider" 
+			extends="jpa-wtp-osgi-bundles-library-provider">
+			<label>EclipseLink 1.1.x</label>
+			<param name="container.label" value="EclipseLink 1.1.x"/>
+			<param name="bundle.0" value="javax.persistence:[1.99.0, 2.1.0)"/>
+			<param name="bundle.1" value="org.eclipse.persistence.core:[1.1.0, 1.2.0)"/>
+			<param name="bundle.2" value="org.eclipse.persistence.jpa:[1.1.0, 1.2.0)"/>
+			<param name="bundle.3" value="org.eclipse.persistence.asm:[1.1.0, 1.2.0)"/>
+			<param name="bundle.4" value="org.eclipse.persistence.antlr:[1.1.0, 1.2.0)"/>
+		</provider>
+		
+		<provider 
+			id="eclipselink-120-osgi-bundles-library-provider" 
+			extends="jpa-osgi-bundles-library-provider">
 			<label>EclipseLink 1.2.x</label>
-				<param name="container.label" value="EclipseLink 1.2.x"/>
-				<param name="bundle.0" value="javax.persistence:[1.99.0, 2.1.0)"/>
-				<param name="bundle.1" value="org.eclipse.persistence.core:[1.2.0, 1.3.0)"/>
-				<param name="bundle.2" value="org.eclipse.persistence.jpa:[1.2.0, 1.3.0)"/>
-				<param name="bundle.3" value="org.eclipse.persistence.asm:[1.2.0, 1.3.0)"/>
-				<param name="bundle.4" value="org.eclipse.persistence.antlr:[1.2.0, 1.3.0)"/>
-			<enablement>
-				<with variable="requestingProjectFacet">
-					<test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jpt.jpa" forcePluginActivation="true"/>
-				</with>
-			</enablement>
+			<param name="container.label" value="EclipseLink 1.2.x"/>
+			<param name="bundle.0" value="javax.persistence:[1.99.0, 2.1.0)"/>
+			<param name="bundle.1" value="org.eclipse.persistence.core:[1.2.0, 1.3.0)"/>
+			<param name="bundle.2" value="org.eclipse.persistence.jpa:[1.2.0, 1.3.0)"/>
+			<param name="bundle.3" value="org.eclipse.persistence.asm:[1.2.0, 1.3.0)"/>
+			<param name="bundle.4" value="org.eclipse.persistence.antlr:[1.2.0, 1.3.0)"/>
 		</provider>
 		
-		<provider id="eclipselink-200-osgi-bundles-library-provider" extends="wtp-osgi-bundles-library-provider">
+		<provider 
+			id="eclipselink-120-wtp-osgi-bundles-library-provider" 
+			extends="jpa-wtp-osgi-bundles-library-provider">
+			<label>EclipseLink 1.2.x</label>
+			<param name="container.label" value="EclipseLink 1.2.x"/>
+			<param name="bundle.0" value="javax.persistence:[1.99.0, 2.1.0)"/>
+			<param name="bundle.1" value="org.eclipse.persistence.core:[1.2.0, 1.3.0)"/>
+			<param name="bundle.2" value="org.eclipse.persistence.jpa:[1.2.0, 1.3.0)"/>
+			<param name="bundle.3" value="org.eclipse.persistence.asm:[1.2.0, 1.3.0)"/>
+			<param name="bundle.4" value="org.eclipse.persistence.antlr:[1.2.0, 1.3.0)"/>
+		</provider>
+		
+		<provider 
+			id="eclipselink-200-osgi-bundles-library-provider" 
+			extends="jpa-osgi-bundles-library-provider">
 			<label>EclipseLink 2.0.x</label>
-				<param name="container.label" value="EclipseLink 2.0.x"/>
-				<param name="bundle.0" value="javax.persistence:[2.0.0, 2.1.0)"/>
-				<param name="bundle.1" value="org.eclipse.persistence.core:[2.0.0, 2.1.0)"/>
-				<param name="bundle.2" value="org.eclipse.persistence.jpa:[2.0.0, 2.1.0)"/>
-				<param name="bundle.3" value="org.eclipse.persistence.asm:[2.0.0, 2.1.0)"/>
-				<param name="bundle.4" value="org.eclipse.persistence.antlr:[2.0.0, 2.1.0)"/>
-			<enablement>
-				<with variable="requestingProjectFacet">
-					<test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jpt.jpa" forcePluginActivation="true"/>
-				</with>
-			</enablement>
+			<param name="container.label" value="EclipseLink 2.0.x"/>
+			<param name="bundle.0" value="javax.persistence:[2.0.0, 2.1.0)"/>
+			<param name="bundle.1" value="org.eclipse.persistence.core:[2.0.0, 2.1.0)"/>
+			<param name="bundle.2" value="org.eclipse.persistence.jpa:[2.0.0, 2.1.0)"/>
+			<param name="bundle.3" value="org.eclipse.persistence.asm:[2.0.0, 2.1.0)"/>
+			<param name="bundle.4" value="org.eclipse.persistence.antlr:[2.0.0, 2.1.0)"/>
 		</provider>
 		
-		<provider id="eclipselink-210-osgi-bundles-library-provider" extends="wtp-osgi-bundles-library-provider">
+		<provider 
+			id="eclipselink-200-wtp-osgi-bundles-library-provider" 
+			extends="jpa-wtp-osgi-bundles-library-provider">
+			<label>EclipseLink 2.0.x</label>
+			<param name="container.label" value="EclipseLink 2.0.x"/>
+			<param name="bundle.0" value="javax.persistence:[2.0.0, 2.1.0)"/>
+			<param name="bundle.1" value="org.eclipse.persistence.core:[2.0.0, 2.1.0)"/>
+			<param name="bundle.2" value="org.eclipse.persistence.jpa:[2.0.0, 2.1.0)"/>
+			<param name="bundle.3" value="org.eclipse.persistence.asm:[2.0.0, 2.1.0)"/>
+			<param name="bundle.4" value="org.eclipse.persistence.antlr:[2.0.0, 2.1.0)"/>
+		</provider>
+		
+		<provider
+			id="eclipselink-210-osgi-bundles-library-provider"
+			extends="jpa-osgi-bundles-library-provider">
 			<label>EclipseLink 2.1.x</label>
-				<param name="container.label" value="EclipseLink 2.1.x"/>
-				<param name="bundle.0" value="javax.persistence:[2.0.0, 2.1.0)"/>
-				<param name="bundle.1" value="org.eclipse.persistence.core:[2.1.0, 2.2.0)"/>
-				<param name="bundle.2" value="org.eclipse.persistence.jpa:[2.1.0, 2.2.0)"/>
-				<param name="bundle.3" value="org.eclipse.persistence.asm:[2.1.0, 2.2.0)"/>
-				<param name="bundle.4" value="org.eclipse.persistence.antlr:[2.1.0, 2.2.0)"/>
-			<enablement>
-				<with variable="requestingProjectFacet">
-					<test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jpt.jpa" forcePluginActivation="true"/>
-				</with>
-			</enablement>
+			<param name="container.label" value="EclipseLink 2.1.x"/>
+			<param name="bundle.0" value="javax.persistence:[2.0.0, 2.1.0)"/>
+			<param name="bundle.1" value="org.eclipse.persistence.core:[2.1.0, 2.2.0)"/>
+			<param name="bundle.2" value="org.eclipse.persistence.jpa:[2.1.0, 2.2.0)"/>
+			<param name="bundle.3" value="org.eclipse.persistence.asm:[2.1.0, 2.2.0)"/>
+			<param name="bundle.4" value="org.eclipse.persistence.antlr:[2.1.0, 2.2.0)"/>
+		</provider>
+		
+		<provider
+			id="eclipselink-210-wtp-osgi-bundles-library-provider"
+			extends="jpa-wtp-osgi-bundles-library-provider">
+			<label>EclipseLink 2.1.x</label>
+			<param name="container.label" value="EclipseLink 2.1.x"/>
+			<param name="bundle.0" value="javax.persistence:[2.0.0, 2.1.0)"/>
+			<param name="bundle.1" value="org.eclipse.persistence.core:[2.1.0, 2.2.0)"/>
+			<param name="bundle.2" value="org.eclipse.persistence.jpa:[2.1.0, 2.2.0)"/>
+			<param name="bundle.3" value="org.eclipse.persistence.asm:[2.1.0, 2.2.0)"/>
+			<param name="bundle.4" value="org.eclipse.persistence.antlr:[2.1.0, 2.2.0)"/>
 		</provider>
 		
 	</extension>
@@ -455,12 +602,23 @@
 			</constraint>
 		</project-facet-version>
 		
-		<template id="jpt.jpa.template">
-			<label>%JPA_TEMPLATE_LABEL</label>
+		<template id="jpt.jpa.se.template">
+			<label>%JPA_SE_TEMPLATE_LABEL</label>
+			<fixed facet="jpt.jpa"/>
+			<fixed facet="jst.java"/>
+			<!--
+			<preset id="jpt.jpa.2_0.preset"/>
+			-->
+		</template>
+		
+		<template id="jpt.jpa.ee.template">
+			<label>%JPA_EE_TEMPLATE_LABEL</label>
 			<fixed facet="jpt.jpa"/>
 			<fixed facet="jst.java"/>
 			<fixed facet="jst.utility"/>
+			<!--
 			<preset id="jpt.jpa.2_0.preset"/>
+			-->
 		</template>
 		
 		<action facet="jpt.jpa" type="install" id="jpt.jpa.install">
@@ -497,24 +655,38 @@
 	</extension>
 	
 	
+	<!--
 	<extension
 		point="org.eclipse.wst.common.project.facet.core.presets">
 		
-		<static-preset id="jpt.jpa.1_0.preset">
-			<label>%JPA_1.0_PRESET_LABEL</label>
+		<static-preset id="jpt.jpa.1_0.se.preset">
+			<label>%JPA_1.0_SE_PRESET_LABEL</label>
+			<facet id="jst.java" version="5.0"/>
+			<facet id="jpt.jpa" version="1.0"/>
+		</static-preset>
+		
+		<static-preset id="jpt.jpa.1_0.ee.preset">
+			<label>%JPA_1.0_EE_PRESET_LABEL</label>
 			<facet id="jst.java" version="5.0"/>
 			<facet id="jst.utility" version="1.0"/>
 			<facet id="jpt.jpa" version="1.0"/>
 		</static-preset>
 		
-		<static-preset id="jpt.jpa.2_0.preset">
-			<label>%JPA_2.0_PRESET_LABEL</label>
+		<static-preset id="jpt.jpa.2_0.se.preset">
+			<label>%JPA_2.0_SE_PRESET_LABEL</label>
+			<facet id="jst.java" version="6.0"/>
+			<facet id="jpt.jpa" version="2.0"/>
+		</static-preset>
+		
+		<static-preset id="jpt.jpa.2_0.ee.preset">
+			<label>%JPA_2.0_EE_PRESET_LABEL</label>
 			<facet id="jst.java" version="6.0"/>
 			<facet id="jst.utility" version="1.0"/>
 			<facet id="jpt.jpa" version="2.0"/>
 		</static-preset>
 		
 	</extension>
+	-->
 	
 	
 	<extension 
diff --git a/jpa/plugins/org.eclipse.jpt.core/property_files/jpa_core.properties b/jpa/plugins/org.eclipse.jpt.core/property_files/jpa_core.properties
index 6aed36f..f8ec27c 100644
--- a/jpa/plugins/org.eclipse.jpt.core/property_files/jpa_core.properties
+++ b/jpa/plugins/org.eclipse.jpt.core/property_files/jpa_core.properties
@@ -22,6 +22,7 @@
 VALIDATE_PERSISTENCE_UNIT_NOT_IN_PROJECT=Persistence unit ''{0}'' not defined in project ''{1}''
 VALIDATE_PLATFORM_NOT_SPECIFIED=Platform must be specified
 VALIDATE_PLATFORM_DOES_NOT_SUPPORT_FACET_VERSION=Platform does not support the current JPA facet version
+VALIDATE_LIBRARY_PROVIDER_INVALID=The currently selected library provider is invalid
 VALIDATE_CONNECTION_NOT_SPECIFIED=Connection must be specified
 VALIDATE_CONNECTION_INVALID=Connection profile ''{0}'' does not exist
 VALIDATE_CONNECTION_NOT_CONNECTED=Connection must be active to get data source specific help and validation.
diff --git a/jpa/plugins/org.eclipse.jpt.core/property_files/jpa_validation.properties b/jpa/plugins/org.eclipse.jpt.core/property_files/jpa_validation.properties
index 7e79a62..9f6aa31 100644
--- a/jpa/plugins/org.eclipse.jpt.core/property_files/jpa_validation.properties
+++ b/jpa/plugins/org.eclipse.jpt.core/property_files/jpa_validation.properties
@@ -8,6 +8,7 @@
 #     Oracle - initial API and implementation
 ################################################################################
 
+PROJECT_INVALID_LIBRARY_PROVIDER=The currently selected library provider is invalid.
 PROJECT_NO_CONNECTION=No connection specified for project.  No database-specific validation will be performed.
 PROJECT_INVALID_CONNECTION=Connection \"{0}\" does not exist.  No database-specific validation will be performed.
 PROJECT_INACTIVE_CONNECTION=Connection \"{0}\" is not active.  No validation will be done against the data source.
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/AbstractJpaProject.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/AbstractJpaProject.java
index 27a5fe2..6e45571 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/AbstractJpaProject.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/AbstractJpaProject.java
@@ -11,8 +11,10 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.Vector;
 import org.eclipse.core.resources.IFile;
@@ -39,6 +41,7 @@
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jpt.core.JpaDataSource;
+import org.eclipse.jpt.core.JpaFacet;
 import org.eclipse.jpt.core.JpaFile;
 import org.eclipse.jpt.core.JpaPlatform;
 import org.eclipse.jpt.core.JpaProject;
@@ -46,6 +49,7 @@
 import org.eclipse.jpt.core.JpaResourceModelListener;
 import org.eclipse.jpt.core.JptCorePlugin;
 import org.eclipse.jpt.core.context.JpaRootContextNode;
+import org.eclipse.jpt.core.internal.facet.JpaLibraryProviderConstants;
 import org.eclipse.jpt.core.internal.resource.java.binary.BinaryPersistentTypeCache;
 import org.eclipse.jpt.core.internal.resource.java.source.SourceCompilationUnit;
 import org.eclipse.jpt.core.internal.utility.PlatformTools;
@@ -79,8 +83,13 @@
 import org.eclipse.jpt.utility.internal.iterables.LiveCloneIterable;
 import org.eclipse.jpt.utility.internal.iterables.SubIterableWrapper;
 import org.eclipse.jpt.utility.internal.iterables.TransformationIterable;
+import org.eclipse.jst.common.project.facet.core.libprov.ILibraryProvider;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryProviderFramework;
 import org.eclipse.jst.j2ee.model.internal.validation.ValidationCancelledException;
 import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
 import org.eclipse.wst.validation.internal.provisional.core.IMessage;
 import org.eclipse.wst.validation.internal.provisional.core.IReporter;
 
@@ -1316,9 +1325,33 @@
 		if (reporter.isCancelled()) {
 			throw new ValidationCancelledException();
 		}
-		this.validateConnection(messages);
+		validateLibraryProvider(messages);
+		validateConnection(messages);
 		this.rootContextNode.validate(messages, reporter);
 	}
+	
+	protected void validateLibraryProvider(List<IMessage> messages) {
+		Map<String, Object> enablementVariables = new HashMap<String, Object>();
+		enablementVariables.put(JpaLibraryProviderConstants.EXPR_VAR_JPA_PLATFORM, getJpaPlatform().getId());
+		
+		try {
+			ILibraryProvider libraryProvider = LibraryProviderFramework.getCurrentProvider(getProject(), JpaFacet.FACET);
+			IFacetedProject facetedProject = ProjectFacetsManager.create(getProject());
+			IProjectFacetVersion facetVersion = facetedProject.getInstalledVersion(JpaFacet.FACET);
+			if (! libraryProvider.isEnabledFor(
+					facetedProject, facetVersion, enablementVariables)) {
+				messages.add(
+						DefaultJpaValidationMessages.buildMessage(
+							IMessage.HIGH_SEVERITY,
+							JpaValidationMessages.PROJECT_INVALID_LIBRARY_PROVIDER,
+							this));
+			}
+		}
+		catch (CoreException ce) {
+			// fall through
+			JptCorePlugin.log(ce);
+		}
+	}
 
 	protected void validateConnection(List<IMessage> messages) {
 		String cpName = this.dataSource.getConnectionProfileName();
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/FacetVersionPropertyTester.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/FacetVersionPropertyTester.java
new file mode 100644
index 0000000..714a746
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/FacetVersionPropertyTester.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ *  Copyright (c) 2010  Oracle. All rights reserved.
+ *  This program and the accompanying materials are made available under the
+ *  terms of the Eclipse Public License v1.0, which accompanies this distribution
+ *  and is available at http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *  Contributors: 
+ *  	Oracle - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jpt.core.internal;
+
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.wst.common.project.facet.core.IGroup;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+
+public class FacetVersionPropertyTester
+		extends PropertyTester {
+	
+	public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+		if (! property.equals("group")) { //$NON-NLS-1$
+			return false;
+		}
+		
+		if (! (receiver instanceof IProjectFacetVersion) || ! (expectedValue instanceof String)) {
+			return false;
+		}
+		
+		IGroup group = ProjectFacetsManager.getGroup((String) expectedValue);
+		if (group == null) {
+			return false;
+		}
+		
+		return group.getMembers().contains((IProjectFacetVersion) receiver);
+	}
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JptCoreMessages.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JptCoreMessages.java
index abf49e6..882e010 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JptCoreMessages.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JptCoreMessages.java
@@ -30,6 +30,7 @@
 	public static String VALIDATE_PERSISTENCE_UNIT_NOT_IN_PROJECT;
 	public static String VALIDATE_PLATFORM_NOT_SPECIFIED;
 	public static String VALIDATE_PLATFORM_DOES_NOT_SUPPORT_FACET_VERSION;
+	public static String VALIDATE_LIBRARY_PROVIDER_INVALID;
 	public static String VALIDATE_CONNECTION_NOT_SPECIFIED;
 	public static String VALIDATE_CONNECTION_INVALID;
 	public static String VALIDATE_CONNECTION_NOT_CONNECTED;
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaEEProjectCreationDataModelProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaEEProjectCreationDataModelProvider.java
new file mode 100644
index 0000000..4a1c211
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaEEProjectCreationDataModelProvider.java
@@ -0,0 +1,231 @@
+/*******************************************************************************
+ *  Copyright (c) 2010  Oracle. All rights reserved.
+ *  This program and the accompanying materials are made available under the
+ *  terms of the Eclipse Public License v1.0, which accompanies this distribution
+ *  and is available at http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *  Contributors: 
+ *  	Oracle - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jpt.core.internal.facet;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
+import org.eclipse.jpt.core.JpaFacet;
+import org.eclipse.jst.common.project.facet.core.JavaFacet;
+import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin;
+import org.eclipse.jst.j2ee.project.facet.IJ2EEFacetConstants;
+import org.eclipse.jst.j2ee.project.facet.IJ2EEModuleFacetInstallDataModelProperties;
+import org.eclipse.wst.common.frameworks.datamodel.DataModelEvent;
+import org.eclipse.wst.common.frameworks.datamodel.DataModelPropertyDescriptor;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModelListener;
+import org.eclipse.wst.common.frameworks.internal.operations.ProjectCreationDataModelProviderNew;
+import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonMessages;
+import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectWorkingCopy;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.common.project.facet.core.runtime.IRuntime;
+
+public class JpaEEProjectCreationDataModelProvider
+		extends JpaProjectCreationDataModelProvider {
+	
+	public JpaEEProjectCreationDataModelProvider() {
+		super();
+	}
+	
+	
+	@Override
+	public void init() {
+		super.init();
+		
+		Collection<IProjectFacet> requiredFacets = new ArrayList<IProjectFacet>();
+		requiredFacets.add(JavaFacet.FACET);
+		requiredFacets.add(JpaFacet.FACET);
+		requiredFacets.add(IJ2EEFacetConstants.UTILITY_FACET);
+		setProperty(REQUIRED_FACETS_COLLECTION, requiredFacets);
+		
+		FacetDataModelMap map = (FacetDataModelMap) getProperty(FACET_DM_MAP);
+		
+		IDataModel utilFacet = map.getFacetDataModel(IJ2EEFacetConstants.UTILITY_FACET.getId());
+		utilFacet.addListener(
+			new IDataModelListener() {
+				public void propertyChanged(DataModelEvent event) {
+					if (IJ2EEModuleFacetInstallDataModelProperties.EAR_PROJECT_NAME.equals(event.getPropertyName())) {
+						if (isPropertySet(EAR_PROJECT_NAME)) {
+							setProperty(EAR_PROJECT_NAME, event.getProperty());
+						}
+						else {
+							model.notifyPropertyChange(EAR_PROJECT_NAME, IDataModel.DEFAULT_CHG);
+						}
+					}
+					else if (IJ2EEModuleFacetInstallDataModelProperties.ADD_TO_EAR.equals(event.getPropertyName())) {
+						setProperty(ADD_TO_EAR, event.getProperty());
+					}
+				}
+			});
+	}
+	
+	@Override
+	public boolean isPropertyEnabled(String propertyName) {
+		if (FACET_RUNTIME.equals(propertyName)) {
+			if (getBooleanProperty(ADD_TO_EAR)) {
+				IStatus status = validateEAR(model.getStringProperty(EAR_PROJECT_NAME));
+				if (status.isOK()) {
+					IProject earProject = ProjectUtilities.getProject(getStringProperty(EAR_PROJECT_NAME));
+					if (earProject != null) {
+						IFacetedProject facetdEarProject;
+						try {
+							facetdEarProject = ProjectFacetsManager.create(earProject);
+							if (facetdEarProject != null) {
+								return false;
+							}
+						} catch (CoreException e) {
+							J2EEPlugin.logError(e);
+						}
+					}
+				}
+			}
+			return true;
+		}
+		return super.isPropertyEnabled(propertyName);
+	}
+	
+	@Override
+	public Object getDefaultProperty(String propertyName) {
+		if (EAR_PROJECT_NAME.equals(propertyName)) {
+			IDataModel utilityFacetModel = getUtilityFacetModel();
+			if (utilityFacetModel !=null) {
+				return utilityFacetModel.getProperty(IJ2EEModuleFacetInstallDataModelProperties.EAR_PROJECT_NAME);
+			}
+		}
+		return super.getDefaultProperty(propertyName);
+	}
+	
+	@Override
+	public DataModelPropertyDescriptor[] getValidPropertyDescriptors(String propertyName) {
+		if (FACET_RUNTIME.equals(propertyName) && getBooleanProperty(ADD_TO_EAR)) {
+			DataModelPropertyDescriptor[] descriptors = super.getValidPropertyDescriptors(propertyName);
+			List list = new ArrayList();
+			for (int i = 0; i < descriptors.length; i++) {
+				IRuntime rt = (IRuntime) descriptors[i].getPropertyValue();
+				if (rt == null || rt.supports(IJ2EEFacetConstants.ENTERPRISE_APPLICATION_FACET)) {
+					list.add(descriptors[i]);
+				}
+			}
+			descriptors = new DataModelPropertyDescriptor[list.size()];
+			for (int i = 0; i < descriptors.length; i++) {
+				descriptors[i] = (DataModelPropertyDescriptor) list.get(i);
+			}
+			return descriptors;
+		}
+		return super.getValidPropertyDescriptors(propertyName);
+	}
+	
+	@Override
+	public boolean propertySet(String propertyName, Object propertyValue) {
+		if (EAR_PROJECT_NAME.equals(propertyName) || ADD_TO_EAR.equals(propertyName)) {
+			IDataModel utilityFacetModel = getUtilityFacetModel();
+			if (null != utilityFacetModel){
+				if (EAR_PROJECT_NAME.equals(propertyName)) {
+					utilityFacetModel.setProperty(IJ2EEModuleFacetInstallDataModelProperties.EAR_PROJECT_NAME, propertyValue);
+				}
+				else {
+					utilityFacetModel.setProperty(IJ2EEModuleFacetInstallDataModelProperties.ADD_TO_EAR, propertyValue);	
+				}
+			}
+			if (getBooleanProperty(ADD_TO_EAR)) {
+				IStatus status = validateEAR(model.getStringProperty(EAR_PROJECT_NAME));
+				if (status.isOK()) {
+					IProject earProject = ProjectUtilities.getProject(getStringProperty(EAR_PROJECT_NAME));
+					if (earProject != null) {
+						IFacetedProject facetedEarProject;
+						try {
+							facetedEarProject = ProjectFacetsManager.create(earProject);
+							if (facetedEarProject != null) {
+								setProperty(FACET_RUNTIME, facetedEarProject.getPrimaryRuntime());
+							}
+						}
+						catch (CoreException e) {
+							J2EEPlugin.logError(e);
+						}
+					}
+				}
+			}
+			if (ADD_TO_EAR.equals(propertyName)) {
+				model.notifyPropertyChange(FACET_RUNTIME, IDataModel.VALID_VALUES_CHG);
+			}
+			model.notifyPropertyChange(FACET_RUNTIME, IDataModel.ENABLE_CHG);
+		}
+		return super.propertySet(propertyName, propertyValue);
+	}
+	
+	@Override
+	public IStatus validate(String propertyName) {
+		IStatus status = super.validate(propertyName);
+		if (status == null) {
+			status = Status.OK_STATUS;
+		}
+		if (status.isOK()) {
+			if (ADD_TO_EAR.equals(propertyName) || EAR_PROJECT_NAME.equals(propertyName) || FACET_PROJECT_NAME.equals(propertyName)) {
+				if (model.getBooleanProperty(ADD_TO_EAR)) {
+					status = validateEAR(model.getStringProperty(EAR_PROJECT_NAME));
+					if (status.isOK()) {
+						if (getStringProperty(FACET_PROJECT_NAME).equals(getStringProperty(EAR_PROJECT_NAME))) {
+							String errorMessage = WTPCommonPlugin.getResourceString(WTPCommonMessages.SAME_MODULE_AND_EAR_NAME, new Object[]{getStringProperty(EAR_PROJECT_NAME)});
+							status = WTPCommonPlugin.createErrorStatus(errorMessage);
+						}
+					}
+				}
+			}
+		}
+		return status;
+	}
+
+	protected IStatus validateEAR(String earName) {
+		if (earName.indexOf("#") != -1 || earName.indexOf("/") != -1) { //$NON-NLS-1$ //$NON-NLS-2$
+			String errorMessage = WTPCommonPlugin.getResourceString(WTPCommonMessages.ERR_INVALID_CHARS);
+			return WTPCommonPlugin.createErrorStatus(errorMessage);
+		} 
+		else if (earName.equals("")) { //$NON-NLS-1$
+			String errorMessage = WTPCommonPlugin.getResourceString(WTPCommonMessages.ERR_EMPTY_MODULE_NAME);
+			return WTPCommonPlugin.createErrorStatus(errorMessage);
+		}
+		
+		IStatus status = ProjectCreationDataModelProviderNew.validateProjectName(earName);
+		//check for the deleted case, the project is deleted from the workspace but still exists in the
+		//file system.
+		if (status.isOK()) {
+			IProject earProject = ProjectUtilities.getProject(getStringProperty(EAR_PROJECT_NAME));
+			if (! earProject.exists()) {
+				IPath path = ResourcesPlugin.getWorkspace().getRoot().getLocation();
+				path = path.append(earName);
+				status = ProjectCreationDataModelProviderNew.validateExisting(earName, path.toString());
+			}
+		}
+		return status;
+	}
+	
+	protected IDataModel getUtilityFacetModel() {
+		final IFacetedProjectWorkingCopy fpjwc
+				= (IFacetedProjectWorkingCopy) this.model.getProperty(FACETED_PROJECT_WORKING_COPY);
+		IProjectFacet utilityFacet = IJ2EEFacetConstants.UTILITY_FACET;
+		
+		if (fpjwc.hasProjectFacet(utilityFacet)) {
+			final IFacetedProject.Action action = fpjwc.getProjectFacetAction(utilityFacet);
+			return (IDataModel) action.getConfig();
+		}
+		
+		return null;
+	}
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaProjectCreationDataModelProperties.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaProjectCreationDataModelProperties.java
new file mode 100644
index 0000000..4b287e8
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaProjectCreationDataModelProperties.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ *  Copyright (c) 2010  Oracle. All rights reserved.
+ *  This program and the accompanying materials are made available under the
+ *  terms of the Eclipse Public License v1.0, which accompanies this distribution
+ *  and is available at http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *  Contributors: 
+ *  	Oracle - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jpt.core.internal.facet;
+
+import org.eclipse.jst.j2ee.project.facet.IJ2EEFacetProjectCreationDataModelProperties;
+
+public interface JpaProjectCreationDataModelProperties
+		extends IJ2EEFacetProjectCreationDataModelProperties {
+	
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaProjectCreationDataModelProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaProjectCreationDataModelProvider.java
new file mode 100644
index 0000000..cd97f1f
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaProjectCreationDataModelProvider.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ *  Copyright (c) 2010  Oracle. All rights reserved.
+ *  This program and the accompanying materials are made available under the
+ *  terms of the Eclipse Public License v1.0, which accompanies this distribution
+ *  and is available at http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *  Contributors: 
+ *  	Oracle - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jpt.core.internal.facet;
+
+import java.util.Set;
+import org.eclipse.wst.common.componentcore.datamodel.FacetProjectCreationDataModelProvider;
+
+public abstract class JpaProjectCreationDataModelProvider
+		extends FacetProjectCreationDataModelProvider 
+		implements JpaProjectCreationDataModelProperties {
+	
+	
+	protected JpaProjectCreationDataModelProvider() {
+		super();
+	}
+	
+	
+	@Override
+	public Set getPropertyNames() {
+		Set names = super.getPropertyNames();
+		names.add(EAR_PROJECT_NAME);
+		names.add(ADD_TO_EAR);
+		return names;
+	}
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaSEProjectCreationDataModelProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaSEProjectCreationDataModelProvider.java
new file mode 100644
index 0000000..b6562c6
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaSEProjectCreationDataModelProvider.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ *  Copyright (c) 2010  Oracle. All rights reserved.
+ *  This program and the accompanying materials are made available under the
+ *  terms of the Eclipse Public License v1.0, which accompanies this distribution
+ *  and is available at http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *  Contributors: 
+ *  	Oracle - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jpt.core.internal.facet;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import org.eclipse.jpt.core.JpaFacet;
+import org.eclipse.jst.common.project.facet.core.JavaFacet;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+
+public class JpaSEProjectCreationDataModelProvider
+		extends JpaProjectCreationDataModelProvider {
+	
+	public JpaSEProjectCreationDataModelProvider() {
+		super();
+	}
+	
+	
+	@Override
+	public void init() {
+		super.init();
+		
+		Collection<IProjectFacet> requiredFacets = new ArrayList<IProjectFacet>();
+		requiredFacets.add(ProjectFacetsManager.getProjectFacet(JavaFacet.ID));
+		requiredFacets.add(ProjectFacetsManager.getProjectFacet(JpaFacet.ID));
+		setProperty(REQUIRED_FACETS_COLLECTION, requiredFacets);
+	}
+	
+	@Override
+	public boolean isPropertyEnabled(String propertyName) {
+		if (ADD_TO_EAR.equals(propertyName) || EAR_PROJECT_NAME.equals(propertyName)) {
+			return false;
+		}
+		return super.isPropertyEnabled(propertyName);
+	}
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/validation/JpaValidationMessages.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/validation/JpaValidationMessages.java
index d559a91..a2bf501 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/validation/JpaValidationMessages.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/validation/JpaValidationMessages.java
@@ -14,6 +14,7 @@
 
 	public static final String BUNDLE_NAME = "jpa_validation";
 	
+	public static final String PROJECT_INVALID_LIBRARY_PROVIDER = "PROJECT_INVALID_LIBRARY_PROVIDER";
 	public static final String PROJECT_NO_CONNECTION = "PROJECT_NO_CONNECTION";
 	public static final String PROJECT_INVALID_CONNECTION = "PROJECT_INVALID_CONNECTION";
 	public static final String PROJECT_INACTIVE_CONNECTION = "PROJECT_INACTIVE_CONNECTION";
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/plugin.xml b/jpa/plugins/org.eclipse.jpt.eclipselink.core/plugin.xml
index 519008b..80de1d8 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/plugin.xml
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/plugin.xml
@@ -98,85 +98,137 @@
 	<extension 
 		point="org.eclipse.jst.common.project.facet.core.libraryProviders">
 		
-		<provider id="jpa-eclipselink1_0-user-library-provider" extends="wtp-user-library-provider">
+		<provider 
+			id="jpa-eclipselink1_0-user-library-provider" 
+			extends="jpa-user-library-provider">
 			<param name="validator" value="org.eclipse.jpt.eclipselink.core.internal.utility.EclipseLinkLibraryValidator"/>
 			<param name="validator.param.0" value="version-range:[1.0, 3.0)"/>
 			<param name="validator.param.1" value="key-class:javax.persistence.Entity"/>
 			<enablement>
-				<and>
-					<with variable="requestingProjectFacet">
-						<test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jpt.jpa" forcePluginActivation="true"/>
-					</with>
-					<with variable="jpaPlatform">
-						<equals value="org.eclipse.eclipselink.platform"/>
-					</with>
-				</and>
+				<with variable="jpaPlatform">
+					<equals value="org.eclipse.eclipselink.platform"/>
+				</with>
 			</enablement>
 		</provider>
 		
-		<provider id="jpa-eclipselink1_1-user-library-provider" extends="wtp-user-library-provider">
+		<provider 
+			id="jpa-eclipselink1_0-wtp-user-library-provider" 
+			extends="jpa-wtp-user-library-provider">
+			<param name="validator" value="org.eclipse.jpt.eclipselink.core.internal.utility.EclipseLinkLibraryValidator"/>
+			<param name="validator.param.0" value="version-range:[1.0, 3.0)"/>
+			<param name="validator.param.1" value="key-class:javax.persistence.Entity"/>
+			<enablement>
+				<with variable="jpaPlatform">
+					<equals value="org.eclipse.eclipselink.platform"/>
+				</with>
+			</enablement>
+		</provider>
+		
+		<provider 
+			id="jpa-eclipselink1_1-user-library-provider" 
+			extends="jpa-user-library-provider">
 			<param name="validator" value="org.eclipse.jpt.eclipselink.core.internal.utility.EclipseLinkLibraryValidator"/>
 			<param name="validator.param.0" value="version-range:[1.1, 3.0)"/>
 			<param name="validator.param.1" value="key-class:javax.persistence.Entity"/>
 			<enablement>
-				<and>
-					<with variable="requestingProjectFacet">
-						<test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jpt.jpa" forcePluginActivation="true"/>
-					</with>
-					<with variable="jpaPlatform">
-						<equals value="eclipselink1_1"/>
-					</with>
-				</and>
+				<with variable="jpaPlatform">
+					<equals value="eclipselink1_1"/>
+				</with>
 			</enablement>
 		</provider>
 		
-		<provider id="jpa-eclipselink1_2-user-library-provider" extends="wtp-user-library-provider">
+		<provider 
+			id="jpa-eclipselink1_1-wtp-user-library-provider" 
+			extends="jpa-wtp-user-library-provider">
+			<param name="validator" value="org.eclipse.jpt.eclipselink.core.internal.utility.EclipseLinkLibraryValidator"/>
+			<param name="validator.param.0" value="version-range:[1.1, 3.0)"/>
+			<param name="validator.param.1" value="key-class:javax.persistence.Entity"/>
+			<enablement>
+				<with variable="jpaPlatform">
+					<equals value="eclipselink1_1"/>
+				</with>
+			</enablement>
+		</provider>
+		
+		<provider 
+			id="jpa-eclipselink1_2-user-library-provider" 
+			extends="jpa-user-library-provider">
 			<param name="validator" value="org.eclipse.jpt.eclipselink.core.internal.utility.EclipseLinkLibraryValidator"/>
 			<param name="validator.param.0" value="version-range:[1.2, 3.0)"/>
 			<param name="validator.param.1" value="key-class:javax.persistence.Entity"/>
 			<enablement>
-				<and>
-					<with variable="requestingProjectFacet">
-						<test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jpt.jpa" forcePluginActivation="true"/>
-					</with>
-					<with variable="jpaPlatform">
-						<equals value="eclipselink1_2"/>
-					</with>
-				</and>
+				<with variable="jpaPlatform">
+					<equals value="eclipselink1_2"/>
+				</with>
 			</enablement>
 		</provider>
 		
-		<provider id="eclipselink2_0-user-library-provider" extends="wtp-user-library-provider">
+		<provider 
+			id="jpa-eclipselink1_2-wtp-user-library-provider" 
+			extends="jpa-wtp-user-library-provider">
+			<param name="validator" value="org.eclipse.jpt.eclipselink.core.internal.utility.EclipseLinkLibraryValidator"/>
+			<param name="validator.param.0" value="version-range:[1.2, 3.0)"/>
+			<param name="validator.param.1" value="key-class:javax.persistence.Entity"/>
+			<enablement>
+				<with variable="jpaPlatform">
+					<equals value="eclipselink1_2"/>
+				</with>
+			</enablement>
+		</provider>
+		
+		<provider 
+			id="eclipselink2_0-user-library-provider" 
+			extends="jpa-user-library-provider">
 			<param name="validator" value="org.eclipse.jpt.eclipselink.core.internal.utility.EclipseLinkLibraryValidator"/>
 			<param name="validator.param.0" value="version-range:[2.0, 3.0)"/>
 			<param name="validator.param.1" value="key-class:javax.persistence.Entity"/>
 			<param name="validator.param.2" value="key-class:javax.persistence.ElementCollection"/>
 			<enablement>
-				<and>
-					<with variable="requestingProjectFacet">
-						<test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jpt.jpa" forcePluginActivation="true"/>
-					</with>
-					<with variable="jpaPlatform">
-						<equals value="eclipselink2_0"/>
-					</with>
-				</and>
+				<with variable="jpaPlatform">
+					<equals value="eclipselink2_0"/>
+				</with>
 			</enablement>
 		</provider>
 		
-		<provider id="jpa-eclipselink2_1-user-library-provider" extends="wtp-user-library-provider">
+		<provider 
+			id="eclipselink2_0-wtp-user-library-provider" 
+			extends="jpa-wtp-user-library-provider">
+			<param name="validator" value="org.eclipse.jpt.eclipselink.core.internal.utility.EclipseLinkLibraryValidator"/>
+			<param name="validator.param.0" value="version-range:[2.0, 3.0)"/>
+			<param name="validator.param.1" value="key-class:javax.persistence.Entity"/>
+			<param name="validator.param.2" value="key-class:javax.persistence.ElementCollection"/>
+			<enablement>
+				<with variable="jpaPlatform">
+					<equals value="eclipselink2_0"/>
+				</with>
+			</enablement>
+		</provider>
+		
+		<provider 
+			id="jpa-eclipselink2_1-user-library-provider" 
+			extends="jpa-user-library-provider">
 			<param name="validator" value="org.eclipse.jpt.eclipselink.core.internal.utility.EclipseLinkLibraryValidator"/>
 			<param name="validator.param.0" value="version-range:[2.1, 3.0)"/>
 			<param name="validator.param.1" value="key-class:javax.persistence.Entity"/>
 			<param name="validator.param.2" value="key-class:javax.persistence.ElementCollection"/>
 			<enablement>
-				<and>
-					<with variable="requestingProjectFacet">
-						<test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jpt.jpa" forcePluginActivation="true"/>
-					</with>
-					<with variable="jpaPlatform">
-						<equals value="eclipselink2_1"/>
-					</with>
-				</and>
+				<with variable="jpaPlatform">
+					<equals value="eclipselink2_1"/>
+				</with>
+			</enablement>
+		</provider>
+		
+		<provider 
+			id="jpa-eclipselink2_1-wtp-user-library-provider" 
+			extends="jpa-wtp-user-library-provider">
+			<param name="validator" value="org.eclipse.jpt.eclipselink.core.internal.utility.EclipseLinkLibraryValidator"/>
+			<param name="validator.param.0" value="version-range:[2.1, 3.0)"/>
+			<param name="validator.param.1" value="key-class:javax.persistence.Entity"/>
+			<param name="validator.param.2" value="key-class:javax.persistence.ElementCollection"/>
+			<enablement>
+				<with variable="jpaPlatform">
+					<equals value="eclipselink2_1"/>
+				</with>
 			</enablement>
 		</provider>
 		
diff --git a/jpa/plugins/org.eclipse.jpt.ui/plugin.properties b/jpa/plugins/org.eclipse.jpt.ui/plugin.properties
index 3140500..edceb20 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/plugin.properties
+++ b/jpa/plugins/org.eclipse.jpt.ui/plugin.properties
@@ -29,11 +29,13 @@
 jpaWizardCategoryName = JPA
 newJpaProjectWizardName = JPA Project
 newJpaProjectWizardDesc = Create a JPA project
-newJpaEntityWizardName = Entity
+newJpaEEProjectWizardName = JPA EE Project
+newJpaEEProjectWizardDesc = Create a JPA EE project
+newJpaEntityWizardName = JPA Entity
 newJpaEntityWizardDesc = Create a JPA Entity 
-newJpaMappingFileWizardName = Mapping File
-newJpaMappingFileWizardDesc = Create a JPA Mapping File
-newJpaEntityFromTableWizardName = Entities from Tables
+newJpaMappingFileWizardName = JPA ORM Mapping File
+newJpaMappingFileWizardDesc = Create a JPA ORM Mapping File
+newJpaEntityFromTableWizardName = JPA Entities from Tables
 newJpaEntityFromTableWizardDesc = Create JPA Entities from database tables 
 
 upgradeToLatestVersion = Upgrade Document Version
diff --git a/jpa/plugins/org.eclipse.jpt.ui/plugin.xml b/jpa/plugins/org.eclipse.jpt.ui/plugin.xml
index eb74b4e..9409f86 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/plugin.xml
+++ b/jpa/plugins/org.eclipse.jpt.ui/plugin.xml
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui.properties b/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui.properties
index e332ed5..09515b6 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui.properties
+++ b/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui.properties
@@ -127,7 +127,8 @@
 MappingFileWizardPage_accessLabel_sourceFolderDialogTitle=Source Folder Selection
 MappingFileWizardPage_accessLabel_sourceFolderDialogDesc=Choose a source folder:
 
-NewJpaProjectWizard_title=New JPA Project
+JpaSEProjectWizard_title=New JPA Project
+JpaEEProjectWizard_title=New JPA EE Project
 NewJpaProjectWizard_firstPage_title=JPA Project
 NewJpaProjectWizard_firstPage_description=Configure JPA project settings.
 
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/JptUiMessages.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/JptUiMessages.java
index d5b09ae..3751127 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/JptUiMessages.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/JptUiMessages.java
@@ -110,9 +110,10 @@
 	public static String MappingFileWizardPage_incorrectSourceFolderError;
 	public static String MappingFileWizardPage_accessLabel_sourceFolderDialogTitle;
 	public static String MappingFileWizardPage_accessLabel_sourceFolderDialogDesc;
+	public static String JpaSEProjectWizard_title;
+	public static String JpaEEProjectWizard_title;
 	public static String NewJpaProjectWizard_firstPage_description;
 	public static String NewJpaProjectWizard_firstPage_title;
-	public static String NewJpaProjectWizard_title;
 	public static String OrmItemLabelProviderFactory_entityMappingsLabel;
 	public static String OverwriteConfirmerDialog_text;
 	public static String OverwriteConfirmerDialog_title;
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/properties/JpaProjectPropertiesPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/properties/JpaProjectPropertiesPage.java
index c68f7c8..58b9408 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/properties/JpaProjectPropertiesPage.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/properties/JpaProjectPropertiesPage.java
@@ -894,8 +894,9 @@
 		// user is unable to unset the platform, so no validation necessary
 
 		/* library provider */
-		IStatus lpStatus = super.performValidation();
+		IStatus lpStatus = validateLibraryProvider();
 		statuses.get(Integer.valueOf(lpStatus.getSeverity())).add(lpStatus);
+		
 
 		/* connection */
 		ConnectionProfile connectionProfile = this.getConnectionProfile();
@@ -957,6 +958,18 @@
 			return statuses.get(OK_STATUS).get(0);
 		}
 	}
+	
+	private IStatus validateLibraryProvider() {
+		Map<String, Object> enablementVariables = new HashMap<String, Object>();
+		enablementVariables.put(JpaLibraryProviderConstants.EXPR_VAR_JPA_PLATFORM, this.platformIdModel.getValue()); //$NON-NLS-1$
+		
+		if (! getLibraryInstallDelegate().getLibraryProvider().isEnabledFor(
+				getFacetedProject(), getProjectFacetVersion(), enablementVariables)) {
+			return buildErrorStatus(JptCoreMessages.VALIDATE_LIBRARY_PROVIDER_INVALID);
+		}
+		
+		return super.performValidation();
+	}
 
 	private IStatus buildInfoStatus(String message) {
 		return this.buildStatus(IStatus.INFO, message);
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/JpaEEProjectWizard.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/JpaEEProjectWizard.java
new file mode 100644
index 0000000..3c70cef
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/JpaEEProjectWizard.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ *  Copyright (c) 2010  Oracle. All rights reserved.
+ *  This program and the accompanying materials are made available under the
+ *  terms of the Eclipse Public License v1.0, which accompanies this distribution
+ *  and is available at http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *  Contributors: 
+ *  	Oracle - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jpt.ui.internal.wizards;
+
+import org.eclipse.jpt.core.internal.facet.JpaEEProjectCreationDataModelProvider;
+import org.eclipse.jpt.ui.internal.JptUiMessages;
+import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectTemplate;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+
+public class JpaEEProjectWizard extends JpaProjectWizard {
+	
+	public JpaEEProjectWizard() {
+		super();
+		setWindowTitle(JptUiMessages.JpaEEProjectWizard_title);
+	}
+
+	public JpaEEProjectWizard(IDataModel model) {
+		super(model);
+		setWindowTitle(JptUiMessages.JpaEEProjectWizard_title);
+	}
+	
+	
+	@Override
+	protected IDataModel createDataModel() {
+		return DataModelFactory.createDataModel(new JpaEEProjectCreationDataModelProvider());
+	}
+	
+	
+	@Override
+	protected IFacetedProjectTemplate getTemplate() {
+		return ProjectFacetsManager.getTemplate("jpt.jpa.ee.template");
+	}
+}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/JpaProjectWizard.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/JpaProjectWizard.java
new file mode 100644
index 0000000..50dc2cb
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/JpaProjectWizard.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ *  Copyright (c) 2010  Oracle. All rights reserved.
+ *  This program and the accompanying materials are made available under the
+ *  terms of the Eclipse Public License v1.0, which accompanies this distribution
+ *  and is available at http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *  Contributors: 
+ *  	Oracle - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jpt.ui.internal.wizards;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jpt.ui.JptUiPlugin;
+import org.eclipse.jpt.ui.internal.JptUiIcons;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+import org.eclipse.wst.web.ui.internal.wizards.NewProjectDataModelFacetWizard;
+
+public abstract class JpaProjectWizard
+		extends NewProjectDataModelFacetWizard {
+	
+	protected JpaProjectWizard() {
+		super();
+	}
+	
+	protected JpaProjectWizard(IDataModel dataModel) {
+		super(dataModel);
+	}
+	
+	
+	@Override
+	protected ImageDescriptor getDefaultPageImageDescriptor() {
+		return JptUiPlugin.getImageDescriptor(JptUiIcons.JPA_WIZ_BANNER);
+	}
+	
+	@Override
+	protected IWizardPage createFirstPage() {
+		return new JpaProjectWizardFirstPage(model, "first.page"); //$NON-NLS-1$ 
+	}
+	
+	@Override
+	protected String getFinalPerspectiveID() {
+		return "org.eclipse.jpt.ui.jpaPerspective";
+	}
+}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/JpaProjectWizardFirstPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/JpaProjectWizardFirstPage.java
new file mode 100644
index 0000000..16cbdac
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/JpaProjectWizardFirstPage.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ *  Copyright (c) 2006, 2010 Oracle. All rights reserved. This
+ *  program and the accompanying materials are made available under the terms of
+ *  the Eclipse Public License v1.0 which accompanies this distribution, and is
+ *  available at http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *  Contributors: Oracle. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jpt.ui.internal.wizards;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import org.eclipse.jpt.core.JpaFacet;
+import org.eclipse.jpt.core.internal.facet.JpaProjectCreationDataModelProperties;
+import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
+import org.eclipse.jpt.ui.internal.JptUiMessages;
+import org.eclipse.jst.j2ee.project.facet.IJ2EEFacetConstants;
+import org.eclipse.jst.j2ee.ui.project.facet.EarSelectionPanel;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectWorkingCopy;
+import org.eclipse.wst.web.ui.internal.wizards.DataModelFacetCreationWizardPage;
+
+public class JpaProjectWizardFirstPage
+		extends DataModelFacetCreationWizardPage  {
+	
+	protected EarSelectionPanel earComposite;
+	
+	
+	public JpaProjectWizardFirstPage(IDataModel dataModel, String pageName) {
+		super(dataModel, pageName);
+		setTitle(JptUiMessages.NewJpaProjectWizard_firstPage_title);
+		setDescription(JptUiMessages.NewJpaProjectWizard_firstPage_description);
+		setInfopopID(JpaHelpContextIds.NEW_JPA_PROJECT);
+	}
+	
+	
+	@Override
+	protected Composite createTopLevelComposite(Composite parent) {
+		final Composite top = super.createTopLevelComposite(parent);
+		if (shouldAddEARComposite()) {
+			createEarComposite(top);
+			createWorkingSetGroupPanel(top, new String[] { RESOURCE_WORKING_SET, JAVA_WORKING_SET });
+		}
+		return top;
+	}
+	
+	private void createEarComposite(Composite top) {
+		if (hasUtilityFacet()) {
+			final IFacetedProject.Action action 
+					= getFacetedProjectWorkingCopy().getProjectFacetAction(IJ2EEFacetConstants.UTILITY_FACET);
+			this.earComposite = new EarSelectionPanel( (IDataModel) action.getConfig(), top);
+		}
+	}
+	
+	@Override
+	public boolean internalLaunchNewRuntimeWizard(Shell shell, IDataModel model) {
+		if (hasUtilityFacet()) {
+			return launchNewRuntimeWizard(shell, model, IJ2EEFacetConstants.UTILITY);
+		}
+		else {
+			return launchNewRuntimeWizard(shell, model);
+		}
+	}
+	
+	@Override
+	protected String getModuleTypeID() {
+		return JpaFacet.ID;
+	}
+	
+	@Override
+	public void dispose() {
+		super.dispose();
+		if (this.earComposite != null) {
+			earComposite.dispose();
+		}
+	}
+	
+    @Override
+	public void storeDefaultSettings() {
+    	super.storeDefaultSettings();
+    	// TODO
+//    	IDialogSettings settings = getDialogSettings();
+//    	if (settings != null) {
+//    		FacetDataModelMap map = (FacetDataModelMap)model.getProperty(IFacetProjectCreationDataModelProperties.FACET_DM_MAP);
+//    		String facetID = getModuleFacetID();
+//    		IDataModel j2eeModel = map.getFacetDataModel(facetID);
+//    		if(j2eeModel.getBooleanProperty(IJ2EEModuleFacetInstallDataModelProperties.ADD_TO_EAR)){
+//    			String lastEARName = j2eeModel.getStringProperty(IJ2EEModuleFacetInstallDataModelProperties.EAR_PROJECT_NAME);
+//    			settings.put(STORE_LABEL, lastEARName);
+//    		}
+//    	}
+    }
+    
+    @Override
+    public void restoreDefaultSettings() {
+    	super.restoreDefaultSettings();
+        // TODO
+//    	IDialogSettings settings = getDialogSettings();
+//    	if (settings != null) {
+//    		String lastEARName = settings.get(STORE_LABEL);
+//    		if (lastEARName != null){
+//    			FacetDataModelMap map = (FacetDataModelMap)model.getProperty(IFacetProjectCreationDataModelProperties.FACET_DM_MAP);
+//    			String facetID = getModuleFacetID();
+//    			IDataModel j2eeModel = map.getFacetDataModel(facetID);
+//    			j2eeModel.setProperty(IJ2EEModuleFacetInstallDataModelProperties.LAST_EAR_NAME, lastEARName);
+//    		}
+//    	}
+    }
+    
+//    @Override
+//    protected IDialogSettings getDialogSettings() {
+//    	return J2EEUIPlugin.getDefault().getDialogSettings();
+//    }
+    
+	@Override
+	protected String[] getValidationPropertyNames() {
+		String[] superProperties = super.getValidationPropertyNames();
+		List list = Arrays.asList(superProperties);
+		ArrayList<String> arrayList = new ArrayList<String>();
+		arrayList.addAll(list);
+		arrayList.add(JpaProjectCreationDataModelProperties.EAR_PROJECT_NAME);
+		arrayList.add(JpaProjectCreationDataModelProperties.ADD_TO_EAR );
+		return arrayList.toArray( new String[0] );
+	}
+	
+	protected boolean shouldAddEARComposite() {
+		return hasUtilityFacet();
+	}
+	
+	protected boolean hasUtilityFacet() {
+		return getFacetedProjectWorkingCopy().hasProjectFacet(IJ2EEFacetConstants.UTILITY_FACET);
+	}
+	
+	protected IFacetedProjectWorkingCopy getFacetedProjectWorkingCopy() {
+		return (IFacetedProjectWorkingCopy) this.model.getProperty(FACETED_PROJECT_WORKING_COPY);
+	}
+}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/JpaSEProjectWizard.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/JpaSEProjectWizard.java
new file mode 100644
index 0000000..67908b0
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/JpaSEProjectWizard.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ *  Copyright (c) 2006, 2010 Oracle. All rights reserved. This
+ *  program and the accompanying materials are made available under the terms of
+ *  the Eclipse Public License v1.0 which accompanies this distribution, and is
+ *  available at http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *  Contributors: Oracle. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jpt.ui.internal.wizards;
+
+import org.eclipse.jpt.core.internal.facet.JpaSEProjectCreationDataModelProvider;
+import org.eclipse.jpt.ui.internal.JptUiMessages;
+import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectTemplate;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+
+public class JpaSEProjectWizard 
+		extends JpaProjectWizard {
+	
+	public JpaSEProjectWizard() {
+		super();
+		setWindowTitle(JptUiMessages.JpaSEProjectWizard_title);
+	}
+
+	public JpaSEProjectWizard(IDataModel model) {
+		super(model);
+		setWindowTitle(JptUiMessages.JpaSEProjectWizard_title);
+	}
+	
+	
+	@Override
+	protected IDataModel createDataModel() {
+		return DataModelFactory.createDataModel(new JpaSEProjectCreationDataModelProvider());
+	}
+	
+	
+	@Override
+	protected IFacetedProjectTemplate getTemplate() {
+		return ProjectFacetsManager.getTemplate("jpt.jpa.se.template");
+	}
+}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/NewJpaProjectFirstPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/NewJpaProjectFirstPage.java
deleted file mode 100644
index 437a2c4..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/NewJpaProjectFirstPage.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2006, 2008 Oracle. All rights reserved. This
- *  program and the accompanying materials are made available under the terms of
- *  the Eclipse Public License v1.0 which accompanies this distribution, and is
- *  available at http://www.eclipse.org/legal/epl-v10.html
- *  
- *  Contributors: Oracle. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.wizards;
-
-import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jst.j2ee.ui.project.facet.UtilityProjectFirstPage;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-
-public class NewJpaProjectFirstPage extends UtilityProjectFirstPage 
-{
-	public NewJpaProjectFirstPage(IDataModel dataModel, String pageName) {
-		super(dataModel, pageName);
-		setTitle(JptUiMessages.NewJpaProjectWizard_firstPage_title);
-		setDescription(JptUiMessages.NewJpaProjectWizard_firstPage_description);
-		setInfopopID(JpaHelpContextIds.NEW_JPA_PROJECT);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/NewJpaProjectWizard.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/NewJpaProjectWizard.java
deleted file mode 100644
index 53d3495..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/NewJpaProjectWizard.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2006, 2008 Oracle. All rights reserved. This
- *  program and the accompanying materials are made available under the terms of
- *  the Eclipse Public License v1.0 which accompanies this distribution, and is
- *  available at http://www.eclipse.org/legal/epl-v10.html
- *  
- *  Contributors: Oracle. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.wizards;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.wizard.IWizardPage;
-import org.eclipse.jpt.ui.JptUiPlugin;
-import org.eclipse.jpt.ui.internal.JptUiIcons;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jst.j2ee.ui.project.facet.UtilityProjectWizard;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.project.facet.core.IFacetedProjectTemplate;
-import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
-
-public class NewJpaProjectWizard extends UtilityProjectWizard {
-
-	public NewJpaProjectWizard() {
-		super();
-		setWindowTitle(JptUiMessages.NewJpaProjectWizard_title);
-	}
-
-	public NewJpaProjectWizard(IDataModel model) {
-		super(model);
-		setWindowTitle(JptUiMessages.NewJpaProjectWizard_title);
-	}
-	
-	// TODO - when we have a data model to add
-//	protected IDataModel createDataModel() {
-//		return DataModelFactory.createDataModel(new UtilityProjectCreationDataModelProvider());
-//	}
-	
-	@Override
-	protected ImageDescriptor getDefaultPageImageDescriptor() {
-		return JptUiPlugin.getImageDescriptor(JptUiIcons.JPA_WIZ_BANNER);
-	}
-	
-	@Override
-	protected IFacetedProjectTemplate getTemplate() {
-		return ProjectFacetsManager.getTemplate("jpt.jpa.template");
-	}
-	
-	@Override
-	protected IWizardPage createFirstPage() {
-		return new NewJpaProjectFirstPage(model, "first.page"); //$NON-NLS-1$ 
-	}
-	
-	@Override
-	protected String getFinalPerspectiveID() {
-		return "org.eclipse.jpt.ui.jpaPerspective";
-	}
-}