This commit was manufactured by cvs2svn to create tag 'v200805140020'.
diff --git a/docs/org.eclipse.wst.validation.infopop/.cvsignore b/docs/org.eclipse.wst.validation.infopop/.cvsignore
new file mode 100644
index 0000000..c14487c
--- /dev/null
+++ b/docs/org.eclipse.wst.validation.infopop/.cvsignore
@@ -0,0 +1 @@
+build.xml
diff --git a/plugins/org.eclipse.wst.common.ui/.project b/docs/org.eclipse.wst.validation.infopop/.project
similarity index 68%
rename from plugins/org.eclipse.wst.common.ui/.project
rename to docs/org.eclipse.wst.validation.infopop/.project
index 8f557ef..28f5b4f 100644
--- a/plugins/org.eclipse.wst.common.ui/.project
+++ b/docs/org.eclipse.wst.validation.infopop/.project
@@ -1,16 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>org.eclipse.wst.common.ui</name>
+	<name>org.eclipse.wst.validation.infopop</name>
 	<comment></comment>
 	<projects>
 	</projects>
 	<buildSpec>
 		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
 			<name>org.eclipse.pde.ManifestBuilder</name>
 			<arguments>
 			</arguments>
@@ -22,7 +17,6 @@
 		</buildCommand>
 	</buildSpec>
 	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.pde.PluginNature</nature>
 	</natures>
 </projectDescription>
diff --git a/docs/org.eclipse.wst.validation.infopop/META-INF/MANIFEST.MF b/docs/org.eclipse.wst.validation.infopop/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..7161932
--- /dev/null
+++ b/docs/org.eclipse.wst.validation.infopop/META-INF/MANIFEST.MF
@@ -0,0 +1,7 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Plugin.name
+Bundle-SymbolicName: org.eclipse.wst.validation.infopop; singleton:=true
+Bundle-Version: 1.0.202.qualifier
+Bundle-Localization: plugin
+Bundle-Vendor: %Plugin.providerName
diff --git a/docs/org.eclipse.wst.validation.infopop/ValidationPrefs_HelpContexts.xml b/docs/org.eclipse.wst.validation.infopop/ValidationPrefs_HelpContexts.xml
new file mode 100644
index 0000000..9a8ccfa
--- /dev/null
+++ b/docs/org.eclipse.wst.validation.infopop/ValidationPrefs_HelpContexts.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS type="org.eclipse.help.contexts"?>
+
+<contexts>
+	<!-- Eclipse Validation preferences -->
+<context id="jvgp0000">
+<description>The validation preferences page allows you to view or change the default validation settings for all workbench projects. A validator is a tool that checks that resources conform to a specification, DTD, or some other set of rules.
+
+Each validator can apply to certain types of files, certain project natures, and certain project facets. When a validator applies to a project facet or nature, the workbench uses that validator only on projects that have that facet or nature. Likewise, most validators apply only to certain types of files, so the workbench uses those validators only on those types of files.
+
+Select the <b>Allow projects to override these preference settings</b> check box if you want to allow individual projects to set their own validation preferences. To configure new validation settings for an individual project, select the project in the Navigator view, right-click and select <b>Properties</b>   &gt; <b>Validation</b> .
+
+Select the <b>Suspend all validators</b> check box to prevent validation at the global level. If you select this check box, you can still enable validation at the project level.
+
+Select the <b>Save all modified resources automatically prior to validating</b> check box if you want to save any resources you have modified before the validation begins.
+
+In the list of validators, select the check boxes next to each validator you want to use at the global level. Each validator has a check box to specify whether it is used on manual validation or on build validation. Choose an alternate implementation for a validator by clicking the button in the <b>Settings</b> column. Not all validators have alternate implementations.
+
+</description>
+<topic href="../org.eclipse.jst.j2ee.doc.user/topics/tjval.html" label="Validating code in enterprise applications"/>
+<topic href="../org.eclipse.jst.j2ee.doc.user/topics/tjvalglobalpref.html" label="Overriding global validation preferences"/>
+<topic href="../org.eclipse.jst.j2ee.doc.user/topics/rvalerr.html" label="Common validation errors and solutions"/>
+</context>
+
+</contexts>
\ No newline at end of file
diff --git a/docs/org.eclipse.wst.validation.infopop/ValidationProjPrefs_HelpContexts.xml b/docs/org.eclipse.wst.validation.infopop/ValidationProjPrefs_HelpContexts.xml
new file mode 100644
index 0000000..489af37
--- /dev/null
+++ b/docs/org.eclipse.wst.validation.infopop/ValidationProjPrefs_HelpContexts.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS type="org.eclipse.help.contexts"?>
+
+<contexts>
+	<!-- Validation settings for project -->
+
+<context id="jvpp0000">
+<description>The project validation page allows you to view or change the validation settings for a project. A validator is a tool that checks that resources conform to a specification, DTD, or some other set of rules.
+
+Each validator can apply to certain types of files, certain project natures, and certain project facets. When a validator applies to a project facet or nature, the workbench uses that validator only on projects that have that facet or nature. Likewise, most validators apply only to certain types of files, so the workbench uses those validators only on those types of files.
+
+Select the <b>Override validation preferences</b> check box if you want to override the default validation preferences set in the workbench Preferences page. If the <b>Override validation preferences</b> check box is not enabled, go to <b>Window</b>   &gt; <b>Preferences</b>   &gt; <b>Validation</b> and select the <b>Allow projects to override these preference settings</b> check box.
+
+Select the <b>Suspend all validators</b> check box to prevent validation for this project.
+
+In the list of validators, select the check boxes next to each validator you want to use for this project. Each validator has a check box to specify whether it is used on manual validation or on build validation. Choose an alternate implementation for a validator by clicking the button in the <b>Settings</b> column. Not all validators have alternate implementations.
+
+</description>
+<topic href="../org.eclipse.jst.j2ee.doc.user/topics/tjval.html" label="Validating code in enterprise applications"/>
+<topic href="../org.eclipse.jst.j2ee.doc.user/topics/tjvalglobalpref.html" label="Overriding global validation preferences"/>
+<topic href="../org.eclipse.jst.j2ee.doc.user/topics/rvalerr.html" label="Common validation errors and solutions"/>
+</context>
+
+</contexts>
\ No newline at end of file
diff --git a/docs/org.eclipse.wst.validation.infopop/about.html b/docs/org.eclipse.wst.validation.infopop/about.html
new file mode 100644
index 0000000..2199df3
--- /dev/null
+++ b/docs/org.eclipse.wst.validation.infopop/about.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<HTML>
+
+<head>
+<title>About</title>
+<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
+</head>
+
+<BODY lang="EN-US">
+
+<H3>About This Content</H3>
+
+<P>June, 2008</P>
+
+<H3>License</H3>
+
+<P>The Eclipse Foundation makes available all content in this plug-in 
+("Content"). Unless otherwise indicated below, the Content is provided to you 
+under the terms and conditions of the Eclipse Public License Version 1.0 
+("EPL"). A copy of the EPL is available at
+<A href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</A>. 
+For purposes of the EPL, "Program" will mean the Content.</P>
+
+<P>If you did not receive this Content directly from the Eclipse Foundation, the 
+Content is being redistributed by another party ("Redistributor") and different 
+terms and conditions may apply to your use of any object code in the Content. 
+Check the Redistributor’s license that was provided with the Content. If no such 
+license exists, contact the Redistributor. Unless otherwise indicated below, the 
+terms and conditions of the EPL still apply to any source code in the Content 
+and such source code may be obtained at
+<A href="http://www.eclipse.org/">http://www.eclipse.org/</A>.</P>
+
+</BODY>
+</HTML>
diff --git a/docs/org.eclipse.wst.validation.infopop/build.properties b/docs/org.eclipse.wst.validation.infopop/build.properties
new file mode 100644
index 0000000..79adbe8
--- /dev/null
+++ b/docs/org.eclipse.wst.validation.infopop/build.properties
@@ -0,0 +1,8 @@
+bin.includes = META-INF/,\
+               plugin.xml,\
+               ValidationPrefs_HelpContexts.xml,\
+               ValidationProjPrefs_HelpContexts.xml,\
+               plugin.properties,\
+               about.html
+src.includes = build.properties
+generateSourceBundle=false
\ No newline at end of file
diff --git a/docs/org.eclipse.wst.validation.infopop/plugin.properties b/docs/org.eclipse.wst.validation.infopop/plugin.properties
new file mode 100644
index 0000000..b0c0709
--- /dev/null
+++ b/docs/org.eclipse.wst.validation.infopop/plugin.properties
@@ -0,0 +1,6 @@
+# NLS_MESSAGEFORMAT_VAR
+# ==============================================================================
+# Translation Instruction: section to be translated
+# ==============================================================================
+Plugin.name = WST validation infopop plug-in
+Plugin.providerName = Eclipse.org
\ No newline at end of file
diff --git a/docs/org.eclipse.wst.validation.infopop/plugin.xml b/docs/org.eclipse.wst.validation.infopop/plugin.xml
new file mode 100644
index 0000000..aaf27bf
--- /dev/null
+++ b/docs/org.eclipse.wst.validation.infopop/plugin.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+   <extension
+         point="org.eclipse.help.contexts">
+    <contexts file="ValidationProjPrefs_HelpContexts.xml" plugin="org.eclipse.wst.validation.ui" />
+	<contexts file="ValidationPrefs_HelpContexts.xml" plugin="org.eclipse.wst.validation.ui" />
+   </extension>
+
+</plugin>
diff --git a/features/org.eclipse.wst.common_core.feature/build.properties b/features/org.eclipse.wst.common_core.feature/build.properties
index 201c94e..364480b 100644
--- a/features/org.eclipse.wst.common_core.feature/build.properties
+++ b/features/org.eclipse.wst.common_core.feature/build.properties
@@ -1,9 +1,6 @@
 bin.includes = feature.xml,\
                eclipse_update_120.jpg,\
                epl-v10.html,\
-               license.html
-src.includes = license.html,\
-               feature.xml,\
-               epl-v10.html,\
-               eclipse_update_120.jpg,\
-               build.properties
+               license.html,\
+               feature.properties
+
diff --git a/features/org.eclipse.wst.common_core.feature/feature.properties b/features/org.eclipse.wst.common_core.feature/feature.properties
new file mode 100644
index 0000000..41d223f
--- /dev/null
+++ b/features/org.eclipse.wst.common_core.feature/feature.properties
@@ -0,0 +1,145 @@
+###############################################################################
+# Copyright (c) 2006 IBM Corporation and others.
+# 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:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=WST Common Core
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org
+
+# "updateSiteName" property - label for the update site
+updateSiteName=The Eclipse Web Tools Platform (WTP) Project update site
+
+# "description" property - description of the feature
+description=WST common core functionality.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2006 IBM Corporation and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+    IBM Corporation - initial API and implementation\n
+################ end of copyright property ####################################
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
+June 06, 2007\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
+is provided to you under the terms and conditions of the Eclipse Public\n\
+License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
+Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse.org CVS\n\
+repository ("Repository") in CVS modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+   - Content may be structured and packaged into modules to facilitate delivering,\n\
+     extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+     plug-in fragments ("Fragments"), and features ("Features").\n\
+   - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java? ARchive)\n\
+     in a directory named "plugins".\n\
+   - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+     Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+     Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+     numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+   - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+     named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+Features may also include other Features ("Included Features"). Files named\n\
+"feature.xml" may contain a list of the names and version numbers of\n\
+Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+   - The top-level (root) directory\n\
+   - Plug-in and Fragment directories\n\
+   - Inside Plug-ins and Fragments packaged as JARs\n\
+   - Sub-directories of the directory named "src" of certain Plug-ins\n\
+   - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Eclipse Update Manager, you must agree to a license ("Feature Update\n\
+License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties". Such Abouts,\n\
+Feature Licenses and Feature Update Licenses contain the terms and\n\
+conditions (or references to such terms and conditions) that govern your\n\
+use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+    - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+    - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+    - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+    - IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
+    - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+    - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+    - Common Development and Distribution License (CDDL) Version 1.0 (available at http://www.sun.com/cddl/cddl.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use,\n\
+and re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.wst.common_core.feature/feature.xml b/features/org.eclipse.wst.common_core.feature/feature.xml
index 1c3ba5e..ec70e89 100644
--- a/features/org.eclipse.wst.common_core.feature/feature.xml
+++ b/features/org.eclipse.wst.common_core.feature/feature.xml
@@ -1,20 +1,47 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <feature
       id="org.eclipse.wst.common_core.feature"
-      label="org.eclipse.wst.common_core.feature"
-      version="1.0.0">
+      label="%featureName"
+      version="3.0.0.qualifier"
+      provider-name="%providerName">
 
    <description>
       %description
    </description>
 
-   <license url="license.html">
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
       %license
    </license>
 
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/webtools/updates/"/>
+   </url>
+
    <requires>
-      <import feature="org.eclipse.jem" version="1.1.0.1" match="equivalent"/>
-      <import feature="org.eclipse.emf" version="2.1.1" match="equivalent"/>
+      <import plugin="org.eclipse.wst.common.frameworks" version="1.1.200" match="compatible"/>
+      <import plugin="org.eclipse.jem.util" version="2.0.100" match="compatible"/>
+      <import plugin="org.eclipse.emf.edit" version="2.4.0" match="compatible"/>
+      <import plugin="org.eclipse.emf.ecore.xmi" version="2.4.0" match="compatible"/>
+      <import plugin="org.eclipse.wst.common.emf" version="1.1.200" match="compatible"/>
+      <import plugin="org.eclipse.core.runtime" version="3.4.0" match="compatible"/>
+      <import plugin="org.eclipse.core.resources" version="3.4.0" match="compatible"/>
+      <import plugin="org.eclipse.wst.validation" version="1.2.0" match="compatible"/>
+      <import plugin="org.eclipse.wst.common.project.facet.core" version="1.3.0" match="compatible"/>
+      <import plugin="org.eclipse.core.expressions" version="3.4.0" match="compatible"/>
+      <import plugin="org.eclipse.wst.command.env.core" version="1.0.203" match="compatible"/>
+      <import plugin="org.eclipse.core.commands" version="3.4.0" match="compatible"/>
+      <import plugin="org.eclipse.wst.common.environment" version="1.0.200" match="compatible"/>
+      <import plugin="org.apache.ant" version="1.7.0" match="compatible"/>
+      <import plugin="org.eclipse.osgi.util" version="3.1.300" match="compatible"/>
+      <import plugin="org.eclipse.emf.ecore" version="2.4.0" match="compatible"/>
+      <import plugin="org.eclipse.wst.common.emfworkbench.integration" version="1.1.200" match="compatible"/>
+      <import plugin="org.eclipse.wst.common.uriresolver" version="1.1.301" match="compatible"/>
+      <import plugin="com.ibm.icu" version="3.8.1.1" match="compatible"/>
+      <import plugin="org.eclipse.ant.core" version="3.1.300" match="compatible"/>
    </requires>
 
    <plugin
@@ -86,4 +113,18 @@
          version="0.0.0"
          unpack="false"/>
 
+   <plugin
+         id="org.eclipse.wst.common.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.jem.util"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
 </feature>
diff --git a/features/org.eclipse.wst.common_core.feature/license.html b/features/org.eclipse.wst.common_core.feature/license.html
index 2347060..76abfb4 100644
--- a/features/org.eclipse.wst.common_core.feature/license.html
+++ b/features/org.eclipse.wst.common_core.feature/license.html
@@ -5,7 +5,7 @@
 <META content="MSHTML 6.00.2800.1479" name=GENERATOR></HEAD>
 <BODY lang=EN-US vLink=purple link=blue>
 <H2>Eclipse Foundation Software User Agreement</H2>
-<P>January 28, 2005</P>
+<P>June 06, 2007</P>
 <H3>Usage Of Content</H3>
 <P>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION 
 AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT"). USE OF 
@@ -79,7 +79,12 @@
 
   <LI>Mozilla Public License Version 1.1 (available at <A 
   href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</A>) 
-  </LI></UL>
+  </LI>
+   
+  <LI>Common Development and Distribution License (CDDL) Version 1.0 (available at <A 
+  href="http://www.sun.com/cddl/cddl.html">http://www.sun.com/cddl/cddl.html)</A>
+  </LI>
+</UL>
 <P>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR 
 TO USE OF THE CONTENT. If no About, Feature License or Feature Update License is 
 provided, please contact the Eclipse Foundation to determine what terms and 
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/about.html b/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/about.html
similarity index 69%
rename from plugins/org.eclipse.wst.common.frameworks.ui/about.html
rename to features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/about.html
index 6f6b96c..fe81d46 100644
--- a/plugins/org.eclipse.wst.common.frameworks.ui/about.html
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/about.html
@@ -6,8 +6,8 @@
 </head>
 <body lang="EN-US">
 <h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
+
+<P>June, 2008</P>	
 <h3>License</h3>
 
 <p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
@@ -18,5 +18,10 @@
 apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
 indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
 
+<h3>Source Code</h3>
+<p>This plug-in contains source code zip files (&quot;Source Zips&quot;) that correspond to binary content in other plug-ins. These Source Zips may be distributed under different license
+agreements and/or notices. Details about these license agreements and notices are contained in &quot;about.html&quot; files (&quot;Abouts&quot;) located in sub-directories in the
+src/ directory of this plug-in. Such Abouts govern your use of the Source Zips in that directory, not the EPL.</p>
+
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/about.ini b/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/about.ini
new file mode 100644
index 0000000..fda5a40
--- /dev/null
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/about.ini
@@ -0,0 +1,31 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%blurb
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=wtp_prod32.png
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (not translated)
+# needed for primary features only
+
+# Property "welcomePage" contains path to welcome page (special XML-based format)
+# optional
+
+# Property "welcomePerspective" contains the id of the perspective in which the
+# welcome page is to be opened.
+# optional
+
+
+
+
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/about.mappings b/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/about.mappings
new file mode 100644
index 0000000..a28390a
--- /dev/null
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=@build@
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/about.properties b/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/about.properties
new file mode 100644
index 0000000..9474fc0
--- /dev/null
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/about.properties
@@ -0,0 +1,26 @@
+###############################################################################
+# Copyright (c) 2000, 2005 IBM Corporation and others.
+# 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:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+#
+# Do not translate any values surrounded by {}
+
+blurb=Web Standard Tools - Common Core\n\
+\n\
+Version: {featureVersion}\n\
+Build id: {0}\n\
+\n\
+(c) Copyright Eclipse contributors and others 2005.  All rights reserved.\n\
+Visit http://www.eclipse.org/webtools
+
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/build.properties b/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/build.properties
new file mode 100644
index 0000000..ead512d
--- /dev/null
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/build.properties
@@ -0,0 +1,2 @@
+bin.includes = about.html, about.ini, about.mappings, about.properties, wtp_prod32.png, plugin.properties, plugin.xml, src/**, META-INF/
+sourcePlugin = true
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/environment.properties b/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/plugin.properties
similarity index 78%
copy from plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/environment.properties
copy to features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/plugin.properties
index eefde94..c325b0a 100644
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/environment.properties
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/plugin.properties
@@ -1,17 +1,12 @@
 ###############################################################################
-# Copyright (c) 2001, 2005 IBM Corporation and others.
+# Copyright (c) 2005 IBM Corporation and others.
 # 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:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-
-TITLE_WARNING=Warning:
-TITLE_ERROR=Error:
-TITLE_INFO=Info:
-
-
-
+pluginName=Web Standard Tools - Common Core Source
+providerName=Eclipse.org
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/wtp_prod32.gif b/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/wtp_prod32.gif
new file mode 100644
index 0000000..eefb44a
--- /dev/null
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/wtp_prod32.gif
Binary files differ
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/wtp_prod32.png b/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/wtp_prod32.png
new file mode 100644
index 0000000..bfceab3
--- /dev/null
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplateBundle/wtp_prod32.png
Binary files differ
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/eclipse_update_120.jpg
index 17bb8e3..bfdf708 100644
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/eclipse_update_120.jpg
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..52d0f54
--- /dev/null
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,144 @@
+###############################################################################
+# Copyright (c) 2006 IBM Corporation and others.
+# 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:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=WST Common Core Developer Resources
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org
+
+# "updateSiteName" property - label for the update site
+updateSiteName=The Eclipse Web Tools Platform (WTP) Project update site
+
+# "description" property - description of the feature
+description=Source code zips for WST common core.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2006 IBM Corporation and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+    IBM Corporation - initial API and implementation\n
+################ end of copyright property ####################################
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
+June 06, 2007\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
+is provided to you under the terms and conditions of the Eclipse Public\n\
+License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
+Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse.org CVS\n\
+repository ("Repository") in CVS modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+   - Content may be structured and packaged into modules to facilitate delivering,\n\
+     extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+     plug-in fragments ("Fragments"), and features ("Features").\n\
+   - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java? ARchive)\n\
+     in a directory named "plugins".\n\
+   - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+     Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+     Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+     numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+   - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+     named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+Features may also include other Features ("Included Features"). Files named\n\
+"feature.xml" may contain a list of the names and version numbers of\n\
+Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+   - The top-level (root) directory\n\
+   - Plug-in and Fragment directories\n\
+   - Inside Plug-ins and Fragments packaged as JARs\n\
+   - Sub-directories of the directory named "src" of certain Plug-ins\n\
+   - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Eclipse Update Manager, you must agree to a license ("Feature Update\n\
+License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties". Such Abouts,\n\
+Feature Licenses and Feature Update Licenses contain the terms and\n\
+conditions (or references to such terms and conditions) that govern your\n\
+use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+    - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+    - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+    - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+    - IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
+    - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+    - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+    - Common Development and Distribution License (CDDL) Version 1.0 (available at http://www.sun.com/cddl/cddl.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use,\n\
+and re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/license.html b/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/license.html
index c6af966..fec4a48 100644
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/license.html
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/license.html
@@ -7,7 +7,7 @@
 
 <body lang="EN-US" link=blue vlink=purple>
 <h2>Eclipse Foundation Software User Agreement</h2>
-<p>March 17, 2005</p>
+<p>June 06, 2007</p>
 
 <h3>Usage Of Content</h3>
 
@@ -63,7 +63,10 @@
 	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
 	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
 	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
+  <LI>Common Development and Distribution License (CDDL) Version 1.0 (available at <A 
+  href="http://www.sun.com/cddl/cddl.html">http://www.sun.com/cddl/cddl.html)</A>
+  </LI>
+</UL>
 
 <p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
 contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.html b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.html
index 0a8aea0..fe81d46 100644
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.html
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.html
@@ -7,7 +7,7 @@
 <body lang="EN-US">
 <h2>About This Content</h2>
 
-<p>February 24, 2005</p>	
+<P>June, 2008</P>	
 <h3>License</h3>
 
 <p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.ini b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.ini
index 2dee36a..fda5a40 100644
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.ini
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.ini
@@ -11,7 +11,7 @@
 # needed for primary features only
 
 # Property "featureImage" contains path to feature image (32x32)
-featureImage=eclipse32.gif
+featureImage=wtp_prod32.png
 
 # Property "aboutImage" contains path to product image (500x330 or 115x164)
 # needed for primary features only
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.mappings b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.mappings
index 0dfb735..a28390a 100644
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.mappings
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.mappings
@@ -1,6 +1,6 @@
-# about.mappings

-# contains fill-ins for about.properties

-# java.io.Properties file (ISO 8859-1 with "\" escapes)

-# This file does not need to be translated.

-

-0=@build@

+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=@build@
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.properties b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.properties
index 88a06c5..9474fc0 100644
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.properties
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.properties
@@ -16,7 +16,7 @@
 #
 # Do not translate any values surrounded by {}
 
-blurb=Web Standard Tools SDK\n\
+blurb=Web Standard Tools - Common Core\n\
 \n\
 Version: {featureVersion}\n\
 Build id: {0}\n\
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/build.properties b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/build.properties
index f95b457..ead512d 100644
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/build.properties
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/build.properties
@@ -1,2 +1,2 @@
-bin.includes = about.html, about.ini, about.mappings, about.properties, eclipse32.gif, plugin.properties, plugin.xml, src/**, META-INF/
+bin.includes = about.html, about.ini, about.mappings, about.properties, wtp_prod32.png, plugin.properties, plugin.xml, src/**, META-INF/
 sourcePlugin = true
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/eclipse32.gif b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/eclipse32.gif
deleted file mode 100644
index 0282f5d..0000000
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/eclipse32.gif
+++ /dev/null
Binary files differ
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/eclipse32.png b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/eclipse32.png
deleted file mode 100644
index 50ae49d..0000000
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/eclipse32.png
+++ /dev/null
Binary files differ
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/plugin.properties b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/plugin.properties
index 165af04..c325b0a 100644
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/plugin.properties
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/plugin.properties
@@ -8,5 +8,5 @@
 # Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-pluginName=Web Standard Tools SDK - Common Component
+pluginName=Web Standard Tools - Common Core Source
 providerName=Eclipse.org
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/wtp_prod32.gif b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/wtp_prod32.gif
new file mode 100644
index 0000000..eefb44a
--- /dev/null
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/wtp_prod32.gif
Binary files differ
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/wtp_prod32.png b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/wtp_prod32.png
new file mode 100644
index 0000000..bfceab3
--- /dev/null
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/wtp_prod32.png
Binary files differ
diff --git a/features/org.eclipse.wst.common_sdk.feature/.cvsignore b/features/org.eclipse.wst.common_sdk.feature/.cvsignore
deleted file mode 100644
index 413925b..0000000
--- a/features/org.eclipse.wst.common_sdk.feature/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-org.eclipse.wst.common_sdk.feature_1.0.0.bin.dist.zip
-build.xml
-features
-plugins
diff --git a/features/org.eclipse.wst.common_sdk.feature/.project b/features/org.eclipse.wst.common_sdk.feature/.project
deleted file mode 100644
index fb86250..0000000
--- a/features/org.eclipse.wst.common_sdk.feature/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.wst.common_sdk.feature</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.FeatureBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.FeatureNature</nature>
-	</natures>
-</projectDescription>
diff --git a/features/org.eclipse.wst.common_sdk.feature/build.properties b/features/org.eclipse.wst.common_sdk.feature/build.properties
deleted file mode 100644
index 5059b20..0000000
--- a/features/org.eclipse.wst.common_sdk.feature/build.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-generate.feature@org.eclipse.wst.common_ui.feature.source=org.eclipse.wst.common_ui.feature
-bin.includes = feature.xml,\
-               epl-v10.html,\
-               license.html,\
-               eclipse_update_120.jpg
-src.includes = eclipse_update_120.jpg,\
-               epl-v10.html,\
-               feature.xml,\
-               license.html,\
-               build.properties
diff --git a/features/org.eclipse.wst.common_sdk.feature/eclipse_update_120.jpg b/features/org.eclipse.wst.common_sdk.feature/eclipse_update_120.jpg
deleted file mode 100644
index bfdf708..0000000
--- a/features/org.eclipse.wst.common_sdk.feature/eclipse_update_120.jpg
+++ /dev/null
Binary files differ
diff --git a/features/org.eclipse.wst.common_sdk.feature/epl-v10.html b/features/org.eclipse.wst.common_sdk.feature/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/features/org.eclipse.wst.common_sdk.feature/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
-@font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
-@page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor (&quot;Commercial
-Contributor&quot;) hereby agrees to defend and indemnify every other
-Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
-costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/features/org.eclipse.wst.common_sdk.feature/feature.xml b/features/org.eclipse.wst.common_sdk.feature/feature.xml
deleted file mode 100644
index 28cf6d6..0000000
--- a/features/org.eclipse.wst.common_sdk.feature/feature.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.wst.common_sdk.feature"
-      label="org.eclipse.wst.common_sdk.feature"
-      version="1.0.0">
-
-   <description>
-      %description
-   </description>
-
-
-
-   <license url="license.html">
-      %license
-   </license>
-
-
-   <includes
-         id="org.eclipse.wst.common_ui.feature.source"
-         version="0.0.0"/>
- 
-</feature>
diff --git a/features/org.eclipse.wst.common_sdk.feature/license.html b/features/org.eclipse.wst.common_sdk.feature/license.html
deleted file mode 100644
index 2347060..0000000
--- a/features/org.eclipse.wst.common_sdk.feature/license.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
-<!-- saved from url=(0044)http://www.eclipse.org/legal/epl/notice.html -->
-<HTML><HEAD><TITLE>Eclipse.org Software User Agreement</TITLE>
-<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-<META content="MSHTML 6.00.2800.1479" name=GENERATOR></HEAD>
-<BODY lang=EN-US vLink=purple link=blue>
-<H2>Eclipse Foundation Software User Agreement</H2>
-<P>January 28, 2005</P>
-<H3>Usage Of Content</H3>
-<P>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION 
-AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT"). USE OF 
-THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE 
-TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED 
-BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED 
-BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE 
-AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE 
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS OF ANY 
-APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU 
-MAY NOT USE THE CONTENT.</P>
-<H3>Applicable Licenses</H3>
-<P>Unless otherwise indicated, all Content made available by the Eclipse 
-Foundation is provided to you under the terms and conditions of the Eclipse 
-Public License Version 1.0 ("EPL"). A copy of the EPL is provided with this 
-Content and is also available at <A 
-href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</A>. 
-For purposes of the EPL, "Program" will mean the Content.</P>
-<P>Content includes, but is not limited to, source code, object code, 
-documentation and other files maintained in the Eclipse.org CVS repository 
-("Repository") in CVS modules ("Modules") and made available as downloadable 
-archives ("Downloads").</P>
-<P>Content may be apportioned into plug-ins ("Plug-ins"), plug-in fragments 
-("Fragments"), and features ("Features"). A Feature is a bundle of one or more 
-Plug-ins and/or Fragments and associated material. Files named "feature.xml" may 
-contain a list of the names and version numbers of the Plug-ins and/or Fragments 
-associated with a Feature. Plug-ins and Fragments are located in directories 
-named "plugins" and Features are located in directories named "features".</P>
-<P>Features may also include other Features ("Included Features"). Files named 
-"feature.xml" may contain a list of the names and version numbers of Included 
-Features.</P>
-<P>The terms and conditions governing Plug-ins and Fragments should be contained 
-in files named "about.html" ("Abouts"). The terms and conditions governing 
-Features and Included Features should be contained in files named "license.html" 
-("Feature Licenses"). Abouts and Feature Licenses may be located in any 
-directory of a Download or Module including, but not limited to the following 
-locations:</P>
-<UL>
-  <LI>The top-level (root) directory 
-  <LI>Plug-in and Fragment directories 
-  <LI>Subdirectories of the directory named "src" of certain Plug-ins 
-  <LI>Feature directories </LI></UL>
-<P>Note: if a Feature made available by the Eclipse Foundation is installed 
-using the Eclipse Update Manager, you must agree to a license ("Feature Update 
-License") during the installation process. If the Feature contains Included 
-Features, the Feature Update License should either provide you with the terms 
-and conditions governing the Included Features or inform you where you can 
-locate them. Feature Update Licenses may be found in the "license" property of 
-files named "feature.properties". Such Abouts, Feature Licenses and Feature 
-Update Licenses contain the terms and conditions (or references to such terms 
-and conditions) that govern your use of the associated Content in that 
-directory.</P>
-<P>THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL 
-OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE 
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</P>
-<UL>
-  <LI>Common Public License Version 1.0 (available at <A 
-  href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</A>) 
-
-  <LI>Apache Software License 1.1 (available at <A 
-  href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</A>) 
-
-  <LI>Apache Software License 2.0 (available at <A 
-  href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</A>) 
-
-  <LI>IBM Public License 1.0 (available at <A 
-  href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</A>) 
-
-  <LI>Metro Link Public License 1.00 (available at <A 
-  href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</A>) 
-
-  <LI>Mozilla Public License Version 1.1 (available at <A 
-  href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</A>) 
-  </LI></UL>
-<P>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR 
-TO USE OF THE CONTENT. If no About, Feature License or Feature Update License is 
-provided, please contact the Eclipse Foundation to determine what terms and 
-conditions govern that particular Content.</P>
-<H3>Cryptography</H3>
-<P>Content may contain encryption software. The country in which you are 
-currently may have restrictions on the import, possession, and use, and/or 
-re-export to another country, of encryption software. BEFORE using any 
-encryption software, please check the country's laws, regulations and policies 
-concerning the import, possession, or use, and re-export of encryption software, 
-to see if this is permitted.</P></BODY></HTML>
diff --git a/features/org.eclipse.wst.common_ui.feature/build.properties b/features/org.eclipse.wst.common_ui.feature/build.properties
index 201c94e..7f47694 100644
--- a/features/org.eclipse.wst.common_ui.feature/build.properties
+++ b/features/org.eclipse.wst.common_ui.feature/build.properties
@@ -1,9 +1,5 @@
 bin.includes = feature.xml,\
                eclipse_update_120.jpg,\
                epl-v10.html,\
-               license.html
-src.includes = license.html,\
-               feature.xml,\
-               epl-v10.html,\
-               eclipse_update_120.jpg,\
-               build.properties
+               license.html,\
+               feature.properties
diff --git a/features/org.eclipse.wst.common_ui.feature/feature.properties b/features/org.eclipse.wst.common_ui.feature/feature.properties
new file mode 100644
index 0000000..44d87a9
--- /dev/null
+++ b/features/org.eclipse.wst.common_ui.feature/feature.properties
@@ -0,0 +1,145 @@
+###############################################################################
+# Copyright (c) 2006 IBM Corporation and others.
+# 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:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=WST Common UI
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org
+
+# "updateSiteName" property - label for the update site
+updateSiteName=The Eclipse Web Tools Platform (WTP) Project update site
+
+# "description" property - description of the feature
+description=WST common UI functionality.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2006 IBM Corporation and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+    IBM Corporation - initial API and implementation\n
+################ end of copyright property ####################################
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
+June 06, 2007\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
+is provided to you under the terms and conditions of the Eclipse Public\n\
+License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
+Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse.org CVS\n\
+repository ("Repository") in CVS modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+   - Content may be structured and packaged into modules to facilitate delivering,\n\
+     extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+     plug-in fragments ("Fragments"), and features ("Features").\n\
+   - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java? ARchive)\n\
+     in a directory named "plugins".\n\
+   - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+     Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+     Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+     numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+   - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+     named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+Features may also include other Features ("Included Features"). Files named\n\
+"feature.xml" may contain a list of the names and version numbers of\n\
+Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+   - The top-level (root) directory\n\
+   - Plug-in and Fragment directories\n\
+   - Inside Plug-ins and Fragments packaged as JARs\n\
+   - Sub-directories of the directory named "src" of certain Plug-ins\n\
+   - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Eclipse Update Manager, you must agree to a license ("Feature Update\n\
+License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties". Such Abouts,\n\
+Feature Licenses and Feature Update Licenses contain the terms and\n\
+conditions (or references to such terms and conditions) that govern your\n\
+use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+    - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+    - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+    - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+    - IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
+    - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+    - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+    - Common Development and Distribution License (CDDL) Version 1.0 (available at http://www.sun.com/cddl/cddl.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use,\n\
+and re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/org.eclipse.wst.common_ui.feature/feature.xml b/features/org.eclipse.wst.common_ui.feature/feature.xml
index dd9545a..1b6f156 100644
--- a/features/org.eclipse.wst.common_ui.feature/feature.xml
+++ b/features/org.eclipse.wst.common_ui.feature/feature.xml
@@ -1,24 +1,52 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <feature
       id="org.eclipse.wst.common_ui.feature"
-      label="org.eclipse.wst.common_ui.feature"
-      version="1.0.0">
+      label="%featureName"
+      version="3.0.0.qualifier"
+      provider-name="%providerName">
 
    <description>
       %description
    </description>
 
-   <license url="license.html">
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
       %license
    </license>
 
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/webtools/updates/"/>
+   </url>
+
    <includes
-         id="org.eclipse.wst.common_userdoc.feature"
+         id="org.eclipse.wst.common_core.feature"
          version="0.0.0"/>
 
    <requires>
-      <import feature="org.eclipse.gef" version="3.1.1" match="equivalent"/>
-      <import feature="org.eclipse.wst.common_core.feature" version="1.0.0" match="equivalent"/>
+      <import plugin="org.eclipse.wst.command.env.core" version="1.0.203" match="compatible"/>
+      <import plugin="org.eclipse.wst.command.env" version="1.0.305" match="compatible"/>
+      <import plugin="org.eclipse.core.runtime" version="3.4.0" match="compatible"/>
+      <import plugin="org.eclipse.ui" version="3.4.0" match="compatible"/>
+      <import plugin="org.eclipse.wst.common.frameworks" version="1.1.200" match="compatible"/>
+      <import plugin="org.eclipse.core.resources" version="3.4.0" match="compatible"/>
+      <import plugin="org.eclipse.ui.ide" version="3.4.0" match="compatible"/>
+      <import plugin="org.eclipse.jem.util" version="2.0.100" match="compatible"/>
+      <import plugin="org.eclipse.wst.common.environment" version="1.0.200" match="compatible"/>
+      <import plugin="org.eclipse.ui.forms" version="3.3.100" match="compatible"/>
+      <import plugin="org.eclipse.wst.common.project.facet.core" version="1.3.0" match="compatible"/>
+      <import plugin="org.eclipse.gef" version="3.4.0" match="compatible"/>
+      <import plugin="org.eclipse.ui.workbench.texteditor" version="3.4.0" match="compatible"/>
+      <import plugin="org.eclipse.jface.text" version="3.4.0" match="compatible"/>
+      <import plugin="com.ibm.icu" version="3.8.1" match="compatible"/>
+      <import plugin="org.eclipse.search" version="3.4.0" match="compatible"/>
+      <import plugin="org.eclipse.wst.common.core" version="1.1.101" match="compatible"/>
+      <import plugin="org.eclipse.wst.common.uriresolver" version="1.1.301" match="compatible"/>
+      <import plugin="org.eclipse.swt" version="3.4.0" match="compatible"/>
+      <import plugin="org.eclipse.wst.common.frameworks.ui" version="1.1.200" match="compatible"/>
+      <import plugin="org.eclipse.wst.validation" version="1.2.0" match="compatible"/>
    </requires>
 
    <plugin
@@ -43,20 +71,6 @@
          unpack="false"/>
 
    <plugin
-         id="org.eclipse.wst.common.navigator.views"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.common.navigator.workbench"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
          id="org.eclipse.wst.common.project.facet.ui"
          download-size="0"
          install-size="0"
@@ -78,27 +92,6 @@
          unpack="false"/>
 
    <plugin
-         id="org.eclipse.wst.common.ui.properties"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.internet.proxy"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-         
-   <plugin
-         id="org.eclipse.wst.internet.proxy.infopop"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
          id="org.eclipse.wst.internet.cache"
          download-size="0"
          install-size="0"
@@ -112,4 +105,18 @@
          version="0.0.0"
          unpack="false"/>
 
+   <plugin
+         id="org.eclipse.wst.command.env.infopop"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.wst.validation.infopop"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
 </feature>
diff --git a/features/org.eclipse.wst.common_ui.feature/license.html b/features/org.eclipse.wst.common_ui.feature/license.html
index 2347060..5644598 100644
--- a/features/org.eclipse.wst.common_ui.feature/license.html
+++ b/features/org.eclipse.wst.common_ui.feature/license.html
@@ -5,7 +5,7 @@
 <META content="MSHTML 6.00.2800.1479" name=GENERATOR></HEAD>
 <BODY lang=EN-US vLink=purple link=blue>
 <H2>Eclipse Foundation Software User Agreement</H2>
-<P>January 28, 2005</P>
+<P>June 06, 2007</P>
 <H3>Usage Of Content</H3>
 <P>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION 
 AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT"). USE OF 
@@ -79,7 +79,12 @@
 
   <LI>Mozilla Public License Version 1.1 (available at <A 
   href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</A>) 
-  </LI></UL>
+  </LI>
+    
+  <LI>Common Development and Distribution License (CDDL) Version 1.0 (available at <A 
+  href="http://www.sun.com/cddl/cddl.html">http://www.sun.com/cddl/cddl.html)</A>
+  </LI>
+</UL>
 <P>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR 
 TO USE OF THE CONTENT. If no About, Feature License or Feature Update License is 
 provided, please contact the Eclipse Foundation to determine what terms and 
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/about.html b/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/about.html
similarity index 69%
copy from plugins/org.eclipse.wst.common.frameworks.ui/about.html
copy to features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/about.html
index 6f6b96c..fe81d46 100644
--- a/plugins/org.eclipse.wst.common.frameworks.ui/about.html
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/about.html
@@ -6,8 +6,8 @@
 </head>
 <body lang="EN-US">
 <h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
+
+<P>June, 2008</P>	
 <h3>License</h3>
 
 <p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
@@ -18,5 +18,10 @@
 apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
 indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
 
+<h3>Source Code</h3>
+<p>This plug-in contains source code zip files (&quot;Source Zips&quot;) that correspond to binary content in other plug-ins. These Source Zips may be distributed under different license
+agreements and/or notices. Details about these license agreements and notices are contained in &quot;about.html&quot; files (&quot;Abouts&quot;) located in sub-directories in the
+src/ directory of this plug-in. Such Abouts govern your use of the Source Zips in that directory, not the EPL.</p>
+
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/about.ini b/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/about.ini
new file mode 100644
index 0000000..fda5a40
--- /dev/null
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/about.ini
@@ -0,0 +1,31 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%blurb
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=wtp_prod32.png
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (not translated)
+# needed for primary features only
+
+# Property "welcomePage" contains path to welcome page (special XML-based format)
+# optional
+
+# Property "welcomePerspective" contains the id of the perspective in which the
+# welcome page is to be opened.
+# optional
+
+
+
+
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/about.mappings b/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/about.mappings
new file mode 100644
index 0000000..a28390a
--- /dev/null
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=@build@
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/about.properties b/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/about.properties
new file mode 100644
index 0000000..40314ea
--- /dev/null
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/about.properties
@@ -0,0 +1,26 @@
+###############################################################################
+# Copyright (c) 2000, 2005 IBM Corporation and others.
+# 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:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+#
+# Do not translate any values surrounded by {}
+
+blurb=Web Standard Tools - Common UI\n\
+\n\
+Version: {featureVersion}\n\
+Build id: {0}\n\
+\n\
+(c) Copyright Eclipse contributors and others 2005.  All rights reserved.\n\
+Visit http://www.eclipse.org/webtools
+
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/build.properties b/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/build.properties
new file mode 100644
index 0000000..30a575c
--- /dev/null
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/build.properties
@@ -0,0 +1,3 @@
+
+bin.includes = about.html, about.ini, about.mappings, about.properties, wtp_prod32.png, plugin.properties, plugin.xml, src/**, META-INF/
+sourcePlugin = true
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/environment.properties b/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/plugin.properties
similarity index 78%
copy from plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/environment.properties
copy to features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/plugin.properties
index eefde94..4c0b73c 100644
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/environment.properties
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/plugin.properties
@@ -1,17 +1,12 @@
 ###############################################################################
-# Copyright (c) 2001, 2005 IBM Corporation and others.
+# Copyright (c) 2005 IBM Corporation and others.
 # 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:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-
-TITLE_WARNING=Warning:
-TITLE_ERROR=Error:
-TITLE_INFO=Info:
-
-
-
+pluginName=Web Standard Tools - Common UI Source
+providerName=Eclipse.org
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/wtp_prod32.gif b/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/wtp_prod32.gif
new file mode 100644
index 0000000..eefb44a
--- /dev/null
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/wtp_prod32.gif
Binary files differ
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/wtp_prod32.png b/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/wtp_prod32.png
new file mode 100644
index 0000000..bfceab3
--- /dev/null
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplateBundle/wtp_prod32.png
Binary files differ
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/build.properties
index e878555..10e257a 100644
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/build.properties
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/build.properties
@@ -8,12 +8,10 @@
 # Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-bin.includes =\
-epl-v10.html,\
-eclipse_update_120.jpg,\
-feature.xml,\
-feature.properties,\
-license.html
-
-generate.feature@org.eclipse.wst.common_core.feature.source = org.eclipse.wst.common_core.feature
+generate.feature@org.eclipse.wst.common_core.feature.source=org.eclipse.wst.common_core.feature
+bin.includes = epl-v10.html,\
+               eclipse_update_120.jpg,\
+               feature.properties,\
+               license.html,\
+               feature.xml
 
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/eclipse_update_120.jpg
index 17bb8e3..bfdf708 100644
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/eclipse_update_120.jpg
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/feature.properties
index 01950e3..c861cfb 100644
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/feature.properties
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/feature.properties
@@ -15,16 +15,29 @@
 # This file should be translated.
 
 # "featureName" property - name of the feature
-featureName=Eclipse JDT Plug-in Developer Resources
+featureName=WST Common UI Developer Resources
 
 # "providerName" property - name of the company that provides the feature
 providerName=Eclipse.org
 
 # "updateSiteName" property - label for the update site
-updateSiteName=Eclipse.org update site
+updateSiteName=The Eclipse Web Tools Platform (WTP) Project update site
 
 # "description" property - description of the feature
-description=API documentation and source code zips for Eclipse Java development tools.
+description=Source code zips for WST Common UI.
+
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2006 IBM Corporation and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+    IBM Corporation - initial API and implementation\n
+################ end of copyright property ####################################
 
 # "licenseURL" property - URL of the "Feature License"
 # do not translate value - just change to point to a locale-specific HTML page
@@ -34,7 +47,7 @@
 # should be plain text version of license agreement pointed to be "licenseURL"
 license=\
 ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
-March 17, 2005\n\
+June 06, 2007\n\
 \n\
 Usage Of Content\n\
 \n\
@@ -113,6 +126,7 @@
     - IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
     - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
     - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+    - Common Development and Distribution License (CDDL) Version 1.0 (available at http://www.sun.com/cddl/cddl.html)\n\
 \n\
 IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
 TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/feature.xml b/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/feature.xml
deleted file mode 100644
index 9689edd..0000000
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/feature.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-	primary="false"
-	label="org.eclipse.wst.common_ui.feature.source"
-	id="org.eclipse.wst.common_ui.feature.source"
-	version="1.0.0">
-	<description>
-		%description
-	</description>
-	<copyright url="http://www.example.com/copyright">
-		%copyright
-	</copyright>
-	<license url="license.html">%license</license>
-	
-	<includes
-         id="org.eclipse.wst.common_core.feature"
-         version="0.0.0"/>
-         
-	<includes
-         id="org.eclipse.wst.common_core.feature.source"
-         version="0.0.0"/>
-    <plugin
-         id="org.eclipse.wst.common_ui.feature.source"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"/>   
-                          
-</feature>
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/license.html b/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/license.html
index c6af966..fec4a48 100644
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/license.html
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/license.html
@@ -7,7 +7,7 @@
 
 <body lang="EN-US" link=blue vlink=purple>
 <h2>Eclipse Foundation Software User Agreement</h2>
-<p>March 17, 2005</p>
+<p>June 06, 2007</p>
 
 <h3>Usage Of Content</h3>
 
@@ -63,7 +63,10 @@
 	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
 	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
 	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
+  <LI>Common Development and Distribution License (CDDL) Version 1.0 (available at <A 
+  href="http://www.sun.com/cddl/cddl.html">http://www.sun.com/cddl/cddl.html)</A>
+  </LI>
+</UL>
 
 <p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
 contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.html b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.html
index 0a8aea0..fe81d46 100644
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.html
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.html
@@ -7,7 +7,7 @@
 <body lang="EN-US">
 <h2>About This Content</h2>
 
-<p>February 24, 2005</p>	
+<P>June, 2008</P>	
 <h3>License</h3>
 
 <p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.ini b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.ini
index 2dee36a..fda5a40 100644
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.ini
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.ini
@@ -11,7 +11,7 @@
 # needed for primary features only
 
 # Property "featureImage" contains path to feature image (32x32)
-featureImage=eclipse32.gif
+featureImage=wtp_prod32.png
 
 # Property "aboutImage" contains path to product image (500x330 or 115x164)
 # needed for primary features only
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.mappings b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.mappings
index 0dfb735..a28390a 100644
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.mappings
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.mappings
@@ -1,6 +1,6 @@
-# about.mappings

-# contains fill-ins for about.properties

-# java.io.Properties file (ISO 8859-1 with "\" escapes)

-# This file does not need to be translated.

-

-0=@build@

+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=@build@
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.properties b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.properties
index 88a06c5..40314ea 100644
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.properties
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.properties
@@ -16,7 +16,7 @@
 #
 # Do not translate any values surrounded by {}
 
-blurb=Web Standard Tools SDK\n\
+blurb=Web Standard Tools - Common UI\n\
 \n\
 Version: {featureVersion}\n\
 Build id: {0}\n\
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/build.properties b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/build.properties
index 5895597..30a575c 100644
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/build.properties
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/build.properties
@@ -1,3 +1,3 @@
 
-bin.includes = about.html, about.ini, about.mappings, about.properties, eclipse32.gif, plugin.properties, plugin.xml, src/**, META-INF/
+bin.includes = about.html, about.ini, about.mappings, about.properties, wtp_prod32.png, plugin.properties, plugin.xml, src/**, META-INF/
 sourcePlugin = true
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/eclipse32.gif b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/eclipse32.gif
deleted file mode 100644
index 0282f5d..0000000
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/eclipse32.gif
+++ /dev/null
Binary files differ
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/eclipse32.png b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/eclipse32.png
deleted file mode 100644
index 50ae49d..0000000
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/eclipse32.png
+++ /dev/null
Binary files differ
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/plugin.properties b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/plugin.properties
index 165af04..4c0b73c 100644
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/plugin.properties
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/plugin.properties
@@ -8,5 +8,5 @@
 # Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-pluginName=Web Standard Tools SDK - Common Component
+pluginName=Web Standard Tools - Common UI Source
 providerName=Eclipse.org
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/wtp_prod32.gif b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/wtp_prod32.gif
new file mode 100644
index 0000000..eefb44a
--- /dev/null
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/wtp_prod32.gif
Binary files differ
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/wtp_prod32.png b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/wtp_prod32.png
new file mode 100644
index 0000000..bfceab3
--- /dev/null
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/wtp_prod32.png
Binary files differ
diff --git a/plugins/org.eclipse.jem.util/.classpath b/plugins/org.eclipse.jem.util/.classpath
index d4d58af..a988941 100644
--- a/plugins/org.eclipse.jem.util/.classpath
+++ b/plugins/org.eclipse.jem.util/.classpath
@@ -3,8 +3,7 @@
 	<classpathentry kind="src" path="jemutil"/>
 	<classpathentry kind="src" path="property_files"/>
 	<classpathentry kind="src" path="jemutil-nonworkbnech"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry sourcepath="org.eclipse.perfmsr.core.stub/perfmsr.jar" kind="lib" path="org.eclipse.perfmsr.core.stub/perfmsr.jar"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.jem.util/.cvsignore b/plugins/org.eclipse.jem.util/.cvsignore
index ba077a4..e043cc4 100644
--- a/plugins/org.eclipse.jem.util/.cvsignore
+++ b/plugins/org.eclipse.jem.util/.cvsignore
@@ -1 +1,3 @@
 bin
+build.xml
+javaCompiler...args
diff --git a/plugins/org.eclipse.jem.util/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.jem.util/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..02c2954
--- /dev/null
+++ b/plugins/org.eclipse.jem.util/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Sun Apr 15 21:15:45 EDT 2007
+eclipse.preferences.version=1
+encoding/<project>=ISO-8859-1
diff --git a/plugins/org.eclipse.jem.util/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.jem.util/.settings/org.eclipse.jdt.core.prefs
index 9104605..cb579cc 100644
--- a/plugins/org.eclipse.jem.util/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/org.eclipse.jem.util/.settings/org.eclipse.jdt.core.prefs
@@ -1,11 +1,15 @@
-#Thu Jun 16 13:22:48 EDT 2005
+#Tue Jul 31 20:39:48 EDT 2007
 eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
 org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
@@ -41,15 +45,18 @@
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
 org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
 org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
@@ -81,8 +88,6 @@
 org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
 org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
 org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines=false
-org.eclipse.jdt.core.formatter.comment.format_comments=true
 org.eclipse.jdt.core.formatter.comment.format_header=false
 org.eclipse.jdt.core.formatter.comment.format_html=true
 org.eclipse.jdt.core.formatter.comment.format_source_code=true
@@ -95,10 +100,12 @@
 org.eclipse.jdt.core.formatter.continuation_indentation=2
 org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
 org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
 org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
 org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
 org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
 org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
 org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
 org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
@@ -112,6 +119,7 @@
 org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
@@ -255,6 +263,7 @@
 org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
 org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
@@ -280,3 +289,4 @@
 org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
 org.eclipse.jdt.core.formatter.tabulation.char=tab
 org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
diff --git a/plugins/org.eclipse.jem.util/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.jem.util/.settings/org.eclipse.jdt.ui.prefs
index 4cff627..6c8e1bc 100644
--- a/plugins/org.eclipse.jem.util/.settings/org.eclipse.jdt.ui.prefs
+++ b/plugins/org.eclipse.jem.util/.settings/org.eclipse.jdt.ui.prefs
@@ -1,5 +1,7 @@
-#Wed May 11 16:20:15 EDT 2005
+#Tue Feb 21 10:09:19 EST 2006
 eclipse.preferences.version=1
+formatter_profile=_jve
+formatter_settings_version=10
 org.eclipse.jdt.ui.ignorelowercasenames=true
 org.eclipse.jdt.ui.importorder=java;javax;org;org.eclipse.wtp;org.eclipse.jem;org.eclipse.ve.internal.cdm;org.eclipse.ve.internal.cde;org.eclipse.ve.internal.jcm;org.eclipse.ve.internal.java;org.eclipse.ve;com;
 org.eclipse.jdt.ui.ondemandthreshold=3
diff --git a/plugins/org.eclipse.jem.util/META-INF/MANIFEST.MF b/plugins/org.eclipse.jem.util/META-INF/MANIFEST.MF
index 30f7314..7d851ba 100644
--- a/plugins/org.eclipse.jem.util/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jem.util/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jem.util; singleton:=true
-Bundle-Version: 1.2.0
+Bundle-Version: 2.0.100.qualifier
 Bundle-Activator: org.eclipse.jem.util.plugin.JEMUtilPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -16,9 +16,11 @@
  org.eclipse.jem.util.logger.proxy,
  org.eclipse.jem.util.logger.proxyrender,
  org.eclipse.jem.util.plugin
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.core.resources,
- org.eclipse.emf.ecore,
- org.eclipse.emf.ecore.xmi,
- org.eclipse.perfmsr.core;resolution:=optional
-Eclipse-AutoStart: true
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.emf.ecore;bundle-version="[2.4.0,3.0.0)",
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.4.0,3.0.0)",
+ org.eclipse.perfmsr.core;bundle-version="1.0.0";resolution:=optional,
+ com.ibm.icu;bundle-version="[3.8.1.1,4.0.0)"
+Eclipse-LazyStart: true
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git "a/plugins/org.eclipse.jem.util/READ_ME_BEFORE_CHANGING_MANIFEST\041\041\041" "b/plugins/org.eclipse.jem.util/READ_ME_BEFORE_CHANGING_MANIFEST\041\041\041"
new file mode 100644
index 0000000..718e94a
--- /dev/null
+++ "b/plugins/org.eclipse.jem.util/READ_ME_BEFORE_CHANGING_MANIFEST\041\041\041"
@@ -0,0 +1,8 @@
+Do not include a new dependency plugin to the MANIFEST for this plugind!!!
+
+The reason for this is that this plugin is also executed outside of Eclipse framework, such IBM Websphere Application Server (c) IBM. We cannot add
+new dependencies to the plugin because the current set is considered to be API. Adding a new set without consulting those users would break
+them.
+
+The external API is anything in the jemutil-nonworkbench folder. If it is only for a class in the other source folder(s) it may be OK since they would not be 
+using that code. But it would be best to consult with them first.
\ No newline at end of file
diff --git a/plugins/org.eclipse.jem.util/about.html b/plugins/org.eclipse.jem.util/about.html
index 6f6b96c..5acea59 100644
--- a/plugins/org.eclipse.jem.util/about.html
+++ b/plugins/org.eclipse.jem.util/about.html
@@ -1,22 +1,25 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
+<html><head><title>About</title>
+
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></head><body lang="EN-US">
 <h2>About This Content</h2>
  
-<p>February 24, 2005</p>	
+<P>June, 2008</P>	
 <h3>License</h3>
 
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
 For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
 
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
 
-</body>
-</html>
\ No newline at end of file
+</body></html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.jem.util/build.properties b/plugins/org.eclipse.jem.util/build.properties
index b40afd0..aa0d851 100644
--- a/plugins/org.eclipse.jem.util/build.properties
+++ b/plugins/org.eclipse.jem.util/build.properties
@@ -21,3 +21,4 @@
            property_files/,\
            jemutil-nonworkbnech/
 jars.compile.order = .
+extra.. = ./org.eclipse.perfmsr.core.stub/perfmsr.jar
diff --git a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/LogEntry.java b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/LogEntry.java
index b5b9fff..f50bae7 100644
--- a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/LogEntry.java
+++ b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/LogEntry.java
@@ -1,16 +1,16 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: LogEntry.java,v $
- *  $Revision: 1.3 $  $Date: 2005/11/01 21:09:03 $ 
+
+
  */
 package org.eclipse.jem.util.logger;
 
@@ -315,12 +315,15 @@
 	 * @see java.lang.Object#toString()
 	 */
 	public String toString() {
-		StringBuffer b = new StringBuffer();
+		ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
+		PrintWriter printWriter = new PrintWriter(byteOutput);
 		if (text != null)
-			b.append(text);
-		if (_caughtException != null)
-			b.append(_caughtException.toString());
-		return b.toString();
+			printWriter.println(text);
+		if (_caughtException != null) {
+			_caughtException.printStackTrace(printWriter);
+		}
+		printWriter.flush();
+		return byteOutput.toString();
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/ILogRenderer.java b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/ILogRenderer.java
index 3ba7c4d..5d1e951 100644
--- a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/ILogRenderer.java
+++ b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/ILogRenderer.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: ILogRenderer.java,v $
- *  $Revision: 1.2 $  $Date: 2005/02/15 23:05:54 $ 
+
+
  */
 package org.eclipse.jem.util.logger.proxy;
 
diff --git a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/ILogRenderer2.java b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/ILogRenderer2.java
index 69ee144..f5a670f 100644
--- a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/ILogRenderer2.java
+++ b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/ILogRenderer2.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: ILogRenderer2.java,v $
- *  $Revision: 1.4 $  $Date: 2005/08/24 21:10:34 $ 
+
+
  */
 package org.eclipse.jem.util.logger.proxy;
 
diff --git a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/JDKConsoleRenderer.java b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/JDKConsoleRenderer.java
index 6f0f828..c7c9d75 100644
--- a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/JDKConsoleRenderer.java
+++ b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/JDKConsoleRenderer.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: JDKConsoleRenderer.java,v $
- *  $Revision: 1.3 $  $Date: 2005/08/24 21:10:34 $ 
+
+
  */
 package org.eclipse.jem.util.logger.proxy;
 
diff --git a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/Logger.java b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/Logger.java
index b78db6f..b86ad05 100644
--- a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/Logger.java
+++ b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/Logger.java
@@ -1,16 +1,16 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2006 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: Logger.java,v $
- *  $Revision: 1.5 $  $Date: 2005/08/24 21:10:34 $ 
+
+
  */
 package org.eclipse.jem.util.logger.proxy;
 
@@ -195,7 +195,7 @@
 		
 		try {
 			fLineSeperator = System.getProperty("line.separator"); // Diff on Win/Unix/Mac //$NON-NLS-1$
-		} catch (Throwable e) {
+		} catch (Exception e) {
 			fLineSeperator = "\n"; //$NON-NLS-1$
 		}
 	}
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/internal/util/emf/workbench/ProjectResourceSetImpl.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/internal/util/emf/workbench/ProjectResourceSetImpl.java
index 36c8f4d..b4368d4 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/internal/util/emf/workbench/ProjectResourceSetImpl.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/internal/util/emf/workbench/ProjectResourceSetImpl.java
@@ -10,19 +10,22 @@
  *******************************************************************************/
 /*
  *  $$RCSfile: ProjectResourceSetImpl.java,v $$
- *  $$Revision: 1.8 $$  $$Date: 2005/03/18 18:52:06 $$ 
+ *  $$Revision: 1.21 $$  $$Date: 2008/04/21 14:50:16 $$ 
  */
 package org.eclipse.jem.internal.util.emf.workbench;
 
 import java.io.IOException;
 import java.util.*;
 
-import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.content.IContentDescription;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.impl.NotificationImpl;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.*;
+import org.eclipse.emf.ecore.resource.Resource.Factory;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
 import org.eclipse.emf.ecore.resource.impl.URIConverterImpl;
 import org.eclipse.emf.ecore.xmi.XMLResource;
@@ -32,7 +35,14 @@
 import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.jem.util.plugin.JEMUtilPlugin;
 
-public class ProjectResourceSetImpl extends ResourceSetImpl implements ProjectResourceSet {
+public class ProjectResourceSetImpl extends ResourceSetImpl implements FlexibleProjectResourceSet {
+	public static interface ModuleURI {
+		public static final int SUB_PROTOCOL_INDX = 0;
+		public static final int PROJECT_NAME_INDX = 1;
+		public static final int MODULE_NAME_INDX = 2;
+		public static final int CONTENT_TYPE_INDX = 3;
+	}
+
 	private boolean isReleasing = false;
 	private IProject project;
 	protected List resourceHandlers = new ArrayList();
@@ -61,18 +71,80 @@
 			res = getResourceFromHandlers(uri);
 		return res;
 	}
-	public Resource createResource(URI uri) {
+
+	public Resource createResource(URI uri, String contentType) {
 		if (isReleasing) return null;
 		//Check the map first when creating the resource and do not
 		//normalize if a value is found.
-		boolean isMapped = !(((URIConverterImpl.URIMap)getURIConverter().getURIMap()).getURI(uri).equals(uri));
+		boolean isMapped = detectURIMapping(uri);
+		boolean hasContentType = (getContentTypeName(uri) != null);
 		URI converted = uri;
 		if (!isMapped)
 			converted = getURIConverter().normalize(uri);
-		Resource result = createResourceFromHandlers(converted);
-		if (result == null)
-			result = super.createResource(converted);
+		else if (hasContentType)
+			converted = getURIConverter().normalize(uri);
 		
+		Resource result = createResourceFromHandlers(converted);
+		if (result == null) {
+		    Resource.Factory resourceFactory = getResourceFactoryRegistry().getFactory(uri);
+		    if (resourceFactory != null)
+		    {//We got the right factory, now use the right URI
+		      result = resourceFactory.createResource(converted);
+		      getResources().add(result);
+		    }
+		}
+			
+		
+		return result;
+	}
+
+	public Resource createResource(URI uri) {
+		return createResource(uri, ContentHandler.UNSPECIFIED_CONTENT_TYPE);
+	}
+
+	private boolean detectURIMapping(URI uri) {
+		if (uri == null) return false;
+		return !(((URIConverterImpl.URIMap)getURIConverter().getURIMap()).getURI(uri).equals(uri));
+	}
+	/**
+	 * Return the IFile for the <code>uri</code> within the Workspace. This URI is assumed to be
+	 * absolute in the following format: platform:/resource/....
+	 */
+	private IFile getPlatformFile(URI uri) {
+		if (WorkbenchResourceHelperBase.isPlatformResourceURI(uri)) {
+			String fileString = URI.decode(uri.path());
+			fileString = fileString.substring(JEMUtilPlugin.PLATFORM_RESOURCE.length() + 1);
+			return ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(fileString));
+		}
+		return null;
+	}
+	public Resource createResource(URI uri, Resource.Factory resourceFactory) {
+		if (isReleasing) return null;
+		//Check the map first when creating the resource and do not
+		//normalize if a value is found.
+		boolean isMapped = detectURIMapping(uri);
+		boolean hasContentType = (getContentTypeName(uri) != null);
+		URI converted = uri;
+		if (!isMapped)
+			converted = getURIConverter().normalize(uri);
+		else if (hasContentType)
+			converted = getURIConverter().normalize(uri);
+		Resource result = createResourceFromHandlers(converted);
+		if (result == null) {
+
+		    if (resourceFactory != null)
+		    {
+		      result = resourceFactory.createResource(converted);
+		      getResources().add(result);
+		      getURIResourceMap().put(uri, result);
+		      return result;
+		    }
+		    else
+		    {
+		      return null;
+		    }
+		  
+		}
 		return result;
 	}
 	/**
@@ -259,7 +331,229 @@
 	 */
 	public Resource getResource(URI uri, boolean loadOnDemand) {
 		if (isReleasing) return null;
-		return super.getResource(uri, loadOnDemand);
+
+	    Map<URI, Resource> map = getURIResourceMap();
+	    if (map != null)
+	    {
+	      Resource resource = map.get(uri);
+	      if (resource != null)
+	      {
+	        if (loadOnDemand && !resource.isLoaded())
+	        {
+	          demandLoadHelper(resource);
+	        }        
+	        return resource;
+	      }
+	    }
+	    
+	    URIConverter theURIConverter = getURIConverter();
+	    URI normalizedURI = theURIConverter.normalize(uri);
+	    List resourcesToRemove = new ArrayList();
+	    for (Resource resource : getResources())
+	    {
+	      if (theURIConverter.normalize(resource.getURI()).equals(normalizedURI)) {
+	    		  
+	    	if (getContentTypeName(uri) == null) { // loading from legacy archive api or non-typed resource
+		        if (loadOnDemand && !resource.isLoaded())
+		        {
+		          demandLoadHelper(resource);
+		        }
+		        
+		        if (map != null)
+		        {
+		          map.put(uri, resource);
+		        } 
+		        return resource;
+	    	} else  {// content type is known
+	    		boolean resourceExists = false;
+	    		IFile file = getPlatformFile(resource);
+	    		if (file != null)
+	    			resourceExists = file.exists();
+	    		String resourceContentTypeID = getContentTypeID(resource);
+	    		String uriContentTypeID = getContentTypeName(uri);
+	    		String existingMapKeyType = (findKey(resource) != null) ? getContentTypeName(findKey(resource)) : null;
+	    		if((!map.containsValue(resource) || ((map.get(uri) != null) && map.get(uri).equals(resource))) // existing resource  with alternate mapping doesn't exist in map
+	    			||  ((resourceContentTypeID != null && resourceContentTypeID.equals(uriContentTypeID)))) {
+						if (loadOnDemand && !resource.isLoaded()) {
+							demandLoadHelper(resource);
+						} // if embedded uri content type is different than resource content type, continue searching
+						if (resourceContentTypeID != null
+								&& uriContentTypeID != null) {
+							if ((resourceContentTypeID.equals(uriContentTypeID)) && existingMapKeyType == null) continue;
+							if ((!resourceContentTypeID.equals(uriContentTypeID)) || (existingMapKeyType != null && !existingMapKeyType
+									.equals(uriContentTypeID)))
+								continue;
+							else if (existingMapKeyType == null && !resourceExists) {
+								resourcesToRemove.add(resource);
+								continue;
+							}
+						} else if (uriContentTypeID != null && resourceContentTypeID == null && !resourceExists) {
+							resourcesToRemove.add(resource);
+							continue;
+						}
+								
+						if (map != null && (map.get(uri) == null)) {
+							map.put(uri, resource);
+						}
+						return resource;
+					}
+	    	}
+	      }
+	    }
+	    // Cleanup invalid resources
+	    getResources().removeAll(resourcesToRemove);
+	    Resource delegatedResource = delegatedGetResource(uri, loadOnDemand);
+	    if (delegatedResource != null)
+	    {
+	      if (map != null)
+	      {
+	        map.put(uri, delegatedResource);
+	      }
+	      return delegatedResource;
+	    }
+
+	    if (loadOnDemand)
+	    {
+	      Resource resource = demandCreateResource(uri);
+	      if (resource == null)
+	      {
+	        throw new RuntimeException("Cannot create a resource for '" + uri + "'; a registered resource factory is needed");
+	      }
+	      
+	      if (map != null)
+	      {
+	        map.put(uri, resource);
+	      }  
+
+	      demandLoadHelper(resource);
+
+	          
+	      return resource;
+	    }
+
+	    return null;
+	  
+	}
+	private IFile getPlatformFile(Resource res) {
+		IFile file = null;
+		file = getPlatformFile(res.getURI());
+		if (file == null) {
+			if (res.getResourceSet() != null) {
+				URIConverter converter = res.getResourceSet().getURIConverter();
+				URI convertedUri = converter.normalize(res.getURI());
+				if (!res.getURI().equals(convertedUri))
+					file = getPlatformFile(convertedUri);
+			}
+		}
+		return file;
+	}
+	
+	private String getContentTypeID(Resource resource) {
+		IFile file = getPlatformFile(resource);
+		IContentDescription desc = null;
+		try {
+			desc = file.getContentDescription();
+		} catch (CoreException e) {
+		}
+		if (desc != null && desc.getContentType() != null)
+			return desc.getContentType().getId();
+		return null;
+	}
+	private URI findKey(Resource resource) {
+		Map aMap = getURIResourceMap();
+		Set keys = aMap.keySet();
+		for (Iterator iterator = keys.iterator(); iterator.hasNext();) {
+			URI name = (URI) iterator.next();
+			if (aMap.get(name).equals(resource))
+				return name;
+		}
+		return null;
+	}
+	protected static String getContentTypeName(URI uri) {
+		
+		if (WorkbenchResourceHelperBase.isPlatformResourceURI(uri) || !isValidFullyQualifiedModuleURI(uri))
+			return null;
+		String contentTypeIdentifier = (uri.segmentCount() > 3 ? uri.segment(ModuleURI.CONTENT_TYPE_INDX) : null);
+		if (contentTypeIdentifier != null && Platform.getContentTypeManager().getContentType(uri.segment(ModuleURI.CONTENT_TYPE_INDX)) != null)
+			return contentTypeIdentifier;
+		else
+			return null;
+	}
+	public static boolean isValidFullyQualifiedModuleURI(URI aModuleURI) {
+		if (aModuleURI.segmentCount() < 3) {
+			return false;
+		}
+		return true;
+	}
+	/*
+	 * Javadoc copied from interface.
+	 */
+	public Resource getResource(URI uri, boolean loadOnDemand, Resource.Factory resourceFactory) {
+		if (isReleasing) return null;
+		
+
+	    Map<URI, Resource> map = getURIResourceMap();
+	    if (map != null)
+	    {
+	      Resource resource = map.get(uri);
+	      if (resource != null)
+	      {
+	        if (loadOnDemand && !resource.isLoaded())
+	        {
+	          demandLoadHelper(resource);
+	        }        
+	        return resource;
+	      }
+	    }
+	    
+	    URIConverter theURIConverter = getURIConverter();
+	    URI normalizedURI = theURIConverter.normalize(uri);
+	    for (Resource resource : getResources())
+	    {
+	      if (theURIConverter.normalize(resource.getURI()).equals(normalizedURI))
+	      {
+	        if (loadOnDemand && !resource.isLoaded())
+	        {
+	          demandLoadHelper(resource);
+	        }
+	        
+	        if (map != null)
+	        {
+	          map.put(uri, resource);
+	        } 
+	        return resource;
+	      }
+	    }
+	    
+	    Resource delegatedResource = delegatedGetResource(uri, loadOnDemand);
+	    if (delegatedResource != null)
+	    {
+	      if (map != null)
+	      {
+	        map.put(uri, delegatedResource);
+	      }
+	      return delegatedResource;
+	    }
+
+	    if (loadOnDemand)
+	    {
+	      Resource resource = demandCreateResource(uri,resourceFactory);
+	      if (resource == null)
+	      {
+	        throw new RuntimeException("Cannot create a resource for '" + uri + "'; a registered resource factory is needed");
+	      }
+
+	      demandLoadHelper(resource);
+
+	      if (map != null)
+	      {
+	        map.put(uri, resource);
+	      }      
+	      return resource;
+	    }
+
+	    return null;
+	  
 	}
 
 	
@@ -270,5 +564,10 @@
 		if (getURIResourceMap() != null)
 			getURIResourceMap().clear();
 	}
+	
+	protected Resource demandCreateResource(URI uri, Factory resourceFactory) {
+		// TODO Auto-generated method stub
+		return createResource(uri,resourceFactory);
+	}
 
 }
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/CharacterUtil.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/CharacterUtil.java
new file mode 100644
index 0000000..d452b01
--- /dev/null
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/CharacterUtil.java
@@ -0,0 +1,279 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/*
+
+
+ */
+package org.eclipse.jem.util;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import com.ibm.icu.text.UTF16;
+ 
+
+/**
+ * Static helper to handle characters in the new UTF multi-char format.
+ * It is needed because ICU4J currently doesn't handle some correctly yet that we
+ * need to have working. As ICU4J gets them working, the methods here will become
+ * deprecated.
+ * 
+ * @since 1.2.0
+ */
+public class CharacterUtil {
+
+	private CharacterUtil() {
+		
+	}
+	
+	
+	/**
+	 * TODO So until ICU4J does work correctly this util will be needed. It will
+	 * stay around because it is API, but at that time it will be marked deprecated. It should
+	 * also then reroute to ICU4J instead of doing the method reflections.
+	 */
+	private static Method METHOD_JAVA_IDENTIFIER_START, METHOD_JAVA_IDENTIFIER_PART;
+	
+	static {
+		// Try to get the Character.isJavaIdentifier(int) method. If there, then we are in 1.5 or above. Else use the char form.
+		try {
+			METHOD_JAVA_IDENTIFIER_START = Character.class.getMethod("isJavaIdentifierStart", new Class[] {Integer.TYPE});
+		} catch (SecurityException e) {
+			// Default to use (char) type instead.
+			METHOD_JAVA_IDENTIFIER_START = null;
+		} catch (NoSuchMethodException e) {
+			// Default to use (char) type instead.
+			METHOD_JAVA_IDENTIFIER_START = null;
+		}
+		try {
+			METHOD_JAVA_IDENTIFIER_PART = Character.class.getMethod("isJavaIdentifierPart", new Class[] {Integer.TYPE});
+		} catch (SecurityException e) {
+			// Default to use (char) type instead.
+			METHOD_JAVA_IDENTIFIER_PART = null;
+		} catch (NoSuchMethodException e) {
+			// Default to use (char) type instead.
+			METHOD_JAVA_IDENTIFIER_PART = null;
+		}		
+	}
+
+	/**
+	 * Is start of java identifier
+	 * @param intChar int character (UTF multi-char is valid)
+	 * @return <code>true</code> if start of java identifier.
+	 * 
+	 * @see Character#isJavaIdentifierStart(char)
+	 * @since 1.2.0
+	 */
+	public static boolean isJavaIdentifierStart(int intChar) {
+		if (METHOD_JAVA_IDENTIFIER_START != null) {
+			try {
+				return ((Boolean) METHOD_JAVA_IDENTIFIER_START.invoke(null, new Object[] {new Integer(intChar)})).booleanValue();
+			} catch (IllegalArgumentException e) {
+			} catch (IllegalAccessException e) {
+			} catch (InvocationTargetException e) {
+			}
+		}
+		return Character.isJavaIdentifierStart((char) intChar);
+	}
+	
+	/**
+	 * Is start of java identifier
+	 * @param intChar int character (UTF multi-char is valid)
+	 * @return <code>true</code> if start of java identifier.
+	 * 
+	 * @see Character#isJavaIdentifierStart(char)
+	 * @since 1.2.0
+	 */
+	public static boolean isJavaIdentifierPart(int intChar) {
+		if (METHOD_JAVA_IDENTIFIER_PART != null) {
+			try {
+				return ((Boolean) METHOD_JAVA_IDENTIFIER_PART.invoke(null, new Object[] {new Integer(intChar)})).booleanValue();
+			} catch (IllegalArgumentException e) {
+			} catch (IllegalAccessException e) {
+			} catch (InvocationTargetException e) {
+			}
+		}
+		return Character.isJavaIdentifierPart((char) intChar);
+	}
+	
+	public static abstract class AbstractCharIterator {
+
+		
+		protected final CharSequence charSeq;
+		private int pos = 0;
+		private int lastCharIndex = 0;
+
+		/**
+		 * Create with a string.
+		 * @param charSeq
+		 * 
+		 * @since 1.2.0
+		 */
+		public AbstractCharIterator(CharSequence charSeq) {
+			this.charSeq = charSeq;
+		}
+		
+		/**
+		 * Set the next char index.
+		 * @param index
+		 * 
+		 * @since 1.2.0
+		 */
+		public void setIndex(int index) {
+			pos = index;
+		}
+
+		/**
+		 * Has another char.
+		 * @return <code>true</code> if there is another char to return.
+		 * 
+		 * @since 1.2.0
+		 */
+		public boolean hasNext() {
+			return pos < charSeq.length();
+		}
+		
+		/**
+		 * Has another char before the current position. Doing previous
+		 * will return the char that was just returned.
+		 * @return
+		 * 
+		 * @since 1.2.0
+		 */
+		public boolean hasPrevious() {
+			return pos > 0;
+		}
+		
+		/**
+		 * Return next char from the one that was just returned.
+		 * @return next char.
+		 * 
+		 * @since 1.2.0
+		 */
+		public int next() {
+			if (!hasNext())
+				throw new IllegalStateException();
+			
+			int next = utfCharAt(pos);
+			lastCharIndex = pos;
+			pos += UTF16.getCharCount(next);
+			return next;
+		}
+		
+		/**
+		 * Return the UTF-32 char at the given position.
+		 * @param pos
+		 * @return
+		 * 
+		 * @since 1.2.0
+		 */
+		protected abstract int utfCharAt(int pos);
+		
+		/**
+		 * Return the previous character from the one that was just returned.
+		 * @return
+		 * 
+		 * @since 1.2.0
+		 */
+		public int previous() {
+			if (!hasPrevious())
+				throw new IllegalStateException();
+
+			int next;
+			if (UTF16.isTrailSurrogate(charSeq.charAt(--pos))) {
+				if (pos > 0)
+					next = utfCharAt(--pos);
+				else
+					next = charSeq.charAt(pos);
+			} else {
+				next = charSeq.charAt(pos);
+			}
+			lastCharIndex = pos;
+			return next;
+		}
+		
+		/**
+		 * Return the UTF16 character position of the char that was just returned from either
+		 * previous or next.
+		 * This is the (char) position not the
+		 * position of logical int chars returned. For example a standard string of
+		 * <code>"abc"</code> the position of the char 'b' is 1. But take the string
+		 * <code>"ab1b2c"</code> where "b1b2" is one UTF-32 char, then the position
+		 * of 'c' is 3. It would not be 2, which is what the logical char position
+		 * would be if taking UFT32 into account.
+		 * @return
+		 * 
+		 * @since 1.2.0
+		 */
+		public int getPosition() {
+			return lastCharIndex;
+		}
+	
+	}
+	
+	/**
+	 * Special char iterator that returns ints instead of chars for
+	 * walking strings that can contain UTF multi-chars. This is
+	 * a limited version of {@link java.text.CharacterIterator}.
+	 * 
+	 * @since 1.2.0
+	 */
+	public static class StringIterator extends AbstractCharIterator {
+		
+
+		/**
+		 * Create with a string.
+		 * @param str
+		 * 
+		 * @since 1.2.0
+		 */
+		public StringIterator(String str) {
+			super(str);
+		}
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.jem.util.CharacterUtil.AbstractCharIterator#utfCharAt(int)
+		 */
+		protected int utfCharAt(int pos) {
+			return UTF16.charAt((String) charSeq, pos);
+		}
+		
+	}
+	
+	/**
+	 * Special char iterator that returns ints instead of chars for
+	 * walking strings that can contain UTF multi-chars. This is
+	 * a limited version of {@link java.text.CharacterIterator}.
+	 * 
+	 * @since 1.2.0
+	 */
+	public static class StringBufferIterator extends AbstractCharIterator {
+		
+
+		/**
+		 * Create with a string.
+		 * @param strBuffer
+		 * 
+		 * @since 1.2.0
+		 */
+		public StringBufferIterator(StringBuffer strBuffer) {
+			super(strBuffer);
+		}
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.jem.util.CharacterUtil.AbstractCharIterator#utfCharAt(int)
+		 */
+		protected int utfCharAt(int pos) {
+			return UTF16.charAt((StringBuffer) charSeq, pos);
+		}
+		
+	}	
+}
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/PerformanceMonitorUtil.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/PerformanceMonitorUtil.java
index a76fdd0..e6f3a1b 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/PerformanceMonitorUtil.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/PerformanceMonitorUtil.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: PerformanceMonitorUtil.java,v $
- *  $Revision: 1.7 $  $Date: 2005/08/24 21:10:34 $ 
+
+
  */
 package org.eclipse.jem.util;
 import java.util.EventObject;
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/PresentPerformanceMonitor.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/PresentPerformanceMonitor.java
index 3ee5b05..d021cd5 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/PresentPerformanceMonitor.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/PresentPerformanceMonitor.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: PresentPerformanceMonitor.java,v $
- *  $Revision: 1.5 $  $Date: 2005/08/24 21:10:34 $ 
+
+
  */
 package org.eclipse.jem.util;
 import org.eclipse.perfmsr.core.IPerformanceMonitor;
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/RegistryReader.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/RegistryReader.java
index 94abc28..37e8277 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/RegistryReader.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/RegistryReader.java
@@ -1,16 +1,16 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
  *  $$RCSfile: RegistryReader.java,v $$
- *  $$Revision: 1.3 $$  $$Date: 2005/05/18 21:58:34 $$ 
+ *  $$Revision: 1.5 $$  $$Date: 2006/05/17 20:13:45 $$ 
  */
 package org.eclipse.jem.util;
 import org.eclipse.core.runtime.*;
@@ -46,7 +46,7 @@
 			IExtension extension = configurationElement.getDeclaringExtension();
 
 			if (extension != null)
-				pluginId = extension.getNamespace();
+				pluginId = extension.getContributor().getName();
 		}
 
 		return pluginId;
@@ -93,7 +93,7 @@
 	protected void logError(IConfigurationElement element, String text) {
 		IExtension extension = element.getDeclaringExtension();
 		StringBuffer buf = new StringBuffer();
-		buf.append("Plugin " + extension.getNamespace() + ", extension " + extension.getExtensionPointUniqueIdentifier()); //$NON-NLS-1$ //$NON-NLS-2$
+		buf.append("Plugin " + extension.getContributor().getName() + ", extension " + extension.getExtensionPointUniqueIdentifier()); //$NON-NLS-1$ //$NON-NLS-2$
 		buf.append("\n" + text); //$NON-NLS-1$
 		Logger.getLogger().logError(buf.toString());
 	}
@@ -153,4 +153,4 @@
 			systemBundle = Platform.getBundle("org.eclipse.osgi"); //$NON-NLS-1$
 		return systemBundle;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/TimerTests.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/TimerTests.java
index f95197e..7524f78 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/TimerTests.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/TimerTests.java
@@ -1,16 +1,16 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2006 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: TimerTests.java,v $
- *  $Revision: 1.5 $  $Date: 2005/08/24 21:10:34 $ 
+
+
  */
 package org.eclipse.jem.util;
 
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/UIContextDetermination.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/UIContextDetermination.java
index 45e754b..8955882 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/UIContextDetermination.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/UIContextDetermination.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 /*
  *  $$RCSfile: UIContextDetermination.java,v $$
- *  $$Revision: 1.3 $$  $$Date: 2005/05/18 21:58:34 $$ 
+ *  $$Revision: 1.5 $$  $$Date: 2007/04/10 01:09:36 $$ 
  */
 package org.eclipse.jem.util;
 import java.util.HashMap;
@@ -37,7 +37,7 @@
 
 	public static final int HEADLESS_CONTEXT = 102;
 
-	public static final int UI_CONTEXT = 100;
+	public static final int UI_CONTEXT = 101;
 
 	private static Map cachedExtensions = null;
 
@@ -174,12 +174,13 @@
 			if (element.getName().equals(UI_TESTER_ELEMENT)) {
 				result = true;
 				try {
-					if (canCreateExecutableExtension(element)) {
+					// Don't bother running tester it if we already processed one extension that returned true.
+					if (currentContext != UI_CONTEXT && canCreateExecutableExtension(element)) {
 						UITester tester = (UITester) element.createExecutableExtension(UI_TESTER_CLASSNAME_ATTR);
 						if (tester.isCurrentContextUI())
 							currentContext = UI_CONTEXT;
 					}
-				} catch (Throwable t) {
+				} catch (Exception t) {
 					Logger.getLogger().log("UIContextDetermination is proceeding in HEADLESS mode"); //$NON-NLS-1$
 				}
 			}
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/FlexibleProjectResourceSet.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/FlexibleProjectResourceSet.java
new file mode 100644
index 0000000..1e231f0
--- /dev/null
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/FlexibleProjectResourceSet.java
@@ -0,0 +1,68 @@
+package org.eclipse.jem.util.emf.workbench;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.Resource.Factory;
+
+
+public interface FlexibleProjectResourceSet extends ProjectResourceSet {
+	
+	
+	/**
+	   * Returns the resource resolved by the URI.
+	   * <p>
+	   * A resource set is expected to implement the following strategy 
+	   * in order to resolve the given URI to a resource.
+	   * First it uses it's {@link #getURIConverter URI converter} to {@link URIConverter#normalize normalize} the URI 
+	   * and then to compare it with the normalized URI of each resource;
+	   * if it finds a match, 
+	   * that resource becomes the result.
+	   * Failing that,
+	   * it {@link org.eclipse.emf.ecore.resource.impl.ResourceSetImpl#delegatedGetResource delegates} 
+	   * to allow the URI to be resolved elsewhere.
+	   * For example, 
+	   * the {@link org.eclipse.emf.ecore.EPackage.Registry#INSTANCE package registry}
+	   * is used to {@link org.eclipse.emf.ecore.EPackage.Registry#getEPackage resolve} 
+	   * the {@link org.eclipse.emf.ecore.EPackage namespace URI} of a package
+	   * to the static instance of that package.
+	   * So the important point is that an arbitrary implementation may resolve the URI to any resource,
+	   * not necessarily to one contained by this particular resource set.
+	   * If the delegation step fails to provide a result,
+	   * and if <code>loadOnDemand</code> is <code>true</code>,
+	   * a resource is {@link org.eclipse.emf.ecore.resource.impl.ResourceSetImpl#demandCreateResource created} 
+	   * and that resource becomes the result.
+	   * If <code>loadOnDemand</code> is <code>true</code>
+	   * and the result resource is not {@link Resource#isLoaded loaded}, 
+	   * it will be {@link org.eclipse.emf.ecore.resource.impl.ResourceSetImpl#demandLoad loaded} before it is returned.
+	   * </p>
+	   * @param uri the URI to resolve.
+	   * @param loadOnDemand whether to create and load the resource, if it doesn't already exists.
+	   * @param registeredFactory that is used to create resource if needed 
+	   * @return the resource resolved by the URI, or <code>null</code> if there isn't one and it's not being demand loaded.
+	   * @throws RuntimeException if a resource can't be demand created.
+	   * @throws org.eclipse.emf.common.util.WrappedException if a problem occurs during demand load.
+	   * @since 2.1
+	   */
+	
+	Resource getResource(URI uri, boolean loadOnDemand, Factory registeredFactory);
+	
+	/**
+	   * Creates a new resource, of the appropriate type, and returns it.
+	   * <p>
+	   * It delegates to the resource factory {@link #getResourceFactoryRegistry registry} 
+	   * to determine the {@link Resource.Factory.Registry#getFactory correct} factory,
+	   * and then it uses that factory to {@link Resource.Factory#createResource create} the resource
+	   * and add it to the {@link #getResources contents}.
+	   * If there is no registered factory, <code>null</code> will be returned;
+	   * when running within Eclipse,
+	   * a default XMI factory will be registered,
+	   * and this will never return <code>null</code>.
+	   * </p>
+	   * @param uri the URI of the resource to create.
+	   * @param resourceFactory 
+	   * @return a new resource, or <code>null</code> if no factory is registered.
+	   */
+	
+	public Resource createResource(URI uri, Resource.Factory resourceFactory);
+
+}
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectResourceSet.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectResourceSet.java
index 68c9735..2c97699 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectResourceSet.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectResourceSet.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 /*
  *  $$RCSfile: ProjectResourceSet.java,v $$
- *  $$Revision: 1.3 $$  $$Date: 2005/02/15 23:04:14 $$ 
+ *  $$Revision: 1.5 $$  $$Date: 2007/08/30 02:37:05 $$ 
  */
 package org.eclipse.jem.util.emf.workbench;
 
@@ -114,4 +114,6 @@
 	 * @since 1.0.0
 	 */
 	void resetNormalizedURICache();
+
+
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectUtilities.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectUtilities.java
index b339d88..eae2e81 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectUtilities.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectUtilities.java
@@ -10,18 +10,20 @@
  *******************************************************************************/
 /*
  *  $$RCSfile: ProjectUtilities.java,v $$
- *  $$Revision: 1.4 $$  $$Date: 2005/05/11 19:01:24 $$ 
+ *  $$Revision: 1.6 $$  $$Date: 2008/03/05 19:43:18 $$ 
  */
 
 package org.eclipse.jem.util.emf.workbench;
 
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.logging.Level;
 
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.*;
 
@@ -283,7 +285,17 @@
 	public static IProject getProject(EObject aRefObject) {
 		if (aRefObject != null) {
 			Resource resource = aRefObject.eResource();
-			return getProject(resource);
+			if (resource != null)
+				return getProject(resource);
+		}
+		return null;
+	}
+	
+	public static IFile getPlatformFile(URI uri) {
+		if (WorkbenchResourceHelperBase.isPlatformResourceURI(uri)) {
+			String fileString = URI.decode(uri.path());
+			fileString = fileString.substring(JEMUtilPlugin.PLATFORM_RESOURCE.length() + 1);
+			return WorkbenchResourceHelperBase.getWorkspace().getRoot().getFile(new Path(fileString));
 		}
 		return null;
 	}
@@ -298,6 +310,15 @@
 	 */
 	public static IProject getProject(Resource resource) {
 		ResourceSet set = resource == null ? null : resource.getResourceSet();
+		if (set == null) {
+			URI uri = resource.getURI();
+			if (uri == null) return null;
+			IFile file = getPlatformFile(resource.getURI());
+			if (file == null) 
+				return null;
+			return file.getProject();
+		}
+			
 		if (set instanceof ProjectResourceSet)
 			return ((ProjectResourceSet) set).getProject();
 		URIConverter converter = set == null ? null : set.getURIConverter();
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ResourceSetWorkbenchSynchronizer.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ResourceSetWorkbenchSynchronizer.java
index 1781936..1cec597 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ResourceSetWorkbenchSynchronizer.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ResourceSetWorkbenchSynchronizer.java
@@ -1,16 +1,16 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
  *  $$RCSfile: ResourceSetWorkbenchSynchronizer.java,v $$
- *  $$Revision: 1.2 $$  $$Date: 2005/02/15 23:04:14 $$ 
+ *  $$Revision: 1.4 $$  $$Date: 2006/05/17 20:13:45 $$ 
  */
 
 package org.eclipse.jem.util.emf.workbench;
@@ -79,11 +79,12 @@
 		currentProjectDelta = null;
 		if ((currentEventType == IResourceChangeEvent.PRE_CLOSE || currentEventType == IResourceChangeEvent.PRE_DELETE)
 				&& event.getResource().equals(getProject())) {
-			release();
 			notifyExtendersOfClose();
+			release();
 		}
 	}
 
+
 	protected void notifyExtendersIfNecessary() {
 		if (currentEventType != IResourceChangeEvent.POST_CHANGE || extenders == null || currentProjectDelta == null)
 			return;
@@ -188,4 +189,4 @@
 		//Default is do nothing
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/WorkbenchResourceHelperBase.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/WorkbenchResourceHelperBase.java
index 2601650..f526237 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/WorkbenchResourceHelperBase.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/WorkbenchResourceHelperBase.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 /*
  *  $$RCSfile: WorkbenchResourceHelperBase.java,v $$
- *  $$Revision: 1.4 $$  $$Date: 2005/10/14 20:57:31 $$ 
+ *  $$Revision: 1.6 $$  $$Date: 2008/03/12 14:21:39 $$ 
  */
 package org.eclipse.jem.util.emf.workbench;
 
@@ -624,7 +624,7 @@
 		return primIsResourceNotFound(excep);
 	}
 
-	private static boolean primIsResourceNotFound(Exception excep) {
+	private static boolean primIsResourceNotFound(Throwable excep) {
 		if (excep instanceof CoreException) {
 			IStatus status = ((CoreException) excep).getStatus();
 			return status.getCode() == IResourceStatus.RESOURCE_NOT_FOUND && ResourcesPlugin.PI_RESOURCES.equals(status.getPlugin());
@@ -640,7 +640,7 @@
 	 * @since 1.0.0
 	 */
 	public static boolean isResourceNotFound(Resource.IOWrappedException wrappedEx) {
-		return primIsResourceNotFound(wrappedEx.getWrappedException());
+		return primIsResourceNotFound(wrappedEx.getCause());
 	}
 
 	/**
@@ -688,6 +688,7 @@
 	 * @since 1.0.0
 	 */
 	public static boolean isPlatformPluginResourceURI(URI uri) {
+		if (uri == null) return false;
 		return JEMUtilPlugin.PLATFORM_PROTOCOL.equals(uri.scheme()) && JEMUtilPlugin.PLATFORM_PLUGIN.equals(uri.segment(0));
 	}
 
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/WorkbenchURIConverterImpl.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/WorkbenchURIConverterImpl.java
index ec323b5..6365551 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/WorkbenchURIConverterImpl.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/WorkbenchURIConverterImpl.java
@@ -1,16 +1,16 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
  *  $$RCSfile: WorkbenchURIConverterImpl.java,v $$
- *  $$Revision: 1.4 $$  $$Date: 2005/05/11 16:11:09 $$ 
+ *  $$Revision: 1.6 $$  $$Date: 2006/05/17 20:13:45 $$ 
  */
 package org.eclipse.jem.util.emf.workbench;
 
@@ -494,7 +494,7 @@
 	public InputStream createPlatformResourceInputStream(String platformResourcePath) throws IOException {
 		IFile file = WORKSPACE_ROOT.getFile(new Path(platformResourcePath));
 		try {
-			if (!file.isLocal(IResource.DEPTH_ONE) || !file.isSynchronized(IResource.DEPTH_ONE)) {
+			if (!file.isSynchronized(IResource.DEPTH_ONE)) {
 				try {
 					File iofile = file.getFullPath().toFile();
 					if (iofile.exists() || file.exists())
@@ -511,4 +511,4 @@
 		}		
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/AbstractWorkBenchRenderer.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/AbstractWorkBenchRenderer.java
index a3f709c..b2c1473 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/AbstractWorkBenchRenderer.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/AbstractWorkBenchRenderer.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: AbstractWorkBenchRenderer.java,v $
- *  $Revision: 1.4 $  $Date: 2005/06/24 21:22:25 $ 
+
+
  */
 package org.eclipse.jem.util.logger.proxyrender;
 
@@ -93,7 +93,7 @@
 		} catch (NoSuchFieldException e) {
 		} catch (IllegalAccessException e) {
 		}
-		consoleLogOn = consologPropertyName != null && "true".equals(System.getProperty(consologPropertyName)) ; 
+		consoleLogOn = consologPropertyName != null && "true".equals(System.getProperty(consologPropertyName)) ;  //$NON-NLS-1$
 	}
 
 	/*
@@ -189,7 +189,7 @@
 				return WORKBENCH_DESCRIPTION;
 			} else
 				return NOLOG_DESCRIPTION;
-		} catch (Throwable t) {
+		} catch (Exception t) {
 			return NOLOG_DESCRIPTION;
 		}
 	}
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/ConsoleLogRenderer.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/ConsoleLogRenderer.java
index 90b2963..0810e2d 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/ConsoleLogRenderer.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/ConsoleLogRenderer.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: ConsoleLogRenderer.java,v $
- *  $Revision: 1.2 $  $Date: 2005/02/15 23:04:14 $ 
+
+
  */
 package org.eclipse.jem.util.logger.proxyrender;
 
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/DefaultPluginTraceRenderer.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/DefaultPluginTraceRenderer.java
index bedf203..0473318 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/DefaultPluginTraceRenderer.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/DefaultPluginTraceRenderer.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: DefaultPluginTraceRenderer.java,v $
- *  $Revision: 1.2 $  $Date: 2005/02/15 23:04:14 $ 
+
+
  */
 package org.eclipse.jem.util.logger.proxyrender;
 
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/EclipseLogger.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/EclipseLogger.java
index 9e40f90..8591267 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/EclipseLogger.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/EclipseLogger.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: EclipseLogger.java,v $
- *  $Revision: 1.4 $  $Date: 2005/08/24 21:10:34 $ 
+
+
  */
 package org.eclipse.jem.util.logger.proxyrender;
 
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/IMsgLogger.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/IMsgLogger.java
index 972ecdd..58f45d5 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/IMsgLogger.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/IMsgLogger.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: IMsgLogger.java,v $
- *  $Revision: 1.2 $  $Date: 2005/02/15 23:04:14 $ 
+
+
  */
 package org.eclipse.jem.util.logger.proxyrender;
 
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/plugin/JEMUtilPlugin.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/plugin/JEMUtilPlugin.java
index 0f0ed91..a7b9b8f 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/plugin/JEMUtilPlugin.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/plugin/JEMUtilPlugin.java
@@ -1,16 +1,16 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
  *  $$RCSfile: JEMUtilPlugin.java,v $$
- *  $$Revision: 1.3 $$  $$Date: 2005/06/28 20:13:16 $$ 
+ *  $$Revision: 1.5 $$  $$Date: 2006/05/17 20:13:45 $$ 
  */
 package org.eclipse.jem.util.plugin;
 
@@ -391,9 +391,9 @@
 		String[] names = new String[extensions.length];
 		if (extensions.length > 0) {
 			for (int i = 0; i < extensions.length; i++)
-				names[i] = extensions[i].getNamespace();
+				names[i] = extensions[i].getContributor().getName();
 		}
 		return names;
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.jem.util/org.eclipse.perfmsr.core.stub/src/org/eclipse/perfmsr/core/PerfMsrCorePlugin.java b/plugins/org.eclipse.jem.util/org.eclipse.perfmsr.core.stub/src/org/eclipse/perfmsr/core/PerfMsrCorePlugin.java
index 2b86e9e..655ba2a 100644
--- a/plugins/org.eclipse.jem.util/org.eclipse.perfmsr.core.stub/src/org/eclipse/perfmsr/core/PerfMsrCorePlugin.java
+++ b/plugins/org.eclipse.jem.util/org.eclipse.perfmsr.core.stub/src/org/eclipse/perfmsr/core/PerfMsrCorePlugin.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: PerfMsrCorePlugin.java,v $
- *  $Revision: 1.2 $  $Date: 2005/02/15 23:06:47 $ 
+
+
  */
 package org.eclipse.perfmsr.core;
 
diff --git a/plugins/org.eclipse.jem.util/org.eclipse.perfmsr.core.stub/src/org/eclipse/perfmsr/core/Upload.java b/plugins/org.eclipse.jem.util/org.eclipse.perfmsr.core.stub/src/org/eclipse/perfmsr/core/Upload.java
index c412f52..65fa677 100644
--- a/plugins/org.eclipse.jem.util/org.eclipse.perfmsr.core.stub/src/org/eclipse/perfmsr/core/Upload.java
+++ b/plugins/org.eclipse.jem.util/org.eclipse.perfmsr.core.stub/src/org/eclipse/perfmsr/core/Upload.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: Upload.java,v $
- *  $Revision: 1.2 $  $Date: 2005/02/15 23:06:47 $ 
+
+
  */
 package org.eclipse.perfmsr.core;
  
diff --git a/plugins/org.eclipse.jem.util/schema/uiContextSensitiveClass.exsd b/plugins/org.eclipse.jem.util/schema/uiContextSensitiveClass.exsd
index 7bcbfeb..df70e98 100644
--- a/plugins/org.eclipse.jem.util/schema/uiContextSensitiveClass.exsd
+++ b/plugins/org.eclipse.jem.util/schema/uiContextSensitiveClass.exsd
@@ -6,7 +6,19 @@
          <meta.schema plugin="org.eclipse.jem.util" id="uiContextSensitiveClass" name="UI Context Sensitive Class"/>
       </appInfo>
       <documentation>
-         Edit models provide a framework for managing a set of EMF resources within a unit of work.  For example, a workspace operation may affect a change to multiple EMF resources. Edit models provide basic services such as loads, saves (when necessary), and validate edit for the managed resources.  Edit models are reference counted, therefore a single instance of an edit model can be shared by more than one operation or editor.  By declaring an edit model, a plugin provider enables other components to contribute resources to be managed by that edit model.
+         Components are often designed in such a way that the &quot;Headless&quot; or non-graphical portions are separate from the Graphical User Interface (GUI) portions. Sometimes this is done to follow good design principles, other times there is a specific use case for doing so. When plugins follow this practice because they must vary their behavior based on whether they are running in a headless environment or a graphical environment, they often need to choose the correct implementation of a particular type. The org.eclipse.jem.util.uiContextSensitiveClass extension point provided by the JEM component solves exactly this problem.
+&lt;p&gt;    
+To use the extension point, you must provide two extensions that are linked by a key. The key is a unique String-based value that you will later use to instanitate your class.
+&lt;p&gt;
+The first usage of the extension specifies your key, and the Headless context, and the class that should be instantiated for this (key, context) pair. This means in the headless environment this class will be instantiated when requested.
+&lt;p&gt;
+The second extension specifies the UI context and the same key, but a different implementation designed for graphical environments. This means in the UI environment this other class will be instantiated when requested.
+&lt;p&gt;
+The actual request is done in your code via:
+&lt;pre&gt;
+IMyInterface instance = (IMyInterface) UIContextDetermination.createInstance(&quot;myKey&quot;);
+&lt;/pre&gt;
+where &lt;code&gt;&quot;myKey&quot;&lt;/code&gt; is the key used on both extensions. It will then choose either the UI or the Headless extension depending upon the context.
       </documentation>
    </annotation>
 
@@ -63,7 +75,7 @@
          <attribute name="context" use="required">
             <annotation>
                <documentation>
-                  One of &quot;UI&quot; or &quot;Headless&quot;
+                  One of &quot;UI&quot; or &quot;Headless&quot; This is case-sensitive. It must match exactly as shown here.
                </documentation>
             </annotation>
             <simpleType>
@@ -92,17 +104,38 @@
          <meta.section type="examples"/>
       </appInfo>
       <documentation>
-         &lt;br&gt;
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;extension&lt;br&gt;
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id=&quot;context.Sensitive.Class.workingCopyManager&quot;&lt;br&gt;
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name=&quot;Working&amp;nbsp;Copy&amp;nbsp;Manager&amp;nbsp;-&amp;nbsp;UI&amp;nbsp;Context&amp;nbsp;Class&quot;&lt;br&gt;
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;point=&quot;com.ibm.wtp.common.ui.ContextSensitiveClass&quot;&amp;gt;&lt;br&gt;
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;uiContextSensitiveClass&lt;br&gt;
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;context=&quot;UI&quot;&lt;br&gt;
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;key=&quot;workingCopyManager&quot;&lt;br&gt;
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;className=&quot;com.ibm.wtp.common.ui.WTPUIWorkingCopyManager&quot;&amp;gt;&lt;br&gt;
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/uiContextSensitiveClass&amp;gt;&lt;br&gt;
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/extension&amp;gt;&lt;br&gt;
+         Usage for the UI context:
+&lt;pre&gt;
+   &lt;extension
+       id=&quot;context.Sensitive.Class.workingCopyManager&quot;
+       name=&quot;Working Copy Manager - UI Context Class&quot;
+       point=&quot;org.eclipse.jem.util.ContextSensitiveClass&quot;&gt;
+     &lt;uiContextSensitiveClass
+       context=&quot;UI&quot;
+       key=&quot;workingCopyManager&quot;
+       className=&quot;com.ibm.wtp.common.ui.WTPUIWorkingCopyManager&quot;/&gt;
+   &lt;/extension&gt;
+&lt;/pre&gt;
+&lt;br&gt;
+Usage for the Headless context:
+&lt;pre&gt;
+   &lt;extension
+       id=&quot;context.Sensitive.Class.workingCopyManager&quot;
+       name=&quot;Working Copy Manager - Headless Context Class&quot;
+       point=&quot;org.eclipse.jem.util.ContextSensitiveClass&quot;&gt;
+     &lt;uiContextSensitiveClass
+         context=&quot;Headless&quot;
+         key=&quot;workingCopyManager&quot;
+         className=&quot;com.ibm.wtp.common.ui.WTPHeadlessWorkingCopyManager&quot;/&gt;
+   &lt;/extension&gt;
+&lt;/pre&gt;
+&lt;br&gt;
+And finally the retrieval of the class for the current context:
+
+&lt;pre&gt;
+IWorkingCopyManager manager = (IWorkingCopyManager) UIContextDetermination.createInstance(&quot;workingCopyManager&quot;);
+&lt;/pre&gt;
+
       </documentation>
    </annotation>
 
diff --git a/plugins/org.eclipse.jem.util/schema/uiTester.exsd b/plugins/org.eclipse.jem.util/schema/uiTester.exsd
index 48d74fc..729ab32 100644
--- a/plugins/org.eclipse.jem.util/schema/uiTester.exsd
+++ b/plugins/org.eclipse.jem.util/schema/uiTester.exsd
@@ -6,7 +6,15 @@
          <meta.schema plugin="org.eclipse.jem.util" id="uiTester" name="UI Tester"/>
       </appInfo>
       <documentation>
-         Edit models provide a framework for managing a set of EMF resources within a unit of work.  For example, a workspace operation may affect a change to multiple EMF resources. Edit models provide basic services such as loads, saves (when necessary), and validate edit for the managed resources.  Edit models are reference counted, therefore a single instance of an edit model can be shared by more than one operation or editor.  By declaring an edit model, a plugin provider enables other components to contribute resources to be managed by that edit model.
+         This is used to tell JEM that it is running in a non-HEADLESS environment. Typically UI environment is non-HEADLESS. The default if there are no implementers of this extension point that return true is HEADLESS.
+&lt;p&gt;
+A HEADLESS environment is typically a batch situation where there is no UI and the workspace is used for one operation and then terminated. Most headless tasks are done under one operation and the JavaReflectionSynchronizer may not have a chance to flush a bad reflection before the real type needs to be found and can be found. So what would happen is if a class was created during this one operation it would not be found because the notifications had not yet gone out. 
+&lt;p&gt;
+In a UI environment the operations are typically short and do only a few things and the results aren&apos;t needed until after the operation has completed. In that case it is more efficient to not keep checking if a class has appeared everytime a request is made, instead it will wait for the notification of the added class to appear before resetting the definition to allow checking again later.
+&lt;p&gt;
+If there is more than one implementer of this interface in the application, then it will go through each of them once until one returns true. As soon as one returns true it will stop and mark the application as being non-HEADLESS. This will be done only once for the application. It will not be again until the next session of the application.
+&lt;p&gt;
+This is typically an internal extension point only. The JEM UI plugin will provide an implementation that will return true if the Platform UI is active. So this will normally not be needed to be implemented by most customers.
       </documentation>
    </annotation>
 
@@ -42,15 +50,18 @@
    <element name="uiTester">
       <annotation>
          <documentation>
-            The declaration for an edit model to be used in the workspace.
+            The uiTester definition element.
          </documentation>
       </annotation>
       <complexType>
          <attribute name="className" type="string" use="required">
             <annotation>
                <documentation>
-                  A unique identifier for the edit model.
+                  The class name of the UITester for this extension. It must implement &lt;samp&gt;org.eclipse.jem.util.UITester&lt;/samp&gt;.
                </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.jem.util.UITester"/>
+               </appInfo>
             </annotation>
          </attribute>
       </complexType>
@@ -61,7 +72,7 @@
          <meta.section type="since"/>
       </appInfo>
       <documentation>
-         6.0
+         1.0.0
       </documentation>
    </annotation>
 
@@ -70,7 +81,16 @@
          <meta.section type="examples"/>
       </appInfo>
       <documentation>
-         [Enter extension point usage example here.]
+         The following is an example of an implementer: 
+
+&lt;p&gt;
+&lt;pre&gt;
+ &lt;extension point=&quot;org.eclipse.jem.util.uiTester&quot;&gt;
+  &lt;uiTester
+   className=&quot;com.example.UITesterImplementation&quot;/&gt;
+ &lt;/extension&gt;
+&lt;/pre&gt;
+&lt;/p&gt;
       </documentation>
    </annotation>
 
@@ -79,7 +99,7 @@
          <meta.section type="apiInfo"/>
       </appInfo>
       <documentation>
-         [Enter API information here.]
+         The &lt;samp&gt;className&lt;/samp&gt; attribute must be a fully-qualified class that implements the &lt;samp&gt;org.eclipse.jem.util.UITester&lt;/samp&gt; interface for the tester.
       </documentation>
    </annotation>
 
@@ -88,7 +108,7 @@
          <meta.section type="implementation"/>
       </appInfo>
       <documentation>
-         [Enter information about supplied implementation of this extension point.]
+         There is no default implementation for this class.
       </documentation>
    </annotation>
 
@@ -97,7 +117,11 @@
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         
+         Copyright (c) 2004, 2006 IBM Corporation and others.&lt;br&gt;
+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 
+&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
       </documentation>
    </annotation>
 
diff --git a/plugins/org.eclipse.wst.common.emf/.classpath b/plugins/org.eclipse.wst.common.emf/.classpath
index de9605d..96202d8 100644
--- a/plugins/org.eclipse.wst.common.emf/.classpath
+++ b/plugins/org.eclipse.wst.common.emf/.classpath
@@ -2,7 +2,11 @@
 <classpath>
 	<classpathentry kind="src" path="wtpemf/"/>
 	<classpathentry kind="src" path="workbench/"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<accessrules>
+			<accessrule kind="accessible" pattern="org/eclipse/wst/common/**"/>
+		</accessrules>
+	</classpathentry>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.wst.common.emf/.cvsignore b/plugins/org.eclipse.wst.common.emf/.cvsignore
index 2a090b6..26458b4 100644
--- a/plugins/org.eclipse.wst.common.emf/.cvsignore
+++ b/plugins/org.eclipse.wst.common.emf/.cvsignore
@@ -5,3 +5,4 @@
 org.eclipse.wst.common.emf_1.0.0.zip
 src.zip
 @dot
+javaCompiler...args
diff --git a/plugins/org.eclipse.wst.common.emf/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.common.emf/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..6c7418f
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.emf/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,63 @@
+#Sat Mar 24 02:06:02 EDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=ignore
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=error
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=error
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=ignore
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/plugins/org.eclipse.wst.common.emf/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.emf/META-INF/MANIFEST.MF
index 7be73d4..55d9425 100644
--- a/plugins/org.eclipse.wst.common.emf/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.emf/META-INF/MANIFEST.MF
@@ -1,18 +1,19 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
-Bundle-Name: EMF Utilities
+Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.common.emf; singleton:=true
-Bundle-Version: 1.0.0
+Bundle-Version: 1.1.200.qualifier
 Bundle-Activator: org.eclipse.wst.common.internal.emf.plugin.EcoreUtilitiesPlugin
-Bundle-Vendor: Eclipse.org
+Bundle-Vendor: %pluginProvider
 Bundle-Localization: plugin
-Export-Package: .,
- org.eclipse.wst.common.internal.emf.plugin,
- org.eclipse.wst.common.internal.emf.resource,
- org.eclipse.wst.common.internal.emf.utilities
-Require-Bundle: org.eclipse.emf.ecore.xmi,
- org.eclipse.wst.common.frameworks,
- org.eclipse.core.runtime,
- org.eclipse.core.resources,
- org.eclipse.jem.util
-Eclipse-AutoStart: true
+Export-Package: org.eclipse.wst.common.internal.emf.plugin;x-internal:=true,
+ org.eclipse.wst.common.internal.emf.resource;x-friends:="org.eclipse.wst.common.modulecore",
+ org.eclipse.wst.common.internal.emf.utilities;x-internal:=true
+Require-Bundle: org.eclipse.emf.ecore.xmi;bundle-version="[2.4.0,3.0.0)",
+ org.eclipse.wst.common.frameworks;bundle-version="[1.1.200,2.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.jem.util;bundle-version="[2.0.100,3.0.0)"
+Eclipse-LazyStart: true
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.wst.common.emf/about.html b/plugins/org.eclipse.wst.common.emf/about.html
index 6f6b96c..2199df3 100644
--- a/plugins/org.eclipse.wst.common.emf/about.html
+++ b/plugins/org.eclipse.wst.common.emf/about.html
@@ -1,22 +1,34 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
+<HTML>
+
 <head>
 <title>About</title>
 <meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
 </head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
 
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+<BODY lang="EN-US">
 
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
+<H3>About This Content</H3>
 
-</body>
-</html>
\ No newline at end of file
+<P>June, 2008</P>
+
+<H3>License</H3>
+
+<P>The Eclipse Foundation makes available all content in this plug-in 
+("Content"). Unless otherwise indicated below, the Content is provided to you 
+under the terms and conditions of the Eclipse Public License Version 1.0 
+("EPL"). A copy of the EPL is available at
+<A href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</A>. 
+For purposes of the EPL, "Program" will mean the Content.</P>
+
+<P>If you did not receive this Content directly from the Eclipse Foundation, the 
+Content is being redistributed by another party ("Redistributor") and different 
+terms and conditions may apply to your use of any object code in the Content. 
+Check the Redistributor’s license that was provided with the Content. If no such 
+license exists, contact the Redistributor. Unless otherwise indicated below, the 
+terms and conditions of the EPL still apply to any source code in the Content 
+and such source code may be obtained at
+<A href="http://www.eclipse.org/">http://www.eclipse.org/</A>.</P>
+
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.wst.common.emf/build.properties b/plugins/org.eclipse.wst.common.emf/build.properties
index a96c674..ed37cff 100644
--- a/plugins/org.eclipse.wst.common.emf/build.properties
+++ b/plugins/org.eclipse.wst.common.emf/build.properties
@@ -1,10 +1,10 @@
 ###############################################################################
-# Copyright (c) 2003, 2004 IBM Corporation and others.
+# Copyright (c) 2003, 2006 IBM Corporation and others.
 # 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:
 # IBM Corporation - initial API and implementation
 ###############################################################################
@@ -12,9 +12,11 @@
                META-INF/,\
                about.html,\
                plugin.properties,\
-               .
+               .,\
+               schema/
 jars.compile.order = .
-src.includes = component.xml
+src.includes = component.xml,\
+               schema/
 output.. = bin/
 source.. = wtpemf/,\
            workbench/
diff --git a/plugins/org.eclipse.wst.common.emf/plugin.properties b/plugins/org.eclipse.wst.common.emf/plugin.properties
index dda8cb4..fc83d04 100644
--- a/plugins/org.eclipse.wst.common.emf/plugin.properties
+++ b/plugins/org.eclipse.wst.common.emf/plugin.properties
@@ -1 +1,13 @@
-PackageURIMap=PackageURIMap
\ No newline at end of file
+###############################################################################
+# Copyright (c) 2005, 2006 IBM Corporation and others.
+# 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:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+PackageURIMap=PackageURIMap
+pluginName=EMF Utilities
+pluginProvider=Eclipse.org
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.emf/plugin.xml b/plugins/org.eclipse.wst.common.emf/plugin.xml
index 951b0b8..dde6ad8 100644
--- a/plugins/org.eclipse.wst.common.emf/plugin.xml
+++ b/plugins/org.eclipse.wst.common.emf/plugin.xml
@@ -2,7 +2,8 @@
 <?eclipse version="3.0"?>
 <plugin>
 
-     <extension-point id="packageURIMap" name="%PackageURIMap"/>
+     <extension-point id="packageURIMap" name="%PackageURIMap" schema="schema/packageURIMap.exsd"/>
+     <extension-point id="translatorExtension" name="translatorExtension" schema="schema/translatorExtension.exsd"/>
 
 <!-- Need to register the Ecore specific package mappings -->
    <extension
diff --git a/plugins/org.eclipse.wst.validation/xsds/validationHelper.exsd b/plugins/org.eclipse.wst.common.emf/schema/packageURIMap.exsd
similarity index 80%
rename from plugins/org.eclipse.wst.validation/xsds/validationHelper.exsd
rename to plugins/org.eclipse.wst.common.emf/schema/packageURIMap.exsd
index d6aece6..4f9d955 100644
--- a/plugins/org.eclipse.wst.validation/xsds/validationHelper.exsd
+++ b/plugins/org.eclipse.wst.common.emf/schema/packageURIMap.exsd
@@ -1,38 +1,38 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.wst.validation">
+<schema targetNamespace="org.eclipse.wst.common.emf">
 <annotation>
       <appInfo>
-         <meta.schema plugin="org.eclipse.wst.validation" id="validationHelper" name="Validation Helper"/>
+         <meta.schema plugin="org.eclipse.wst.common.emf" id="packageURIMap" name="%PackageURIMap"/>
       </appInfo>
       <documentation>
-         
+         This extension point is used to register package mappings.
       </documentation>
    </annotation>
 
    <element name="extension">
       <complexType>
          <sequence>
-            <element ref="validationHelper"/>
+            <element ref="map" minOccurs="1" maxOccurs="unbounded"/>
          </sequence>
          <attribute name="point" type="string" use="required">
             <annotation>
                <documentation>
-                  a fully qualified identifier of the target extension point
+                  
                </documentation>
             </annotation>
          </attribute>
          <attribute name="id" type="string">
             <annotation>
                <documentation>
-                  an optional identifier of the extension instance
+                  
                </documentation>
             </annotation>
          </attribute>
          <attribute name="name" type="string">
             <annotation>
                <documentation>
-                  an optional name of the extension instance
+                  
                </documentation>
                <appInfo>
                   <meta.attribute translatable="true"/>
@@ -42,16 +42,16 @@
       </complexType>
    </element>
 
-   <element name="validationHelper">
+   <element name="map">
       <complexType>
-         <attribute name="helperClass" type="string" use="required">
+         <attribute name="uri" type="string" use="required">
             <annotation>
                <documentation>
                   
                </documentation>
             </annotation>
          </attribute>
-         <attribute name="id" type="string" use="required">
+         <attribute name="prefix" type="string" use="required">
             <annotation>
                <documentation>
                   
@@ -75,7 +75,7 @@
          <meta.section type="examples"/>
       </appInfo>
       <documentation>
-         
+         [Enter extension point usage example here.]
       </documentation>
    </annotation>
 
@@ -84,7 +84,7 @@
          <meta.section type="apiInfo"/>
       </appInfo>
       <documentation>
-         
+         [Enter API information here.]
       </documentation>
    </annotation>
 
@@ -93,7 +93,7 @@
          <meta.section type="implementation"/>
       </appInfo>
       <documentation>
-         
+         [Enter information about supplied implementation of this extension point.]
       </documentation>
    </annotation>
 
diff --git a/plugins/org.eclipse.wst.common.emf/schema/translatorExtension.exsd b/plugins/org.eclipse.wst.common.emf/schema/translatorExtension.exsd
new file mode 100644
index 0000000..5aa9669
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.emf/schema/translatorExtension.exsd
@@ -0,0 +1,103 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.wst.common.emf">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.wst.common.emf" id="translatorExtension" name="translatorExtension"/>
+      </appInfo>
+      <documentation>
+         This is used to contribute child translators to the default translators in EMF2DOMAdapterImpl.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="translator"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="translator">
+      <complexType>
+         <attribute name="className" type="string" use="required">
+            <annotation>
+               <documentation>
+                  This is the fully qualified classname of the child translator.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2005 IBM Corporation and others.
+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
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/ResourceSynchronizedIsLoadingAdapter.java b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/ResourceSynchronizedIsLoadingAdapter.java
new file mode 100644
index 0000000..5034c7a
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/ResourceSynchronizedIsLoadingAdapter.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Oct 26, 2004
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.eclipse.wst.common.internal.emf;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.jobs.ILock;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.wst.common.internal.emf.utilities.ResourceIsLoadingAdapter;
+
+
+
+/**
+ * The ResourceSynchronizedIsLoadingAdapter is used to synchronize the loading
+ * of EMF resources. This is the Eclipse version of ResourceIsLoadingAdapter,
+ * and uses the Eclipse ILock technology to acquire a semaphore until the
+ * Resource is loaded. the waitForResourceToLoad() method will pause until
+ * either (a) the Resource has loaded, the Adapter is notified, and the
+ * semaphore is released or (b) the DELAY timeout is exceeded, which prevents
+ * full deadlock.
+ * 
+ * @author mdelder
+ */
+public class ResourceSynchronizedIsLoadingAdapter extends ResourceIsLoadingAdapter {
+
+	private final ILock loadingLock;
+
+	/**
+	 * The delay is default to 5 minutes. This is the upward threshhold. The
+	 * lock will wait up to DELAY milliseconds to acquire the lock, and bail
+	 * if not. It does not mean that it will wait DELAY milliseconds always.
+	 * In general, the wait should be almost instanteous -- just as long as
+	 * document loading remains speedy.
+	 */
+	private static final long DELAY = 300000;
+
+	public ResourceSynchronizedIsLoadingAdapter() {
+		loadingLock = Platform.getJobManager().newLock();
+		if (loadingLock != null)
+			loadingLock.acquire();
+	}
+
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.ibm.wtp.internal.emf.utilities.ResourceIsLoadingAdapter#waitForResourceToLoad()
+	 */
+	public void waitForResourceToLoad() {
+
+		if (loadingLock == null)
+			return;
+
+		boolean lockAcquired = false;
+		try {
+			if (loadingLock != null)
+				if (!(lockAcquired = loadingLock.acquire(DELAY)))
+					logWarning();
+		}
+		catch (InterruptedException e) {
+			// ignore, just continue
+		}
+		finally {
+			if (lockAcquired)
+				loadingLock.release();
+		}
+
+	}
+
+
+	/**
+	 * 
+	 */
+	private void logWarning() {
+		Notifier target = getTarget();
+		if (target == null || !(target instanceof Resource)) {
+			Resource resource = (Resource) target;
+			System.err.println("[WARNING] Could not acquire Semaphore Lock for Resource: \"" + resource.getURI() + "\" in " + getClass());
+		}
+
+	}
+
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.ibm.wtp.internal.emf.utilities.ResourceIsLoadingAdapter#notifyChanged(org.eclipse.emf.common.notify.Notification)
+	 */
+	public void notifyChanged(Notification notification) {
+
+		if (notification.getNotifier() != null) {
+			// listen for the remove of the loading adapter
+			if (isSetLoadedResourceNotification(notification)) {
+				if (loadingLock != null)
+					loadingLock.release();
+				removeIsLoadingSupport();
+			}
+		}
+	}
+
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.ibm.wtp.internal.emf.utilities.ResourceIsLoadingAdapter#forceRelease()
+	 */
+	public void forceRelease() {
+		if (loadingLock != null && loadingLock.getDepth() > 0)
+			loadingLock.release();
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/ResourceSynchronizedIsLoadingAdapterFactory.java b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/ResourceSynchronizedIsLoadingAdapterFactory.java
new file mode 100644
index 0000000..1990e8a
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/ResourceSynchronizedIsLoadingAdapterFactory.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Oct 26, 2004
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.eclipse.wst.common.internal.emf;
+
+import org.eclipse.wst.common.internal.emf.utilities.ResourceIsLoadingAdapter;
+import org.eclipse.wst.common.internal.emf.utilities.ResourceIsLoadingAdapterFactory;
+
+
+/**
+ * @author mdelder
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ResourceSynchronizedIsLoadingAdapterFactory extends ResourceIsLoadingAdapterFactory {
+
+    
+    /* (non-Javadoc)
+     * @see com.ibm.wtp.internal.emf.utilities.ResourceIsLoadingAdapterFactory#createResourceIsLoadingAdapter()
+     */
+    public ResourceIsLoadingAdapter createResourceIsLoadingAdapter() { 
+        return new ResourceSynchronizedIsLoadingAdapter();
+    }
+}
diff --git a/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/EcoreUtilitiesPlugin.java b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/EcoreUtilitiesPlugin.java
index 0f04416..1c24c05 100644
--- a/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/EcoreUtilitiesPlugin.java
+++ b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/EcoreUtilitiesPlugin.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -17,7 +17,9 @@
 package org.eclipse.wst.common.internal.emf.plugin;
 
 import org.eclipse.core.runtime.Plugin;
+import org.eclipse.wst.common.internal.emf.ResourceSynchronizedIsLoadingAdapterFactory;
 import org.eclipse.wst.common.internal.emf.resource.RendererFactory;
+import org.eclipse.wst.common.internal.emf.utilities.ResourceIsLoadingAdapterFactory;
 import org.osgi.framework.BundleContext;
 
 /**
@@ -28,6 +30,7 @@
  */
 public class EcoreUtilitiesPlugin extends Plugin {
 	public static final String ID = "org.eclipse.wst.common.emf"; //$NON-NLS-1$
+	public static final String TRANSLATOR_EXTENSTION_POINT = "translatorExtension"; //$NON-NLS-1$
 
 	/**
 	 * @param descriptor
@@ -46,5 +49,7 @@
 		RendererFactory.setDefaultHandler(PluginRendererFactoryDefaultHandler.INSTANCE);
 		PackageURIMapReader reader = new PackageURIMapReader();
 		reader.processExtensions();
+		//use a synchronized loading adapter factory
+		ResourceIsLoadingAdapterFactory.INSTANCE = new ResourceSynchronizedIsLoadingAdapterFactory();
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/PackageURIMapReader.java b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/PackageURIMapReader.java
index 68b9fe4..d1c39b0 100644
--- a/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/PackageURIMapReader.java
+++ b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/PackageURIMapReader.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -68,4 +68,4 @@
 		String uri = element.getAttribute(URI_ATT_NAME);
 		reg.registerPrefixToPackageURI(prefix, uri);
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/PluginRendererFactoryDefaultHandler.java b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/PluginRendererFactoryDefaultHandler.java
index c24392a..ee80757 100644
--- a/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/PluginRendererFactoryDefaultHandler.java
+++ b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/PluginRendererFactoryDefaultHandler.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -49,4 +49,4 @@
 	}
 
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/AbstractRendererImpl.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/AbstractRendererImpl.java
index 9112aef..cff83b7 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/AbstractRendererImpl.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/AbstractRendererImpl.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
- * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
 
@@ -149,4 +151,4 @@
 	public boolean isBatchMode() {
 		return false;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/CompatibilityXMIResourceImpl.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/CompatibilityXMIResourceImpl.java
index adc44b2..1b34804 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/CompatibilityXMIResourceImpl.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/CompatibilityXMIResourceImpl.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
- * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
 import java.io.IOException;
@@ -14,6 +16,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.InternalEObject;
@@ -21,8 +24,9 @@
 import org.eclipse.emf.ecore.xmi.XMLLoad;
 import org.eclipse.emf.ecore.xmi.XMLSave;
 import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
-import org.eclipse.wst.common.internal.emf.utilities.ExtendedEcoreUtil;
 import org.eclipse.wst.common.internal.emf.utilities.IDUtil;
+import org.eclipse.wst.common.internal.emf.utilities.ResourceIsLoadingAdapter;
+import org.eclipse.wst.common.internal.emf.utilities.ResourceIsLoadingAdapterFactory;
 
 
 public class CompatibilityXMIResourceImpl extends XMIResourceImpl implements CompatibilityXMIResource {
@@ -168,14 +172,12 @@
 	 *      java.util.Map)
 	 */
 	public final void doLoad(InputStream inputStream, Map options) throws IOException {
-		ExtendedEcoreUtil.addLoadingTag(this);
-		try {
-			basicDoLoad(inputStream, options);
-		} finally {
-			ExtendedEcoreUtil.removeLoadingTag(this);
-		}
+		basicDoLoad(inputStream, options);
 	}
 
+	/**
+	 * @deprecated Use {@link #doLoad(InputStream, Map)} instead.
+	 */
 	protected void basicDoLoad(InputStream inputStream, Map options) throws IOException {
 		super.doLoad(inputStream, options);
 	}
@@ -237,4 +239,102 @@
 			idToEObjectMap.remove(eObjectToIDMap.remove(eObject));
 		}
 	}
-}
\ No newline at end of file
+	
+	public void load(Map options) throws IOException {
+
+        ResourceIsLoadingAdapter adapter = null;
+        if (isLoaded) {
+            adapter = ResourceIsLoadingAdapter.findAdapter(this);
+            if (adapter != null) 
+                adapter.waitForResourceToLoad();
+            return;
+        }
+        synchronized (this) {            
+            adapter = ResourceIsLoadingAdapter.findAdapter(this);
+            if (adapter == null && !isLoaded) 
+                addSynchronizationLoadingAdapter();
+        }
+        if(adapter != null)
+            adapter.waitForResourceToLoad();
+        else {
+            try {
+                super.load(options);
+            } catch(IOException ioe) {
+                removeLoadingSynchronizationAdapter();
+                throw ioe;
+            } catch(RuntimeException re) {
+                removeLoadingSynchronizationAdapter();
+                throw re;
+            } catch(Error e) {
+                removeLoadingSynchronizationAdapter();
+                throw e;
+            }
+        }
+    }
+	
+	  /**
+     * 
+     */
+    protected void addSynchronizationLoadingAdapter() {
+        if (ResourceIsLoadingAdapter.findAdapter(this) == null)
+            eAdapters().add(ResourceIsLoadingAdapterFactory.INSTANCE.createResourceIsLoadingAdapter());
+    }
+
+    /**
+     * 
+     */
+    protected void removeLoadingSynchronizationAdapter() {
+        ResourceIsLoadingAdapter adapter = ResourceIsLoadingAdapter.findAdapter(this);
+        if (adapter != null) {
+            adapter.forceRelease();
+            eAdapters().remove(adapter);
+        }
+    }
+
+    /**
+     * Case 1: LOAD RESOURCE FROM DISK this.isLoaded == false AND isLoaded ==
+     * true (which means we entered the load() method, but have not completed
+     * the load), and we're loading from a resource on disk, then we add the
+     * adapter Case 2: RESOURCE CREATION (NOT A LOAD) Case 4: RESOURCE CREATION,
+     * UNLOADED, NEW CONTENTS (NOT A LOAD) Resource is created but not from a
+     * resource on disk, so contents is null AND not empty, so no adapter: THIS
+     * IS NOT A LOAD Case 3: RESOURCE HAS BEEN UNLOADED, BEING RELOADED FROM
+     * DISK Contents is NOT null, but it is Empty and the resource is being
+     * loaded from disk. We must add the adapter.
+     * 
+     */
+    public boolean isResourceBeingLoaded(boolean isLoaded) {
+        return (!this.isLoaded && isLoaded) && (contents == null || contents.isEmpty());
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.emf.ecore.resource.Resource#getContents()
+     */
+    public EList getContents() {
+        waitForResourceToLoadIfNecessary();
+        return super.getContents();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.emf.ecore.resource.impl.ResourceImpl#isLoaded()
+     */
+    public boolean isLoaded() {
+        waitForResourceToLoadIfNecessary();
+        return super.isLoaded();
+    }
+
+    /**
+     * 
+     */
+    protected final void waitForResourceToLoadIfNecessary() {
+        ResourceIsLoadingAdapter loadingAdapter = ResourceIsLoadingAdapter.findAdapter(this);
+        if (loadingAdapter != null) loadingAdapter.waitForResourceToLoad();
+    }
+
+
+
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/DefaultTranslatorFactory.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/DefaultTranslatorFactory.java
index 7518472..06abce5 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/DefaultTranslatorFactory.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/DefaultTranslatorFactory.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -98,4 +98,4 @@
 
 
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.java
index c5c7287..cd6a7a2 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.java
@@ -1,13 +1,17 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
- * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
@@ -33,6 +37,7 @@
 import org.eclipse.wst.common.internal.emf.utilities.FeatureValueConversionException;
 import org.eclipse.wst.common.internal.emf.utilities.Revisit;
 import org.eclipse.wst.common.internal.emf.utilities.StringUtil;
+import org.eclipse.wst.common.internal.emf.utilities.TranslatorService;
 import org.eclipse.wst.common.internal.emf.utilities.WFTUtilsResourceHandler;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
@@ -59,6 +64,9 @@
 	protected Translator[] childTranslators;
 
 	protected boolean isRoot = false;
+	
+	private static final String PLATFORM = "org.eclipse.core.runtime.Platform"; //$NON-NLS-1$
+	private static final String ISRUNNING = "isRunning"; //$NON-NLS-1$
 
 	private class DependencyAdapter extends org.eclipse.emf.common.notify.impl.AdapterImpl {
 
@@ -123,10 +131,36 @@
 	}
 
 	protected void initChildTranslators() {
-
 		List children = new ArrayList();
-		// TODO come up with translator extension mechanism
-		//children.add(AnnotationsTranslator.INSTANCE);
+		boolean isRunning = false; //is the OSGI platform running ?
+		try {
+			// If the Platform class can be found, then continue to check if the OSGI platform is running
+			Class clazz = Class.forName(PLATFORM);
+			Method m = clazz.getMethod(ISRUNNING, null);
+			isRunning = ((Boolean)m.invoke(clazz, null)).booleanValue();
+		} catch (ClassNotFoundException e) {
+		     // Ignore because this must be in a non_OSGI environment
+		} catch (SecurityException e) {
+			 // Ignore because this must be in a non_OSGI environment
+		} catch (NoSuchMethodException e) {
+			 // Ignore because this must be in a non_OSGI environment
+		} catch (IllegalArgumentException e) {
+			 // Ignore because this must be in a non_OSGI environment
+		} catch (IllegalAccessException e) {
+			 // Ignore because this must be in a non_OSGI environment
+		} catch (InvocationTargetException e) {
+			 // Ignore because this must be in a non_OSGI environment
+		}	
+		//Check for extended child translators because we are in OSGI mode
+		if (isRunning) {
+			Translator[] extendedChildren = TranslatorService.getInstance().getTranslators();
+	        for (int i = 0; i < extendedChildren.length; i++) {
+	        	if (extendedChildren[i] != null)
+	            	children.add(extendedChildren[i]);
+	        }
+		}
+		
+		
 		children.addAll(Arrays.asList(fTranslator.getChildren(getTarget(), fRenderer.getVersionID())));
 
 		VariableTranslatorFactory factory = fTranslator.getVariableTranslatorFactory();
@@ -189,9 +223,12 @@
 	}
 
 	protected String shortClassName(Object o) {
-		String cn = o.getClass().getName();
-		int i = cn.lastIndexOf('.');
-		return cn.substring(i + 1, cn.length());
+		if (o != null) {
+			String cn = o.getClass().getName();
+			int i = cn.lastIndexOf('.');
+			return cn.substring(i + 1, cn.length());
+		}
+		return null;
 	}
 
 	/*
@@ -293,7 +330,10 @@
 					continue;
 				// A node has been reordered in the list
 				Node reorderNode = adapter.getNode();
-				Node insertBeforeNode = (Node) domChildren.get(i);
+				Node insertBeforeNode = reorderNode;
+				if (i < domChildren.size() && domChildren.get(i) != reorderNode) {
+					insertBeforeNode = (Node) domChildren.get(i);
+				}
 				domChildren.remove(reorderNode);
 				domChildren.add(i, reorderNode);
 				if (reorderNode != insertBeforeNode) {
@@ -408,9 +448,11 @@
 		}
 
 		// Remove any remaining adapters.
-		for (; i < mofChildren.size();) {
-			removeMOFValue((EObject) mofChildren.get(i), map);
-		}
+		//make a copy so we remove all items - bug 192468 
+				Object[] childrenArray = mofChildren.toArray();
+				for (; i < childrenArray.length; i++) {
+					removeMOFValue((EObject) childrenArray[i], map);
+		 		}
 
 		// The adapters cannot be updated as they created. We must wait until
 		// all of the adapters are created and removed before updating,
@@ -614,7 +656,7 @@
 		try {
 			removeDOMChild(parentNode, childNode, false);
 			parentNode.insertBefore(childNode, insertBeforeNode);
-		} catch (Throwable e) {
+		} catch (Exception e) {
 			e.printStackTrace();
 		}
 	}
@@ -651,7 +693,7 @@
 			if (removeAdapter)
 				removeAdapters(childNode);
 			parentNode.removeChild(childNode);
-		} catch (Throwable e) { 
+		} catch (Exception e) { 
 			e.printStackTrace();
 		}
 	}
@@ -804,13 +846,15 @@
 
 		EMF2DOMAdapter adapter = primGetExistingAdapter(node);
 
-		if (adapter != null && adapter.isMOFProxy()) {
-			removeDOMAdapter(node, adapter);
-			adapter.getTarget().eAdapters().remove(adapter);
-			adapter = null;
-		}
-
-		if (adapter == null) {
+		if (adapter != null) {
+			if (adapter.isMOFProxy() || adapter.getTarget() == null) {
+				removeDOMAdapter(node, adapter);
+				if (adapter.getTarget() != null) {
+					adapter.getTarget().eAdapters().remove(adapter);
+				}
+				adapter = null;
+			}
+		} else {
 			adapter = primCreateAdapter(node, childMap);
 		}
 		return adapter;
@@ -963,7 +1007,8 @@
 			publicId = docType.getPublicId();
 			systemId = docType.getSystemId();
 		}
-		if (!(StringUtil.stringsEqual(publicId, resource.getPublicId()) && StringUtil.stringsEqual(systemId, resource.getSystemId())))
+		if ((!(StringUtil.stringsEqual(publicId, resource.getPublicId()) && StringUtil.stringsEqual(systemId, resource.getSystemId()))) || 
+				((resource.getPublicId() == null) || resource.getSystemId() == null))
 			resource.setDoctypeValues(publicId, systemId);
 	}
 
@@ -1109,6 +1154,7 @@
 		try {
 			return map.convertStringToValue(trimmedValue, emfObject);
 		} catch (FeatureValueConversionException ex) {
+			org.eclipse.jem.util.logger.proxy.Logger.getLogger().logError(ex);
 			handleFeatureValueConversionException(ex);
 			return null;
 		}
@@ -1167,7 +1213,7 @@
 	}
 
 	protected void handleInvalidMultiNodes(String nodeName) {
-		throw new IllegalStateException(WFTUtilsResourceHandler.getString(WFTUtilsResourceHandler.EMF2DOMAdapterImpl_ERROR_0, new Object[]{nodeName})); //$NON-NLS-1$
+		throw new IllegalStateException(WFTUtilsResourceHandler.getString(WFTUtilsResourceHandler.EMF2DOMAdapterImpl_ERROR_0, new Object[]{nodeName}));
 	}
 
 	/**
@@ -1672,12 +1718,25 @@
 		map.clearList(mofObject);
 
 		// Go through the list of nodes and update the MOF collection
+		int addIndex = 0;
 		for (int i = 0; i < nodeChildren.size(); i++) {
 			Node child = (Node) nodeChildren.get(i);
 			Object attributeValue = extractValue(child, map, mofObject);
-			if (attributeValue != null)
-				map.setMOFValue(mofObject, attributeValue, i);
-
+			boolean advanceAddIndex = true;
+			if (attributeValue != null){
+				if(map.getFeature() != null && map.getFeature().isUnique() && mofObject.eGet(map.getFeature()) != null && mofObject.eGet(map.getFeature()) instanceof List && ((List) mofObject.eGet(map.getFeature())).contains(attributeValue)){
+					advanceAddIndex = false;
+					String domName = map.domNameAndPath != null ? map.domNameAndPath : "attribute"; //$NON-NLS-1$
+					org.eclipse.jem.util.logger.proxy.Logger.getLogger().logError(new IllegalArgumentException("The 'no duplicates' constraint is violated by "+domName+" = "+attributeValue));
+					handleInvalidMultiNodes(child.getNodeName());
+				} else {
+					map.setMOFValue(mofObject, attributeValue, addIndex);
+				}
+				if(advanceAddIndex){
+					addIndex ++;
+				}
+			}
+			
 			// Adapt the node so update will occur.
 			addDOMAdapter(child);
 		}
@@ -1742,4 +1801,4 @@
 
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMRenderer.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMRenderer.java
index 206860d..53fbdc7 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMRenderer.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMRenderer.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
- * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
 import java.io.IOException;
@@ -261,4 +263,4 @@
 		return getResource().getVersionID();
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXDocumentHandler.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXDocumentHandler.java
index 1ec3dbe..a25bb63 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXDocumentHandler.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXDocumentHandler.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -207,4 +207,4 @@
 	//		//System.err.println(obj);
 	//	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXRenderer.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXRenderer.java
index 7bd2634..86f721f 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXRenderer.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXRenderer.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -172,4 +172,4 @@
 	public int getVersionID() {
 		return getResource().getVersionID();
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXWriter.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXWriter.java
index c5d0807..6955734 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXWriter.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXWriter.java
@@ -175,7 +175,7 @@
 	 * @return
 	 */
 	private boolean shouldRenderDomPath(EObject target, Translator currentChildTranslator, List mofChildren) {
-		return !currentChildTranslator.isEmptyContentSignificant() || (currentChildTranslator.shouldRenderEmptyDOMPath(target) || mofChildren.size() > 0);
+		return  (currentChildTranslator.shouldRenderEmptyDOMPath(target) || mofChildren.size() > 0);
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/FileNameResourceFactoryRegistry.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/FileNameResourceFactoryRegistry.java
index bdfd479..41b3dab 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/FileNameResourceFactoryRegistry.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/FileNameResourceFactoryRegistry.java
@@ -1,15 +1,17 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
- * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.resource.Resource;
@@ -18,11 +20,10 @@
 
 
 public abstract class FileNameResourceFactoryRegistry extends DefaultOverridableResourceFactoryRegistry {
-	//We are using two lists instead of a Map because we need to iterate
-	//the list of simpleFileNames quite a lot.
-	protected List simpleFileNames;
-	protected List simpleFileNameFactories;
 
+	private Map/*<String shortName, ResourceFactoryDescriptor>*/ descriptors = new HashMap(); 
+	private Map/*<ResourceFactoryDescriptor, Resource.Factory>*/ factories = new HashMap();
+	
 	public FileNameResourceFactoryRegistry() {
 		super();
 	}
@@ -33,58 +34,64 @@
 	 * @see org.eclipse.emf.ecore.resource.impl.ResourceFactoryRegistryImpl#getFactory(URI)
 	 */
 	protected Object getFileNameFactory(URI uri) {
-		if (simpleFileNames != null) {
-			String fileName = uri.lastSegment();
-			if (fileName != null) {
-				String key;
-				for (int i = 0; i < simpleFileNames.size(); i++) {
-					key = (String) simpleFileNames.get(i);
-					if (fileName.equals(key))
-						return simpleFileNameFactories.get(i);
-				}
-			}
+
+		if(uri != null) {
+			ResourceFactoryDescriptor descriptor = getDescriptor(uri);
+			
+			if(descriptor != null) {
+				return getFactory(descriptor);	
+			}	
 		}
 		return null;
+		
 	}
 
-	public Resource.Factory getFactory(URI uri) {
-		Object resourceFactory = getFileNameFactory(uri);
-		if (resourceFactory == null)
-			resourceFactory = super.getFactory(uri);
-		return (Resource.Factory) resourceFactory;
+	public synchronized Resource.Factory getFactory(URI uri) {
+		return getFactory(uri, null);
+	}
+
+	public Resource.Factory getFactory(URI uri, String contentType)
+	{
+		Resource.Factory resourceFactory = null;
+		if(uri != null && uri.lastSegment() != null) {
+			ResourceFactoryDescriptor descriptor = getDescriptor(uri);
+			
+			if(descriptor != null) {
+				resourceFactory = getFactory(descriptor);	
+			}	
+		}
+		if(resourceFactory == null)
+			resourceFactory = super.getFactory(uri, contentType);
+		return resourceFactory; 
 	}
 
 	/**
 	 * Register a file name representing the last segment of a URI with the corresponding
 	 * Resource.Factory.
 	 */
-	public void registerLastFileSegment(String aSimpleFileName, Resource.Factory aFactory) {
+	public synchronized void registerLastFileSegment(String aSimpleFileName, Resource.Factory aFactory) {
 		URI uri = URI.createURI(aSimpleFileName);
-		String lastSegment = uri.lastSegment();
-		int index = getFileNameIndexForAdd(lastSegment);
-		setFileName(lastSegment, index);
-		setFileNameFactory(aFactory, index);
+		String lastSegment = uri.lastSegment(); 
+		addDescriptor(new StaticResourceFactoryDescriptor(lastSegment, aFactory));		
+	} 
+
+	protected synchronized ResourceFactoryDescriptor getDescriptor(URI uri) {
+		return (ResourceFactoryDescriptor) descriptors.get(uri.lastSegment());
+	}
+	protected synchronized Map getDescriptors() {
+		return descriptors;
 	}
 
-	private int getFileNameIndexForAdd(String aSimpleFileName) {
-		if (simpleFileNames != null) {
-			int i = simpleFileNames.indexOf(aSimpleFileName);
-			if (i > -1)
-				return i;
-			return simpleFileNames.size();
+	protected final synchronized Resource.Factory getFactory(ResourceFactoryDescriptor descriptor) {  
+		Resource.Factory factory = (Factory) factories.get(descriptor);
+		if(factory == null) {
+			factories.put(descriptor, (factory = descriptor.createFactory()));
 		}
-		return 0;
+		return factory;
 	}
 
-	private void setFileNameFactory(Factory aFactory, int index) {
-		if (simpleFileNameFactories == null)
-			simpleFileNameFactories = new ArrayList();
-		simpleFileNameFactories.add(index, aFactory);
+	protected void addDescriptor(ResourceFactoryDescriptor descriptor) { 
+		descriptors.put(descriptor.getShortSegment(), descriptor);
 	}
-
-	private void setFileName(String aSimpleFileName, int index) {
-		if (simpleFileNames == null)
-			simpleFileNames = new ArrayList();
-		simpleFileNames.add(index, aSimpleFileName);
-	}
-}
\ No newline at end of file
+ 
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/IDTranslator.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/IDTranslator.java
index 15755f0..64bf6a0 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/IDTranslator.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/IDTranslator.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -72,4 +72,4 @@
 
 
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IMetaModelContext.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/IRootObjectResource.java
similarity index 60%
rename from plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IMetaModelContext.java
rename to plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/IRootObjectResource.java
index 37a9cfe..7048136 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IMetaModelContext.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/IRootObjectResource.java
@@ -1,17 +1,19 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
  * 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:
- * IBM Corporation - initial API and implementation
+ *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-package org.eclipse.wst.validation.internal.provisional.core;
+package org.eclipse.wst.common.internal.emf.resource;
 
-public interface IMetaModelContext extends IValidationContext {
-	
-	public Object getModel(String URI);
+import org.eclipse.emf.ecore.EObject;
+
+public interface IRootObjectResource {
+
+	public EObject getRootObject();
 
 }
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MappedXMIHelper.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MappedXMIHelper.java
index ac27864..f0939a2 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MappedXMIHelper.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MappedXMIHelper.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
- * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
 import java.util.HashMap;
@@ -292,4 +294,4 @@
 			return XMLHelper.DATATYPE_SINGLE;
 		return super.getFeatureKind(feature);
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MultiObjectTranslator.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MultiObjectTranslator.java
index abfcc83..91ed5bc 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MultiObjectTranslator.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MultiObjectTranslator.java
@@ -16,6 +16,7 @@
 
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EStructuralFeature;
+import org.w3c.dom.Node;
 
 /**
  * @author schacher
@@ -78,6 +79,15 @@
 		return false;
 	}
 
-
+	public boolean shouldIndentEndTag(Node node) {
+		if (node.getNodeName().equals(getDOMPath())) {
+			return super.shouldIndentEndTag(node);
+		}
+		Translator delegate = getDelegateFor(node.getNodeName(), null);
+		if (delegate != null) {
+			return delegate.shouldIndentEndTag(node);
+		}
+		return super.shouldIndentEndTag(node);
+	}
 
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/NamespaceTranslator.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/NamespaceTranslator.java
index b266883..3c23ed4 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/NamespaceTranslator.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/NamespaceTranslator.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -109,4 +109,4 @@
 		}
 		return false;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ReferencedResource.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ReferencedResource.java
index fc8ceaf..45faf2b 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ReferencedResource.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ReferencedResource.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
- * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
 
@@ -18,6 +20,18 @@
 	public static final String DELETED_ERROR_MSG = "This resource has been deleted and can no longer be used."; //$NON-NLS-1$
 
 	public static final int RESOURCE_WAS_SAVED = 601;
+	
+	/**
+	 * A flag used to indicate a ReferencedResource is about
+	 * to save.
+	 */
+	public static final int RESOURCE_ABOUT_TO_SAVE = 602;
+	
+	/**
+	 * A flag used to indicate a ReferencedResource has failed
+	 * to save.
+	 */
+	public static final int RESOURCE_SAVE_FAILED = 603;
 
 	/**
 	 * Access this resource for read only. This call increments the use read count of this resource.
@@ -113,4 +127,4 @@
 	 * If the resource is no longer being accessed, then remove it from the resource set.
 	 */
 	void unloadIfNecessary();
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ReferencedXMIResourceImpl.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ReferencedXMIResourceImpl.java
index cd4208b..57cd396 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ReferencedXMIResourceImpl.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ReferencedXMIResourceImpl.java
@@ -1,26 +1,32 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
- * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
 import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.common.notify.impl.NotificationImpl;
+import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.common.internal.emf.utilities.IDUtil;
 
 public class ReferencedXMIResourceImpl extends CompatibilityXMIResourceImpl implements ReferencedResource {
@@ -33,7 +39,67 @@
 	private int editReferenceCount = 0;
 	protected boolean isNew = true;
 	protected boolean forceRefresh;
+	
+	  public static class ESynchronizedAdapterList extends EAdapterList
+	  {
 
+	    public ESynchronizedAdapterList(Notifier notifier) {
+			super(notifier);
+		}
+
+		public synchronized boolean add(Object object)
+	    {
+	    return super.add(object);
+	    }
+
+	    public synchronized void add(int index, Object object)
+	    {
+	    super.add(index, object);
+	    }
+
+	    public synchronized boolean addAll(Collection collection)
+	    {
+	    return super.addAll(collection);
+	    }
+
+	    public synchronized boolean remove(Object object)
+	    {
+	    return super.remove(object);
+	    }
+
+	    public synchronized Object remove(int index)
+	    {
+	    return super.remove(index);
+	    }
+
+	    public synchronized boolean removeAll(Collection collection)
+	    {
+	    return super.removeAll(collection);
+	    }
+
+	    public synchronized void clear()
+	    {
+	     super.clear();
+	    }
+
+
+	    public synchronized Object set(int index, Object object)
+	    {
+	    return super.set(index, object);
+	    }
+
+	    public synchronized void move(int newPosition, Object object)
+	    {
+	    super.move(newPosition, object);
+	    }
+
+	    public synchronized Object move(int newPosition, int oldPosition)
+	    {
+	    return super.move(newPosition, oldPosition);
+	    }
+	  }
+
+	 
 	/**
 	 * ReferencableXMIResourceImpl constructor comment.
 	 */
@@ -248,15 +314,28 @@
 	 * @see org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl#doUnload()
 	 */
 	protected void doUnload() {
-		if (isTrackingModification() && editReferenceCount < 1) //do not turn off modification if
-			// we still have a write count
-			setTrackingModification(false);
-		super.doUnload();
-		setForceRefresh(false);
-		setModified(false); //dcb - this is required to ensure that resources without files are
-		// marked as not modified.
-		if (readReferenceCount == 0 && editReferenceCount == 0)
-			resetAsNew();
+		
+		try {
+			// Using load lock to ensure no other threads will attempt a load during the unload process
+			addSynchronizationLoadingAdapter();
+			waitForResourceToLoadIfNecessary();
+			
+			if (isTrackingModification() && editReferenceCount < 1) //do not turn off modification if
+				// we still have a write count
+				setTrackingModification(false);
+			super.doUnload();
+			setForceRefresh(false);
+			setModified(false); //dcb - this is required to ensure that resources without files are
+			// marked as not modified.
+			if (readReferenceCount == 0 && editReferenceCount == 0) {
+				getResourceSet().getResources().remove(this);
+			}
+		
+		} finally {
+			//Removing the load lock
+			removeLoadingSynchronizationAdapter();
+		}
+			
 	}
 
 
@@ -264,33 +343,58 @@
 	 * The resource has been unloaded, and there are no references. Treat the resource like a new
 	 * Resource
 	 */
-	private void resetAsNew() {
-		readReferenceCount = 1;
-		isNew = true;
-	}
+	// never used
+//	private void resetAsNew() {
+//		readReferenceCount = 1;
+//		isNew = true;
+//	}
 
 	/**
-	 * @see Resource#save(Object)
+	 * @see org.eclipse.emf.ecore.resource.Resource#save(Object)
 	 */
 	public void save(Map options) throws IOException {
-		super.save(options);
-		notifySaved();
+		notifyAboutToSave();
+        try {
+            super.save(options);
+        } catch (Exception e) {
+            notifySaveFailed();
+            if (e instanceof IOException)
+                throw (IOException) e;
+            else
+                Logger.getLogger().write(e);
+        }
+        notifySaved();
 	}
 
 	protected void notifySaved() {
+		notifySaveEvent(RESOURCE_WAS_SAVED);
+	}
+	
+	protected void notifyAboutToSave() {
+        notifySaveEvent(RESOURCE_ABOUT_TO_SAVE);
+    }
+	
+	protected void notifySaveFailed() {
+        notifySaveEvent(RESOURCE_SAVE_FAILED);
+    }
+	
+	private void notifySaveEvent(int eventType) {
 		if (eNotificationRequired()) {
-			Notification notification = new NotificationImpl(RESOURCE_WAS_SAVED, this, this) {
-				public Object getNotifier() {
-					return ReferencedXMIResourceImpl.this;
-				}
-
-				public int getFeatureID(Class expectedClass) {
-					return RESOURCE_WAS_SAVED;
-				}
+		  Notification notification =
+			new NotificationImpl(eventType, this, this)
+			{
+			  public Object getNotifier()
+			  {
+				return ReferencedXMIResourceImpl.this;
+			  }
+			  public int getFeatureID(Class expectedClass)
+			  {
+				return eventType;
+			  }
 			};
 			eNotify(notification);
 		}
-	}
+	}	
 
 	/**
 	 * @see com.ibm.etools.emf.workbench.ReferencedResource#wasReverted()
@@ -298,4 +402,15 @@
 	public boolean wasReverted() {
 		return false;
 	}
-}
\ No newline at end of file
+	
+	public EList eAdapters()
+	  {
+	    if (eAdapters == null)
+	    {
+	      eAdapters =  new ESynchronizedAdapterList(this);
+	    }
+	    return eAdapters;
+	  }
+
+
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Renderer.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Renderer.java
index 6768cd1..4a9c37d 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Renderer.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Renderer.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -59,4 +59,4 @@
 	void setBatchMode(boolean isBatch);
 	
 	boolean isBatchMode();
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ResourceFactoryDescriptor.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ResourceFactoryDescriptor.java
new file mode 100644
index 0000000..77984c3
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ResourceFactoryDescriptor.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.internal.emf.resource;
+
+import org.eclipse.core.runtime.content.IContentType;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+
+public abstract class ResourceFactoryDescriptor {
+	
+	
+	/**
+	 * Returns true if the current descriptor is applicable to the given fileURI.
+	 * 
+	 * @param fileURI The URI of the file to be loaded
+	 * @return True if the current descriptor declares a resource factory applicable to the given URI.
+	 */
+	public abstract boolean isEnabledFor(URI fileURI);
+	
+	/**
+	 * The contentType is one optional way that a ResourceFactory
+	 * might apply to a URI. Clients should call {@link isEnabledFor} 
+	 * instead of comparing the content Types when searching for an
+	 * applicable descriptor from a set.  
+	 * 
+	 * <p><b>Subclasses may return null.(optional)</b></p>
+	 *  
+	 * @return The content type that this descriptor is applicable to.
+	 */
+	public IContentType getContentType(){
+		return null;
+	}
+	
+	/**
+	 * In the case where more than one factory is defined for the same fileName, 
+	 * and creation is passed a uri only a default factory is needed
+	 * 
+	 *  
+	 * @return The boolean describing the default factory
+	 */
+	public boolean isDefault(){
+		return true;
+	}
+	
+	/**
+	 * The short segment is one possible way that a ResourceFactory
+	 * might apply to a URI. Clients should call {@link isEnabledFor} 
+	 * instead of comparing the short segments when searching for an
+	 * applicable descriptor from a set.  
+	 * 
+	 * <p><b>Subclasses may NOT return null.</b></p>
+	 *  
+	 * @return The short segment that this descriptor is applicable to.
+	 */
+	public abstract String getShortSegment();
+	
+	
+	/**
+	 * The correct instance of Resource.Factory. The instance returned
+	 * may or may not be unique, so if you require the same instance 
+	 * for each call, you should cache the value returned the first
+	 * time from this method. 
+	 * 
+	 * @return An instance of Resource.Factory.
+	 */
+	public abstract Resource.Factory createFactory();
+	
+	public int hashCode() {
+		return getShortSegment().hashCode();
+	}
+	
+	public boolean equals(Object o) {
+		if(o instanceof ResourceFactoryDescriptor)
+			return getShortSegment().equals(((ResourceFactoryDescriptor)o).getShortSegment());
+		return false;
+	}
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/RootTranslator.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/RootTranslator.java
index 18f8d84..f5640e9 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/RootTranslator.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/RootTranslator.java
@@ -1,15 +1,18 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
- * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
 import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
 
 public class RootTranslator extends Translator {
@@ -28,7 +31,7 @@
 	 * @see com.ibm.etools.emf2xml.impl.Translator#setMOFValue(Notifier, Object, int)
 	 */
 	public void setMOFValue(Notifier owner, Object value, int newIndex) {
-		((Resource) owner).getContents().add(newIndex, value);
+		((Resource) owner).getContents().add(newIndex, (EObject)value);
 	}
 
 	/**
@@ -46,7 +49,7 @@
 	 */
 	public void setMOFValue(Resource res, Object value) {
 		if (res != null && value != null)
-			res.getContents().add(value);
+			res.getContents().add((EObject)value);
 	}
 
 	/*
@@ -59,4 +62,4 @@
 	}
 
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/StaticResourceFactoryDescriptor.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/StaticResourceFactoryDescriptor.java
new file mode 100644
index 0000000..8caf4ea
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/StaticResourceFactoryDescriptor.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.internal.emf.resource;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+
+/**
+ * Declares a subclass to create Resource.Factory(ies) from an extension. 
+ */
+class StaticResourceFactoryDescriptor extends ResourceFactoryDescriptor {
+	
+	private final String shortSegment;
+	private final Resource.Factory factory;
+	
+	/**
+	 * 
+	 * @param shortSegment A non-null name of the file associated with the given factory
+	 * @param factory A non-null Resource.Factory that can load files of the given name
+	 */
+	public StaticResourceFactoryDescriptor(String shortSegment, Resource.Factory factory) {
+		Assert.isNotNull(shortSegment);
+		Assert.isNotNull(factory);
+		this.shortSegment = shortSegment;
+		this.factory = factory;
+	}  
+
+	public boolean isEnabledFor(URI fileURI) {
+		/* shortSegment must be non-null for the descriptor to be created, 
+		 * a validation check in init() verifies this requirement */
+		if(fileURI != null && fileURI.lastSegment() != null)
+			return shortSegment.equals(fileURI.lastSegment());
+		return false;
+	} 
+	
+	public Resource.Factory createFactory() {
+		 return factory;			
+	}
+
+	public String getShortSegment() {
+		return shortSegment;
+	}  
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Translator.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Translator.java
index d36e3cf..ab28074 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Translator.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Translator.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
- * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
 
@@ -26,6 +28,7 @@
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.wst.common.internal.emf.utilities.ExtendedEcoreUtil;
 import org.eclipse.wst.common.internal.emf.utilities.FeatureValueConverter;
+import org.w3c.dom.Node;
 
 
 public class Translator {
@@ -171,7 +174,7 @@
 
 	public Translator(String domNameAndPath, EStructuralFeature aFeature, EClass eClass) {
 		this(domNameAndPath, aFeature);
-		setEMFClass(emfClass);
+		setEMFClass(eClass);
 	}
 
 	public Translator(String domNameAndPath, EStructuralFeature aFeature, TranslatorPath path) {
@@ -268,6 +271,10 @@
 		return (fStyle & END_TAG_NO_INDENT) == 0;
 	}
 
+	public boolean shouldIndentEndTag(Node node) {
+		return shouldIndentEndTag();
+	}
+
 	public boolean isEmptyContentSignificant() {
 		return ((fStyle & EMPTY_TAG) != 0) || ((fStyle & EMPTY_CONTENT_IS_SIGNIFICANT) != 0);
 	}
@@ -628,7 +635,7 @@
 	 */
 	public void setMOFValue(Resource res, Object value) {
 		if (res != null && value != null)
-			res.getContents().add(value);
+			res.getContents().add((EObject)value);
 	}
 
 	public void removeMOFValue(Notifier owner, Object value) {
@@ -789,4 +796,4 @@
 		return (fStyle & COMMENT_FEATURE) != 0;
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/TranslatorResourceImpl.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/TranslatorResourceImpl.java
index c65e5a9..d925245 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/TranslatorResourceImpl.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/TranslatorResourceImpl.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
- * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
 import java.io.IOException;
@@ -24,10 +26,11 @@
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.resource.impl.ResourceImpl;
+import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.common.internal.emf.utilities.StringUtil;
 import org.xml.sax.EntityResolver;
 
-public abstract class TranslatorResourceImpl extends ReferencedXMIResourceImpl implements TranslatorResource {
+public abstract class TranslatorResourceImpl extends ReferencedXMIResourceImpl implements TranslatorResource, IRootObjectResource{
 	static final public EStructuralFeature ID_FEATURE = EcorePackage.eINSTANCE.getEClass_EIDAttribute();
 	protected static final String DEFAULT_ENCODING = "UTF-8"; //$NON-NLS-1$
 	protected static final String DEFAULT_VERSION = "1.0"; //$NON-NLS-1$
@@ -80,7 +83,7 @@
 	public String getPublicId() {
 		return publicId;
 	}
-
+	
 	/**
 	 * Return the first element in the EList.
 	 */
@@ -149,16 +152,24 @@
 	}
 
 	public void save(Map options) throws IOException {
-		if (renderer.useStreamsForIO()) {
-			super.save(options);
-		}
-		else {
-			// we cast to OutputStream, in preparation for 3.2 code base,
-			// where this doSave call is ambiguous with just "null". 
-			doSave((OutputStream) null, options);
-			notifySaved();
-		}
-	}
+        if (renderer.useStreamsForIO()) {
+            super.save(options);
+        } else {
+            notifyAboutToSave();
+            try {
+                doSave((OutputStream)null, options);
+                notifySaved();
+            } catch (Exception e) {
+                 notifySaveFailed();
+                if (e instanceof IOException)
+                    throw (IOException) e;
+                else
+                    Logger.getLogger().write(e);
+            }
+            notifySaved();
+        }
+    }
+
 
 	/**
 	 * @see com.ibm.etools.xmi.helpers.CompatibilityXMIResourceImpl#doSave(OutputStream,
@@ -224,6 +235,7 @@
 	}
 
 	public EList getContents() {
+		waitForResourceToLoadIfNecessary();
 		if (contents == null) {
 			initializeContents();
 		}
@@ -368,12 +380,6 @@
 		return super.isSharedForWrite() || renderer.isSharedForWrite();
 	}
 
-	public boolean isLoaded() {
-		synchronized (this) {
-			return super.isLoaded();
-		}
-	}
-
 	public void load(Map options) throws IOException {
 		synchronized (this) {
 			if (isLoaded)
@@ -389,4 +395,4 @@
 		}
 
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/XMLEncoderDecoder.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/XMLEncoderDecoder.java
index 9f46962..d7b7f3b 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/XMLEncoderDecoder.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/XMLEncoderDecoder.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -35,7 +35,7 @@
 	 * 16-bit encodings this will be 0xFFFF. Characters that are not printable will be escaped using
 	 * character references.
 	 */
-	private int _lastPrintable = 0x7E;
+	private int _lastPrintable = 0xFFFE;
 
 	protected static XMLEncoderDecoder _singleton;
 
@@ -167,4 +167,4 @@
 		}
 		return null;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/AdapterFactoryDescriptor.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/AdapterFactoryDescriptor.java
index a852031..e6e559b 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/AdapterFactoryDescriptor.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/AdapterFactoryDescriptor.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
- * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.utilities;
 
 import org.eclipse.emf.common.notify.AdapterFactory;
@@ -14,4 +16,4 @@
 
 	public AdapterFactory createAdapterFactory();
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/AdapterFactoryUtil.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/AdapterFactoryUtil.java
index 706f9ea..36d9173 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/AdapterFactoryUtil.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/AdapterFactoryUtil.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
- * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.utilities;
 
 import java.util.List;
@@ -42,4 +44,4 @@
 		descriptors.clear();
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/Assert.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/Assert.java
index b375851..3a44751 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/Assert.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/Assert.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -128,4 +128,4 @@
 		}
 		return expression;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CloneablePublic.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CloneablePublic.java
index b243775..2c39fbc 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CloneablePublic.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CloneablePublic.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -14,11 +14,13 @@
  */
 package org.eclipse.wst.common.internal.emf.utilities;
 
+import org.eclipse.emf.common.notify.Adapter;
+
 /**
  * Interface that exposes the clone method, for objects that need to generically copy other
  * cloneable objects
  */
-public interface CloneablePublic extends Cloneable {
+public interface CloneablePublic extends Cloneable, Adapter.Internal {
 	Object clone();
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CommandContext.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CommandContext.java
index 913139c..4dcb883 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CommandContext.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CommandContext.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -82,4 +82,4 @@
 			resourceSet = new ResourceSetImpl();
 		return resourceSet;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CopyGroup.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CopyGroup.java
index 79b3b1e..a23928c 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CopyGroup.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CopyGroup.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DOMUtilities.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DOMUtilities.java
index 7eeac6c..44f9669 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DOMUtilities.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DOMUtilities.java
@@ -1,20 +1,23 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.utilities;
 
 
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
+import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -558,17 +561,37 @@
 	}
 
 
+	
 	private static InputStream createHeaderInputStream(String doctype, String publicId, String systemId, boolean includeDummy) {
-		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-		PrintWriter writer = new PrintWriter(outputStream);
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+
+		// The prior code (which is still in the catch block), uses
+		// the system default encoding [System.getProperty("file.encoding")];
+		// on Z/OS this is Cp1047. The combination of "UTF-8" in the header
+		// and "Cp1047" in the writer create an unusable input stream.
+
+		PrintWriter writer;
+
+		try {
+			OutputStreamWriter outputWriter = new OutputStreamWriter(outputStream, "UTF-8"); //$NON-NLS-1$
+			// throws UnsupportedEncodingException
+			writer = new PrintWriter(outputWriter);
+		} catch (UnsupportedEncodingException e) {
+			// Should never get here (earlier code)
+			writer = new PrintWriter(outputStream); 
+		}
+
 		writeHeader(writer, doctype, publicId, systemId);
 		if (includeDummy)
 			addDummyEntity(writer);
 		writer.flush();
 		writer.close();
-		return new java.io.ByteArrayInputStream(outputStream.toByteArray());
+
+		byte[] bytes = outputStream.toByteArray();
+		return new ByteArrayInputStream(bytes);
 	}
 
+
 	private static void writeHeader(PrintWriter writer, String doctype, String publicId, String systemId) {
 		writer.write("<?xml version=\""); //$NON-NLS-1$
 		writer.write("1.0"); //$NON-NLS-1$
@@ -677,4 +700,4 @@
 		defaultEntityResolver = resolver;
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DanglingHREFException.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DanglingHREFException.java
index 21f9254..debd006 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DanglingHREFException.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DanglingHREFException.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -32,4 +32,4 @@
 	}
 
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DefaultFeatureValueConverter.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DefaultFeatureValueConverter.java
index 2cfb9a7..ea56697 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DefaultFeatureValueConverter.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DefaultFeatureValueConverter.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -19,6 +19,7 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
 
 /**
  * Insert the type's description here. Creation date: (5/10/2001 2:49:49 PM)
@@ -26,7 +27,7 @@
  * @author: Administrator
  */
 public class DefaultFeatureValueConverter implements FeatureValueConverter {
-	private static final String FAILED_CONVERSION_PATTERN = WFTUtilsResourceHandler.Failed_to_convert__0__to___ERROR_; //$NON-NLS-1$ = "Failed to convert {0} to {1}."
+	private static final String FAILED_CONVERSION_PATTERN = WFTUtilsResourceHandler.Failed_to_convert__0__to___ERROR_;
 
 	/**
 	 * DefaultFeatureValueConverter constructor comment.
@@ -45,7 +46,7 @@
 			return Boolean.valueOf((String) aValue);
 		if (aValue instanceof Boolean)
 			return aValue;
-		return failedToConvert(aValue, WFTUtilsResourceHandler.Boolean_UI_); //$NON-NLS-1$ = "Boolean"
+		return failedToConvert(aValue, WFTUtilsResourceHandler.Boolean_UI_);
 	}
 
 	/**
@@ -58,7 +59,7 @@
 			return Byte.valueOf((String) aValue);
 		if (aValue instanceof Byte)
 			return aValue;
-		return failedToConvert(aValue, WFTUtilsResourceHandler.Byte_UI_); //$NON-NLS-1$ = "Byte"
+		return failedToConvert(aValue, WFTUtilsResourceHandler.Byte_UI_);
 	}
 
 	/**
@@ -71,7 +72,7 @@
 			return new Character(((String) aValue).charAt(0));
 		if (aValue instanceof Character)
 			return aValue;
-		return failedToConvert(aValue, WFTUtilsResourceHandler.Character_UI_); //$NON-NLS-1$ = "Character"
+		return failedToConvert(aValue, WFTUtilsResourceHandler.Character_UI_);
 	}
 
 	/**
@@ -89,7 +90,7 @@
 		}
 		if (aValue instanceof Double)
 			return aValue;
-		return failedToConvert(aValue, WFTUtilsResourceHandler.Double_UI_); //$NON-NLS-1$ = "Double"
+		return failedToConvert(aValue, WFTUtilsResourceHandler.Double_UI_);
 	}
 
 	/**
@@ -108,7 +109,7 @@
 			literal = (EEnumLiteral) aValue;
 
 		if (literal == null)
-			return failedToConvert(aValue, WFTUtilsResourceHandler.Enumeration_UI_); //$NON-NLS-1$ = "Enumeration"
+			return failedToConvert(aValue, WFTUtilsResourceHandler.Enumeration_UI_);
 
 		return literal.getInstance();
 	}
@@ -128,7 +129,7 @@
 		}
 		if (aValue instanceof Float)
 			return aValue;
-		return failedToConvert(aValue, WFTUtilsResourceHandler.Float_UI_); //$NON-NLS-1$ = "Float"
+		return failedToConvert(aValue, WFTUtilsResourceHandler.Float_UI_);
 	}
 
 	/**
@@ -146,7 +147,7 @@
 		}
 		if (aValue instanceof Integer)
 			return aValue;
-		return failedToConvert(aValue, WFTUtilsResourceHandler.Integer_UI_); //$NON-NLS-1$ = "Integer"
+		return failedToConvert(aValue, WFTUtilsResourceHandler.Integer_UI_);
 	}
 
 	/**
@@ -173,7 +174,7 @@
 		}
 		if (aValue instanceof Long)
 			return aValue;
-		return failedToConvert(aValue, WFTUtilsResourceHandler.Long_UI_); //$NON-NLS-1$ = "Long"
+		return failedToConvert(aValue, WFTUtilsResourceHandler.Long_UI_);
 	}
 
 	/**
@@ -184,7 +185,7 @@
 	protected Object convertToMofObject(Object aValue) {
 		if (aValue instanceof EObject)
 			return aValue;
-		return failedToConvert(aValue, WFTUtilsResourceHandler.MofObject_UI_); //$NON-NLS-1$ = "MofObject"
+		return failedToConvert(aValue, WFTUtilsResourceHandler.MofObject_UI_);
 	}
 
 	/**
@@ -202,7 +203,7 @@
 		}
 		if (aValue instanceof Short)
 			return aValue;
-		return failedToConvert(aValue, WFTUtilsResourceHandler.Short_UI_); //$NON-NLS-1$ = "Short"
+		return failedToConvert(aValue, WFTUtilsResourceHandler.Short_UI_);
 	}
 
 	/**
@@ -225,39 +226,71 @@
 		EClassifier meta = anAttribute.getEType();
 		if (meta.eClass() == EcorePackage.eINSTANCE.getEEnum())
 			return convertToEnum(aValue, anAttribute);
-		switch (meta.getClassifierID()) {
-			case EcorePackage.ESTRING :
+		if (meta.getEPackage() instanceof EcorePackage)
+		{
+			switch (meta.getClassifierID()) {
+				case EcorePackage.ESTRING :
+					return convertToString(aValue);
+				case EcorePackage.EBOOLEAN_OBJECT :
+				case EcorePackage.EBOOLEAN :
+					return convertToBoolean(aValue);
+				case EcorePackage.EINTEGER_OBJECT :
+				case EcorePackage.EINT :
+					return convertToInteger(aValue);
+				case EcorePackage.EFLOAT_OBJECT :
+				case EcorePackage.EFLOAT :
+					return convertToFloat(aValue);
+				case EcorePackage.ECHARACTER_OBJECT :
+				case EcorePackage.ECHAR :
+					return convertToCharacter(aValue);
+				case EcorePackage.ELONG_OBJECT :
+				case EcorePackage.ELONG :
+					return convertToLong(aValue);
+				case EcorePackage.EBYTE_OBJECT :
+				case EcorePackage.EBYTE :
+					return convertToByte(aValue);
+				case EcorePackage.EDOUBLE_OBJECT :
+				case EcorePackage.EDOUBLE :
+					return convertToDouble(aValue);
+				case EcorePackage.ESHORT_OBJECT :
+				case EcorePackage.ESHORT :
+					return convertToShort(aValue);
+				//		case EcorePackage.EENUM:
+				//			return convertToEnum(aValue, anAttribute);
+				case EcorePackage.EOBJECT :
+					return convertToMofObject(aValue);
+				case EcorePackage.EJAVA_OBJECT :
+					return convertToJavaObject(aValue);
+			}
+		}
+		else if (meta.getEPackage() instanceof XMLTypePackage)
+		{
+			switch (meta.getClassifierID()) {
+			case XMLTypePackage.STRING :
 				return convertToString(aValue);
-			case EcorePackage.EBOOLEAN_OBJECT :
-			case EcorePackage.EBOOLEAN :
+			case XMLTypePackage.BOOLEAN_OBJECT :
+			case XMLTypePackage.BOOLEAN :
 				return convertToBoolean(aValue);
-			case EcorePackage.EINTEGER_OBJECT :
-			case EcorePackage.EINT :
+			case XMLTypePackage.INT_OBJECT :
+			case XMLTypePackage.INTEGER :
+			case XMLTypePackage.INT :
 				return convertToInteger(aValue);
-			case EcorePackage.EFLOAT_OBJECT :
-			case EcorePackage.EFLOAT :
+			case XMLTypePackage.FLOAT_OBJECT :
+			case XMLTypePackage.FLOAT :
 				return convertToFloat(aValue);
-			case EcorePackage.ECHARACTER_OBJECT :
-			case EcorePackage.ECHAR :
-				return convertToCharacter(aValue);
-			case EcorePackage.ELONG_OBJECT :
-			case EcorePackage.ELONG :
+			case XMLTypePackage.LONG_OBJECT :
+			case XMLTypePackage.LONG :
 				return convertToLong(aValue);
-			case EcorePackage.EBYTE_OBJECT :
-			case EcorePackage.EBYTE :
+			case XMLTypePackage.BYTE_OBJECT :
+			case XMLTypePackage.BYTE :
 				return convertToByte(aValue);
-			case EcorePackage.EDOUBLE_OBJECT :
-			case EcorePackage.EDOUBLE :
+			case XMLTypePackage.DOUBLE_OBJECT :
+			case XMLTypePackage.DOUBLE :
 				return convertToDouble(aValue);
-			case EcorePackage.ESHORT_OBJECT :
-			case EcorePackage.ESHORT :
+			case XMLTypePackage.SHORT_OBJECT :
+			case XMLTypePackage.SHORT :
 				return convertToShort(aValue);
-			//		case EcorePackage.EENUM:
-			//			return convertToEnum(aValue, anAttribute);
-			case EcorePackage.EOBJECT :
-				return convertToMofObject(aValue);
-			case EcorePackage.EJAVA_OBJECT :
-				return convertToJavaObject(aValue);
+			}
 		}
 		return aValue;
 	}
@@ -318,4 +351,4 @@
 		String errorString = java.text.MessageFormat.format(FAILED_CONVERSION_PATTERN, new String[]{aValue.toString(), aString});
 		throw new FeatureValueConversionException(errorString);
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DefaultOverridableResourceFactoryRegistry.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DefaultOverridableResourceFactoryRegistry.java
index c3777bf..927c0a4 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DefaultOverridableResourceFactoryRegistry.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DefaultOverridableResourceFactoryRegistry.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -37,6 +37,11 @@
 	}
 
 	public Resource.Factory getFactory(URI uri) {
+		return getFactory(uri, null);
+	}
+
+	public Resource.Factory getFactory(URI uri, String contentType)
+	{
 		Object resourceFactory = null;
 		if (resourceFactory == null) {
 			String protocol = uri.scheme();
@@ -47,7 +52,7 @@
 				if (resourceFactory == null) {
 					resourceFactory = delegatedGetFactory(uri);
 					if (resourceFactory == GLOBAL_FACTORY) {
-						resourceFactory = (Factory) extensionToFactoryMap.get(Resource.Factory.Registry.DEFAULT_EXTENSION);
+						resourceFactory = extensionToFactoryMap.get(Resource.Factory.Registry.DEFAULT_EXTENSION);
 						if (resourceFactory == null)
 							resourceFactory = GLOBAL_FACTORY;
 					}
@@ -67,4 +72,4 @@
 	protected Factory delegatedGetFactory(URI uri) {
 		return Resource.Factory.Registry.INSTANCE.getFactory(uri);
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopySession.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopySession.java
index ca678b8..0308041 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopySession.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopySession.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopyUtility.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopyUtility.java
index fa24556..22d91e0 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopyUtility.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopyUtility.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ExceptionHelper.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ExceptionHelper.java
index b5fc133..7d629af 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ExceptionHelper.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ExceptionHelper.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -67,4 +67,4 @@
 		}
 		return sb.toString();
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ExtendedEcoreUtil.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ExtendedEcoreUtil.java
index a404cea..e9cf914 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ExtendedEcoreUtil.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ExtendedEcoreUtil.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
- * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.utilities;
 
 import java.io.FileNotFoundException;
@@ -13,6 +15,7 @@
 import java.util.List;
 
 import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.impl.BasicNotifierImpl.EAdapterList;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.common.util.WrappedException;
 import org.eclipse.emf.ecore.EAttribute;
@@ -123,12 +126,18 @@
 		return null;
 	}
 
+	/**
+	 * @deprecated No longer needed.
+	 */
 	public static void addLoadingTag(Resource resource) {
-		resource.eAdapters().add(IsLoadingDetector.INSTANCE);
+		//resource.eAdapters().add(IsLoadingDetector.INSTANCE);
 	}
 
+	/**
+	 * @deprecated No longer needed.
+	 */
 	public static void removeLoadingTag(Resource resource) {
-		resource.eAdapters().remove(IsLoadingDetector.INSTANCE);
+		//resource.eAdapters().remove(IsLoadingDetector.INSTANCE);
 	}
 
 	/**
@@ -140,13 +149,10 @@
 	 * 
 	 * @see addLoadingTag(Resource)
 	 * @see removeLoadingTag(Resource)
-	 *  
+	 *  @deprecated use {@link Resource.Internal#isLoading()}
 	 */
 	public static boolean isLoading(Resource resource) {
-		if (resource != null) {
-			return resource.eAdapters().contains(IsLoadingDetector.INSTANCE);
-		}
-		return false;
+		return resource != null ? ((Resource.Internal)resource).isLoading() : false; 
 	}
 
 	public static Adapter createAdapterForLoading(Adapter targetAdapter, EObject targetObject) {
@@ -160,13 +166,36 @@
 		if (!EPackage.Registry.INSTANCE.containsKey(nsPrefix))
 			EPackage.Registry.INSTANCE.put(nsPrefix, descriptor);
 	}
+	/**
+	   * Returns the adapter of the specified type.
+	 * @param anObject 
+	   * @param adapters list of adapters to search.
+	   * @param type the type of adapter.
+	   * @return an adapter from the list or null.
+	   */
+	  public static Adapter getAdapter(EObject anObject, List adapters, Object type) {
+
+		  	Object [] adaptArray = ((EAdapterList)adapters).data();
+		  	if (adaptArray == null) return null;
+			for (int i = 0; i < adaptArray.length; i++) {
+				Adapter adapter = (Adapter) adaptArray[i];
+				if (adapter != null && adapter.isAdapterForType(type)) {
+					return adapter;
+				}
+			}
+			return null;
+	}
 
 	/**
-	 * Remove this object from it's container, and make it and all it's children proxies
+	 * Remove this object from it's container, and make it and all it's children
+	 * proxies
 	 */
 	public static void unload(EObject root) {
 		Resource res = root.eResource();
 		EObject container = root.eContainer();
+		/* Making sure the proxy is created first before unloading */
+		if (root != null && res != null)
+			becomeProxy(root, res);
 		if (container == null)
 			if (res != null)
 				res.getContents().remove(root);
@@ -175,8 +204,7 @@
 				if (feature != null)
 					eUnsetOrRemove(container, feature, root);
 			}
-		if (root != null && res != null)
-			becomeProxy(root, res);
+		
 	}
 
 	/**
@@ -227,7 +255,7 @@
 	public static void checkProxy(EObject object) throws DanglingHREFException {
 		if (object == null || !object.eIsProxy())
 			return;
-		String msg = WFTUtilsResourceHandler.getString(WFTUtilsResourceHandler.DANGLING_HREF_ERROR_, new Object[]{((InternalEObject) object).eProxyURI()}); //$NON-NLS-1$
+		String msg = WFTUtilsResourceHandler.getString(WFTUtilsResourceHandler.DANGLING_HREF_ERROR_, new Object[]{((InternalEObject) object).eProxyURI()});
 		throw new DanglingHREFException(msg);
 	}
 
@@ -243,4 +271,4 @@
 		return (o1 == null ^ o2 == null) || (o1 == null || !o1.equals(o2));
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ICommand.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ICommand.java
index d040995..5ed817b 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ICommand.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ICommand.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -34,4 +34,4 @@
 	 */
 	public boolean execute(IResource resource, IResourceDelta delta, ICommandContext context) throws CoreException;
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ICommandContext.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ICommandContext.java
index bee3f61..e642717 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ICommandContext.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ICommandContext.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -34,4 +34,4 @@
 	 * @return
 	 */
 	public ResourceSet getResourceSet();
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/IDUtil.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/IDUtil.java
index 374ae13..388986c 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/IDUtil.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/IDUtil.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
- * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.utilities;
 
 import org.eclipse.emf.ecore.EClass;
@@ -67,4 +69,4 @@
 		return metaO.getName();
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/IsLoadingProxyAdapter.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/IsLoadingProxyAdapter.java
index d90669b..a75b865 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/IsLoadingProxyAdapter.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/IsLoadingProxyAdapter.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -90,4 +90,4 @@
 		targetObject = null;
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/NamespaceAdapter.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/NamespaceAdapter.java
index a21a016..0bdac76 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/NamespaceAdapter.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/NamespaceAdapter.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -202,4 +202,4 @@
 		return result;
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/PleaseMigrateYourCodeError.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/PleaseMigrateYourCodeError.java
index 784991d..5a548d6 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/PleaseMigrateYourCodeError.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/PleaseMigrateYourCodeError.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -20,6 +20,6 @@
 
 	//TODO Delete me
 	public PleaseMigrateYourCodeError() {
-		super(WFTUtilsResourceHandler.PleaseMigrateYourCodeError_ERROR_0); //$NON-NLS-1$
+		super(WFTUtilsResourceHandler.PleaseMigrateYourCodeError_ERROR_0);
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ResourceIsLoadingAdapter.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ResourceIsLoadingAdapter.java
new file mode 100644
index 0000000..35f1f33
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ResourceIsLoadingAdapter.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Oct 26, 2004
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.eclipse.wst.common.internal.emf.utilities;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * @author mdelder
+ */
+public class ResourceIsLoadingAdapter extends AdapterImpl implements Adapter {
+
+    private static final Class RESOURCE_IS_LOADING_ADAPTER_CLASS = ResourceIsLoadingAdapter.class;
+
+    public ResourceIsLoadingAdapter() {
+    }
+
+    public static ResourceIsLoadingAdapter findAdapter(Resource aResource) {
+        ResourceIsLoadingAdapter adapter = null;
+        //System.out.println("ResourceIsLoadingAdapter Synchronizing on " + aResource);
+        
+        /* Synchronize on the Resource (which will be the target of 
+         * the ResourceIsLoadingAdapter in the list, if it exists).
+         * 
+         * removeIsLoadingSupport() will coordinate with this 
+         * synchronization.
+         */
+        synchronized (aResource) {
+            adapter = (ResourceIsLoadingAdapter) EcoreUtil.getAdapter(aResource.eAdapters(), ResourceIsLoadingAdapter.class);
+        }
+        return adapter;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.emf.common.notify.Adapter#notifyChanged(org.eclipse.emf.common.notify.Notification)
+     */
+    public void notifyChanged(Notification notification) {
+
+        if (notification.getNotifier() != null) {
+
+            // listen for the remove of the loading adapter
+            if (isSetLoadedResourceNotification(notification)) removeIsLoadingSupport();
+        }
+    }
+
+    /**
+     * Default implementation is a no-op.
+     */
+    public void waitForResourceToLoad() {
+
+    }
+
+    /**
+     * @param notification
+     * @return
+     */
+    protected boolean isSetLoadedResourceNotification(Notification notification) {
+        return notification.getFeatureID(null) == Resource.RESOURCE__IS_LOADED && notification.getEventType() == Notification.SET;
+    }
+
+    protected void removeIsLoadingSupport() {
+
+        /* Synchronize on the target of the Adapter. If 
+         * the list of adapters is searched for a 
+         * ResourceIsLoadingAdapter using the 
+         * ResourceIsLoadingAdapter.findAdapter() API, then
+         * the access to remove the Adapter using this method 
+         * will be coordinated.  
+         */
+        if (getTarget() != null) {
+            //System.out.println("ResourceIsLoadingAdapter Synchronizing on " + getTarget());
+            synchronized (getTarget()) {
+                getTarget().eAdapters().remove(this);
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.emf.common.notify.Adapter#isAdapterForType(java.lang.Object)
+     */
+    public boolean isAdapterForType(Object type) {
+        return type == RESOURCE_IS_LOADING_ADAPTER_CLASS;
+    }
+
+    /**
+     * 
+     */
+    public void forceRelease() {
+
+    }
+
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ResourceIsLoadingAdapterFactory.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ResourceIsLoadingAdapterFactory.java
new file mode 100644
index 0000000..5899f5d
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ResourceIsLoadingAdapterFactory.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Oct 26, 2004
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.eclipse.wst.common.internal.emf.utilities;
+
+
+/**
+ * @author mdelder
+ * 
+ */
+public class ResourceIsLoadingAdapterFactory {
+
+    public static ResourceIsLoadingAdapterFactory INSTANCE = new ResourceIsLoadingAdapterFactory();
+         
+    public ResourceIsLoadingAdapter createResourceIsLoadingAdapter() {
+        return new ResourceIsLoadingAdapter();
+    }
+    
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/TranslatorManager.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/TranslatorManager.java
new file mode 100644
index 0000000..79ee8b8
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/TranslatorManager.java
@@ -0,0 +1,168 @@
+/***************************************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others. 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: IBM Corporation - initial API and implementation
+ **************************************************************************************************/
+package org.eclipse.wst.common.internal.emf.utilities;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.jem.util.RegistryReader;
+import org.eclipse.jem.util.logger.proxy.Logger;
+import org.eclipse.wst.common.internal.emf.plugin.EcoreUtilitiesPlugin;
+import org.eclipse.wst.common.internal.emf.resource.Translator;
+
+/**
+ * This is the TranslatorManager class used by the TranslatorService in order to discover
+ * and cache all of the extended Translators to be used by EMF2DOMAdapterImpl.
+ */
+public class TranslatorManager {
+	
+	/**
+	 * The singleton TranslatorManager instance
+	 */
+	private static final TranslatorManager INSTANCE = new TranslatorManager();
+	
+	/**
+	 * Cache of all the TranslatorDescriptors
+	 */
+	private final Set translators = new HashSet();
+	
+	/**
+	 * Default static empty array used when no descriptors found
+	 */
+	private static final TranslatorDescriptor[] NO_EXTENDED_TRANSLATORS = new TranslatorDescriptor[0];
+	
+	/**
+	 * Returns the singleton instance of the TranslatorManager
+	 * @return TranslatorManager INSTANCE
+	 */
+	public static TranslatorManager getInstance() {
+		return INSTANCE;
+	}
+
+	/**
+	 * Private constructor
+	 */
+	private TranslatorManager() {
+		new TranslatorRegistry().readRegistry();
+	}
+	
+	/**
+	 * Simple Registry Reader used by Translator Manager to recognize the Translator extensions
+	 */
+	private class TranslatorRegistry extends RegistryReader {
+		
+		/**
+		 * The Translator element of the extension point.
+		 */
+		public static final String TRANSLATOR = "translator"; //$NON-NLS-1$
+		
+		/**
+		 * Default constructor
+		 */
+		public TranslatorRegistry() {
+			super(EcoreUtilitiesPlugin.ID, EcoreUtilitiesPlugin.TRANSLATOR_EXTENSTION_POINT);
+		}
+
+		/**
+		 * Add the configuration element if it matchs the expected translator element name
+		 */
+		public boolean readElement(IConfigurationElement element) {
+			boolean result = false;
+			if (TRANSLATOR.equals(element.getName())) {
+				addTranslatorDescriptor(new TranslatorDescriptor(element));
+					result = true;
+			}
+			return result;
+		}
+	}
+
+	/**
+	 * Describes a Translator extension point element
+	 */
+	public class TranslatorDescriptor {
+	
+		/**
+		 * Qualified class name attribute
+		 */
+		public static final String CLASSNAME = "className"; //$NON-NLS-1$
+		
+		/**
+		 * The config element for this Descriptor
+		 */
+		private final IConfigurationElement configElement;
+		
+		/**
+		 * the cached qualified className value of this descriptor
+		 */
+		private String className;
+	
+		/**
+		 * Constructor
+		 * @param aConfigElement
+		 */
+		public TranslatorDescriptor(IConfigurationElement aConfigElement) {
+			super();
+			configElement = aConfigElement;
+			className = configElement.getAttribute(CLASSNAME);
+		}
+		
+		/**
+		 * Retrieve the cached value of the qualified class name of the extended Translator
+		 * @return String classname
+		 */
+		public String getClassName() {
+			return className;
+		}
+	
+		/**
+		 * Create the actual Translator instance from the configuration element.
+		 * @return Translator
+		 */
+		public Translator createTranslator() {
+			Translator instance = null;
+			try {
+				instance = (Translator) configElement.createExecutableExtension(CLASSNAME);
+			} catch (CoreException e) {
+				Logger.getLogger().logError(e);
+			}
+			return instance;
+		}
+	}
+	
+	/**
+	 * Add the TranslatorDescriptor to the cache of descriptor extensions.
+	 * @param descriptor
+	 */
+	private void addTranslatorDescriptor(TranslatorDescriptor descriptor) {
+		Assert.isNotNull(descriptor);
+		translators.add(descriptor);
+	}
+	
+	/**
+	 * Find all the associated TranslatorDescriptors for the Traslator extensions defined.
+	 * @return TranslatorDescriptor[]
+	 */
+	public TranslatorDescriptor[] findTranslators() {
+		List result = new ArrayList();
+		TranslatorDescriptor descriptor = null;
+		for (Iterator translatorsItr = translators.iterator(); translatorsItr.hasNext();) {
+			descriptor = (TranslatorDescriptor) translatorsItr.next();
+			result.add(descriptor);
+		}
+		if (result.size() == 0) {
+			return NO_EXTENDED_TRANSLATORS;
+		}
+		return (TranslatorDescriptor[]) result.toArray(new TranslatorDescriptor[result.size()]);
+	}
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/TranslatorService.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/TranslatorService.java
new file mode 100644
index 0000000..4012a7b
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/TranslatorService.java
@@ -0,0 +1,96 @@
+/***************************************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others. 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: IBM Corporation - initial API and implementation
+ **************************************************************************************************/
+package org.eclipse.wst.common.internal.emf.utilities;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.wst.common.internal.emf.resource.Translator;
+import org.eclipse.wst.common.internal.emf.utilities.TranslatorManager.TranslatorDescriptor;
+
+/**
+ * This is the service class to deliver API to use to retrieve Translator extensions from
+ * the TranslatorManager and its RegistryReader.
+ */
+public class TranslatorService {
+
+	/**
+	 * Static Key value pair of descriptors as keys and Translator instances as values
+	 */
+	private static final Map translators = new HashMap();
+	
+	/**
+	 * Static empty array used when no extensions found
+	 */
+	// never used
+	//private static final Translator[] NO_TRANSLATORS = new Translator[0];
+	
+	/**
+	 * Singleton instance of the Translator service
+	 */
+	private static final TranslatorService INSTANCE = new TranslatorService();
+	
+	/**
+	 * Default constructor
+	 */
+	private TranslatorService() {
+		super();
+	}
+	
+	public static TranslatorService getInstance() {
+		return INSTANCE;
+	}
+	
+	/**
+	 * This will return the associated extension point TranslatorDescriptor objects from the manager
+	 * @return TranslatorDescriptor[]
+	 */
+	public TranslatorDescriptor[] getTranslatorDescriptors() {
+		return TranslatorManager.getInstance().findTranslators();
+	}
+	
+	/**
+     * This retrieves the extended Translators using the extension point manager and descriptors
+     * @return Translator[] (Note, the return value may contain null entries.)
+     */
+	public Translator[] getTranslators() {
+		TranslatorDescriptor[] descriptors = getTranslatorDescriptors();
+		Translator[] result = new Translator[descriptors.length];
+		//The result index could differ from the descriptors index.
+		int resultIndex = 0;
+		for (int i=0; i<descriptors.length; i++) {
+			Translator instance = getTranslator(descriptors[i]);
+			if (instance!=null) {
+				result[resultIndex] = instance;
+				resultIndex++;
+			}
+		}
+		return result;  
+    }
+	
+	/**
+	 * Retrieve the existing associated Translator instance for the descriptor, or create a new
+	 * one and cache on the Set.
+	 * 
+	 * @param translatorDescriptor
+	 * @return Translator associated with the descriptor
+	 */
+	public Translator getTranslator(TranslatorDescriptor translatorDescriptor) {
+		Translator translator = (Translator) translators.get(translatorDescriptor);
+		if (translator != null)
+			return translator;
+		
+		synchronized (translators) {
+			translator = translatorDescriptor.createTranslator();
+			if (translator != null)
+				translators.put(translatorDescriptor, translator);
+		}
+		return translator;
+	}
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/WFTUtilsResourceHandler.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/WFTUtilsResourceHandler.java
index 0ed13f8..6506318 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/WFTUtilsResourceHandler.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/WFTUtilsResourceHandler.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
- * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.utilities;
 
 
@@ -43,4 +45,4 @@
 	public static String getString(String key, Object[] args) {
 		return NLS.bind(key, args);
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/WriteBackHelper.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/WriteBackHelper.java
index 4ebaf35..7a0aa43 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/WriteBackHelper.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/WriteBackHelper.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -131,6 +131,6 @@
 	 * Warn the user of problems during save.
 	 */
 	protected void warn(Resource res, Exception e) {
-		System.err.println(WFTUtilsResourceHandler.getString(WFTUtilsResourceHandler.Warning__Could_not_write_b_WARN_, new Object[]{res.getURI()})); //$NON-NLS-1$
+		System.err.println(WFTUtilsResourceHandler.getString(WFTUtilsResourceHandler.Warning__Could_not_write_b_WARN_, new Object[]{res.getURI()}));
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/wftutils.properties b/plugins/org.eclipse.wst.common.emf/wtpemf/wftutils.properties
index 8c7b45a..4b2e2ae 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/wftutils.properties
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/wftutils.properties
@@ -1,10 +1,10 @@
 ###############################################################################
-# Copyright (c) 2003, 2004 IBM Corporation and others.
+# Copyright (c) 2003, 2005 IBM Corporation and others.
 # 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:
 # IBM Corporation - initial API and implementation
 ###############################################################################
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/.classpath b/plugins/org.eclipse.wst.common.emfworkbench.integration/.classpath
index 377edbf..fe45152 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/.classpath
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/.classpath
@@ -2,7 +2,13 @@
 <classpath>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="property_file"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<accessrules>
+			<accessrule kind="accessible" pattern="org/eclipse/wst/common/**"/>
+			<accessrule kind="accessible" pattern="org/eclipse/wst/validation/**"/>
+			<accessrule kind="accessible" pattern="org/eclipse/jem/**"/>
+		</accessrules>
+	</classpathentry>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/.cvsignore b/plugins/org.eclipse.wst.common.emfworkbench.integration/.cvsignore
index 73ba5fb..47e4670 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/.cvsignore
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/.cvsignore
@@ -4,3 +4,4 @@
 emfworkbenchedit.jar
 @dot
 src.zip
+javaCompiler...args
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.common.emfworkbench.integration/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..46468f9
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,62 @@
+#Sat Mar 24 02:06:45 EDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=ignore
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=error
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=ignore
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.emfworkbench.integration/META-INF/MANIFEST.MF
index 89a4633..6a2ec7c 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/META-INF/MANIFEST.MF
@@ -1,24 +1,26 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
-Bundle-Name: EMF Workbench Edit Plug-in
+Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.common.emfworkbench.integration; singleton:=true
-Bundle-Version: 1.0.0
+Bundle-Version: 1.1.200.qualifier
 Bundle-Activator: org.eclipse.wst.common.internal.emfworkbench.integration.EMFWorkbenchEditPlugin
-Bundle-Vendor: Eclipse.org
+Bundle-Vendor: %pluginVendor
 Bundle-Localization: plugin
-Export-Package: .,
- org.eclipse.wst.common.internal.emfworkbench,
- org.eclipse.wst.common.internal.emfworkbench.edit,
- org.eclipse.wst.common.internal.emfworkbench.integration,
- org.eclipse.wst.common.internal.emfworkbench.validateedit
-Require-Bundle: org.eclipse.wst.common.frameworks,
- org.eclipse.jem.util,
- org.eclipse.emf.edit,
- org.eclipse.emf.ecore.xmi,
- org.eclipse.wst.common.emf,
- org.eclipse.core.runtime,
- org.eclipse.core.resources,
- org.eclipse.xsd,
- org.eclipse.wst.validation,
- org.eclipse.wst.common.project.facet.core
-Eclipse-AutoStart: true
+Export-Package: org.eclipse.wst.common.internal.emfworkbench;x-internal:=true,
+ org.eclipse.wst.common.internal.emfworkbench.edit;x-internal:=true,
+ org.eclipse.wst.common.internal.emfworkbench.integration;x-internal:=true,
+ org.eclipse.wst.common.internal.emfworkbench.validateedit;x-internal:=true
+Require-Bundle: org.eclipse.wst.common.frameworks;bundle-version="[1.1.200,2.0.0)",
+ org.eclipse.jem.util;bundle-version="[2.0.100,3.0.0)",
+ org.eclipse.emf.edit;bundle-version="[2.4.0,3.0.0)",
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.4.0,3.0.0)",
+ org.eclipse.wst.common.emf;bundle-version="[1.1.200,2.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.wst.validation;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.wst.common.project.facet.core;bundle-version="[1.3.0,2.0.0)",
+ org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)"
+Eclipse-LazyStart: true
+Bundle-RequiredExecutionEnvironment: J2SE-1.4,
+ J2SE-1.5
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/about.html b/plugins/org.eclipse.wst.common.emfworkbench.integration/about.html
index 6f6b96c..2199df3 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/about.html
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/about.html
@@ -1,22 +1,34 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
+<HTML>
+
 <head>
 <title>About</title>
 <meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
 </head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
 
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+<BODY lang="EN-US">
 
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
+<H3>About This Content</H3>
 
-</body>
-</html>
\ No newline at end of file
+<P>June, 2008</P>
+
+<H3>License</H3>
+
+<P>The Eclipse Foundation makes available all content in this plug-in 
+("Content"). Unless otherwise indicated below, the Content is provided to you 
+under the terms and conditions of the Eclipse Public License Version 1.0 
+("EPL"). A copy of the EPL is available at
+<A href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</A>. 
+For purposes of the EPL, "Program" will mean the Content.</P>
+
+<P>If you did not receive this Content directly from the Eclipse Foundation, the 
+Content is being redistributed by another party ("Redistributor") and different 
+terms and conditions may apply to your use of any object code in the Content. 
+Check the Redistributor’s license that was provided with the Content. If no such 
+license exists, contact the Redistributor. Unless otherwise indicated below, the 
+terms and conditions of the EPL still apply to any source code in the Content 
+and such source code may be obtained at
+<A href="http://www.eclipse.org/">http://www.eclipse.org/</A>.</P>
+
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.properties b/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.properties
index 2b001fd..cdc1ce7 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.properties
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005 IBM Corporation and others.
+# Copyright (c) 2005, 2006 IBM Corporation and others.
 # 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
@@ -11,4 +11,6 @@
 EMF_Resource_Edit_Model=EMF Resource Edit Model
 Edit_Model_Extensions=Edit Model Extensions
 Adapter_Factory_Extension=Adapter Factory Extension
-ModifierHelperFactory=ModifierHelperFactory
\ No newline at end of file
+ModifierHelperFactory=ModifierHelperFactory
+pluginName=EMF Workbench Edit Plug-in
+pluginVendor=Eclipse.org
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.xml b/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.xml
index f27b788..5673b57 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.xml
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.xml
@@ -24,4 +24,24 @@
         selectionType="org.eclipse.emf.ecore.EObject"/>
    </extension>
    
+   <extension point="org.eclipse.core.expressions.propertyTesters">
+    <propertyTester
+      id="org.eclipse.wst.common.internal.emfworkbench.EmfPackagePropertyTester"
+      type="org.eclipse.emf.ecore.EObject"
+      namespace="org.eclipse.wst.common.emfworkbench.integration"
+      properties="emfPackage"
+      class="org.eclipse.wst.common.internal.emfworkbench.EmfPackagePropertyTester">
+    </propertyTester>
+  </extension>
+  
+  <extension 
+       point="org.eclipse.jem.util.uiContextSensitiveClass">
+       <uiContextSensitiveClass
+          key="ValidateEditContext"
+          className="org.eclipse.wst.common.internal.emfworkbench.validateedit.ValidateEditHeadlessContext"
+          context="Headless">
+      </uiContextSensitiveClass>
+  </extension>
+  
+   
 </plugin>
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/schema/editModel.exsd b/plugins/org.eclipse.wst.common.emfworkbench.integration/schema/editModel.exsd
index 3a103a7..14743b2 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/schema/editModel.exsd
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/schema/editModel.exsd
@@ -103,6 +103,23 @@
          </attribute>

       </complexType>

    </element>

+   

+   <element name="resourceExtension">

+      <annotation>

+         <documentation>

+            This allows registration of files for autoloading according to file extension.

+         </documentation>

+      </annotation>

+      <complexType>

+         <attribute name="name" type="string">

+            <annotation>

+               <documentation>

+                  The file extension itself (&quot;myxmi&quot;)

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

 

    <annotation>

       <appInfo>

diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/DynamicGrowthModel.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/DynamicGrowthModel.java
new file mode 100644
index 0000000..d6a9a6d
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/DynamicGrowthModel.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.internal.emfworkbench;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IPath;
+
+
+public class DynamicGrowthModel {
+	
+	private static final int MINIMUM_OPTIMAL_SIZE = 10;
+
+	private static final int MEMORY_THRESHHOLD = 100;
+	
+	private static final int NOTICEABLE_CHANGE = 5;
+	
+	
+	/* Stores a FIFO list of the Key types (IPath)*/
+	private final List queue = new LinkedList();
+	
+	/* We use an int[] as the value so we don't have to keep creating Integer objects */
+	private final Map/* <IPath, int[]> */ uniquesMap = new HashMap();
+	
+	
+	/**
+	 * Inject the key into the DynamicGrowthModel. May or may not affect the 
+	 * dynamic size.
+	 *
+	 * @param key The key to inject into the model
+	 * @return True if the optimal size changed greather than {@value NOTICEABLE_CHANGE} as a result of the injection.
+	 */
+	public synchronized boolean injectKey(IPath key) {
+		
+		int originalSize = getOptimalSize();
+		
+		int[] count = null;
+		if( (count = (int[]) uniquesMap.get(key)) != null ) {
+			/* increment the count */
+			++count[0];
+		} else {
+			/* insert the first count */
+			uniquesMap.put(key, count = new int[] { 1 } );
+		}
+		
+		if( queue.size() == MEMORY_THRESHHOLD ) {
+			
+			/* take the oldest value off the queue */
+			IPath oldestKey = (IPath) queue.remove(0);
+			
+			/* determine if another instance of the oldest key is still in the queue */
+			count = (int[]) uniquesMap.get(oldestKey);
+			Assert.isNotNull(count);
+			
+			/* Reduce the count */
+			count[0] -= 1;
+		
+			/* Count should never be negative */
+			Assert.isTrue(count[0] >= 0);
+			
+		
+			/* This unique key is no longer in the queue*/
+			if(count[0] == 0) {
+				uniquesMap.remove(oldestKey);
+			}
+			
+			
+			
+		}
+		/* Add the newKey to end of the list*/
+		queue.add(key);
+		
+		return Math.abs( originalSize - getOptimalSize() ) > NOTICEABLE_CHANGE;
+
+	}
+	
+	/**
+	 * The optimal size is an integer from [{@value #MINIMUM_OPTIMAL_SIZE}, {@value #MEMORY_THRESHHOLD}]. 
+	 * 
+	 * @return the optimal size for the LRU Cache.  
+	 */
+	public int getOptimalSize() {		
+		return uniquesMap.size() > MINIMUM_OPTIMAL_SIZE ? uniquesMap.size() : MINIMUM_OPTIMAL_SIZE;
+	}
+
+}	
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFAdapterFactory.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFAdapterFactory.java
deleted file mode 100644
index 546c695..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFAdapterFactory.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on Feb 25, 2004
- *  
- */
-package org.eclipse.wst.common.internal.emfworkbench;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.IAdapterFactory;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
-
-/**
- * @author mdelder
- *  
- */
-public class EMFAdapterFactory implements IAdapterFactory {
-
-	protected static final Class IPROJECT_CLASS = IProject.class;
-	protected static final Class IRESOURCE_CLASS = IResource.class;
-	protected static final Class IFILE_CLASS = IFile.class;
-	protected static final Class EOBJECT_CLASS = EObject.class;
-
-	/**
-	 *  
-	 */
-	public EMFAdapterFactory() {
-		super();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class)
-	 */
-	public Object getAdapter(Object adaptableObject, Class adapterType) {
-		if (adaptableObject instanceof EObject) {
-			if (adapterType == IFILE_CLASS || adapterType == IRESOURCE_CLASS)
-				return WorkbenchResourceHelper.getFile((EObject) adaptableObject);
-			else if (adapterType == IPROJECT_CLASS)
-				return ProjectUtilities.getProject((EObject) adaptableObject);
-		}
-		return null;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList()
-	 */
-	public Class[] getAdapterList() {
-		return new Class[]{IPROJECT_CLASS, IRESOURCE_CLASS, IFILE_CLASS};
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFWorkbenchContext.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFWorkbenchContext.java
index 5c31747..66c6b35 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFWorkbenchContext.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFWorkbenchContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -105,11 +105,11 @@
 				editModel.access(accessorKey);
 			}
 		} else {
+			if (editModel.isDisposed() || editModel.isDisposing()) {
+				editModel = createEditModelForWrite(editModelID, params);
+				cacheEditModel(editModel, params);
+			}
 			synchronized (editModel) {
-				if (editModel.isDisposed() || editModel.isDisposing()) {
-					editModel = createEditModelForWrite(editModelID, params);
-					cacheEditModel(editModel, params);
-				}
 				editModel.access(accessorKey);
 			}
 		}
@@ -126,23 +126,29 @@
 	 * @see J2EEEditModel
 	 */
 	public final EditModel getEditModelForRead(String editModelID, Object accessorKey, Map params) {
-		EditModel editModel = getExistingEditModel(editModelID, params, true);
-		if (null == editModel) {
-			editModel = createEditModelForRead(editModelID, params);
-			synchronized (editModel) {
-				cacheEditModel(editModel, params);
-				editModel.access(accessorKey);
-			}
-		} else {
-			synchronized (editModel) {
+		try {
+			EditModel editModel = getExistingEditModel(editModelID, params, true);
+			if (null == editModel) {
+				editModel = createEditModelForRead(editModelID, params);
+				synchronized (editModel) {
+					cacheEditModel(editModel, params);
+					EditModelLeastUsedCache.getInstance().access(editModel);
+					editModel.access(accessorKey);
+				}
+			} else {
 				if (editModel.isDisposed() || editModel.isDisposing()) {
 					editModel = createEditModelForRead(editModelID, params);
 					cacheEditModel(editModel, params);
 				}
-				editModel.access(accessorKey);
+				synchronized (editModel) {
+					EditModelLeastUsedCache.getInstance().access(editModel);
+					editModel.access(accessorKey);
+				}
 			}
+			return editModel;
+		} finally {
+			EditModelLeastUsedCache.getInstance().optimizeLRUSizeIfNecessary();
 		}
-		return editModel;
 	}
 
 	/**
@@ -219,7 +225,9 @@
 	protected void discardAllEditModels() {
 		synchronized (readOnlyModels) {
 			synchronized (editableModels) {
-				discardModels(readOnlyModels.values());
+				Collection readOnly = readOnlyModels.values();
+				EditModelLeastUsedCache.getInstance().removeAllCached(readOnly);
+				discardModels(readOnly);
 				discardModels(editableModels.values());
 			}
 		}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EditModelLeastUsedCache.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EditModelLeastUsedCache.java
new file mode 100644
index 0000000..a53bf23
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EditModelLeastUsedCache.java
@@ -0,0 +1,123 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.internal.emfworkbench;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+
+import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
+
+/**
+ * This class will be used to cache the recently used edit models.  Loading and unloading of edit models can be
+ * costly, especially if operations and/or post operations have a need to reload the same edit model repeatedly.
+ * This will allow those repeatedly used edit models to be cached, thereby improving performance.  By design, the
+ * edit models load resources and these resources are stored in memory, so we don't want to cache every edit
+ * model accessed, so this is a least used cache mechanism, where the max size is 10.  If an edit model is used
+ * it is put to the back of the stack, and new edit models accessed are put to the back of the stack, so that the
+ * top of the stack is the first edit model disposed when the cache is higher than the threshhold.
+ *
+ */
+public class EditModelLeastUsedCache {
+	
+	/**
+	 * Provide a singleton instance.
+	 */
+	private static EditModelLeastUsedCache INSTANCE = new EditModelLeastUsedCache();	
+	
+	/**
+	 * The threshold, or most edit models we will keep open at a time is 10.  This is low enough to not
+	 * overwhelm workbench memory and high enough to aid in operations which continually reload 3-4 
+	 * edit models.
+	 */
+	private final static int threshhold = 10;
+	
+	/**
+	 *  A LHS is required to ensure the order of the items is maintained. Other
+	 * Set implementations (HashSet, TreeSet) do not preserve the order. This 
+	 * is critical to the implementation. DO NOT CHANGE THIS. 
+	 */
+	private LinkedHashSet lru = new LinkedHashSet(threshhold);
+	
+	/**
+	 * Accessor for the EditModelLeastUsedCache INSTANCE
+	 * 
+	 * @return the EditModelLeastUsedCache INSTANCE
+	 */
+	public static EditModelLeastUsedCache getInstance() {
+		return INSTANCE;
+	}
+	
+	/**
+	 * Remove the all elements from the lru that are contained
+	 * in <code>aCollection</code>.  This method assumes the
+	 * EditModels in the aCollection will be discarded and it
+	 * will not attempt to decrememt its reference count.
+	 * @param aCollection - A {@link Collection} of {@link EditModel}.
+	 */
+	public void removeAllCached(Collection aCollection) {
+		if (aCollection != null) { 
+			lru.removeAll(aCollection);
+		}
+	}
+
+	/**
+	 * An {@link EditModel} is being accessed so we will want
+	 * to update the lru and access the editModel which will hold
+	 * a reference count.
+	 * @param editModel - The {@link EditModel} that we want to place
+	 * 	in the least used cache.
+	 */
+	public void access(EditModel editModel) {
+		boolean shouldAccess = true;
+		synchronized (lru) {
+			if (lru.contains(editModel)) {
+				moveToEnd(editModel);
+				shouldAccess = false;
+			}
+		}
+		if (shouldAccess) {
+			synchronized (lru) {
+				editModel.access(this);
+				lru.add(editModel);
+			}
+		}
+	}
+	
+	/**
+	 * If we hit the capacity of the lru then remove the first one
+	 * and release access.
+	 */
+	public void optimizeLRUSizeIfNecessary() {
+		EditModel model = null;
+		synchronized (lru) {
+			if (lru.size() > threshhold) {
+				// remove oldest element and release the edit model.
+				Iterator iterator = lru.iterator();
+				model = (EditModel) iterator.next();
+				if (model != null) {
+					lru.remove(model);	
+				}
+			}
+		if (model != null)
+			model.releaseAccess(this);
+		}
+	}
+
+	/**
+	 * Move the editModel to the end of the list 
+	 * @param editModel -- EditModel to be moved
+	 */
+	private void moveToEnd(EditModel editModel) {
+		lru.remove(editModel);
+		lru.add(editModel);
+	}	
+}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EmfPackagePropertyTester.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EmfPackagePropertyTester.java
new file mode 100644
index 0000000..9959402
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EmfPackagePropertyTester.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.internal.emfworkbench;
+
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.emf.ecore.EObject;
+
+public class EmfPackagePropertyTester extends PropertyTester {
+
+	public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+		if (receiver == null || !(receiver instanceof EObject) || expectedValue == null || !(expectedValue instanceof String))
+			return false;
+		
+		EObject eObject = (EObject) receiver;
+		String emfPackage = (String)expectedValue;
+		return emfPackage.equals(eObject.eClass().getEPackage().getNsURI());
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/PassthruResourceSet.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/PassthruResourceSet.java
index 863e0dd..d1b36ea 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/PassthruResourceSet.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/PassthruResourceSet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -47,7 +47,7 @@
 				return false;
 			ResourceSet set = WorkbenchResourceHelperBase.getResourceSet(((Resource) object).getURI());
 			if (set != null)
-				return set.getResources().add(object);
+				return set.getResources().add((Resource)object);
 
 			return super.add(object);
 		}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/WorkbenchResourceHelper.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/WorkbenchResourceHelper.java
index 0ef3ce8..6296984 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/WorkbenchResourceHelper.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/WorkbenchResourceHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -21,10 +21,11 @@
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.jobs.ILock;
 import org.eclipse.emf.common.notify.Adapter;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.Notifier;
@@ -39,6 +40,7 @@
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
 import org.eclipse.jem.util.emf.workbench.WorkbenchURIConverter;
+import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.jem.util.plugin.JEMUtilPlugin;
 import org.eclipse.wst.common.internal.emf.resource.ReferencedResource;
 import org.eclipse.wst.common.internal.emf.resource.ReferencedXMIFactoryImpl;
@@ -70,9 +72,13 @@
 	 */
 	private static class FileAdapter extends AdapterImpl {
 		public static final Object ADAPTER_KEY = FileAdapter.class.getName();
+		private static final long delay = 30;
 		private IFile file;
 		private long synchronizationStamp;
 		protected ResourceSet previousResourceSet;
+		private ILock saveLock;
+		public static final int FILE_NOT_LOADED = 0;
+		public static final int FILE_INACCESSIBLE = -1;
 
 		public boolean isAdapterForType(Object type) {
 			return ADAPTER_KEY.equals(type);
@@ -89,27 +95,79 @@
 					else
 						handleUnloaded();
 					break;
-				case ReferencedResource.RESOURCE_WAS_SAVED :
-					handleSaved();
-					break;
+				case ReferencedResource.RESOURCE_ABOUT_TO_SAVE:
+	                handleAboutToSave();
+	                break;
+	            case ReferencedResource.RESOURCE_WAS_SAVED:
+	                handleSaved();
+	                break;
+	            case ReferencedResource.RESOURCE_SAVE_FAILED:
+	                handleSaveFailed();
+	                break;
 				case Resource.RESOURCE__URI :
 					handleURIChanged();
 			}
 		}
+		
+		private void handleSaveFailed() {
+            releaseSaveLock();
+
+        }
+
+        private void handleAboutToSave() {
+            aquireSaveLock();
+        }
+
+        private void aquireSaveLock() {
+//            System.out.println("FileName: " + getFile().getName() + " " +getFile());
+//            System.out.println("aquiredSaveLock: " + Thread.currentThread().getName());
+//            System.out.println("Depth" + getSaveLock().getDepth());
+//            System.out.println("Instance:"+getSaveLock().hashCode());
+//            new Exception().printStackTrace(System.out);
+            getSaveLock().acquire();
+
+        }
+
+        private boolean aquireSaveLock(long delay) throws InterruptedException {
+//            System.out.println("FileName: " + getFile().getName()  + " " +getFile());
+//            System.out.println("aquiredSaveLock with delay: " + Thread.currentThread().getName());
+//            System.out.println("Depth" + getSaveLock().getDepth());
+//            System.out.println("Instance:"+getSaveLock().hashCode());
+//            new Exception().printStackTrace(System.out);
+            
+            return getSaveLock().acquire(delay);
+
+        }
+
+        private void releaseSaveLock() {
+//            System.out.println("FileName: " + getFile().getName()  + " " +getFile());
+//            System.out.println("releasedSaveLock: " + Thread.currentThread().getName());
+//            System.out.println("Depth" + getSaveLock().getDepth());
+//            System.out.println("Instance:"+getSaveLock().hashCode());
+//            new Exception().printStackTrace(System.out);
+            getSaveLock().release();
+
+        }
+
+        private ILock getSaveLock() {
+            if (saveLock == null)
+                saveLock = Platform.getJobManager().newLock();
+            return saveLock;
+        }
 
 		/**
 		 *  
 		 */
 		private void handleURIChanged() {
 			file = null;
-			synchronizationStamp = 0;
+			synchronizationStamp = FILE_NOT_LOADED;
 		}
 
 		public IFile getFile() {
 			//First test to see if we should reset the file.
 			if (file != null && (!file.isAccessible() || previousResourceSet != getResourceSet())) {
 				file = null;
-				synchronizationStamp = 0;
+				synchronizationStamp = FILE_NOT_LOADED;
 			}
 			if (file == null) {
 				if (isPlatformResourceURI(getURI())) {
@@ -118,6 +176,9 @@
 					//we should not be here anymore.
 					file = internalGetFile(getResource());
 				}
+				if(null!= file && !file.isAccessible()){
+					synchronizationStamp = FILE_INACCESSIBLE;
+				}
 				previousResourceSet = getResourceSet();
 			}
 			return file;
@@ -148,15 +209,35 @@
 		 * @see ReferencedResource#isConsistent()
 		 */
 		public boolean isConsistent() {
-			if (getFile() == null || !getFile().isAccessible())
+			//This checks for the case where the resource hasn't finished saving fo the first time
+			if(!getResource().isLoaded())
 				return true;
-			if (!getFile().isSynchronized(IResource.DEPTH_ZERO))
-				return false;
-			if (synchronizationStamp == 0)
-				return true;
-			return synchronizationStamp == computeModificationStamp(getFile());
+            boolean hasLocked = false;
+            try {
+                hasLocked = aquireSaveLock(delay);
+            } catch (InterruptedException e) {
+                Logger.getLogger().write(e);
+            }
+            boolean result = false;
+            try {
 
-		}
+                if (getFile() == null || !getFile().isAccessible())
+                    result = true;
+                else {
+                    if (!getFile().isSynchronized(IFile.DEPTH_ZERO))
+                        result = false;
+                    else {
+                        result = synchronizationStamp == computeModificationStamp(getFile());
+                    }
+                }
+            } catch (Exception e) {
+                Logger.getLogger().write(e);
+            } finally {
+                if (hasLocked)
+                    releaseSaveLock();
+            }
+            return result;
+        }
 
 		public void cacheSynchronizationStamp() {
 			setSynchronizationStamp(computeModificationStamp(getFile()));
@@ -176,7 +257,7 @@
 
 		public void handleUnloaded() {
 			file = null;
-			synchronizationStamp = 0;
+			synchronizationStamp = FILE_NOT_LOADED;
 		}
 
 		public void handleLoaded() {
@@ -185,6 +266,7 @@
 
 		public void handleSaved() {
 			cacheSynchronizationStamp();
+			releaseSaveLock();
 		}
 	}
 
@@ -222,7 +304,7 @@
 
 	public static long getSynchronizationStamp(ReferencedResource res) {
 		FileAdapter adapter = getFileAdapter(res);
-		return adapter == null ? 0 : adapter.getSynchronizationStamp();
+		return adapter == null ? FileAdapter.FILE_NOT_LOADED : adapter.getSynchronizationStamp();
 	}
 
 	public static void setSynhronizationStamp(ReferencedResource res, long stamp) {
@@ -244,7 +326,7 @@
 	public static void cacheSynchronizationStamp(ReferencedResource refResource) {
 		if (refResource != null) {
 			FileAdapter adapter = getFileAdapter(refResource);
-			if (adapter != null && adapter.getSynchronizationStamp() <= 0)
+			if (adapter != null && adapter.getSynchronizationStamp() <= FileAdapter.FILE_NOT_LOADED)
 				adapter.setSynchronizationStamp(computeModificationStamp(refResource));
 		}
 	}
@@ -255,12 +337,15 @@
 
 	public static long computeModificationStamp(ReferencedResource resource) {
 		FileAdapter adapter = getFileAdapter(resource);
-		return adapter == null ? 0 : computeModificationStamp(adapter.getFile());
+		return adapter == null ? FileAdapter.FILE_NOT_LOADED : computeModificationStamp(adapter.getFile());
 	}
 
 	public static long computeModificationStamp(IFile file) {
 		if (file == null)
-			return 0;
+			return FileAdapter.FILE_NOT_LOADED;
+		if(!file.isAccessible()){
+			return FileAdapter.FILE_INACCESSIBLE;
+		}
 		long currentStamp = file.getModificationStamp();
 		IPath path = file.getLocation();
 		if (path != null)
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/AdapterFactoryDescriptor.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/AdapterFactoryDescriptor.java
index 19ddf5b..e72153d 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/AdapterFactoryDescriptor.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/AdapterFactoryDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -42,8 +42,8 @@
 
 		packageURI = element.getAttribute(AdapterFactoryRegistry.PACKAGE_URI);
 		id = element.getAttribute(AdapterFactoryRegistry.ID);
-		Assert.isNotNull(packageURI, EMFWorkbenchEditResourceHandler.AdapterFactoryDescriptor_ERROR_0); //$NON-NLS-1$
-		Assert.isNotNull(id, EMFWorkbenchEditResourceHandler.getString(EMFWorkbenchEditResourceHandler.AdapterFactoryDescriptor_ERROR_1, new Object[]{element.getDeclaringExtension().getNamespace()})); //$NON-NLS-1$
+		Assert.isNotNull(packageURI, EMFWorkbenchEditResourceHandler.AdapterFactoryDescriptor_ERROR_0);
+		Assert.isNotNull(id, EMFWorkbenchEditResourceHandler.getString(EMFWorkbenchEditResourceHandler.AdapterFactoryDescriptor_ERROR_1, new Object[]{element.getDeclaringExtension().getNamespace()}));
 
 		readViewIDs();
 		this.loadOrder = loadOrderCounter++;
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ClientAccessRegistry.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ClientAccessRegistry.java
index 61f9858..5f0f82d 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ClientAccessRegistry.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ClientAccessRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -36,7 +36,7 @@
 				this.baseSet.add(snapshot);
 
 			} else
-				throw new ClientAccessRegistryException(EMFWorkbenchEditResourceHandler.ClientAccessRegistry_ERROR_0, accessorKey); //$NON-NLS-1$
+				throw new ClientAccessRegistryException(EMFWorkbenchEditResourceHandler.ClientAccessRegistry_ERROR_0, accessorKey);
 
 		} else
 			complain();
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ClientAccessRegistryException.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ClientAccessRegistryException.java
index 9844b9b..a5aa1cb 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ClientAccessRegistryException.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ClientAccessRegistryException.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -75,7 +75,7 @@
 				}
 				processed = true;
 			}
-			s.println(EMFWorkbenchEditResourceHandler.getString(EMFWorkbenchEditResourceHandler.ClientAccessRegistryException_UI_0, new Object[]{new Integer(baseSet.size()).toString()})); //$NON-NLS-1$
+			s.println(EMFWorkbenchEditResourceHandler.getString(EMFWorkbenchEditResourceHandler.ClientAccessRegistryException_UI_0, new Object[]{new Integer(baseSet.size()).toString()}));
 
 			for (Iterator possibleCulpritsItr = baseSet.iterator(); possibleCulpritsItr.hasNext();) {
 				snapshot = (Snapshot) possibleCulpritsItr.next();
@@ -129,7 +129,7 @@
 
 	public String toString() {
 		StringBuffer result = new StringBuffer(super.toString()).append("\r\n"); //$NON-NLS-1$
-		result.append(EMFWorkbenchEditResourceHandler.getString(EMFWorkbenchEditResourceHandler.ClientAccessRegistryException_UI_1, new Object[]{getType()})); //$NON-NLS-1$
+		result.append(EMFWorkbenchEditResourceHandler.getString(EMFWorkbenchEditResourceHandler.ClientAccessRegistryException_UI_1, new Object[]{getType()}));
 		//		if (this.badReferenceLocation != null) {
 		//			result.append("The invalid access occurred somewhere in the following stack
 		// trace.").append("\n");
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EMFWorkbenchEditContextFactory.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EMFWorkbenchEditContextFactory.java
index 7131dae..0a8d2f8 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EMFWorkbenchEditContextFactory.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EMFWorkbenchEditContextFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -16,10 +16,16 @@
  */
 package org.eclipse.wst.common.internal.emfworkbench.edit;
 
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.eclipse.core.internal.jobs.LockManager;
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.jobs.ILock;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.jem.internal.util.emf.workbench.EMFWorkbenchContextFactory;
 import org.eclipse.jem.util.emf.workbench.EMFWorkbenchContextBase;
+import org.eclipse.jem.util.emf.workbench.IEMFContextContributor;
 import org.eclipse.jem.util.emf.workbench.ResourceSetWorkbenchSynchronizer;
 import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext;
 import org.eclipse.wst.common.internal.emfworkbench.integration.ResourceSetWorkbenchEditSynchronizer;
@@ -31,6 +37,8 @@
  * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
  */
 public class EMFWorkbenchEditContextFactory extends EMFWorkbenchContextFactory {
+	
+	
 	/**
 	 *  
 	 */
@@ -45,4 +53,50 @@
 	public ResourceSetWorkbenchSynchronizer createSynchronizer(ResourceSet aResourceSet, IProject aProject) {
 		return new ResourceSetWorkbenchEditSynchronizer(aResourceSet, aProject);
 	}
+	
+	protected static LockManager lockManager = new LockManager();
+	protected static Map projectLocks = new Hashtable();
+
+	public static ILock getProjectLockObject(IProject aProject){
+		if(null == aProject){
+			return null;
+		}
+		Integer hashCode = new Integer(aProject.hashCode());
+		synchronized (projectLocks) {
+			ILock lock = (ILock)projectLocks.get(hashCode);
+			if(lock == null){
+				lock = lockManager.newLock();
+				projectLocks.put(hashCode, lock);
+			}
+			return lock;
+		}
+	}
+	
+	public EMFWorkbenchContextBase createEMFContext(IProject aProject, IEMFContextContributor contributor) {
+		ILock lock = getProjectLockObject(aProject);
+		try{
+			if(null != lock){
+				lock.acquire();
+			}
+			return super.createEMFContext(aProject, contributor);
+		} finally{
+			if(null != lock){
+				lock.release();
+			}
+		}
+	}
+	
+	protected EMFWorkbenchContextBase getCachedEMFContext(IProject aProject) {
+		ILock lock = getProjectLockObject(aProject);
+		try{
+			if(null != lock){
+				lock.acquire();
+			}
+			return super.getCachedEMFContext(aProject);
+		} finally{
+			if(null != lock){
+				lock.release();
+			}
+		}
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelRegistry.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelRegistry.java
index 0b88fa6..facd9cb 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelRegistry.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -46,6 +46,8 @@
 	
 
 	public static final String EDIT_MODEL_ELEMENT = "editModel"; //$NON-NLS-1$
+	public static final String EDIT_MODEL_RESOURCE_EXTENSION = "resourceExtension"; //$NON-NLS-1$
+	public static final String EDIT_MODEL_RESOURCE_EXTENSION_NAME = "name"; //$NON-NLS-1$
 	public static final String EDIT_MODEL_ID_ATTR = "editModelID"; //$NON-NLS-1$
 	public static final String FACTORY_CLASS_ATTR = "factoryClass"; //$NON-NLS-1$
 	public static final String PARENT_MODEL_ATTR = "parentModelID"; //$NON-NLS-1$
@@ -107,17 +109,17 @@
 	public Collection getEditModelResources(String editModelID) {
 		Collection resources = new TreeSet();
 
-		EditModelInfo nextEditModelInfo = (EditModelInfo) factoryConfigurations.get(editModelID);
+		EditModelInfo nextEditModelInfo = getEditModelInfoById(editModelID);
 
 		String parentModelID = null;
 		Map visitedEditModels = new HashMap();
 		/* collect the resources from the parents */
 		while (nextEditModelInfo != null && (parentModelID = nextEditModelInfo.getParentModelID()) != null) {
 			if (visitedEditModels.containsKey(parentModelID))
-				throw new IllegalStateException(EMFWorkbenchEditResourceHandler.getString(EMFWorkbenchEditResourceHandler.EditModelRegistry_ERROR_0, new Object[]{editModelID})); //$NON-NLS-1$
+				throw new IllegalStateException(EMFWorkbenchEditResourceHandler.getString(EMFWorkbenchEditResourceHandler.EditModelRegistry_ERROR_0, new Object[]{editModelID}));
 			visitedEditModels.put(parentModelID, null);
 			resources.addAll(getAllEditModelResources(parentModelID));
-			nextEditModelInfo = (EditModelInfo) factoryConfigurations.get(parentModelID);
+			nextEditModelInfo = getEditModelInfoById(parentModelID);
 		}
 
 		/* Get the resources for the actual edit model id */
@@ -126,6 +128,30 @@
 		return resources;
 	}
 	
+	public Collection getEditModelExtensions(String editModelID) { 
+		Collection extensions = new TreeSet();
+		
+		EditModelInfo nextEditModelInfo = getEditModelInfoById(editModelID);
+
+		String parentModelID = null;
+		Map visitedEditModels = new HashMap();
+		/* collect the resources from the parents */
+		while(nextEditModelInfo != null && (parentModelID = nextEditModelInfo.getParentModelID()) != null) {
+			if(visitedEditModels.containsKey(parentModelID)) 
+				throw new IllegalStateException(EMFWorkbenchEditResourceHandler.getString(EMFWorkbenchEditResourceHandler.EditModelRegistry_ERROR_0,new Object [] {editModelID})); 
+			else 
+				visitedEditModels.put(parentModelID, null);
+			
+			extensions.addAll(getAllEditModelExtensions(parentModelID));
+			nextEditModelInfo = getEditModelInfoById(parentModelID);
+		}
+		
+		/* Get the resources for the actual edit model id */
+		extensions.addAll(getAllEditModelExtensions(editModelID));
+		
+		return extensions;
+	}
+	
 	public IEditModelFactory findEditModelFactoryByKey(Object editModelID) {
 		IEditModelFactory factory = null;
 		EditModelInfo editMdlInfo = (EditModelInfo) factoryConfigurations.get(editModelID);
@@ -166,10 +192,20 @@
 		resources.addAll(getExtendedEditModelResources(editModelID));
 		return resources;
 	}
+	
+	protected Collection getAllEditModelExtensions(String editModelID) {
+		Collection resources = new ArrayList();
+		resources.addAll(getLocalEditModelExtensions(editModelID));
+		return resources;
+	}
 
-	protected Collection getLocalEditModelResources(String editModelID) {
-		EditModelInfo editMdlInfo = (EditModelInfo) factoryConfigurations.get(editModelID);
-		return (editMdlInfo != null) ? editMdlInfo.getEditModelResources() : Collections.EMPTY_LIST;
+	protected Collection getLocalEditModelResources(String editModelID) { 
+		EditModelInfo editMdlInfo = getEditModelInfoById(editModelID);
+  		return (editMdlInfo != null) ? editMdlInfo.getEditModelResources() : Collections.EMPTY_LIST; 
+	}
+	protected Collection getLocalEditModelExtensions(String editModelID) { 
+		EditModelInfo editMdlInfo = getEditModelInfoById(editModelID);
+  		return (editMdlInfo != null) ? editMdlInfo.getEditModelExtensions() : Collections.EMPTY_LIST; 
 	}
 
 	protected Collection getExtendedEditModelResources(String editModelID) {
@@ -185,16 +221,36 @@
 	 */
 	protected IEditModelFactory getEditModelFactoryByKey(Object editModelID) {
 		IEditModelFactory factory = null;
-		EditModelInfo editMdlInfo = (EditModelInfo) factoryConfigurations.get(editModelID);
+		EditModelInfo editMdlInfo = getEditModelInfoById(editModelID);
 		if (editMdlInfo != null)
 			factory = editMdlInfo.getEditModelFactory();
 		else
-			throw new IllegalArgumentException(EMFWorkbenchEditResourceHandler.getString(EMFWorkbenchEditResourceHandler.EditModelRegistry_ERROR_2, new Object[]{editModelID})); //$NON-NLS-1$
+			throw new IllegalArgumentException(EMFWorkbenchEditResourceHandler.getString(EMFWorkbenchEditResourceHandler.EditModelRegistry_ERROR_2, new Object[]{editModelID}));
 
 		return factory;
 	}
 	
-	
+	/**
+     * @param editModelID
+     * @return
+     */
+    protected EditModelInfo getEditModelInfoById(Object editModelID) {
+        waitForInitializationIfNecessary();
+        return (EditModelInfo) factoryConfigurations.get(editModelID);
+    }
+    
+    /**
+     * If we are not initialized, block until the INSTANCE is released ( from getInstance())
+     */
+    private void waitForInitializationIfNecessary() {
+        /* We only need to acquire the semaphore (INSTANCE), we do not need 
+         * to execute anything in this block. If the Registry is not initailized,
+         * then it will block until the semaphore is released (from getInstance()),
+         * and then release it and return immediately. 
+         */
+		if(!isInitialized()) 
+		    synchronized(INSTANCE) { }
+    }
 
 	public class EditModelInfo {
 
@@ -203,6 +259,7 @@
 
 		private IEditModelFactory factory = null;
 		private List editModelResources = null;
+		private List editModelExtensions = null;
 
 		private String parentModelID = null;
 
@@ -223,25 +280,31 @@
 		}
 
 		public IEditModelFactory getEditModelFactory() {
+//			 Do not block if the factory is not null
 			if (this.factory == null) {
-				if (this.configurationElement != null) {
-					try {
-						this.factory = (IEditModelFactory) this.configurationElement.createExecutableExtension(FACTORY_CLASS_ATTR);
-						String loadUnknownResourceAsReadOnly = this.configurationElement.getAttribute(LOAD_UNKNOWN_RESOURCES_ATTR);
-						Boolean value = loadUnknownResourceAsReadOnly != null ? Boolean.valueOf(loadUnknownResourceAsReadOnly) : Boolean.FALSE;
-						this.factory.setLoadKnownResourcesAsReadOnly(value.booleanValue());
-						discardConfigurationElementIfNecessary();
-					} catch (CoreException e) {
-						Logger.getLogger(EMFWorkbenchEditPlugin.ID).logError(e);
+			  synchronized (this) {
+			      // another thread could have already initialized the factory
+			      // while this thread was waiting to enter the sync block
+			      if(this.factory == null) {
+					if (this.configurationElement != null) {
+						try {
+							this.factory = (IEditModelFactory) this.configurationElement.createExecutableExtension(FACTORY_CLASS_ATTR);
+							Boolean value = Boolean.valueOf(this.configurationElement.getAttribute(LOAD_UNKNOWN_RESOURCES_ATTR));
+							this.factory.setLoadKnownResourcesAsReadOnly(value.booleanValue());
+							discardConfigurationElementIfNecessary();
+						} catch (CoreException e) {
+							Logger.getLogger(EMFWorkbenchEditPlugin.ID).logError(e);
+						}
+					} else {
+						Logger.getLogger().logError(EMFWorkbenchEditResourceHandler.EditModelRegistry_ERROR_1);
 					}
-				} else {
-					Logger.getLogger().logError(EMFWorkbenchEditResourceHandler.EditModelRegistry_ERROR_1); //$NON-NLS-1$
-				}
+			      }
+			    }
 			}
 			return this.factory;
 		}
 
-		private void initializeResources() {
+		private synchronized void initializeResources() {
 
 			if (editModelResources == null) {
 				if (configurationElement != null) {
@@ -249,12 +312,24 @@
 					editModelResources = new ArrayList();
 
 					IConfigurationElement[] resources = configurationElement.getChildren(EditModelResource.EDIT_MODEL_RESOURCE_ELEMENT);
-					for (int j = 0; j < resources.length; j++)
-						editModelResources.add(new EditModelResource(resources[j]));
-
+					IConfigurationElement[] resExtensions = configurationElement.getChildren(EDIT_MODEL_RESOURCE_EXTENSION);
+					// set the configurationElement to null- keeps code from reentering
 					discardConfigurationElementIfNecessary();
+					for (int j = 0; j < resources.length; j++) {
+						editModelResources.add(new EditModelResource(resources[j]));
+					}
+					if (resExtensions == null || resExtensions.length == 0) {
+						editModelExtensions = Collections.EMPTY_LIST;
+					} else {
+						editModelExtensions = new ArrayList();
+						for (int i = 0; i < resExtensions.length; i++) {
+							String extension = resExtensions[i].getAttribute(EDIT_MODEL_RESOURCE_EXTENSION_NAME);
+							editModelExtensions.add(extension);
+						}
+					}
 				} else {
 					editModelResources = Collections.EMPTY_LIST;
+					editModelExtensions = Collections.EMPTY_LIST;
 				}
 			}
 		}
@@ -276,6 +351,12 @@
 		public String getParentModelID() {
 			return parentModelID;
 		}
+		
+		public List getEditModelExtensions() {
+			/* this method is guarded */
+			initializeResources();
+			return editModelExtensions;
+		}
 
 	}
 	/**
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ReadOnlyClientAccessRegistry.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ReadOnlyClientAccessRegistry.java
index 116e5b0..e845428 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ReadOnlyClientAccessRegistry.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ReadOnlyClientAccessRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
  * 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
@@ -29,7 +29,7 @@
 		if (!registry.containsKey(accessorKey)) {
 			this.registry.put(accessorKey, null);
 		} else
-			throw new ClientAccessRegistryException(EMFWorkbenchEditResourceHandler.ClientAccessRegistry_ERROR_0, accessorKey); //$NON-NLS-1$
+			throw new ClientAccessRegistryException(EMFWorkbenchEditResourceHandler.ClientAccessRegistry_ERROR_0, accessorKey);
 	}
 
 	public synchronized void release(Object accessorKey) {
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/Snapshot.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/Snapshot.java
index f42201c..a2b64b4 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/Snapshot.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/Snapshot.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -28,7 +28,7 @@
 public class Snapshot extends RuntimeException {
 
 	public Snapshot() {
-		super(EMFWorkbenchEditResourceHandler.Snapshot_ERROR_0); //$NON-NLS-1$
+		super(EMFWorkbenchEditResourceHandler.Snapshot_ERROR_0);
 	}
 
 	/*
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ComposedEditModel.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ComposedEditModel.java
index fa92e3d..e46fa9a 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ComposedEditModel.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ComposedEditModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -57,22 +57,21 @@
 			cachedKeys.add(newKey);
 	}
 
-	public void dispose() {
-		disposing = true;
-		if (commandStack != null)
-			commandStack.removeCommandStackListener(this);
-		if (hasListeners())
-			notifyListeners(new EditModelEvent(EditModelEvent.PRE_DISPOSE, this));
-		releasePreloadResources();
-		releaseIdentifiers();
-		emfContext = null;
-		listeners = null;
-		removedListeners = null;
-		resources = null;
-		disposing = false;
-		project = null;
-		cachedKeys = new ArrayList();
-	}
+	// Is this necessary anymore?  The only diff seems to be it doesn't release resources
+//	public void dispose() {
+//		disposing = true;
+//		if (commandStack != null)
+//			commandStack.removeCommandStackListener(this);
+//		if (hasListeners())
+//			notifyListeners(new EditModelEvent(EditModelEvent.PRE_DISPOSE, this));
+//		releasePreloadResources();
+//		releaseIdentifiers();
+//		emfContext = null; 
+//		resources = null;
+//		disposing = false;
+//		project = null;
+//		cachedKeys = new ArrayList();
+//	}
 
 	public EditModel.Reference addChild(String editModelID, Map params, Object accessorKey) {
 		return addChild(editModelID, params, ComposedAccessorKey.getComposedAccessorKey(accessorKey, this));
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/DynamicAdapterFactory.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/DynamicAdapterFactory.java
index 77085d8..37571ee 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/DynamicAdapterFactory.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/DynamicAdapterFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -518,7 +518,7 @@
 
 	private AdapterFactory createAdapterFactory(Object project, EPackage ePackage) {
 		if (ePackage == null)
-			throw new IllegalArgumentException(EMFWorkbenchEditResourceHandler.DynamicAdapterFactory_ERROR_0); //$NON-NLS-1$
+			throw new IllegalArgumentException(EMFWorkbenchEditResourceHandler.DynamicAdapterFactory_ERROR_0);
 
 		return createAdapterFactory(project, AdapterFactoryRegistry.instance().getDescriptors(ePackage, viewID));
 
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EMFWorkbenchEditPlugin.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EMFWorkbenchEditPlugin.java
index e32854b..e409b3b 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EMFWorkbenchEditPlugin.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EMFWorkbenchEditPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -13,15 +13,11 @@
 import java.io.FileNotFoundException;
 
 import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.IAdapterManager;
-import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Plugin;
 import org.eclipse.emf.common.util.WrappedException;
-import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
 import org.eclipse.wst.common.internal.emf.utilities.ExtendedEcoreUtil;
-import org.eclipse.wst.common.internal.emfworkbench.EMFAdapterFactory;
 import org.eclipse.wst.common.internal.emfworkbench.PassthruResourceSet;
 import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper;
 import org.osgi.framework.BundleContext;
@@ -68,9 +64,6 @@
 			}
 		});
 		WorkbenchResourceHelper.initializeFileAdapterFactory();
-
-		IAdapterManager manager = Platform.getAdapterManager();
-		manager.registerAdapters(new EMFAdapterFactory(), EObject.class);
 	}
 
 	public static ResourceSet createIsolatedResourceSet(IProject project) {
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModel.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModel.java
index f83ee85..d22d645 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModel.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -28,11 +28,15 @@
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.ISafeRunnable;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.emf.common.command.BasicCommandStack;
-import org.eclipse.emf.common.command.CommandStack;
 import org.eclipse.emf.common.command.CommandStackListener;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.impl.AdapterImpl;
@@ -44,6 +48,7 @@
 import org.eclipse.jem.internal.util.emf.workbench.nls.EMFWorkbenchResourceHandler;
 import org.eclipse.jem.util.emf.workbench.ResourceSetWorkbenchSynchronizer;
 import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
+import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.common.frameworks.internal.ISaveHandler;
 import org.eclipse.wst.common.frameworks.internal.SaveFailedException;
 import org.eclipse.wst.common.frameworks.internal.SaveHandlerHeadless;
@@ -73,13 +78,15 @@
 public class EditModel implements CommandStackListener, ResourceStateInputProvider, ResourceStateValidator, IEnablementIdentifierListener {
 
 	protected BasicCommandStack commandStack;
-	protected List listeners;
-	protected List removedListeners = new ArrayList();
+	protected final ListenerList listeners = new ListenerList();
+
 	private Map params;
 	private final String editModelID;
 	private final boolean readOnly;
 	// These are the current resource uris we need to track
 	protected List knownResourceUris;
+	// These are the current resource extensions to track
+	protected List knownResourceExtensions;
 	// This is a subset of the known resource uris, which we have requested be autoloaded
 	protected List preloadResourceUris;
 	// This is a map of identifiers to resources that we need to listen to in order to listen for
@@ -104,7 +111,7 @@
 
 	protected class ResourceAdapter extends AdapterImpl {
 		public void notifyChanged(Notification notification) {
-			if (notification.getEventType() == Notification.SET && notification.getFeatureID(null) == Resource.RESOURCE__IS_LOADED) {
+			if (!isDisposing() && notification.getEventType() == Notification.SET && notification.getFeatureID(null) == Resource.RESOURCE__IS_LOADED) {
 				resourceIsLoadedChanged((Resource) notification.getNotifier(), notification.getOldBooleanValue(), notification.getNewBooleanValue());
 			}
 		}
@@ -126,13 +133,6 @@
 		processPreloadResources();
 	}
 
-
-//	private ClientAccessRegistry initializeRegistry(Object read) {
-//
-//		return null;
-//	}
-
-
 	public EditModel(String editModelID, EMFWorkbenchContext context, boolean readOnly, boolean accessUnknownResourcesAsReadOnly) {
 		this(editModelID, context, readOnly);
 		this.accessAsReadForUnKnownURIs = accessUnknownResourcesAsReadOnly;
@@ -145,46 +145,51 @@
 		return editModelID;
 	}
 
-	/**
-	 * Insert the method's description here. Creation date: (9/27/2001 10:25:43 PM)
-	 * 
-	 * @return boolean
-	 */
 	public boolean isDisposing() {
 		return disposing;
 	}
 
+	
+	/**
+	 * Subclasses should not override this method. This method will be made
+	 * final in the next release. Subclasses should override doDispose() as
+	 * necessary to dispose any additional artifacts.
+	 */
 	public void dispose() {
-		synchronized (this) {
-			if (disposing || isDisposed())
+		try {
+			if (disposing || disposed)
 				return;
 			disposing = true;
-		}
-		try {
+		
+			if (hasListeners())
+				notifyListeners(new EditModelEvent(EditModelEvent.PRE_DISPOSE, this));
+			
 			releaseResources();
 
 			if (commandStack != null)
 				commandStack.removeCommandStackListener(this);
-			if (hasListeners())
-				notifyListeners(new EditModelEvent(EditModelEvent.PRE_DISPOSE, this));
 			if (getEmfContext() != null)
 				getEmfContext().removeEditModel(this, isReadOnly());
 			releasePreloadResources();
 			releaseIdentifiers();
-
+			doDispose();
+		} catch (RuntimeException re) {
+			Logger.getLogger().logError(re);
+		} finally {
 			emfContext = null;
-			listeners = null;
-			removedListeners = null;
 			resources = null;
 			project = null;
-		} catch (RuntimeException re) {
-			re.printStackTrace();
-		} finally {
 			disposed = true;
 			disposing = false;
 		}
 	}
 
+	/**
+	 * Subclasses should override as necessary
+	 */
+	protected void doDispose() {
+	}
+
 	protected void releaseIdentifiers() {
 		if (resourceIdentifiers == null)
 			return;
@@ -209,6 +214,10 @@
 				URI uri = (URI) preloadResourceUris.get(i);
 				sync.disableAutoload(uri);
 			}
+			for (int i = 0; i < knownResourceExtensions.size(); i++) {
+				String ext = (String) knownResourceExtensions.get(i);
+				sync.disableAutoload(ext);
+			}
 		}
 	}
 
@@ -224,7 +233,7 @@
 	}
 
 	/**
-	 * This is called with the {@link CommandStack}'s state has changed.
+	 * This is called with the {@linkorg.eclipse.emf.common.command.CommandStack}'s state has changed.
 	 */
 	public void commandStackChanged(java.util.EventObject event) {
 		if (dirtyModelEvent == null)
@@ -256,7 +265,7 @@
 	 * Returns true if there are any listeners
 	 */
 	public boolean hasListeners() {
-		return !getListeners().isEmpty();
+		return !listeners.isEmpty();
 	}
 
 	/** ** END Command Stack Manipulation *** */
@@ -269,19 +278,8 @@
 	 * @aListener to the list of listeners.
 	 */
 	public void addListener(EditModelListener aListener) {
-		if (aListener != null && !getListeners().contains(aListener))
-			getListeners().add(aListener);
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/11/2001 4:42:58 PM)
-	 * 
-	 * @return java.util.List
-	 */
-	protected java.util.List getListeners() {
-		if (listeners == null)
-			listeners = new ArrayList();
-		return listeners;
+		if (aListener != null)
+			listeners.add(aListener);
 	}
 
 	/**
@@ -289,28 +287,14 @@
 	 * 
 	 * @anEvent.
 	 */
-	protected void notifyListeners(EditModelEvent anEvent) {
-		if (listeners == null)
-			return;
-		boolean oldIsNotifying = isNotifing;
-		synchronized (this) {
-			isNotifing = true;
-		}
-		try {
-			List list = getListeners();
-			for (int i = 0; i < list.size(); i++) {
-				EditModelListener listener = (EditModelListener) list.get(i);
-				if (!removedListeners.contains(listener))
-					listener.editModelChanged(anEvent);
-			}
-		} finally {
-			synchronized (this) {
-				isNotifing = oldIsNotifying;
-				if (!isNotifing && removedListeners != null && !removedListeners.isEmpty()) {
-					listeners.removeAll(removedListeners);
-					removedListeners.clear();
-				}
-			}
+	protected void notifyListeners(final EditModelEvent anEvent) {
+		
+		NotifyRunner notifier = new NotifyRunner(anEvent); 
+		
+		Object[] notifyList = listeners.getListeners(); 
+		for (int i = 0; i < notifyList.length; i++) {
+			notifier.setListener( (EditModelListener) notifyList[i] );
+			SafeRunner.run(notifier);
 		}
 	}
 
@@ -319,13 +303,9 @@
 	 * 
 	 * @aListener from the list of listeners.
 	 */
-	public synchronized boolean removeListener(EditModelListener aListener) {
-		if (aListener != null) {
-			if (isNotifing)
-				return removedListeners.add(aListener);
-			return getListeners().remove(aListener);
-		}
-		return false;
+	public boolean removeListener(EditModelListener aListener) {
+		listeners.remove(aListener);
+		return true;
 	}
 
 	/** ** END Listeners *** */
@@ -397,8 +377,7 @@
 			getSaveHandler().handleSaveFailed(ex, monitor);
 		} catch (Exception ex) {
 			ex.printStackTrace();
-		}
-		finally {
+		} finally {
 			getSaveHandler().release();
 		}
 	}
@@ -479,7 +458,7 @@
 
 	protected void runSaveOperation(IWorkspaceRunnable runnable, IProgressMonitor monitor) throws SaveFailedException {
 		try {
-			ResourcesPlugin.getWorkspace().run(runnable, getProject(),IWorkspace.AVOID_UPDATE,monitor);
+			ResourcesPlugin.getWorkspace().run(runnable, ResourcesPlugin.getWorkspace().getRoot(), IWorkspace.AVOID_UPDATE, monitor);
 		} catch (CoreException e) {
 			throw new SaveFailedException(e);
 		}
@@ -527,17 +506,35 @@
 			res = (EditModelResource) iter.next();
 			addEditModelResource(res);
 		}
-
+		Collection resourceExtensions = EditModelRegistry.getInstance().getEditModelExtensions(getEditModelID());
+		/* bug 170690 - initialize knownResourceExtensions if necessary, and change reference from iter to it */
+		if (knownResourceExtensions == null)
+		{
+			knownResourceExtensions = new ArrayList();
+		}
+		if (!resourceExtensions.isEmpty())
+		{
+			knownResourceExtensions.addAll(resourceExtensions);
+			Iterator it = resourceExtensions.iterator();
+			ResourceSetWorkbenchEditSynchronizer sync = (ResourceSetWorkbenchEditSynchronizer) getEmfContext().getResourceSet().getSynchronizer();
+			while (it.hasNext()) {
+				sync.enableAutoload(it.next().toString());
+			}
+		}
 	}
 
 	private void addEditModelResource(EditModelResource res) {
 		boolean enabled = false;
-		if (res.isCore()) {
-			enabled = true;
-		} else {
-			IEnablementIdentifier identifier = res.getEnablementIdentifier(getProject());
-			registerInterest(identifier, res);
-			enabled = identifier.isEnabled();
+		try {
+			if (res.isCore()) {
+				enabled = true;
+			} else {
+				IEnablementIdentifier identifier = res.getEnablementIdentifier(getProject());
+				registerInterest(identifier, res);
+				enabled = identifier.isEnabled();
+			}
+		} catch (RuntimeException re) {
+			Logger.getLogger().logWarning(re);
 		}
 		if (enabled) {
 			URI uri = res.getURI();
@@ -641,6 +638,8 @@
 	 * @see ResourceStateValidator#validateState(ResourceStateValidatorPresenter)
 	 */
 	public IStatus validateState(ResourceStateValidatorPresenter presenter) throws CoreException {
+		if (presenter == null)
+			return Status.OK_STATUS;
 		return getStateValidator().validateState(presenter);
 	}
 
@@ -671,7 +670,7 @@
 	}
 
 	protected void resourceIsLoadedChanged(Resource aResource, boolean oldValue, boolean newValue) {
-		if (!isReverting && hasListeners()) {
+		if (!isReverting && !disposing && hasListeners()) {
 			int eventCode = newValue ? EditModelEvent.LOADED_RESOURCE : EditModelEvent.UNLOADED_RESOURCE;
 			EditModelEvent evt = new EditModelEvent(eventCode, this);
 			evt.addResource(aResource);
@@ -967,10 +966,10 @@
 		registry.release(accessorKey);
 
 		if (!isDisposing()) {
-			synchronized (this) {
-				if (registry.size() == 0) {
-					dispose();
-				}
+			boolean shouldDispose = false;
+			shouldDispose = registry.size() == 0;
+			if (shouldDispose) {
+				dispose();
 			}
 		}
 	}
@@ -1583,4 +1582,31 @@
 	public void setParams(Map params) {
 		this.params = params;
 	}
+	
+	public class NotifyRunner implements ISafeRunnable { 
+		
+		private final EditModelEvent event;
+		private EditModelListener listener;
+		
+		public NotifyRunner(EditModelEvent event) {
+			Assert.isNotNull(event);
+			this.event = event;
+		}
+		
+		
+		public void setListener(EditModelListener listener) {
+			this.listener = listener;
+		}
+
+		public void handleException(Throwable exception) { 
+			EMFWorkbenchEditPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, EMFWorkbenchEditPlugin.ID, 0, exception.getMessage(), exception));
+			
+		}
+
+		public void run() throws Exception {
+			if(listener != null)
+				listener.editModelChanged(event); 
+		}
+		
+	};
 }
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModifierHelper.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModifierHelper.java
index 1020c31..ad949b3 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModifierHelper.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModifierHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -18,6 +18,7 @@
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.impl.EClassImpl;
+import org.eclipse.emf.edit.command.SetCommand;
 import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.common.internal.emf.utilities.FeatureValueConversionException;
 import org.eclipse.wst.common.internal.emf.utilities.FeatureValueConverter;
@@ -100,8 +101,8 @@
 	//Calling this will cause the value to be removed or unset from the owner.
 	public void doUnsetValue() {
 		shouldUnsetValue = true;
-		if (value != null && feature != null && !feature.isMany())
-			setValue(null);
+		if (value != SetCommand.UNSET_VALUE && feature != null && !feature.isMany())
+			primSetValue(SetCommand.UNSET_VALUE);
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ProjectResourceSetEditImpl.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ProjectResourceSetEditImpl.java
index aa8f271..07a326e 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ProjectResourceSetEditImpl.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ProjectResourceSetEditImpl.java
@@ -18,6 +18,7 @@
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.ContentHandler;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.jem.internal.util.emf.workbench.ProjectResourceSetImpl;
 import org.eclipse.wst.common.internal.emf.resource.ReferencedResource;
@@ -43,11 +44,14 @@
 	 * 
 	 * @see org.eclipse.jem.internal.util.emf.workbench.ProjectResourceSetImpl#createResource(org.eclipse.emf.common.util.URI)
 	 */
-	public Resource createResource(URI uri) {
-		Resource result = super.createResource(uri);
+	public Resource createResource(URI uri, String contentType) {
+		Resource result = super.createResource(uri, contentType);
 		if (result != null && WorkbenchResourceHelper.isReferencedResource(result))
 			WorkbenchResourceHelper.cacheSynchronizationStamp((ReferencedResource) result);
 		return result;
 	}
 
+	public Resource createResource(URI uri) {
+		return createResource(uri, ContentHandler.UNSPECIFIED_CONTENT_TYPE);
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ResourceSetWorkbenchEditSynchronizer.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ResourceSetWorkbenchEditSynchronizer.java
index 3c5c4b5..d728798 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ResourceSetWorkbenchEditSynchronizer.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ResourceSetWorkbenchEditSynchronizer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -29,6 +30,15 @@
 import org.eclipse.core.resources.IResourceChangeEvent;
 import org.eclipse.core.resources.IResourceDelta;
 import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.jobs.ILock;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.common.util.WrappedException;
 import org.eclipse.emf.ecore.resource.Resource;
@@ -50,8 +60,63 @@
 public class ResourceSetWorkbenchEditSynchronizer extends ResourceSetWorkbenchSynchronizer implements IResourceDeltaVisitor {
 	private static final String CLASS_EXTENSION = "class"; //$NON-NLS-1$
 	private static final String JAVA_EXTENSION = "java"; //$NON-NLS-1$
+	private static final String JAVA_ARCHIVE = "jar"; //$NON-NLS-1$
 	private Set recentlySavedFiles = new HashSet();
 	private Map ignoredFilesCache = new HashMap();
+	private class SavedFileKey {
+		private Resource res;
+		private IFile savedFile;
+		public SavedFileKey(Resource res, IFile savedFile) {
+			super();
+			this.res = res;
+			this.savedFile = savedFile;
+		}
+		public Resource getRes() {
+			return res;
+		}
+		public void setRes(Resource res) {
+			this.res = res;
+		}
+		public IFile getSavedFile() {
+			return savedFile;
+		}
+		public void setSavedFile(IFile savedFile) {
+			this.savedFile = savedFile;
+		}
+		public int hashCode() {
+			final int prime = 31;
+			int result = 1;
+			result = prime * result + getOuterType().hashCode();
+			result = prime * result + ((res == null) ? 0 : res.hashCode());
+			result = prime * result + ((savedFile == null) ? 0 : savedFile.hashCode());
+			return result;
+		}
+		public boolean equals(Object obj) {
+			if (this == obj)
+				return true;
+			if (obj == null)
+				return false;
+			if (getClass() != obj.getClass())
+				return false;
+			SavedFileKey other = (SavedFileKey) obj;
+			if (!getOuterType().equals(other.getOuterType()))
+				return false;
+			if (res == null) {
+				if (other.res != null)
+					return false;
+			} else if (!res.equals(other.res))
+				return false;
+			if (savedFile == null) {
+				if (other.savedFile != null)
+					return false;
+			} else if (!savedFile.equals(other.savedFile))
+				return false;
+			return true;
+		}
+		private ResourceSetWorkbenchEditSynchronizer getOuterType() {
+			return ResourceSetWorkbenchEditSynchronizer.this;
+		}
+	}
 
 	/** The emf resources to be removed from the resource set as a result of a delta */
 	protected List deferredRemoveResources = new ArrayList();
@@ -59,7 +124,7 @@
 	protected List deferredLoadResources = new ArrayList();
 
 	protected List autoloadResourcesURIs = new ArrayList();
-
+	protected List autoloadResourcesExts = new ArrayList();
 
 
 	/**
@@ -120,12 +185,61 @@
 		}
 	}
 
-	protected void acceptDelta(IResourceChangeEvent event) {
-		IResourceDelta delta = event.getDelta();
-		// search for changes to any projects using a visitor
+	private ILock lock;
+	private static final long delay = 30;
+	
+    private ILock getLock() {
+        if (lock == null)
+            lock = Platform.getJobManager().newLock();
+        return lock;
+    }
+    
+    private void releaseLock() {
+        getLock().release();
+    }
+    private boolean aquireLock() throws InterruptedException{
+    	return getLock().acquire(delay);
+    }
+    
+	protected void acceptDelta(final IResourceChangeEvent event) {
+
+		boolean hasLocked = false;
+		try {
+			hasLocked = aquireLock();
+		} catch (InterruptedException e) {
+			Logger.getLogger().write(e);
+		}		
+		
+		try{
+			final IResourceDelta delta = event.getDelta();
+	
+			if (ResourcesPlugin.getWorkspace().isTreeLocked()) {
+				primAcceptDelta(delta, event);
+			}
+			else {
+				IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
+					public void run(IProgressMonitor monitor) throws CoreException {
+						primAcceptDelta(delta, event);
+					}
+				};
+				try {
+					ResourcesPlugin.getWorkspace().run(runnable, project, IWorkspace.AVOID_UPDATE, null);
+				} catch (CoreException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
+		}finally{
+			if( hasLocked )
+				releaseLock();
+		}
+	}
+
+	private void primAcceptDelta(IResourceDelta delta, IResourceChangeEvent event) {
 		if (delta != null) {
 			try {
-				delta.accept(this);
+				currentProjectDelta = null;
+				delta.accept(ResourceSetWorkbenchEditSynchronizer.this);
 			} catch (Exception e) {
 				Logger.getLogger().logError(e);
 			}
@@ -164,8 +278,6 @@
 					currentProjectDelta = delta;
 					return true;
 				}
-				// added line
-				currentProjectDelta = null;
 				return false;
 			}
 			if (resource.getType() == IResource.FILE && isInterrestedInFile((IFile) resource)) {
@@ -207,27 +319,83 @@
 	 * @post Return true if a <code>Resource</code> was queued up to be reloaded.
 	 */
 	protected boolean addedResource(IFile aFile) {
-		//Process resource as a refresh.
-		return processResource(aFile, false);
+        boolean didProcess = false;
+        List resources = getResources(aFile);
+        for (Iterator iterator = resources.iterator(); iterator.hasNext();) {
+			Resource resource = (Resource) iterator.next();
+
+			if ((resource != null) || (recentlySavedFilesContains(resource))) {
+				/*
+				 * The IFile was just added to the workspace but we have a
+				 * resource in memory. Need to decide if it should be unloaded.
+				 */
+				if (resource.isModified()) {
+					if (WorkbenchResourceHelper.isReferencedResource(resource)) {
+						ReferencedResource refRes = (ReferencedResource) resource;
+						if (refRes.shouldForceRefresh()) {
+							deferredUnloadResources.add(resource);
+							didProcess = true;
+						}
+					}
+				} else {
+					/* Unload if found and is not modified but inconsistent. */
+					if (resource.isLoaded()) {
+						if (WorkbenchResourceHelper.isReferencedResource(resource)) {
+							if (!WorkbenchResourceHelper.isConsistent((ReferencedResource) resource)) {
+								deferredUnloadResources.add(resource);
+								didProcess = true;
+							}
+						} else {
+							deferredUnloadResources.add(resource);
+							didProcess = true;
+						}
+					}
+				}
+			} else {
+				// Process resource as a refresh.
+				URI uri = URI.createPlatformResourceURI(aFile.getFullPath().toString());
+				if ((autoloadResourcesURIs.contains(uri)) || (autoloadResourcesExts.contains(aFile.getFileExtension()))) {
+					deferredLoadResources.add(uri);
+					didProcess = true;
+				}
+			}
+		}
+        return didProcess;
+}
+
+	private synchronized boolean recentlySavedFilesContains(Resource resource) {
+		for (Iterator iterator = recentlySavedFiles.iterator(); iterator.hasNext();) {
+			SavedFileKey key = (SavedFileKey) iterator.next();
+			if (key.res.equals(resource)) 
+				return true;
+			}
+		return false;
 	}
 
 	protected boolean processResource(IFile aFile, boolean isRemove) {
-		Resource resource = getResource(aFile);
-		if ((resource != null) || (recentlySavedFiles.contains(resource))){
-			if (resource.isModified()) {
-				if (WorkbenchResourceHelper.isReferencedResource(resource)) {
-					ReferencedResource refRes = (ReferencedResource) resource;
-					if (!refRes.shouldForceRefresh())
-						return false; //Do not do anything
-				} else
-					return false;
+		List resources = getResources(aFile);
+        for (Iterator iterator = resources.iterator(); iterator.hasNext();) {
+			Resource resource = (Resource) iterator.next();
+			if ((resource != null) || (recentlySavedFilesContains(resource))) {
+				if (resource.isModified()) {
+					if (WorkbenchResourceHelper.isReferencedResource(resource)) {
+						ReferencedResource refRes = (ReferencedResource) resource;
+						if (!refRes.shouldForceRefresh())
+							continue; // Do not do anything
+					} else
+						continue;
+				}
+
+				if (isRemove)
+					deferredRemoveResources.add(resource);
+				else if (resource.isLoaded()) {
+					if (WorkbenchResourceHelper.isReferencedResource(resource)) {
+						if (!WorkbenchResourceHelper.isConsistent((ReferencedResource) resource))
+							deferredUnloadResources.add(resource);
+					} else
+						deferredUnloadResources.add(resource);
+				}
 			}
-			if (isRemove)
-				deferredRemoveResources.add(resource);
-			else if (resource.isLoaded())
-				deferredUnloadResources.add(resource);
-			else if (autoloadResourcesURIs.contains(resource.getURI()))
-				deferredLoadResources.add(resource.getURI());
 		}
 		return false;
 	}
@@ -254,8 +422,28 @@
 	}
 
 	protected Resource getResource(IFile aFile) {
+		
 		return resourceSet.getResource(URI.createPlatformResourceURI(aFile.getFullPath().toString()), false);
 	}
+	
+	protected List getResources(IFile aFile) {
+		
+		List resources = new ArrayList();
+		List allResources = resourceSet.getResources();
+		for (Iterator iterator = allResources.iterator(); iterator.hasNext();) {
+			Resource res = (Resource) iterator.next();
+			URI resURI = res.getURI();
+			IPath resURIPath;
+			if (WorkbenchResourceHelper.isPlatformResourceURI(resURI)) 
+				resURIPath = new Path(URI.decode(resURI.path())).removeFirstSegments(2);
+			else 
+				resURIPath = new Path(URI.decode(resURI.path())).removeFirstSegments(1);
+			String resURIString = resURIPath.toString();
+			if (!resURIString.equals("") && aFile.getFullPath().toString().indexOf(resURIString) != -1)
+				resources.add(res);
+		}
+		return resources;
+	}
 
 
 	/**
@@ -263,21 +451,64 @@
 	 */
 	public void preSave(IFile aFile) {
 		if (aFile != null) {
-			recentlySavedFiles.add(aFile);
+			recentlySavedFilesAdd(aFile,null);
 			ignoredFilesCache.remove(aFile);
 		}
 	}
+	
+	/**
+	 * This method should be called prior to writing to an IFile from a MOF resource.
+	 */
+	public void preSave(IFile aFile, Resource res) {
+		if (aFile != null) {
+			recentlySavedFilesAdd(aFile, res);
+			ignoredFilesCache.remove(aFile);
+		}
+	}
+
+	private synchronized boolean recentlySavedFilesAdd(IFile file, Resource res) {
+		return recentlySavedFiles.add(new SavedFileKey(res, file));
+	}
 
 	/**
 	 * This method should be called after a preSave if the save fails
 	 */
 	public void removeFromRecentlySavedList(IFile aFile) {
 		if (aFile != null) {
-			recentlySavedFiles.remove(aFile);
+			recentlySavedFilesForceRemove(aFile);
 			ignoredFilesCache.remove(aFile);
 		}
 	}
 
+	private synchronized boolean recentlySavedFilesRemove(IFile file) {
+		
+		boolean removedFromList = false;
+		for (Iterator iterator = recentlySavedFiles.iterator(); iterator.hasNext();) {
+			SavedFileKey key = (SavedFileKey) iterator.next();
+			if (key.savedFile != null && key.savedFile.equals(file)) {
+				List resources = getResources(file);
+				if (key.res == null || resources.contains(key.res) ) {
+					iterator.remove();
+					removedFromList = true;
+					break;
+				}
+			}
+		}
+		return removedFromList;
+	}
+	private synchronized boolean recentlySavedFilesForceRemove(IFile file) {
+		
+		boolean removedFromList = false;
+		for (Iterator iterator = recentlySavedFiles.iterator(); iterator.hasNext();) {
+			SavedFileKey key = (SavedFileKey) iterator.next();
+			if (key.savedFile != null && key.savedFile.equals(file)) {
+					iterator.remove();
+					removedFromList = true;
+			}
+		}
+		return removedFromList;
+	}
+
 	/**
 	 * This method should be called just after writing to an IFile from a MOF resource.
 	 * 
@@ -300,11 +531,11 @@
 	 */
 	protected boolean isInterrestedInFile(IFile aFile) {
 		String extension = aFile.getFileExtension();
-		if (CLASS_EXTENSION.equals(extension) || JAVA_EXTENSION.equals(extension))
+		if (CLASS_EXTENSION.equals(extension) || JAVA_EXTENSION.equals(extension) || JAVA_ARCHIVE.equals(extension))
 			return false;
-		if (recentlySavedFiles.remove(aFile)) {
-			cacheIgnored(aFile);
-			return false;
+		if (recentlySavedFilesRemove(aFile)) {
+				cacheIgnored(aFile);
+				return false;
 		}
 		return !hasIgnored(aFile);
 	}
@@ -352,5 +583,18 @@
 	protected void initialize() {
 		getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_DELETE | IResourceChangeEvent.POST_CHANGE);
 	}
+	public void enableAutoload(String extension) {
+		autoloadResourcesExts.add(extension);
+		
+	}
+	public void disableAutoload(String extension) {
+		autoloadResourcesExts.remove(extension);
+	}
+
+	public void dispose() {
+		super.dispose();
+		currentProjectDelta = null;
+		extenders = null;
+	}
 
 }
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ResourceStateValidatorImpl.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ResourceStateValidatorImpl.java
index 8be0814..b00b6f9 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ResourceStateValidatorImpl.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ResourceStateValidatorImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -280,7 +280,7 @@
 			res = (Resource) mofResources.get(i);
 			if (WorkbenchResourceHelper.isReferencedResource(res)) {
 				refRes = (ReferencedResource) res;
-				if (!WorkbenchResourceHelper.isConsistent(refRes)) {
+				if (!WorkbenchResourceHelper.isConsistent(refRes) && (refRes.isLoaded() && !refRes.isNew())) {
 					if (inconsistent == null)
 						inconsistent = new ArrayList();
 					inconsistent.add(refRes);
diff --git a/plugins/org.eclipse.wst.common.environment/.classpath b/plugins/org.eclipse.wst.common.environment/.classpath
index 751c8f2..ce73933 100644
--- a/plugins/org.eclipse.wst.common.environment/.classpath
+++ b/plugins/org.eclipse.wst.common.environment/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.wst.common.environment/.cvsignore b/plugins/org.eclipse.wst.common.environment/.cvsignore
index 60286c3..3609926 100644
--- a/plugins/org.eclipse.wst.common.environment/.cvsignore
+++ b/plugins/org.eclipse.wst.common.environment/.cvsignore
@@ -3,3 +3,4 @@
 temp.folder
 @dot
 src.zip
+javaCompiler...args
diff --git a/plugins/org.eclipse.wst.common.environment/.options b/plugins/org.eclipse.wst.common.environment/.options
index b293015..2c7ba42 100644
--- a/plugins/org.eclipse.wst.common.environment/.options
+++ b/plugins/org.eclipse.wst.common.environment/.options
@@ -19,3 +19,10 @@
 
 # Turn on web service ant tracing
 org.eclipse.wst.common.environment/trace/ws_ant=true
+
+# Turn on web service detailed command engine tracing
+org.eclipse.wst.common.environment/trace/ws_dt_cmd_engine=true
+
+# Turn on web service framework tracing
+org.eclipse.wst.common.environment/trace/ws_framework=true
+
diff --git a/plugins/org.eclipse.wst.common.environment/.project b/plugins/org.eclipse.wst.common.environment/.project
index 557b51d..aa72ec5 100644
--- a/plugins/org.eclipse.wst.common.environment/.project
+++ b/plugins/org.eclipse.wst.common.environment/.project
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>org.eclipse.wst.common.enviornment</name>
+	<name>org.eclipse.wst.common.environment</name>
 	<comment></comment>
 	<projects>
 	</projects>
diff --git a/plugins/org.eclipse.wst.common.environment/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.common.environment/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..bd896db
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.environment/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,57 @@
+#Mon Jan 30 10:37:36 EST 2006
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=ignore
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/plugins/org.eclipse.wst.common.environment/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.wst.common.environment/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..6e43cd0
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.environment/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,12 @@
+#Mon Jan 30 10:40:26 EST 2006
+compilers.p.deprecated=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=1
+compilers.p.unknown-attribute=0
+compilers.p.unknown-class=0
+compilers.p.unknown-element=1
+compilers.p.unknown-resource=0
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.use-project=true
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.wst.common.environment/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.environment/META-INF/MANIFEST.MF
index 9c9fc9f..d7cf139 100644
--- a/plugins/org.eclipse.wst.common.environment/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.environment/META-INF/MANIFEST.MF
@@ -1,11 +1,19 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
-Bundle-Name: Enviornment Plug-in
+Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.common.environment
-Bundle-Version: 1.0.0
+Bundle-Version: 1.0.201.qualifier
+Bundle-Activator: org.eclipse.wst.common.internal.environment.plugin.EnvironmentPlugin
 Bundle-Localization: plugin
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.core.resources,
- org.eclipse.osgi.util
 Export-Package: org.eclipse.wst.common.environment,
- org.eclipse.wst.common.environment.uri
+ org.eclipse.wst.common.environment.uri,
+ org.eclipse.wst.common.internal.environment.eclipse;x-internal:=true,
+ org.eclipse.wst.common.internal.environment.plugin;x-internal:=true,
+ org.eclipse.wst.common.internal.environment.relative;x-internal:=true,
+ org.eclipse.wst.common.internal.environment.uri.file;x-internal:=true
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.osgi.util;bundle-version="[3.1.300,4.0.0)"
+Bundle-Vendor: %providerName
+Eclipse-LazyStart: true 
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/plugins/org.eclipse.wst.common.environment/about.html b/plugins/org.eclipse.wst.common.environment/about.html
index 3962f54..2199df3 100644
--- a/plugins/org.eclipse.wst.common.environment/about.html
+++ b/plugins/org.eclipse.wst.common.environment/about.html
@@ -1,22 +1,34 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
+<HTML>
+
 <head>
 <title>About</title>
 <meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
 </head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>October 7, 2005</p>	
-<h3>License</h3>
 
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+<BODY lang="EN-US">
 
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
+<H3>About This Content</H3>
 
-</body>
-</html>
\ No newline at end of file
+<P>June, 2008</P>
+
+<H3>License</H3>
+
+<P>The Eclipse Foundation makes available all content in this plug-in 
+("Content"). Unless otherwise indicated below, the Content is provided to you 
+under the terms and conditions of the Eclipse Public License Version 1.0 
+("EPL"). A copy of the EPL is available at
+<A href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</A>. 
+For purposes of the EPL, "Program" will mean the Content.</P>
+
+<P>If you did not receive this Content directly from the Eclipse Foundation, the 
+Content is being redistributed by another party ("Redistributor") and different 
+terms and conditions may apply to your use of any object code in the Content. 
+Check the Redistributor’s license that was provided with the Content. If no such 
+license exists, contact the Redistributor. Unless otherwise indicated below, the 
+terms and conditions of the EPL still apply to any source code in the Content 
+and such source code may be obtained at
+<A href="http://www.eclipse.org/">http://www.eclipse.org/</A>.</P>
+
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.wst.common.environment/build.properties b/plugins/org.eclipse.wst.common.environment/build.properties
index 17daa5b..19c4009 100644
--- a/plugins/org.eclipse.wst.common.environment/build.properties
+++ b/plugins/org.eclipse.wst.common.environment/build.properties
@@ -1,5 +1,17 @@
+###############################################################################
+# Copyright (c) 2005, 2006 IBM Corporation and others.
+# 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:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 source.. = src/
 output.. = bin/
 bin.includes = META-INF/,\
                .,\
-               about.html
+               about.html,\
+               plugin.properties,\
+               .options
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/environment.properties b/plugins/org.eclipse.wst.common.environment/plugin.properties
similarity index 79%
rename from plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/environment.properties
rename to plugins/org.eclipse.wst.common.environment/plugin.properties
index eefde94..c41575f 100644
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/environment.properties
+++ b/plugins/org.eclipse.wst.common.environment/plugin.properties
@@ -1,17 +1,13 @@
 ###############################################################################
-# Copyright (c) 2001, 2005 IBM Corporation and others.
+# Copyright (c) 2006 IBM Corporation and others.
 # 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:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
 
-TITLE_WARNING=Warning:
-TITLE_ERROR=Error:
-TITLE_INFO=Info:
-
-
-
+pluginName=Enviornment Plug-in
+providerName=Eclipse.org
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/Choice.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/Choice.java
index 7ec982c..dcd58e4 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/Choice.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/Choice.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/EnvironmentException.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/EnvironmentException.java
index 6e3f70b..3d32d38 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/EnvironmentException.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/EnvironmentException.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/IEnvironment.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/IEnvironment.java
index 568a4f4..39503be 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/IEnvironment.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/IEnvironment.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/ILog.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/ILog.java
index 925ed24..291fcab 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/ILog.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/ILog.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/IStatusHandler.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/IStatusHandler.java
index 9c3aee6..4492a99 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/IStatusHandler.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/IStatusHandler.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/NullStatusHandler.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/NullStatusHandler.java
index 3e22891..af1f1de 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/NullStatusHandler.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/NullStatusHandler.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/StatusException.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/StatusException.java
index e747ed0..b01b8ca 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/StatusException.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/StatusException.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURI.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURI.java
index 9352326..28a63bd 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURI.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURI.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIFactory.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIFactory.java
index f8a3123..9d8734d 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIFactory.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIFactory.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIFilter.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIFilter.java
index 3e41c8e..5985c2e 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIFilter.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIFilter.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIScheme.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIScheme.java
index 61177ce..7b87608 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIScheme.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIScheme.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIVisitor.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIVisitor.java
index aa752eb..586a3d7 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIVisitor.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIVisitor.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/SimpleURIFactory.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/SimpleURIFactory.java
index 90945ac..bccb2e0 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/SimpleURIFactory.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/SimpleURIFactory.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/URIException.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/URIException.java
index e1aee84..ccb7543 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/URIException.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/URIException.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/ConsoleEclipseEnvironment.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/ConsoleEclipseEnvironment.java
index 8e1c1e1..0c9c95e 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/ConsoleEclipseEnvironment.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/ConsoleEclipseEnvironment.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseLog.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseLog.java
index ef48ab5..e1d75e6 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseLog.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseLog.java
@@ -1,28 +1,34 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2006 IBM Corporation and others.
  * 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:
- *     IBM Corporation - initial API and implementation
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20060221   100364 pmoogk@ca.ibm.com - Peter Moogk
  *******************************************************************************/
 package org.eclipse.wst.common.internal.environment.eclipse;
 
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.wst.common.environment.ILog;
+import org.eclipse.wst.common.internal.environment.plugin.EnvironmentPlugin;
 
 public class EclipseLog implements org.eclipse.wst.common.environment.ILog 
 {
-//	private Logger logger;
-	public EclipseLog() {
-		/*
-		logger = Logger.getLogger("org.eclipse.wst.command.env");
-		// logger.setLogFileName("env.log");
-		logger.setLevel(Level.INFO); // log all levels for now
-		*/
+	private org.eclipse.core.runtime.ILog logger;
+	
+	public EclipseLog() 
+	{
+		Plugin plugin = EnvironmentPlugin.getInstance();
+		
+    logger = plugin.getLog();
 	}
 	
 	/**
@@ -45,28 +51,46 @@
 	 * @see org.eclipse.wst.common.environment.ILog#log(int, int, java.lang.Object, java.lang.String, java.lang.Object)
 	 */
 	public void log(int severity, int messageNum, Object caller,
-			String method, Object object) {
+			String method, Object object) 
+	{
 		
 		if (isEnabled()) {
 			switch (severity) {
 				case ILog.ERROR :
+				{
 					if (isEnabled("error"))
-						System.out.println(getMessageNumString(messageNum) + "E "
+					{
+						String message = getMessageNumString(messageNum) + "E "
 							+ caller + "::" + method + ": object="
-							+ object);
+							+ object;
+						log( severity, message, null );
+					}
 					break;
+				}
+				
 				case ILog.WARNING :
+				{
 					if (isEnabled("warning"))
-						System.out.println(getMessageNumString(messageNum)
+					{
+						String message = getMessageNumString(messageNum)
 								+ "W " + caller + "::" + method
-								+ ": object=" + object);
+								+ ": object=" + object;
+						log( severity, message, null );
+					}
 					break;
+				}
+				
 				case ILog.INFO :
+				{
 					if (isEnabled("info"))
-						System.out.println(getMessageNumString(messageNum) + "I "
+					{
+						String message = getMessageNumString(messageNum) + "I "
 								+ caller + "::" + method + ": object="
-								+ object);
+								+ object;
+						log( severity, message, null );
+					}
 					break;
+				}
 			}
 		}
 		
@@ -92,21 +116,27 @@
 	 * @see org.eclipse.wst.common.environment.ILog#log(int, java.lang.String, int, java.lang.Object, java.lang.String, java.lang.Object)
 	 */
 	public void log(int severity, String option, int messageNum,
-			Object caller, String method, Object object) {
+			Object caller, String method, Object object) 
+	{
 		if (isEnabled(option))
-			System.out.println(getMessageNumString(messageNum) + "I " + caller
-					+ "::" + method + ": object=" + object);
+		{
+			String message = getMessageNumString(messageNum) + "I " + caller
+					+ "::" + method + ": object=" + object;
+			log(severity, message, null );
+		}	
 	}
 	
 	/**
 	 * @see org.eclipse.wst.common.environment.ILog#log(int, java.lang.String, int, java.lang.Object, java.lang.String, java.lang.Throwable)
 	 */
 	public void log(int severity, String option, int messageNum,
-			Object caller, String method, Throwable throwable) {
-		if (isEnabled(option)) {
-			System.out.println(getMessageNumString(messageNum) + "I " + caller
-					+ "::" + method);
-			throwable.printStackTrace();
+			Object caller, String method, Throwable throwable) 
+	{
+		if (isEnabled(option)) 
+		{
+			String message = getMessageNumString(messageNum) + "I " + caller
+					+ "::" + method;
+			log( severity, message, throwable );
 		}
 	}
 	
@@ -114,8 +144,9 @@
 	 * @see org.eclipse.wst.common.environment.ILog#log(int, java.lang.String, int, java.lang.Object, java.lang.String, org.eclipse.core.runtime.IStatus)
 	 */
 	public void log(int severity, String option, int messageNum,
-			Object caller, String method, IStatus status) {
-		log(severity, option, messageNum, caller, method, (Object)status);
+			Object caller, String method, IStatus status) 
+	{
+		logger.log( status );
 	}
 	
 	private String getMessageNumString(int messageNum) {
@@ -125,4 +156,10 @@
 		messageNumString += (new Integer(messageNum)).toString();
 		return messageNumString;
 	}
+	
+	private void log( int severity, String message, Throwable exc )
+	{
+		Status status = new Status( severity, "id", 0, message, exc );
+		logger.log( status );
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseScheme.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseScheme.java
index 46a30c6..0042c4d 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseScheme.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseScheme.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseURI.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseURI.java
index feb22d4..d062a53 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseURI.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseURI.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/FileResourceOutputStream.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/FileResourceOutputStream.java
index d1a21f1..8cfebb5 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/FileResourceOutputStream.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/FileResourceOutputStream.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/FileResourceUtils.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/FileResourceUtils.java
index cde954f..240f43f 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/FileResourceUtils.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/FileResourceUtils.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/environment.properties b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/environment.properties
index 6fb49d6..97908ad 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/environment.properties
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/environment.properties
@@ -1,10 +1,10 @@
 ###############################################################################
-# Copyright (c) 2001, 2004 IBM Corporation and others.
+# Copyright (c) 2001, 2005 IBM Corporation and others.
 # 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:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/plugin/EnvironmentPlugin.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/plugin/EnvironmentPlugin.java
new file mode 100644
index 0000000..4330459
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/plugin/EnvironmentPlugin.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20060221   100364 pmoogk@ca.ibm.com - Peter Moogk
+ *******************************************************************************/
+package org.eclipse.wst.common.internal.environment.plugin;
+
+
+import org.eclipse.core.runtime.Plugin;
+
+/**
+* This is the plugin class for the org.eclipse.wst.common.internal.environment.plugin.EnvironmentPlugin.
+*/
+public class EnvironmentPlugin extends Plugin
+{	
+	/**
+	 * The instance of this plugin.
+	 */
+	private static EnvironmentPlugin instance;
+
+	/**
+	 * Constructor for use by the Eclipse platform only.
+	 */
+	public EnvironmentPlugin()
+	{
+		super();
+		instance = this;
+	}
+	
+	/**
+	 * Returns the instance of this plugin.
+	 */
+	static public EnvironmentPlugin getInstance ()
+	{
+		return instance;
+	}
+}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/relative/RelativeScheme.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/relative/RelativeScheme.java
index b993a11..bb60c0e 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/relative/RelativeScheme.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/relative/RelativeScheme.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/relative/RelativeURI.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/relative/RelativeURI.java
index 1196111..59f3d36 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/relative/RelativeURI.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/relative/RelativeURI.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/uri/file/FileScheme.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/uri/file/FileScheme.java
index 7655f52..3dd4f89 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/uri/file/FileScheme.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/uri/file/FileScheme.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/uri/file/FileURI.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/uri/file/FileURI.java
index 5d95b0b..ecc1664 100644
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/uri/file/FileURI.java
+++ b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/uri/file/FileURI.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/.classpath b/plugins/org.eclipse.wst.common.frameworks.ui/.classpath
deleted file mode 100644
index 014fb18..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/.classpath
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="wtp_ui/"/>
-	<classpathentry kind="src" path="property_files"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/.cvsignore b/plugins/org.eclipse.wst.common.frameworks.ui/.cvsignore
deleted file mode 100644
index 65cee0b..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-bin
-temp.folder
-build.xml
-wtp_ui.jar
-@dot
-src.zip
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/.project b/plugins/org.eclipse.wst.common.frameworks.ui/.project
deleted file mode 100644
index 47885fd..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.wst.common.frameworks.ui</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.frameworks.ui/META-INF/MANIFEST.MF
deleted file mode 100644
index 6a7fef8..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,20 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: WTP UI Plug-in
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.wst.common.frameworks.ui; singleton:=true
-Bundle-Version: 1.0.0
-Bundle-Activator: org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin
-Bundle-Localization: plugin
-Export-Package: .,
- org.eclipse.wst.common.frameworks.internal.datamodel.ui,
- org.eclipse.wst.common.frameworks.internal.operation.extensionui,
- org.eclipse.wst.common.frameworks.internal.ui
-Require-Bundle: org.eclipse.ui.ide,
- org.eclipse.core.resources,
- org.eclipse.ui,
- org.eclipse.wst.common.frameworks;visibility:=reexport,
- org.eclipse.core.runtime,
- org.eclipse.jem.util,
- org.eclipse.wst.common.environment
-Eclipse-AutoStart: true
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/build.properties b/plugins/org.eclipse.wst.common.frameworks.ui/build.properties
deleted file mode 100644
index feb73fb..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 2005 IBM Corporation and others.
-# 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:
-# IBM Corporation - initial API and implementation
-###############################################################################
-output.. = bin/
-bin.includes = plugin.xml,\
-               .,\
-               META-INF/,\
-               plugin.properties,\
-               about.html
-source.. = wtp_ui/,\
-                    property_files/
-src.includes = schema/,\
-               plugin.properties
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/plugin.properties b/plugins/org.eclipse.wst.common.frameworks.ui/plugin.properties
deleted file mode 100644
index 9f80220..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/plugin.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 2005 IBM Corporation and others.
-# 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:
-# IBM Corporation - initial API and implementation
-###############################################################################
-Cut=Cut
-FLEXIBLE_PROJECT_PREFERENCE=J2EE Project Modules
-providerName=Eclipse.org
-WTP_UI_Action=WTP UI Action
-Extended_Viewers=Extended Viewers
-Extendable_Wizard=Extendable Wizard
-Extendable_Wizard_Page=Extendable Wizard Page
-DataModelWizard=DataModelWizard
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/plugin.xml b/plugins/org.eclipse.wst.common.frameworks.ui/plugin.xml
deleted file mode 100644
index e98a3bc..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/plugin.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-
-     <extension-point id="wtpuiAction" name="%WTP_UI_Action" schema="schema/wtpuiAction.exsd"/>
-   <extension-point id="extendedViewer" name="%Extended_Viewers" schema="schema/extendedViewer.exsd"/>
-   <extension-point id="extendableWizard" name="%Extendable_Wizard" schema="schema/extendableWizard.exsd"/>
-   <extension-point id="wizardPageGroup" name="%Extendable_Wizard_Page" schema="schema/extendableWizardPage.exsd"/>
-   <extension-point id="DataModelWizardExtension" name="%DataModelWizard" schema="schema/DataModelWizardExtension.exsd"/>
-
-   <extension
-         id="UITester"
-         point="org.eclipse.jem.util.uiTester">
-      <uiTester
-            className="org.eclipse.wst.common.frameworks.internal.ui.UITesterImpl">
-      </uiTester>
-   </extension>
-   <extension
-         id="context.Sensitive.Class.saveHandler"
-         name="Save Handler - Headless Context Class"
-         point="org.eclipse.jem.util.uiContextSensitiveClass">
-      <uiContextSensitiveClass
-            key="saveHandler"
-            context="UI"
-            className="org.eclipse.wst.common.frameworks.internal.ui.SaveHandlerUI">
-      </uiContextSensitiveClass>
-   </extension>
-   <extension
-         id="org.eclipse.wst.common.frameworks.internal.ui.EnablementDetermination"
-         name="UI Enablement Determination"
-         point="org.eclipse.jem.util.uiContextSensitiveClass">
-      <uiContextSensitiveClass
-            key="org.eclipse.wst.common.frameworks.internal.EnablementDetermination"
-            context="UI"
-            className="org.eclipse.wst.common.frameworks.internal.ui.UIEnablementManager">
-      </uiContextSensitiveClass>
-   </extension>
-   <extension
-         point="org.eclipse.wst.common.frameworks.WTPActivityBridgeHelper">
-      <WTPActivityBridgeHelper
-            class="org.eclipse.wst.common.frameworks.internal.ui.WTPActivityBridgeHelperImpl">
-      </WTPActivityBridgeHelper>
-   </extension>
-   <!--
-   <extension
-         point="org.eclipse.wst.common.frameworks.internals.OperationExtension">
-      <operationExtension
-            postOperationClass="org.eclipse.wst.common.frameworks.internal.operation.extension.ui.PostPasteActionOperation"
-            id="org.eclipse.wst.common.frameworks.internal.operation.extension.ui.PasteActionOperation"/>
-   </extension>
-   -->
-   
-</plugin>
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/prepareforpii.xml b/plugins/org.eclipse.wst.common.frameworks.ui/prepareforpii.xml
deleted file mode 100644
index d2dca48..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/prepareforpii.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<project name="PrepareForPII" default="main" basedir=".">
-		
-	<!-- Setup temp variables -->
-	<target name="init">
-		<property name="nlsDir" value="d:/NLS/Corona/0526"/>
-		<property name="plugin" value="com.ibm.wtp.common.ui"/>
-		<property name="plugindir" value="d:/workspaceCorona/${plugin}"/>
-		<property name="outputDir" value="${nlsDir}/${plugin}"/>
-		
-	
-	</target>
-
-	<!-- Create the destination dir -->
-	<target name="nlsDir" depends="init">
-		<mkdir dir="${nlsDir}"/>
-	</target>
-	
-	<!-- Create the destination dir -->
-	<target name="plugindir" depends="nlsDir">
-		<delete dir="${outputDir}"/>
-		<mkdir dir="${outputDir}"/>
-	</target>
-
-	<!-- Move the files to the correct locations in the workspace. -->
-	<target name="main" depends="plugindir">
-	
-		<messageIdGen folderPath = "${plugindir}" componentId = "E" />
-		
-		<copy todir = "${outputDir}/property_files" >
-			 <fileset dir="${plugindir}/property_files">
-           	  <include name="**/*.properties"/>
-  			 </fileset>
-  		</copy>
-  		
-  		<copy file="${plugindir}/plugin.properties" todir="${outputDir}"/>
-  		
-	</target>
-</project>
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/property_files/wtpcommonui.properties b/plugins/org.eclipse.wst.common.frameworks.ui/property_files/wtpcommonui.properties
deleted file mode 100644
index 26c45ec..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/property_files/wtpcommonui.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 2005 IBM Corporation and others.
-# 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:
-# IBM Corporation - initial API and implementation
-###############################################################################
-IActionWTPOperation_UI_0=No action available for execution.
-WTPActionDialog_UI_0=Select the optional dependent actions you would like to execute.
-WTPOptionalOperationDataModel_UI_0=Root tree can not be selected.
-WTPOptionalOperationDataModel_UI_1=No operations are selected.
-MasterDescriptor_ERROR_2=IWAE0005E WTPUIOperation elements require exactly one <selectionEnablement />.
-WTPOperationAction_UI_0=Operation Status
-WTPOperationAction_UI_1=Problem executing operation.
-TimerQueue_ERROR_0=IWAE0006E Can't start a TimerQueue that is already running
-ExtendedWizardPage_ERROR_0=IWAE0007E Cannot modify id after it has already been set.
-ExtendedWizardPage_ERROR_1=IWAE0008E The id cannot be null
-MasterDescriptor_UI_1=No \" {0} \" attribute defined
-Timer_UI_0=Invalid delay: {0}
-Timer_UI_1=Invalid initial delay: {0}
-WTPWizard_UI_0=Wizard Error: {0}
-WTPWizard_UI_1=An error has occurred when {0} finished.
-ExtendableWizard_UI_0=Wizard page failed to be created in {0} {1}
-WizardPageExtensionManager_UI_0=Element: {0} does not allow page insertion after.
-WizardPageExtensionManager_UI_1={0} will not be created
-WizardPageExtensionManager_UI_2=Circular dependancy, element: {0} check: {1}
-WizardPageExtensionManager_UI_3=Editor does not allow page insertions
-WizardPageExtensionManager_UI_4=Parent Class Not Found Error: {0} \r\n for attribute: {1} in plugin {2} \r\nPage not created
-Delete_UI_0=Delete
-Name_=Project Name:
-Browse_=Browse...
-Project_location_=Project Location:
-MULTIPLE_MODULE_PREF_TEXT=Allow Multiple modules per project
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/schema/DataModelWizardExtension.exsd b/plugins/org.eclipse.wst.common.frameworks.ui/schema/DataModelWizardExtension.exsd
deleted file mode 100644
index ca5341c..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/schema/DataModelWizardExtension.exsd
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.wst.common.frameworks.ui">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.wst.common.frameworks.ui" id="DataModelWizardExtension" name="Data Model Wizard Extension"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <sequence>
-            <element ref="DataModelWizard"/>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  a fully qualified identifier of the target extension point
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  an optional identifier of the extension instance
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  an optional name of the extension instance
-               </documentation>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="DataModelWizard">
-      <complexType>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="class" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         &lt;b&gt;This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.&lt;/b&gt;
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;
-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 &lt;a
-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
-      </documentation>
-   </annotation>
-
-</schema>
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/schema/extendableWizard.exsd b/plugins/org.eclipse.wst.common.frameworks.ui/schema/extendableWizard.exsd
deleted file mode 100644
index 60b35aa..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/schema/extendableWizard.exsd
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>

-<!-- Schema file written by PDE -->

-<schema targetNamespace="org.eclipse.wst.common.frameworks.ui">

-<annotation>

-      <appInfo>

-         <meta.schema plugin="org.eclipse.wst.common.frameworks.ui" id="extendableWizard" name="Extendable Wizard"/>

-      </appInfo>

-      <documentation>

-         Edit model editors represent the multi page editors that can be used to edit a collection of EMF resources.  By declaring an edit model editor, the plugin provider allows the framework to generically obtain the edit model used by the editor.

-      </documentation>

-   </annotation>

-

-   <element name="extension">

-      <complexType>

-         <sequence>

-            <element ref="extendableWizard" minOccurs="1" maxOccurs="unbounded"/>

-         </sequence>

-         <attribute name="point" type="string" use="required">

-            <annotation>

-               <documentation>

-                  a fully qualified identifier of the target extension point

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="id" type="string">

-            <annotation>

-               <documentation>

-                  an optional identifier of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string">

-            <annotation>

-               <documentation>

-                  an optional name of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="extendableWizard">

-      <complexType>

-         <attribute name="id" type="string" use="required">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="since"/>

-      </appInfo>

-      <documentation>

-         1.0

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="examples"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="apiInfo"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="implementation"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="copyright"/>

-      </appInfo>

-      <documentation>

-         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;

-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 &lt;a

-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

-      </documentation>

-   </annotation>

-

-</schema>

diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/schema/extendableWizardPage.exsd b/plugins/org.eclipse.wst.common.frameworks.ui/schema/extendableWizardPage.exsd
deleted file mode 100644
index e94ffa1..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/schema/extendableWizardPage.exsd
+++ /dev/null
@@ -1,143 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>

-<!-- Schema file written by PDE -->

-<schema targetNamespace="org.eclipse.wst.common.frameworks.ui">

-<annotation>

-      <appInfo>

-         <meta.schema plugin="org.eclipse.wst.common.frameworks.ui" id="wizardPageGroup" name="Extendable Wizard Page"/>

-      </appInfo>

-      <documentation>

-         Edit model editors represent the multi page editors that can be used to edit a collection of EMF resources.  By declaring an edit model editor, the plugin provider allows the framework to generically obtain the edit model used by the editor.

-      </documentation>

-   </annotation>

-

-   <element name="extension">

-      <complexType>

-         <sequence>

-            <choice>

-               <element ref="wizardPageGroup"/>

-            </choice>

-         </sequence>

-         <attribute name="point" type="string" use="required">

-            <annotation>

-               <documentation>

-                  a fully qualified identifier of the target extension point

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="id" type="string">

-            <annotation>

-               <documentation>

-                  an optional identifier of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string">

-            <annotation>

-               <documentation>

-                  an optional name of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="wizardPageGroup">

-      <complexType>

-         <sequence>

-            <choice>

-               <element ref="factory"/>

-            </choice>

-         </sequence>

-         <attribute name="wizardID" type="string" use="required">

-            <annotation>

-               <documentation>

-                  This must match the id defined in the extendableWizard element in the extendableWizard extension point

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="allowsExtendedPagesAfter" type="string">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="pageGroupInsertionID" type="string">

-            <annotation>

-               <documentation>

-                  If this page is to immediately after another page, this must match the pageID of the page to insert after.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="pageGroupID" type="string">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="factory">

-      <complexType>

-         <attribute name="className" type="string" use="required">

-            <annotation>

-               <documentation>

-                  This class is an instancof com.ibm.wtp.common.ui.wizard.extensions.WizardExtensionFactory

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="since"/>

-      </appInfo>

-      <documentation>

-         1.0

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="examples"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="apiInfo"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="implementation"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="copyright"/>

-      </appInfo>

-      <documentation>

-         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;

-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 &lt;a

-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

-      </documentation>

-   </annotation>

-

-</schema>

diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/schema/extendedViewer.exsd b/plugins/org.eclipse.wst.common.frameworks.ui/schema/extendedViewer.exsd
deleted file mode 100644
index eca8862..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/schema/extendedViewer.exsd
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>

-<!-- Schema file written by PDE -->

-<schema targetNamespace="org.eclipse.wst.common.frameworks.ui">

-<annotation>

-      <appInfo>

-         <meta.schema plugin="org.eclipse.wst.common.frameworks.ui" id="extendedViewer" name="Extended Viewers"/>

-      </appInfo>

-      <documentation>

-         The extendedViewer Extension point allows the contribution of new function

-      </documentation>

-   </annotation>

-

-   <element name="extension">

-      <complexType>

-         <sequence>

-            <element ref="extendedViewer"/>

-         </sequence>

-         <attribute name="point" type="string" use="required">

-            <annotation>

-               <documentation>

-                  a fully qualified identifier of the target extension point

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="id" type="string">

-            <annotation>

-               <documentation>

-                  an optional identifier of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string">

-            <annotation>

-               <documentation>

-                  an optional name of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="extendedViewer">

-      <complexType>

-         <attribute name="viewerID" type="string" use="required">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="parentViewerID" type="string">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="factoryClass" type="string" use="required">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="icon" type="string">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="label" type="string" use="required">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="functionGroupID" type="string">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="since"/>

-      </appInfo>

-      <documentation>

-         &lt;b&gt;This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.&lt;/b&gt;

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="examples"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="apiInfo"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="implementation"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="copyright"/>

-      </appInfo>

-      <documentation>

-         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;

-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 &lt;a

-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

-      </documentation>

-   </annotation>

-

-</schema>

diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/schema/wtpuiAction.exsd b/plugins/org.eclipse.wst.common.frameworks.ui/schema/wtpuiAction.exsd
deleted file mode 100644
index 5ddc4f2..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/schema/wtpuiAction.exsd
+++ /dev/null
@@ -1,367 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>

-<!-- Schema file written by PDE -->

-<schema targetNamespace="org.eclipse.wst.common.frameworks.ui">

-<annotation>

-      <appInfo>

-         <meta.schema plugin="org.eclipse.wst.common.frameworks.ui" id="wtpuiAction" name="WTP UI Action"/>

-      </appInfo>

-      <documentation>

-         This extension point is for WTP Operations which need to be tied to a generic UI action, such as CUT, COPY, PASTE, DELETE, and RENAME.

-      </documentation>

-   </annotation>

-

-   <element name="extension">

-      <complexType>

-         <sequence>

-            <choice>

-               <element ref="masterOperation"/>

-               <element ref="slaveOperation"/>

-            </choice>

-         </sequence>

-         <attribute name="point" type="string" use="required">

-            <annotation>

-               <documentation>

-                  a fully qualified identifier of the target extension point

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="id" type="string">

-            <annotation>

-               <documentation>

-                  an optional identifier of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string">

-            <annotation>

-               <documentation>

-                  an optional name of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="masterOperation">

-      <annotation>

-         <documentation>

-            A masterOperation enables an existing WTP Operation to be used in a UI action. Generic Ids aggregate a set of masterOperations for the same Abstract action (like a &quot;CUT&quot; operation). WTP Operations are themselves extendible, so for any masterOperation defined, there may be any number of pre|post operations. These pre|post operation can have slaveOperation elements defined which indicate the pre|post operation may be run independently.

-         </documentation>

-      </annotation>

-      <complexType>

-         <sequence>

-            <element ref="selectionEnablement"/>

-         </sequence>

-         <attribute name="extendedGenericId" type="string" use="required">

-            <annotation>

-               <documentation>

-                  The ID of the Generic Action you would like to contribute to. (e.g. The id for CUT, COPY, PASTE, DELETE, RENAME).

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="operationClass" type="string">

-            <annotation>

-               <documentation>

-                  The fully qualified class of your operation. Your operation must extend com.ibm.wtp.common.operation.WTPOperation and must provide a no-arguments default constructor. If this attribute is not provided, the getDefaultOperation() returned by the dataModel will be used.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string" use="required">

-            <annotation>

-               <documentation>

-                  A name to display in the dialog for your action (if the operation is optional). You can use the standard &quot;%key&quot; for translatable text stored in plugin.properties.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="description" type="string">

-            <annotation>

-               <documentation>

-                  A description to display in the dialog for your action (if the operation is optional). You can use the standard &quot;%key&quot; for translatable text stored in plugin.properties.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="populatorClass" type="string" use="required">

-            <annotation>

-               <documentation>

-                  An implementation of com.ibm.wtp.common.operation.extension.ui.WTPOperationDataModelUICreator. The populatorClass knows how to provide a WTP Operation Data Model based on a given selection. The getDefaultOperation() method of the data model will be ignored if the operationClass is provided.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="alwaysExecute" type="boolean">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="overrideId" type="string">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="id" type="string">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="selectionEnablement">

-      <annotation>

-         <documentation>

-            The selectionEnablement element allows you to filter which kinds of selection your object is applicable to using Standard Eclipse Action Expresions.

-         </documentation>

-      </annotation>

-      <complexType>

-         <choice>

-            <element ref="objectClass"/>

-            <element ref="or"/>

-         </choice>

-      </complexType>

-   </element>

-

-   <element name="slaveOperation">

-      <annotation>

-         <documentation>

-            The slaveOperation element defines display information for operations which extend a declared master operation. If a pre|post operation of a master does not have a corresponding slaveOperation element, then the pre|post operation will be consider required, and not be displayed to the user.

-         </documentation>

-      </annotation>

-      <complexType>

-         <attribute name="operationClass" type="string" use="required">

-            <annotation>

-               <documentation>

-                  The fully qualified class of your operation. Your operation must extend com.ibm.wtp.common.operation.WTPOperation and must provide a no-arguments default constructor. For slave operations, the data model of the master operation will be provided. Therefore, slaves cannot override the data model using a seperate populatorClass.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string" use="required">

-            <annotation>

-               <documentation>

-                  A name to display in the dialog for your action (if the operation is optional). You can use the standard &quot;%key&quot; for translatable text stored in plugin.properties.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="description" type="string">

-            <annotation>

-               <documentation>

-                  A description to display in the dialog for your action (if the operation is optional). You can use the standard &quot;%key&quot; for translatable text stored in plugin.properties.

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="or">

-      <complexType>

-         <choice>

-            <element ref="objectClass"/>

-            <element ref="and"/>

-            <element ref="objectState"/>

-         </choice>

-      </complexType>

-   </element>

-

-   <element name="objectClass">

-      <complexType>

-         <attribute name="name" type="string">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="adaptable" type="string">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="and">

-      <complexType>

-         <choice>

-            <element ref="objectClass"/>

-            <element ref="or"/>

-         </choice>

-      </complexType>

-   </element>

-

-   <element name="objectState">

-      <complexType>

-         <attribute name="value" type="string">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="since"/>

-      </appInfo>

-      <documentation>

-         1.0

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="examples"/>

-      </appInfo>

-      <documentation>

-         &lt;!-- The examples in this section have been commented out because they reference only extension point IDs. These examples must be corrected before being included in the documentation. --&gt;

-&lt;!--

-The following example declares two Master Operations (&lt;code&gt;com.acme.ui.operation.MasterOperationA&lt;/code&gt; and &lt;code&gt;com.acme.ui.operation.MasterOperationB&lt;/code&gt;) which are attached to the Generic ID &lt;code&gt;com.acme.ui.WTPOptionalOperationTest&lt;/code&gt;. 

-The scenario has Master A which has as a pre-operation of Slave A and a post-operation of Slave C. Slave A is made optional by the &lt;code&gt;slaveOperation&lt;/code&gt; element, while Slave C will always be run (no &lt;code&gt;slaveOperation&lt;/code&gt; is given to run it seperately). Slave A further has an optional pre-operation (Slave B) that can be executed indepently of either Slave A or Master A.

---&gt;

-&lt;!--

-&lt;pre&gt;

-   &lt;extension

-         point=&quot;org.eclipse.wst.common.frameworks.ui.wtpuiAction&quot;&gt;

-      &lt;masterOperation

-            populatorClass=&quot;com.acme.ui.operation.AcmeOperationPopulator&quot;

-            name=&quot;%master_a_name&quot;

-            operationClass=&quot;com.acme.ui.operation.MasterOperationA&quot;

-            extendedGenericId=&quot;com.acme.ui.WTPOptionalOperationTest&quot;

-            description=&quot;%master_a_description&quot;&gt;

-      &lt;/masterOperation&gt; 

-   &lt;slaveOperation

-            name=&quot;Slave A&quot;

-            operationClass=&quot;com.acme.ui.operation.SlaveOperationA&quot;&gt;

-      &lt;/slaveOperation&gt; 

-      &lt;slaveOperation

-            name=&quot;Slave B&quot;

-            operationClass=&quot;com.acme.ui.operation.SlaveOperationB&quot;&gt;

-      &lt;/slaveOperation&gt;      

-      &lt;masterOperation

-            populatorClass=&quot;com.acme.ui.operation.AcmeOperationPopulator&quot;

-            name=&quot;EAR Project Action&quot;

-            operationClass=&quot;com.acme.ui.operation.MasterOperationB&quot;

-            extendedGenericId=&quot;com.acme.ui.WTPOptionalOperationTest&quot;&gt;

-            &lt;selectionEnablement&gt; 

-             &lt;objectState name=&quot;projectNature&quot; value=&quot;org.eclipse.jst.j2ee.EARNature&quot; /&gt;

-            &lt;/selectionEnablement&gt;

-      &lt;/masterOperation&gt;   

-   &lt;/extension&gt;

-&lt;/pre&gt;   

---&gt;

-&lt;!--

-For each of the slaveOperations referenced above, you must have a corresponding WTP Operation Extension declared similar to the following:

---&gt;

-&lt;!--

-&lt;pre&gt; 

-   &lt;extension

-         id=&quot;wtpuiAciton.Acme.Extensions&quot;

-         point=&quot;com.ibm.wtp.common.ExtendableOperation&quot;&gt;

-      &lt;extendableOperation

-            class=&quot;com.acme.ui.operation.MasterOperationA&quot;

-            id=&quot;com.acme.ui.operation.MasterOperationA&quot;&gt;

-      &lt;/extendableOperation&gt;

-      &lt;extendableOperation

-            class=&quot;com.acme.ui.operation.SlaveOperationA&quot;

-            id=&quot;com.acme.ui.operation.SlaveOperationA&quot;&gt;

-      &lt;/extendableOperation&gt;

-   &lt;/extension&gt;

-   &lt;extension

-         point=&quot;com.ibm.wtp.common.OperationExtension&quot;&gt;--&gt;

-      &lt;!-- Made optional by the above declaration --&gt;

-      &lt;!--&lt;operationExtension

-            preOperationClass=&quot;com.acme.ui.operation.SlaveOperationA&quot;

-            id=&quot;com.acme.ui.operation.MasterOperationA&quot;&gt;

-      &lt;/operationExtension&gt;--&gt;

-      &lt;!-- Made optional by the above declaration --&gt;

-      &lt;!--&lt;operationExtension

-            postOperationClass=&quot;com.acme.ui.operation.SlaveOperationB&quot;

-            id=&quot;com.acme.ui.operation.SlaveOperationA&quot;&gt;

-      &lt;/operationExtension&gt;--&gt;   

-      &lt;!-- Non-optional operation, will always run --&gt;

-      &lt;!--&lt;operationExtension

-            postOperationClass=&quot;com.acme.ui.operation.SlaveOperationC&quot;

-            id=&quot;com.acme.ui.operation.MasterOperationA&quot;&gt;

-      &lt;/operationExtension&gt;  

-   &lt;/extension&gt; 

-&lt;/pre&gt;

---&gt;

-&lt;!--

-In general, users extending existing actions only need to declare the following: 

---&gt;

-&lt;!--

-&lt;pre&gt;

- &lt;extension

-         point=&quot;com.ibm.wtp.common.OperationExtension&quot;&gt;--&gt; 

- &lt;!-- The action referenced must be declared as extensible by the   com.ibm.wtp.common.ExtendableOperation extension point --&gt;         

-      &lt;!--&lt;operationExtension

-            preOperationClass=&quot;...YOUR CLASS...&quot;            

-            id=&quot;...ID OF EXISTING OPERATION...&quot;&gt; 

-      &lt;/operationExtension&gt; 

- &lt;/extension&gt;      

-&lt;/pre&gt;      

---&gt;

-&lt;!--

-And if your operation is optional declare the slaveOperation:

---&gt;

-&lt;!--

-&lt;pre&gt; 

-   &lt;extension

-         point=&quot;org.eclipse.wst.common.frameworks.ui.wtpuiAction&quot;&gt; 

-   &lt;slaveOperation

-            name=&quot;..NAME OF YOUR OPERATION...&quot;

-            description=&quot;...DESCRIPTION OF YOUR ACTION...&quot;

-            operationClass=&quot;...YOUR CLASS...&quot;&gt;

-      &lt;/slaveOperation&gt; 

-   &lt;/extension&gt;      

-&lt;/pre&gt;

---&gt;

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="apiInfo"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="implementation"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="copyright"/>

-      </appInfo>

-      <documentation>

-         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;

-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 &lt;a

-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

-      </documentation>

-   </annotation>

-

-</schema>

diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/AddablePageGroup.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/AddablePageGroup.java
deleted file mode 100644
index 53c3360..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/AddablePageGroup.java
+++ /dev/null
@@ -1,16 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others. 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
-
-import org.eclipse.jface.wizard.IWizardPage;
-
-public interface AddablePageGroup extends  IDMPageGroup
-{
-  public void addPage( IWizardPage page );
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelSynchHelper.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelSynchHelper.java
deleted file mode 100644
index 06c30d7..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelSynchHelper.java
+++ /dev/null
@@ -1,562 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.eclipse.jface.viewers.CheckStateChangedEvent;
-import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.CheckboxTreeViewer;
-import org.eclipse.jface.viewers.ICheckStateListener;
-import org.eclipse.jface.viewers.StructuredViewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.List;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeItem;
-import org.eclipse.swt.widgets.Widget;
-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.ui.TimedModifyListener;
-
-/**
- * This class is EXPERIMENTAL and is subject to substantial changes.
- */
-public class DataModelSynchHelper implements IDataModelListener {
-	protected static final boolean isLinux = System.getProperty("os.name").equals("Linux"); //$NON-NLS-1$ //$NON-NLS-2$
-
-	protected IDataModel dataModel;
-	protected Map widgetToPropertyHash;
-	protected Map propertyToWidgetHash;
-	protected Map widgetToDepControls;
-
-	protected String currentProperty;
-	protected Widget currentWidget;
-	protected Widget currentWidgetFromEvent; // TODO M4 see if this should be set with for
-	// listeners
-	protected boolean ignoreModifyEvent = false;
-
-	private class ModifyTextListener implements ModifyListener {
-		public void modifyText(ModifyEvent e) {
-			if (ignoreModifyEvent)
-				return;
-			Text text = (Text) e.getSource();
-			if (currentWidget == text)
-				return;
-			String propertyName = (String) widgetToPropertyHash.get(text);
-			setProperty(propertyName, text.getText());
-		}
-	}
-
-	private ModifyTextListener modifyTextListener;
-	private TimedModifyListener timedModifyListener;
-
-	private class ComboListener implements SelectionListener, ModifyListener {
-
-		public void modifyText(ModifyEvent e) {
-			if (ignoreModifyEvent)
-				return;
-			Combo combo = (Combo) e.getSource();
-			if (currentWidget == combo)
-				return;
-
-			try {
-				currentWidgetFromEvent = combo;
-				String propertyName = (String) widgetToPropertyHash.get(combo);
-				DataModelPropertyDescriptor[] descriptors = dataModel.getValidPropertyDescriptors(propertyName);
-				String description = combo.getText();
-				// On a combo selection linux fires 2 events;
-				// the first clears the value which needs to be ignored when the type is not String
-				// the second sets the new value
-				if (isLinux && description.length() == 0 && descriptors.length != 0 && !(descriptors[0].getPropertyValue() instanceof String)) {
-					return;
-				}
-				for (int i = 0; i < descriptors.length; i++) {
-					if (description.equals(descriptors[i].getPropertyDescription())) {
-						setProperty(propertyName, descriptors[i].getPropertyValue());
-						return;
-					}
-				}
-				setProperty(propertyName, combo.getText());
-			} finally {
-				currentWidgetFromEvent = null;
-			}
-		}
-
-		public void widgetSelected(SelectionEvent e) {
-			Combo combo = (Combo) e.getSource();
-			if (currentWidget == combo)
-				return;
-			String propertyName = (String) widgetToPropertyHash.get(combo);
-			if (combo.getSelectionIndex() >= 0) {
-				DataModelPropertyDescriptor[] descriptors = dataModel.getValidPropertyDescriptors(propertyName);
-				String description = combo.getItem(combo.getSelectionIndex());
-				for (int i = 0; i < descriptors.length; i++) {
-					if (description.equals(descriptors[i].getPropertyDescription())) {
-						setProperty(propertyName, descriptors[i].getPropertyValue());
-						return;
-					}
-				}
-				setProperty(propertyName, combo.getItem(combo.getSelectionIndex()));
-			}
-		}
-
-		public void widgetDefaultSelected(SelectionEvent e) {
-		}
-	}
-
-	private ComboListener comboListener;
-
-	private class CheckboxSelectionListener implements SelectionListener {
-		public void widgetSelected(SelectionEvent e) {
-			Button button = (Button) e.getSource();
-			if (currentWidget == button)
-				return;
-			String propertyName = (String) widgetToPropertyHash.get(button);
-			setProperty(propertyName, new Boolean(button.getSelection()));
-		}
-
-		public void widgetDefaultSelected(SelectionEvent e) {
-		}
-	}
-
-	private CheckboxSelectionListener checkboxSelectionListener;
-
-	public DataModelSynchHelper(IDataModel model) {
-		this.dataModel = model;
-		dataModel.addListener(this);
-	}
-
-	private CheckBoxViewerListener checkBoxViewerStateListener;
-
-	private class CheckBoxViewerListener implements ICheckStateListener {
-		public void checkStateChanged(CheckStateChangedEvent event) {
-			StructuredViewer viewer = (StructuredViewer) event.getSource();
-			CheckboxTableViewer checkBoxTableViewer;
-			CheckboxTreeViewer checkBoxTreeViewer;
-			Object[] items = null;
-			if (viewer instanceof CheckboxTableViewer) {
-				checkBoxTableViewer = (CheckboxTableViewer) viewer;
-				items = checkBoxTableViewer.getCheckedElements();
-			} else if (viewer instanceof CheckboxTreeViewer) {
-				checkBoxTreeViewer = (CheckboxTreeViewer) viewer;
-				items = checkBoxTreeViewer.getCheckedElements();
-			}
-			String propertyName = (String) widgetToPropertyHash.get(viewer.getControl());
-			setPropertyItems(propertyName, items);
-		}
-	}
-
-	public void propertyChanged(DataModelEvent event) {
-		String propertyName = event.getPropertyName();
-		int flag = event.getFlag();
-		if (flag == DataModelEvent.ENABLE_CHG)
-			setEnablement(propertyName, event.isPropertyEnabled());
-		else
-			synchUIWithModel(propertyName, flag);
-	}
-
-	protected void setProperty(String propertyName, Object value) {
-		currentProperty = propertyName;
-		try {
-			dataModel.setProperty(propertyName, value);
-		} finally {
-			currentProperty = null;
-		}
-	}
-
-	protected void setPropertyItems(String propertyName, Object[] items) {
-		currentProperty = propertyName;
-		try {
-			dataModel.setProperty(propertyName, items);
-		} finally {
-			currentProperty = null;
-		}
-	}
-
-	/**
-	 * Sets the UI to have the property value defined in the model
-	 * 
-	 * @param propertyName
-	 * @link IDataModelListener for the flag values.
-	 */
-	public void synchUIWithModel(final String propertyName, final int flag) {
-		if (null != propertyToWidgetHash && propertyToWidgetHash.containsKey(propertyName)) {
-			Display.getDefault().syncExec(new Runnable() {
-				public void run() {
-					try {
-						currentWidget = (Widget) propertyToWidgetHash.get(propertyName);
-						if (currentWidget != null && currentWidget != currentWidgetFromEvent) {
-							try {
-								if (currentWidget instanceof Text)
-									setWidgetValue(propertyName, flag, (Text) currentWidget);
-								else if (currentWidget instanceof Combo) {
-									setWidgetValue(propertyName, flag, (Combo) currentWidget);
-								} else if (currentWidget instanceof Button)
-									setWidgetValue(propertyName, flag, (Button) currentWidget);
-								else if (currentWidget instanceof Label)
-									setWidgetValue(propertyName, flag, (Label) currentWidget);
-								else if (currentWidget instanceof List)
-									setWidgetValue(propertyName, flag, (List) currentWidget);
-								else if (currentWidget instanceof Table)
-									setWidgetValue(propertyName, flag, (Table) currentWidget);
-								else if (currentWidget instanceof Tree)
-									setWidgetValue(propertyName, flag, (Tree) currentWidget);
-							} finally {
-								ignoreModifyEvent = false;
-							}
-							setEnablement((Control) currentWidget, dataModel.isPropertyEnabled(propertyName));
-						}
-					} finally {
-						currentWidget = null;
-					}
-				}
-			});
-		}
-	}
-
-	/**
-	 * @param control
-	 * @param enabled
-	 */
-	protected void setEnablement(Control control, boolean enabled) {
-		if (control.isEnabled() != enabled)
-			control.setEnabled(enabled);
-		setDependentControlEnablement(control, enabled);
-	}
-
-	private void setEnablement(final String propertyName, final boolean enabled) {
-		if (propertyToWidgetHash != null) {
-			Display.getDefault().syncExec(new Runnable() {
-				public void run() {
-					Control control = (Control) propertyToWidgetHash.get(propertyName);
-					if (control != null) {
-						setEnablement(control, enabled);
-					}
-				}
-			});
-		}
-	}
-
-	/**
-	 * @param control
-	 * @param enabled
-	 */
-	private void setDependentControlEnablement(Control control, boolean enabled) {
-		if (widgetToDepControls != null) {
-			Control[] dependents = (Control[]) widgetToDepControls.get(control);
-			if (dependents != null) {
-				Control dep = null;
-				for (int i = 0; i < dependents.length; i++) {
-					dep = dependents[i];
-					if (dep.isEnabled() != enabled)
-						dep.setEnabled(enabled);
-				}
-			}
-		}
-	}
-
-	protected void setWidgetValue(String propertyName, int flag, Button button) {
-		if ((button.getStyle() & SWT.CHECK) == SWT.CHECK || (button.getStyle() & SWT.RADIO) == SWT.RADIO) {
-			boolean checked = dataModel.getBooleanProperty(propertyName);
-			if (button.getSelection() != checked) {
-				button.setSelection(checked);
-			}
-		}
-	}
-
-	protected void setWidgetValue(String propertyName, int flag, Combo combo) {
-		if (flag == DataModelEvent.VALID_VALUES_CHG || combo.getItemCount() == 0) {
-			// Display properties should only fire if the contents change.
-			DataModelPropertyDescriptor[] descriptors = dataModel.getValidPropertyDescriptors(propertyName);
-			String[] items = new String[descriptors.length];
-			for (int i = 0; i < descriptors.length; i++) {
-				items[i] = descriptors[i].getPropertyDescription();
-			}
-			combo.setItems(items);
-		}
-		String newText = dataModel.getPropertyDescriptor(propertyName).getPropertyDescription();
-		int selIndex = combo.getSelectionIndex();
-		if (selIndex < 0 || !newText.equals(combo.getItem(selIndex))) {
-			String[] items = combo.getItems();
-			for (int i = 0; i < items.length; i++) {
-				if (items[i].equals(newText)) {
-					combo.select(i);
-					return;
-				}
-			}
-		}
-		combo.setText(newText);
-	}
-
-	protected void setWidgetValue(String propertyName, int flag, Text text) {
-		String newText = dataModel.getStringProperty(propertyName);
-		if (!newText.equals(text.getText())) {
-			text.setText(newText);
-		}
-	}
-
-	protected void setWidgetValue(String propertyName, int flag, Table table) {
-		Object[] elements = (Object[]) dataModel.getProperty(propertyName);
-		if (elements == null || elements.length == 0) {
-			setTableItemsChecked(table.getItems(), false);
-			return;
-		}
-		java.util.List elementList = Arrays.asList(elements);
-		TableItem[] tableItems = table.getItems();
-		for (int i = 0; i < tableItems.length; i++) {
-			TableItem item = tableItems[i];
-			if (elementList.contains(item.getData()))
-				item.setChecked(true);
-			else
-				item.setChecked(false);
-		}
-	}
-
-	protected void setTableItemsChecked(TableItem[] tableItems, boolean b) {
-		for (int i = 0; i < tableItems.length; i++)
-			tableItems[i].setChecked(b);
-	}
-
-	protected void setWidgetValue(String propertyName, int flag, Tree tree) {
-		Object[] elements = (Object[]) dataModel.getProperty(propertyName);
-		if (elements == null)
-			return;
-		java.util.List elementList = Arrays.asList(elements);
-		TreeItem[] treeItems = tree.getItems();
-		if (elementList.size() == 0) {
-			setTreeItemsGrey(treeItems, false);
-			return;
-		}
-		if (treeItems.length > 0)
-			setTreeItemChecked(treeItems, elementList);
-	}
-
-	public void setTreeItemsGrey(TreeItem[] treeItems, boolean b) {
-		for (int i = 0; i < treeItems.length; i++) {
-			TreeItem item = treeItems[i];
-			item.setGrayed(b);
-			setTreeItemsGrey(treeItems[i].getItems(), b);
-		}
-	}
-
-	protected void setTreeItemChecked(TreeItem[] treeItems, java.util.List items) {
-		for (int i = 0; i < treeItems.length; i++) {
-			if (items.contains(treeItems[i].getData()))
-				treeItems[i].setChecked(true);
-			else
-				treeItems[i].setGrayed(true);
-			TreeItem[] childernItems = treeItems[i].getItems();
-			if (childernItems.length > 0) {
-				treeItems[i].setExpanded(true);
-				setTreeItemChecked(childernItems, items);
-			}
-		}
-	}
-
-	protected void setWidgetValue(String propertyName, int flag, Label label) {
-		String newText = dataModel.getStringProperty(propertyName);
-		if (!newText.equals(label.getText())) {
-			label.setText(newText);
-		}
-	}
-
-	protected void setWidgetValue(String propertyName, int flag, List list) {
-		Object newContents = dataModel.getProperty(propertyName);
-		if (newContents == null) {
-			list.setItems(new String[0]);
-			return;
-		}
-		if (newContents instanceof java.util.List) {
-			java.util.List modelContents = (java.util.List) newContents;
-			String[] items = new String[modelContents.size()];
-			for (int i = 0; i < modelContents.size(); i++) {
-				items[i] = modelContents.get(i).toString();
-			}
-			list.setItems(items);
-		} else if (newContents instanceof String[]) {
-			list.setItems((String[]) newContents);
-		}
-	}
-
-	public void synchAllUIWithModel() {
-		if (null != propertyToWidgetHash) {
-			Collection keys = propertyToWidgetHash.keySet();
-			if (!keys.isEmpty()) {
-				Iterator propertyNames = keys.iterator();
-				String propertyName = null;
-				while (propertyNames.hasNext()) {
-					propertyName = (String) propertyNames.next();
-					synchUIWithModel(propertyName, DataModelEvent.VALUE_CHG);
-				}
-			}
-		}
-	}
-
-	protected void synchComposite(Widget widget, String propertyName, Control[] depControls) {
-		if (null == widgetToPropertyHash)
-			widgetToPropertyHash = new HashMap();
-		if (propertyToWidgetHash == null)
-			propertyToWidgetHash = new HashMap();
-		widgetToPropertyHash.put(widget, propertyName);
-		propertyToWidgetHash.put(propertyName, widget);
-		if (depControls != null) {
-			if (widgetToDepControls == null)
-				widgetToDepControls = new HashMap();
-			widgetToDepControls.put(widget, depControls);
-		}
-		synchUIWithModel(propertyName, DataModelEvent.VALUE_CHG);
-	}
-
-	public void synchText(Text text, String propertyName, Control[] dependentControls) {
-		synchText(text, propertyName, false, dependentControls);
-	}
-
-	public void synchText(Text text, String propertyName, boolean isTimeModified, Control[] dependentControls) {
-		synchComposite(text, propertyName, dependentControls);
-		if (isTimeModified)
-			text.addModifyListener(getTimedListener());
-		else
-			text.addModifyListener(getModifyTextListener());
-	}
-
-	public void synchLabel(Label label, String propertyName, Control[] dependentControls) {
-		synchComposite(label, propertyName, dependentControls);
-	}
-
-	/**
-	 * Use this to synch the contents of the <code>list</code> to the List elements returned from
-	 * the <code>propertyName</code>.
-	 */
-	public void synchList(List list, String propertyName, Control[] dependentControls) {
-		synchComposite(list, propertyName, dependentControls);
-	}
-
-	/**
-	 * Use this to synch the value of the specified Combo with the specified propertyName. The
-	 * possible values displayed to the user are determined by return of
-	 * IDataModel.getValidPropertyDescriptors(String).
-	 * 
-	 * @param combo
-	 * @param propertyName
-	 * @param dependentControls
-	 */
-	public void synchCombo(Combo combo, String propertyName, Control[] dependentControls) {
-		synchComposite(combo, propertyName, dependentControls);
-		if (null == comboListener) {
-			comboListener = new ComboListener();
-		}
-		combo.addSelectionListener(comboListener);
-		combo.addModifyListener(comboListener);
-	}
-
-	/**
-	 * Use this to sync the state of the specified checkbox with the value of the specified
-	 * propertyName. The specified propertyName must contain a java.lang.Boolean typed Object.
-	 * 
-	 * @param checkbox
-	 * @param propertyName
-	 * @param dependentControls
-	 */
-	public void synchCheckbox(Button checkbox, String propertyName, Control[] dependentControls) {
-		synchComposite(checkbox, propertyName, dependentControls);
-		if (null == checkboxSelectionListener) {
-			checkboxSelectionListener = new CheckboxSelectionListener();
-		}
-		checkbox.addSelectionListener(checkboxSelectionListener);
-	}
-
-	public void synchCheckBoxTableViewer(CheckboxTableViewer tableViewer, String propertyName, Control[] dependentControls) {
-		synchComposite(tableViewer.getControl(), propertyName, dependentControls);
-		if (null == checkBoxViewerStateListener) {
-			checkBoxViewerStateListener = new CheckBoxViewerListener();
-		}
-		tableViewer.addCheckStateListener(checkBoxViewerStateListener);
-	}
-
-	public void synchCheckBoxTreeViewer(CheckboxTreeViewer treeViewer, String propertyName, Control[] dependentControls) {
-		treeViewer.expandAll();
-		synchComposite(treeViewer.getControl(), propertyName, dependentControls);
-		if (null == checkBoxViewerStateListener) {
-			checkBoxViewerStateListener = new CheckBoxViewerListener();
-		}
-		treeViewer.addCheckStateListener(checkBoxViewerStateListener);
-	}
-
-	public void synchRadio(Button radio, String propertyName, Control[] dependentControls) {
-		// Uses checkbox syncher
-		synchCheckbox(radio, propertyName, dependentControls);
-	}
-
-	private TimedModifyListener getTimedListener() {
-		if (timedModifyListener == null)
-			timedModifyListener = new TimedModifyListener(new ActionListener() {
-				public void actionPerformed(ActionEvent e) {
-					Widget w = (Widget) e.getSource();
-					if (currentWidget == w || w.isDisposed())
-						return;
-					String propertyName = (String) widgetToPropertyHash.get(w);
-					setTextProperty(propertyName, (Text) w);
-				}
-			}) {
-				public void modifyText(ModifyEvent e) {
-					if (ignoreModifyEvent)
-						return;
-					super.modifyText(e);
-				}
-			};
-		return timedModifyListener;
-	}
-
-	protected void setTextProperty(String propertyName, Text text) {
-		setProperty(propertyName, text.getText());
-	}
-
-	private ModifyTextListener getModifyTextListener() {
-		if (null == modifyTextListener)
-			modifyTextListener = new ModifyTextListener();
-		return modifyTextListener;
-	}
-
-	public IDataModel getDataModel() {
-		return dataModel;
-	}
-
-	public void dispose() {
-		dataModel.removeListener(this);
-		checkboxSelectionListener = null;
-		currentWidget = null;
-		modifyTextListener = null;
-		propertyToWidgetHash = null;
-		timedModifyListener = null;
-		widgetToDepControls = null;
-		widgetToPropertyHash = null;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizard.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizard.java
deleted file mode 100644
index bbfa689..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizard.java
+++ /dev/null
@@ -1,340 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
-
-import java.lang.reflect.InvocationTargetException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.wizard.IWizardPage;
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.wst.common.environment.IEnvironment;
-import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelProvider;
-import org.eclipse.wst.common.frameworks.internal.DataModelManager;
-import org.eclipse.wst.common.frameworks.internal.OperationManager;
-import org.eclipse.wst.common.frameworks.internal.eclipse.ui.EclipseEnvironment;
-import org.eclipse.wst.common.frameworks.internal.ui.ErrorDialog;
-import org.eclipse.wst.common.frameworks.internal.ui.PageGroupManager;
-import org.eclipse.wst.common.frameworks.internal.ui.WTPCommonUIResourceHandler;
-
-
-/**
- * This class is EXPERIMENTAL and is subject to substantial changes.
- */
-public abstract class DataModelWizard extends Wizard implements IDMPageHandler {
-	private DataModelManager dataModelManager;
-	private OperationManager operationManager;
-	private PageGroupManager pageGroupManager;
-	private IDataModel dataModel;
-	private AddablePageGroup rootPageGroup;
-
-	// private IWizardPage firstpage;
-
-	public DataModelWizard(IDataModel dataModel) {
-		this.dataModel = dataModel;
-	}
-
-	public DataModelWizard() {
-	}
-
-	protected abstract IDataModelProvider getDefaultProvider();
-
-	/**
-	 * @return the wizard ID that clients should extend to add to this wizard
-	 */
-	public final String getWizardID() {
-		return getDataModel().getID();
-	}
-
-	/**
-	 * 
-	 * @return returns the root operation for this wizard.
-	 */
-	protected IDataModelOperation getRootOperation() {
-		return getDataModel().getDefaultOperation();
-	}
-
-	/**
-	 * This is finalized to handle the adding of extended pages. Clients should override
-	 * doAddPages() to add their pages.
-	 */
-	public final void addPages() {
-		init();
-		doAddPages();
-	}
-
-	/**
-	 * Subclasses should override this method to add pages.
-	 */
-	protected void doAddPages() {
-	}
-
-	// TODO make this final
-	public IWizardPage getStartingPage() {
-		pageGroupManager.reset();
-		return getNextPage(null);
-	}
-
-	/**
-	 * Subclasses wishing to control the page ordering should do so by overriding
-	 * getNextPage(String, String) and getPreviousPage(String, String)
-	 * 
-	 * @link #getNextPage(String, String)
-	 * @link #getPreviousPage(String, String)
-	 */
-	// TODO make this final
-	public IWizardPage getNextPage(IWizardPage page) {
-
-		IWizardPage currentPage = pageGroupManager.getCurrentPage();
-
-		pageGroupManager.moveForwardOnePage();
-
-		IWizardPage nextPage = pageGroupManager.getCurrentPage();
-
-		// If an error occured then the current page and the next page will be the same.
-		if (currentPage != nextPage && nextPage != null) {
-			nextPage.setWizard(this);
-			nextPage.setPreviousPage(currentPage);
-		}
-
-		return currentPage == nextPage ? null : nextPage;
-	}
-
-	public String getNextPage(String currentPageName, String expectedNextPageName) {
-		return expectedNextPageName;
-	}
-
-	/**
-	 * Subclasses wishing to control the page ordering should do so by overriding
-	 * getNextPage(String, String) and getPreviousPage(String, String)
-	 * 
-	 * @link #getNextPage(String, String)
-	 * @link #getPreviousPage(String, String)
-	 */
-	// TODO make this final
-	public IWizardPage getPreviousPage(IWizardPage page) {
-		return page != null ? page.getPreviousPage() : null;
-	}
-
-	public String getPreviousPage(String currentPageName, String expectedPreviousPageName) {
-		return expectedPreviousPageName;
-	}
-
-	public boolean canFinish() {
-		if (!super.canFinish() || !getDataModel().isValid()) {
-			return false;
-		}
-
-		return true;
-	}
-
-	public PageGroupManager getPageGroupManager() {
-		return pageGroupManager;
-	}
-
-	// TODO need to implement this. Perhaps in the PageGroupManager
-	//
-	protected void resetAfterFinishError() {
-		// IWizardPage[] pages = getPages();
-		// for (int i = 0; i < pages.length; i++) {
-		// DataModelWizardPage wtpPage = (DataModelWizardPage) pages[i];
-		// wtpPage.validatePage(true);
-		// }
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jface.wizard.IWizard#performFinish()
-	 */
-	public final boolean performFinish() {
-		boolean wasSuccessful = false;
-
-		try {
-			if (prePerformFinish()) {
-				storeDefaultSettings();
-
-				wasSuccessful = pageGroupManager.runAllRemainingOperations();
-				postPerformFinish();
-			}
-		} catch (Throwable exc) {
-			wasSuccessful = false;
-			// TODO log error
-		}
-
-		return wasSuccessful;
-	}
-
-	public boolean performCancel() {
-		pageGroupManager.undoAllCurrentOperations();
-
-		return true;
-	}
-
-	/**
-	 * Subclass can override to perform any tasks prior to running the operation. Return true to
-	 * have the operation run and false to stop the execution of the operation.
-	 * 
-	 * @return
-	 */
-	protected boolean prePerformFinish() {
-		return true;
-	}
-
-	/**
-	 * Subclasses should override to perform any actions necessary after performing Finish.
-	 */
-	protected void postPerformFinish() throws InvocationTargetException {
-	}
-
-	protected void storeDefaultSettings() {
-		IWizardPage[] pages = getPages();
-		for (int i = 0; i < pages.length; i++)
-			storeDefaultSettings(pages[i], i);
-	}
-
-	/**
-	 * Subclasses may override if they need to do something special when storing the default
-	 * settings for a particular page.
-	 * 
-	 * @param page
-	 * @param pageIndex
-	 */
-	protected void storeDefaultSettings(IWizardPage page, int pageIndex) {
-		if (page instanceof DataModelWizardPage)
-			((DataModelWizardPage) page).storeDefaultSettings();
-	}
-
-	/**
-	 * Subclasses should override if the running operation is allowed to be cancelled. The default
-	 * is false.
-	 * 
-	 * @return
-	 */
-	protected boolean isCancelable() {
-		return false;
-	}
-
-	/**
-	 * Subclasses should override to return false if the running operation cannot be run forked.
-	 * 
-	 * @return
-	 */
-	protected boolean runForked() {
-		return false;
-	}
-
-	public void setDataModel(IDataModel model) {
-		this.dataModel = model;
-	}
-
-	/**
-	 * @return Returns the model.
-	 */
-	public IDataModel getDataModel() {
-		if (null == dataModel) {
-			dataModel = DataModelFactory.createDataModel(getDefaultProvider());
-		}
-
-		return dataModel;
-	}
-
-	public void dispose() {
-		super.dispose();
-		if (null != dataModel) {
-			dataModel.dispose();
-		}
-	}
-
-	/**
-	 * The default is to return a SimplePageGroup. Subclasses may want to overrided this method to
-	 * return a different root page group for the wizard.
-	 * 
-	 * @return
-	 */
-	protected AddablePageGroup createRootPageGroup() {
-		String id = getWizardID();
-		// For the root page group the wizard id and the group id are the same.
-		SimplePageGroup pageGroup = new SimplePageGroup(id, id);
-		pageGroup.setPageHandler(this);
-		return pageGroup;
-	}
-
-	/**
-	 * Creates the default environment for this wizard.
-	 * 
-	 * @return
-	 */
-	protected IEnvironment createEnvironment() {
-		return new EclipseEnvironment();
-	}
-
-	public void addPage(IWizardPage page) {
-		rootPageGroup.addPage(page);
-	}
-
-	private void init() {
-		dataModelManager = new DataModelManager(getDataModel());
-		operationManager = new WizardOperationManager(dataModelManager, getRootOperation());
-		rootPageGroup = createRootPageGroup();
-		pageGroupManager = new PageGroupManager(operationManager, dataModelManager, rootPageGroup);
-	}
-
-	private class WizardOperationManager extends OperationManager {
-		public WizardOperationManager(DataModelManager dataModelManager, IDataModelOperation rootOperation) {
-			super(dataModelManager, rootOperation, createEnvironment());
-		}
-
-		public IStatus runOperations() {
-			final IStatus[] status = new IStatus[1];
-			IRunnableWithProgress runnable = new IRunnableWithProgress() {
-				public void run(IProgressMonitor monitor) {
-					setProgressMonitor(monitor);
-					status[0] = WizardOperationManager.super.runOperations();
-				}
-			};
-			try {
-				getContainer().run(runForked(), isCancelable(), runnable);
-			} catch (Throwable exc) {
-				Logger.getLogger().logError(exc);
-				ErrorDialog.openError(getShell(), WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.WTPWizard_UI_0, new Object[]{getWindowTitle()}), WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.WTPWizard_UI_1, new Object[]{getWindowTitle()}), exc, 0, false); //$NON-NLS-1$ //$NON-NLS-2$
-				status[0] = new Status(IStatus.ERROR, "id", 0, exc.getMessage(), exc); //$NON-NLS-1$
-			}
-
-			return status[0];
-		}
-
-		public void undoLastRun() {
-			IRunnableWithProgress runnable = new IRunnableWithProgress() {
-				public void run(IProgressMonitor monitor) {
-					setProgressMonitor(monitor);
-					WizardOperationManager.super.undoLastRun();
-				}
-			};
-			try {
-				getContainer().run(runForked(), isCancelable(), runnable);
-			} catch (Throwable exc) {
-				Logger.getLogger().logError(exc);
-				ErrorDialog.openError(getShell(), WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.WTPWizard_UI_0, new Object[]{getWindowTitle()}), WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.WTPWizard_UI_1, new Object[]{getWindowTitle()}), exc, 0, false); //$NON-NLS-1$ //$NON-NLS-2$
-			}
-		}
-	}
-
-	public boolean needsPreviousAndNextButtons() {
-		return super.needsPreviousAndNextButtons() || getPageGroupManager().hasMultiplePages();
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizardFactory.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizardFactory.java
deleted file mode 100644
index eec76f6..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizardFactory.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
-
-import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.internal.operation.extensionui.DataModelWizardExtensionReader;
-
-public class DataModelWizardFactory {
-
-	private static DataModelWizardExtensionReader reader;
-
-	/**
-	 * Looks up the appropriate DataModelWizard by the specified id and
-	 * constructs a new DataModelWizard using a new instance of the IDataModel
-	 * looked up with the same id. If the DataModelWizard is not found then a
-	 * RuntimeException is thrown.
-	 * 
-	 * @param id
-	 *            the id of the DataModelWizard
-	 * @return a new DataModelWizard
-	 */
-	public static DataModelWizard createWizard(String id) {
-		return createWizard(DataModelFactory.createDataModel(id));
-	}
-
-	/**
-	 * Looks up the appropriate DataModelWizard using the id retured from
-	 * <code>dataModel.getID()</code>.
-	 * 
-	 * @param dataModel
-	 * @return a new DataModelWizard
-	 */
-	public static DataModelWizard createWizard(IDataModel dataModel) {
-		return loadWizard(dataModel);
-	}
-
-	private static DataModelWizard loadWizard(IDataModel dataModel) {
-		if (null == reader) {
-			reader = new DataModelWizardExtensionReader();
-		}
-		return reader.getWizard(dataModel);
-	}
-
-	/**
-	 * Looks up the appropriate DataModelWizard using the name of the specified
-	 * class as the id. This method is equavalent to
-	 * <code>createWizard(classID.getName())</code>.
-	 * 
-	 * @param classID
-	 *            the class whose name is the id of the DataModelWizard
-	 * @return a new DataModelWizard
-	 */
-	public static DataModelWizard createWizard(Class dataModelProviderID) {
-		return createWizard(dataModelProviderID.getName());
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizardPage.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizardPage.java
deleted file mode 100644
index 87b3943..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizardPage.java
+++ /dev/null
@@ -1,430 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.dialogs.IMessageProvider;
-import org.eclipse.jface.wizard.IWizard;
-import org.eclipse.jface.wizard.IWizardPage;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.wst.common.frameworks.datamodel.DataModelEvent;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelListener;
-import org.eclipse.wst.common.frameworks.internal.ui.ValidationStatus;
-
-/**
- * This class is EXPERIMENTAL and is subject to substantial changes.
- */
-public abstract class DataModelWizardPage extends WizardPage implements Listener, IDataModelListener {
-	protected static final int NEXT = 1;
-	protected static final int PREVIOUS = 2;
-	protected static final int COMPOSITE_BORDER = SWT.NULL;
-	private ValidationStatus status = new ValidationStatus();
-	private boolean isValidating = false;
-	protected boolean isFirstTimeToPage = true;
-	protected IDataModel model;
-	private Map validationMap;
-	private String[] validationPropertyNames;
-	protected DataModelSynchHelper synchHelper;
-	private String infopopID;
-	private DataModelWizard wizard;
-	private IWizardPage previousPage;
-
-	/**
-	 * J2EEWizardPage constructor comment.
-	 * 
-	 * @param pageName
-	 *            java.lang.String
-	 */
-	protected DataModelWizardPage(IDataModel model, String pageName) {
-		super(pageName);
-		this.model = model;
-		model.addListener(this);
-		synchHelper = initializeSynchHelper(model);
-	}
-	
-	/**
-	 * @return
-	 */
-	public DataModelSynchHelper initializeSynchHelper(IDataModel dm) {
-		return new DataModelSynchHelper(dm);
-	}
-
-	/**
-	 * J2EEWizardPage constructor comment.
-	 * 
-	 * @param pageName
-	 *            java.lang.String
-	 * @param title
-	 *            java.lang.String
-	 * @param titleImage
-	 *            org.eclipse.jface.resource.ImageDescriptor
-	 */
-	protected DataModelWizardPage(IDataModel model, String pageName, String title, org.eclipse.jface.resource.ImageDescriptor titleImage) {
-		super(pageName, title, titleImage);
-		this.model = model;
-		model.addListener(this);
-		synchHelper = initializeSynchHelper(model);
-	}
-
-	/**
-	 * Creates the top level control for this dialog page under the given parent composite. This
-	 * method has been abstract and it uses the template pattern to get the correct items setup in
-	 * the correct order. See the set of methods below that are called in this method.
-	 * <p>
-	 * Implementors are responsible for ensuring that the created control can be accessed via
-	 * <code>getControl</code>
-	 * </p>
-	 * 
-	 * @param parent
-	 *            the parent composite
-	 */
-	public final void createControl(org.eclipse.swt.widgets.Composite parent) {
-		Composite top = createTopLevelComposite(parent);
-		setControl(top);
-		setupInfopop(top);
-		setDefaults();
-		addListeners();
-		initializeValidationProperties();
-	}
-
-	private void initializeValidationProperties() {
-		validationPropertyNames = getValidationPropertyNames();
-		if (validationPropertyNames == null || validationPropertyNames.length == 0)
-			validationMap = Collections.EMPTY_MAP;
-		else {
-			validationMap = new HashMap(validationPropertyNames.length);
-			for (int i = 0; i < validationPropertyNames.length; i++)
-				validationMap.put(validationPropertyNames[i], new Integer(i));
-		}
-	}
-
-	public boolean canFlipToNextPage() {
-		//TODO why is that last getNextPage() call here???
-		return isPageComplete() && ((null != wizard && wizard.getPageGroupManager().hasNextPage() || null != getNextPage()));
-	}
-
-	/*
-	 * (non-Javadoc) Method declared on IWizardPage.
-	 */
-	public void setWizard(IWizard newWizard) {
-		super.setWizard(newWizard);
-		if(newWizard instanceof DataModelWizard){
-			wizard = (DataModelWizard) newWizard;
-		}
-	}
-
-	public IWizardPage getPreviousPage() {
-		return previousPage;
-	}
-
-	public void setPreviousPage(IWizardPage page) {
-		super.setPreviousPage(page);
-		previousPage = page;
-	}
-
-	/**
-	 * Subclass should return the model property names that need to be validated on this page in the
-	 * order that they should present their messages.
-	 * 
-	 * @return
-	 */
-	protected abstract String[] getValidationPropertyNames();
-
-	/**
-	 * Return the top level Composite for this page.
-	 */
-	protected abstract Composite createTopLevelComposite(Composite parent);
-
-	/**
-	 * Set up info pop hooks if set.
-	 */
-	protected void setupInfopop(Control parent) {
-		if (getInfopopID() != null)
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, getInfopopID());
-	}
-
-	/**
-	 * Setup the default values for this page. Subclasses should override to provide appropriate
-	 * defaults.
-	 */
-	protected void setDefaults() {
-		restoreDefaultSettings();
-	}
-
-	/**
-	 * Subclasses should implement this method if they have default settings that have been stored
-	 * and need to be restored.
-	 * 
-	 * @see storeDefaultSettings()
-	 */
-	protected void restoreDefaultSettings() {
-	}
-
-	/**
-	 * Add Listeners to controls at this point to avoid unnecessary events. Subclasses should
-	 * override to add listeners to its controls.
-	 */
-	protected void addListeners() {
-	}
-
-	/**
-	 * The page is being made current and visible. Subclasses may extend.
-	 */
-	protected void enter() {
-		try {
-			// Check to see if we are moving back one page.
-			if (null != wizard && wizard.getPreviousPage(wizard.getPageGroupManager().getCurrentPage()) == this) {
-				wizard.getPageGroupManager().moveBackOnePage();
-			}
-
-			validatePage(showValidationErrorsOnEnter());
-		} finally {
-			isFirstTimeToPage = false;
-		}
-	}
-
-	/**
-	 * The default behavior is to return true unless it is the first time entering this page in
-	 * which case we check to see if there is a previous page and return true if there is not.
-	 * Subclasses should override if they do not want this default behavior.
-	 */
-	protected boolean showValidationErrorsOnEnter() {
-		return !isFirstTimeToPage();
-	}
-
-	/**
-	 * The default behavior is to return true unless it is the first time entering this page in
-	 * which case we check to see if there is a previous page and return true if there is not.
-	 * Subclasses should override if they do not want this default behavior.
-	 * 
-	 * @deprecated - use showValidatoinErrorsOnEnter instead
-	 */
-	protected boolean shouldValidateOnEnter() {
-		return showValidationErrorsOnEnter();
-	}
-
-	/**
-	 * Exiting the page. Subclasses may extend.
-	 */
-	protected void exit() {
-	}
-
-	protected boolean getStatus(Integer key) {
-		return status.hasError(key);
-	}
-
-	/**
-	 * Sent when an event that the receiver has registered for occurs. If a subclass overrides this
-	 * method, it must call super.
-	 * 
-	 * @param event
-	 *            the event which occurred
-	 */
-	public void handleEvent(org.eclipse.swt.widgets.Event event) {
-	}
-
-	/**
-	 * Set the error message for this page based on the last error in the ValidationStatus.
-	 */
-	protected void setErrorMessage() {
-		String error = status.getLastErrMsg();
-		if (error == null) {
-			if (getErrorMessage() != null)
-				setErrorMessage((String) null);
-			String warning = status.getLastWarningMsg();
-			if (warning == null) {
-				if (getMessage() != null && getMessageType() == IMessageProvider.WARNING)
-					setMessage(null, IMessageProvider.WARNING);
-			} else if (!warning.equals(getMessage()))
-				setMessage(warning, IMessageProvider.WARNING);
-		} else if (!error.equals(getErrorMessage()))
-			setErrorMessage(error);
-	}
-
-	protected void setErrorStatus(Integer key, String errorMessage) {
-		status.setErrorStatus(key, errorMessage);
-	}
-
-	protected void setWarningStatus(Integer key, String warningMessage) {
-		status.setWarningStatus(key, warningMessage);
-	}
-
-	protected void setOKStatus(Integer key) {
-		status.setOKStatus(key);
-	}
-
-	/**
-	 * The <code>DialogPage</code> implementation of this <code>IDialogPage</code> method sets
-	 * the control to the given visibility state. Subclasses may extend.
-	 */
-
-	public void setVisible(boolean visible) {
-		super.setVisible(visible);
-		if (visible) {
-			enter();
-		} else
-			exit();
-	}
-
-	/**
-	 * This should be called by the Wizard just prior to running the performFinish operation.
-	 * Subclasses should override to store their default settings.
-	 */
-	public void storeDefaultSettings() {
-	}
-
-	/**
-	 * The page is now being validated. At this time, each control is validated and then the
-	 * controls are updated based on the results in the ValidationStatus which was updated during
-	 * <code>validateControls()</code>. Finally, it will display the last error message and it
-	 * will set the page complete. Subclasses will not typically override this method.
-	 */
-	protected void validatePage() {
-		validatePage(true);
-	}
-
-	protected void validatePage(boolean showMessage) {
-		if (!isValidating) {
-			isValidating = true;
-			try {
-				validateControlsBase();
-				updateControls();
-				if (showMessage)
-					setErrorMessage();
-				setPageComplete(status.getLastErrMsg() == null);
-			} finally {
-				isValidating = false;
-			}
-		}
-	}
-
-	/**
-	 * Validate individual controls. Use validation keys to keep track of errors.
-	 * 
-	 * @see setOKStatus(Integer) and setErrorMessage(Integer, String)
-	 */
-	protected final String validateControlsBase() {
-		if (!validationMap.isEmpty()) {
-			String propName;
-			for (int i = 0; i < validationPropertyNames.length; i++) {
-				propName = validationPropertyNames[i];
-				Integer valKey = (Integer) validationMap.get(propName);
-				if (valKey != null)
-					validateProperty(propName, valKey);
-				if (!getStatus(valKey))
-					return propName;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * @param propertyName
-	 * @param validationkey
-	 */
-	private void validateProperty(String propertyName, Integer validationKey) {
-		setOKStatus(validationKey);
-		IStatus status1 = model.validateProperty(propertyName);
-		if (!status1.isOK()) {
-			String message = status1.isMultiStatus() ? status1.getChildren()[0].getMessage() : status1.getMessage();
-			switch (status1.getSeverity()) {
-				case IStatus.ERROR :
-					setErrorStatus(validationKey, message);
-					break;
-				case IStatus.WARNING :
-					setWarningStatus(validationKey, message);
-					break;
-			}
-		}
-	}
-
-	/**
-	 * Update the enablement of controls after validation. Sublcasses should check the status of
-	 * validation keys to determine enablement.
-	 */
-	protected void updateControls() {
-	}
-
-	/**
-	 * Gets the isFirstTimeToPage.
-	 * 
-	 * @return Returns a boolean
-	 */
-	protected boolean isFirstTimeToPage() {
-		return isFirstTimeToPage;
-	}
-
-	// protected void setJavaStatusMessage(IStatus javaStatus, Integer statusKey, String message) {
-	// if (javaStatus.getSeverity() == IStatus.WARNING)
-	// setWarningStatus(statusKey, message);
-	// else
-	// setErrorStatus(statusKey, message);
-	// }
-
-	/**
-	 * @param b
-	 */
-	public void setFirstTimeToPage(boolean b) {
-		isFirstTimeToPage = b;
-	}
-
-	/*
-	 * If a property changes that we want to validate, force validation on this page.
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.operation.WTPOperationDataModelListener#propertyChanged(java.lang.String,
-	 *      java.lang.Object, java.lang.Object)
-	 */
-	public void propertyChanged(DataModelEvent event) {
-		String propertyName = event.getPropertyName();
-		if (validationPropertyNames != null && (event.getFlag() == DataModelEvent.VALUE_CHG || (!isPageComplete() && event.getFlag() == DataModelEvent.VALID_VALUES_CHG))) {
-			for (int i = 0; i < validationPropertyNames.length; i++) {
-				if (validationPropertyNames[i].equals(propertyName)) {
-					validatePage();
-					break;
-				}
-			}
-		}
-	}
-
-	/**
-	 * @return Returns the model.
-	 */
-	protected IDataModel getDataModel() {
-		return model;
-	}
-
-	public void dispose() {
-		super.dispose();
-		if (synchHelper != null) {
-			synchHelper.dispose();
-			synchHelper = null;
-		}
-	}
-
-	protected String getInfopopID() {
-		return infopopID;
-	}
-
-	public void setInfopopID(String infopopID) {
-		this.infopopID = infopopID;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageGroup.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageGroup.java
deleted file mode 100644
index d69edce..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageGroup.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others. 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
-
-import java.util.List;
-import java.util.Set;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-
-public interface IDMPageGroup 
-{
-  public String getWizardID();
-  
-  public String getPageGroupID();
-  
-  public String getPageGroupInsertionID();
-  
-  public boolean getAllowsExtendedPages();
-  
-  public String getRequiredDataOperationToRun();
-  
-  public Set getDataModelIDs();
-  
-  public List getPages(IDataModel dataModel);
-  
-  public IDMPageHandler getPageHandler( IDataModel dataModel );
-  
-  public IDMPageGroupHandler getPageGroupHandler( IDataModel dataModel );
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageGroupHandler.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageGroupHandler.java
deleted file mode 100644
index c170e5c..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageGroupHandler.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
-
-/**
- * 
- * The wizard framework allows page groups to be inserted after other page group.
- * If more than one page group inserts itself after a particular page group it may
- * not be deterministic which page group should follow each other.  This class
- * allows a particular page group to determine the order in which subsequent page
- * groups should be ordered.
- * 
- * For example: A page group T has three page groups X, Y, and Z that have registered
- *              via the wizardPageGroup extension point to follow it.
- *              The wizard framework will call getNextGroup with:
- *              
- *                 T.getNextGroup( null, { "X", "Y", "Z" } )
- *                 
- *              This method should return either "X", "Y", "Z", or null if no page group
- *              should follow.  If "Y" was returned then a subequent call
- *              will be made by the framework with:
- *              
- *                 T.getNextGroup( "Y", { "X", "Y", "Z" } )
- *                 
- *              Again this method should return either "X", "Y", "Z", or null if no page
- *              group should follow this page group "Y".
- *              
- * Note: any page group can have a page group handler associated with it so this method
- *       call is recursive in nature.  For example: the page group Y might have page
- *       groups Y1, Y2, and Y3 following it.  This would result in the following calls:
- *       
- *                 T.getNextGroup( null, { "X", "Y", "Z" } )  // "Y" is selected using Ts handler.
- *                 Y.getNextGroup( null, { "Y1", "Y2", "Y3" } ) // "Y1" is selected using Ys handler.
- *                 
- *                 For this example Y1 has no page groups following it.
- *                 
- *                 T.getNextGroup( "Y", { "X", "Y", "Z" } )  // null is selected using Ts handler.
- *                 
- *                 For this example, the T handler decided that no page group followed Y not even X or Z.
- *
- */
-public interface IDMPageGroupHandler 
-{
-  /**
-   * 
-   * @param currentPageGroupID the current page group ID.  This value will be null the first time 
-   *                           this method is called.
-   * @param pageGroupIDs a list of page group IDs that follow the page group for this handler.
-   * @return returns the page group id that should follow currentPageGroupID, or it
-   * should return null if no page group follows currentPageGroupID.
-   * 
-   */
-  public String getNextPageGroup( String currentPageGroupID, String[] pageGroupIDs );
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageHandler.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageHandler.java
deleted file mode 100644
index a4419a3..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageHandler.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
-
-/**
- * This interface is EXPERIMENTAL and is subject to substantial changes.
- */
-public interface IDMPageHandler {
-
-	/**
-	 * return this as the page name if the expectedNextPageName or expectedPreviousPageName should
-	 * be skipped
-	 */
-	public static final String SKIP_PAGE = "IDMExtendedPageHandler.SKIP_PAGE"; //$NON-NLS-1$
-
-	/**
-	 * prefix this string with the name of the page which occurs before the page that should be
-	 * returned. E.G. suppose your page contributions know about pages A, B and C, and you want the
-	 * to skip pages B and C, when going to the next page from A. To do this, return PAGE_AFTER+C.
-	 * The framework will then ask the wizard for the page that normally comes after page C.
-	 * PAGE_BEFORE works similarly.
-	 */
-	public static final String PAGE_AFTER = "IDMExtendedPageHandler.PAGE_AFTER"; //$NON-NLS-1$
-
-	/**
-	 * same as PAGE_AFTER, except for returing the page before.
-	 */
-	public static final String PAGE_BEFORE = "IDMExtendedPageHandler.PAGE_BEFORE"; //$NON-NLS-1$
-
-	/**
-	 * Return the name of the page that should be next
-	 * 
-	 * @param currentPageName
-	 *            the page the wizard is currently on
-	 * @param expectedNextPageName
-	 *            the page that would normally be next
-	 * @return
-	 */
-	public String getNextPage(String currentPageName, String expectedNextPageName);
-
-	/**
-	 * Return the name of the page that should be previous
-	 * 
-	 * @param currentPageName
-	 *            the page the wizard is currently on
-	 * @param expectedNextPageName
-	 *            the page that would normally be previous
-	 * @return
-	 */
-	public String getPreviousPage(String currentPageName, String expectedPreviousPageName);
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/SimplePageGroup.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/SimplePageGroup.java
deleted file mode 100644
index 0e936ef..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/SimplePageGroup.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others. 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
-
-import java.util.List;
-import java.util.Set;
-import java.util.Vector;
-
-import org.eclipse.jface.wizard.IWizardPage;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-
-public class SimplePageGroup implements AddablePageGroup {
-	private String groupID;
-	private String wizardID;
-	private boolean allowExtendedPages;
-	private String requiredDataOperation;
-	private Set    dataModelIDs;
-
-	private IDMPageHandler pageHandler;
-	private IDMPageGroupHandler pageGroupHandler;
-	private Vector pages;
-
-	public SimplePageGroup(String groupID, String wizardID, boolean allowExtendedPages, String requireDataOperation) {
-		this.groupID = groupID;
-		this.wizardID = wizardID;
-		this.allowExtendedPages = allowExtendedPages;
-		this.requiredDataOperation = requireDataOperation;
-		pages = new Vector();
-	}
-
-	public SimplePageGroup(String groupID, String wizardID) {
-		this(groupID, wizardID, true, null);
-	}
-
-	public void addPage(IWizardPage page) {
-		pages.add(page);
-	}
-
-	public void addPages(IWizardPage[] newPages) {
-		for (int index = 0; index < newPages.length; index++) {
-			pages.add(newPages[index]);
-		}
-	}
-
-	public boolean getAllowsExtendedPages() {
-		return allowExtendedPages;
-	}
-
-	public void setPageGroupHandler(IDMPageGroupHandler handler) {
-		pageGroupHandler = handler;
-	}
-
-	public IDMPageGroupHandler getPageGroupHandler(IDataModel dataModel) {
-		return pageGroupHandler;
-	}
-
-	public void setPageHandler(IDMPageHandler handler) {
-		pageHandler = handler;
-	}
-
-	public IDMPageHandler getPageHandler(IDataModel dataModel) {
-		return pageHandler;
-	}
-
-	public List getPages(IDataModel dataModel) {
-		return pages;
-	}
-	
-	public IWizardPage[] getExtendedPages(IDataModel dataModel) {
-		return (IWizardPage[]) pages.toArray(new IWizardPage[0]);
-	}
-
-	public String getPageGroupID() {
-		return groupID;
-	}
-
-	public String getPageGroupInsertionID() {
-		return null;
-	}
-
-	public String getRequiredDataOperationToRun() {
-		return requiredDataOperation;
-	}
-
-	public String getWizardID() {
-		return wizardID;
-	}
-
-	public Set getDataModelIDs() {
-		return dataModelIDs;
-	}
-
-	public void setDataModelIDs(Set dataModelIDs) {
-		this.dataModelIDs = dataModelIDs;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/ErrorDialog.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/ErrorDialog.java
deleted file mode 100644
index 620d136..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/ErrorDialog.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.dialog.ui;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.PlatformUI;
-
-
-/**
- * A dialog to display one or more errors to the user, as contained in an
- * <code>Status</code> object. If an error contains additional detailed
- * information then a Details button is automatically supplied, which shows or
- * hides an error details viewer when pressed by the user.
- *  
- */
-public class ErrorDialog extends MessageDialog
-{
-
-  /**
-   * Creates an error dialog. Note that the dialog will have no visual
-   * representation (no widgets) until it is told to open.
-   * <p>
-   * Normally one should use <code>openError</code> to create and open one of
-   * these. This constructor is useful only if the error object being displayed
-   * contains child items <it>and</it> you need to specify a mask which will
-   * be used to filter the displaying of these children.
-   * </p>
-   * 
-   * @param parentShell
-   *            the shell under which to create this dialog
-   * @param dialogTitle
-   *            the title to use for this dialog, or <code>null</code> to
-   *            indicate that the default title should be used
-   * @param message
-   *            the message to show in this dialog, or <code>null</code> to
-   *            indicate that the error's message should be shown as the
-   *            primary message
-   * @param status
-   *            the error to show to the user
-   * @param displayMask
-   *            the mask to use to filter the displaying of child items, as per
-   *            <code>Status.matches</code>
-   */
-  public ErrorDialog(
-    Shell parentShell,
-    String dialogTitle,
-    String message,
-    IStatus status,
-    int displayMask)
-  {
-    super(parentShell, dialogTitle, message, status, displayMask);
-  }
-
-  /*
-   * (non-Javadoc) This should also be overwritten Method declared on Dialog.
-   */
-  protected void createButtonsForButtonBar(Composite parent)
-  {
-    // create OK and Details buttons
-    createButton(
-      parent,
-      StatusDialogConstants.OK_ID,
-      IDialogConstants.OK_LABEL,
-      true);
-    if (status.isMultiStatus() || status.getException() != null )
-    {
-      detailsButton =
-        createButton(
-          parent,
-          StatusDialogConstants.DETAILS_ID,
-          IDialogConstants.SHOW_DETAILS_LABEL,
-          false);
-    }
-  }
-
-  /*
-   * This is one of the few methods that needs to be overwritten by the
-   * subclasses. The image names can be found in the Dialog class
-   */
-  protected Image getDialogImage()
-  {
-    // create image
-    return PlatformUI.getWorkbench().getDisplay().getSystemImage(SWT.ICON_ERROR);
-  }
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/InfoDialog.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/InfoDialog.java
deleted file mode 100644
index cfc565a..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/InfoDialog.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.dialog.ui;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.PlatformUI;
-
-
-/**
- * A dialog to display one or more errors to the user, as contained in an
- * <code>Status</code> object. If an error contains additional detailed
- * information then a Details button is automatically supplied, which shows or
- * hides an error details viewer when pressed by the user.
- *  
- */
-public class InfoDialog extends MessageDialog
-{
-  /**
-   * Creates an error dialog. Note that the dialog will have no visual
-   * representation (no widgets) until it is told to open.
-   * <p>
-   * Normally one should use <code>openError</code> to create and open one of
-   * these. This constructor is useful only if the error object being displayed
-   * contains child items <it>and</it> you need to specify a mask which will
-   * be used to filter the displaying of these children.
-   * </p>
-   * 
-   * @param parentShell
-   *            the shell under which to create this dialog
-   * @param dialogTitle
-   *            the title to use for this dialog, or <code>null</code> to
-   *            indicate that the default title should be used
-   * @param message
-   *            the message to show in this dialog, or <code>null</code> to
-   *            indicate that the error's message should be shown as the
-   *            primary message
-   * @param status
-   *            the error to show to the user
-   * @param displayMask
-   *            the mask to use to filter the displaying of child items, as per
-   *            <code>Status.matches</code>
-   */
-  public InfoDialog(
-    Shell parentShell,
-    String dialogTitle,
-    String message,
-    IStatus status,
-    int displayMask)
-  {
-    super(parentShell, dialogTitle, message, status, displayMask);
-  }
-
-  /*
-   * (non-Javadoc) This should also be overwritten Method declared on Dialog.
-   */
-  protected void createButtonsForButtonBar(Composite parent)
-  {
-    // create OK and Details buttons
-    createButton(
-      parent,
-      StatusDialogConstants.OK_ID,
-      IDialogConstants.OK_LABEL,
-      true);
-    if (status.isMultiStatus() )
-    {
-      detailsButton =
-        createButton(
-          parent,
-          StatusDialogConstants.DETAILS_ID,
-          IDialogConstants.SHOW_DETAILS_LABEL,
-          false);
-    }
-  }
-
-  /*
-   * This is one of the few methods that needs to be overwritten by the
-   * subclasses. The image names can be found in the Dialog class
-   */
-  protected Image getDialogImage()
-  {
-    // create image
-    return PlatformUI.getWorkbench().getDisplay().getSystemImage(SWT.ICON_INFORMATION);
-  }
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/MessageDialog.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/MessageDialog.java
deleted file mode 100644
index 5dc282a..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/MessageDialog.java
+++ /dev/null
@@ -1,636 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.dialog.ui;
-
-import java.io.BufferedReader;
-import java.io.PrintWriter;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.Vector;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.List;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.wst.common.environment.Choice;
-
-
-/**
- * A dialog to display one or more errors to the user, as contained in an
- * <code>Status</code> object. If an error contains additional detailed
- * information then a Details button is automatically supplied, which shows or
- * hides an error details viewer when pressed by the user.
- *  
- */
-public class MessageDialog extends Dialog
-{
-  protected Composite parent;
-
-  /**
-   * Reserve room for this many list items.
-   */
-  protected static final int LIST_ITEM_COUNT = 7;
-
-  /**
-   * The Details button.
-   */
-  protected Button detailsButton;
-
-  /**
-   * The title of the dialog.
-   */
-  protected String title;
-
-  /**
-   * The message to display.
-   */
-  protected String message;
-
-  /**
-   * The SWT list control that displays the error details.
-   */
-  protected List list;
-  protected Text details;
-
-  /**
-   * Indicates whether the error details viewer is currently created.
-   */
-  protected boolean listCreated = false;
-  protected boolean detailsCreated = false;
-
-  /**
-   * Filter mask for determining which status items to display.
-   */
-  protected int displayMask = 0xFFFF;
-
-  /**
-   * The main status object.
-   */
-  protected IStatus status;
-  
-  private Point savedSize = null;
-
-  /**
-   * List of the main error object's detailed errors (element type: <code>Status</code>).
-   */
-  protected java.util.List statusList;
-  /**
-   * Creates an error dialog. Note that the dialog will have no visual
-   * representation (no widgets) until it is told to open.
-   * <p>
-   * Normally one should use <code>openError</code> to create and open one of
-   * these. This constructor is useful only if the error object being displayed
-   * contains child items <it>and</it> you need to specify a mask which will
-   * be used to filter the displaying of these children.
-   * </p>
-   * 
-   * @param parentShell
-   *            the shell under which to create this dialog
-   * @param dialogTitle
-   *            the title to use for this dialog, or <code>null</code> to
-   *            indicate that the default title should be used
-   * @param message
-   *            the message to show in this dialog, or <code>null</code> to
-   *            indicate that the error's message should be shown as the
-   *            primary message
-   * @param status
-   *            the error to show to the user
-   * @param displayMask
-   *            the mask to use to filter the displaying of child items, as per
-   *            <code>Status.matches</code>
-   */
-  public MessageDialog(
-    Shell parentShell,
-    String dialogTitle,
-    String message,
-    IStatus status,
-    int displayMask)
-  {
-    super(parentShell);
-      this.title = dialogTitle == null ? JFaceResources.getString("Problem_Occurred") : //$NON-NLS-1$
-  dialogTitle;
-    this.message = message == null ? status.getMessage() : JFaceResources.format("Reason", new Object[] { message, status.getMessage()}); //$NON-NLS-1$
-    this.status = status;
-    statusList = Arrays.asList(status.getChildren());
-    this.displayMask = displayMask;
-    setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE | SWT.APPLICATION_MODAL);
-  }
-  /*
-   * (non-Javadoc) Method declared on Dialog. Handles the pressing of the Ok or
-   * Details button in this dialog. If the Ok button was pressed then close
-   * this dialog. If the Details button was pressed then toggle the displaying
-   * of the error details area. Note that the Details button will only be
-   * visible if the error being displayed specifies child details.
-   */
-  protected void buttonPressed(int id)
-  {
-    if (id == StatusDialogConstants.DETAILS_ID)
-    { // was the details button pressed?
-      toggleDetailsArea();
-    }
-    else
-    {
-      super.buttonPressed(id);
-    }
-  }
-  /*
-   * (non-Javadoc) Method declared in Window.
-   */
-  protected void configureShell(Shell shell)
-  {
-    super.configureShell(shell);
-    shell.setText(title);
-  }
-  /*
-   * (non-Javadoc) This should also be overwritten Method declared on Dialog.
-   */
-  protected void createButtonsForButtonBar(Composite parent)
-  {
-    // create OK and Details buttons
-    createButton(
-      parent,
-      StatusDialogConstants.OK_ID,
-      IDialogConstants.OK_LABEL,
-      true);
-    if (status.isMultiStatus() || status.getException() != null )
-    {
-      detailsButton =
-        createButton(
-          parent,
-          StatusDialogConstants.DETAILS_ID,
-          IDialogConstants.SHOW_DETAILS_LABEL,
-          false);
-    }
-    
-    parent.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ));
-  }
-
-  /*
-   * This is one of the few methods that needs to be overwritten by the
-   * subclasses. The image names can be found in the Dialog class
-   */
-  protected Image getDialogImage()
-  {
-    // create image
-    return PlatformUI.getWorkbench().getDisplay().getSystemImage(SWT.ICON_INFORMATION);
-  }
-
-  /*
-   * (non-Javadoc) Method declared on Dialog. Creates and returns the contents
-   * of the upper part of the dialog (above the button bar).
-   */
-  protected Control createDialogArea(Composite parent)
-  {
-    this.parent = parent;
-
-    // create composite
-    Composite composite = (Composite) super.createDialogArea(parent);
-    Composite imageAndLabel = new Composite(composite, SWT.NONE);
-    GridLayout gl = new GridLayout();
-    gl.numColumns = 2;
-    imageAndLabel.setLayout(gl);
-    composite.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ));
-    
-    // create image
-    Image image = getDialogImage();
-    if (image != null)
-    {
-      Label label = new Label(imageAndLabel, 0);
-      image.setBackground(label.getBackground());
-      label.setImage(image);
-      label.setLayoutData(
-        new GridData(
-          GridData.HORIZONTAL_ALIGN_CENTER
-            | GridData.VERTICAL_ALIGN_BEGINNING));
-    }
-
-    // create message
-    if (message != null)
-    {
-      Text text = new Text(imageAndLabel, SWT.READ_ONLY|SWT.WRAP);
-      text.setText(message);
-      GridData data =
-        new GridData(
-          GridData.GRAB_HORIZONTAL
-            | GridData.GRAB_VERTICAL
-            | GridData.HORIZONTAL_ALIGN_FILL
-            | GridData.VERTICAL_ALIGN_CENTER);
-      data.widthHint =
-        convertHorizontalDLUsToPixels(
-          IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
-     
-      text.setLayoutData(data);
-      text.setFont(parent.getFont());
-    }
-
-    return composite;
-  }
-
-  protected List createDropDownList(Composite parent)
-  {
-    // create the list
-    list = new List(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-
-    // fill the list
-    populateList(list);
-
-    GridData data =
-      new GridData(
-        GridData.HORIZONTAL_ALIGN_FILL
-          | GridData.GRAB_HORIZONTAL
-          | GridData.VERTICAL_ALIGN_FILL
-          | GridData.GRAB_VERTICAL);
-    data.heightHint = list.getItemHeight() * LIST_ITEM_COUNT;
-    list.setLayoutData(data);
-    listCreated = true;
-    return list;
-  }
-  protected Text createDropDownDetails(Composite parent)
-  {
-    details = new Text(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.READ_ONLY);
-    //details.setEditable(false);
-    Color color = new Color(parent.getShell().getDisplay(), 255, 255, 255);
-    details.setBackground(color);
-    populateDetails(details, status, 0);
-    GridData data =
-      new GridData(
-        GridData.HORIZONTAL_ALIGN_FILL
-          | GridData.GRAB_HORIZONTAL
-          | GridData.VERTICAL_ALIGN_FILL
-          | GridData.GRAB_VERTICAL);
-    details.setLayoutData(data);
-    details.setSelection(0);
-    detailsCreated = true;
-    return details;
-  }
-  /*
-   * (non-Javadoc) Method declared on Window.
-   */
-  /**
-   * Extends <code>Window.open()</code>. Opens an error dialog to display
-   * the error. If you specified a mask to filter the displaying of these
-   * children, the error dialog will only be displayed if there is at least one
-   * child status matching the mask.
-   */
-  public int open()
-  {
-    if (shouldDisplay(status, displayMask))
-    {
-      return super.open();
-    }
-    return 0;
-  }
-  /**
-   * This essentially does the work of a factory Opens an error dialog to
-   * display the given error. Use this method if the error object being
-   * displayed does not contain child items, or if you wish to display all such
-   * items without filtering.
-   * 
-   * @param parent
-   *            the parent shell of the dialog, or <code>null</code> if none
-   * @param dialogTitle
-   *            the title to use for this dialog, or <code>null</code> to
-   *            indicate that the default title should be used
-   * @param message
-   *            the message to show in this dialog, or <code>null</code> to
-   *            indicate that the error's message should be shown as the
-   *            primary message
-   * @param status
-   *            the error to show to the user
-   * @return the code of the button that was pressed that resulted in this
-   *         dialog closing. This will be <code>Dialog.OK</code> if the OK
-   *         button was pressed, or <code>Dialog.CANCEL</code> if this
-   *         dialog's close window decoration or the ESC key was used.
-   */
-  public static int openMessage(
-    Shell parent,
-    String dialogTitle,
-    String message,
-    IStatus status)
-  {
-
-    switch (status.getSeverity())
-    {
-      case IStatus.INFO :
-        return openInfo(
-          parent,
-          dialogTitle,
-          message,
-          status,
-          IStatus.OK | IStatus.INFO | IStatus.WARNING | IStatus.ERROR);
-      case IStatus.WARNING :
-        return openWarning(
-          parent,
-          dialogTitle,
-          message,
-          status,
-          IStatus.OK | IStatus.INFO | IStatus.WARNING | IStatus.ERROR);
-      default :
-        return openError(
-          parent,
-          dialogTitle,
-          message,
-          status,
-          IStatus.OK | IStatus.INFO | IStatus.WARNING | IStatus.ERROR);
-    }
-
-  }
-
-  public static int openMessage(
-    Shell parent,
-    String dialogTitle,
-    String message,
-    IStatus status,
-    Choice[] options)
-  {
-
-    return openOptions(
-      parent,
-      dialogTitle,
-      message,
-      status,
-      IStatus.OK | IStatus.INFO | IStatus.WARNING | IStatus.ERROR,
-      options);
-  }
-
-  /**
-   * Opens an error dialog to display the given error. Use this method if the
-   * error object being displayed contains child items <it>and</it> you wish
-   * to specify a mask which will be used to filter the displaying of these
-   * children. The error dialog will only be displayed if there is at least one
-   * child status matching the mask.
-   * 
-   * @param parentShell
-   *            the parent shell of the dialog, or <code>null</code> if none
-   * @param dialogTitle
-   *            the title to use for this dialog, or <code>null</code> to
-   *            indicate that the default title should be used
-   * @param message
-   *            the message to show in this dialog, or <code>null</code> to
-   *            indicate that the error's message should be shown as the
-   *            primary message
-   * @param status
-   *            the error to show to the user
-   * @param displayMask
-   *            the mask to use to filter the displaying of child items, as per
-   *            <code>Status.matches</code>
-   * @return the code of the button that was pressed that resulted in this
-   *         dialog closing. This will be <code>Dialog.OK</code> if the OK
-   *         button was pressed, or <code>Dialog.CANCEL</code> if this
-   *         dialog's close window decoration or the ESC key was used.
-   */
-  public static int openError(
-    Shell parentShell,
-    String title,
-    String message,
-    IStatus status,
-    int displayMask)
-  {
-    ErrorDialog dialog =
-      new ErrorDialog(parentShell, title, message, status, displayMask);
-    return dialog.open();
-  }
-
-  public static int openInfo(
-    Shell parentShell,
-    String title,
-    String message,
-    IStatus status,
-    int displayMask)
-  {
-    InfoDialog dialog =
-      new InfoDialog(parentShell, title, message, status, displayMask);
-    return dialog.open();
-  }
-
-  public static int openWarning(
-    Shell parentShell,
-    String title,
-    String message,
-    IStatus status,
-    int displayMask)
-  {
-    WarningDialog dialog =
-      new WarningDialog(parentShell, title, message, status, displayMask);
-    return dialog.open();
-  }
-
-  public static int openOptions(
-    Shell parentShell,
-    String title,
-    String message,
-    IStatus status,
-    int displayMask,
-    Choice[] options)
-  {
-    OptionsDialog dialog =
-      new OptionsDialog(
-        parentShell,
-        title,
-        message,
-        status,
-        displayMask,
-        options);
-    dialog.open();
-    return dialog.getReturnCode();
-  }
-
-  /**
-   * Populates the list using this error dialog's status object. This walks the
-   * child stati of the status object and displays them in a list. The format
-   * for each entry is status_path : status_message If the status's path was
-   * null then it (and the colon) are omitted.
-   */
-  private void populateList(List list)
-  {
-    Iterator enumeration = statusList.iterator();
-    while (enumeration.hasNext())
-    {
-      IStatus childStatus = (IStatus) enumeration.next();
-      populateList(list, childStatus, 0);
-    }
-  }
-  private void populateList(List list, IStatus status, int nesting)
-  {
-    if (!status.matches(displayMask))
-    {
-      return;
-    }
-    StringBuffer sb = new StringBuffer();
-    for (int i = 0; i < nesting; i++)
-    {
-      sb.append("  ");
-    }
-    sb.append(status.getMessage());
-    list.add(sb.toString());
-    IStatus[] children = status.getChildren();
-    for (int i = 0; i < children.length; i++)
-    {
-      populateList(list, children[i], nesting + 1);
-    }
-  }
-  private void populateDetails(Text text, IStatus status, int nesting)
-  {
-    if (!status.matches(displayMask))
-    {
-      return;
-    }
-        
-    String    tabChars    = repeat( ' ', nesting * 2 );
-    String    messageLine = tabChars + status.getMessage() + System.getProperty("line.separator");
-    Throwable except      = status.getException();
-    
-    text.append( messageLine );
-    
-    if( except != null )
-    {
-      String[] trace = getStackTrace( except );
-      
-      for( int index = 0; index < trace.length; index++ )
-      {
-        text.append( tabChars + "    " + trace[index] + System.getProperty("line.separator") );
-      }
-    }
-    
-    IStatus[] children = status.getChildren();
-    for (int i = 0; i < children.length; i++)
-    {
-      populateDetails(text, children[i], nesting + 1);
-    }
-  }
-  /**
-   * Returns whether the given status object should be displayed.
-   * 
-   * @param status
-   *            a status object
-   * @param mask
-   *            a mask as per <code>Status.matches</code>
-   * @return <code>true</code> if the given status should be displayed, and
-   *         <code>false</code> otherwise
-   */
-  protected static boolean shouldDisplay(IStatus status, int mask)
-  {
-    IStatus[] children = status.getChildren();
-    if (children == null || children.length == 0)
-    {
-      return status.matches(mask);
-    }
-    for (int i = 0; i < children.length; i++)
-    {
-      if (children[i].matches(mask))
-        return true;
-    }
-    return false;
-  }
-  /**
-   * Toggles the unfolding of the details area. This is triggered by the user
-   * pressing the details button.
-   */
-  private void toggleDetailsArea()
-  {
-    Point windowSize = getShell().getSize();
-    int   newHeight  = -1;
-    
-    if (detailsCreated)
-    {
-      details.dispose();
-      detailsCreated = false;
-      detailsButton.setText(IDialogConstants.SHOW_DETAILS_LABEL);
-      
-      // Without the following computeSize call the setSize call below throws an array out of bounds exception.
-      // Very weird.
-      getContents().computeSize(SWT.DEFAULT, SWT.DEFAULT);
-      
-      newHeight = savedSize.y;
-    }
-    else
-    {
-      if( savedSize == null ) savedSize = windowSize;
-        
-      details = createDropDownDetails((Composite) getContents());
-      detailsButton.setText(IDialogConstants.HIDE_DETAILS_LABEL);
-      newHeight = getContents().computeSize(SWT.DEFAULT, SWT.DEFAULT).y;
-    }
-
-
-    newHeight = newHeight > 400 ? 400 : newHeight;
-    
-    getShell().setSize( new Point(windowSize.x, newHeight) );
-  }
-  
-  private String[] getStackTrace( Throwable exc )
-  {
-    Vector       lines        = new Vector();
-    StringWriter stringWriter = new StringWriter();
-    PrintWriter  printWriter  = new PrintWriter( stringWriter );
-    
-    exc.printStackTrace( printWriter );
-    
-    try
-    {
-      printWriter.close();
-      stringWriter.close();
-    }
-    catch( Exception nestedExc )
-    {
-      return new String[0];
-    }
-    
-    StringReader stringReader = new StringReader( stringWriter.toString() );
-    BufferedReader reader     = new BufferedReader( stringReader );
-    String         line       = null;
-    
-    try
-    {
-      line = reader.readLine();
-    
-      while( line != null )
-      {
-        lines.add( line.trim() );
-        line = reader.readLine();
-      }
-    }
-    catch( Exception nestedExc )
-    {
-      return new String[0];
-    }
-    
-    return (String[])lines.toArray( new String[0] );
-  }
-  
-  private String repeat( char the_char, int count )
-  {
-    StringBuffer buf = new StringBuffer( count );
-
-    for( int index = 0; index < count; index++ )
-    {
-      buf.append( the_char );
-    }
-
-    return buf.toString();
-  }
-  
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/OptionsDialog.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/OptionsDialog.java
deleted file mode 100644
index 21869b2..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/OptionsDialog.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.dialog.ui;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.wst.common.environment.Choice;
-
-
-/**
- * A dialog to display one or more errors to the user, as contained in an
- * <code>Status</code> object. If an error contains additional detailed
- * information then a Details button is automatically supplied, which shows or
- * hides an error details viewer when pressed by the user.
- *  
- */
-public class OptionsDialog extends MessageDialog
-{
-  private Choice[] choices;
-  private int returnCode_;
-
-  public OptionsDialog(
-    Shell parentShell,
-    String dialogTitle,
-    String message,
-    IStatus status,
-    int displayMask,
-    Choice[] choices)
-  {
-    super(parentShell, dialogTitle, message, status, displayMask);
-    this.choices = choices;
-  }
-
-  /*
-   * (non-Javadoc) This should also be overwritten Method declared on Dialog.
-   */
-  protected void createButtonsForButtonBar(Composite parent)
-  {
-    // create a button for each options
-    for (int i = 0; i < choices.length; i++)
-    {
-      createButton(parent, choices[i].getShortcut(), choices[i].getLabel(), true);
-    }
-    if (status.isMultiStatus() )
-    {
-      detailsButton =
-        createButton(
-          parent,
-          StatusDialogConstants.DETAILS_ID,
-          IDialogConstants.SHOW_DETAILS_LABEL,
-          false);
-    }
-  }
-
-  protected void buttonPressed(int id)
-  {
-    if (id == StatusDialogConstants.DETAILS_ID)
-      // was the Details button pressed?
-      super.buttonPressed(id);
-    else
-    {
-      setReturnCode(id);
-      close();
-    }
-  }
-
-  protected void setReturnCode(int id)
-  {
-    returnCode_ = id;
-  }
-
-  public int getReturnCode()
-  {
-    return returnCode_;
-  }
-  /*
-   * This is one of the few methods that needs to be overwritten by the
-   * subclasses. The image names can be found in the Dialog class
-   */
-  protected Image getDialogImage()
-  {
-    // create image
-    switch (status.getSeverity())
-    {
-      case IStatus.INFO :
-        return PlatformUI.getWorkbench().getDisplay().getSystemImage(SWT.ICON_INFORMATION);
-      case IStatus.WARNING :
-        return PlatformUI.getWorkbench().getDisplay().getSystemImage(SWT.ICON_WARNING);
-      default :
-        return PlatformUI.getWorkbench().getDisplay().getSystemImage(SWT.ICON_ERROR);
-    }
-  }
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/StatusDialogConstants.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/StatusDialogConstants.java
deleted file mode 100644
index e3ca36b..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/StatusDialogConstants.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.dialog.ui;
-
-/**
-* Constants for status dialogs
-*/
-public interface StatusDialogConstants {
-
-  /*
-  * Button ID for the "Yes" button
-  */
-  public static final int YES_ID = 2;
-  /*
-  * Button ID for the "Yes to all" button
-  */
-  public static final int YES_TO_ALL_ID = 4;
-  /*
-  * Button ID for the "Cancel" button
-  */
-  public static final int CANCEL_ID = 1;
-  /*
-  * Button ID for the "OK" button
-  */
-  public static final int OK_ID = 0;
-  /*
-  * Button ID for the "Details" button
-  */
-  public static final int DETAILS_ID = 13;
-
-  /*
-  * Button label for the "Yes" button
-  */
- // public static final String YES_LABEL = EnvironmentPlugin.getInstance().getMessage("%STATUS_DIALOG_YES_LABEL");
-  /*
-  * Button label for the "Yes to all" button
-  */
- // public static final String YES_TO_ALL_LABEL = EnvironmentPlugin.getInstance().getMessage("%STATUS_DIALOG_YES_TO_ALL_LABEL");
-  /*
-  * Button label for the "Cancel" button
-  */
- // public static final String CANCEL_LABEL = EnvironmentPlugin.getInstance().getMessage("%STATUS_DIALOG_CANCEL_LABEL");
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/WarningDialog.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/WarningDialog.java
deleted file mode 100644
index 6c66d82..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/WarningDialog.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.dialog.ui;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.PlatformUI;
-
-
-/**
- * A dialog to display one or more errors to the user, as contained in an
- * <code>Status</code> object. If an error contains additional detailed
- * information then a Details button is automatically supplied, which shows or
- * hides an error details viewer when pressed by the user.
- *  
- */
-public class WarningDialog extends MessageDialog
-{
-  /**
-   * Creates an error dialog. Note that the dialog will have no visual
-   * representation (no widgets) until it is told to open.
-   * <p>
-   * Normally one should use <code>openError</code> to create and open one of
-   * these. This constructor is useful only if the error object being displayed
-   * contains child items <it>and</it> you need to specify a mask which will
-   * be used to filter the displaying of these children.
-   * </p>
-   * 
-   * @param parentShell
-   *            the shell under which to create this dialog
-   * @param dialogTitle
-   *            the title to use for this dialog, or <code>null</code> to
-   *            indicate that the default title should be used
-   * @param message
-   *            the message to show in this dialog, or <code>null</code> to
-   *            indicate that the error's message should be shown as the
-   *            primary message
-   * @param status
-   *            the error to show to the user
-   * @param displayMask
-   *            the mask to use to filter the displaying of child items, as per
-   *            <code>Status.matches</code>
-   */
-  public WarningDialog(
-    Shell parentShell,
-    String dialogTitle,
-    String message,
-    IStatus status,
-    int displayMask)
-  {
-    super(parentShell, dialogTitle, message, status, displayMask);
-  }
-
-  /*
-   * (non-Javadoc) This should also be overwritten Method declared on Dialog.
-   */
-  protected void createButtonsForButtonBar(Composite parent)
-  {
-    // create OK, Cancel and Details buttons
-    createButton(
-      parent,
-      StatusDialogConstants.OK_ID,
-      IDialogConstants.OK_LABEL,
-      true);
-    createButton(
-      parent,
-      StatusDialogConstants.CANCEL_ID,
-      IDialogConstants.CANCEL_LABEL,
-      false);
-    if (status.isMultiStatus())
-    {
-      detailsButton =
-        createButton(
-          parent,
-          StatusDialogConstants.DETAILS_ID,
-          IDialogConstants.SHOW_DETAILS_LABEL,
-          false);
-    }
-  }
-
-  /*
-   * This is one of the few methods that needs to be overwritten by the
-   * subclasses. The image names can be found in the Dialog class
-   */
-  protected Image getDialogImage()
-  {
-    // create image
-    return PlatformUI.getWorkbench().getDisplay().getSystemImage(SWT.ICON_WARNING);
-  }
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/EclipseEnvironment.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/EclipseEnvironment.java
deleted file mode 100644
index 42f20ec..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/EclipseEnvironment.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.eclipse.ui;
-
-import org.eclipse.wst.common.environment.EnvironmentService;
-import org.eclipse.wst.common.environment.IEnvironment;
-import org.eclipse.wst.common.environment.ILog;
-import org.eclipse.wst.common.environment.IStatusHandler;
-import org.eclipse.wst.common.environment.uri.IURIFactory;
-import org.eclipse.wst.common.environment.uri.IURIScheme;
-import org.eclipse.wst.common.environment.uri.SimpleURIFactory;
-
-
-/**
- * This class implements an IEnvironment class for the Eclipse IEnvironment.
- * This IEnvironment currently supports the "platform" protocol and the "file"
- * protocol.
- *
- */
-public class EclipseEnvironment implements IEnvironment
-{
-  private SimpleURIFactory uriFactory_      = null;
-  private IStatusHandler    statusHandler_   = null;
-  private ILog              logger_          = null;
-  
-  public EclipseEnvironment()
-  {
-    this( new EclipseStatusHandler() );  
-  }
-  
-  public EclipseEnvironment( IStatusHandler   statusHandler )
-  {
-    IURIScheme eclipseScheme = EnvironmentService.getEclipseScheme();
-    IURIScheme fileScheme    = EnvironmentService.getFileScheme();
-    
-    uriFactory_      = new SimpleURIFactory();
-    statusHandler_   = statusHandler;
-    
-    uriFactory_.registerScheme( "platform", eclipseScheme );
-    uriFactory_.registerScheme( "file", fileScheme );
-  }
-  
-  /**
-   * @see org.eclipse.wst.common.environment.IEnvironment#getLog()
-   */
-  public ILog getLog()
-  {
-	  if( logger_ == null )
-    {  
-      logger_ = EnvironmentService.getEclipseLog(); 
-    };
-	
-    return logger_;
-  }
-   
-  /**
-   * @see org.eclipse.wst.common.environment.IEnvironment#getStatusHandler()
-   */
-  public IStatusHandler getStatusHandler()
-  {
-    return statusHandler_;
-  }
-
-  /** (non-Javadoc)
-   * @see org.eclipse.wst.common.environment.IEnvironment#getURIFactory()
-   */
-  public IURIFactory getURIFactory()
-  {
-    return uriFactory_;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/EclipseStatusHandler.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/EclipseStatusHandler.java
deleted file mode 100644
index a8dc82e..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/EclipseStatusHandler.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.eclipse.ui;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.wst.common.environment.Choice;
-import org.eclipse.wst.common.environment.StatusException;
-import org.eclipse.wst.common.environment.IStatusHandler;
-import org.eclipse.wst.common.frameworks.internal.dialog.ui.MessageDialog;
-import org.eclipse.wst.common.frameworks.internal.dialog.ui.StatusDialogConstants;
-
-
-/**
- * This is the Eclipse UI version of the IStatusHandler
- */
-public class EclipseStatusHandler implements IStatusHandler
-{
-  private Shell        shell_;
-  
-  public EclipseStatusHandler()
-  {
-    this( new Shell() );
-  }
-
-  public EclipseStatusHandler(Shell shell)
-  {
-    shell_ = shell;
-  }
-  
-  /**
-   * @see org.eclipse.env.common.IStatusHandler#report(org.eclipse.env.common.Status, org.eclipse.env.common.Choice[])
-   */
-  public Choice report(IStatus status, Choice[] choices) 
-  {
-    int result =
-    MessageDialog.openMessage(
-        shell_,
-        Messages.TITLE_WARNING,
-				null,
-				status,
-				choices);
-    for (int i = 0; i < choices.length; i++)
-     {
-      if (choices[i].getShortcut() == result)
-        return choices[i];
-    }
-    
-    return null;
-  }
-
-  /**
-   * @see org.eclipse.env.common.IStatusHandler#report(org.eclipse.env.common.Status)
-   */
-  public void report(IStatus status) throws StatusException
-  {
-    boolean userOk = false;
-    
-    switch (status.getSeverity())
-    {
-      // an error has been reported and we need to stop executing the comming
-      // commands
-      case Status.ERROR :
-      {
-        userOk = reportErrorStatus(status);
-        break;
-      }
-      case Status.WARNING :
-      {
-        userOk = reportWarning(status);
-        break;
-      }     
-      case Status.INFO :
-      {
-        userOk = true;
-        reportInfo(status);
-        break;
-      }
-    }
-    
-    if( !userOk ) throw new StatusException( status );
-  }
-  
-  private boolean reportWarning(IStatus status)
-  {
-    int userResponse =
-      MessageDialog.openMessage(
-        shell_,
-        Messages.TITLE_WARNING,
-        null,
-        status);
-    return (userResponse == StatusDialogConstants.OK_ID);
-  }
-
-  private boolean reportErrorStatus(IStatus status)
-  {
-    MessageDialog.openMessage(
-      shell_,
-      Messages.TITLE_ERROR,
-      null,
-      status);
-    return false;
-  }
-  
-  /**
-   * @see org.eclipse.wst.common.environment.IStatusHandler#reportError(org.eclipse.core.runtime.IStatus)
-   */
-  public void reportError(IStatus status)
-  {
-    reportErrorStatus( status );
-  }
-  
-  /**
-   * @see org.eclipse.wst.common.environment.IStatusHandler#reportInfo(org.eclipse.core.runtime.IStatus)
-   */
-  public void reportInfo(IStatus status)
-  {
-    MessageDialog.openMessage(
-        shell_,
-        Messages.TITLE_INFO,
-        null,
-        status);
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/Messages.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/Messages.java
deleted file mode 100644
index 09b2188..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/Messages.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others. 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.eclipse.ui;
-
-import org.eclipse.osgi.util.NLS;
-
-public class Messages extends NLS
-{
-  private static final String BUNDLE_NAME = "org.eclipse.wst.common.frameworks.internal.eclipse.ui.environment";
-  
-  public static String TITLE_WARNING;
-  public static String TITLE_ERROR;
-  public static String TITLE_INFO;
-  
-  static
-  {
-    NLS.initializeMessages( BUNDLE_NAME, Messages.class );
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/CommonUIPluginConstants.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/CommonUIPluginConstants.java
deleted file mode 100644
index 60b55eb..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/CommonUIPluginConstants.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on Jan 16, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.operation.extensionui;
-
-/**
- * @author blancett
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-public interface CommonUIPluginConstants {
-	public static final String PLUGIN_ID = "org.eclipse.wst.common.frameworks.ui"; //$NON-NLS-1$
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardExtensionFactory.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardExtensionFactory.java
deleted file mode 100644
index b9f0cff..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardExtensionFactory.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.operation.extensionui;
-
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageGroupHandler;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageHandler;
-
-/**
- * This interface is EXPERIMENTAL and is subject to substantial changes.
- */
-public abstract class DMWizardExtensionFactory {
-
-	public DMWizardExtensionFactory() {
-		super();
-	}
-
-	public abstract DataModelWizardPage[] createPageGroup(IDataModel dataModel, String pageGroupID);
-
-	/*
-	 * this is optional
-	 */
-	public IDMPageHandler createPageHandler(IDataModel dataModel, String pageGroupID) 
-	{
-	  return null;
-	}
-		
-	/**
-	 * This page group handler can be optionally overriden.
-	 */
-	public IDMPageGroupHandler createPageGroupHandler( IDataModel dataModel, String pageGroupID )
-	{
-	  return null;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardPageElement.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardPageElement.java
deleted file mode 100644
index ca112b2..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardPageElement.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.operation.extensionui;
-
-import java.util.HashSet;
-import java.util.Set;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.internal.AbstractRegistryDescriptor;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageGroupHandler;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageHandler;
-import org.eclipse.wst.common.frameworks.internal.enablement.IdentifiableComparator;
-
-public class DMWizardPageElement extends AbstractRegistryDescriptor implements Comparable {
-	static final String ELEMENT_PAGE_GROUP = "wizardPageGroup"; //$NON-NLS-1$
-	static final String ATT_PAGE_ID = "pageGroupID"; //$NON-NLS-1$
-	static final String ATT_WIZARD_ID = "wizardID"; //$NON-NLS-1$
-	static final String ATT_REQUIRES_DATA_OPERATION_ID = "requiresDataOperationId"; //$NON-NLS-1$
-	static final String ATT_DATA_MODEL_IDS = "dataModelIds"; //$NON-NLS-1$
-	static final String ATT_ALLOWS_EXTENDED_PAGES_AFTER = "allowsExtendedPagesAfter"; //$NON-NLS-1$
-	static final String ATT_PAGE_INSERTION_ID = "pageGroupInsertionID"; //$NON-NLS-1$
-	static final String ELEMENT_FACTORY = "factory"; //$NON-NLS-1$
-
-	protected DMWizardPageFactoryElement wizardPageFactoryElement;
-	protected String pluginID;
-	protected String wizardID;
-	public String pageGroupID;
-	protected String wizardFactoryElement;
-	protected boolean allowsExtendedPagesAfter;
-	protected String requiresDataOperationId;
-	protected Set dataModelIDs;
-	protected String pageInsertionID;
-	private int loadOrder;
-	private static int loadOrderCounter;
-
-
-	private int type;
-
-	public DMWizardPageElement(IConfigurationElement element1) {
-		super(element1);
-		pluginID = element1.getDeclaringExtension().getNamespace();
-		wizardID = element1.getAttribute(ATT_WIZARD_ID);
-		pageGroupID = element1.getAttribute(ATT_PAGE_ID);
-		requiresDataOperationId = element1.getAttribute(ATT_REQUIRES_DATA_OPERATION_ID);
-		dataModelIDs = getDataModelIds( element1 );
-		readAllowsExtendedPageAfter(element1);
-		pageInsertionID = element1.getAttribute(ATT_PAGE_INSERTION_ID);
-		readFactory(element1);
-		validateSettings();
-		loadOrder = loadOrderCounter++;
-	}
-
-  private Set getDataModelIds(IConfigurationElement element )
-  {
-    HashSet ids    = new HashSet();
-    String  idList = element.getAttribute(ATT_DATA_MODEL_IDS);
-    
-    if( idList != null )
-    {
-      String[] dataModelIDs = idList.split( " *");
-    
-      for( int index = 0; index < dataModelIDs.length; index++ )
-      {
-        ids.add( dataModelIDs[index] );  
-      }
-    }
-    
-    return ids;
-  }
-  
-	private void validateSettings() {
-		if (wizardID == null || wizardPageFactoryElement == null) {
-			Logger.getLogger().logError("Incomplete page extension specification."); //$NON-NLS-1$
-		}
-	}
-
-
-	private void readAllowsExtendedPageAfter(IConfigurationElement element1) {
-		String allowsPageAfterValue = element1.getAttribute(ATT_ALLOWS_EXTENDED_PAGES_AFTER);
-		allowsExtendedPagesAfter = allowsPageAfterValue == null ? false : Boolean.valueOf(allowsPageAfterValue).booleanValue();
-	}
-
-	private void readFactory(IConfigurationElement element1) {
-		IConfigurationElement[] factories = element1.getChildren(ELEMENT_FACTORY);
-		if (factories != null && factories.length > 0) {
-			wizardPageFactoryElement = new DMWizardPageFactoryElement(factories[0], pageGroupID);
-		}
-	}
-
-	public IDMPageHandler createPageHandler(IDataModel dataModel) {
-		if (wizardPageFactoryElement != null)
-			return wizardPageFactoryElement.createPageHandler(dataModel);
-		return null;
-	}
-
-	public DataModelWizardPage[] createPageGroup(IDataModel dataModel) {
-		if (wizardPageFactoryElement != null)
-			return wizardPageFactoryElement.createPageGroup(dataModel);
-		return null;
-	}
-
-	public IDMPageGroupHandler createPageGroupHandler(IDataModel dataModel) {
-		return wizardPageFactoryElement == null ? null : wizardPageFactoryElement.createPageGroupHandler(dataModel);
-	}
-
-	public int compareTo(Object o) {
-		return IdentifiableComparator.getInstance().compare(this, o);
-		/*
-		 * if (o == null) return GREATER_THAN; WizardPageElement element = (WizardPageElement) o; if
-		 * (getID() == null && element.getID() == null) return compareLoadOrder(element); if
-		 * (getID() == null) return GREATER_THAN; else if (element.getID() == null) return
-		 * LESS_THAN;
-		 * 
-		 * int priority = getPriority(); int elementPriority =element.getPriority();
-		 * 
-		 * if (priority == elementPriority) return compareLoadOrder(element); if (priority <
-		 * elementPriority) return GREATER_THAN; if (priority > elementPriority) return LESS_THAN;
-		 * return EQUAL;
-		 */
-	}
-
-	/**
-	 * @return
-	 */
-	public boolean allowsExtendedPagesAfter() {
-		return allowsExtendedPagesAfter;
-	}
-
-	/**
-	 * @return
-	 */
-	public String getPluginID() {
-		return pluginID;
-	}
-
-	/**
-	 * @return
-	 */
-	public String getPageID() {
-		return pageGroupID;
-	}
-
-	/**
-	 * @return
-	 */
-	public String getPageInsertionID() {
-		return pageInsertionID;
-	}
-
-	/**
-	 * @return
-	 */
-	public int getType() {
-		return type;
-	}
-
-	/**
-	 * @return
-	 */
-	public int getLoadOrder() {
-		return loadOrder;
-	}
-
-
-	/**
-	 * @return Returns the allowsExtendedPagesAfter.
-	 */
-	public boolean isAllowsExtendedPagesAfter() {
-		return allowsExtendedPagesAfter;
-	}
-
-	/**
-	 * @param allowsExtendedPagesAfter
-	 *            The allowsExtendedPagesAfter to set.
-	 */
-	public void setAllowsExtendedPagesAfter(boolean allowsExtendedPagesAfter) {
-		this.allowsExtendedPagesAfter = allowsExtendedPagesAfter;
-	}
-
-	public String getRequiresDataOperationId() {
-		return requiresDataOperationId;
-	}
-
-
-	public void setRequiresDataOperationId(String dataOperationId) {
-		requiresDataOperationId = dataOperationId;
-	}
-
-	public Set getDataModelIDs() {
-		return dataModelIDs;
-	}
-
-	public void setDataModelID(Set newDataModelIDs) {
-		dataModelIDs = newDataModelIDs;
-	}
-
-	/**
-	 * @return Returns the wizardFactoryElement.
-	 */
-	public String getWizardFactoryElement() {
-		return wizardFactoryElement;
-	}
-
-	/**
-	 * @param wizardFactoryElement
-	 *            The wizardFactoryElement to set.
-	 */
-	public void setWizardFactoryElement(String wizardFactoryElement) {
-		this.wizardFactoryElement = wizardFactoryElement;
-	}
-
-	/**
-	 * @return Returns the wizardID.
-	 */
-	public String getWizardID() {
-		return wizardID;
-	}
-
-	/**
-	 * @param wizardID
-	 *            The wizardID to set.
-	 */
-	public void setWizardID(String wizardID) {
-		this.wizardID = wizardID;
-	}
-
-	/**
-	 * @return Returns the wizardPageFactoryElement.
-	 */
-	public DMWizardPageFactoryElement getWizardPageFactoryElement() {
-		return wizardPageFactoryElement;
-	}
-
-	/**
-	 * @param wizardPageFactoryElement
-	 *            The wizardPageFactoryElement to set.
-	 */
-	public void setWizardPageFactoryElement(DMWizardPageFactoryElement wizardPageFactoryElement) {
-		this.wizardPageFactoryElement = wizardPageFactoryElement;
-	}
-
-
-	/**
-	 * @param pageID
-	 *            The pageID to set.
-	 */
-	public void setPageID(String pageID) {
-		this.pageGroupID = pageID;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.AbstractRegistryDescriptor#getID()
-	 */
-	public String getID() {
-		return getPageID();
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardPageExtensionManager.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardPageExtensionManager.java
deleted file mode 100644
index e8908af..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardPageExtensionManager.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.operation.extensionui;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jem.util.RegistryReader;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.internal.enablement.EnablementManager;
-import org.eclipse.wst.common.frameworks.internal.ui.WTPCommonUIResourceHandler;
-
-public class DMWizardPageExtensionManager {
-
-	public static final String ORG_ECLIPSE_UI = "org.eclipse.ui"; //$NON-NLS-1$
-
-	protected static DMWizardPageExtensionManager instance = null;
-
-	HashMap wizardPluginIDMap = null;
-
-	TreeMap wizardPageElements = null;
-
-	// private TreeSet wizardExtPageElements = null;
-	List nonSyncedPageElementList = null;
-
-	private WizardPageExtensionReader reader = null;
-
-	private DMWizardPageExtensionManager() {
-		setupWizardPluginIDMap();
-		readFromRegistry();
-		postReadFromRegistry();
-	}
-
-	private void setupWizardPluginIDMap() {
-		wizardPluginIDMap = new HashMap();
-		// get editor plugin and save it to a hash map
-		// Note: editors extension id is different from editor id
-
-		IExtensionPoint[] point = new IExtensionPoint[]{Platform.getExtensionRegistry().getExtensionPoint(ORG_ECLIPSE_UI, "exportWizards"), //$NON-NLS-1$
-					Platform.getExtensionRegistry().getExtensionPoint(ORG_ECLIPSE_UI, "importWizards"), //$NON-NLS-1$
-					Platform.getExtensionRegistry().getExtensionPoint(ORG_ECLIPSE_UI, "newWizards"), //$NON-NLS-1$
-					Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.wst.common.frameworks.ui", "extendableWizard")}; //$NON-NLS-1$ //$NON-NLS-2$
-
-		for (int x = 0; x < point.length; x++) {
-			IConfigurationElement[] elements = point[x].getConfigurationElements();
-			for (int i = 0; i < elements.length; i++) {
-				String wizardID = elements[i].getAttribute("id"); //$NON-NLS-1$
-				String pluginID = elements[i].getDeclaringExtension().getNamespace();
-				wizardPluginIDMap.put(wizardID, pluginID);
-			}
-		}
-	}
-
-	private void readFromRegistry() {
-		wizardPageElements = new TreeMap();
-		// wizardExtPageElements = new TreeSet();
-		nonSyncedPageElementList = new ArrayList();
-		// Read all page extensions into editorPageElements
-		reader = new WizardPageExtensionReader();
-		reader.readRegistry();
-
-	}
-
-	protected class WizardPageExtensionReader extends RegistryReader {
-
-		public WizardPageExtensionReader() {
-			super(CommonUIPluginConstants.PLUGIN_ID, DMWizardPageElement.ELEMENT_PAGE_GROUP);
-		}
-
-		public boolean readElement(IConfigurationElement element) {
-			if (!DMWizardPageElement.ELEMENT_PAGE_GROUP.equals(element.getName()))
-				return false;
-			DMWizardPageElement newElement = new DMWizardPageElement(element);
-
-			// put the element into a hashmap, wizardID as key,
-			// list of page elements as object
-			String wizardID = newElement.getWizardID();
-			if (!wizardPageElements.containsKey(wizardID)) {
-				wizardPageElements.put(wizardID, createPageMapEntry(newElement));
-			} else {
-				TreeMap pageMap = (TreeMap) wizardPageElements.get(wizardID);
-				insertPageElement(pageMap, newElement);
-			}
-
-			return true;
-		}
-
-		public void insertPageElement(TreeMap pageMap, DMWizardPageElement newElement) {
-			if (newElement.pageInsertionID == null) {
-				pageMap.put(newElement, new TreeSet());
-			} else {
-				String elementName = newElement.pageInsertionID;
-				DMWizardPageElement parentElement = getPageElement(elementName, pageMap);
-				insertExtPageElement(pageMap, parentElement, newElement);
-			}
-
-			newElement.getPageInsertionID();
-
-		}
-
-		private void insertExtPageElement(TreeMap pageMap, DMWizardPageElement parentElement, DMWizardPageElement newElement) {
-			if (parentElement == null) {
-				nonSyncedPageElementList.add(newElement);
-				return;
-			}
-			if (!parentElement.allowsExtendedPagesAfter()) {
-				Logger.getLogger().logError(WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.WizardPageExtensionManager_UI_0, new Object[]{parentElement.getPageID()})); //$NON-NLS-1$
-				Logger.getLogger().logError(WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.WizardPageExtensionManager_UI_1, new Object[]{newElement.getPageID()})); //$NON-NLS-1$
-				return;
-			}
-			TreeSet set = (TreeSet) pageMap.get(parentElement);
-			set.add(newElement);
-
-			if (newElement.allowsExtendedPagesAfter)
-				pageMap.put(newElement, new TreeSet());
-
-			if (nonSyncedPageElementList.contains(newElement))
-				nonSyncedPageElementList.remove(newElement);
-		}
-
-		private DMWizardPageElement getPageElement(String elementName, TreeMap map) {
-			Set keySet = map.keySet();
-			for (Iterator iter = keySet.iterator(); iter.hasNext();) {
-				DMWizardPageElement element = (DMWizardPageElement) iter.next();
-				if (element.getPageID().equals(elementName))
-					return element;
-			}
-			return null;
-
-		}
-
-		private TreeMap createPageMapEntry(DMWizardPageElement newElement) {
-			TreeMap pageMap = new TreeMap();
-			TreeSet pageExtensionSet = new TreeSet();
-			pageMap.put(newElement, pageExtensionSet);
-			return pageMap;
-
-		}
-
-	}
-
-	public boolean hasExtensionElements(String wizardID) {
-		TreeMap treeMap = (TreeMap) wizardPageElements.get(wizardID);
-		return treeMap.isEmpty();
-	}
-
-	public DMWizardPageElement[] getPageElements(String wizardID) {
-		TreeMap elementMap = (TreeMap) wizardPageElements.get(wizardID);
-		if (elementMap == null || elementMap.isEmpty()) {
-			return new DMWizardPageElement[0];
-		}
-		ArrayList alreadyVistedList = new ArrayList(elementMap.size());
-		Set allPageElementsList = elementMap.keySet();
-		ArrayList orderedPageList = new ArrayList(elementMap.size());
-
-		for (Iterator iter = allPageElementsList.iterator(); iter.hasNext();) {
-			DMWizardPageElement element = (DMWizardPageElement) iter.next();
-			if (alreadyVistedList.contains(element))
-				continue;
-			if (EnablementManager.INSTANCE.getIdentifier(element.getID(), null).isEnabled()) {
-				orderedPageList.add(element);
-				TreeSet treeSet = (TreeSet) elementMap.get(element);
-				if (treeSet != null && !treeSet.isEmpty())
-					flatenTreeSet(treeSet, allPageElementsList, alreadyVistedList, orderedPageList, elementMap);
-			}
-		}
-		return getPageArray(orderedPageList);
-
-	}
-
-	private DMWizardPageElement[] getPageArray(ArrayList orderedPageList) {
-		DMWizardPageElement[] pageElements = new DMWizardPageElement[orderedPageList.size()];
-		for (int i = 0; i < orderedPageList.size(); i++) {
-			pageElements[i] = (DMWizardPageElement) orderedPageList.get(i);
-		}
-		return pageElements;
-	}
-
-	private void flatenTreeSet(TreeSet treeSet, Set allPageElementsList, ArrayList alreadyVistedList, ArrayList orderedPageList, TreeMap elementMap) {
-		for (Iterator iter = treeSet.iterator(); iter.hasNext();) {
-			DMWizardPageElement element = (DMWizardPageElement) iter.next();
-			if (alreadyVistedList.contains(element)) {
-				Logger.getLogger().logError(WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.WizardPageExtensionManager_UI_2, new Object[]{element.getPageID(), DMWizardPageElement.ATT_PAGE_INSERTION_ID})); //$NON-NLS-1$
-				return;
-			}
-			if (allPageElementsList.contains(element)) {
-				TreeSet set = (TreeSet) elementMap.get(element);
-				orderedPageList.add(element);
-				alreadyVistedList.add(element);
-				flatenTreeSet(set, allPageElementsList, alreadyVistedList, orderedPageList, elementMap);
-			} else {
-				orderedPageList.add(element);
-				alreadyVistedList.add(element);
-			}
-
-		}
-
-	}
-
-	// if child elements are read in before parent element. Do post read.
-	protected ArrayList listRemoveObjects;
-
-	private void postReadFromRegistry() {
-		listRemoveObjects = new ArrayList(nonSyncedPageElementList.size());
-		for (int i = 0; i < nonSyncedPageElementList.size(); i++) {
-			DMWizardPageElement element = (DMWizardPageElement) nonSyncedPageElementList.get(i);
-			TreeMap pageMap = (TreeMap) wizardPageElements.get(element.wizardID);
-			if (element.pageInsertionID == null) {
-				addToFirstAvialiable(pageMap, element);
-			} else if (reader != null && pageMap != null)
-				reader.insertPageElement(pageMap, element);
-		}
-		nonSyncedPageElementList.removeAll(listRemoveObjects);
-		if (!nonSyncedPageElementList.isEmpty())
-			logMissingClassError();
-		nonSyncedPageElementList.clear();
-
-	}
-
-	/**
-	 * @param pageMap
-	 * @param element
-	 */
-	private void addToFirstAvialiable(TreeMap pageMap, DMWizardPageElement newElement) {
-		boolean insertNotFound = true;
-		for (Iterator iter = pageMap.keySet().iterator(); iter.hasNext();) {
-			DMWizardPageElement element = (DMWizardPageElement) iter.next();
-			if (element.allowsExtendedPagesAfter) {
-				TreeSet set = (TreeSet) pageMap.get(element);
-				set.add(newElement);
-				listRemoveObjects.add(newElement);
-				return;
-			}
-		}
-		if (insertNotFound) {
-			Logger logger = Logger.getLogger();
-			logger.logError(WTPCommonUIResourceHandler.WizardPageExtensionManager_UI_3); //$NON-NLS-1$
-		}
-
-	}
-
-	private void logMissingClassError() {
-		Logger logger = Logger.getLogger();
-		for (int i = 0; i < nonSyncedPageElementList.size(); i++) {
-			DMWizardPageElement element = (DMWizardPageElement) nonSyncedPageElementList.get(i);
-			logger.logError(WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.WizardPageExtensionManager_UI_4, new Object[]{element.pageInsertionID, element.getPageID(), element.pluginID})); //$NON-NLS-1$
-		}
-		nonSyncedPageElementList.clear();
-
-	}
-
-	/**
-	 * Gets the instance.
-	 * 
-	 * @return Returns a EjbPageExtensionRegistry
-	 */
-	public static DMWizardPageExtensionManager getInstance() {
-		if (instance == null) {
-			instance = new DMWizardPageExtensionManager();
-		}
-		return instance;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardPageFactoryElement.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardPageFactoryElement.java
deleted file mode 100644
index 17a766c..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardPageFactoryElement.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on Oct 20, 2003
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.operation.extensionui;
-
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.internal.ConfigurationElementWrapper;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageGroupHandler;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageHandler;
-
-/**
- * @author schacher
- * 
- * To change the template for this generated type comment go to Window>Preferences>Java>Code
- * Generation>Code and Comments
- */
-public class DMWizardPageFactoryElement extends ConfigurationElementWrapper {
-
-	static final String ATT_CLASS_NAME = "className"; //$NON-NLS-1$
-
-	protected String className;
-	protected DMWizardExtensionFactory wizardPageFactory;
-	protected boolean isPageFactoryInitialized;
-	protected String pageGroupID;
-
-	/**
-	 * @param element
-	 */
-	public DMWizardPageFactoryElement(IConfigurationElement element, String pageGroupID) {
-		super(element);
-		className = element.getAttribute(ATT_CLASS_NAME);
-		this.pageGroupID = pageGroupID;
-	}
-
-	public IDMPageHandler createPageHandler(IDataModel dataModel) {
-		if (!isPageFactoryInitialized)
-			initPageFactory();
-		if (wizardPageFactory == null)
-			return null;
-
-		IDMPageHandler handler = wizardPageFactory.createPageHandler(dataModel, pageGroupID);
-		return handler;
-	}
-
-	public DataModelWizardPage[] createPageGroup(IDataModel dataModel) {
-		if (!isPageFactoryInitialized)
-			initPageFactory();
-
-		if (wizardPageFactory == null)
-			return null;
-
-		DataModelWizardPage[] pages = wizardPageFactory.createPageGroup(dataModel, pageGroupID);
-		
-		return pages;
-	}
-
-	public IDMPageGroupHandler createPageGroupHandler( IDataModel dataModel )
-	{
-	  if (!isPageFactoryInitialized) initPageFactory();
-		
-	  if( wizardPageFactory == null ) return null;
-	  
-	  return wizardPageFactory.createPageGroupHandler( dataModel, pageGroupID );
-	}
-		
-	private void initPageFactory() {
-		try {
-			wizardPageFactory = (DMWizardExtensionFactory) element.createExecutableExtension(ATT_CLASS_NAME);
-		} catch (CoreException e) {
-			Logger.getLogger().logError("Error getting page factory: " + className); //$NON-NLS-1$ 
-			Logger.getLogger().logError(e);
-		} finally {
-			isPageFactoryInitialized = true;
-		}
-	}
-
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DataModelWizardExtensionReader.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DataModelWizardExtensionReader.java
deleted file mode 100644
index 5ce7b73..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DataModelWizardExtensionReader.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.operation.extensionui;
-
-import java.util.HashMap;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.RegistryReader;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizard;
-import org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin;
-
-public class DataModelWizardExtensionReader extends RegistryReader {
-
-	private static final String EXTENSION = "DataModelWizardExtension"; //$NON-NLS-1$
-	private static final String ELEMENT = "DataModelWizard"; //$NON-NLS-1$
-	private static final String ATTRIBUTE_ID = "id"; //$NON-NLS-1$
-	private static final String ATTRIBUTE_CLASS = "class"; //$NON-NLS-1$
-
-	private HashMap extensions;
-
-	public DataModelWizardExtensionReader() {
-		super(WTPUIPlugin.PLUGIN_ID, EXTENSION);
-	}
-
-	public boolean readElement(IConfigurationElement element) {
-		if (!element.getName().equals(ELEMENT))
-			return false;
-		String id = element.getAttribute(ATTRIBUTE_ID);
-		if (null == id || id.trim().length() == 0) {
-			Logger.getLogger().logError(new RuntimeException("Extension:" + EXTENSION + " Element:" + ELEMENT + " is missing " + ATTRIBUTE_ID)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-		String className = element.getAttribute(ATTRIBUTE_CLASS);
-		if (null == className || className.trim().length() == 0) {
-			Logger.getLogger().logError(new RuntimeException("Extension:" + EXTENSION + " Element:" + ELEMENT + " is missing " + ATTRIBUTE_CLASS)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-		addExtension(id, element);
-		return true;
-	}
-
-	private void addExtension(String id, IConfigurationElement element) {
-		if (extensions.containsKey(id)) {
-			Logger.getLogger().logError(new RuntimeException("Duplicate " + ELEMENT + " " + ATTRIBUTE_ID + " " + id)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-		extensions.put(id, element);
-	}
-
-	protected IConfigurationElement getExtension(String id) {
-		if (extensions == null) {
-			extensions = new HashMap();
-			readRegistry();
-		}
-		IConfigurationElement element = (IConfigurationElement) extensions.get(id);
-		if (null == element) {
-			throw new RuntimeException("Extension:" + EXTENSION + " Element:" + ELEMENT + " not found for " + ATTRIBUTE_ID + ": " + id); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-		}
-		return element;
-	}
-
-	public DataModelWizard getWizard(IDataModel dataModel) {
-		DataModelWizard wizard = null;
-		IConfigurationElement element = getExtension(dataModel.getID());
-
-		try {
-			wizard = (DataModelWizard) element.createExecutableExtension(ATTRIBUTE_CLASS);
-			wizard.setDataModel(dataModel);
-		} catch (CoreException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-
-		return wizard;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/ExtensibleViewRegistry.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/ExtensibleViewRegistry.java
deleted file mode 100644
index c6aee2c..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/ExtensibleViewRegistry.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.operation.extensionui;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.RegistryReader;
-import org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin;
-
-
-/**
- * @author mdelder
- */
-public class ExtensibleViewRegistry extends RegistryReader {
-
-	private static ExtensibleViewRegistry INSTANCE = null;
-	private Map extendedViewerMap = null;
-	private Map descriptorMap = null;
-
-	protected interface Elements {
-		public static final String EXTENDED_VIEWER = "extendedViewer"; //$NON-NLS-1$
-		public static final String VIEWER_ID = "viewerID"; //$NON-NLS-1$
-		public static final String PARENT_VIEWER_ID = "parentViewerID"; //$NON-NLS-1$
-		public static final String FACTORY_CLASS = "factoryClass"; //$NON-NLS-1$
-		public static final String ICON = "icon"; //$NON-NLS-1$
-		public static final String LABEL = "label"; //$NON-NLS-1$
-		public static final String FUNCTION_GROUP_ID = "functionGroupID"; //$NON-NLS-1$
-	}
-
-	/**
-	 *  
-	 */
-	private ExtensibleViewRegistry() {
-		super(WTPUIPlugin.PLUGIN_ID, WTPUIPlugin.EXTENDED_VIEWER_REGISTRY_EXTENSION_POINT);
-	}
-
-	public static ExtensibleViewRegistry getInstance() {
-		if (INSTANCE == null) {
-			INSTANCE = new ExtensibleViewRegistry();
-			INSTANCE.readRegistry();
-		}
-		return INSTANCE;
-	}
-
-	public Descriptor getDescriptor(String viewerID) {
-		return (Descriptor) getDescriptorMap().get(viewerID);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.internal.registry.RegistryReader#readElement(org.eclipse.core.runtime.IConfigurationElement)
-	 */
-	public boolean readElement(IConfigurationElement element) {
-		if (element.getName().equals(Elements.EXTENDED_VIEWER)) {
-			Descriptor descriptor = new Descriptor(element);
-			getDescriptorMap().put(descriptor.getViewerID(), descriptor);
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * @return Returns the extendedViewerMap.
-	 */
-	protected Map getExtendedViewerMap() {
-		if (extendedViewerMap == null)
-			extendedViewerMap = new HashMap();
-		return extendedViewerMap;
-	}
-
-	/**
-	 * @return Returns the descriptorMap.
-	 */
-	protected Map getDescriptorMap() {
-		if (descriptorMap == null)
-			descriptorMap = new HashMap();
-		return descriptorMap;
-	}
-
-	public class Descriptor {
-
-		private String viewerID = null;
-		private String parentViewerID = null;
-		private String factoryClass = null;
-		private String icon = null;
-		private String label = null;
-		private String functionGroupID = null;
-
-		private String toStringCache = null;
-		private IConfigurationElement element = null;
-
-		/**
-		 *  
-		 */
-		public Descriptor(IConfigurationElement element) {
-			this.element = element;
-
-			this.viewerID = this.element.getAttribute(ExtensibleViewRegistry.Elements.VIEWER_ID);
-			this.parentViewerID = this.element.getAttribute(ExtensibleViewRegistry.Elements.PARENT_VIEWER_ID);
-			this.factoryClass = this.element.getAttribute(ExtensibleViewRegistry.Elements.FACTORY_CLASS);
-			this.icon = this.element.getAttribute(ExtensibleViewRegistry.Elements.ICON);
-			this.label = this.element.getAttribute(ExtensibleViewRegistry.Elements.LABEL);
-			this.functionGroupID = this.element.getAttribute(ExtensibleViewRegistry.Elements.FUNCTION_GROUP_ID);
-		}
-
-		public IExtensibleViewFactory createFactoryInstance() {
-			IExtensibleViewFactory factoryInstance = null;
-			try {
-				factoryInstance = (IExtensibleViewFactory) this.element.createExecutableExtension(getFactoryClass());
-			} catch (CoreException e) {
-				WTPUIPlugin.getLogger().logError(e);
-			}
-			return factoryInstance;
-		}
-
-		/**
-		 * @return Returns the factoryClass.
-		 */
-		public String getFactoryClass() {
-			return factoryClass;
-		}
-
-		/**
-		 * @return Returns the functionGroupID.
-		 */
-		public String getFunctionGroupID() {
-			return functionGroupID;
-		}
-
-		/**
-		 * @return Returns the icon.
-		 */
-		public String getIcon() {
-			return icon;
-		}
-
-		/**
-		 * @return Returns the label.
-		 */
-		public String getLabel() {
-			return label;
-		}
-
-		/**
-		 * @return Returns the parentViewerID.
-		 */
-		public String getParentViewerID() {
-			return parentViewerID;
-		}
-
-		/**
-		 * @return Returns the viewerID.
-		 */
-		public String getViewerID() {
-			return viewerID;
-		}
-
-		public String toString() {
-			if (toStringCache == null)
-				toStringCache = "ExtensibleViewRegistry.Info [viewerID=\"" + getViewerID() + "\",parentViewerID=\"" + getParentViewerID() + "\",factoryClass=" + getFactoryClass() + "\",functionGroupID=\"" + getFunctionGroupID() + "\"]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-			return toStringCache;
-		}
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/IExtensibleViewFactory.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/IExtensibleViewFactory.java
deleted file mode 100644
index 261938b..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/IExtensibleViewFactory.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.operation.extensionui;
-
-/**
- * @author mdelder
- */
-public interface IExtensibleViewFactory {
-
-
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/IOperationNode.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/IOperationNode.java
deleted file mode 100644
index 747b5ca..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/IOperationNode.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on May 5, 2004
- * 
- * TODO To change the template for this generated file go to Window -
- * Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.operation.extensionui;
-
-/**
- * @author mdelder
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java -
- * Code Generation - Code and Comments
- */
-public interface IOperationNode {
-
-	public IOperationNode[] getChildren();
-
-	public boolean isChecked();
-
-	/**
-	 * Same as calling setChecked(checked, true)
-	 * 
-	 * @param checked
-	 */
-	public void setChecked(boolean checked);
-
-	public String getName();
-
-	public String getDescription();
-
-	public IOperationNode getParent();
-
-	/**
-	 * @return
-	 */
-	public boolean isAlwaysExecute();
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/AbstractWTPUIPlugin.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/AbstractWTPUIPlugin.java
deleted file mode 100644
index 583f298..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/AbstractWTPUIPlugin.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on Dec 10, 2003
- * 
- * To change the template for this generated file go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.util.ResourceBundle;
-
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.jem.util.logger.proxyrender.DefaultPluginTraceRenderer;
-import org.eclipse.jem.util.logger.proxyrender.IMsgLogger;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-public abstract class AbstractWTPUIPlugin extends AbstractUIPlugin implements IMsgLogger {
-	protected static Logger logger = null;
-	public ResourceBundle resourceBundle;
-	protected static AbstractWTPUIPlugin instance = null; 
-
-	/**
-	 * @param descriptor
-	 */
-	public AbstractWTPUIPlugin() {
-		super();
-		instance = this;
-	}
-
-	public Logger getMsgLogger() {
-		if (logger == null) {
-			logger = Logger.getLogger(getPluginID());
-			setRenderer(logger);
-		}
-		return logger;
-	}
-
-	public abstract String getPluginID();
-
-	/**
-	 * @param aLogger
-	 */
-	protected void setRenderer(Logger aLogger) {
-		new DefaultPluginTraceRenderer(aLogger);
-	}
-	
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.runtime.Plugin#startup()
-	 */
-	public void start(BundleContext context) throws Exception  {
-		super.start(context);
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ClosableWizardDialog.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ClosableWizardDialog.java
deleted file mode 100644
index 7316c8b..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ClosableWizardDialog.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on Mar 24, 2004
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.jface.wizard.IWizard;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * @author DABERG
- * 
- * To change the template for this generated type comment go to Window>Preferences>Java>Code
- * Generation>Code and Comments
- */
-public class ClosableWizardDialog extends WizardDialog {
-	/**
-	 * @param parentShell
-	 * @param newWizard
-	 */
-	public ClosableWizardDialog(Shell parentShell, IWizard newWizard) {
-		super(parentShell, newWizard);
-	}
-
-	public void finishAndClose() {
-		super.finishPressed();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/DMPageGroupElementImpl.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/DMPageGroupElementImpl.java
deleted file mode 100644
index 22caa6d..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/DMPageGroupElementImpl.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageGroup;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageGroupHandler;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageHandler;
-import org.eclipse.wst.common.frameworks.internal.operation.extensionui.DMWizardPageElement;
-
-public class DMPageGroupElementImpl implements IDMPageGroup {
-	private DMWizardPageElement pageElement;
-
-	public DMPageGroupElementImpl(IConfigurationElement element) {
-		pageElement = new DMWizardPageElement(element);
-	}
-
-	public boolean getAllowsExtendedPages() {
-		return pageElement.allowsExtendedPagesAfter();
-	}
-
-	public String getRequiredDataOperationToRun() {
-		return pageElement.getRequiresDataOperationId();
-	}
-
-	public Set getDataModelIDs() {
-		return pageElement.getDataModelIDs();
-	}
-
-	public IDMPageGroupHandler getPageGroupHandler(IDataModel dataModel) {
-		return pageElement.createPageGroupHandler(dataModel);
-	}
-
-	public List getPages(IDataModel dataModel){
-		return Arrays.asList(pageElement.createPageGroup(dataModel));
-	}
-	
-	public IDMPageHandler getPageHandler(IDataModel dataModel) {
-		return pageElement.createPageHandler(dataModel);
-	}
-
-	public String getPageGroupID() {
-		return pageElement.getPageID();
-	}
-
-	public String getPageGroupInsertionID() {
-		return pageElement.getPageInsertionID();
-	}
-
-	public String getWizardID() {
-		return pageElement.getWizardID();
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/DisplayUtility.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/DisplayUtility.java
deleted file mode 100644
index 647f58e..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/DisplayUtility.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on Apr 19, 2004
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.swt.widgets.Display;
-
-/**
- * @author mdelder
- */
-public class DisplayUtility {
-
-	public static void asyncExec(Runnable runnable) {
-
-		Display d = Display.getCurrent();
-		if (d == null)
-			Display.getDefault().asyncExec(runnable);
-		else
-			runnable.run();
-
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ErrorDialog.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ErrorDialog.java
deleted file mode 100644
index 6c24426..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ErrorDialog.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.SWTError;
-import org.eclipse.swt.SWTException;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-/**
- * Added a Details button to the MessageDialog to show the exception stack trace.
- * 
- * Borrowed from an eclipse InternalErrorDialog
- */
-public class ErrorDialog extends MessageDialog {
-	protected static final String[] LABELS_OK = {IDialogConstants.OK_LABEL};
-	protected static final String[] LABELS_OK_CANCEL = {IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL};
-	protected static final String[] LABELS_OK_DETAILS = {IDialogConstants.OK_LABEL, IDialogConstants.SHOW_DETAILS_LABEL};
-	protected static final String[] LABELS_OK_CANCEL_DETAILS = {IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL, IDialogConstants.SHOW_DETAILS_LABEL};
-	private Throwable detail;
-	private int detailButtonID = -1;
-	private Text text;
-	private String message;
-	//Workaround. SWT does not seem to set the default button if
-	//there is not control with focus. Bug: 14668
-	private int defaultButtonIndex = 0;
-	/**
-	 * Size of the text in lines.
-	 */
-	private static final int TEXT_LINE_COUNT = 15;
-
-	public ErrorDialog(Shell parentShell, String dialogTitle, Image dialogTitleImage, String dialogMessage, Throwable detail, int dialogImageType, String[] dialogButtonLabels, int defaultIndex) {
-		super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, dialogButtonLabels, defaultIndex);
-		defaultButtonIndex = defaultIndex;
-		this.detail = detail;
-		message = dialogMessage;
-		setShellStyle(getShellStyle() | SWT.APPLICATION_MODAL | SWT.RESIZE);
-	}
-
-	//Workaround. SWT does not seem to set rigth the default button if
-	//there is not control with focus. Bug: 14668
-	public int open() {
-		create();
-		Button b = getButton(defaultButtonIndex);
-		b.setFocus();
-		b.getShell().setDefaultButton(b);
-		return super.open();
-	}
-
-	/**
-	 * Set the detail button;
-	 */
-	public void setDetailButton(int index) {
-		detailButtonID = index;
-	}
-
-	/*
-	 * (non-Javadoc) Method declared on Dialog.
-	 */
-	protected void buttonPressed(int buttonId) {
-		if (buttonId == detailButtonID) {
-			toggleDetailsArea();
-		} else {
-			setReturnCode(buttonId);
-			close();
-		}
-	}
-
-	/**
-	 * Toggles the unfolding of the details area. This is triggered by the user pressing the details
-	 * button.
-	 */
-	private void toggleDetailsArea() {
-		Point windowSize = getShell().getSize();
-		Point oldSize = getContents().computeSize(SWT.DEFAULT, SWT.DEFAULT);
-		if (text != null) {
-			text.dispose();
-			text = null;
-			getButton(detailButtonID).setText(IDialogConstants.SHOW_DETAILS_LABEL);
-		} else {
-			createDropDownText((Composite) getContents());
-			getButton(detailButtonID).setText(IDialogConstants.HIDE_DETAILS_LABEL);
-		}
-		Point newSize = getContents().computeSize(SWT.DEFAULT, SWT.DEFAULT);
-		getShell().setSize(new Point(windowSize.x, windowSize.y + (newSize.y - oldSize.y)));
-	}
-
-	/**
-	 * Create this dialog's drop-down list component.
-	 * 
-	 * @param parent
-	 *            the parent composite
-	 * @return the drop-down list component
-	 */
-	protected void createDropDownText(Composite parent) {
-		// create the list
-		text = new Text(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-		// print the stacktrace in the text field
-		try {
-			ByteArrayOutputStream baos = new ByteArrayOutputStream();
-			PrintStream ps = new PrintStream(baos);
-			detail.printStackTrace(ps);
-			if ((detail instanceof SWTError) && (((SWTError) detail).throwable != null)) {
-				ps.println("\n*** Stack trace of contained exception ***"); //$NON-NLS-1$
-				((SWTError) detail).throwable.printStackTrace(ps);
-			} else if ((detail instanceof SWTException) && (((SWTException) detail).throwable != null)) {
-				ps.println("\n*** Stack trace of contained exception ***"); //$NON-NLS-1$
-				((SWTException) detail).throwable.printStackTrace(ps);
-			}
-			ps.flush();
-			baos.flush();
-			text.setText(baos.toString());
-		} catch (IOException e) {
-		}
-		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL);
-		data.heightHint = text.getLineHeight() * TEXT_LINE_COUNT;
-		text.setLayoutData(data);
-	}
-
-	public static boolean openError(Shell parent, String title, String message, Throwable detail, int defaultIndex, boolean showCancel) {
-		String[] labels;
-		if (detail == null)
-			labels = showCancel ? LABELS_OK_CANCEL : LABELS_OK;
-		else
-			labels = showCancel ? LABELS_OK_CANCEL_DETAILS : LABELS_OK_DETAILS;
-		ErrorDialog dialog = new ErrorDialog(parent, title, null, // accept
-					// the
-					// default
-					// window
-					// icon
-					message, detail, ERROR, labels, defaultIndex);
-		if (detail != null)
-			dialog.setDetailButton(labels.length - 1);
-		return dialog.open() == 0;
-	}
-
-	protected Control createDialogArea(Composite parent) {
-		// create a composite with standard margins and spacing
-		Composite composite = new Composite(parent, SWT.NONE);
-		GridLayout layout = new GridLayout();
-		layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
-		layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
-		layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
-		layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
-		composite.setLayout(layout);
-		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
-		composite.setFont(parent.getFont());
-		((GridLayout) composite.getLayout()).numColumns = 2;
-		// create image
-		Image image = composite.getDisplay().getSystemImage(SWT.ICON_ERROR);
-		if (image != null) {
-			Label label = new Label(composite, 0);
-			image.setBackground(label.getBackground());
-			label.setImage(image);
-			label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER | GridData.VERTICAL_ALIGN_BEGINNING));
-		}
-		// create message
-		if (message != null) {
-			Label label = new Label(composite, SWT.WRAP);
-			label.setText(message);
-			GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER);
-			data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
-			label.setLayoutData(data);
-			label.setFont(parent.getFont());
-		}
-		return composite;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ExecutionListener.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ExecutionListener.java
deleted file mode 100644
index 2cc778a..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ExecutionListener.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others. 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.core.runtime.IStatus;
-
-public interface ExecutionListener
-{
-  public IStatus execute();
-  
-  public void undoExecute();
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/GenericWizardNode.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/GenericWizardNode.java
deleted file mode 100644
index 60769c2..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/GenericWizardNode.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.jface.wizard.IWizard;
-import org.eclipse.jface.wizard.IWizardNode;
-import org.eclipse.swt.graphics.Point;
-
-/**
- * @version 1.0
- * @author
- */
-public abstract class GenericWizardNode implements IWizardNode {
-
-	protected IWizard wizard;
-
-	/**
-	 * Constructor for GenericWizardNode.
-	 */
-	public GenericWizardNode() {
-		super();
-	}
-
-	/*
-	 * @see IWizardNode#dispose()
-	 */
-	public void dispose() {
-		if (wizard != null)
-			wizard.dispose();
-	}
-
-	/*
-	 * @see IWizardNode#getContents()
-	 */
-	public Point getContents() {
-		return null;
-	}
-
-	public final IWizard getWizard() {
-		if (wizard == null)
-			wizard = createWizard();
-		return wizard;
-	}
-
-	/**
-	 * Subclasses must override to create the wizard
-	 */
-	protected abstract IWizard createWizard();
-
-	/*
-	 * @see IWizardNode#isContentCreated()
-	 */
-	public boolean isContentCreated() {
-		return wizard != null;
-	}
-
-	/**
-	 * @see org.eclipse.jface.wizard.IWizardNode#getExtent()
-	 */
-	public Point getExtent() {
-		return null;
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ListMessageDialog.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ListMessageDialog.java
deleted file mode 100644
index aed38af..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ListMessageDialog.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on Aug 5, 2004
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.List;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * @author dfholt
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java -
- * Code Generation - Code and Comments
- */
-public class ListMessageDialog extends MessageDialog {
-	protected String[] listItems;
-	protected List list;
-
-	/**
-	 * EJBSelectiveImportDialog constructor comment.
-	 * 
-	 * @param parentShell
-	 *            org.eclipse.swt.widgets.Shell
-	 * @param dialogTitle
-	 *            java.lang.String
-	 * @param dialogTitleImage
-	 *            org.eclipse.swt.graphics.Image
-	 * @param dialogMessage
-	 *            java.lang.String
-	 * @param dialogImageType
-	 *            int
-	 * @param dialogButtonLabels
-	 *            java.lang.String[]
-	 * @param defaultIndex
-	 *            int
-	 */
-	public ListMessageDialog(org.eclipse.swt.widgets.Shell parentShell, String dialogTitle, org.eclipse.swt.graphics.Image dialogTitleImage, String dialogMessage, int dialogImageType, java.lang.String[] dialogButtonLabels, int defaultIndex) {
-		super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, dialogButtonLabels, defaultIndex);
-	}
-
-	/**
-	 * ListMessageDialog constructor comment.
-	 * 
-	 * @param parentShell
-	 *            org.eclipse.swt.widgets.Shell
-	 * @param dialogTitle
-	 *            java.lang.String
-	 * @param dialogTitleImage
-	 *            org.eclipse.swt.graphics.Image
-	 * @param dialogMessage
-	 *            java.lang.String
-	 * @param dialogImageType
-	 *            int
-	 * @param dialogButtonLabels
-	 *            java.lang.String[]
-	 * @param defaultIndex
-	 *            int
-	 */
-	public ListMessageDialog(org.eclipse.swt.widgets.Shell parentShell, String dialogTitle, org.eclipse.swt.graphics.Image dialogTitleImage, String dialogMessage, int dialogImageType, java.lang.String[] dialogButtonLabels, int defaultIndex, String[] names) {
-		super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, dialogButtonLabels, defaultIndex);
-		listItems = names;
-	}
-
-	/**
-	 * Creates and returns the contents of an area of the dialog which appears below the message and
-	 * above the button bar.
-	 * <p>
-	 * The default implementation of this framework method returns <code>null</code>. Subclasses
-	 * may override.
-	 * </p>
-	 * 
-	 * @param the
-	 *            parent composite to contain the custom area
-	 * @return the custom area control, or <code>null</code>
-	 */
-	protected Control createCustomArea(Composite parent) {
-
-		Composite composite = new Composite(parent, 0);
-		GridLayout layout = new GridLayout();
-		layout.numColumns = 1;
-		layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
-		layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
-		layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
-		composite.setLayout(layout);
-		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
-
-		if (listItems != null) {
-			list = new List(composite, SWT.BORDER);
-			GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER);
-			list.setLayoutData(data);
-			list.setItems(listItems);
-		}
-
-		return composite;
-
-	}
-
-	/**
-	 * Convenience method to open a simple confirm (OK/Cancel) dialog.
-	 * 
-	 * @param parent
-	 *            the parent shell of the dialog, or <code>null</code> if none
-	 * @param title
-	 *            the dialog's title, or <code>null</code> if none
-	 * @param message
-	 *            the message
-	 * @return <code>true</code> if the user presses the OK button, <code>false</code> otherwise
-	 */
-	public static boolean openConfirm(Shell parent, String title, String message, String[] items) {
-		ListMessageDialog dialog = new ListMessageDialog(parent, title, null, // accept the default
-					// window icon
-					message, QUESTION, new String[]{IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL}, 0, items); // OK
-		// is
-		// the
-		// default
-		return dialog.open() == 0;
-	}
-
-	/**
-	 * Convenience method to open a standard error dialog.
-	 * 
-	 * @param parent
-	 *            the parent shell of the dialog, or <code>null</code> if none
-	 * @param title
-	 *            the dialog's title, or <code>null</code> if none
-	 * @param message
-	 *            the message
-	 */
-	public static void openError(Shell parent, String title, String message, String[] items) {
-		ListMessageDialog dialog = new ListMessageDialog(parent, title, null, // accept the default
-					// window icon
-					message, ERROR, new String[]{IDialogConstants.OK_LABEL}, 0, items); // ok is the
-		// default
-		dialog.open();
-		return;
-	}
-
-	/**
-	 * Convenience method to open a standard information dialog.
-	 * 
-	 * @param parent
-	 *            the parent shell of the dialog, or <code>null</code> if none
-	 * @param title
-	 *            the dialog's title, or <code>null</code> if none
-	 * @param message
-	 *            the message
-	 */
-	public static void openInformation(Shell parent, String title, String message, String[] items) {
-		ListMessageDialog dialog = new ListMessageDialog(parent, title, null, // accept the default
-					// window icon
-					message, INFORMATION, new String[]{IDialogConstants.OK_LABEL}, 0, items);
-		// ok is the default
-		dialog.open();
-		return;
-	}
-
-	/**
-	 * Convenience method to open a simple Yes/No question dialog.
-	 * 
-	 * @param parent
-	 *            the parent shell of the dialog, or <code>null</code> if none
-	 * @param title
-	 *            the dialog's title, or <code>null</code> if none
-	 * @param message
-	 *            the message
-	 * @return <code>true</code> if the user presses the OK button, <code>false</code> otherwise
-	 */
-	public static boolean openQuestion(Shell parent, String title, String message, String[] items) {
-		ListMessageDialog dialog = new ListMessageDialog(parent, title, null, // accept the default
-					// window icon
-					message, QUESTION, new String[]{IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL}, 0, items); // yes
-		// is
-		// the
-		// default
-		return dialog.open() == 0;
-	}
-
-	/**
-	 * Convenience method to open a standard warning dialog.
-	 * 
-	 * @param parent
-	 *            the parent shell of the dialog, or <code>null</code> if none
-	 * @param title
-	 *            the dialog's title, or <code>null</code> if none
-	 * @param message
-	 *            the message
-	 */
-	public static void openWarning(Shell parent, String title, String message, String[] items) {
-		ListMessageDialog dialog = new ListMessageDialog(parent, title, null, // accept the default
-					// window icon
-					message, WARNING, new String[]{IDialogConstants.OK_LABEL}, 0, items); // ok is
-		// the
-		// default
-		dialog.open();
-		return;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ListenerList.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ListenerList.java
deleted file mode 100644
index db72ea5..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ListenerList.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.awt.event.ActionListener;
-
-public class ListenerList {
-	private final static ActionListener[] NULL_ARRAY = new ActionListener[0];
-	protected transient ActionListener[] listenerList = NULL_ARRAY;
-
-	/**
-	 * Add the listener as a listener of the specified type.
-	 * 
-	 * @param t
-	 *            the type of the listener to be added
-	 * @param l
-	 *            the listener to be added
-	 */
-	public synchronized void add(ActionListener l) {
-		if (l == null)
-			return;
-		if (listenerList == NULL_ARRAY) {
-			// if this is the first listener added,
-			// initialize the lists
-			listenerList = new ActionListener[]{l};
-		} else {
-			// Otherwise copy the array and add the new listener
-			int i = listenerList.length;
-			ActionListener[] tmp = new ActionListener[i + 1];
-			System.arraycopy(listenerList, 0, tmp, 0, i);
-
-			tmp[i + 1] = l;
-
-			listenerList = tmp;
-		}
-	}
-
-	/**
-	 * Return the total number of listeners for this listenerlist
-	 */
-	public int getListenerCount() {
-		return listenerList.length;
-	}
-
-	public ActionListener[] getListenerList() {
-		return listenerList;
-	}
-
-	public synchronized void remove(ActionListener l) {
-		if (l == null)
-			return;
-		int index = -1;
-		for (int i = listenerList.length - 1; i >= 0; i -= 1) {
-			if (listenerList[i].equals(l)) {
-				index = i;
-				break;
-			}
-		}
-		if (index != -1) {
-			ActionListener[] tmp = new ActionListener[listenerList.length - 1];
-			// Copy the list up to index
-			System.arraycopy(listenerList, 0, tmp, 0, index);
-			// Copy from two past the index, up to
-			// the end of tmp (which is two elements
-			// shorter than the old list)
-			if (index < tmp.length)
-				System.arraycopy(listenerList, index + 1, tmp, index, tmp.length - index);
-			// set the listener array to the new array or null
-			listenerList = (tmp.length == 0) ? NULL_ARRAY : tmp;
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/NewProjectGroup.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/NewProjectGroup.java
deleted file mode 100644
index cac9244..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/NewProjectGroup.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.io.File;
-
-import org.eclipse.core.runtime.Path;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.DirectoryDialog;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
-import org.eclipse.wst.common.frameworks.datamodel.DataModelEvent;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelListener;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelSynchHelper;
-import org.eclipse.wst.common.frameworks.internal.operations.IProjectCreationPropertiesNew;
-
-public class NewProjectGroup implements IProjectCreationPropertiesNew {
-	private IDataModel model;
-	public Text projectNameField = null;
-	protected Text locationPathField = null;
-	protected Button browseButton = null;
-	// constants
-	private static final int SIZING_TEXT_FIELD_WIDTH = 305;
-	// default values
-	private String defProjectNameLabel = WTPCommonUIResourceHandler.Name_; //$NON-NLS-1$
-	private String defBrowseButtonLabel = WTPCommonUIResourceHandler.Browse_;//$NON-NLS-1$
-	private static final String defDirDialogLabel = "Directory"; //$NON-NLS-1$
-
-	private DataModelSynchHelper synchHelper;
-
-	public NewProjectGroup(Composite parent, IDataModel model) {
-		this.model = model;
-		synchHelper = new DataModelSynchHelper(model);
-		buildComposites(parent);
-	}
-
-	/**
-	 * Create the controls within this composite
-	 */
-	public void buildComposites(Composite parent) {
-		createProjectNameGroup(parent);
-		createProjectLocationGroup(parent);
-		projectNameField.setFocus();
-	}
-
-	private final void createProjectNameGroup(Composite parent) {
-		Font font = parent.getFont();
-		// project specification group
-		Composite projectGroup = new Composite(parent, SWT.NONE);
-		GridLayout layout = new GridLayout();
-		layout.numColumns = 2;
-		projectGroup.setLayout(layout);
-		projectGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
-		// new project label
-		Label projectLabel = new Label(projectGroup, SWT.NONE);
-		projectLabel.setFont(font);
-		projectLabel.setText(defProjectNameLabel);
-
-		// new project name entry field
-		projectNameField = new Text(projectGroup, SWT.BORDER);
-		GridData data = new GridData(GridData.FILL_HORIZONTAL);
-		data.widthHint = SIZING_TEXT_FIELD_WIDTH;
-		projectNameField.setLayoutData(data);
-		projectNameField.setFont(font);
-		synchHelper.synchText(projectNameField, PROJECT_NAME, new Control[]{projectLabel});
-	}
-
-	/**
-	 * Creates the project location specification controls.
-	 * 
-	 * @param parent
-	 *            the parent composite
-	 */
-	private final void createProjectLocationGroup(Composite parent) {
-
-		Font font = parent.getFont();
-		// project specification group
-		Group projectGroup = new Group(parent, SWT.NONE);
-		GridLayout layout = new GridLayout();
-		layout.numColumns = 3;
-		projectGroup.setLayout(layout);
-		projectGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		projectGroup.setFont(font);
-		projectGroup.setText(IDEWorkbenchMessages.WizardNewProjectCreationPage_projectContentsGroupLabel);
-
-		final Button useDefaultsButton = new Button(projectGroup, SWT.CHECK | SWT.RIGHT);
-		useDefaultsButton.setText(IDEWorkbenchMessages.WizardNewProjectCreationPage_useDefaultLabel);
-		useDefaultsButton.setFont(font);
-		synchHelper.synchCheckbox(useDefaultsButton, USE_DEFAULT_LOCATION, null);
-
-		GridData buttonData = new GridData();
-		buttonData.horizontalSpan = 3;
-		useDefaultsButton.setLayoutData(buttonData);
-
-		createUserSpecifiedProjectLocationGroup(projectGroup);
-	}
-
-	private void createUserSpecifiedProjectLocationGroup(Composite projectGroup) {
-		Font font = projectGroup.getFont();
-		// location label
-		final Label locationLabel = new Label(projectGroup, SWT.NONE);
-		locationLabel.setFont(font);
-		locationLabel.setText(IDEWorkbenchMessages.WizardNewProjectCreationPage_locationLabel);
-
-		// project location entry field
-		locationPathField = new Text(projectGroup, SWT.BORDER);
-		GridData data = new GridData(GridData.FILL_HORIZONTAL);
-		data.widthHint = SIZING_TEXT_FIELD_WIDTH;
-		locationPathField.setLayoutData(data);
-		locationPathField.setFont(font);
-
-		// browse button
-		browseButton = new Button(projectGroup, SWT.PUSH);
-		browseButton.setFont(font);
-		browseButton.setText(defBrowseButtonLabel);
-		browseButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent event) {
-				handleLocationBrowseButtonPressed();
-			}
-		});
-
-		final IDataModel localModel = model;
-
-		class LocationListener implements ModifyListener, IDataModelListener {
-			private boolean typing = false;
-
-			public void modifyText(ModifyEvent e) {
-				if (!localModel.getBooleanProperty(USE_DEFAULT_LOCATION)) {
-					try {
-						typing = true;
-						localModel.setProperty(USER_DEFINED_LOCATION, locationPathField.getText());
-					} finally {
-						typing = false;
-					}
-				}
-			}
-
-			public void propertyChanged(DataModelEvent event) {
-				boolean useDefault = localModel.getBooleanProperty(USE_DEFAULT_LOCATION);
-				if (USE_DEFAULT_LOCATION.equals(event.getPropertyName())) {
-					locationLabel.setEnabled(!useDefault);
-					locationPathField.setEnabled(!useDefault);
-					browseButton.setEnabled(!useDefault);
-					if (useDefault) {
-						locationPathField.setText(localModel.getStringProperty(DEFAULT_LOCATION));
-					} else {
-						locationPathField.setText(localModel.getStringProperty(USER_DEFINED_LOCATION));
-					}
-				} else if (!typing) {
-					if ((useDefault && DEFAULT_LOCATION.equals(event.getPropertyName())) || (!useDefault && USER_DEFINED_LOCATION.equals(event.getPropertyName()))) {
-						locationPathField.setText((String) event.getProperty());
-					}
-				}
-			}
-		}
-
-		LocationListener listener = new LocationListener();
-
-		listener.propertyChanged(new DataModelEvent(model, USE_DEFAULT_LOCATION, IDataModel.VALUE_CHG));
-
-		locationPathField.addModifyListener(listener);
-		model.addListener(listener);
-	}
-
-	/**
-	 * Open an appropriate directory browser
-	 */
-	protected void handleLocationBrowseButtonPressed() {
-		DirectoryDialog dialog = new DirectoryDialog(locationPathField.getShell());
-		dialog.setMessage(defDirDialogLabel);
-		String dirName = model.getStringProperty(USER_DEFINED_LOCATION);
-		if (dirName.trim().length() == 0) {
-			dirName = new Path(model.getStringProperty(DEFAULT_LOCATION)).removeLastSegments(1).toOSString();
-		}
-
-		if ((dirName != null) && (dirName.length() != 0)) {
-			File path = new File(dirName);
-			if (path.exists()) {
-				dialog.setFilterPath(dirName);
-			}
-		}
-		String selectedDirectory = dialog.open();
-		if (selectedDirectory != null) {
-			model.setProperty(USER_DEFINED_LOCATION, selectedDirectory);
-		}
-	}
-
-	public void dispose() {
-		model.removeListener(synchHelper);
-		synchHelper.dispose();
-		model = null;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/OverlayIcon.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/OverlayIcon.java
deleted file mode 100644
index 8ff7b0a..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/OverlayIcon.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.Point;
-
-public class OverlayIcon extends org.eclipse.jface.resource.CompositeImageDescriptor {
-	// //$NON-NLS-1$
-	static final int DEFAULT_WIDTH = 16;
-	static final int DEFAULT_HEIGHT = 16;
-	private Point fSize = null;
-	private ImageDescriptor fBase;
-	private ImageDescriptor fOverlays[][];
-
-	public OverlayIcon(ImageDescriptor base, ImageDescriptor[][] overlays) {
-		fBase = base;
-		if (fBase == null)
-			fBase = ImageDescriptor.getMissingImageDescriptor();
-		fOverlays = overlays;
-		fSize = new Point(DEFAULT_WIDTH, DEFAULT_HEIGHT);
-	}
-
-	public OverlayIcon(ImageDescriptor base, ImageDescriptor[][] overlays, Point size) {
-		fBase = base;
-		if (fBase == null)
-			fBase = ImageDescriptor.getMissingImageDescriptor();
-		fOverlays = overlays;
-		fSize = size;
-	}
-
-	protected void drawBottomLeft(ImageDescriptor[] overlays) {
-		if (overlays == null)
-			return;
-		int length = overlays.length;
-		int x = 0;
-		for (int i = 0; i < 3; i++) {
-			if (i < length && overlays[i] != null) {
-				ImageData id = overlays[i].getImageData();
-				drawImage(id, x, getSize().y - id.height);
-				x += id.width;
-			}
-		}
-	}
-
-	protected void drawBottomRight(ImageDescriptor[] overlays) {
-		if (overlays == null)
-			return;
-		int length = overlays.length;
-		int x = getSize().x;
-		for (int i = 2; i >= 0; i--) {
-			if (i < length && overlays[i] != null) {
-				ImageData id = overlays[i].getImageData();
-				x -= id.width;
-				drawImage(id, x, getSize().y - id.height);
-			}
-		}
-	}
-
-	protected void drawCompositeImage(int width, int height) {
-		ImageData bg = fBase.getImageData();
-		drawImage(bg, 0, 0);
-
-		if (fOverlays != null) {
-			if (fOverlays.length > 0)
-				drawTopRight(fOverlays[0]);
-
-			if (fOverlays.length > 1)
-				drawBottomRight(fOverlays[1]);
-
-			if (fOverlays.length > 2)
-				drawBottomLeft(fOverlays[2]);
-
-			if (fOverlays.length > 3)
-				drawTopLeft(fOverlays[3]);
-		}
-	}
-
-	protected void drawTopLeft(ImageDescriptor[] overlays) {
-		if (overlays == null)
-			return;
-		int length = overlays.length;
-		int x = 0;
-		for (int i = 0; i < 3; i++) {
-			if (i < length && overlays[i] != null) {
-				ImageData id = overlays[i].getImageData();
-				drawImage(id, x, 0);
-				x += id.width;
-			}
-		}
-	}
-
-	protected void drawTopRight(ImageDescriptor[] overlays) {
-		if (overlays == null)
-			return;
-		int length = overlays.length;
-		int x = getSize().x;
-		for (int i = 2; i >= 0; i--) {
-			if (i < length && overlays[i] != null) {
-				ImageData id = overlays[i].getImageData();
-				x -= id.width;
-				drawImage(id, x, 0);
-			}
-		}
-	}
-
-	protected Point getSize() {
-		return fSize;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/PageGroupManager.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/PageGroupManager.java
deleted file mode 100644
index b754528..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/PageGroupManager.java
+++ /dev/null
@@ -1,584 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others. 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.Stack;
-import java.util.Vector;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.jface.wizard.IWizardPage;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-import org.eclipse.wst.common.frameworks.internal.DataModelManager;
-import org.eclipse.wst.common.frameworks.internal.OperationListener;
-import org.eclipse.wst.common.frameworks.internal.OperationManager;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageGroup;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageGroupHandler;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageHandler;
-import org.eclipse.wst.common.frameworks.internal.operation.extensionui.CommonUIPluginConstants;
-
-public class PageGroupManager {
-	private IDMPageGroup rootPageGroup;
-	private OperationManager operationManager;
-	private DataModelManager dataModelManager;
-	private HashMap groupTable;
-	private HashSet operationsRun;
-	private Stack pageGroupStack;
-	private IDataModel dataModel;
-	private StackEntry savedTopEntry;
-	private int savedStackSize;
-
-	private IConfigurationElement[] elements;
-
-	private final String ELEMENT_PAGE_GROUP = "wizardPageGroup"; //$NON-NLS-1$
-
-	public PageGroupManager(OperationManager operationManager, DataModelManager dataModelManager, IDMPageGroup rootPageGroup) {
-		this.operationManager = operationManager;
-		this.dataModelManager = dataModelManager;
-		dataModel = this.dataModelManager.getDataModel();
-		groupTable = new HashMap();
-		operationsRun = new HashSet();
-		pageGroupStack = new Stack();
-		this.rootPageGroup = rootPageGroup;
-
-
-		PageGroupEntry rootPageGroupEntry = new PageGroupEntry(rootPageGroup);
-		IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(CommonUIPluginConstants.PLUGIN_ID, ELEMENT_PAGE_GROUP);
-		elements = point.getConfigurationElements();
-		groupTable.put(this.rootPageGroup.getPageGroupID(), rootPageGroupEntry);
-
-		if (this.rootPageGroup.getAllowsExtendedPages()) {
-			// Find all the page groups that follow this root page group.
-			loadExtendedPages(rootPageGroup);
-		}
-
-		this.operationManager.setUndoExecuteListener(new OperationListener() {
-			public boolean notify(IDataModelOperation operation) {
-				operationsRun.remove(operation.getID());
-
-				return true;
-			}
-		});
-
-	}
-
-	public void addGroupAfter(String pageGroupID, IDMPageGroup pageInsertGroup) {
-		PageGroupEntry pageGroupEntry = (PageGroupEntry) groupTable.get(pageGroupID);
-
-		if (pageGroupEntry.pageGroup.getAllowsExtendedPages()) {
-			addPageGroup(pageGroupEntry.pageGroup, pageInsertGroup);
-		}
-	}
-
-	public void moveForwardOnePage() {
-		boolean pageFound = false;
-
-		if (pageGroupStack.empty()) {
-			PageGroupEntry rootEntry = (PageGroupEntry) groupTable.get(rootPageGroup.getPageGroupID());
-			Set dataModelIDs = rootEntry.pageGroup.getDataModelIDs();
-			pageGroupStack.push(new StackEntry(rootEntry, -1));
-
-			if (dataModelIDs != null && dataModelIDs.size() > 0) {
-				Iterator ids = dataModelIDs.iterator();
-
-				while (ids.hasNext()) {
-					String dataModelID = (String) ids.next();
-					dataModelManager.addNestedDataModel(dataModelID);
-				}
-			}
-		}
-
-		saveStackInfo();
-
-		try {
-			pageFound = findNextPage(true);
-		} catch (Throwable exc) {
-			Logger.getLogger().logError(exc);
-			operationManager.undoLastRun();
-			pageFound = false;
-		}
-
-		if (pageFound == false) {
-			// If we moved forward and there wasn't a page then we will restore the stack.
-			// Normally, this wouldn't happen since a call to hasNextPage would have indicated
-			// that there wasn't a page.
-			restoreStackInfo();
-		}
-	}
-
-	public void moveBackOnePage() {
-		if (pageGroupStack.empty())
-			return;
-
-		StackEntry topEntry = (StackEntry) pageGroupStack.peek();
-
-		// Pop the last page.
-		if (!topEntry.pagesReturned.empty())
-			topEntry.pagesReturned.pop();
-
-		// Now find the previous page.
-		boolean foundPreviousPage = findPreviousPageInGroup();
-
-		while (!foundPreviousPage && !pageGroupStack.empty()) {
-			if (topEntry.ranOperations) {
-				operationManager.undoLastRun();
-			}
-
-			Set dataModelIDs = topEntry.pageGroupEntry.pageGroup.getDataModelIDs();
-
-			if (dataModelIDs != null && dataModelIDs.size() > 0) {
-				Iterator ids = dataModelIDs.iterator();
-
-				while (ids.hasNext()) {
-					String dataModelID = (String) ids.next();
-					dataModelManager.removeNestedDataModel(dataModelID);
-				}
-			}
-
-			pageGroupStack.pop();
-
-			if (!pageGroupStack.empty()) {
-				foundPreviousPage = findPreviousPageInGroup();
-				topEntry = (StackEntry) pageGroupStack.peek();
-			}
-		}
-	}
-
-	public void reset(){
-		pageGroupStack.clear();
-	}
-	
-	public IWizardPage getCurrentPage() {
-		IWizardPage page = null;
-
-		if (!pageGroupStack.empty()) {
-			StackEntry topEntry = (StackEntry) pageGroupStack.peek();
-			int pageIndex = topEntry.getTopPageIndex();
-
-			page = pageIndex == -1 ? null : (IWizardPage)topEntry.pageGroupEntry.getPages().get(pageIndex);
-		}
-
-		return page;
-	}
-
-	private Boolean hasMulitplePages;
-
-	public boolean hasMultiplePages() {
-		if (null == hasMulitplePages) {
-			int pageCount = 0;
-			PageGroupEntry rootEntry = (PageGroupEntry) groupTable.get(rootPageGroup.getPageGroupID());
-			pageCount += rootEntry.getPages().size();
-			for (int i = 0; pageCount < 2 && i < rootEntry.groupsThatFollow.size(); i++) {
-				pageCount += ((PageGroupEntry) rootEntry.groupsThatFollow.get(i)).getPages().size();
-			}
-			hasMulitplePages = pageCount > 1 ? Boolean.TRUE : Boolean.FALSE;
-		}
-		return hasMulitplePages.booleanValue();
-	}
-
-	public boolean hasNextPage() {
-		boolean pageFound = false;
-
-		saveStackInfo();
-
-		if (pageGroupStack.empty()) {
-			PageGroupEntry rootEntry = (PageGroupEntry) groupTable.get(rootPageGroup.getPageGroupID());
-			Set dataModelIDs = rootEntry.pageGroup.getDataModelIDs();
-
-			pageGroupStack.push(new StackEntry(rootEntry, -1));
-
-			if (dataModelIDs != null && dataModelIDs.size() > 0) {
-				Iterator ids = dataModelIDs.iterator();
-
-				while (ids.hasNext()) {
-					String dataModelID = (String) ids.next();
-					dataModelManager.addNestedDataModel(dataModelID);
-				}
-			}
-		}
-
-		pageFound = findNextPage(false);
-		restoreStackInfo();
-
-		return pageFound;
-	}
-
-	public boolean runAllRemainingOperations() {
-		setPostListener(null);
-
-		IStatus status = operationManager.runOperations();
-
-		return status.getSeverity() != IStatus.ERROR;
-	}
-
-	public void undoAllCurrentOperations() {
-		while (!pageGroupStack.empty()) {
-			moveBackOnePage();
-		}
-	}
-
-	private boolean findPreviousPageInGroup() {
-		StackEntry topEntry = (StackEntry) pageGroupStack.peek();
-		boolean pageFound = false;
-
-		if (!topEntry.pagesReturned.empty()) {
-			topEntry.pagesComplete = false;
-			pageFound = true;
-		}
-
-		return pageFound;
-	}
-
-	private boolean findNextPage(boolean runOperations) {
-		StackEntry topEntry = (StackEntry) pageGroupStack.peek();
-		int newPageIndex = topEntry.findNextPageIndex();
-		boolean pageFound = false;
-
-		if (newPageIndex == -1) {
-			// Our page handler didn't find a page so we will see if there is a page group that
-			// follows this page group that can find a page.
-			topEntry.pagesComplete = true;
-
-			StackEntry nextStackEntry = findNextPageGroup(pageGroupStack);
-
-			if (nextStackEntry != null) {
-				IDMPageGroup pageGroup = nextStackEntry.pageGroupEntry.pageGroup;
-				String requiresOperationsId = pageGroup.getRequiredDataOperationToRun();
-				Set dataModelIDs = pageGroup.getDataModelIDs();
-
-				// If this group requires an operation and it has not already been run
-				// then we need to run it.
-				if (runOperations && requiresOperationsId != null && !operationsRun.contains(requiresOperationsId)) {
-					setPostListener(requiresOperationsId);
-					IStatus status = operationManager.runOperations();
-
-					nextStackEntry.ranOperations = true;
-					if (status.getSeverity() == IStatus.ERROR) {
-						// TODO need a better error feedback mechanism here.
-						throw new IllegalArgumentException(status.getMessage());
-					}
-				}
-
-				if (dataModelIDs != null && dataModelIDs.size() > 0) {
-					Iterator ids = dataModelIDs.iterator();
-
-					while (ids.hasNext()) {
-						String dataModelID = (String) ids.next();
-						dataModelManager.addNestedDataModel(dataModelID);
-					}
-				}
-
-				pageGroupStack.push(nextStackEntry);
-				pageFound = findNextPage(runOperations);
-			}
-		} else {
-			// We found a new page in the page handler.
-			pageFound = true;
-			topEntry.pagesReturned.push(new Integer(newPageIndex));
-		}
-
-		return pageFound;
-	}
-
-	private void setPostListener(final String operationId) {
-		if (operationId != null) {
-			// Listener for a particular operation and stop after we are notified of it.
-			operationManager.setPostExecuteListener(new OperationListener() {
-				public boolean notify(IDataModelOperation operation) {
-					String id = operation.getID();
-
-					operationsRun.add(id);
-
-					return !id.equals(operationId);
-				}
-			});
-		} else {
-			// Set the post execution listener to doing nothing so that all operations
-			// will execute.
-			operationManager.setPostExecuteListener(new OperationListener() {
-				public boolean notify(IDataModelOperation operation) {
-					return true;
-				}
-			});
-		}
-	}
-
-	private void saveStackInfo() {
-		if (!pageGroupStack.empty()) {
-			savedTopEntry = new StackEntry((StackEntry) pageGroupStack.peek());
-		}
-
-		savedStackSize = pageGroupStack.size();
-	}
-
-	private void restoreStackInfo() {
-		if (savedStackSize == 0) {
-			pageGroupStack.removeAllElements();
-		} else {
-			pageGroupStack.setSize(savedStackSize - 1);
-			pageGroupStack.push(savedTopEntry);
-		}
-	}
-
-	private void loadExtendedPages(IDMPageGroup pageGroup) {
-		String wizardId = rootPageGroup.getWizardID();
-		String pageGroupId = pageGroup.getPageGroupID();
-		int length = elements.length;
-
-		for (int index = 0; index < length; index++) {
-			DMPageGroupElementImpl pageInsertGroup = new DMPageGroupElementImpl(elements[index]);
-			String pageInsertGroupId = pageInsertGroup.getPageGroupInsertionID();
-			if (pageInsertGroup.getWizardID().equals(wizardId) && (null == pageInsertGroupId || pageInsertGroupId.equals(pageGroupId))) {
-				addPageGroup(pageGroup, pageInsertGroup);
-
-				// If this page group has page then add them
-				if (pageInsertGroup.getAllowsExtendedPages()) {
-					loadExtendedPages(pageInsertGroup);
-				}
-			}
-		}
-	}
-
-	private void addPageGroup(IDMPageGroup pageGroup, IDMPageGroup insertedPageGroup) {
-		PageGroupEntry pageGroupEntry = (PageGroupEntry) groupTable.get(pageGroup.getPageGroupID());
-		PageGroupEntry nextGroupEntry = (PageGroupEntry) groupTable.get(insertedPageGroup.getPageGroupID());
-
-		if (pageGroupEntry == null) {
-			pageGroupEntry = new PageGroupEntry(pageGroup);
-			groupTable.put(pageGroup.getPageGroupID(), pageGroupEntry);
-		}
-
-		if (nextGroupEntry == null) {
-			nextGroupEntry = new PageGroupEntry(insertedPageGroup);
-			groupTable.put(insertedPageGroup.getPageGroupID(), nextGroupEntry);
-		}
-
-		pageGroupEntry.groupsThatFollow.add(nextGroupEntry);
-	}
-
-	public StackEntry findNextPageGroup(Stack stack) {
-		StackEntry topEntry = (StackEntry) stack.peek();
-		PageGroupEntry nextPageGroup = topEntry.getNextPageGroup(null);
-		int parentIndex = topEntry.parentGroupIndex;
-		int prevParentIndex = stack.size() - 1;
-
-		// Recurse up through the parents to find the next group if needed.
-		while (parentIndex != -1 && nextPageGroup == null) {
-			StackEntry parentStackEntry = (StackEntry) stack.elementAt(parentIndex);
-
-			nextPageGroup = parentStackEntry.getNextPageGroup(topEntry.getId());
-			prevParentIndex = parentIndex;
-			parentIndex = parentStackEntry.parentGroupIndex;
-			topEntry = parentStackEntry;
-		}
-
-		return nextPageGroup == null ? null : new StackEntry(nextPageGroup, prevParentIndex);
-	}
-
-	private class StackEntry {
-		public PageGroupEntry pageGroupEntry;
-		public Stack pagesReturned; // Element = Interger of page indexes.
-		public boolean pagesComplete;
-		public int parentGroupIndex;
-		public boolean ranOperations;
-
-		public StackEntry(PageGroupEntry newPageGroupEntry, int parentIndex) {
-			pageGroupEntry = newPageGroupEntry;
-			pagesReturned = new Stack();
-			pagesComplete = false;
-			parentGroupIndex = parentIndex;
-			ranOperations = false;
-		}
-
-		public StackEntry(StackEntry stackEntry) {
-			pageGroupEntry = stackEntry.pageGroupEntry;
-			pagesReturned = new Stack();
-			pagesComplete = stackEntry.pagesComplete;
-			parentGroupIndex = stackEntry.parentGroupIndex;
-			ranOperations = stackEntry.ranOperations;
-			pagesReturned.addAll(stackEntry.pagesReturned);
-		}
-
-		public String getId() {
-			return pageGroupEntry.pageGroup.getPageGroupID();
-		}
-
-		public int findNextPageIndex() {
-			int result = -1;
-
-			if (!pagesComplete) {
-				List pages = pageGroupEntry.getPages();
-
-				int pageIndex = getTopPageIndex();
-				String pageId = pageIndex == -1 ? null : ((IWizardPage)pages.get(pageIndex)).getName();
-				String expectedId = pageIndex + 1 >= pages.size() ? null : ((IWizardPage)pages.get(pageIndex + 1)).getName();
-				String newPageId = null;
-
-				try {
-					newPageId = pageGroupEntry.getPageHandler().getNextPage(pageId, expectedId);
-				} catch (Throwable exc) {
-					Logger.getLogger().logError(exc);
-				}
-
-				if (newPageId != null && newPageId.equals(IDMPageHandler.SKIP_PAGE) && pageIndex >= 0 && pageIndex < pages.size() - 2) {
-					result = pageIndex + 2;
-				} else {
-					result = pageGroupEntry.checkForSpecialIds(newPageId);
-				}
-			}
-
-			return result;
-		}
-
-		public PageGroupEntry getNextPageGroup(String afterId) {
-			PageGroupEntry result = null;
-			String nextGroupID = null;
-			String[] groupIDList = getGroupIDList();
-
-			try {
-				nextGroupID = pageGroupEntry.getPageGroupHandler().getNextPageGroup(afterId, groupIDList);
-			} catch (Throwable exc) {
-				Logger.getLogger().logError(exc);
-			}
-
-			if (nextGroupID != null) {
-				// Find this string in the list.
-				for (int index = 0; index < groupIDList.length; index++) {
-					if (groupIDList[index].equals(nextGroupID)) {
-						result = (PageGroupEntry) pageGroupEntry.groupsThatFollow.elementAt(index);
-						break;
-					}
-				}
-			}
-
-			return result;
-		}
-
-		private String[] getGroupIDList() {
-			String[] result = new String[pageGroupEntry.groupsThatFollow.size()];
-
-			for (int index = 0; index < pageGroupEntry.groupsThatFollow.size(); index++) {
-				PageGroupEntry entry = (PageGroupEntry) pageGroupEntry.groupsThatFollow.elementAt(index);
-
-				result[index] = entry.pageGroup.getPageGroupID();
-			}
-
-			return result;
-		}
-
-		private int getTopPageIndex() {
-			return pagesReturned.empty() ? -1 : ((Integer) pagesReturned.peek()).intValue();
-		}
-	}
-
-	private class PageGroupEntry {
-		public IDMPageGroup pageGroup;
-		public Vector groupsThatFollow;
-		private IDMPageHandler pageHandler;
-		private IDMPageGroupHandler pageGroupHandler;
-		private boolean initialized;
-
-		public PageGroupEntry(IDMPageGroup newPageGroup) {
-			pageGroup = newPageGroup;
-			groupsThatFollow = new Vector();
-			initialized = false;
-		}
-
-		public IDMPageHandler getPageHandler() {
-			if (!initialized)
-				init();
-
-			return pageHandler;
-		}
-
-		public IDMPageGroupHandler getPageGroupHandler() {
-			if (!initialized)
-				init();
-
-			return pageGroupHandler;
-		}
-
-		public List getPages() {
-			if (!initialized)
-				init();
-
-			return pageGroup.getPages(dataModel);
-		}
-
-		public PageGroupEntry(PageGroupEntry originalEntry) {
-			pageGroup = originalEntry.pageGroup;
-			groupsThatFollow = originalEntry.groupsThatFollow;
-			pageHandler = originalEntry.pageHandler;
-			pageGroupHandler = originalEntry.pageGroupHandler;
-		}
-
-		private void init() {
-			try {
-				pageHandler = pageGroup.getPageHandler(dataModel);
-				pageGroupHandler = pageGroup.getPageGroupHandler(dataModel);
-			} catch (Throwable exc) {
-				Logger.getLogger().logError(exc);
-			}
-
-			if (pageHandler == null)
-				pageHandler = new SimplePageHandler();
-
-			if (pageGroupHandler == null)
-				pageGroupHandler = new SimplePageGroupHandler();
-
-			initialized = true;
-		}
-
-		private int checkForSpecialIds(String pageId) {
-			int result = -1;
-
-			List pages = getPages();
-			
-			if (pages.isEmpty() || pageId == null)
-				return -1;
-
-			if (pageId.startsWith(IDMPageHandler.PAGE_AFTER)) {
-				String afterID = pageId.substring(IDMPageHandler.PAGE_AFTER.length(), pageId.length());
-				result = getIndexOf(afterID);
-				result = result >= 0 && result < pages.size() - 1 ? result + 1 : -1;
-			} else if (pageId.startsWith(IDMPageHandler.PAGE_BEFORE)) {
-				String beforeID = pageId.substring(IDMPageHandler.PAGE_BEFORE.length(), pageId.length());
-				result = getIndexOf(beforeID);
-				result = result >= 1 && result < pages.size() ? result - 1 : -1;
-			} else {
-				result = getIndexOf(pageId);
-			}
-
-			return result;
-		}
-
-		private int getIndexOf(String pageId) {
-			int result = -1;
-
-			List pages = getPages();
-			for (int index = 0; index < pages.size(); index++) {
-				if (((IWizardPage)pages.get(index)).getName().equals(pageId)) {
-					result = index;
-					break;
-				}
-			}
-
-			return result;
-		}
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/RunnableOperationWrapper.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/RunnableOperationWrapper.java
deleted file mode 100644
index 4b26000..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/RunnableOperationWrapper.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.operations.IUndoableOperation;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-
-public class RunnableOperationWrapper implements IRunnableWithProgress {
-
-	private IUndoableOperation undoableOperation;
-	private IStatus status;
-
-	public RunnableOperationWrapper(IUndoableOperation undoableOperation) {
-		this.undoableOperation = undoableOperation;
-	}
-
-	public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-		try {
-			status = undoableOperation.execute(monitor, null);
-			if(status.getSeverity() == IStatus.ERROR){
-				throw new InvocationTargetException(status.getException());
-			}
-		} catch (ExecutionException e) {
-			throw new InvocationTargetException(e);
-		}
-	}
-
-	public IStatus getStatus() {
-		return status;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/RunnableWithProgressWrapper.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/RunnableWithProgressWrapper.java
deleted file mode 100644
index 3df3904..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/RunnableWithProgressWrapper.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-
-import org.eclipse.wst.common.frameworks.internal.operations.IHeadlessRunnableWithProgress;
-
-/**
- * This is a wrapper for our IHeadlessRunnableWithProgress to the IRunnableWithProgress. This class
- * needs to be used when running the operation from a IRunnableContext.
- * 
- * @see IRunnableContext
- * @see JavaUIPlugin#getRunnableWithProgress Creation date: (5/8/2001 1:28:45 PM)
- * @author: Administrator
- */
-public class RunnableWithProgressWrapper implements org.eclipse.jface.operation.IRunnableWithProgress {
-	// //$NON-NLS-1$
-	private IHeadlessRunnableWithProgress headlessRunnable;
-
-	/**
-	 * RunnableWithProgressWrapper constructor comment.
-	 */
-	public RunnableWithProgressWrapper(IHeadlessRunnableWithProgress aHeadlessRunnableWithProgress) {
-		setHeadlessRunnable(aHeadlessRunnableWithProgress);
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (5/8/2001 1:29:52 PM)
-	 * 
-	 * @return com.ibm.etools.j2ee.operations.IHeadlessRunnableWithProgress
-	 */
-	protected org.eclipse.wst.common.frameworks.internal.operations.IHeadlessRunnableWithProgress getHeadlessRunnable() {
-		return headlessRunnable;
-	}
-
-	/**
-	 * Runs this operation. Progress should be reported to the given progress monitor. This method
-	 * is usually invoked by an <code>IRunnableContext</code>'s<code>run</code> method, which
-	 * supplies the progress monitor. A request to cancel the operation should be honored and
-	 * acknowledged by throwing <code>InterruptedException</code>.
-	 * 
-	 * @param monitor
-	 *            the progress monitor to use to display progress and receive requests for
-	 *            cancelation
-	 * @exception InvocationTargetException
-	 *                if the run method must propagate a checked exception, it should wrap it inside
-	 *                an <code>InvocationTargetException</code>; runtime exceptions are
-	 *                automatically wrapped in an <code>InvocationTargetException</code> by the
-	 *                calling context
-	 * @exception InterruptedException
-	 *                if the operation detects a request to cancel, using
-	 *                <code>IProgressMonitor.isCanceled()</code>, it should exit by throwing
-	 *                <code>InterruptedException</code>
-	 * 
-	 * @see IRunnableContext#run
-	 */
-	public void run(org.eclipse.core.runtime.IProgressMonitor monitor) throws java.lang.reflect.InvocationTargetException, java.lang.InterruptedException {
-		getHeadlessRunnable().run(monitor);
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (5/8/2001 1:29:52 PM)
-	 * 
-	 * @param newHeadlessRunnable
-	 *            com.ibm.etools.j2ee.operations.IHeadlessRunnableWithProgress
-	 */
-	protected void setHeadlessRunnable(org.eclipse.wst.common.frameworks.internal.operations.IHeadlessRunnableWithProgress newHeadlessRunnable) {
-		headlessRunnable = newHeadlessRunnable;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/SaveHandlerUI.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/SaveHandlerUI.java
deleted file mode 100644
index e316218..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/SaveHandlerUI.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.wst.common.frameworks.internal.ISaveHandler;
-import org.eclipse.wst.common.frameworks.internal.SaveFailedException;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
-
-
-public class SaveHandlerUI implements ISaveHandler {
-	public static final String SAVE_FAILED = WTPCommonPlugin.getResourceString("16"); //$NON-NLS-1$
-	public static final String BEGINNING_MESSAGE = WTPCommonPlugin.getResourceString("17"); //$NON-NLS-1$
-	protected boolean isYesToAll = false;
-	protected int referenceCount = 0;
-
-	/**
-	 * SaveHandlerUI constructor comment.
-	 */
-	public SaveHandlerUI() {
-		super();
-	}
-
-	/**
-	 * access method comment.
-	 */
-	public void access() {
-		referenceCount++;
-	}
-
-	protected Shell getParentShellForDialog() {
-		if (Display.getCurrent() != null)
-			return Display.getCurrent().getActiveShell();
-
-		return null;
-	}
-
-	protected Display getDisplay() {
-		Display result = Display.getCurrent();
-		return result == null ? Display.getDefault() : result;
-	}
-
-	public void handleSaveFailed(SaveFailedException ex, IProgressMonitor monitor) {
-		if (referenceCount > 1)
-			//Let the outermost reference handle it
-			throw ex;
-		String exMsg = ex.getInnerMostNestedException() == null ? ex.getMessage() : ex.getInnerMostNestedException().getMessage();
-		final String message = BEGINNING_MESSAGE + ":\n" + exMsg;//$NON-NLS-1$
-		getDisplay().syncExec(new Runnable() {
-			public void run() {
-				MessageDialog.openError(getParentShellForDialog(), SAVE_FAILED, message);
-			}
-		});
-		if (monitor != null)
-			monitor.setCanceled(true);
-		else
-			throw ex;
-	}
-
-	protected boolean promptUserToSaveReadOnly(IFile aFile) {
-
-		String[] buttonStrings = {WTPCommonPlugin.getResourceString("Yes_UI_"), WTPCommonPlugin.getResourceString("Yes_To_All_UI_"), WTPCommonPlugin.getResourceString("No_UI_")}; //$NON-NLS-3$ = "No" //$NON-NLS-2$ = "Yes To All" //$NON-NLS-1$ = "Yes"
-		String title = WTPCommonPlugin.getResourceString("Saving_Read-Only_File_UI_"); //$NON-NLS-1$ = "Saving Read-Only File"
-		String message = WTPCommonPlugin.getResourceString("2concat_INFO_", (new Object[]{aFile.getFullPath()})); //$NON-NLS-1$ = "The file {0} is read-only and cannot be saved.  Would you like to make it editable and save anyway?"
-
-		final MessageDialog dialog = new MessageDialog(getParentShellForDialog(), title, null, // accept
-					// the
-					// default
-					// window
-					// icon
-					message, MessageDialog.QUESTION, buttonStrings, 0); // Yes is the default
-
-		final int[] ret = new int[1];
-		getDisplay().syncExec(new Runnable() {
-			public void run() {
-				dialog.setBlockOnOpen(true);
-				ret[0] = dialog.open();
-			}
-		});
-
-		switch (ret[0]) {
-			case 0 : {
-				return true;
-			}
-			case 1 : {
-				isYesToAll = true;
-				return true;
-			}
-			case 2 : {
-				return false;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * release method comment.
-	 */
-	public void release() {
-		referenceCount--;
-		if (referenceCount == 0)
-			isYesToAll = false;
-
-	}
-
-	/**
-	 * shouldContinueAndMakeFileEditable method comment.
-	 */
-	public boolean shouldContinueAndMakeFileEditable(IFile aFile) {
-		boolean yes = isYesToAll || promptUserToSaveReadOnly(aFile);
-		if (yes)
-			aFile.getResourceAttributes().setReadOnly(false);
-		return yes;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/SimplePageGroupHandler.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/SimplePageGroupHandler.java
deleted file mode 100644
index c68ee57..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/SimplePageGroupHandler.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others. 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageGroupHandler;
-
-public class SimplePageGroupHandler implements IDMPageGroupHandler {
-	public String getNextPageGroup(String currentPageGroupID, String[] pageGroupIDs) {
-		if (pageGroupIDs == null || pageGroupIDs.length == 0)
-			return null;
-
-		if (currentPageGroupID == null)
-			return pageGroupIDs[0];
-
-		String result = null;
-
-		for (int index = 0; index < pageGroupIDs.length; index++) {
-			if (pageGroupIDs[index].equals(currentPageGroupID)) {
-				// We found the currentPageGroupID, so we want to return the next one in the
-				// array if there is one.
-				if (index + 1 < pageGroupIDs.length) {
-					result = pageGroupIDs[index + 1];
-				} else {
-					result = null;
-				}
-
-				break;
-			}
-		}
-
-		return result;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/SimplePageHandler.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/SimplePageHandler.java
deleted file mode 100644
index 44db38f..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/SimplePageHandler.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others. 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageHandler;
-
-public class SimplePageHandler implements IDMPageHandler
-{
-  public String getNextPage(String currentPageName, String expectedNextPageName) 
-  {
-    return expectedNextPageName;
-  }
-
-  public String getPreviousPage(String currentPageName, String expectedPreviousPageName) 
-  {
-	return expectedPreviousPageName;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/TimedKeyListener.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/TimedKeyListener.java
deleted file mode 100644
index 7f3c7b4..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/TimedKeyListener.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.awt.event.ActionListener;
-
-import org.eclipse.swt.events.KeyListener;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.events.MouseTrackListener;
-import org.eclipse.swt.widgets.Widget;
-
-/**
- * Insert the type's description here. Creation date: (8/30/2001 4:00:28 PM)
- * 
- * @author: Administrator
- */
-public class TimedKeyListener extends Timer implements KeyListener, MouseListener, MouseTrackListener, ModifyListener {
-
-	protected Widget monitoringTarget;
-
-	private final static int TIME_LIMIT = 200;
-
-	/**
-	 * J2EETimedKeyListener constructor comment.
-	 * 
-	 * @param delay
-	 *            int
-	 * @param listener
-	 *            java.awt.event.ActionListener
-	 */
-	public TimedKeyListener(int delay, ActionListener listener) {
-		super(delay, listener);
-		setRepeats(false);
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (8/30/2001 4:43:33 PM)
-	 * 
-	 * @param a
-	 *            java.awt.event.ActionListener
-	 */
-	public TimedKeyListener(ActionListener listener) {
-		this(TIME_LIMIT, listener);
-	}
-
-	/**
-	 * Sent when a key is pressed on the system keyboard.
-	 * 
-	 * @param e
-	 *            an event containing information about the key press
-	 */
-	public void keyPressed(org.eclipse.swt.events.KeyEvent e) {
-	}
-
-	/**
-	 * Sent when a key is released on the system keyboard.
-	 * 
-	 * @param e
-	 *            an event containing information about the key release
-	 */
-	public void keyReleased(org.eclipse.swt.events.KeyEvent e) {
-		// Replaced with SWT.Modify -- see modifyText() in this class
-		//        monitoringTarget = (Widget) e.getSource();
-		//        restart();
-	}
-
-	/**
-	 * @see org.eclipse.swt.events.MouseListener#mouseDoubleClick(MouseEvent)
-	 */
-	public void mouseDoubleClick(MouseEvent e) {
-	}
-
-	/**
-	 * @see org.eclipse.swt.events.MouseListener#mouseDown(MouseEvent)
-	 */
-	public void mouseDown(MouseEvent e) {
-	}
-
-	/**
-	 * @see org.eclipse.swt.events.MouseListener#mouseUp(MouseEvent)
-	 */
-	public void mouseUp(MouseEvent e) {
-		monitoringTarget = (Widget) e.getSource();
-		restart();
-	}
-
-	/**
-	 * @see org.eclipse.swt.events.MouseTrackListener#mouseEnter(MouseEvent)
-	 */
-	public void mouseEnter(MouseEvent e) {
-	}
-
-	/**
-	 * @see org.eclipse.swt.events.MouseTrackListener#mouseExit(MouseEvent)
-	 */
-	public void mouseExit(MouseEvent e) {
-	}
-
-	/**
-	 * @see org.eclipse.swt.events.MouseTrackListener#mouseHover(MouseEvent)
-	 */
-	public void mouseHover(MouseEvent e) {
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.ui.util.Timer#getSource()
-	 */
-	protected Object getSource() {
-		return monitoringTarget;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
-	 */
-	public void modifyText(ModifyEvent e) {
-		monitoringTarget = (Widget) e.getSource();
-		restart();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/TimedModifyListener.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/TimedModifyListener.java
deleted file mode 100644
index 98045fe..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/TimedModifyListener.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-/**
- * This class perform the same function as the J2EETimedKeyListener but using the Modify SWT event
- * instead of the KeyUp. Creation date: (9/10/2001 11:46:51 AM)
- * 
- * @author: Administrator
- */
-import java.awt.event.ActionListener;
-
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.widgets.Widget;
-
-public class TimedModifyListener extends TimedKeyListener implements ModifyListener {
-	/**
-	 * J2EETimedModefyListener constructor comment.
-	 * 
-	 * @param delay
-	 *            int
-	 * @param listener
-	 *            java.awt.event.ActionListener
-	 */
-	public TimedModifyListener(int delay, ActionListener listener) {
-		super(delay, listener);
-	}
-
-	/**
-	 * J2EETimedModefyListener constructor comment.
-	 * 
-	 * @param listener
-	 *            java.awt.event.ActionListener
-	 */
-	public TimedModifyListener(ActionListener listener) {
-		super(listener);
-	}
-
-	/*
-	 * Re/Start the timer
-	 */
-	public void modifyText(org.eclipse.swt.events.ModifyEvent e) {
-		monitoringTarget = (Widget) e.getSource();
-		restart();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/Timer.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/Timer.java
deleted file mode 100644
index 85836ea..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/Timer.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-
-public class Timer {
-	/**
-	 * DoPostEvent is a runnable class that fires actionEvents to the listeners on the
-	 * EventDispatchThread, via invokeLater.
-	 * 
-	 * @see #post
-	 */
-	class DoPostEvent implements Runnable {
-		public void run() {
-			if (eventQueued) {
-				fireActionPerformed(new ActionEvent(getSource(), 0, null));
-				cancelEvent();
-			}
-		}
-
-		Timer getTimer() {
-			return Timer.this;
-		}
-	}
-
-	protected ListenerList listenerList = new ListenerList();
-	boolean eventQueued = false;
-	int initialDelay, delay;
-	boolean repeats = true, coalesce = true;
-	private Runnable doPostEvent;
-	// These fields are maintained by TimerQueue.
-	// eventQueued can also be reset by the TimerQueue, but will only ever
-	// happen in applet case when TimerQueues thread is destroyed.
-	long expirationTime;
-	Timer nextTimer;
-	boolean running;
-
-	/**
-	 * Creates a Timer that will notify its listeners every <i>delay </i> milliseconds.
-	 * 
-	 * @param delay
-	 *            The number of milliseconds between listener notification
-	 * @param listener
-	 *            An initial listener
-	 * @see #setInitialDelay
-	 * @see #setRepeats
-	 */
-	public Timer(int delay, ActionListener listener) {
-		super();
-		this.delay = delay;
-		this.initialDelay = delay;
-
-		doPostEvent = new DoPostEvent();
-
-		if (listener != null) {
-			addActionListener(listener);
-		}
-	}
-
-	/**
-	 * Adds an actionListener to the Timer
-	 */
-	public void addActionListener(ActionListener listener) {
-		listenerList.add(listener);
-	}
-
-	synchronized void cancelEvent() {
-		eventQueued = false;
-	}
-
-	/**
-	 * Notify all listeners that have registered interest for notification on this event type. The
-	 * event instance is lazily created using the parameters passed into the fire method.
-	 * 
-	 * @see EventListenerList
-	 */
-	protected void fireActionPerformed(ActionEvent e) {
-		// Guaranteed to return a non-null array
-		ActionListener[] listeners = listenerList.getListenerList();
-
-		// Process the listeners last to first, notifying
-		// those that are interested in this event
-		for (int i = listeners.length - 1; i >= 0; i -= 1) {
-			listeners[i].actionPerformed(e);
-		}
-	}
-
-	/**
-	 * Returns the Timer's delay.
-	 * 
-	 * @see #setDelay
-	 */
-	public int getDelay() {
-		return delay;
-	}
-
-	/**
-	 * Returns the Timer's initial delay.
-	 * 
-	 * @see #setDelay
-	 */
-	public int getInitialDelay() {
-		return initialDelay;
-	}
-
-	/**
-	 * Returns <b>true </b> if the Timer coalesces multiple pending <b>performCommand() </b>
-	 * messages.
-	 * 
-	 * @see #setCoalesce
-	 */
-	public boolean isCoalesce() {
-		return coalesce;
-	}
-
-	/**
-	 * Returns <b>true </b> if the Timer will send a <b>actionPerformed() </b> message to its
-	 * listeners multiple times.
-	 * 
-	 * @see #setRepeats
-	 */
-	public boolean isRepeats() {
-		return repeats;
-	}
-
-	/**
-	 * Returns <b>true </b> if the Timer is running.
-	 * 
-	 * @see #start
-	 */
-	public boolean isRunning() {
-		return timerQueue().containsTimer(this);
-	}
-
-	synchronized void post() {
-		if (!eventQueued) {
-			eventQueued = true;
-			org.eclipse.swt.widgets.Display.getDefault().asyncExec(doPostEvent);
-		}
-	}
-
-	/**
-	 * Removes an ActionListener from the Timer.
-	 */
-	public void removeActionListener(ActionListener listener) {
-		listenerList.remove(listener);
-	}
-
-	/**
-	 * Restarts a Timer, canceling any pending firings, and causing it to fire with its initial
-	 * dely.
-	 */
-	public void restart() {
-		stop();
-		start();
-	}
-
-	/**
-	 * Sets whether the Timer coalesces multiple pending ActionEvent firings. A busy application may
-	 * not be able to keep up with a Timer's message generation, causing multiple
-	 * <b>actionPerformed() </b> message sends to be queued. When processed, the application sends
-	 * these messages one after the other, causing the Timer's listeners to receive a sequence of
-	 * <b>actionPerformed() </b> messages with no delay between them. Coalescing avoids this
-	 * situation by reducing multiple pending messages to a single message send. Timers coalesce
-	 * their message sends by default.
-	 */
-	public void setCoalesce(boolean flag) {
-		coalesce = flag;
-	}
-
-	/**
-	 * Sets the Timer's delay, the number of milliseconds between successive <b>actionPerfomed()
-	 * </b> messages to its listeners
-	 * 
-	 * @see #setInitialDelay
-	 */
-	public void setDelay(int delay) {
-		if (delay < 0) {
-			String msg = WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.Timer_UI_0, new Object[]{Integer.toString(delay)}); //$NON-NLS-1$
-			throw new IllegalArgumentException(msg);
-		}
-		this.delay = delay;
-	}
-
-	/**
-	 * Sets the Timer's initial delay. This will be used for the first "ringing" of the Timer only.
-	 * Subsequent ringings will be spaced using the delay property.
-	 * 
-	 * @see #setDelay
-	 */
-	public void setInitialDelay(int initialDelay) {
-		if (initialDelay < 0) {
-			String msg = WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.Timer_UI_1, new Object[]{Integer.toString(initialDelay)}); //$NON-NLS-1$
-			throw new IllegalArgumentException(msg);
-		}
-		this.initialDelay = initialDelay;
-	}
-
-	/**
-	 * If <b>flag </b> is <b>false </b>, instructs the Timer to send <b>actionPerformed() </b> to
-	 * its listeners only once, and then stop.
-	 */
-	public void setRepeats(boolean flag) {
-		repeats = flag;
-	}
-
-	/**
-	 * Starts the Timer, causing it to send <b>actionPerformed() </b> messages to its listeners.
-	 * 
-	 * @see #stop
-	 */
-	public void start() {
-		timerQueue().addTimer(this, System.currentTimeMillis() + getInitialDelay());
-	}
-
-	/**
-	 * Stops a Timer, causing it to stop sending <b>actionPerformed() </b> messages to its Target.
-	 * 
-	 * @see #start
-	 */
-	public void stop() {
-		timerQueue().removeTimer(this);
-		cancelEvent();
-	}
-
-	/**
-	 * Returns the timer queue.
-	 */
-	TimerQueue timerQueue() {
-		return TimerQueue.singleton();
-	}
-
-	/**
-	 * Return the source for the ActionEvent that is fired.
-	 * 
-	 * @return
-	 */
-	protected Object getSource() {
-		return this;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/TimerQueue.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/TimerQueue.java
deleted file mode 100644
index 7b54f03..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/TimerQueue.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-
-
-
-class TimerQueue implements Runnable {
-	private static TimerQueue singleton;
-	Timer firstTimer;
-	boolean running;
-	private static final Object classLock = new Object();
-
-	/**
-	 * Constructor for TimerQueue.
-	 */
-	public TimerQueue() {
-		super();
-
-		// Now start the TimerQueue thread.
-		start();
-	}
-
-	synchronized void addTimer(Timer timer, long expirationTime) {
-		Timer previousTimer;
-		Timer nextTimer;
-
-		// If the Timer is already in the queue, then ignore the add.
-		if (timer.running) {
-			return;
-		}
-
-		previousTimer = null;
-		nextTimer = firstTimer;
-
-		// Insert the Timer into the linked list in the order they will
-		// expire. If two timers expire at the same time, put the newer entry
-		// later so they expire in the order they came in.
-
-		while (nextTimer != null) {
-			if (nextTimer.expirationTime > expirationTime)
-				break;
-
-			previousTimer = nextTimer;
-			nextTimer = nextTimer.nextTimer;
-		}
-
-		if (previousTimer == null) {
-			firstTimer = timer;
-		} else {
-			previousTimer.nextTimer = timer;
-		}
-
-		timer.expirationTime = expirationTime;
-		timer.nextTimer = nextTimer;
-		timer.running = true;
-		notify();
-	}
-
-	synchronized boolean containsTimer(Timer timer) {
-		return timer.running;
-	}
-
-	/**
-	 * If there are a ton of timers, this method may never return. It loops checking to see if the
-	 * head of the Timer list has expired. If it has, it posts the Timer and reschedules it if
-	 * necessary.
-	 */
-	synchronized long postExpiredTimers() {
-		Timer timer;
-		long currentTime;
-		long timeToWait;
-
-		// The timeToWait we return should never be negative and only be zero
-		// when we have no Timers to wait for.
-
-		do {
-			timer = firstTimer;
-			if (timer == null)
-				return 0;
-
-			currentTime = System.currentTimeMillis();
-			timeToWait = timer.expirationTime - currentTime;
-
-			if (timeToWait <= 0) {
-				try {
-					timer.post(); // have timer post an event
-				} catch (SecurityException e) {
-				}
-
-				// Remove the timer from the queue
-				removeTimer(timer);
-
-				// This tries to keep the interval uniform at
-				// the cost of drift.
-				if (timer.isRepeats()) {
-					addTimer(timer, currentTime + timer.getDelay());
-				}
-			}
-
-			// Allow other threads to call addTimer() and removeTimer()
-			// even when we are posting Timers like mad. Since the wait()
-			// releases the lock, be sure not to maintain any state
-			// between iterations of the loop.
-
-			try {
-				wait(1);
-			} catch (InterruptedException e) {
-			}
-		} while (timeToWait <= 0);
-
-		return timeToWait;
-	}
-
-	synchronized void removeTimer(Timer timer) {
-		Timer previousTimer;
-		Timer nextTimer;
-		boolean found;
-
-		if (!timer.running)
-			return;
-
-		previousTimer = null;
-		nextTimer = firstTimer;
-		found = false;
-
-		while (nextTimer != null) {
-			if (nextTimer == timer) {
-				found = true;
-				break;
-			}
-
-			previousTimer = nextTimer;
-			nextTimer = nextTimer.nextTimer;
-		}
-
-		if (!found)
-			return;
-
-		if (previousTimer == null) {
-			firstTimer = timer.nextTimer;
-		} else {
-			previousTimer.nextTimer = timer.nextTimer;
-		}
-
-		timer.expirationTime = 0;
-		timer.nextTimer = null;
-		timer.running = false;
-	}
-
-	public synchronized void run() {
-		long timeToWait;
-
-		try {
-			while (running) {
-				timeToWait = postExpiredTimers();
-				try {
-					wait(timeToWait);
-				} catch (InterruptedException e) {
-				}
-			}
-		} catch (ThreadDeath td) {
-			running = false;
-			// Mark all the timers we contain as not being queued.
-			Timer timer = firstTimer;
-			while (timer != null) {
-				timer.eventQueued = false;
-				timer = timer.nextTimer;
-			}
-			synchronized (this) {
-				if (!this.running)
-					start();
-			}
-			throw td;
-		}
-	}
-
-	public static TimerQueue singleton() {
-		if (singleton == null)
-			synchronized (classLock) {
-				singleton = new TimerQueue();
-			}
-		return singleton;
-	}
-
-	synchronized void start() {
-		if (running) {
-			throw new RuntimeException(WTPCommonUIResourceHandler.TimerQueue_ERROR_0); //$NON-NLS-1$
-		}
-		Thread timerThread = new Thread(this, "TimerQueue");//$NON-NLS-1$
-		try {
-			timerThread.setDaemon(true);
-		} catch (SecurityException e) {
-		}
-		timerThread.start();
-		running = true;
-	}
-
-	synchronized void stop() {
-		running = false;
-		notify();
-	}
-
-	public synchronized String toString() {
-		StringBuffer buf;
-		Timer nextTimer;
-
-		buf = new StringBuffer();
-		buf.append("TimerQueue (");//$NON-NLS-1$
-
-		nextTimer = firstTimer;
-		while (nextTimer != null) {
-			buf.append(nextTimer.toString());
-
-			nextTimer = nextTimer.nextTimer;
-			if (nextTimer != null)
-				buf.append(", ");//$NON-NLS-1$
-		}
-
-		buf.append(")");//$NON-NLS-1$
-		return buf.toString();
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UIEnablementIdentifier.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UIEnablementIdentifier.java
deleted file mode 100644
index 675dc55..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UIEnablementIdentifier.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on Feb 12, 2004
- *
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.ui.activities.IActivityManager;
-import org.eclipse.ui.activities.IIdentifier;
-import org.eclipse.ui.activities.IIdentifierListener;
-import org.eclipse.ui.activities.IdentifierEvent;
-import org.eclipse.wst.common.frameworks.internal.enablement.EnablementIdentifier;
-import org.eclipse.wst.common.frameworks.internal.enablement.EnablementIdentifierEvent;
-import org.eclipse.wst.common.frameworks.internal.enablement.IEnablementManager;
-
-
-/**
- * @author schacher
- * 
- * To change the template for this generated type comment go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-class UIEnablementIdentifier extends EnablementIdentifier implements IIdentifierListener {
-
-	private IIdentifier activityIdentifier;
-
-	/**
-	 * @param id
-	 * @param project
-	 */
-	public UIEnablementIdentifier(String id, IProject project) {
-		super(id, project);
-		activityIdentifier = getActivityManager().getIdentifier(id);
-		activityIdentifier.addIdentifierListener(this);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.activities.IIdentifierListener#identifierChanged(org.eclipse.ui.activities.IdentifierEvent)
-	 */
-	public void identifierChanged(IdentifierEvent identifierEvent) {
-		boolean enabledChanged = resetEnabled();
-		EnablementIdentifierEvent evt = new EnablementIdentifierEvent(this, false, enabledChanged);
-		fireIdentifierChanged(evt);
-	}
-
-	protected IActivityManager getActivityManager() {
-		return ((UIEnablementManager) IEnablementManager.INSTANCE).getActivityManager();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclispe.wst.common.frameworks.internal.enablement.EnablementIdentifier#getNewEnabled()
-	 */
-	protected boolean getNewEnabled() {
-		return activityIdentifier.isEnabled() && super.getNewEnabled();
-	}
-
-
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UIEnablementManager.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UIEnablementManager.java
deleted file mode 100644
index 44014e2..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UIEnablementManager.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on Feb 3, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.activities.IActivityManager;
-import org.eclipse.ui.activities.IWorkbenchActivitySupport;
-import org.eclipse.wst.common.frameworks.internal.enablement.EnablementIdentifier;
-import org.eclipse.wst.common.frameworks.internal.enablement.EnablementManager;
-
-/**
- * @author mdelder
- */
-public class UIEnablementManager extends EnablementManager {
-
-	private IWorkbenchActivitySupport activitySupport = null;
-
-	public UIEnablementManager() {
-		super();
-	}
-
-	protected IActivityManager getActivityManager() {
-		return getActivitySupport().getActivityManager();
-	}
-
-	/**
-	 * @return Returns the activitySupport.
-	 */
-	protected IWorkbenchActivitySupport getActivitySupport() {
-		if (activitySupport == null)
-			activitySupport = PlatformUI.getWorkbench().getActivitySupport();
-		return activitySupport;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.enablement.EnablementManager#createIdentifier(java.lang.String,
-	 *      org.eclipse.core.resources.IProject)
-	 */
-	protected EnablementIdentifier createIdentifier(String identifierId, IProject project) {
-		return new UIEnablementIdentifier(identifierId, project);
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UIOperationHandler.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UIOperationHandler.java
deleted file mode 100644
index 53ccd53..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UIOperationHandler.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on Aug 5, 2004
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.wst.common.frameworks.internal.operations.IOperationHandler;
-
-
-/**
- * @author dfholt
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java -
- * Code Generation - Code and Comments
- */
-public class UIOperationHandler implements IOperationHandler {
-	protected Shell parentShell;
-	final public static String DEFAULT_INFORMATION = "Information"; //$NON-NLS-1$
-	final public static String DEFAULT_ERROR = "Error"; //$NON-NLS-1$
-	final public static String DEFAULT_CONFIRM = "Confirm"; //$NON-NLS-1$
-	protected String informationTitle = DEFAULT_INFORMATION;
-	protected String confirmTitle = DEFAULT_CONFIRM;
-	protected String errorTitle = DEFAULT_ERROR;
-
-	/**
-	 * UIOperationHandler constructor comment.
-	 */
-	public UIOperationHandler() {
-		super();
-	}
-
-	/**
-	 * UIOperationHandler constructor comment.
-	 */
-	public UIOperationHandler(Shell parent) {
-		super();
-		parentShell = parent;
-	}
-
-	/**
-	 * A decision needs to made as to whether an action/operation can continue
-	 */
-	public boolean canContinue(String message) {
-		return MessageDialog.openQuestion(getParentShell(), getConfirmTitle(), message);
-	}
-
-	/**
-	 * A decision needs to made as to whether an action/operation can continue
-	 */
-	public boolean canContinue(String message, String[] items) {
-		return ListMessageDialog.openQuestion(getParentShell(), getConfirmTitle(), message, items);
-	}
-
-	/**
-	 * A decision needs to made as to whether an action/operation can continue. The boolean array
-	 * will return two booleans. The first indicates their response to the original question and the
-	 * second indicates if they selected the apply to all check box.
-	 * 
-	 * Return the return code for the dialog. 0 = Yes, 1 = Yes to all, 2 = No
-	 */
-	public int canContinueWithAllCheck(String message) {
-		MessageDialog dialog = new MessageDialog(getParentShell(), getConfirmTitle(), null, // accept
-					// the
-					// default
-					// window
-					// icon
-					message, MessageDialog.QUESTION, new String[]{IDialogConstants.YES_LABEL, IDialogConstants.YES_TO_ALL_LABEL, IDialogConstants.NO_LABEL}, 1); // yes
-		// is
-		// the
-		// default
-		return dialog.open();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.ibm.etools.j2ee.operations.IOperationHandler#canContinueWithAllCheckAllowCancel(java.lang.String)
-	 */
-	public int canContinueWithAllCheckAllowCancel(String message) {
-		MessageDialog dialog = new MessageDialog(getParentShell(), getConfirmTitle(), null, // accept
-					// the
-					// default
-					// window
-					// icon
-					message, MessageDialog.QUESTION, new String[]{IDialogConstants.YES_LABEL, IDialogConstants.YES_TO_ALL_LABEL, IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL}, 1); // yes
-		// is
-		// the
-		// default
-		return dialog.open();
-	}
-
-	/**
-	 * An error has occurred
-	 */
-	public void error(String message) {
-		MessageDialog.openError(getParentShell(), getErrorTitle(), message);
-	}
-
-	/**
-	 * The dialog title to be used for confirmations
-	 */
-	public java.lang.String getConfirmTitle() {
-		return confirmTitle;
-	}
-
-	/**
-	 * The dialog title to be used for errors
-	 */
-	public java.lang.String getErrorTitle() {
-		return errorTitle;
-	}
-
-	/**
-	 * The dialog title to be used for information
-	 */
-	public java.lang.String getInformationTitle() {
-		return informationTitle;
-	}
-
-	public Shell getParentShell() {
-		if (parentShell == null)
-			parentShell = WTPUIPlugin.getPluginWorkbench().getActiveWorkbenchWindow().getShell();
-
-		return parentShell;
-	}
-
-	/**
-	 * An informational message needs to be presented
-	 */
-	public void inform(String message) {
-		MessageDialog.openInformation(getParentShell(), getInformationTitle(), message);
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (8/9/2001 11:51:36 AM)
-	 * 
-	 * @param newConfirmTitle
-	 *            java.lang.String
-	 */
-	public void setConfirmTitle(java.lang.String newConfirmTitle) {
-		confirmTitle = newConfirmTitle;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (8/9/2001 11:51:36 AM)
-	 * 
-	 * @param newErrorTitle
-	 *            java.lang.String
-	 */
-	public void setErrorTitle(java.lang.String newErrorTitle) {
-		errorTitle = newErrorTitle;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (8/9/2001 11:51:36 AM)
-	 * 
-	 * @param newInformationTitle
-	 *            java.lang.String
-	 */
-	public void setInformationTitle(java.lang.String newInformationTitle) {
-		informationTitle = newInformationTitle;
-	}
-
-	/**
-	 * @see com.ibm.etools.j2ee.operations.IOperationHandler#getContext()
-	 */
-	public Object getContext() {
-		return getParentShell();
-	}
-
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UITesterImpl.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UITesterImpl.java
deleted file mode 100644
index 3e80256..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UITesterImpl.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on Oct 27, 2003
- *
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.jem.util.UITester;
-import org.eclipse.ui.PlatformUI;
-
-
-/**
- * @author schacher
- * 
- * To change the template for this generated type comment go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-public class UITesterImpl implements UITester {
-
-	/**
-	 *  
-	 */
-	public UITesterImpl() {
-		super();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.UITester#isCurrentContextUI()
-	 */
-	public boolean isCurrentContextUI() {
-		try {
-			return PlatformUI.isWorkbenchRunning() || PlatformUI.getWorkbench().isClosing();
-		} catch (RuntimeException e) {
-			return false;
-		}
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ValidationStatus.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ValidationStatus.java
deleted file mode 100644
index e3204e8..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ValidationStatus.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.eclipse.swt.widgets.Control;
-
-/**
- * This object encompas a set of Validation status Creation date: (9/10/2001 5:35:12 PM)
- * 
- * @author: Administrator
- */
-public class ValidationStatus {
-	Hashtable errMsgs = new Hashtable();
-	Hashtable errStatus = new Hashtable();
-	Hashtable tControls = new Hashtable();
-	Map warnMsgs;
-	Map warnStatus;
-
-	/**
-	 * ValidationStatus constructor comment.
-	 */
-	public ValidationStatus() {
-		super();
-	}
-
-	/*
-	 * Look for any error. If there is more than one, return errors according to their key. i.e.,
-	 * lower key errors will be returned first.
-	 */
-	public String getLastErrMsg() {
-
-		Enumeration e = errStatus.keys();
-		String[] errs = new String[errStatus.size()];
-		for (int i = 0; i < errs.length; i++)
-			errs[i] = null;
-		boolean foundOne = false;
-		while (e.hasMoreElements()) {
-			Integer key = (Integer) e.nextElement();
-			if (!((Boolean) errStatus.get(key)).booleanValue()) {
-				errs[key.intValue() % errs.length] = (String) errMsgs.get(key);
-				foundOne = true;
-			}
-		}
-		if (foundOne)
-			for (int i = 0; i < errs.length; i++)
-				if (errs[i] != null)
-					return errs[i];
-		return null;
-	}
-
-	private Map getWarningMsgs() {
-		if (warnMsgs == null)
-			warnMsgs = new HashMap();
-		return warnMsgs;
-	}
-
-	private Map getWarningStatusMap() {
-		if (warnStatus == null)
-			warnStatus = new HashMap();
-		return warnStatus;
-	}
-
-	/*
-	 * Look for any warning. If there is more than one, return warnings according to their key.
-	 * i.e., lower key errors will be returned first.
-	 */
-	public String getLastWarningMsg() {
-		if (warnStatus == null)
-			return null;
-		Iterator e = warnStatus.keySet().iterator();
-		String[] warns = new String[warnStatus.size()];
-		for (int i = 0; i < warns.length; i++)
-			warns[i] = null;
-		boolean foundOne = false;
-		while (e.hasNext()) {
-			Integer key = (Integer) e.next();
-			if (!((Boolean) warnStatus.get(key)).booleanValue()) {
-				warns[key.intValue() % warns.length] = (String) warnMsgs.get(key);
-				foundOne = true;
-			}
-		}
-		if (foundOne)
-			for (int i = 0; i < warns.length; i++)
-				if (warns[i] != null)
-					return warns[i];
-		return null;
-	}
-
-	public String getLastErrMsgAndFocus() {
-
-		Enumeration e = errStatus.keys();
-
-		Integer theOne = null;
-		while (e.hasMoreElements()) {
-			Integer key = (Integer) e.nextElement();
-			if (!((Boolean) errStatus.get(key)).booleanValue()) {
-				if (theOne == null || key.intValue() < theOne.intValue()) {
-					theOne = key;
-				}
-			}
-		}
-		if (theOne != null) {
-			Control control = (Control) tControls.get(theOne);
-			if (control != null) {
-				control.setFocus();
-			}
-			return ((String) errMsgs.get(theOne));
-		}
-		return null;
-	}
-
-	public boolean hasError(Integer key) {
-		Boolean stat = (Boolean) errStatus.get(key);
-		if (stat != null)
-			return stat.booleanValue();
-		return true;
-	}
-
-	public void setControl(Integer key, Control control) {
-		tControls.put(key, control);
-	}
-
-	public void setErrorStatus(Integer key, Boolean status, String msg) {
-		errMsgs.put(key, msg);
-		errStatus.put(key, status);
-	}
-
-	public void setErrorStatus(Integer key, String msg) {
-		errMsgs.put(key, msg);
-		errStatus.put(key, new Boolean(false));
-	}
-
-	public void setWarningStatus(Integer key, String msg) {
-		getWarningMsgs().put(key, msg);
-		getWarningStatusMap().put(key, new Boolean(false));
-	}
-
-	public void setOKStatus(Integer key) {
-		errMsgs.put(key, ""); //$NON-NLS-1$
-		errStatus.put(key, new Boolean(true));
-		if (warnMsgs != null)
-			warnMsgs.put(key, ""); //$NON-NLS-1$
-		if (warnStatus != null)
-			warnStatus.put(key, new Boolean(true));
-	}
-
-	public void setStatus(Integer key, boolean ok, String msg) {
-		errMsgs.put(key, msg);
-		errStatus.put(key, new Boolean(ok));
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPActivityBridgeHelperImpl.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPActivityBridgeHelperImpl.java
deleted file mode 100644
index a8440eb..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPActivityBridgeHelperImpl.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on May 4, 2004
- * 
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import org.eclipse.ui.IPluginContribution;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.activities.IActivityManager;
-import org.eclipse.ui.activities.IIdentifier;
-import org.eclipse.ui.activities.IWorkbenchActivitySupport;
-import org.eclipse.ui.activities.WorkbenchActivityHelper;
-import org.eclipse.wst.common.frameworks.internal.activities.WTPActivityBridgeHelper;
-
-
-/**
- * @author jsholl
- *  
- */
-public class WTPActivityBridgeHelperImpl implements WTPActivityBridgeHelper {
-
-	private IWorkbenchActivitySupport workbenchActivitySupport = null;
-	private IActivityManager activityManager = null;
-
-	public WTPActivityBridgeHelperImpl() {
-		workbenchActivitySupport = PlatformUI.getWorkbench().getActivitySupport();
-		activityManager = workbenchActivitySupport.getActivityManager();
-	}
-
-	public void enableActivity(String activityID, boolean enabled) {
-		Set enabledActivities = activityManager.getEnabledActivityIds();
-		Set newEnabledActivities = null;
-		if (enabled && !enabledActivities.contains(activityID)) {
-			newEnabledActivities = new HashSet();
-			newEnabledActivities.addAll(enabledActivities);
-			newEnabledActivities.add(activityID);
-		}
-		if (!enabled && enabledActivities.contains(activityID)) {
-			newEnabledActivities = new HashSet();
-			newEnabledActivities.addAll(enabledActivities);
-			newEnabledActivities.remove(activityID);
-		}
-		if (null != newEnabledActivities) {
-			workbenchActivitySupport.setEnabledActivityIds(newEnabledActivities);
-		}
-	}
-
-	public Set getEnabledActivityIds() {
-		return activityManager.getEnabledActivityIds();
-	}
-
-	public void setEnabledActivityIds(Set activityIDs) {
-		workbenchActivitySupport.setEnabledActivityIds(activityIDs);
-	}
-
-	public Set getActivityIDsFromContribution(final String localID, final String pluginID) {
-		IIdentifier identifier = activityManager.getIdentifier(WorkbenchActivityHelper.createUnifiedId(new IPluginContribution() {
-			public String getLocalId() {
-				return localID;
-			}
-
-			public String getPluginId() {
-				return pluginID;
-			}
-		}));
-		return identifier.getActivityIds();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPActivityHelper.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPActivityHelper.java
deleted file mode 100644
index 37a0221..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPActivityHelper.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on Apr 9, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.ui.IPluginContribution;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.activities.IIdentifier;
-import org.eclipse.ui.activities.IWorkbenchActivitySupport;
-
-/**
- * @author jsholl
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-public class WTPActivityHelper {
-
-	/**
-	 * @return whether the UI is set up to filter contributions (has defined activity categories).
-	 */
-	public static final boolean isFiltering() {
-		return !PlatformUI.getWorkbench().getActivitySupport().getActivityManager().getDefinedActivityIds().isEmpty();
-	}
-
-	public static boolean allowUseOf(Object object) {
-		if (!isFiltering())
-			return true;
-		if (object instanceof IPluginContribution) {
-			IPluginContribution contribution = (IPluginContribution) object;
-			if (contribution.getPluginId() != null) {
-				IWorkbenchActivitySupport workbenchActivitySupport = PlatformUI.getWorkbench().getActivitySupport();
-				IIdentifier identifier = workbenchActivitySupport.getActivityManager().getIdentifier(createUnifiedId(contribution));
-				return identifier.isEnabled();
-			}
-		}
-		return true;
-	}
-
-
-	public static final String createUnifiedId(IPluginContribution contribution) {
-		if (contribution.getPluginId() != null)
-			return contribution.getPluginId() + '/' + contribution.getLocalId();
-		return contribution.getLocalId();
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPCommonUIResourceHandler.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPCommonUIResourceHandler.java
deleted file mode 100644
index 6b250ff..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPCommonUIResourceHandler.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on May 23, 2004
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * @author vijayb
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java -
- * Code Style - Code Templates
- */
-public class WTPCommonUIResourceHandler extends NLS {
-	private static final String BUNDLE_NAME = "wtpcommonui";//$NON-NLS-1$
-
-	private WTPCommonUIResourceHandler() {
-		// Do not instantiate
-	}
-
-	public static String Project_location_;
-	public static String WTPOperationAction_UI_1;
-	public static String MasterDescriptor_UI_1;
-	public static String WTPOptionalOperationDataModel_UI_1;
-	public static String WTPOperationAction_UI_0;
-	public static String WTPOptionalOperationDataModel_UI_0;
-	public static String MULTIPLE_MODULE_PREF_TEXT;
-	public static String IActionWTPOperation_UI_0;
-	public static String MasterDescriptor_ERROR_2;
-	public static String Name_;
-	public static String WTPWizard_UI_1;
-	public static String WTPWizard_UI_0;
-	public static String Browse_;
-	public static String ExtendableWizard_UI_0;
-	public static String ExtendedWizardPage_ERROR_1;
-	public static String ExtendedWizardPage_ERROR_0;
-	public static String WTPActionDialog_UI_0;
-	public static String TimerQueue_ERROR_0;
-	public static String Timer_UI_1;
-	public static String Timer_UI_0;
-	public static String WizardPageExtensionManager_UI_4;
-	public static String WizardPageExtensionManager_UI_3;
-	public static String WizardPageExtensionManager_UI_2;
-	public static String WizardPageExtensionManager_UI_1;
-	public static String WizardPageExtensionManager_UI_0;
-	public static String Delete_UI_0;
-
-	static {
-		NLS.initializeMessages(BUNDLE_NAME, WTPCommonUIResourceHandler.class);
-	}
-
-	public static String getString(String key, Object[] args) {
-		return NLS.bind(key, args);
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPGenericActionIds.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPGenericActionIds.java
deleted file mode 100644
index faaa453..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPGenericActionIds.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on Jun 16, 2004
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-/**
- * @author mdelder
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java -
- * Code Style - Code Templates
- */
-public interface WTPGenericActionIds {
-
-	String CUT = "org.eclipse.wst.common.generic.Cut"; //$NON-NLS-1$
-	String COPY = "org.eclipse.wst.common.generic.Copy"; //$NON-NLS-1$
-	String PASTE = "org.eclipse.wst.common.generic.Paste"; //$NON-NLS-1$
-	String RENAME = "org.eclipse.wst.common.generic.Rename"; //$NON-NLS-1$
-	String DELETE = "org.eclipse.wst.common.generic.Delete"; //$NON-NLS-1$
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPUIPlugin.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPUIPlugin.java
deleted file mode 100644
index 337a9f5..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPUIPlugin.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-import org.eclipse.core.commands.operations.IUndoableOperation;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.eclipse.wst.common.frameworks.internal.operations.IHeadlessRunnableWithProgress;
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class WTPUIPlugin extends AbstractUIPlugin {
-
-	public static final String PLUGIN_ID = "org.eclipse.wst.common.frameworks.ui"; //$NON-NLS-1$
-	public static final String EXTENDED_VIEWER_REGISTRY_EXTENSION_POINT = "extendedViewer"; //$NON-NLS-1$
-	// The shared instance.
-	private static WTPUIPlugin plugin;
-	// Resource bundle.
-	private ResourceBundle resourceBundle;
-
-	/**
-	 * The constructor.
-	 */
-	public WTPUIPlugin() {
-		super();
-		plugin = this;
-		try {
-			resourceBundle = ResourceBundle.getBundle("org.eclipse.wst.common.frameworks.internal.ui.WTPUIPluginResources"); //$NON-NLS-1$
-		} catch (MissingResourceException x) {
-			resourceBundle = null;
-		}
-	}
-
-	/**
-	 * @param string
-	 * @return
-	 */
-	public static IStatus createErrorStatus(String message) {
-		return createErrorStatus(message, null);
-	}
-
-	/**
-	 * @param string
-	 * @return
-	 */
-	public static IStatus createErrorStatus(String message, Throwable exception) {
-		return new Status(IStatus.ERROR, PLUGIN_ID, -1, message, exception);
-	}
-
-	/**
-	 * Returns the shared instance.
-	 */
-	public static WTPUIPlugin getDefault() {
-		return plugin;
-	}
-
-	public static Logger getLogger() {
-		return Logger.getLogger(PLUGIN_ID);
-	}
-
-	/**
-	 * Returns the workspace instance.
-	 */
-	public static IWorkspace getWorkspace() {
-		return ResourcesPlugin.getWorkspace();
-	}
-
-	/**
-	 * Return the workbench
-	 * 
-	 * This method is internal to the j2ee plugin and must not be called by any other plugins.
-	 */
-
-	public static IWorkbench getPluginWorkbench() {
-		return getDefault().getWorkbench();
-
-	}
-
-	public static RunnableOperationWrapper getRunnableWithProgress(final IUndoableOperation operation) {
-		return new RunnableOperationWrapper(operation);
-	}
-
-	public static IRunnableWithProgress getRunnableWithProgress(IHeadlessRunnableWithProgress aHeadlessRunnableWithProgress) {
-		return new RunnableWithProgressWrapper(aHeadlessRunnableWithProgress);
-	}
-
-	/**
-	 * Returns the string from the plugin's resource bundle, or 'key' if not found.
-	 */
-	public static String getResourceString(String key) {
-		ResourceBundle bundle = WTPUIPlugin.getDefault().getResourceBundle();
-		try {
-			return (bundle != null ? bundle.getString(key) : key);
-		} catch (MissingResourceException e) {
-			return key;
-		}
-	}
-
-	/**
-	 * Returns the plugin's resource bundle,
-	 */
-	public ResourceBundle getResourceBundle() {
-		return resourceBundle;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WorkspaceModifyComposedOperation.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WorkspaceModifyComposedOperation.java
deleted file mode 100644
index fed29fc..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WorkspaceModifyComposedOperation.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.core.runtime.jobs.ISchedulingRule;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-
-/**
- * An operation which delegates its work to a runnable that modifies the workspace.
- * <p>
- * This class may be instantiated; it is not intended to be subclassed.
- * </p>
- */
-public class WorkspaceModifyComposedOperation extends org.eclipse.ui.actions.WorkspaceModifyOperation {
-	protected List fRunnables;
-
-	public WorkspaceModifyComposedOperation(ISchedulingRule rule) {
-		super(rule);
-	}
-
-	/**
-	 * Creates a new operation which will delegate its work to the given runnable.
-	 */
-	public WorkspaceModifyComposedOperation() {
-		super();
-	}
-
-	public WorkspaceModifyComposedOperation(ISchedulingRule rule, List nestedRunnablesWithProgress) {
-		super(rule);
-		fRunnables = nestedRunnablesWithProgress;
-	}
-
-	public WorkspaceModifyComposedOperation(List nestedRunnablesWithProgress) {
-		super();
-		fRunnables = nestedRunnablesWithProgress;
-	}
-
-	/**
-	 * Creates a new operation which will delegate its work to the given runnable.
-	 * 
-	 * @param content
-	 *            the runnable to delegate to when this operation is executed
-	 */
-	public WorkspaceModifyComposedOperation(IRunnableWithProgress nestedOp) {
-		super();
-		getRunnables().add(nestedOp);
-	}
-
-	public boolean addRunnable(IRunnableWithProgress nestedOp) {
-		return getRunnables().add(nestedOp);
-	}
-
-	protected void execute(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-		int size = fRunnables.size();
-		monitor.beginTask("", size);//$NON-NLS-1$
-		for (int i = 0; i < fRunnables.size(); i++) {
-			IRunnableWithProgress op = (IRunnableWithProgress) fRunnables.get(i);
-			op.run(new SubProgressMonitor(monitor, 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK));
-		}
-	}
-
-	protected List getRunnables() {
-		if (fRunnables == null)
-			fRunnables = new ArrayList(3);
-		return fRunnables;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/package.html b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/package.html
deleted file mode 100644
index fb8fe10..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/package.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<html>
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<link rel="stylesheet" href="../../../../../..//apistyles.css" type="text/css">
-<title>wtp operation api overview</title>
-</head>
-<body>
-<p>
-			The WTP Wizard API allows clients to build wizards in conjunction with
-			the WTP Operation Framework quickly and with minimal effort.
-		</p>
-<table width="500">
-<tr>
-<td>
-<p>Under Construction.</p>
-</td>
-</tr>
-</table>
-<table cellpadding="10" cellspacing="10">
-<tr>
-<td>
-<p>
-<img src="escape_out_to_source_folder level/overview/your_image.jpg"></p>
-</td>
-</tr>
-<tr>
-<td>
-<p>
-<i>Figure 1: Image description</i>
-</p>
-</td>
-</tr>
-</table>
-</body>
-</html>
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/package.xml b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/package.xml
deleted file mode 100644
index e217a53..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/package.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html>
-	<head>
-		<meta
-			name="root"
-			content="../../../../../../" />
-		<title>wtp operation api overview</title>
-	</head>
-
-	<body>
-		<abstract>
-			The WTP Wizard API allows clients to build wizards in conjunction with
-			the WTP Operation Framework quickly and with minimal effort.
-		</abstract>
-		<p>Under Construction.</p>
-		<img src="escape_out_to_source_folder level/overview/your_image.jpg" caption="Image description" />
-	</body>
-</html>
diff --git a/plugins/org.eclipse.wst.common.frameworks/.classpath b/plugins/org.eclipse.wst.common.frameworks/.classpath
index 2bf4212..b9e915c 100644
--- a/plugins/org.eclipse.wst.common.frameworks/.classpath
+++ b/plugins/org.eclipse.wst.common.frameworks/.classpath
@@ -2,7 +2,7 @@
 <classpath>
 	<classpathentry kind="src" path="src/"/>
 	<classpathentry kind="src" path="src-non_workbench/"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.wst.common.frameworks/.cvsignore b/plugins/org.eclipse.wst.common.frameworks/.cvsignore
index fd6af57..59285f6 100644
--- a/plugins/org.eclipse.wst.common.frameworks/.cvsignore
+++ b/plugins/org.eclipse.wst.common.frameworks/.cvsignore
@@ -7,3 +7,4 @@
 commonsrc.zip
 @dot
 src.zip
+javaCompiler...args
diff --git a/plugins/org.eclipse.wst.common.frameworks/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.common.frameworks/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..b290b5f
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.frameworks/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,62 @@
+#Sat Mar 24 02:07:18 EDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=ignore
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=error
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=ignore
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/plugins/org.eclipse.wst.common.frameworks/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.frameworks/META-INF/MANIFEST.MF
index 7a9bee2..24494b1 100644
--- a/plugins/org.eclipse.wst.common.frameworks/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.frameworks/META-INF/MANIFEST.MF
@@ -1,24 +1,25 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
-Bundle-Name: org.eclipse.wst.common.frameworks
+Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.common.frameworks; singleton:=true
-Bundle-Version: 1.0.0
+Bundle-Version: 1.1.200.qualifier
 Bundle-Activator: org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin
 Bundle-Vendor: %provider
 Bundle-Localization: plugin
-Export-Package: .,
- org.eclipse.wst.common.frameworks.datamodel,
+Export-Package: org.eclipse.wst.common.frameworks.datamodel,
  org.eclipse.wst.common.frameworks.datamodel.properties,
- org.eclipse.wst.common.frameworks.internal,
- org.eclipse.wst.common.frameworks.internal.activities,
- org.eclipse.wst.common.frameworks.internal.datamodel,
- org.eclipse.wst.common.frameworks.internal.enablement,
- org.eclipse.wst.common.frameworks.internal.enablement.nonui,
- org.eclipse.wst.common.frameworks.internal.operations,
- org.eclipse.wst.common.frameworks.internal.plugin
-Require-Bundle: org.eclipse.core.resources,
- org.eclipse.core.runtime,
- org.eclipse.core.commands,
- org.eclipse.jem.util,
- org.eclipse.wst.common.environment
-Eclipse-AutoStart: true
+ org.eclipse.wst.common.frameworks.internal;x-internal:=true,
+ org.eclipse.wst.common.frameworks.internal.activities;x-internal:=true,
+ org.eclipse.wst.common.frameworks.internal.datamodel;x-internal:=true,
+ org.eclipse.wst.common.frameworks.internal.enablement;x-internal:=true,
+ org.eclipse.wst.common.frameworks.internal.enablement.nonui;x-internal:=true,
+ org.eclipse.wst.common.frameworks.internal.operations;x-internal:=true,
+ org.eclipse.wst.common.frameworks.internal.plugin;x-internal:=true
+Require-Bundle: org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.core.commands;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.jem.util;bundle-version="[2.0.100,3.0.0)",
+ org.eclipse.wst.common.environment;bundle-version="[1.0.200,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.ecore;bundle-version="[2.4.0,3.0.0)"
+Eclipse-LazyStart: true
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/plugins/org.eclipse.wst.common.frameworks/about.html b/plugins/org.eclipse.wst.common.frameworks/about.html
index 6f6b96c..2199df3 100644
--- a/plugins/org.eclipse.wst.common.frameworks/about.html
+++ b/plugins/org.eclipse.wst.common.frameworks/about.html
@@ -1,22 +1,34 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
+<HTML>
+
 <head>
 <title>About</title>
 <meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
 </head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
 
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+<BODY lang="EN-US">
 
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
+<H3>About This Content</H3>
 
-</body>
-</html>
\ No newline at end of file
+<P>June, 2008</P>
+
+<H3>License</H3>
+
+<P>The Eclipse Foundation makes available all content in this plug-in 
+("Content"). Unless otherwise indicated below, the Content is provided to you 
+under the terms and conditions of the Eclipse Public License Version 1.0 
+("EPL"). A copy of the EPL is available at
+<A href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</A>. 
+For purposes of the EPL, "Program" will mean the Content.</P>
+
+<P>If you did not receive this Content directly from the Eclipse Foundation, the 
+Content is being redistributed by another party ("Redistributor") and different 
+terms and conditions may apply to your use of any object code in the Content. 
+Check the Redistributor’s license that was provided with the Content. If no such 
+license exists, contact the Redistributor. Unless otherwise indicated below, the 
+terms and conditions of the EPL still apply to any source code in the Content 
+and such source code may be obtained at
+<A href="http://www.eclipse.org/">http://www.eclipse.org/</A>.</P>
+
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.wst.common.frameworks/plugin.properties b/plugins/org.eclipse.wst.common.frameworks/plugin.properties
index d1cb8b8..d56d20d 100644
--- a/plugins/org.eclipse.wst.common.frameworks/plugin.properties
+++ b/plugins/org.eclipse.wst.common.frameworks/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2005 IBM Corporation and others.
+# Copyright (c) 2003, 2006 IBM Corporation and others.
 # 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
@@ -9,6 +9,7 @@
 # IBM Corporation - initial API and implementation
 ###############################################################################
 provider=Eclipse.org
+pluginName=Common Frameworks
 OperationExtension=OperationExtension
 Function_Extension_Group=Function Extension Group
 WTPActivityBridgeHelper=WTPActivityBridgeHelper
diff --git a/plugins/org.eclipse.wst.common.frameworks/plugin.xml b/plugins/org.eclipse.wst.common.frameworks/plugin.xml
index 0f4338a..0ac2055 100644
--- a/plugins/org.eclipse.wst.common.frameworks/plugin.xml
+++ b/plugins/org.eclipse.wst.common.frameworks/plugin.xml
@@ -26,5 +26,13 @@
             className="org.eclipse.wst.common.frameworks.internal.enablement.EnablementManager">
       </uiContextSensitiveClass>
    </extension>
+   <extension 
+       point="org.eclipse.jem.util.uiContextSensitiveClass">
+       <uiContextSensitiveClass
+          key="ISimpleValidateEditContext"
+          className="org.eclipse.wst.common.frameworks.internal.SimpleValidateEditContextHeadless"
+          context="Headless">
+      </uiContextSensitiveClass>
+  </extension>
 
 </plugin>
diff --git a/plugins/org.eclipse.wst.common.frameworks/schema/DataModelProviderExtension.exsd b/plugins/org.eclipse.wst.common.frameworks/schema/DataModelProviderExtension.exsd
index 786c1c3..301984a 100644
--- a/plugins/org.eclipse.wst.common.frameworks/schema/DataModelProviderExtension.exsd
+++ b/plugins/org.eclipse.wst.common.frameworks/schema/DataModelProviderExtension.exsd
@@ -6,7 +6,7 @@
          <meta.schema plugin="org.eclipse.wst.common.frameworks" id="DataModelProviderExtension" name="Data Model Provider"/>
       </appInfo>
       <documentation>
-         
+         This can be used to extend an existing data model provider with a custom data model provider.
       </documentation>
    </annotation>
 
@@ -49,14 +49,14 @@
          <attribute name="id" type="string">
             <annotation>
                <documentation>
-                  
+                  an optional identifier for the data model provider extension
                </documentation>
             </annotation>
          </attribute>
          <attribute name="class" type="string" use="required">
             <annotation>
                <documentation>
-                  
+                  required fully qualified classname of the data model provider to extend
                </documentation>
             </annotation>
          </attribute>
@@ -68,14 +68,14 @@
          <attribute name="providerType" type="string" use="required">
             <annotation>
                <documentation>
-                  
+                  the type the data model provider defines
                </documentation>
             </annotation>
          </attribute>
          <attribute name="providerID" type="string" use="required">
             <annotation>
                <documentation>
-                  
+                  required identifier for the defined type
                </documentation>
             </annotation>
          </attribute>
@@ -87,14 +87,14 @@
          <attribute name="providerType" type="string" use="required">
             <annotation>
                <documentation>
-                  
+                  fully qualified type the data model provider implements
                </documentation>
             </annotation>
          </attribute>
          <attribute name="providerID" type="string" use="required">
             <annotation>
                <documentation>
-                  
+                  required identifier for the implemented type
                </documentation>
             </annotation>
          </attribute>
diff --git a/plugins/org.eclipse.wst.common.frameworks/schema/OperationExtension.exsd b/plugins/org.eclipse.wst.common.frameworks/schema/OperationExtension.exsd
index 5fafe57..d6f1ea2 100644
--- a/plugins/org.eclipse.wst.common.frameworks/schema/OperationExtension.exsd
+++ b/plugins/org.eclipse.wst.common.frameworks/schema/OperationExtension.exsd
@@ -6,7 +6,7 @@
          <meta.schema plugin="org.eclipse.wst.common.frameworks" id="OperationExtension" name="Operation Extension"/>

       </appInfo>

       <documentation>

-         

+         This is the methodology for extending an existing operation by adding either a pre operation to be executed prior, or a post operation to be executed after the original operation.

       </documentation>

    </annotation>

 

@@ -46,21 +46,21 @@
          <attribute name="preOperationClass" type="string">

             <annotation>

                <documentation>

-                  

+                  optional fully qualified name of the pre-operation class

                </documentation>

             </annotation>

          </attribute>

          <attribute name="postOperationClass" type="string">

             <annotation>

                <documentation>

-                  

+                  optional fully qualified name of the post-operation class

                </documentation>

             </annotation>

          </attribute>

          <attribute name="id" type="string" use="required">

             <annotation>

                <documentation>

-                  

+                  required id of the operation to extend

                </documentation>

             </annotation>

          </attribute>

diff --git a/plugins/org.eclipse.wst.common.frameworks/schema/WTPActivityBridgeHelper.exsd b/plugins/org.eclipse.wst.common.frameworks/schema/WTPActivityBridgeHelper.exsd
index c8f926a..67d50e7 100644
--- a/plugins/org.eclipse.wst.common.frameworks/schema/WTPActivityBridgeHelper.exsd
+++ b/plugins/org.eclipse.wst.common.frameworks/schema/WTPActivityBridgeHelper.exsd
@@ -6,7 +6,7 @@
          <meta.schema plugin="org.eclipse.wst.common.frameworks" id="WTPActivityBridgeHelper" name="WTP Activity Bridge Helper"/>

       </appInfo>

       <documentation>

-         

+         This is used to declare an activity bridge helper which is useful when enabling capabilities.

       </documentation>

    </annotation>

 

@@ -44,7 +44,7 @@
          <attribute name="class" type="string" use="required">

             <annotation>

                <documentation>

-                  

+                  fully qualified class name for the WTPActivityBridgeHelper class

                </documentation>

             </annotation>

          </attribute>

diff --git a/plugins/org.eclipse.wst.common.frameworks/schema/functionGroup.exsd b/plugins/org.eclipse.wst.common.frameworks/schema/functionGroup.exsd
index 2430e97..1809594 100644
--- a/plugins/org.eclipse.wst.common.frameworks/schema/functionGroup.exsd
+++ b/plugins/org.eclipse.wst.common.frameworks/schema/functionGroup.exsd
@@ -71,14 +71,14 @@
          <attribute name="icon" type="string">

             <annotation>

                <documentation>

-                  

+                  Optional path to an icon image.

                </documentation>

             </annotation>

          </attribute>

          <attribute name="url" type="string">

             <annotation>

                <documentation>

-                  

+                  Optional url for the function group.

                </documentation>

             </annotation>

          </attribute>

diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/AbstractDataModelOperation.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/AbstractDataModelOperation.java
index 4e44b8f..705b22a 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/AbstractDataModelOperation.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/AbstractDataModelOperation.java
@@ -1,22 +1,19 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.wst.common.frameworks.datamodel;
 
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.commands.operations.AbstractOperation;
 import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
@@ -25,7 +22,9 @@
 import org.eclipse.wst.common.environment.IEnvironment;
 
 /**
+ * <p>
  * Abstract implementation for an IDataModelOperation.
+ * </p>
  * 
  * @see org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation
  * 
@@ -34,7 +33,9 @@
 public abstract class AbstractDataModelOperation extends AbstractOperation implements IDataModelOperation {
 
 	/**
+	 * <p>
 	 * Convenience IStatus.OK.
+	 * </p>
 	 */
 	protected static final IStatus OK_STATUS = IDataModelProvider.OK_STATUS;
 
@@ -42,12 +43,16 @@
 	private IEnvironment environment;
 
 	/**
+	 * <p>
 	 * The IDataModel used by this IDataModelOperation
+	 * </p>
 	 */
 	protected IDataModel model;
 
 	/**
+	 * <p>
 	 * Default constructor.
+	 * </p>
 	 */
 	public AbstractDataModelOperation() {
 		super(""); //$NON-NLS-1$
@@ -55,7 +60,9 @@
 	}
 
 	/**
+	 * <p>
 	 * Constructor taking an IDataModel
+	 * </p>
 	 * 
 	 * @param model
 	 *            the IDataModel used to drive this operation
@@ -67,7 +74,9 @@
 	}
 
 	/**
+	 * <p>
 	 * Default implementation of setID().
+	 * <p>
 	 * 
 	 * @see IDataModelOperation#setID(String)
 	 */
@@ -76,7 +85,9 @@
 	}
 
 	/**
+	 * <p>
 	 * Default implementation of getID().
+	 * </p>
 	 * 
 	 * @see IDataModelOperation#getID()
 	 */
@@ -85,7 +96,9 @@
 	}
 
 	/**
+	 * <p>
 	 * Default implementation of setDataModel()
+	 * </p>
 	 * 
 	 * @see IDataModelOperation#setDataModel(IDataModel)
 	 */
@@ -94,7 +107,9 @@
 	}
 
 	/**
+	 * <p>
 	 * Default implementation of getDataModel()
+	 * </p>
 	 * 
 	 * @see IDataModelOperation#getDataModel()
 	 */
@@ -102,79 +117,71 @@
 		return model;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation#getDataModelIDs()
-	 */
-	public Set getDataModelIDs() {
-		return new HashSet();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation#getSchedulingRule()
+	/**
+	 * <p>
+	 * Default implementation of getSchedulingRule() returns
+	 * <code>ResourcesPlugin.getWorkspace().getRoot()</code>.
+	 * </p>
+	 * 
+	 * @see IDataModelOperation#getSchedulingRule()
 	 */
 	public ISchedulingRule getSchedulingRule() {
-		return null;
+		return ResourcesPlugin.getWorkspace().getRoot();
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation#getOperationExecutionFlags()
+	/**
+	 * <p>
+	 * Default implementation of getOperationExecutionFlags() returns
+	 * <code>IWorkspace.AVOID_UPDATE</code>.
+	 * </p>
+	 * 
+	 * @see IDataModelOperation#getOperationExecutionFlags()
 	 */
 	public int getOperationExecutionFlags() {
 		return IWorkspace.AVOID_UPDATE;
 	}
 
-  /**
-   * The framework will set the environment on this operation 
-   * before it is executed.  The operation can then use the
-   * environment to report status, log information, and access
-   * resources in an environment neutral way.
-   */
+	/**
+	 * <p>
+	 * The framework will set the environment on this operation before it is executed. The operation
+	 * can then use the environment to report status, log information, and access resources in an
+	 * environment neutral way.
+	 * </p>
+	 * 
+	 * @param env
+	 *            the environment.
+	 * 
+	 */
 	public final void setEnvironment(IEnvironment env) {
 		environment = env;
 	}
 
-  /**
-   * An operation can call this method to get the environment
-   * that has been set by the operations framework.
-   * @return returns an environment.
-   */
+	/**
+	 * <p>
+	 * An operation can call this method to get the environment that has been set by the operations
+	 * framework.
+	 * </p>
+	 * 
+	 * @return returns an environment.
+	 */
 	public final IEnvironment getEnvironment() {
 		return environment;
 	}
 
-  /**
-   * An operation can specify a list of operations that should run
-   * before this operation.  Subclasses can override this method to 
-   * provide these operations.  The operations provided will be
-   * executed in the order specified in the list.
-   * @return returns a list of data model operations or null.  
-   * Null indicates that there are no pre operations.
-   */
-  public List getPreOperations()
-  {
-    return null; 
-  }
-  
-  /**
-   * An operation can specify a list of operations that should run
-   * after this operation.  Subclasses can override this method to 
-   * provide these operations.  The operations provided will be
-   * executed in the order specified in the list.
-   * @return returns a list of data model operations or null.
-   * Null indicates that there are no post operations.
-   */
-  public List getPostOperations()
-  {
-    return null; 
-  }
-  
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.commands.operations.IUndoableOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
+	/**
+	 * <p>
+	 * Default empty implementation of redo.
+	 * </p>
 	 */
 	public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
 		return Status.OK_STATUS;
 	}
 
+	/**
+	 * <p>
+	 * Default empty implementation of undo.
+	 * </p>
+	 */
 	public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
 		return Status.OK_STATUS;
 	}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/DataModelFactory.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/DataModelFactory.java
index 02df2f7..5cb0732 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/DataModelFactory.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/DataModelFactory.java
@@ -1,15 +1,16 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.wst.common.frameworks.datamodel;
 
+import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.common.frameworks.internal.datamodel.DataModelExtensionReader;
 import org.eclipse.wst.common.frameworks.internal.datamodel.DataModelImpl;
 
@@ -77,16 +78,42 @@
 
 	/**
 	 * <p>
-	 * Looks up the appropriate IDataModelProvider using the name of the specified class. This
-	 * method is equavalent to <code>createDataModel(dataModelProviderClassID.getName())</code>.
+	 * Builds an {@link IDataModel} using the specified Class. This Class will
+	 * normally be a sub interface of {@link IDataModelProperties}. If the
+	 * Class it is an {@link IDataModelProperties}.class then this method will
+	 * attempt to use the {@link IDataModelProperties#_provider_class} field to
+	 * load the {@link IDataModelProvider} with which to back the
+	 * {@link IDataModel}. If this fails, or if the Class is not an interface,
+	 * then this method is equavalent to
+	 * <code>createDataModel(aClass.getName())</code>.
 	 * </p>
 	 * 
-	 * @param dataModelProviderClass
-	 *            the class whose name is the id of the IDataModelProvider
+	 * @param aClass
+	 *            an {@link IDataModelProperties}.class or the class whose name
+	 *            is the id of the IDataModelProvider
 	 * @return a new IDataModel
 	 */
-	public static IDataModel createDataModel(Class dataModelProviderClass) {
-		return createDataModel(dataModelProviderClass.getName());
+	public static IDataModel createDataModel(Class aClass) {
+		if(aClass.isInterface()){
+				try{
+					Class clazz = (Class)aClass.getField("_provider_class").get(null);
+					if(clazz != null){
+						IDataModelProvider provider = (IDataModelProvider)clazz.newInstance();
+						return createDataModel(provider);
+					}
+				} catch (NoSuchFieldException e) {
+					//ignore; the interface may not have defined the field and is relying on extensions.
+				} catch (IllegalArgumentException e) {
+					Logger.getLogger().logError(e);
+				} catch (SecurityException e) {
+					Logger.getLogger().logError(e);
+				} catch (IllegalAccessException e) {
+					Logger.getLogger().logError(e);
+				} catch (InstantiationException e) {
+					Logger.getLogger().logError(e);
+				}  
+		}
+		return createDataModel(aClass.getName());
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModel.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModel.java
index 7c37928..fa31c67 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModel.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModel.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -21,7 +21,7 @@
  * execution, and Wizard generation.
  * </p>
  * <p>
- * IDataModels are primaryly an intelligent mechanism for managing data. Each IDataModel tracks
+ * IDataModels are primarily an intelligent mechanism for managing data. Each IDataModel tracks
  * specific Objects known as "properties". Each property may be set or get using its property name.
  * A Collection of property names for an IDataModel instance may be retreived using
  * <code>getAllProperties()</code>. In addition to getting/setting properties, IDataModels may
@@ -86,7 +86,10 @@
 
 	/**
 	 * <p>
-	 * Returns the default operation to execute against this IDataModel.
+	 * Returns the default operation to execute against this IDataModel. The returned operation is
+	 * derived from the operation supplied by the backing IDataModelProvider. The returned type is
+	 * IDataModelManagerOperation which adds additional functionality to the returned
+	 * IDataModelOperation.
 	 * </p>
 	 * <p>
 	 * An IDataModel implementor defines this in IDataModelProvider.
@@ -359,8 +362,10 @@
 	public IDataModel removeNestedModel(String nestedModelName);
 
 	/**
+	 * <p>
 	 * Returns <code>true</code> if a nested model exists (at the top level only) with the
 	 * specified name and <code>false</code> otherwise.
+	 * </p>
 	 * 
 	 * @param nestedModelName
 	 *            the name of the nested IDataModel to check.
@@ -370,9 +375,11 @@
 	public boolean isNestedModel(String nestedModelName);
 
 	/**
+	 * <p>
 	 * Returns the nested IDataModel identified the by the specified name. A RuntimeException is
 	 * thrown if there is no such nested IDataModel (i.e. isNestedModel() would return
 	 * <code>false</code>).
+	 * </p>
 	 * 
 	 * @param nestedModelName
 	 *            the name of the nested IDataModel to get.
@@ -381,22 +388,28 @@
 	public IDataModel getNestedModel(String nestedModelName);
 
 	/**
+	 * <p>
 	 * Returns a Collection of all nested IDataModels, or an empty Collection if none exist.
+	 * </p>
 	 * 
 	 * @return a Collection of all nested IDataModels, or an empty Collection if none exist.
 	 */
 	public Collection getNestedModels();
 
 	/**
+	 * <p>
 	 * Returns a Collection of all nested IDataModels names, or an empty Collection if none exist.
+	 * </p>
 	 * 
 	 * @return a Collection of all nested IDataModels names, or an empty Collection if none exist.
 	 */
 	public Collection getNestedModelNames();
 
 	/**
+	 * <p>
 	 * Returns a Collection of all nesting (the inverse of nested) IDataModels, or an empty
 	 * Collection if none exist.
+	 * </p>
 	 * 
 	 * @return a Collection of all nesting (the inverse of nested) IDataModels, or an empty
 	 *         Collection if none exist.
@@ -404,8 +417,10 @@
 	public Collection getNestingModels();
 
 	/**
+	 * <p>
 	 * Returns a Collection of all base properties (not including nested properties), or an empty
 	 * Collection if none exist.
+	 * </p>
 	 * 
 	 * @return a Collection of all base properties (not including nested properties), or an empty
 	 *         Collection if none exist.
@@ -413,8 +428,10 @@
 	public Collection getBaseProperties();
 
 	/**
+	 * <p>
 	 * Returns a Collection of all properties of recursively nested IDataModels, or an empty
 	 * Collection if none exist.
+	 * </p>
 	 * 
 	 * @return a Collection of all properties of recursively nested IDataModels, or an empty
 	 *         Collection if none exist.
@@ -422,8 +439,10 @@
 	public Collection getNestedProperties();
 
 	/**
+	 * <p>
 	 * Returns a Collection of all properties (the union of getBaseProperties() and
 	 * getNestedProperties()), or an empty Collection if none exist.
+	 * </p>
 	 * 
 	 * @return a Collection of all properties (the union of getBaseProperties() and
 	 *         getNestedProperties()), or an empty Collection if none exist.
@@ -431,9 +450,11 @@
 	public Collection getAllProperties();
 
 	/**
+	 * <p>
 	 * Returns <code>true</code> if the specified propertyName is a valid propertyName for this
 	 * root IDataModel only. Nested IDataModels are not checked, though it is possible for a nested
 	 * IDataModel to contain the same property.
+	 * </p>
 	 * 
 	 * @param propertyName
 	 *            the property name to check
@@ -446,8 +467,10 @@
 	public boolean isBaseProperty(String propertyName);
 
 	/**
+	 * <p>
 	 * Returns <code>true</code> if the specified propertyName is a valid propertyName for this
 	 * DataModel or any of its (recursively) nested IDataModels.
+	 * </p>
 	 * 
 	 * @param propertyName
 	 *            the property name to check
@@ -458,9 +481,11 @@
 	public boolean isProperty(String propertyName);
 
 	/**
+	 * <p>
 	 * Returns <code>true</code> if the specified propertyName is a valid propertyName for any of
 	 * its (recursively) nested IDataModels. The root IDataModel is not checked, though it is
 	 * possible for the root IDataModel to contain the same property.
+	 * </p>
 	 * 
 	 * @param propertyName
 	 *            the property name to check
@@ -470,8 +495,10 @@
 	public boolean isNestedProperty(String propertyName);
 
 	/**
+	 * <p>
 	 * Returns <code>true</code> if the specified property has been set on the IDataModel. If it
 	 * has not been set, then a call to get the same property will return the default value.
+	 * </p>
 	 * 
 	 * @param propertyName
 	 *            the property name to check
@@ -611,7 +638,6 @@
 	 * An IDataModel implementor defines this in IDataModelProvider.
 	 * </p>
 	 * 
-	 * 
 	 * @param propertyName
 	 *            then name of the property to check
 	 * @return the array of valid DataModelPropertyDescriptors
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelOperation.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelOperation.java
index 8029d64..de532a9 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelOperation.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelOperation.java
@@ -1,17 +1,15 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.wst.common.frameworks.datamodel;
 
-import java.util.List;
-import java.util.Set;
 import org.eclipse.core.commands.operations.IUndoableOperation;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.eclipse.wst.common.environment.IEnvironment;
@@ -22,6 +20,11 @@
  * may be extended by third party clients using the extended operation framework.
  * </p>
  * 
+ * <p>
+ * This interface is not intended to be implemented by clients. Clients should subclass
+ * {@link AbstractDataModelOperation}.
+ * </p>
+ * 
  * @see org.eclipse.wst.common.frameworks.datamodel.IDataModel
  * 
  * @since 1.0
@@ -66,37 +69,55 @@
 	 */
 	public IDataModel getDataModel();
 
-	public Set getDataModelIDs();
-
+	/**
+	 * <p>
+	 * Returns the ISchedulingRule used for executing this job using
+	 * {@link org.eclipse.core.resources.IWorkspace#run(org.eclipse.core.resources.IWorkspaceRunnable, ISchedulingRule, int, org.eclipse.core.runtime.IProgressMonitor)}.
+	 * If <code>null</code> is returned, then IWorkspace.getRoot() is used as the ISchedulingRule
+	 * during execution.
+	 * </p>
+	 * 
+	 * @return the ISchedulingRule
+	 * 
+	 * @see #getOperationExecutionFlags()
+	 * @see org.eclipse.core.resources.IWorkspace#run(org.eclipse.core.resources.IWorkspaceRunnable, ISchedulingRule, int,
+	 *      org.eclipse.core.runtime.IProgressMonitor)
+	 */
 	public ISchedulingRule getSchedulingRule();
 
+	/**
+	 * <p>
+	 * Returns the OperationExecutionFlags used for executing this Operation as a workspace job.
+	 * {@link org.eclipse.core.resources.IWorkspace#run(org.eclipse.core.resources.IWorkspaceRunnable, ISchedulingRule, int, org.eclipse.core.runtime.IProgressMonitor)}.
+	 * </p>
+	 * 
+	 * @return the OperationExecutionFlags
+	 * 
+	 * @see #getSchedulingRule()
+	 * @seeorg.eclipse.core.resources.IWorkspace#run(org.eclipse.core.resources.IWorkspaceRunnable, ISchedulingRule, int,
+	 *      org.eclipse.core.runtime.IProgressMonitor)
+	 */
 	public int getOperationExecutionFlags();
 
-  /**
-   * The framework will set the environment on this operation 
-   * before it is executed.  The operation can then use the
-   * environment to report status, log information, and access
-   * resources in an environment neutral way.
-   */
-  public void setEnvironment( IEnvironment environment );
-  
-  /**
-   * An operation can specify a list of operations that should run
-   * before this operation.  Subclasses can override this method to 
-   * provide these operations.  The operations provided will be
-   * executed in the order specified in the list.
-   * @return returns a list of data model operations or null.  
-   * Null indicates that there are no pre operations.
-   */
-  public List getPreOperations();
-  
-  /**
-   * An operation can specify a list of operations that should run
-   * after this operation.  Subclasses can override this method to 
-   * provide these operations.  The operations provided will be
-   * executed in the order specified in the list.
-   * @return returns a list of data model operations or null.
-   * Null indicates that there are no post operations.
-   */
-  public List getPostOperations();
+	/**
+	 * <p>
+	 * The framework will set the environment on this operation before it is executed. The operation
+	 * can then use the environment to report status, log information, and access resources in an
+	 * environment neutral way.
+	 * <p>
+	 * 
+	 * @param environment
+	 *            the IEnvironment to set.
+	 */
+	public void setEnvironment(IEnvironment environment);
+
+	/**
+	 * Returns the IEvironment set in {@link #setEnvironment(IEnvironment)}}
+	 * 
+	 * @return the set IEnvironment
+	 * 
+	 * @see #setEnvironment(IEnvironment)
+	 */
+	public IEnvironment getEnvironment();
+
 }
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelProperties.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelProperties.java
index a52d3cf..f9be08e 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelProperties.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelProperties.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -9,15 +9,33 @@
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.wst.common.frameworks.datamodel;
+
 /**
  * <p>
- * IDataModelProperties provides the base interface for all Data Model Properties interfaces.
- * The interface itself can be used to access an instance of the IDataModel and IDataModelProvider which will be registered
- * against with the interface.  IDataModels are not meant to be instantiated directly, rather they are built from an
- * IDataModelProvider. In this way the user will call to the DataModelFactory passing in the interface,
- * which will return the correct IDataModel. 
+ * IDataModelProperties provides the base interface for all Data Model
+ * Properties interfaces. Sub interface classes (e.g.
+ * <code>some.company.IFooDataModelProperties.class</code>) should be used to
+ * create instances of IDataModels using the
+ * {@link DataModelFactory#createDataModel(Class)} method. In order for this
+ * mechanism to work, the backing {@link IDataModelProvider} class must be
+ * registerd to support the sub IDataModelProperties interface in one of two
+ * ways. This registration should be performed by the model developer.
  * </p>
  * <p>
+ * The first way to register the correct {@link IDataModelProvider} class is for
+ * the interface to define a public static Class _provider_class field
+ * which is set to the {@link IDataModelProvider} class, e.g.
+ * </p>
+ * <p>
+ * <code>public static final Class _provider_class = some.company.FooDataModelProvider.class</code>
+ * </p>
+ * The above mechanism is recommended whenever the {@link IDataModelProperties} and
+ * {@link IDataModelProvider} classes are both defined in the same plugin scope.
+ * A second mechanism using the DataModelProviderExtension extension point is
+ * available when the {@link IDataModelProvider} class is definend outside the
+ * {@link IDataModelProperties} plugin scope.
+ * 
+ * <p>
  * This interface is not intended to be implemented by clients.
  * </p>
  * 
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelProvider.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelProvider.java
index 63a2723..c6abfd9 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelProvider.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelProvider.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -17,8 +17,12 @@
 import org.eclipse.core.runtime.Status;
 
 /**
- * IDataModelProviders are used by the DataMdoelFactory to construct IDataModels.  
+ * IDataModelProviders are used by the DataMdoelFactory to construct IDataModels.
  * 
+ * <p>
+ * This interface is not intended to be implemented by clients. Clients should subclass
+ * {@link AbstractDataModelProvider}.
+ * </p>
  * 
  * @since 1.0
  */
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/DataModelManager.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/DataModelManager.java
deleted file mode 100644
index 5396fd7..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/DataModelManager.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others. 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
-package org.eclipse.wst.common.frameworks.internal;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-
-public class DataModelManager {
-	private IDataModel rootDataModel;
-	private HashMap nestedModelEntries; // Element = java.lang.Integer
-
-	public DataModelManager(IDataModel rootDataModel) {
-		this.rootDataModel = rootDataModel;
-		nestedModelEntries = new HashMap();
-
-		Iterator names = this.rootDataModel.getNestedModelNames().iterator();
-
-		while (names.hasNext()) {
-			String nestedModelName = (String) names.next();
-			nestedModelEntries.put(nestedModelName, new Integer(1));
-		}
-	}
-
-	public IDataModel getDataModel() {
-		return rootDataModel;
-	}
-
-	public void addNestedDataModel(String dataModelID) {
-		Integer referenceCount = (Integer) nestedModelEntries.get(dataModelID);
-
-		if (referenceCount == null) {
-			// This nested data model is not currently in the root data model.
-			// Therefore, we need to create one and add it as a nested data model.
-			IDataModel dataModel = DataModelFactory.createDataModel(dataModelID);
-
-			if (dataModel != null) {
-				rootDataModel.addNestedModel(dataModelID, dataModel);
-				nestedModelEntries.put(dataModelID, new Integer(1));
-			}
-		} else {
-			// We already have this data model nested in the root data model
-			// so just increment the reference count.
-			nestedModelEntries.put(dataModelID, new Integer(referenceCount.intValue() + 1));
-		}
-	}
-
-	public void removeNestedDataModel(String dataModelID) {
-		Integer referenceCount = (Integer) nestedModelEntries.get(dataModelID);
-
-		if (referenceCount != null) {
-			int newRefCount = referenceCount.intValue() - 1;
-
-			if (newRefCount == 0) {
-				// Remove the nested data model.
-				nestedModelEntries.remove(dataModelID);
-				rootDataModel.removeNestedModel(dataModelID);
-			} else {
-				// Set the table entry to the decremented ref count value.
-				nestedModelEntries.put(dataModelID, new Integer(newRefCount));
-			}
-		}
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/DoNotUseMeThisWillBeDeletedPost15.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/DoNotUseMeThisWillBeDeletedPost15.java
new file mode 100644
index 0000000..6073321
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/DoNotUseMeThisWillBeDeletedPost15.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.frameworks.internal;
+
+/**
+ * Other things to delete:
+ * 
+ * The wtpuiAction extension point and schema in org.eclipse.wst.common.frameworks.ui
+ */
+
+
+/**
+ * This has been slated for removal post WTP 1.5. Do not use this class/interface/method/field
+ * 
+ * @deprecated
+ * 
+ */
+
+/**
+ * This interface is being used to track code slated for removal. Any class or interface
+ * implementing or extending this interface respectively should not be used. All such classes and
+ * interfaces have been deprecated and are no longer supported and will be deleted post WTP 1.5.
+ * 
+ * Any method or field with javadoc referencing this interface should not be used and will be
+ * deleted post WTP 1.5
+ * 
+ * @deprecated
+ */
+public interface DoNotUseMeThisWillBeDeletedPost15 {
+}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/HashUtil.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/HashUtil.java
new file mode 100644
index 0000000..f2da27a
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/HashUtil.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.frameworks.internal;
+
+public class HashUtil {
+
+	public static int SEED = 11;
+	private static int MULTI = 31;
+	
+	public static int hash(int seed, int i){
+		return seed * MULTI + i;
+	}
+	
+	public static int hash(int seed, Object obj){
+		return hash(seed, null != obj ? obj.hashCode() : SEED);
+	}
+	
+	public static int hash(int seed, boolean b){
+		return hash(seed, b ? 1 : SEED);
+	}
+}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/ISimpleValidateEditContext.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/ISimpleValidateEditContext.java
new file mode 100644
index 0000000..5b21d8e
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/ISimpleValidateEditContext.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.frameworks.internal;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IStatus;
+
+public interface ISimpleValidateEditContext {
+
+	public static final String CLASS_KEY = "ISimpleValidateEditContext"; //$NON-NLS-1$
+	
+	public IStatus validateEdit(IFile [] files);
+
+}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/OperationListener.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/OperationListener.java
deleted file mode 100644
index e6efab7..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/OperationListener.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others. 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
-package org.eclipse.wst.common.frameworks.internal;
-
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-
-public interface OperationListener {
-	/**
-	 * 
-	 * @param operation
-	 *            the operation for this traversal event.
-	 * @return return true if the traversal of operations should continue.
-	 */
-	public boolean notify(IDataModelOperation operation);
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/OperationManager.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/OperationManager.java
deleted file mode 100644
index 98ae49d..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/OperationManager.java
+++ /dev/null
@@ -1,472 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others. 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
-package org.eclipse.wst.common.frameworks.internal;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.Stack;
-import java.util.Vector;
-
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.ISchedulingRule;
-import org.eclipse.wst.common.environment.IEnvironment;
-import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-import org.eclipse.wst.common.frameworks.internal.datamodel.IWorkspaceRunnableWithStatus;
-import org.eclipse.wst.common.frameworks.internal.operations.ComposedExtendedOperationHolder;
-import org.eclipse.wst.common.frameworks.internal.operations.OperationStatus;
-
-public class OperationManager {
-	private IDataModel dataModel;
-	private DataModelManager dataModelManager;
-	private TableEntry rootOperation;
-	private HashMap operationTable;
-	private Stack runStopList;
-	private IProgressMonitor monitor;
-	private IAdaptable adaptable;
-	private OperationStatus status;
-	private OperationListener preExecuteListener;
-	private OperationListener postExecuteListener;
-	private OperationListener undoExecuteListener;
-  private IEnvironment       environment;
-
-	public OperationManager(DataModelManager aDataModelManager, IDataModelOperation aRootOperation, IEnvironment aEnvironment) {
-		if (aRootOperation == null)
-			aRootOperation = new NullOperation();
-
-		TableEntry entry = new TableEntry(aRootOperation);
-
-		dataModelManager = aDataModelManager;
-		dataModel = dataModelManager.getDataModel();
-		rootOperation = entry;
-		operationTable = new HashMap();
-		runStopList = new Stack();
-		operationTable.put(aRootOperation.getID(), entry);
-    environment = aEnvironment;
- 		addExtendedOperations(aRootOperation);
-
-		OperationListener defaultListener = new OperationListener() {
-			public boolean notify(IDataModelOperation operation) {
-				return true;
-			}
-		};
-
-		preExecuteListener = defaultListener;
-		postExecuteListener = defaultListener;
-		undoExecuteListener = defaultListener;
-	}
-
-	public void setProgressMonitor(IProgressMonitor monitor) {
-		this.monitor = monitor;
-	}
-
-	public void setAdaptable(IAdaptable adaptable) {
-		this.adaptable = adaptable;
-	}
-
-	public void addExtendedPreOperation(String operationId, IDataModelOperation insertOperation) {
-		TableEntry entry = (TableEntry) operationTable.get(operationId);
-
-		if (entry != null) {
-			TableEntry newEntry = new TableEntry(insertOperation);
-
-			entry.preOperations.add(newEntry);
-			operationTable.put(insertOperation.getID(), newEntry);
-		}
-	}
-
-	public void addExtendedPostOperation(String operationId, IDataModelOperation insertOperation) {
-		TableEntry entry = (TableEntry) operationTable.get(operationId);
-
-		if (entry != null) {
-			TableEntry newEntry = new TableEntry(insertOperation);
-
-			entry.postOperations.add(newEntry);
-			operationTable.put(insertOperation.getID(), newEntry);
-		}
-	}
-
-	public void setPreExecuteListener(OperationListener listener) {
-		if (listener != null)
-			preExecuteListener = listener;
-	}
-
-	public void setPostExecuteListener(OperationListener listener) {
-		if (listener != null)
-			postExecuteListener = listener;
-	}
-
-	public void setUndoExecuteListener(OperationListener listener) {
-		if (listener != null)
-			undoExecuteListener = listener;
-	}
-
-	public IStatus runOperations() {
-		boolean continueRun = true;
-		RunListEntry runEntry = startNewRun();
-
-		status = null;
-
-		// All operations have already been run so just return OK.
-		if (runEntry.stackEntries.empty())
-			return Status.OK_STATUS;
-
-		while (continueRun) {
-			continueRun = runOperationsUntilStopped(runEntry) && !runEntry.stackEntries.empty();
-		}
-
-		if (status != null && status.getSeverity() == IStatus.ERROR) {
-			undoLastRun();
-		}
-		return status;
-	}
-
-	public void undoLastRun() {
-		if (!runStopList.empty()) {
-			RunListEntry runListEntry = (RunListEntry) runStopList.pop();
-
-			for (int index = runListEntry.executedOperations.size() - 1; index >= 0; index--) {
-				IDataModelOperation operation = (IDataModelOperation) runListEntry.executedOperations.elementAt(index);
-				Set dataModelIDs = operation.getDataModelIDs();
-
-				if( dataModelIDs != null && dataModelIDs.size() > 0 )
-        {
-          Iterator ids = dataModelIDs.iterator();
-          
-          while( ids.hasNext() )
-          {
-            String dataModelID = (String)ids.next();
-					  dataModelManager.removeNestedDataModel(dataModelID);
-          }
-        }
-
-				try {
-					undoExecuteListener.notify(operation);
-				} catch (Throwable exc) {
-					// TODO report undo notify exception.
-				}
-
-				if (operation.canUndo()) {
-					try {
-						runOperation(operation, true);
-					} catch (Throwable exc) {
-						// TODO report an undo exception here.
-					}
-				}
-			}
-		}
-	}
-
-	private RunListEntry startNewRun() {
-		RunListEntry newEntry = null;
-
-		if (runStopList.empty()) {
-			newEntry = new RunListEntry(rootOperation);
-		} else {
-			RunListEntry topRunList = (RunListEntry) runStopList.peek();
-			newEntry = new RunListEntry(topRunList);
-		}
-
-		runStopList.push(newEntry);
-
-		return newEntry;
-	}
-
-	private boolean runOperationsUntilStopped(RunListEntry runListEntry) {
-		StackEntry stackEntry = (StackEntry) runListEntry.stackEntries.peek();
-		boolean continueRun = true;
-    
-		// Run extended pre operations.
-		for (int index = stackEntry.preOperationIndex + 1; continueRun && index < stackEntry.tableEntry.preOperations.size(); index++) {
-			TableEntry tableEntry = (TableEntry) stackEntry.tableEntry.preOperations.elementAt(index);
-
-			runListEntry.stackEntries.push(new StackEntry(tableEntry));
-			stackEntry.preOperationIndex = index;
-			continueRun = runOperationsUntilStopped(runListEntry);
-		}
-    
-    if( continueRun && stackEntry.preOpChildIndex == -1 ) stackEntry.addPreOpChildren();
-
-    // Run child pre operations.
-    for (int index = stackEntry.preOpChildIndex + 1; continueRun && index < stackEntry.preOpChildren.size(); index++) {
-      TableEntry tableEntry = (TableEntry) stackEntry.preOpChildren.elementAt(index);
-
-      runListEntry.stackEntries.push(new StackEntry(tableEntry));
-      stackEntry.preOpChildIndex = index;
-      continueRun = runOperationsUntilStopped(runListEntry);
-    }
-    
-		if (continueRun && !stackEntry.operationExecuted) {
-			IDataModelOperation operation = stackEntry.tableEntry.operation;
-
-			try {
-				continueRun = preExecuteListener.notify(operation);
-
-				if (continueRun) {
-					Set dataModelIDs = operation.getDataModelIDs();
-
-					if (dataModelIDs != null && dataModelIDs.size() > 0 )
-          {
-            Iterator ids = dataModelIDs.iterator();
-            
-            while( ids.hasNext() )
-            {
-              String dataModelID = (String)ids.next();
-						  dataModelManager.addNestedDataModel(dataModelID);
-            }
-          }
-          
-					operation.setDataModel(dataModel);
-          operation.setEnvironment( environment );
-					setStatus(runOperation(operation, false));
-					runListEntry.executedOperations.add(operation);
-					stackEntry.operationExecuted = true;
-					continueRun = postExecuteListener.notify(operation);
-				}
-			} catch (Throwable exc) {
-				setStatus(new Status(IStatus.ERROR, "id", 0, exc.getMessage() == null ? exc.toString() : exc.getMessage(), exc));
-			}
-
-			if (status != null && status.getSeverity() == IStatus.ERROR) {
-				// This isn't really true, but it will cause the run operations to stop.
-				continueRun = false;
-			}
-		}
-    
-    if( continueRun && stackEntry.postOpChildIndex == -1 ) stackEntry.addPostOpChildren();
-    
-    // Run child post operations.
-    for (int index = stackEntry.postOpChildIndex + 1; continueRun && index < stackEntry.postOpChildren.size(); index++) {
-      TableEntry tableEntry = (TableEntry) stackEntry.postOpChildren.elementAt(index);
-
-      stackEntry.postOpChildIndex = index;
-      runListEntry.stackEntries.push(new StackEntry(tableEntry));
-      continueRun = runOperationsUntilStopped(runListEntry);
-    }    
-
-		// Run extended post operations.
-		for (int index = stackEntry.postOperationIndex + 1; continueRun && index < stackEntry.tableEntry.postOperations.size(); index++) {
-			TableEntry tableEntry = (TableEntry) stackEntry.tableEntry.postOperations.elementAt(index);
-
-			stackEntry.postOperationIndex = index;
-			runListEntry.stackEntries.push(new StackEntry(tableEntry));
-			continueRun = runOperationsUntilStopped(runListEntry);
-		}
-
-		// If we are have run the pre ops, this operation, and
-		// the post ops, we should pop this entry off the stack.
-		// Also, if continueRun is false we don't want to pop the stack since we will want to come
-		// back to this entry later.
-		if (continueRun) {
-			runListEntry.stackEntries.pop();
-		}
-
-		return continueRun;
-	}
-
-	private IStatus runOperation(final IDataModelOperation operation, final boolean isUndo) {
-		IWorkspaceRunnableWithStatus workspaceRunnable = new IWorkspaceRunnableWithStatus(adaptable) {
-			public void run(IProgressMonitor pm) throws CoreException {
-				try {
-					if (isUndo) {
-						this.setStatus(operation.undo(monitor, getInfo()));
-					} else {
-						this.setStatus(operation.execute(monitor, getInfo()));
-					}
-				} catch (Throwable exc) {
-					exc.printStackTrace();
-				}
-			}
-		};
-
-		ISchedulingRule rule = operation.getSchedulingRule();
-
-		try {
-			if (rule == null) {
-				ResourcesPlugin.getWorkspace().run(workspaceRunnable, monitor);
-			} else {
-				ResourcesPlugin.getWorkspace().run(workspaceRunnable, rule, operation.getOperationExecutionFlags(), monitor);
-			}
-		} catch (CoreException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		return workspaceRunnable.getStatus();
-	}
-
-	private void setStatus(IStatus newStatus) {
-		if (status == null) {
-			status = new OperationStatus(newStatus.getMessage(), newStatus.getException());
-			status.setSeverity(newStatus.getSeverity());
-			status.add(newStatus);
-		} else {
-			status.add(newStatus);
-		}
-	}
-  
-	private void addExtendedOperations(IDataModelOperation operation) {
-		ComposedExtendedOperationHolder extendedOps = ComposedExtendedOperationHolder.createExtendedOperationHolder(operation.getID());
-
-		ArrayList preOps = null;
-		ArrayList postOps = null;
-
-		if (extendedOps != null) {
-			preOps = extendedOps.getPreOps();
-			postOps = extendedOps.getPostOps();
-		}
-
-		if (preOps == null)
-			preOps = new ArrayList();
-		if (postOps == null)
-			postOps = new ArrayList();
-
-		for (int index = 0; index < preOps.size(); index++) {
-			IDataModelOperation newOperation = (IDataModelOperation) preOps.get(index);
-
-			addExtendedPreOperation(operation.getID(), newOperation);
-			addExtendedOperations(newOperation);
-		}
-
-		for (int index = 0; index < postOps.size(); index++) {
-			IDataModelOperation newOperation = (IDataModelOperation) postOps.get(index);
-
-			addExtendedPostOperation(operation.getID(), newOperation);
-			addExtendedOperations(newOperation);
-		}
-	}
-
-	private class RunListEntry {
-		public Stack stackEntries;
-		public Vector executedOperations;
-
-		public RunListEntry(TableEntry newEntry) {
-			stackEntries = new Stack();
-			executedOperations = new Vector();
-			stackEntries.push(new StackEntry(newEntry));
-		}
-
-		public RunListEntry(RunListEntry oldList) {
-			stackEntries = new Stack();
-			executedOperations = new Vector();
-
-			for (int index = 0; index < oldList.stackEntries.size(); index++) {
-				StackEntry oldEntry = (StackEntry) oldList.stackEntries.elementAt(index);
-				stackEntries.add(new StackEntry(oldEntry));
-			}
-		}
-	}
-
-	private class StackEntry {
-		public int preOperationIndex;
-		public int postOperationIndex;
-    public int preOpChildIndex;
-    public int postOpChildIndex;
-		public boolean operationExecuted;
-    public Vector preOpChildren;
-    public Vector postOpChildren;
-		public TableEntry tableEntry;
-
-		public StackEntry(TableEntry newTableEntry) {
-			preOperationIndex = -1;
-			postOperationIndex = -1;
-			operationExecuted = false;
-      preOpChildIndex = -1;
-      postOpChildIndex = -1;
-			tableEntry = newTableEntry;
-		}
-
-		public StackEntry(StackEntry newStackEntry) {
-			preOperationIndex = newStackEntry.preOperationIndex;
-			postOperationIndex = newStackEntry.postOperationIndex;
-			operationExecuted = newStackEntry.operationExecuted;
-			tableEntry = newStackEntry.tableEntry;
-      preOpChildIndex = newStackEntry.preOpChildIndex;
-      postOpChildIndex = newStackEntry.postOpChildIndex;
-      preOpChildren     = newStackEntry.preOpChildren == null ? null :new Vector( newStackEntry.preOpChildren );
-      postOpChildren    = newStackEntry.postOpChildren == null ? null : new Vector( newStackEntry.postOpChildren );
-		}
-    
-    public void addPreOpChildren()
-    {
-      List preOps = tableEntry.operation.getPreOperations();
-      
-      preOpChildren = new Vector();
-      
-      if( preOps != null )
-      {        
-        for( int index = 0; index < preOps.size(); index++ )
-        {
-          IDataModelOperation op       = (IDataModelOperation)preOps.get( index );
-          TableEntry          newEntry = new TableEntry(op);
-
-          preOpChildren.add( newEntry );
-          operationTable.put( op.getID(), newEntry );
-          addExtendedOperations( op );
-        }
-      }
-    }
-    
-    public void addPostOpChildren()
-    {
-      List postOps = tableEntry.operation.getPostOperations();
-      
-      postOpChildren = new Vector();
-      
-      if( postOps != null )
-      {        
-        for( int index = 0; index < postOps.size(); index++ )
-        {
-          IDataModelOperation op       = (IDataModelOperation)postOps.get( index );
-          TableEntry          newEntry = new TableEntry(op);
-
-          postOpChildren.add( newEntry );
-          operationTable.put( op.getID(), newEntry );
-          addExtendedOperations( op );
-        }
-      }
-    }
-	}
-
-	private class TableEntry {
-		public IDataModelOperation operation;
-		public Vector preOperations;
-		public Vector postOperations;
-
-		public TableEntry(IDataModelOperation newOperation) {
-			operation = newOperation;
-			preOperations = new Vector(3);
-			postOperations = new Vector(3);
-		}
-	}
-
-	private class NullOperation extends AbstractDataModelOperation {
-		public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-			return Status.OK_STATUS;
-		}
-
-		public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-			return Status.OK_STATUS;
-		}
-
-		public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-			return Status.OK_STATUS;
-		}
-
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/SimpleValidateEdit.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/SimpleValidateEdit.java
new file mode 100644
index 0000000..ec84468
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/SimpleValidateEdit.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.frameworks.internal;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jem.util.UIContextDetermination;
+
+public class SimpleValidateEdit {
+
+	/**
+	 * @param files must contain only {@link IFile}s
+	 * @return
+	 */
+	public static boolean validateEdit(List files){
+		if(files == null || files.size() == 0){
+			return true;
+		}
+		return validateEdit( (IFile [])files.toArray(new IFile[files.size()]));
+	}
+	
+	public static boolean validateEdit(IFile[] files) {
+		if(files == null || files.length == 0){
+			return true;
+		}
+		ISimpleValidateEditContext validator = (ISimpleValidateEditContext) UIContextDetermination.createInstance(ISimpleValidateEditContext.CLASS_KEY);
+		if (validator != null) {
+			IStatus status = validator.validateEdit(files);
+			if (status != null)
+				return status.isOK();
+		}
+		return true;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/SimpleValidateEditContextHeadless.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/SimpleValidateEditContextHeadless.java
new file mode 100644
index 0000000..eb8fe65
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/SimpleValidateEditContextHeadless.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.frameworks.internal;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModelProvider;
+
+public class SimpleValidateEditContextHeadless implements ISimpleValidateEditContext {
+
+	public IStatus validateEdit(IFile[] files) {
+		final List filesList = new ArrayList();
+		for(int i=0;i<files.length; i++){
+			if(files[i].exists() && files[i].isReadOnly()){
+				filesList.add(files[i]);
+			}
+		}
+		if(filesList.size() > 0){
+			IFile [] filesToValidate = (IFile [])filesList.toArray(new IFile[filesList.size()]);
+			return validateEditImpl(filesToValidate);
+		}
+		return IDataModelProvider.OK_STATUS;
+	}
+
+	protected IStatus validateEditImpl(IFile[] filesToValidate) {
+		return ResourcesPlugin.getWorkspace().validateEdit(filesToValidate, null);
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WTPPlugin.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WTPPlugin.java
index 37c04a0..e33fdf6 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WTPPlugin.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WTPPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -59,7 +59,7 @@
 	}
 	public static boolean isPlatformCaseSensitive() {
 		return Platform.OS_MACOSX.equals(Platform.getOS()) ? false : new
-				java.io.File("a").compareTo(new java.io.File("A")) != 0;
+				java.io.File("a").compareTo(new java.io.File("A")) != 0;  //$NON-NLS-1$//$NON-NLS-2$
 	}
 
 	public abstract String getPluginID();
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WTPProjectUtilities.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WTPProjectUtilities.java
index d10281e..ab74ed3 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WTPProjectUtilities.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WTPProjectUtilities.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -19,6 +19,7 @@
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IProjectDescription;
 import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IStatus;
@@ -130,12 +131,17 @@
 			newNatures[newsize++] = prevNatures[i];
 		}
 		if (!matchfound)
-			throw new CoreException(new Status(IStatus.ERROR, WTPCommonPlugin.PLUGIN_ID, 0, "The nature id " + natureId + " does not exist on the project " + project.getName(), null)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			throw new CoreException(new Status(IStatus.ERROR, WTPCommonPlugin.PLUGIN_ID, 0, "The nature id " + natureId + " does not exist on the project " + project.getName(), null)); //$NON-NLS-1$ //$NON-NLS-2$
 		String[] temp = newNatures;
 		newNatures = new String[newsize];
 		System.arraycopy(temp, 0, newNatures, 0, newsize);
 		description.setNatureIds(newNatures);
-		project.setDescription(description, null);
+		if (ResourcesPlugin.getWorkspace().getNatureDescriptor(natureId) == null) {
+			// The nature does not exist, so do not attempt to de-configure it while removing it.
+			project.setDescription(description, IResource.AVOID_NATURE_CONFIG | IResource.KEEP_HISTORY, null);
+		} else {
+			project.setDescription(description, null);
+		}
 	}
 
 	public static IProject getProject(Object object) {
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WrappedRuntimeException.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WrappedRuntimeException.java
index 35ed923..351de84 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WrappedRuntimeException.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WrappedRuntimeException.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2005 IBM Corporation and others.
+ * Copyright (c) 2001, 2007 IBM Corporation and others.
  * 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
@@ -73,6 +73,15 @@
 	}
 
 	/**
+	 * Added to provide compatibility for the Java 1.4.2 addition of
+	 * <code>Throwable.getCause()</code>.
+	 * @return The nested exception held by the receiver.
+	 */
+	public java.lang.Throwable getCause() {
+		return getNestedException();
+	}
+	
+	/**
 	 * Print out a stack trace to the system err.
 	 */
 	public void printStackTrace() {
@@ -112,4 +121,4 @@
 	public void setNestedException(java.lang.Exception newNestedException) {
 		nestedException = newNestedException;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelImpl.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelImpl.java
index eb7027a..7a4dc3a 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelImpl.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -441,7 +441,7 @@
 		provider.dispose();
 	}
 
-	public IDataModelOperation getDefaultOperation() {
+	public IDataModelOperation getRawOperation() {
 		IDataModelOperation providerOp = provider.getDefaultOperation();
 		if (null == providerOp) {
 			providerOp = new AbstractDataModelOperation(this) {
@@ -450,7 +450,11 @@
 				}
 			};
 		}
-		return new ExtendableOperationImpl(providerOp);
+		return providerOp;
+	}
+
+	public IDataModelOperation getDefaultOperation() {
+		return new DataModelPausibleOperationImpl(getRawOperation());
 	}
 
 	public String toString() {
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelPausibleOperationEventImpl.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelPausibleOperationEventImpl.java
new file mode 100644
index 0000000..a8c8ad5
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelPausibleOperationEventImpl.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.frameworks.internal.datamodel;
+
+import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
+
+public class DataModelPausibleOperationEventImpl implements IDataModelPausibleOperationEvent {
+
+	private IDataModelOperation operation;
+	private int operationType;
+	private int executionType;
+
+	public DataModelPausibleOperationEventImpl(IDataModelOperation operation, int operationType, int executionType) {
+		this.operation = operation;
+		this.operationType = operationType;
+		this.executionType = executionType;
+	}
+
+	public IDataModelOperation getOperation() {
+		return operation;
+	}
+
+	public int getOperationType() {
+		return operationType;
+	}
+
+	public int getExecutionType() {
+		return executionType;
+	}
+}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelPausibleOperationImpl.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelPausibleOperationImpl.java
new file mode 100644
index 0000000..63bc4b3
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelPausibleOperationImpl.java
@@ -0,0 +1,587 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.frameworks.internal.datamodel;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Stack;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModelProperties;
+import org.eclipse.wst.common.frameworks.internal.AdaptabilityUtility;
+import org.eclipse.wst.common.frameworks.internal.WTPResourceHandler;
+import org.eclipse.wst.common.frameworks.internal.enablement.IEnablementManager;
+import org.eclipse.wst.common.frameworks.internal.operations.ComposedExtendedOperationHolder;
+import org.eclipse.wst.common.frameworks.internal.operations.OperationStatus;
+import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
+
+public class DataModelPausibleOperationImpl extends WrappedOperation implements IDataModelPausibleOperation {
+
+	// Stack of StackEntries to be executed
+	protected Stack operationStackToExecute = null;
+
+	// Stack of StackEntries already executed
+	protected Stack undoStack = null;
+	protected Stack redoStack = null;
+
+	protected OperationStackEntry rootStackEntry = null;
+
+	protected List operationListeners;
+
+	protected int executionState = NOT_STARTED;
+
+	public DataModelPausibleOperationImpl(IDataModelOperation rootOperation) {
+		super(rootOperation);
+	}
+
+	public void addOperationListener(IDataModelPausibleOperationListener operationListener) {
+		if (null == operationListeners) {
+			operationListeners = new ArrayList();
+		}
+		operationListeners.add(operationListener);
+	}
+
+	public void removeOperationListener(IDataModelPausibleOperationListener operationListener) {
+		if (null != operationListeners) {
+			operationListeners.remove(operationListener);
+		}
+	}
+
+	public int getExecutionState() {
+		return executionState;
+	}
+
+	protected static final int EXECUTE_IMPL = 0;
+	protected static final int UNDO_IMPL = 1;
+	protected static final int REDO_IMPL = 2;
+	protected static final int ROLLBACK_IMPL = 3;
+	protected static final int RESUME_IMPL = 4;
+
+	private static Hashtable threadToExtendedOpControl = new Hashtable();
+
+	protected IStatus cacheThreadAndContinue(IProgressMonitor monitor, IAdaptable info, int runType) throws ExecutionException {
+		final Thread currentThread = Thread.currentThread();
+		final boolean isTopLevelOperation = !threadToExtendedOpControl.containsKey(currentThread);
+		try {
+			if (isTopLevelOperation) {
+				threadToExtendedOpControl.put(currentThread, this);
+			}
+			switch (runType) {
+				case EXECUTE_IMPL :
+					return executeImpl(monitor, info);
+				case UNDO_IMPL :
+					return undoImpl(monitor, info);
+				case REDO_IMPL :
+					return redoImpl(monitor, info);
+				case ROLLBACK_IMPL :
+					return rollBackImpl(monitor, info);
+				case RESUME_IMPL :
+					return resumeImpl(monitor, info);
+			}
+		} finally {
+			if (isTopLevelOperation) {
+				threadToExtendedOpControl.remove(currentThread);
+			}
+		}
+		throw new RuntimeException();
+	}
+
+	public IStatus resume(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		return cacheThreadAndContinue(monitor, info, RESUME_IMPL);
+	}
+
+	protected IStatus resumeImpl(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		switch (executionState) {
+			case NOT_STARTED :
+				return executeImpl(monitor, info);
+			case PAUSED_EXECUTE :
+			case COMPLETE_ROLLBACK :
+				return doExecute(monitor, info);
+			case PAUSED_UNDO :
+				return doUndo(monitor, info);
+			case PAUSED_REDO :
+				return redoImpl(monitor, info);
+		}
+		throw new RuntimeException();
+	}
+
+	public boolean canRedo() {
+		return (COMPLETE_UNDO == executionState) && super.canRedo();
+	}
+
+	public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		return cacheThreadAndContinue(monitor, info, REDO_IMPL);
+	}
+
+	protected IStatus redoImpl(IProgressMonitor monitor, IAdaptable info) {
+		return doRedo(monitor, info);
+	}
+
+	protected IStatus doRedo(IProgressMonitor monitor, IAdaptable info) {
+		try {
+			executionState = RUNNING_REDO;
+			OperationStatus returnStatus = null;
+			int shouldContinue = IDataModelPausibleOperationListener.CONTINUE;
+			while (IDataModelPausibleOperationListener.CONTINUE == shouldContinue && !redoStack.isEmpty()) {
+				OperationStackEntry stackEntry = (OperationStackEntry) redoStack.peek();
+				IDataModelOperation operation = stackEntry.getOperation();
+				DataModelPausibleOperationEventImpl event = new DataModelPausibleOperationEventImpl(operation, IDataModelPausibleOperationEvent.MAIN_STARTING, IDataModelPausibleOperationEvent.REDO);
+				shouldContinue = notifyOperationListeners(event);
+				if (IDataModelPausibleOperationListener.PAUSE == shouldContinue) {
+					continue;
+				}
+				undoStack.push(redoStack.pop());
+				returnStatus = runOperation(operation, monitor, info, IDataModelPausibleOperationEvent.REDO, returnStatus);
+				event = new DataModelPausibleOperationEventImpl(operation, IDataModelPausibleOperationEvent.MAIN_FINISHED, IDataModelPausibleOperationEvent.REDO);
+				shouldContinue = notifyOperationListeners(event);
+
+			}
+			return returnStatus == null ? Status.OK_STATUS : returnStatus;
+		} finally {
+			executionState = redoStack.isEmpty() ? COMPLETE_REDO : PAUSED_REDO;
+		}
+	}
+
+	public boolean canUndo() {
+		return (executionState == COMPLETE_EXECUTE || executionState == COMPLETE_REDO) && super.canUndo();
+	}
+
+	public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		return cacheThreadAndContinue(monitor, info, UNDO_IMPL);
+	}
+
+	protected IStatus undoImpl(IProgressMonitor monitor, IAdaptable info) {
+		redoStack = new Stack();
+		return doUndo(monitor, info);
+	}
+
+	protected IStatus doUndo(IProgressMonitor monitor, IAdaptable info) {
+		try {
+			executionState = RUNNING_UNDO;
+			OperationStatus returnStatus = null;
+			int shouldContinue = IDataModelPausibleOperationListener.CONTINUE;
+			while (IDataModelPausibleOperationListener.CONTINUE == shouldContinue && !undoStack.isEmpty()) {
+				OperationStackEntry stackEntry = (OperationStackEntry) undoStack.peek();
+				IDataModelOperation operation = stackEntry.getOperation();
+				DataModelPausibleOperationEventImpl event = new DataModelPausibleOperationEventImpl(operation, IDataModelPausibleOperationEvent.MAIN_STARTING, IDataModelPausibleOperationEvent.UNDO);
+				shouldContinue = notifyOperationListeners(event);
+				if (IDataModelPausibleOperationListener.PAUSE == shouldContinue) {
+					continue;
+				}
+				redoStack.push(undoStack.pop());
+				returnStatus = runOperation(operation, monitor, info, IDataModelPausibleOperationEvent.UNDO, returnStatus);
+				event = new DataModelPausibleOperationEventImpl(operation, IDataModelPausibleOperationEvent.MAIN_FINISHED, IDataModelPausibleOperationEvent.UNDO);
+				shouldContinue = notifyOperationListeners(event);
+
+			}
+			return returnStatus == null ? Status.OK_STATUS : returnStatus;
+		} finally {
+			executionState = undoStack.isEmpty() ? COMPLETE_UNDO : PAUSED_UNDO;
+		}
+	}
+
+	public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		return cacheThreadAndContinue(monitor, info, EXECUTE_IMPL);
+	}
+
+	protected IStatus executeImpl(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		try {
+			executionState = RUNNING_EXECUTE;
+			undoStack = new Stack();
+			operationStackToExecute = new Stack();
+			rootStackEntry = new OperationStackEntry(null, rootOperation);
+			operationStackToExecute.push(rootStackEntry);
+			DataModelPausibleOperationEventImpl event = new DataModelPausibleOperationEventImpl(rootOperation, IDataModelPausibleOperationEvent.NODE_STARTING, IDataModelPausibleOperationEvent.EXECUTE);
+			if (IDataModelPausibleOperationListener.CONTINUE == notifyOperationListeners(event)) {
+				return doExecute(monitor, info);
+			}
+			return Status.OK_STATUS;
+		} finally {
+			executionState = operationStackToExecute.isEmpty() ? COMPLETE_EXECUTE : PAUSED_EXECUTE;
+		}
+	}
+
+	protected IStatus doExecute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		try {
+			OperationStatus returnStatus = null;
+			int shouldContinue = IDataModelPausibleOperationListener.CONTINUE;
+			while (IDataModelPausibleOperationListener.CONTINUE == shouldContinue && !operationStackToExecute.isEmpty()) {
+				OperationStackEntry stackEntry = (OperationStackEntry) operationStackToExecute.peek();
+				OperationStackEntry preStackEntry = stackEntry.getNextPreOperation();
+				if (null != preStackEntry) {
+					operationStackToExecute.push(preStackEntry);
+					DataModelPausibleOperationEventImpl event = new DataModelPausibleOperationEventImpl(preStackEntry.getOperation(), IDataModelPausibleOperationEvent.NODE_STARTING, IDataModelPausibleOperationEvent.EXECUTE);
+					shouldContinue = notifyOperationListeners(event);
+					continue;
+				}
+				IDataModelOperation stackEntryOperation = stackEntry.getOperationForExecution();
+				if (null != stackEntryOperation) {
+					DataModelPausibleOperationEventImpl event = new DataModelPausibleOperationEventImpl(stackEntryOperation, IDataModelPausibleOperationEvent.MAIN_STARTING, IDataModelPausibleOperationEvent.EXECUTE);
+					shouldContinue = notifyOperationListeners(event);
+					if (IDataModelPausibleOperationListener.PAUSE == shouldContinue) {
+						continue;
+					}
+					returnStatus = runOperation(stackEntryOperation, monitor, info, IDataModelPausibleOperationEvent.EXECUTE, returnStatus);
+					undoStack.push(stackEntry);
+					event = new DataModelPausibleOperationEventImpl(stackEntryOperation, IDataModelPausibleOperationEvent.MAIN_FINISHED, IDataModelPausibleOperationEvent.EXECUTE);
+					shouldContinue = notifyOperationListeners(event);
+					if (IDataModelPausibleOperationListener.PAUSE == shouldContinue) {
+						continue;
+					}
+				}
+				OperationStackEntry postStackEntry = stackEntry.getNextPostOperation();
+				if (null != postStackEntry) {
+					operationStackToExecute.push(postStackEntry);
+					DataModelPausibleOperationEventImpl event = new DataModelPausibleOperationEventImpl(postStackEntry.getOperation(), IDataModelPausibleOperationEvent.NODE_STARTING, IDataModelPausibleOperationEvent.EXECUTE);
+					shouldContinue = notifyOperationListeners(event);
+					continue;
+				}
+				operationStackToExecute.pop();
+				DataModelPausibleOperationEventImpl event = new DataModelPausibleOperationEventImpl(stackEntry.getOperation(), IDataModelPausibleOperationEvent.NODE_FINISHED, IDataModelPausibleOperationEvent.EXECUTE);
+				shouldContinue = notifyOperationListeners(event);
+			}
+			return returnStatus == null ? Status.OK_STATUS : returnStatus;
+		} finally {
+			executionState = operationStackToExecute.isEmpty() ? COMPLETE_EXECUTE : PAUSED_EXECUTE;
+		}
+	}
+
+	public IStatus rollBack(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		return cacheThreadAndContinue(monitor, info, ROLLBACK_IMPL);
+	}
+
+	protected IStatus rollBackImpl(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		if (PAUSED_EXECUTE == executionState || PAUSED_ROLLBACK == executionState) {
+			try {
+				executionState = RUNNING_ROLLBACK;
+				OperationStatus returnStatus = null;
+				int shouldContinue = IDataModelPausibleOperationListener.CONTINUE;
+				while (IDataModelPausibleOperationListener.CONTINUE == shouldContinue && !undoStack.isEmpty()) {
+					OperationStackEntry stackEntry = (OperationStackEntry) undoStack.peek();
+					IDataModelOperation operation = stackEntry.getOperation();
+					DataModelPausibleOperationEventImpl event = new DataModelPausibleOperationEventImpl(operation, IDataModelPausibleOperationEvent.MAIN_STARTING, IDataModelPausibleOperationEvent.ROLLBACK);
+					shouldContinue = notifyOperationListeners(event);
+					if (IDataModelPausibleOperationListener.PAUSE == shouldContinue) {
+						continue;
+					}
+					undoStack.pop();
+					OperationStackEntry executionTopStackEntry = stackEntry.rollBackOneOperation();
+					if (operationStackToExecute.contains(executionTopStackEntry)) {
+						while (operationStackToExecute.peek() != executionTopStackEntry) {
+							operationStackToExecute.pop();
+						}
+					} else {
+						Stack parentStack = new Stack();
+						parentStack.push(executionTopStackEntry);
+						OperationStackEntry entry = executionTopStackEntry.parent;
+						while (!operationStackToExecute.contains(entry)) {
+							parentStack.push(entry);
+							entry = entry.parent;
+						}
+						while (operationStackToExecute.peek() != entry) {
+							operationStackToExecute.pop();
+						}
+						while (!parentStack.isEmpty()) {
+							operationStackToExecute.push(parentStack.pop());
+						}
+					}
+					returnStatus = runOperation(operation, monitor, info, IDataModelPausibleOperationEvent.UNDO, returnStatus);
+					event = new DataModelPausibleOperationEventImpl(operation, IDataModelPausibleOperationEvent.MAIN_FINISHED, IDataModelPausibleOperationEvent.ROLLBACK);
+					shouldContinue = notifyOperationListeners(event);
+				}
+				return returnStatus == null ? Status.OK_STATUS : returnStatus;
+			} finally {
+				executionState = undoStack.isEmpty() ? COMPLETE_ROLLBACK : PAUSED_ROLLBACK;
+			}
+		}
+		throw new RuntimeException();
+	}
+
+	private int notifyOperationListeners(DataModelPausibleOperationEventImpl event) {
+		if (null != operationListeners) {
+			IDataModelPausibleOperationListener listener = null;
+			for (int i = 0; i < operationListeners.size(); i++) {
+				listener = (IDataModelPausibleOperationListener) operationListeners.get(i);
+				if (IDataModelPausibleOperationListener.PAUSE == listener.notify(event)) {
+					return IDataModelPausibleOperationListener.PAUSE;
+				}
+			}
+		}
+		return IDataModelPausibleOperationListener.CONTINUE;
+	}
+
+	protected OperationStatus addStatus(OperationStatus returnStatus, IStatus status) {
+		if (returnStatus == null) {
+			returnStatus = new OperationStatus(status.getMessage(), status.getException());
+			returnStatus.setSeverity(status.getSeverity());
+			returnStatus.add(status);
+		} else {
+			returnStatus.add(status);
+		}
+		return returnStatus;
+	}
+
+	private OperationStatus addExtendedStatus(OperationStatus returnStatus, IStatus aStatus) {
+		if (returnStatus == null) {
+			returnStatus = new OperationStatus(new IStatus[]{WTPCommonPlugin.OK_STATUS});
+		}
+		returnStatus.addExtendedStatus(aStatus);
+		return returnStatus;
+	}
+
+	private OperationStatus runOperation(final IDataModelOperation operation, final IProgressMonitor monitor, final IAdaptable info, final int executionType, OperationStatus returnStatus) {
+		if (rootOperation == operation) {
+			IStatus status = runOperation(operation, monitor, info, IDataModelPausibleOperationEvent.EXECUTE);
+			if (!status.isOK()) {
+				returnStatus = addStatus(returnStatus, status);
+			}
+		} else {
+			try {
+				IStatus status = runOperation(operation, monitor, info, IDataModelPausibleOperationEvent.EXECUTE);
+				if (!status.isOK()) {
+					returnStatus = addExtendedStatus(returnStatus, status);
+				}
+			} catch (Exception e) {
+				IStatus status = new Status(IStatus.ERROR, WTPCommonPlugin.PLUGIN_ID, 0, WTPResourceHandler.getString("25", new Object[]{operation.getClass().getName()}), e); //$NON-NLS-1$
+				returnStatus = addExtendedStatus(returnStatus, status);
+			}
+		}
+		return returnStatus;
+	}
+
+	private IStatus runOperation(final IDataModelOperation operation, final IProgressMonitor monitor, final IAdaptable info, final int executionType) {
+		IWorkspaceRunnableWithStatus workspaceRunnable = new IWorkspaceRunnableWithStatus(info) {
+			public void run(IProgressMonitor pm) throws CoreException {
+				try {
+					switch (executionType) {
+						case IDataModelPausibleOperationEvent.EXECUTE :
+							this.setStatus(operation.execute(pm, info));
+							break;
+						case IDataModelPausibleOperationEvent.UNDO :
+							this.setStatus(operation.undo(pm, info));
+							break;
+						case IDataModelPausibleOperationEvent.REDO :
+							this.setStatus(operation.redo(pm, info));
+							break;
+					}
+					if (null == this.getStatus()) {
+						this.setStatus(Status.OK_STATUS);
+					}
+				} catch (Exception e) {
+					this.setStatus(new Status(IStatus.ERROR, WTPCommonPlugin.PLUGIN_ID, 0, WTPResourceHandler.getString("25", new Object[]{operation.getClass().getName()}), e)); //$NON-NLS-1$
+					WTPCommonPlugin.getDefault().getLogger().logError(e);
+				}
+			}
+		};
+
+		ISchedulingRule rule = operation.getSchedulingRule();
+		if (null == rule) {
+			rule = ResourcesPlugin.getWorkspace().getRoot();
+		}
+
+		try {
+			ResourcesPlugin.getWorkspace().run(workspaceRunnable, rule, operation.getOperationExecutionFlags(), monitor);
+		} catch (CoreException e) {
+			workspaceRunnable.setStatus(new Status(IStatus.ERROR, WTPCommonPlugin.PLUGIN_ID, 0, WTPResourceHandler.getString("25", new Object[]{operation.getClass().getName()}), e)); //$NON-NLS-1$
+		}
+		return workspaceRunnable.getStatus();
+	}
+
+	protected class OperationStackEntry {
+
+		private IDataModelOperation operation;
+		private IDataModelOperation operationForExecution;
+
+		private boolean extendedOpsInitialized = false;
+
+		private ComposedExtendedOperationHolder extOpHolder = null;
+
+		private int preOpIndex = 0;
+		private int postOpIndex = 0;
+
+		private OperationStackEntry[] preOpStackEntries = null;
+		private OperationStackEntry[] postOpStackEntries = null;
+
+		public OperationStackEntry parent = null;
+
+		public OperationStackEntry(OperationStackEntry parent, IDataModelOperation operation) {
+			this.parent = parent;
+			this.operation = operation;
+			this.operationForExecution = operation;
+		}
+
+		public OperationStackEntry rollBackOneOperation() {
+			postOpIndex = 0;
+			operationForExecution = operation;
+			if (preOpIndex == 0 && parent != null) {
+				return parent.rollBackExtended(this);
+			}
+			return this;
+		}
+
+		private OperationStackEntry rollBackExtended(OperationStackEntry extendedEntry) {
+			while (postOpIndex > 0) {
+				int index = --postOpIndex;
+				if (postOpStackEntries[index] == extendedEntry) {
+					postOpStackEntries[index] = null;
+					return this;
+				}
+			}
+			while (preOpIndex > 0) {
+				int index = --preOpIndex;
+				if (preOpStackEntries[index] == extendedEntry) {
+					preOpStackEntries[index] = null;
+					if (index != 0) {
+						return this;
+					}
+				}
+			}
+			if (null != parent) {
+				return parent.rollBackExtended(this);
+			}
+			return this;
+		}
+
+		public OperationStackEntry getNextPreOperation() {
+			if (!extendedOpsInitialized) {
+				initExtendedOps();
+			}
+			if (extOpHolder == null) {
+				return null;
+			}
+			List ops = extOpHolder.getPreOps();
+			if (ops == null || ops.size() <= preOpIndex) {
+				return null;
+			}
+
+			while (preOpIndex < ops.size()) {
+				int index = preOpIndex++;
+				IDataModelOperation op = (IDataModelOperation) ops.get(index);
+				if (shouldExecuteExtended(op.getID())) {
+					op.setDataModel(getDataModel());
+					op.setEnvironment(getEnvironment());
+					preOpStackEntries[index] = new OperationStackEntry(this, op);
+					return preOpStackEntries[index];
+				}
+			}
+			return null;
+		}
+
+		public String toString() {
+			return getOperationID();
+		}
+
+		public String getOperationID() {
+			return operation.getID();
+		}
+
+		public IDataModelOperation getOperation() {
+			return operation;
+		}
+
+		public boolean executed() {
+			return null != operationForExecution;
+		}
+
+		/**
+		 * The root operation is only returned once; this way it is known whether it has been
+		 * executed yet or not.
+		 * 
+		 * @return
+		 */
+		public IDataModelOperation getOperationForExecution() {
+			try {
+				return operationForExecution;
+			} finally {
+				operationForExecution = null;
+			}
+		}
+
+		public OperationStackEntry getNextPostOperation() {
+			if (!extendedOpsInitialized) {
+				initExtendedOps();
+			}
+			if (extOpHolder == null) {
+				return null;
+			}
+			List ops = extOpHolder.getPostOps();
+			if (ops == null || ops.size() <= postOpIndex) {
+				return null;
+			}
+
+			while (postOpIndex < ops.size()) {
+				int index = postOpIndex++;
+				IDataModelOperation op = (IDataModelOperation) ops.get(index);
+				if (shouldExecuteExtended(op.getID())) {
+					op.setDataModel(getDataModel());
+					op.setEnvironment(getEnvironment());
+					postOpStackEntries[index] = new OperationStackEntry(this, op);
+					return postOpStackEntries[index];
+				}
+			}
+			return null;
+
+		}
+
+		private void initExtendedOps() {
+			if (shouldExecuteExtended(operation.getID())) {
+				extOpHolder = ComposedExtendedOperationHolder.createExtendedOperationHolder(operation.getID());
+				if (null != extOpHolder) {
+					if (extOpHolder.hasPreOps()) {
+						preOpStackEntries = new OperationStackEntry[extOpHolder.getPreOps().size()];
+					}
+					if (extOpHolder.hasPostOps()) {
+						postOpStackEntries = new OperationStackEntry[extOpHolder.getPostOps().size()];
+					}
+				}
+			}
+			extendedOpsInitialized = true;
+		}
+	}
+
+	protected boolean shouldExecuteExtended(String operationID) {
+		// Check the top most level operation first
+		DataModelPausibleOperationImpl threadRootOperation = (DataModelPausibleOperationImpl) threadToExtendedOpControl.get(Thread.currentThread());
+		if (threadRootOperation != this && threadRootOperation.getDataModel() != getDataModel() && !threadRootOperation.shouldExecuteExtended(operationID)) {
+			return false;
+		}
+		// No extended operations are being executed
+		boolean allowExtensions = getDataModel().getBooleanProperty(IDataModelProperties.ALLOW_EXTENSIONS);
+		if (!allowExtensions) {
+			return false;
+		}
+		// This specific operation should not be executed
+		List restrictedExtensions = (List) getDataModel().getProperty(IDataModelProperties.RESTRICT_EXTENSIONS);
+		if (restrictedExtensions.contains(operationID)) {
+			return false;
+		}
+		// This specific function group should not be executed
+		List extendedContext = getDataModel().getExtendedContext();
+		for (int contextCount = 0; contextCount < extendedContext.size(); contextCount++) {
+			IProject project = (IProject) AdaptabilityUtility.getAdapter(extendedContext.get(contextCount), IProject.class);
+			if (null != project && !IEnablementManager.INSTANCE.getIdentifier(operationID, project).isEnabled()) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/ExtendableOperationImpl.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/ExtendableOperationImpl.java
deleted file mode 100644
index 38391aa..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/ExtendableOperationImpl.java
+++ /dev/null
@@ -1,333 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Set;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.operations.IUndoContext;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.core.runtime.jobs.ISchedulingRule;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.environment.IEnvironment;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelProperties;
-import org.eclipse.wst.common.frameworks.internal.AdaptabilityUtility;
-import org.eclipse.wst.common.frameworks.internal.WTPResourceHandler;
-import org.eclipse.wst.common.frameworks.internal.enablement.IEnablementManager;
-import org.eclipse.wst.common.frameworks.internal.operations.ComposedExtendedOperationHolder;
-import org.eclipse.wst.common.frameworks.internal.operations.OperationStatus;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
-
-public final class ExtendableOperationImpl implements IDataModelOperation {
-
-	private IDataModelOperation rootOperation;
-	private List appendedOperations;
-	private IEnvironment environment;
-
-	private OperationStatus opStatus;
-
-	private static Hashtable threadToExtendedOpControl;
-
-	private class ExtendedOpControl {
-		private boolean allowExtensions;
-		List restrictedExtensions;
-
-		public ExtendedOpControl(boolean allowExtensions, List restrictedExtensions) {
-			this.allowExtensions = allowExtensions;
-			this.restrictedExtensions = restrictedExtensions;
-		}
-
-		public boolean shouldExecute(String operationID) {
-			return allowExtensions && !restrictedExtensions.contains(operationID);
-		}
-	}
-
-	public ExtendableOperationImpl(IDataModelOperation rootOperation) {
-		this.rootOperation = rootOperation;
-		if (null == rootOperation) {
-			throw new NullPointerException();
-		}
-	}
-
-	public IStatus redo(IProgressMonitor monitor, IAdaptable info) {
-		return null;
-	}
-
-	public Set getDataModelIDs() {
-		return new HashSet();
-	}
-
-	/**
-	 * @return
-	 */
-	public ISchedulingRule getSchedulingRule() {
-		return rootOperation.getSchedulingRule();
-	}
-
-	public IStatus undo(IProgressMonitor monitor, IAdaptable info) {
-		return null;
-	}
-
-	public final void addStatus(IStatus aStatus) {
-		if (opStatus == null) {
-			opStatus = new OperationStatus(aStatus.getMessage(), aStatus.getException());
-			opStatus.setSeverity(aStatus.getSeverity());
-			opStatus.add(aStatus);
-		} else {
-			opStatus.add(aStatus);
-		}
-	}
-
-	private void addExtendedStatus(IStatus aStatus) {
-		if (opStatus == null) {
-			opStatus = new OperationStatus(new IStatus[]{WTPCommonPlugin.OK_STATUS});
-		}
-		opStatus.addExtendedStatus(aStatus);
-	}
-
-	public void appendOperation(IDataModelOperation appendedOperation) {
-		if (appendedOperations == null) {
-			appendedOperations = new ArrayList(3);
-		}
-		appendedOperations.add(appendedOperation);
-	}
-
-	/**
-	 * Initiates a batch of changes, by invoking the execute() method as a workspace runnable.
-	 * 
-	 * @param monitor
-	 *            the progress monitor to use to display progress
-	 * @exception InvocationTargetException
-	 *                wraps any CoreException, runtime exception or error thrown by the execute()
-	 *                method
-	 * @see WorkspaceModifyOperation - this class was directly copied from it
-	 */
-	public IStatus execute(IProgressMonitor monitor, IAdaptable info) {
-		// final InvocationTargetException[] iteHolder = new InvocationTargetException[1];
-		IWorkspaceRunnableWithStatus workspaceRunnable = new IWorkspaceRunnableWithStatus(info) {
-			public void run(IProgressMonitor pm) throws CoreException {
-				setStatus(doExecute(pm, getInfo()));
-			}
-		};
-		ISchedulingRule rule = getSchedulingRule();
-		try {
-			if (rule == null)
-				ResourcesPlugin.getWorkspace().run(workspaceRunnable, monitor);
-			else
-				ResourcesPlugin.getWorkspace().run(workspaceRunnable, rule, getOperationExecutionFlags(), monitor);
-		} catch (CoreException e) {
-			Logger.getLogger().logError(e);
-		}
-		return workspaceRunnable.getStatus();
-	}
-
-	public IStatus doExecute(IProgressMonitor monitor, IAdaptable info) {
-		if (null == threadToExtendedOpControl) {
-			threadToExtendedOpControl = new Hashtable();
-		}
-		final Thread currentThread = Thread.currentThread();
-		final boolean isTopLevelOperation = !threadToExtendedOpControl.containsKey(currentThread);
-		try {
-			if (isTopLevelOperation) {
-				boolean allowExtensions = getDataModel() == null ? true : getDataModel().getBooleanProperty(IDataModelProperties.ALLOW_EXTENSIONS);
-				List restrictedExtensions = getDataModel() == null ? Collections.EMPTY_LIST : (List) getDataModel().getProperty(IDataModelProperties.RESTRICT_EXTENSIONS);
-				ExtendedOpControl extendedOpControl = new ExtendedOpControl(allowExtensions, restrictedExtensions);
-				threadToExtendedOpControl.put(currentThread, extendedOpControl);
-			}
-
-			ComposedExtendedOperationHolder extOpHolder = ComposedExtendedOperationHolder.createExtendedOperationHolder(rootOperation.getID());
-			IStatus preOpStatus = runPreOps(monitor, extOpHolder, info);
-			try {
-				addStatus(rootOperation.execute(monitor, info));
-			} catch (ExecutionException e1) {
-				addStatus(new Status(IStatus.ERROR, "org.eclipse.wst.common.frameworks.internal", 0, e1.getMessage(), e1)); //$NON-NLS-1$
-			}
-
-			IStatus postOpStatus = runPostOps(monitor, extOpHolder, info);
-			if (null != preOpStatus) {
-				addExtendedStatus(preOpStatus);
-			}
-			if (null != postOpStatus) {
-				addExtendedStatus(postOpStatus);
-			}
-			if (appendedOperations != null) {
-				OperationStatus composedStatus = null;
-				for (int i = 0; i < appendedOperations.size(); i++) {
-					try {
-						ExtendableOperationImpl op = new ExtendableOperationImpl((IDataModelOperation) appendedOperations.get(i));
-						IStatus status = op.execute(new SubProgressMonitor(monitor, 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK), info);
-						if (composedStatus == null)
-							composedStatus = new OperationStatus(new IStatus[]{status});
-						else
-							composedStatus.add(status);
-					} catch (Exception e) {
-						Logger.getLogger().logError(e);
-					}
-				}
-				if (null != composedStatus) {
-					addStatus(composedStatus);
-				}
-			}
-		} finally {
-			if (isTopLevelOperation) {
-				threadToExtendedOpControl.remove(currentThread);
-			}
-		}
-
-		return opStatus;
-	}
-
-	private IStatus runPreOps(IProgressMonitor pm, ComposedExtendedOperationHolder extOpHolder, IAdaptable info) {
-		IStatus preOpStatus = null;
-		if ((extOpHolder != null) && extOpHolder.hasPreOps()) {
-			preOpStatus = runExtendedOps(extOpHolder.getPreOps(), pm, info);
-		}
-		return preOpStatus;
-	}
-
-	private IStatus runPostOps(IProgressMonitor pm, ComposedExtendedOperationHolder extOpHolder, IAdaptable info) {
-		IStatus postOpStatus = null;
-		if ((extOpHolder != null) && extOpHolder.hasPostOps()) {
-			postOpStatus = runExtendedOps(extOpHolder.getPostOps(), pm, info);
-		}
-
-		return postOpStatus;
-	}
-
-	private IStatus runExtendedOps(List opList, IProgressMonitor pm, IAdaptable info) {
-		IDataModel rootDataModel = rootOperation.getDataModel();
-		IDataModelOperation nestedOp = null;
-		OperationStatus returnStatus = null;
-		IStatus localStatus;
-		String opId = null;
-		ExtendedOpControl opControl = (ExtendedOpControl) threadToExtendedOpControl.get(Thread.currentThread());
-		for (int i = 0; i < opList.size(); i++) {
-			nestedOp = (IDataModelOperation) opList.get(i);
-			opId = nestedOp.getID();
-			if (opControl.shouldExecute(nestedOp.getClass().getName()) && opControl.shouldExecute(opId)) {
-				try {
-					boolean shouldExtendedRun = true;
-
-					List extendedContext = rootDataModel.getExtendedContext();
-					for (int contextCount = 0; shouldExtendedRun && contextCount < extendedContext.size(); contextCount++) {
-						IProject project = (IProject) AdaptabilityUtility.getAdapter(extendedContext.get(contextCount), IProject.class);
-						if (null != project && !IEnablementManager.INSTANCE.getIdentifier(opId, project).isEnabled()) {
-							shouldExtendedRun = false;
-						}
-					}
-					if (shouldExtendedRun) {
-						nestedOp.setDataModel(rootDataModel);
-						ExtendableOperationImpl extendedOp = new ExtendableOperationImpl(nestedOp);
-						localStatus = extendedOp.doExecute(new SubProgressMonitor(pm, IProgressMonitor.UNKNOWN), info);
-					} else
-						localStatus = null;
-				} catch (Exception e) {
-					localStatus = new Status(IStatus.ERROR, WTPCommonPlugin.PLUGIN_ID, 0, WTPResourceHandler.getString("25", new Object[]{nestedOp.getClass().getName()}), e); //$NON-NLS-1$
-				}
-				if (localStatus != null) {
-					if (returnStatus == null) {
-						returnStatus = new OperationStatus(new IStatus[]{localStatus});
-					} else {
-						returnStatus.add(localStatus);
-					}
-				}
-			}
-		}
-		return returnStatus;
-	}
-
-	public void dispose() {
-	}
-
-	public boolean canExecute() {
-		return rootOperation.canExecute();
-	}
-
-	public boolean canRedo() {
-		return rootOperation.canRedo();
-	}
-
-	public boolean canUndo() {
-		return rootOperation.canUndo();
-	}
-
-	public int getOperationExecutionFlags() {
-		return rootOperation.getOperationExecutionFlags();
-	}
-
-	public String getLabel() {
-		return rootOperation.getLabel();
-	}
-
-	public IUndoContext[] getContexts() {
-		return rootOperation.getContexts();
-	}
-
-	public boolean hasContext(IUndoContext context) {
-		return rootOperation.hasContext(context);
-	}
-
-	public void addContext(IUndoContext context) {
-		rootOperation.addContext(context);
-	}
-
-	public void removeContext(IUndoContext context) {
-		rootOperation.removeContext(context);
-	}
-
-	public void setID(String id) {
-		rootOperation.setID(id);
-	}
-
-	public String getID() {
-		return rootOperation.getID();
-	}
-
-	public void setDataModel(IDataModel model) {
-		rootOperation.setDataModel(model);
-	}
-
-	public IDataModel getDataModel() {
-		return rootOperation.getDataModel();
-	}
-
-	public void setEnvironment(IEnvironment env) {
-		environment = env;
-	}
-
-	public IEnvironment getEnvironment() {
-		return environment;
-	}
-
-  public List getPreOperations()
-  {
-    return null;
-  }
-
-  public List getPostOperations()
-  {
-    return null;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IDataModelPausibleOperation.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IDataModelPausibleOperation.java
new file mode 100644
index 0000000..e5d94a7
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IDataModelPausibleOperation.java
@@ -0,0 +1,318 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.frameworks.internal.datamodel;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
+
+/**
+ * <p>
+ * IDataModelManagerOperation is an IDataModelOperation returned from
+ * {@linkorg.eclipse.wst.common.frameworks.datamodel.IDataModel#getDefaultOperation()}. This Operation wraps the IDataModelOperation returned
+ * from the IDatModelProvider backing the IDataModel that created it.
+ * </p>
+ * <p>
+ * This operation supports pre and post operation execution. Pre and post operations are
+ * IDataModelOperations registered through the OperationExtension extension point which are executed
+ * before and after the primary operation.
+ * </p>
+ * <p>
+ * <b>Example 1</b> <br>
+ * Suppose an IDataModelProvider returns IDataModelOperation X as its default operation, and this
+ * IDataModelManagerOperation is wrapping X. Also suppose operation A is registered as a pre
+ * operation to X and operation B is registered as a post operation to X. When this
+ * IDataModelManagerOperation is executed the following operations will be executed in this order:
+ * A, X, B which may be thought as a preorder execution of the following tree:
+ * </p>
+ * 
+ * <pre>
+ *           X
+ *          / \
+ *         A   B
+ *         
+ *   execution = A.execute(),  X.execute(), B.execute()
+ *   undo = B.undo(), X.undo(), A.undo()
+ *   redo = A.redo(), X.redo(), B.redo()
+ * </pre>
+ * 
+ * <p>
+ * <b>Example 2</b> <br>
+ * If A had a pre operation C and post operation D, and B had a pre operation E and post operation F
+ * then the tree would look like:
+ * </p>
+ * 
+ * <pre>
+ *            X
+ *           / \
+ *          /   \
+ *         A     B
+ *        / \   / \
+ *       C   D E   F
+ *   
+ *   execution = C.execute(), A.execute(),  D.execute(), X.execute(), E.execute(), B.execute(), F.execute()
+ *   undo = F.undo(), B.undo(), E.undo(), X.undo(), D.undo(), A.undo(), C.undo()
+ *   redo = C.redo(), A.redo(),  D.redo(), X.redo(), E.redo(), B.redo(), F.redo()
+ * </pre>
+ * 
+ * </p>
+ * <b>Example 3</b> <br>
+ * If there is more than one pre operation or post operation for a particular operation, then there
+ * is no defined ordering of those pre and post operation with respect to each other, other than
+ * that it will be consistent. For example suppose operation X had only two pre operations, A and B,
+ * and two post operations, C and D. The execution tree would be one of the following:
+ * </p>
+ * 
+ * <pre>
+ *         X              X              X              X
+ *        / \            / \            / \            / \
+ *      AB   CD        BA   CD        AB   DC        BA   DC
+ *   
+ *    exec = ABXCD   exec = BAXCD   exec = ABXDC   exec = BAXDC
+ *    undo = DCXBA   undo = DCXAB   undo = CDXBA   undo = CDXAB 
+ *    redo = ABXCD   redo = BAXCD   redo = ABXDC   redo = BAXDC
+ * </pre>
+ * 
+ * <p>
+ * During execution, rollback, undo, and redo, {@link IDataModelPausibleOperationEvent}s are fired to all
+ * registered {@link IDataModelPausibleOperationListener}s giving each of them an opportunity to pause the
+ * operation by returning {@link IDataModelPausibleOperationListener#PAUSE}.
+ * {@link IDataModelPausibleOperationEvent} has more details on when these events are fired.
+ * </p>
+ * <p>
+ * This interface is not intended to be implemented by clients.
+ * </p>
+ * 
+ * @seeorg.eclipse.wst.common.frameworks.datamodel.IDataModel#getDefaultOperation()
+ * 
+ * @since 1.5
+ */
+public interface IDataModelPausibleOperation extends IDataModelOperation {
+
+	/**
+	 * <p>
+	 * The exeuction state when the operation never been executed. When the operation is in this
+	 * state it may only be executed.
+	 * </p>
+	 * 
+	 * @see org.eclipse.core.commands.operations.IUndoableOperation#execute(IProgressMonitor, IAdaptable)
+	 */
+	public static final int NOT_STARTED = 0;
+	/**
+	 * <p>
+	 * The exeuction state while the operation is executing. When the operation is in this state it
+	 * may only be paused by an {@link IDataModelPausibleOperationListener}.
+	 * </p>
+	 * 
+	 * @see org.eclipse.core.commands.operations.IUndoableOperation#execute(IProgressMonitor, IAdaptable)
+	 * @see IDataModelPausibleOperationListener
+	 */
+	public static final int RUNNING_EXECUTE = 1;
+	/**
+	 * <p>
+	 * The exeuction state while the operation is rolling back. When the operation is in this state
+	 * it may only be paused by an {@link IDataModelPausibleOperationListener}.
+	 * </p>
+	 * 
+	 * @see #rollBack(IProgressMonitor, IAdaptable)
+	 * @see IDataModelPausibleOperationListener
+	 */
+	public static final int RUNNING_ROLLBACK = 2;
+	/**
+	 * <p>
+	 * The exeuction state while the operation is redoing. When the operation is in this state it
+	 * may only be paused by an {@link IDataModelPausibleOperationListener}.
+	 * </p>
+	 * 
+	 * @see org.eclipse.core.commands.operations.IUndoableOperation#undo(IProgressMonitor, IAdaptable)
+	 * @see IDataModelPausibleOperationListener
+	 */
+	public static final int RUNNING_UNDO = 3;
+	/**
+	 * <p>
+	 * The exeuction state while the operaiton is redoing. When the operation is in this state it
+	 * may only be paused by an {@link IDataModelPausibleOperationListener}.
+	 * </p>
+	 * 
+	 * @see org.eclipse.core.commands.operations.IUndoableOperation#redo(IProgressMonitor, IAdaptable)
+	 * @see IDataModelPausibleOperationListener
+	 */
+	public static final int RUNNING_REDO = 4;
+	/**
+	 * <p>
+	 * The exeuction state when the operation has been paused while it was executing. When the
+	 * operation is in this state it may either be resumed to continue execution or rolled back to
+	 * undo the partial execution.
+	 * </p>
+	 * 
+	 * @see #resume(IProgressMonitor, IAdaptable)
+	 * @see #rollBack(IProgressMonitor, IAdaptable)
+	 */
+	public static final int PAUSED_EXECUTE = 5;
+	/**
+	 * <p>
+	 * The exeuction state when the operation has been paused while it was rolling back. When the
+	 * operation is in this state it may either be resumed to continue rolling back or executed
+	 * which continue the foward execution from the point where the rollback was paused
+	 * </p>
+	 * 
+	 * @see #resume(IProgressMonitor, IAdaptable)
+	 * @see org.eclipse.core.commands.operations.IUndoableOperation#execute(IProgressMonitor, IAdaptable)
+	 */
+	public static final int PAUSED_ROLLBACK = 6;
+	/**
+	 * <p>
+	 * The exeuction state when the operation has been paused while it was undoing. When the
+	 * operation is in this state it may be only be resumed to continue undoing.
+	 * </p>
+	 * 
+	 * @see #resume(IProgressMonitor, IAdaptable)
+	 */
+	public static final int PAUSED_UNDO = 7;
+	/**
+	 * <p>
+	 * The exeuction state when the operation has been paused while it was redoing. When the
+	 * operation is in this state it may only be resumed to continue redoing.
+	 * </p>
+	 * 
+	 * @see #resume(IProgressMonitor, IAdaptable)
+	 */
+	public static final int PAUSED_REDO = 8;
+	/**
+	 * <p>
+	 * The exeuction state when the operation finished execution. When the operation is in this
+	 * state it may only be undone.
+	 * </p>
+	 * 
+	 * @see org.eclipse.core.commands.operations.IUndoableOperation#undo(IProgressMonitor, IAdaptable)
+	 */
+	public static final int COMPLETE_EXECUTE = 9;
+	/**
+	 * <p>
+	 * The exeuction state when the operation finished rolling back. When the operation is in this
+	 * state it may only be executed.
+	 * </p>
+	 * 
+	 * @see org.eclipse.core.commands.operations.IUndoableOperation#execute(IProgressMonitor, IAdaptable)
+	 */
+	public static final int COMPLETE_ROLLBACK = 10;
+	/**
+	 * <p>
+	 * The exeuction state when the operation finished undoing. When the operation is in this state
+	 * it may only be redone.
+	 * </p>
+	 * 
+	 * @see org.eclipse.core.commands.operations.IUndoableOperation#redo(IProgressMonitor, IAdaptable)
+	 */
+	public static final int COMPLETE_UNDO = 11;
+	/**
+	 * <p>
+	 * The exeuction state when the operation finished redoing. When the operation is in this state
+	 * it may only be udone.
+	 * </p>
+	 * 
+	 * @see org.eclipse.core.commands.operations.IUndoableOperation#undo(IProgressMonitor, IAdaptable)
+	 */
+	public static final int COMPLETE_REDO = 12;
+
+
+	/**
+	 * <p>
+	 * Returns the current execution state of the operation. Returns one of:
+	 * <ul>
+	 * <li>{@link #NOT_STARTED}</li>
+	 * <li>{@link #RUNNING_EXECUTE}</li>
+	 * <li>{@link #RUNNING_ROLLBACK}</li>
+	 * <li>{@link #RUNNING_UNDO}</li>
+	 * <li>{@link #RUNNING_REDO}</li>
+	 * <li>{@link #PAUSED_EXECUTE}</li>
+	 * <li>{@link #PAUSED_ROLLBACK}</li>
+	 * <li>{@link #PAUSED_UNDO}</li>
+	 * <li>{@link #PAUSED_REDO}</li>
+	 * <li>{@link #COMPLETE_EXECUTE}</li>
+	 * <li>{@link #COMPLETE_ROLLBACK}</li>
+	 * <li>{@link #COMPLETE_UNDO}</li>
+	 * <li>{@link #COMPLETE_REDO}</li>
+	 * </ul>
+	 * <p>
+	 * 
+	 * @return The current execution state.
+	 */
+	public int getExecutionState();
+
+	/**
+	 * <p>
+	 * Resumes execution if the operation is curently paused. An operation is paused if
+	 * {@link #getExecutionState()} returns any of {@link #PAUSED_EXECUTE},
+	 * {@link #PAUSED_ROLLBACK}, {@link #PAUSED_UNDO}, or {@link #PAUSED_REDO}.
+	 * </p>
+	 * 
+	 * @param monitor
+	 *            the progress monitor (or <code>null</code>) to use for reporting progress to
+	 *            the user.
+	 * @param info
+	 *            the IAdaptable (or <code>null</code>) provided by the caller in order to supply
+	 *            UI information for prompting the user if necessary. When this parameter is not
+	 *            <code>null</code>, it should minimally contain an adapter for the
+	 *            org.eclipse.swt.widgets.Shell.class.
+	 * 
+	 * @return the IStatus of the resume. The status severity should be set to <code>OK</code> if
+	 *         the operation was successful, and <code>ERROR</code> if it was not. Any other
+	 *         status is assumed to represent an incompletion of the resume.
+	 */
+	public IStatus resume(IProgressMonitor monitor, IAdaptable info) throws ExecutionException;
+
+	/**
+	 * <p>
+	 * Rolls back the partial execution if the operation is currently in
+	 * {@link #getExecutionState()} returns eiter {@link #PAUSED_EXECUTE} or
+	 * {@link #PAUSED_ROLLBACK}.
+	 * </p>
+	 * 
+	 * @param monitor
+	 *            the progress monitor (or <code>null</code>) to use for reporting progress to
+	 *            the user.
+	 * @param info
+	 *            the IAdaptable (or <code>null</code>) provided by the caller in order to supply
+	 *            UI information for prompting the user if necessary. When this parameter is not
+	 *            <code>null</code>, it should minimally contain an adapter for the
+	 *            org.eclipse.swt.widgets.Shell.class.
+	 * 
+	 * @return the IStatus of the resume. The status severity should be set to <code>OK</code> if
+	 *         the operation was successful, and <code>ERROR</code> if it was not. Any other
+	 *         status is assumed to represent an incompletion of the resume.
+	 * 
+	 */
+	public IStatus rollBack(IProgressMonitor monitor, IAdaptable info) throws ExecutionException;
+
+	/**
+	 * <p>
+	 * Adds an operation listener to listen for operation events.
+	 * </p>
+	 * 
+	 * @param operationListener
+	 *            the IOperationListener to add.
+	 */
+	public void addOperationListener(IDataModelPausibleOperationListener operationListener);
+
+	/**
+	 * <p>
+	 * Removes the specified IOperationLinstener.
+	 * <p>
+	 * 
+	 * @param operationListener
+	 *            The IOperatoinListener to remove.
+	 */
+	public void removeOperationListener(IDataModelPausibleOperationListener operationListener);
+
+}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IDataModelPausibleOperationEvent.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IDataModelPausibleOperationEvent.java
new file mode 100644
index 0000000..8b67808
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IDataModelPausibleOperationEvent.java
@@ -0,0 +1,253 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.frameworks.internal.datamodel;
+
+import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
+
+/**
+ * <p>
+ * These events are fired to {@link IDataModelPausibleOperationListener}s from {@link IDataModelPausibleOperation}s during execution, rollback, undo,
+ * and redo.
+ * </p>
+ * 
+ * <p>
+ * <b>Example 2</b> from {@link IDataModelPausibleOperation}<br>
+ * <pre>
+ *          X
+ *         / \
+ *        /   \
+ *       A     B
+ *      / \   / \
+ *     C   D E   F
+ * </pre>
+ * In the example above, the events will be fired in the following order during an execution:
+ * <table border=1>
+ * <tr><th>operation</th><th>operation type</th><th>execution type</th></tr>
+ * <tr><td>X</td><td>NODE_STARTING</td><td>EXECUTE</td></tr>
+ * <tr><td>A</td><td>NODE_STARTING</td><td>EXECUTE</td></tr>
+ * <tr><td>C</td><td>NODE_STARTING</td><td>EXECUTE</td></tr>
+ * <tr><td>C</td><td>MAIN_STARTING</td><td>EXECUTE</td></tr>
+ * <tr><td>C</td><td>MAIN_FINISHED</td><td>EXECUTE</td></tr>
+ * <tr><td>C</td><td>NODE_FINISHED</td><td>EXECUTE</td></tr>
+ * <tr><td>A</td><td>MAIN_STARTING</td><td>EXECUTE</td></tr>
+ * <tr><td>A</td><td>MAIN_FINISHED</td><td>EXECUTE</td></tr>
+ * <tr><td>D</td><td>NODE_STARTING</td><td>EXECUTE</td></tr>
+ * <tr><td>D</td><td>MAIN_STARTING</td><td>EXECUTE</td></tr>
+ * <tr><td>D</td><td>MAIN_FINISHED</td><td>EXECUTE</td></tr>
+ * <tr><td>D</td><td>NODE_FINISHED</td><td>EXECUTE</td></tr>
+ * <tr><td>A</td><td>NODE_FINISHED</td><td>EXECUTE</td></tr>
+ * <tr><td>X</td><td>MAIN_STARTING</td><td>EXECUTE</td></tr>
+ * <tr><td>X</td><td>MAIN_FINISHED</td><td>EXECUTE</td></tr>
+ * <tr><td>B</td><td>NODE_STARTING</td><td>EXECUTE</td></tr>
+ * <tr><td>E</td><td>NODE_STARTING</td><td>EXECUTE</td></tr>
+ * <tr><td>E</td><td>MAIN_STARTING</td><td>EXECUTE</td></tr>
+ * <tr><td>E</td><td>MAIN_FINISHED</td><td>EXECUTE</td></tr>
+ * <tr><td>E</td><td>NODE_FINISHED</td><td>EXECUTE</td></tr>
+ * <tr><td>B</td><td>MAIN_STARTING</td><td>EXECUTE</td></tr>
+ * <tr><td>B</td><td>MAIN_FINISHED</td><td>EXECUTE</td></tr>
+ * <tr><td>F</td><td>NODE_STARTING</td><td>EXECUTE</td></tr>
+ * <tr><td>F</td><td>MAIN_STARTING</td><td>EXECUTE</td></tr>
+ * <tr><td>F</td><td>MAIN_FINISHED</td><td>EXECUTE</td></tr>
+ * <tr><td>F</td><td>NODE_FINISHED</td><td>EXECUTE</td></tr>
+ * <tr><td>B</td><td>NODE_FINISHED</td><td>EXECUTE</td></tr>
+ * <tr><td>X</td><td>NODE_FINISHED</td><td>EXECUTE</td></tr>
+ * </table>
+ * </p>
+ * <p>
+ * <b>Example 2</b> from {@link IDataModelPausibleOperation}<br>
+ * <pre>
+ *          X
+ *         / \
+ *        /   \
+ *       A     B
+ *      / \   / \
+ *     C   D E   F
+ * </pre>
+ * In the example above, the events will be fired in the following order during a rollback:
+ * <table border=1>
+ * <tr><th>operation</th><th>operation type</th><th>execution type</th></tr>
+ * <tr><td>F</td><td>MAIN_STARTING</td><td>ROLLBACK</td></tr>
+ * <tr><td>F</td><td>MAIN_FINISHED</td><td>ROLLBACK</td></tr>
+ * <tr><td>B</td><td>MAIN_STARTING</td><td>ROLLBACK</td></tr>
+ * <tr><td>B</td><td>MAIN_FINISHED</td><td>ROLLBACK</td></tr>
+ * <tr><td>E</td><td>MAIN_STARTING</td><td>ROLLBACK</td></tr>
+ * <tr><td>E</td><td>MAIN_FINISHED</td><td>ROLLBACK</td></tr>
+ * <tr><td>X</td><td>MAIN_STARTING</td><td>ROLLBACK</td></tr>
+ * <tr><td>X</td><td>MAIN_FINISHED</td><td>ROLLBACK</td></tr>
+ * <tr><td>D</td><td>MAIN_STARTING</td><td>ROLLBACK</td></tr>
+ * <tr><td>D</td><td>MAIN_FINISHED</td><td>ROLLBACK</td></tr>
+ * <tr><td>A</td><td>MAIN_STARTING</td><td>ROLLBACK</td></tr>
+ * <tr><td>A</td><td>MAIN_FINISHED</td><td>ROLLBACK</td></tr>
+ * <tr><td>C</td><td>MAIN_STARTING</td><td>ROLLBACK</td></tr>
+ * <tr><td>C</td><td>MAIN_FINISHED</td><td>ROLLBACK</td></tr>
+ * </table>
+ * </p>
+ * <p>
+ * <b>Example 2</b> from {@link IDataModelPausibleOperation}<br>
+ * <pre>
+ *          X
+ *         / \
+ *        /   \
+ *       A     B
+ *      / \   / \
+ *     C   D E   F
+ * </pre>
+ * In the example above, the events will be fired in the following order during an undo:
+ * <table border=1>
+ * <tr><th>operation</th><th>operation type</th><th>execution type</th></tr>
+ * <tr><td>F</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
+ * <tr><td>F</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
+ * <tr><td>B</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
+ * <tr><td>B</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
+ * <tr><td>E</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
+ * <tr><td>E</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
+ * <tr><td>X</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
+ * <tr><td>X</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
+ * <tr><td>D</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
+ * <tr><td>D</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
+ * <tr><td>A</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
+ * <tr><td>A</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
+ * <tr><td>C</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
+ * <tr><td>C</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
+ * </table>
+ * </p>
+ * <p>
+ * <b>Example 2</b> from {@link IDataModelPausibleOperation}<br>
+ * <pre>
+ *          X
+ *         / \
+ *        /   \
+ *       A     B
+ *      / \   / \
+ *     C   D E   F
+ * </pre>
+ * In the example above, the events will be fired in the following order during a redo:
+ * <table border=1>
+ * <tr><th>operation</th><th>operation type</th><th>execution type</th></tr>
+ * <tr><td>C</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
+ * <tr><td>C</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
+ * <tr><td>A</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
+ * <tr><td>A</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
+ * <tr><td>D</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
+ * <tr><td>D</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
+ * <tr><td>X</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
+ * <tr><td>X</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
+ * <tr><td>E</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
+ * <tr><td>E</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
+ * <tr><td>B</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
+ * <tr><td>B</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
+ * <tr><td>F</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
+ * <tr><td>F</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
+ * </table>
+ * </p>
+ * <p>
+ * This interface is not intended to be implemented by clients.
+ * </p>
+ * 
+ * @since 1.5
+ */
+public interface IDataModelPausibleOperationEvent {
+
+	/**
+	 * <p>
+	 * The operation type set when an operation execution traversal is about to start within the
+	 * tree of operations handled by the owning {@link IDataModelPausibleOperation}. This operation
+	 * type is only set when the execution type is set to {@link #EXECUTE}. Using the example
+	 * above, events with this operation type will be fired according to an in order traversal of
+	 * the tree; i.e. XACDBEF
+	 * </p>
+	 */
+	public static final int NODE_STARTING = 1;
+	/**
+	 * <p>
+	 * The operation type set when an operation execution traversal finishes within the tree of
+	 * operations handled by the owning {@link IDataModelPausibleOperation}. This operation type is
+	 * only set when the execution type is set to {@link #EXECUTE}. Using the example above, events
+	 * with this operation type will be fired according to a post order traversal of the tree; i.e.
+	 * CDAEFBX
+	 * </p>
+	 */
+	public static final int NODE_FINISHED = 2;
+	/**
+	 * <p>
+	 * The operation type set right before an operation is going to do its work. This operation type
+	 * may be used with all exection types. Using the example above, events with this operiton type
+	 * will be fired according to the following tree traversal: CADXBEF
+	 * <p>
+	 */
+	public static final int MAIN_STARTING = 3;
+	/**
+	 * <p>
+	 * The operation type set immediatly after an operation finshed doing its work. This operation
+	 * type may be used with all exection types. Using the example above, events with this operiton
+	 * type will be fired according to the following tree traversal: CADXBEF
+	 * <p>
+	 */
+	public static final int MAIN_FINISHED = 4;
+
+	/**
+	 * <p>
+	 * The execution type set when during execution.
+	 * </p>
+	 */
+	public static final int EXECUTE = 0;
+	/**
+	 * <p>
+	 * The execution type set when during rollback.
+	 * </p>
+	 */
+	public static final int ROLLBACK = 1;
+	/**
+	 * <p>
+	 * The execution type set when during undo.
+	 * </p>
+	 */
+	public static final int UNDO = 2;
+	/**
+	 * <p>
+	 * The execution type set when during redo.
+	 * </p>
+	 */
+	public static final int REDO = 3;
+
+	/**
+	 * <p>
+	 * Returns the operation in question. This operation will be one of the operations within the
+	 * tree of operations handled by the owning {@link IDataModelPausibleOperation}.
+	 * </p>
+	 * 
+	 * @return the operation.
+	 */
+	public IDataModelOperation getOperation();
+
+	/**
+	 * <p>
+	 * Returns the type of operation with respect to the {@link IDataModelPausibleOperation}
+	 * executing it. This will be one of {@link #NODE_STARTING}, {@link #NODE_FINISHED},
+	 * {@link #MAIN_STARTING}, or {@link #MAIN_FINISHED}.
+	 * </p>
+	 * 
+	 * @return one of {@link #NODE_STARTING}, {@link #NODE_FINISHED}, {@link #MAIN_STARTING}, or
+	 *         {@link #MAIN_FINISHED}.
+	 */
+	public int getOperationType();
+
+	/**
+	 * <p>
+	 * Returns the type of execution the operation is about to begin. This will be one of
+	 * {@link #EXECUTE}, {@link #ROLLBACK}, {@link #UNDO}, or {@link #REDO}.
+	 * </p>
+	 * 
+	 * @return one of {@link #EXECUTE}, {@link #ROLLBACK}, {@link #UNDO}, or {@link #REDO}.
+	 */
+	public int getExecutionType();
+
+}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IDataModelPausibleOperationListener.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IDataModelPausibleOperationListener.java
new file mode 100644
index 0000000..865f472
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IDataModelPausibleOperationListener.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.frameworks.internal.datamodel;
+
+/**
+ * <p>
+ * Used to listen for {@link IDataModelPausibleOperationEvent}s fired from {@link IDataModelPausibleOperation}s.
+ * </p>
+ * 
+ * @since 1.5
+ */
+public interface IDataModelPausibleOperationListener {
+
+	/**
+	 * <p>
+	 * Clients should return this constant from {@link #notify(IDataModelPausibleOperationEvent)} to specify that
+	 * execution should continue.
+	 * </p>
+	 */
+	public static final int CONTINUE = 0;
+
+	/**
+	 * <p>
+	 * Clients should return this constant from {@link #notify(IDataModelPausibleOperationEvent)} to specify that
+	 * execution should pause.
+	 * </p>
+	 */
+	public static final int PAUSE = 1;
+
+
+	/**
+	 * <p>
+	 * Listener interface by {@link IDataModelPausibleOperation} for operation execution
+	 * notification. Prior to starting any operation's execution, notifications will be sent which
+	 * allow clients to pause an operation's execution. Implementers should return {@link #CONTINUE}
+	 * to allow the operation's execution to continue or {@link #PAUSE} to pause execution. If
+	 * {@link #PAUSE} is returned, then the entire operation stack will be paused until it is
+	 * resumed. The responsiblity for resuming a paused operation lies on the client that paused it.
+	 * </p>
+	 * 
+	 * @param event
+	 *            The operation event
+	 * 
+	 * @return return CONTINUE to continue, or PAUSE to pause.
+	 * 
+	 * @see IDataModelPausibleOperation#addOperationListener(IDataModelPausibleOperationListener)
+	 * @see IDataModelPausibleOperation#resume(org.eclipse.core.runtime.IProgressMonitor,
+	 *      org.eclipse.core.runtime.IAdaptable)
+	 */
+	public int notify(IDataModelPausibleOperationEvent event);
+
+}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/WrappedOperation.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/WrappedOperation.java
new file mode 100644
index 0000000..7e35853
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/WrappedOperation.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.frameworks.internal.datamodel;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.IUndoContext;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.wst.common.environment.IEnvironment;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
+
+public class WrappedOperation implements IDataModelOperation {
+
+	protected IDataModelOperation rootOperation;
+	
+	public WrappedOperation(IDataModelOperation rootOperation) {
+		this.rootOperation = rootOperation;
+		if (null == rootOperation) {
+			throw new NullPointerException();
+		}
+	}
+
+	public boolean canExecute() {
+		return rootOperation.canExecute();
+	}
+
+	public boolean canRedo() {
+		return rootOperation.canRedo();
+	}
+
+	public boolean canUndo() {
+		return rootOperation.canUndo();
+	}
+
+	public void setID(String id) {
+		rootOperation.setID(id);
+	}
+
+	public String getID() {
+		return rootOperation.getID();
+	}
+
+	public void setDataModel(IDataModel model) {
+		rootOperation.setDataModel(model);
+	}
+
+	public IDataModel getDataModel() {
+		return rootOperation.getDataModel();
+	}
+
+	public void setEnvironment(IEnvironment environment) {
+		rootOperation.setEnvironment(environment);
+	}
+
+	public IEnvironment getEnvironment() {
+		return rootOperation.getEnvironment();
+	}
+
+	public ISchedulingRule getSchedulingRule() {
+		return rootOperation.getSchedulingRule();
+	}
+
+	public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		return rootOperation.execute(monitor, info);
+	}
+
+	public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		return rootOperation.undo(monitor, info);
+	}
+
+	public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		return rootOperation.redo(monitor, info);
+	}
+
+	public int getOperationExecutionFlags() {
+		return rootOperation.getOperationExecutionFlags();
+	}
+
+	public String getLabel() {
+		return rootOperation.getLabel();
+	}
+
+	public IUndoContext[] getContexts() {
+		return rootOperation.getContexts();
+	}
+
+	public boolean hasContext(IUndoContext context) {
+		return rootOperation.hasContext(context);
+	}
+
+	public void addContext(IUndoContext context) {
+		rootOperation.addContext(context);
+	}
+
+	public void removeContext(IUndoContext context) {
+		rootOperation.removeContext(context);
+	}
+
+	public void dispose() {
+		rootOperation.dispose();
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/EnablementManager.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/EnablementManager.java
index 5494844..4b4b5e8 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/EnablementManager.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/EnablementManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -64,19 +64,23 @@
         if (project != null && !project.isAccessible()) project = null;
         
         EnablementIdentifier identifier = null;
+        boolean identifierRequiresUpdate = false;
         synchronized(this) {
 	        Map identifiersById = getIdentifiersById(project);	
-	        
 	        identifier = (EnablementIdentifier) identifiersById.get(identifierId);
-	
-	        if (identifier == null) {
-	            identifier = createIdentifier(identifierId, project);
-	            updateIdentifier(identifier);
+	        if(identifier == null){
+	        	identifierRequiresUpdate = true;
+	        	identifier = createIdentifier(identifierId, project);
 	            identifiersById.put(identifierId, identifier);
 	        }
+	    }
+        
+        synchronized (identifier){
+        	if(identifierRequiresUpdate){
+                updateIdentifier(identifier);
+        	}
+        	return identifier;
         }
-
-        return identifier;
     }
 
 	protected EnablementIdentifier createIdentifier(String identifierId, IProject project) {
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/FunctionGroup.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/FunctionGroup.java
index e2fd938..8fb8259 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/FunctionGroup.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/FunctionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -85,7 +85,7 @@
 			try {
 				groupInterface = (IGroupInitializer) element.createExecutableExtension(GROUP_INTIALIZER_CLASS_ATTR);
 			} catch (CoreException e) {
-				Logger.getLogger().logError(WTPResourceHandler.getString("29", new Object[]{GROUP_INTIALIZER_CLASS_ATTR, getInitalizerClassName(), getDeclaringExtensionName()}) + "\r\n"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-4$
+				Logger.getLogger().logError(WTPResourceHandler.getString("29", new Object[]{GROUP_INTIALIZER_CLASS_ATTR, getInitalizerClassName(), getDeclaringExtensionName()}) + "\r\n"); //$NON-NLS-1$//$NON-NLS-2$
 				Logger.getLogger().logError(e);
 			}
 		return groupInterface;
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/IProjectCreationProperties.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/IProjectCreationProperties.java
deleted file mode 100644
index 214e6e5..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/IProjectCreationProperties.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.operations;
-
-
-/**
- * @deprecated use IProjectCreationPropertiesNew
- */
-public interface IProjectCreationProperties {
-
-	/**
-	 * A required dataModel propertyName for a <code>java.lang.String</code> type. This is used to
-	 * specify the project name.
-	 */
-	public static final String PROJECT_NAME = "IProjectCreationProperties.PROJECT_NAME"; //$NON-NLS-1$
-
-	/**
-	 * An optonal dataModel propertyName for a <code>java.lang.String</code> type. Sets the local
-	 * file system location for the described project. The path must be either an absolute file
-	 * system path, or a relative path whose first segment is the name of a defined workspace path
-	 * variable. The default value is the workspace's default location.
-	 */
-	public static final String PROJECT_LOCATION = "IProjectCreationProperties.PROJECT_LOCATION"; //$NON-NLS-1$
-
-
-	/**
-	 * An optional dataModel propertyName for a <code>java.lang.String[]</code> type. This is a
-	 * list of all natures to add to the project. There is no default value.
-	 */
-	public static final String PROJECT_NATURES = "IProjectCreationProperties.PROJECT_NATURES"; //$NON-NLS-1$
-
-	/**
-	 * IProject. An non settable property. This is a conveniece for constructiong getting the
-	 * IProject
-	 */
-	public static final String PROJECT = "IProjectCreationProperties.PROJECT"; //$NON-NLS-1$
-
-	/**
-	 * IProjectDescription. An non settable property. This is a conveniece for constructiong a
-	 * project description.
-	 */
-	public static final String PROJECT_DESCRIPTION = "IProjectCreationProperties.PROJECT_DESCRIPTION"; //$NON-NLS-1$
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/IProjectCreationPropertiesNew.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/IProjectCreationPropertiesNew.java
index 9ab6337..8b36cd7 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/IProjectCreationPropertiesNew.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/IProjectCreationPropertiesNew.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -32,6 +32,15 @@
 	public static final String USER_DEFINED_LOCATION = "IProjectCreationPropertiesNew.USER_DEFINED_LOCATION"; //$NON-NLS-1$
 
 	/**
+	 * A String property used in conjunction with {@link #USE_DEFAULT_LOCATION} and
+	 * {@link #PROJECT_NAME} to overrid the {@link #PROJECT_LOCATION}.
+	 * 
+	 * If {@link #USE_DEFAULT_LOCATION} is <code>false</code> and this property is set, then the
+	 * {@link #PROJECT_LOCATION} is defined by {@link #USER_DEFINED_BASE_LOCATION}/{@link #PROJECT_NAME}.
+	 */
+	public static final String USER_DEFINED_BASE_LOCATION = "IProjectCreationPropertiesNew.USER_DEFINED_BASE_LOCATION"; //$NON-NLS-1$
+
+	/**
 	 * An unsettable property which specified the default location for a newly created project. The
 	 * value is computed by appending the project name to the workspace location.
 	 */
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/OperationStatus.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/OperationStatus.java
index 0acebf5..d90a4c8 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/OperationStatus.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/OperationStatus.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -36,18 +36,30 @@
 		}
 	}
 
+	/**
+	 * Overridden to expose as public instead of protected
+	 */
 	public void setCode(int code) {
 		super.setCode(code);
 	}
 
+	/**
+	 * Overridden to expose as public instead of protected
+	 */
 	public void setException(Throwable exception) {
 		super.setException(exception);
 	}
 
+	/**
+	 * Overridden to expose as public instead of protected
+	 */
 	public void setMessage(String message) {
 		super.setMessage(message);
 	}
 
+	/**
+	 * Overridden to expose as public instead of protected
+	 */
 	public void setSeverity(int severity) {
 		super.setSeverity(severity);
 	}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationDataModelProvider.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationDataModelProvider.java
deleted file mode 100644
index ccf044c..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationDataModelProvider.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on Oct 27, 2003
- * 
- * To change the template for this generated file go to Window&gt;Preferences&gt;Java&gt;Code
- * Generation&gt;Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.operations;
-
-import java.io.File;
-import java.util.Set;
-
-import org.eclipse.core.internal.resources.Resource;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelProvider;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-import org.eclipse.wst.common.frameworks.internal.WTPPlugin;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonMessages;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
-
-/**
- * @deprecated use ProjectCreationDataModelProviderNew instead.
- */
-public class ProjectCreationDataModelProvider extends AbstractDataModelProvider implements IProjectCreationProperties {
-
-	public IDataModelOperation getDefaultOperation() {
-		return new ProjectCreationOperation(model);
-	}
-
-	public void init() {
-		super.init();
-	}
-
-	public Set getPropertyNames() {
-		Set propertyNames = super.getPropertyNames();
-		propertyNames.add(PROJECT);
-		propertyNames.add(PROJECT_NAME);
-		propertyNames.add(PROJECT_LOCATION);
-		propertyNames.add(PROJECT_NATURES);
-		propertyNames.add(PROJECT_DESCRIPTION);
-		return propertyNames;
-	}
-
-	public Object getDefaultProperty(String propertyName) {
-		if (propertyName.equals(PROJECT_LOCATION))
-			return getDefaultLocation();
-		else if (propertyName.equals(PROJECT_DESCRIPTION))
-			return getProjectDescription();
-		return super.getDefaultProperty(propertyName);
-	}
-
-	public boolean propertySet(String propertyName, Object propertyValue) {
-		if (propertyValue != null && propertyName.equals(PROJECT_LOCATION)) {
-			IPath path = getRootLocation();
-			if (path.equals(new Path((String) propertyValue))) {
-				model.setProperty(propertyName, null);
-			}
-			model.setProperty(PROJECT_DESCRIPTION, getProjectDescription());
-		} else if (propertyName.equals(PROJECT_NAME)) {
-			IStatus stat = model.validateProperty(PROJECT_NAME);
-			if (stat != OK_STATUS)
-				return false;
-			model.setProperty(PROJECT, getProject());
-			model.setProperty(PROJECT_DESCRIPTION, getProjectDescription());
-		}
-		return true;
-	}
-
-	private String getDefaultLocation() {
-		IPath path = getRootLocation();
-		String projectName = (String) getProperty(PROJECT_NAME);
-		if (projectName != null)
-			path = path.append(projectName);
-		return path.toOSString();
-	}
-
-	private IPath getRootLocation() {
-		return ResourcesPlugin.getWorkspace().getRoot().getLocation();
-	}
-
-	private IProjectDescription getProjectDescription() {
-		String projectName = (String) getProperty(PROJECT_NAME);
-		IProjectDescription desc = ResourcesPlugin.getWorkspace().newProjectDescription(projectName);
-		if (getDataModel().isPropertySet(PROJECT_LOCATION)) {
-			String projectLocation = (String) getProperty(IProjectCreationProperties.PROJECT_LOCATION);
-			if (projectLocation != null)
-				desc.setLocation(new Path(projectLocation));
-			else
-				desc.setLocation(null);
-		}
-		return desc;
-	}
-
-	protected IProject getProject() {
-		String projectName = (String) getProperty(PROJECT_NAME);
-		return (null != projectName && projectName.length() > 0) ? ResourcesPlugin.getWorkspace().getRoot().getProject(projectName) : null;
-	}
-
-	public IStatus validate(String propertyName) {
-		if (propertyName.equals(PROJECT_NAME)) {
-			IStatus status = validateName();
-			if (!status.isOK())
-				return status;
-		}
-		if (propertyName.equals(PROJECT_LOCATION)) {
-			IStatus status = validateLocation();
-			if (!status.isOK())
-				return status;
-		}
-		if (propertyName.equals(PROJECT_LOCATION) || propertyName.equals(PROJECT_NAME)) {
-			String projectName = getStringProperty(PROJECT_NAME);
-			String projectLoc = getStringProperty(PROJECT_LOCATION);
-			return validateExisting(projectName, projectLoc);
-		}
-		return OK_STATUS;
-	}
-
-	/**
-	 * @param projectName
-	 * @param projectLoc
-	 * @todo Generated comment
-	 */
-	private IStatus validateExisting(String projectName, String projectLoc) {
-		if (projectName != null && !projectName.equals("")) {//$NON-NLS-1$
-			File file = new File(projectLoc);
-			if (file.exists()) {
-				if (file.isDirectory()) {
-					File dotProject = new File(file, ".project");//$NON-NLS-1$
-					if (dotProject.exists()) {
-						return WTPCommonPlugin.createErrorStatus(WTPCommonPlugin.getResourceString(WTPCommonMessages.PROJECT_EXISTS_AT_LOCATION_ERROR, new Object[]{file.toString()}));
-					}
-				}
-			}
-		}
-		return OK_STATUS;
-	}
-
-	public static IProject getProjectHandleFromProjectName(String projectName) {
-		IWorkspace workspace = ResourcesPlugin.getWorkspace();
-		IStatus status = workspace.validateName(projectName, IResource.PROJECT);
-		return (null != projectName && projectName.length() > 0 && status.isOK()) ? ResourcesPlugin.getWorkspace().getRoot().getProject(projectName) : null;
-	}
-
-	public static IStatus validateProjectName(String projectName) {
-		IWorkspace workspace = ResourcesPlugin.getWorkspace();
-		IStatus status = workspace.validateName(projectName, IResource.PROJECT);
-		if (!status.isOK())
-			return status;
-		return OK_STATUS;
-	}
-
-	private IStatus validateName() {
-		String name = getStringProperty(PROJECT_NAME);
-		IStatus status = validateProjectName(name);
-		if (!status.isOK())
-			return status;
-		if (getProject().exists())
-			return WTPCommonPlugin.createErrorStatus(WTPCommonPlugin.getResourceString(WTPCommonMessages.PROJECT_EXISTS_ERROR, new Object[]{name}));
-
-		if (!WTPPlugin.isPlatformCaseSensitive()) {
-			// now look for a matching case variant in the tree
-			IResource variant = ((Resource) getProject()).findExistingResourceVariant(getProject().getFullPath());
-			if (variant != null) {
-				// TODO Fix this string
-				return WTPCommonPlugin.createErrorStatus("Resource already exists with a different case."); //$NON-NLS-1$
-			}
-		}
-		return OK_STATUS;
-	}
-
-	private IStatus validateLocation() {
-		if (getDataModel().isPropertySet(PROJECT_LOCATION)) {
-			String loc = (String) getProperty(PROJECT_LOCATION);
-			IWorkspace workspace = ResourcesPlugin.getWorkspace();
-			IPath path = new Path(loc);
-			return workspace.validateProjectLocation(getProject(), path);
-		}
-		return OK_STATUS;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationDataModelProviderNew.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationDataModelProviderNew.java
index 874f7db..3823ed7 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationDataModelProviderNew.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationDataModelProviderNew.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -22,18 +22,18 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
-import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelProvider;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
 import org.eclipse.wst.common.frameworks.internal.WTPPlugin;
+import org.eclipse.wst.common.frameworks.internal.WTPResourceHandler;
 import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonMessages;
 import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
 
 public class ProjectCreationDataModelProviderNew extends AbstractDataModelProvider implements IProjectCreationPropertiesNew {
 
 	public IDataModelOperation getDefaultOperation() {
-		return new ProjectCreationOperation(model);
+		return new ProjectCreationOperationNew(model);
 	}
 
 	public void init() {
@@ -48,6 +48,7 @@
 		propertyNames.add(USE_DEFAULT_LOCATION);
 		propertyNames.add(DEFAULT_LOCATION);
 		propertyNames.add(USER_DEFINED_LOCATION);
+		propertyNames.add(USER_DEFINED_BASE_LOCATION);
 		propertyNames.add(PROJECT_NATURES);
 		propertyNames.add(PROJECT_DESCRIPTION);
 		return propertyNames;
@@ -57,21 +58,29 @@
 		if (propertyName.equals(PROJECT_LOCATION)) {
 			if (getBooleanProperty(USE_DEFAULT_LOCATION)) {
 				return null;
+			} else if (isPropertySet(USER_DEFINED_BASE_LOCATION)) {
+				return getStringProperty(USER_DEFINED_BASE_LOCATION) + File.separator + getStringProperty(PROJECT_NAME);
 			}
 			return getProperty(USER_DEFINED_LOCATION);
 		} else if (DEFAULT_LOCATION.equals(propertyName)) {
-			IPath path = ResourcesPlugin.getWorkspace().getRoot().getLocation();
-			path = path.append(getStringProperty(PROJECT_NAME));
-			return path.toOSString();
+			return getDefaultLocation();
 		} else if (USE_DEFAULT_LOCATION.equals(propertyName)) {
 			return Boolean.TRUE;
-		} else if (USER_DEFINED_LOCATION.equals(propertyName)) {
-			return "";
+		} else if (USER_DEFINED_LOCATION.equals(propertyName) || USER_DEFINED_BASE_LOCATION.equals(propertyName)) {
+			return ""; //$NON-NLS-1$
 		} else if (propertyName.equals(PROJECT_DESCRIPTION))
 			return getProjectDescription();
 		return super.getDefaultProperty(propertyName);
 	}
 
+	private String getDefaultLocation() {
+		IPath path = ResourcesPlugin.getWorkspace().getRoot().getLocation();
+		String projectName = (String) getProperty(PROJECT_NAME);
+		if (projectName != null)
+			path = path.append(projectName);
+		return path.toOSString();
+	}
+
 	public boolean propertySet(String propertyName, Object propertyValue) {
 		if (propertyName.equals(PROJECT_LOCATION) || propertyName.equals(DEFAULT_LOCATION) || propertyName.equals(PROJECT_DESCRIPTION)) {
 			throw new RuntimeException();
@@ -81,12 +90,12 @@
 				return true;
 			model.setProperty(PROJECT, getProject());
 			model.notifyPropertyChange(DEFAULT_LOCATION, IDataModel.VALUE_CHG);
-			if (getBooleanProperty(USE_DEFAULT_LOCATION)) {
+			if (getBooleanProperty(USE_DEFAULT_LOCATION) || isPropertySet(USER_DEFINED_BASE_LOCATION)) {
 				model.notifyPropertyChange(PROJECT_LOCATION, IDataModel.VALUE_CHG);
 			}
 		} else if (propertyName.equals(USE_DEFAULT_LOCATION)) {
 			model.notifyPropertyChange(PROJECT_LOCATION, IDataModel.VALUE_CHG);
-		} else if (propertyName.equals(USER_DEFINED_LOCATION) && !getBooleanProperty(USE_DEFAULT_LOCATION)) {
+		} else if ((propertyName.equals(USER_DEFINED_LOCATION) || propertyName.equals(USER_DEFINED_BASE_LOCATION)) && !getBooleanProperty(USE_DEFAULT_LOCATION)) {
 			model.notifyPropertyChange(PROJECT_LOCATION, IDataModel.VALUE_CHG);
 		}
 		return true;
@@ -111,7 +120,7 @@
 	public IStatus validate(String propertyName) {
 		if (propertyName.equals(PROJECT_NAME)) {
 			String name = model.getStringProperty(PROJECT_NAME);
-			IStatus status = validateName( name );
+			IStatus status = validateName(name);
 			if (!status.isOK())
 				return status;
 		}
@@ -122,7 +131,13 @@
 		}
 		if (propertyName.equals(PROJECT_LOCATION) || propertyName.equals(PROJECT_NAME)) {
 			String projectName = getStringProperty(PROJECT_NAME);
-			String projectLoc = getStringProperty(PROJECT_LOCATION);
+
+			String projectLoc = ""; //$NON-NLS-1$
+			if (getBooleanProperty(USE_DEFAULT_LOCATION)) {
+				projectLoc = getDefaultLocation();
+			} else {
+				projectLoc = getStringProperty(PROJECT_LOCATION);
+			}
 			return validateExisting(projectName, projectLoc);
 		}
 		return OK_STATUS;
@@ -133,7 +148,7 @@
 	 * @param projectLoc
 	 * @todo Generated comment
 	 */
-	private IStatus validateExisting(String projectName, String projectLoc) {
+	public static IStatus validateExisting(String projectName, String projectLoc) {
 		if (projectName != null && !projectName.equals("")) {//$NON-NLS-1$
 			File file = new File(projectLoc);
 			if (file.exists()) {
@@ -159,6 +174,8 @@
 		IStatus status = workspace.validateName(projectName, IResource.PROJECT);
 		if (!status.isOK())
 			return status;
+		if (projectName.endsWith(" ")) //$NON-NLS-1$
+			return WTPCommonPlugin.createErrorStatus(WTPResourceHandler.getString("41")); //$NON-NLS-1$
 		return OK_STATUS;
 	}
 
@@ -166,21 +183,20 @@
 		IStatus status = validateProjectName(name);
 		if (!status.isOK())
 			return status;
-		IProject project = ProjectUtilities.getProject( name );
-		if (project.exists())
-			return WTPCommonPlugin.createErrorStatus(WTPCommonPlugin.getResourceString(WTPCommonMessages.PROJECT_EXISTS_ERROR, new Object[]{name}));
-
+		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(name);
+		if (project.exists()) {
+			return WTPCommonPlugin.createErrorStatus(WTPCommonPlugin.getResourceString(WTPCommonMessages.PROJECT_EXISTS_SAMENAME_ERROR, new Object[]{name}));
+		}
 		if (!WTPPlugin.isPlatformCaseSensitive()) {
 			// now look for a matching case variant in the tree
 			IResource variant = ((Resource) project).findExistingResourceVariant(project.getFullPath());
 			if (variant != null) {
-				// TODO Fix this string
-				return WTPCommonPlugin.createErrorStatus("Resource already exists with a different case."); //$NON-NLS-1$
+				return WTPCommonPlugin.createErrorStatus(WTPResourceHandler.getString("42")); //$NON-NLS-1$
 			}
 		}
 		return OK_STATUS;
 	}
-	
+
 
 	private IStatus validateLocation() {
 		String loc = (String) getProperty(PROJECT_LOCATION);
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationOperation.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationOperationNew.java
similarity index 91%
rename from plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationOperation.java
rename to plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationOperationNew.java
index 654f5b0..d837cfe 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationOperation.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationOperationNew.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -29,9 +29,9 @@
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
 
-public class ProjectCreationOperation extends AbstractDataModelOperation implements IProjectCreationProperties {
+public class ProjectCreationOperationNew extends AbstractDataModelOperation implements IProjectCreationPropertiesNew {
 
-	public ProjectCreationOperation(IDataModel dataModel) {
+	public ProjectCreationOperationNew(IDataModel dataModel) {
 		super(dataModel);
 	}
 
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/plugin/WTPCommonMessages.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/plugin/WTPCommonMessages.java
index 80f12da..8fade80 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/plugin/WTPCommonMessages.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/plugin/WTPCommonMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -48,4 +48,6 @@
     public static final String MODULE_EXISTS_ERROR = "38"; //$NON-NLS-1$
 	public static final String SOURCEFOLDER_EMPTY = "39"; //$NON-NLS-1$
 	public static final String WEBCONTENTFOLDER_EMPTY = "40"; //$NON-NLS-1$
+	public static final String PROJECT_EXISTS_SAMENAME_ERROR = "43"; //$NON-NLS-1$
+	public static final String RUNTIME_NONE = "44"; //$NON-NLS-1$
 }
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/plugin/WTPCommonPlugin.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/plugin/WTPCommonPlugin.java
index 377e7f9..994c720 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/plugin/WTPCommonPlugin.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/plugin/WTPCommonPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -74,6 +74,14 @@
 	public static IStatus createWarningStatus(String message) {
 		return createWarningStatus(message, null);
 	}
+	
+	/**
+	 * @param string
+	 * @return
+	 */
+	public static IStatus createCancelStatus(String message) {
+		return createCancelStatus(message, null);
+	}	
 
 	/**
 	 * @param string
@@ -90,6 +98,14 @@
 	public static IStatus createErrorStatus(String message, Throwable exception) {
 		return new Status(IStatus.ERROR, PLUGIN_ID, -1, message, exception);
 	}
+	
+	/**
+	 * @param string
+	 * @return
+	 */
+	public static IStatus createCancelStatus(String message, Throwable exception) {
+		return new Status(IStatus.CANCEL, PLUGIN_ID, -1, message, exception);
+	}	
 
 	/**
 	 * Returns the string from the plugin's resource bundle, or 'key' if not found.
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/wtp_common.properties b/plugins/org.eclipse.wst.common.frameworks/src/wtp_common.properties
index e781aee..3af3db7 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/wtp_common.properties
+++ b/plugins/org.eclipse.wst.common.frameworks/src/wtp_common.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2005 IBM Corporation and others.
+# Copyright (c) 2003, 2006 IBM Corporation and others.
 # 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
@@ -10,7 +10,7 @@
 ###############################################################################
 1=A project already exists with this name and location.
 2=The specified EAR project "{0}" is not an EAR project.
-3=The EAR project "{0}" has a J2EEVersion of {1} which is not compatable with the specified module version.
+3=The EAR project "{0}" has a J2EEVersion of {1} which is not compatible with the specified module version.
 4=The EAR project name, "{0}", can not be the same as the project name.
 5={0} file name must be entered.
 6=The {0} does not exist.
@@ -48,3 +48,7 @@
 38=Module name is invalid.
 39=Enter Source Folder
 40=Enter Web content Folder
+41=Project names cannot end with white space.
+42=Resource already exists with a different case.
+43=A project already exists with this name.
+44=<None>
diff --git a/plugins/org.eclipse.wst.common.infopop/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.wst.common.infopop/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..76d68cc
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.infopop/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Apr 17 03:12:42 EDT 2006
+eclipse.preferences.version=1
+encoding/<project>=ISO-8859-1
diff --git a/plugins/org.eclipse.wst.common.infopop/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.wst.common.infopop/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..f774e3c
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.infopop/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,14 @@
+#Mon Apr 17 03:12:36 EDT 2006
+compilers.incompatible-environment=0
+compilers.p.build=0
+compilers.p.deprecated=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=0
+compilers.p.unknown-attribute=0
+compilers.p.unknown-class=0
+compilers.p.unknown-element=0
+compilers.p.unknown-resource=0
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.use-project=true
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.wst.common.infopop/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.infopop/META-INF/MANIFEST.MF
index 20f3fff..603bfb0 100644
--- a/plugins/org.eclipse.wst.common.infopop/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.infopop/META-INF/MANIFEST.MF
@@ -1,8 +1,8 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
-Bundle-Name: Common WST infopops
+Bundle-Name: %Bundle-Name.0
 Bundle-SymbolicName: org.eclipse.wst.common.infopop; singleton:=true
-Bundle-Version: 1.0.0
-Bundle-Vendor: Eclipse.org
+Bundle-Version: 1.0.2.qualifier
+Bundle-Vendor: %Bundle-Vendor.0
 Bundle-Localization: plugin
-Eclipse-AutoStart: true
+Eclipse-LazyStart: true
diff --git a/plugins/org.eclipse.wst.common.infopop/SnippetsContexts.xml b/plugins/org.eclipse.wst.common.infopop/SnippetsContexts.xml
index bfba913..b3b0c43 100644
--- a/plugins/org.eclipse.wst.common.infopop/SnippetsContexts.xml
+++ b/plugins/org.eclipse.wst.common.infopop/SnippetsContexts.xml
@@ -97,5 +97,11 @@
 <topic label="Snippets view" href="../org.eclipse.wst.sse.doc.user/topics/csrcedt001.html"/>
 <topic label="Adding items to snippets drawers" href="../org.eclipse.wst.sse.doc.user/topics/tsrcedt015.html"/>
 </context>
+<context id="snip0080">
+<description>Type a name for the category. The category appears in the Customize Palette dialog box. Once you have created a category, you can add items to the category.
+</description>
+<topic label="Snippets view" href="../org.eclipse.wst.sse.doc.user/topics/csrcedt001.html"/>
+<topic label="Adding items to snippets drawers" href="../org.eclipse.wst.sse.doc.user/topics/tsrcedt015.html"/>
+</context>
 
 </contexts>
diff --git a/plugins/org.eclipse.wst.common.infopop/about.html b/plugins/org.eclipse.wst.common.infopop/about.html
index 4c99086..2199df3 100644
--- a/plugins/org.eclipse.wst.common.infopop/about.html
+++ b/plugins/org.eclipse.wst.common.infopop/about.html
@@ -1,22 +1,34 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
+<HTML>
+
 <head>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
 <title>About</title>
+<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
 </head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
 
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+<BODY lang="EN-US">
 
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
+<H3>About This Content</H3>
 
-</body>
-</html>
\ No newline at end of file
+<P>June, 2008</P>
+
+<H3>License</H3>
+
+<P>The Eclipse Foundation makes available all content in this plug-in 
+("Content"). Unless otherwise indicated below, the Content is provided to you 
+under the terms and conditions of the Eclipse Public License Version 1.0 
+("EPL"). A copy of the EPL is available at
+<A href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</A>. 
+For purposes of the EPL, "Program" will mean the Content.</P>
+
+<P>If you did not receive this Content directly from the Eclipse Foundation, the 
+Content is being redistributed by another party ("Redistributor") and different 
+terms and conditions may apply to your use of any object code in the Content. 
+Check the Redistributor’s license that was provided with the Content. If no such 
+license exists, contact the Redistributor. Unless otherwise indicated below, the 
+terms and conditions of the EPL still apply to any source code in the Content 
+and such source code may be obtained at
+<A href="http://www.eclipse.org/">http://www.eclipse.org/</A>.</P>
+
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.wst.common.infopop/build.properties b/plugins/org.eclipse.wst.common.infopop/build.properties
index ed51e16..c1d3dbf 100644
--- a/plugins/org.eclipse.wst.common.infopop/build.properties
+++ b/plugins/org.eclipse.wst.common.infopop/build.properties
@@ -1,6 +1,5 @@
 bin.includes = plugin.xml,\
                about.html,\
                SnippetsContexts.xml,\
-               EditorCssContexts.xml,\
-               META-INF/
-src.includes = build.properties
+               META-INF/,\
+               plugin.properties
diff --git a/plugins/org.eclipse.wst.common.infopop/plugin.properties b/plugins/org.eclipse.wst.common.infopop/plugin.properties
new file mode 100644
index 0000000..74f0260
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.infopop/plugin.properties
@@ -0,0 +1,3 @@
+# properties file for org.eclipse.wst.common.infopop
+Bundle-Name.0 = Common WST infopops
+Bundle-Vendor.0 = Eclipse.org
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.modulecore/.classpath b/plugins/org.eclipse.wst.common.modulecore/.classpath
index 48c8e15..0c7fcda 100644
--- a/plugins/org.eclipse.wst.common.modulecore/.classpath
+++ b/plugins/org.eclipse.wst.common.modulecore/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="modulecore-src/"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.wst.common.modulecore/.cvsignore b/plugins/org.eclipse.wst.common.modulecore/.cvsignore
index 475f127..117759c 100644
--- a/plugins/org.eclipse.wst.common.modulecore/.cvsignore
+++ b/plugins/org.eclipse.wst.common.modulecore/.cvsignore
@@ -5,3 +5,4 @@
 doc
 @dot
 src.zip
+javaCompiler...args
diff --git a/plugins/org.eclipse.wst.common.modulecore/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.common.modulecore/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..31bb1e6
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,62 @@
+#Thu May 10 18:38:08 EDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=ignore
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=error
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=ignore
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.wst.common.modulecore/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.wst.common.modulecore/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..a18ff1d
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,4 @@
+#Wed Mar 19 17:18:41 EDT 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.ui.javadoc=false
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\r\n * @return the ${bare_field_name}\r\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\r\n * @param ${param} the ${bare_field_name} to set\r\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author ${user}\r\n *\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/* (non-Javadoc)\r\n * ${see_to_overridden}\r\n */</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\r\n * ${tags}\r\n * ${see_to_target}\r\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">org.eclipse.wst.common.componentcore.internal.ModulecorePlugin.logError(${exception_var});</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\r\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\r\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
diff --git a/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF
index 0ae5a63..ae56c2e 100644
--- a/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF
@@ -1,31 +1,34 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
-Bundle-Name: Modulecore Plug-in
+Bundle-Name: %Bundle-Name.0
 Bundle-Vendor: %provider
 Bundle-SymbolicName: org.eclipse.wst.common.modulecore; singleton:=true
-Bundle-Version: 1.0.0
+Bundle-Version: 1.1.200.qualifier
 Bundle-Activator: org.eclipse.wst.common.componentcore.internal.ModulecorePlugin
 Bundle-Localization: plugin
 Export-Package: org.eclipse.wst.common.componentcore,
  org.eclipse.wst.common.componentcore.datamodel,
  org.eclipse.wst.common.componentcore.datamodel.properties,
- org.eclipse.wst.common.componentcore.internal,
- org.eclipse.wst.common.componentcore.internal.builder,
- org.eclipse.wst.common.componentcore.internal.impl,
- org.eclipse.wst.common.componentcore.internal.operation,
- org.eclipse.wst.common.componentcore.internal.resources,
- org.eclipse.wst.common.componentcore.internal.util,
+ org.eclipse.wst.common.componentcore.internal;x-internal:=true,
+ org.eclipse.wst.common.componentcore.internal.builder;x-internal:=true,
+ org.eclipse.wst.common.componentcore.internal.impl;x-internal:=true,
+ org.eclipse.wst.common.componentcore.internal.operation;x-internal:=true,
+ org.eclipse.wst.common.componentcore.internal.resources;x-internal:=true,
+ org.eclipse.wst.common.componentcore.internal.util;x-internal:=true,
  org.eclipse.wst.common.componentcore.resources
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.wst.common.frameworks,
- org.eclipse.core.resources,
- org.eclipse.emf.ecore,
- org.eclipse.wst.common.emfworkbench.integration,
- org.eclipse.wst.common.emf,
- org.eclipse.emf.ecore.xmi,
- org.eclipse.core.commands,
- org.eclipse.emf.edit,
- org.eclipse.jem.util,
- org.eclipse.wst.common.uriresolver,
- org.eclipse.wst.common.project.facet.core
-Eclipse-AutoStart: true
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.wst.common.frameworks;bundle-version="[1.1.200,2.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.emf.ecore;bundle-version="[2.4.0,3.0.0)",
+ org.eclipse.wst.common.emfworkbench.integration;bundle-version="[1.1.200,2.0.0)",
+ org.eclipse.wst.common.emf;bundle-version="[1.1.200,2.0.0)",
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.4.0,3.0.0)",
+ org.eclipse.core.commands;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.emf.edit;bundle-version="[2.4.0,3.0.0)",
+ org.eclipse.jem.util;bundle-version="[2.0.100,3.0.0)",
+ org.eclipse.wst.common.uriresolver;bundle-version="[1.1.301,2.0.0)",
+ org.eclipse.wst.common.project.facet.core;bundle-version="[1.3.0,2.0.0)",
+ org.eclipse.wst.common.environment;bundle-version="[1.0.200,2.0.0)",
+ org.eclipse.wst.validation;bundle-version="[1.2.0,2.0.0)"
+Eclipse-LazyStart: true
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.wst.common.modulecore/about.html b/plugins/org.eclipse.wst.common.modulecore/about.html
index 6f6b96c..2199df3 100644
--- a/plugins/org.eclipse.wst.common.modulecore/about.html
+++ b/plugins/org.eclipse.wst.common.modulecore/about.html
@@ -1,22 +1,34 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
+<HTML>
+
 <head>
 <title>About</title>
 <meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
 </head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
 
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+<BODY lang="EN-US">
 
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
+<H3>About This Content</H3>
 
-</body>
-</html>
\ No newline at end of file
+<P>June, 2008</P>
+
+<H3>License</H3>
+
+<P>The Eclipse Foundation makes available all content in this plug-in 
+("Content"). Unless otherwise indicated below, the Content is provided to you 
+under the terms and conditions of the Eclipse Public License Version 1.0 
+("EPL"). A copy of the EPL is available at
+<A href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</A>. 
+For purposes of the EPL, "Program" will mean the Content.</P>
+
+<P>If you did not receive this Content directly from the Eclipse Foundation, the 
+Content is being redistributed by another party ("Redistributor") and different 
+terms and conditions may apply to your use of any object code in the Content. 
+Check the Redistributor’s license that was provided with the Content. If no such 
+license exists, contact the Redistributor. Unless otherwise indicated below, the 
+terms and conditions of the EPL still apply to any source code in the Content 
+and such source code may be obtained at
+<A href="http://www.eclipse.org/">http://www.eclipse.org/</A>.</P>
+
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.wst.common.modulecore/model/componentCore.ecore b/plugins/org.eclipse.wst.common.modulecore/model/componentCore.ecore
index 1e885f6..fccafb8 100644
--- a/plugins/org.eclipse.wst.common.modulecore/model/componentCore.ecore
+++ b/plugins/org.eclipse.wst.common.modulecore/model/componentCore.ecore
@@ -58,6 +58,7 @@
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="dependencyType" lowerBound="1"
         eType="#//DependencyType"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="dependentObject" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="archiveName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EDataType" name="URI" instanceClassName="org.eclipse.emf.common.util.URI">
     <eAnnotations source="keywords">
@@ -73,5 +74,7 @@
         eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" defaultValueLiteral=""/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="components" unique="false"
         upperBound="-1" eType="#//WorkbenchComponent" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
   </eClassifiers>
 </ecore:EPackage>
diff --git a/plugins/org.eclipse.wst.validation.ui/plugin.properties b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/modulecore.properties
similarity index 71%
rename from plugins/org.eclipse.wst.validation.ui/plugin.properties
rename to plugins/org.eclipse.wst.common.modulecore/modulecore-src/modulecore.properties
index 5002309..55b628e 100644
--- a/plugins/org.eclipse.wst.validation.ui/plugin.properties
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/modulecore.properties
@@ -1,16 +1,11 @@
 ###############################################################################
-# Copyright (c) 2001, 2004 IBM Corporation and others.
+# Copyright (c) 2003, 2006 IBM Corporation and others.
 # 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:
 # IBM Corporation - initial API and implementation
 ###############################################################################
-#
-# Version 1.3
-#
-VBF_TITLE_PROPERTIES=Validation
-VBF_UI_POPUP_RUNVALIDATION=&Run Validation
-VBF_TITLE_PREFERENCE=Validation
+NEEDSMIGRATING=This project needs to migrate WTP metadata
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation.ui/plugin.properties b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/modulecoreNLS.properties
similarity index 65%
copy from plugins/org.eclipse.wst.validation.ui/plugin.properties
copy to plugins/org.eclipse.wst.common.modulecore/modulecore-src/modulecoreNLS.properties
index 5002309..f76b2da 100644
--- a/plugins/org.eclipse.wst.validation.ui/plugin.properties
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/modulecoreNLS.properties
@@ -1,16 +1,12 @@
 ###############################################################################
-# Copyright (c) 2001, 2004 IBM Corporation and others.
+# Copyright (c) 2003, 2006 IBM Corporation and others.
 # 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:
 # IBM Corporation - initial API and implementation
 ###############################################################################
-#
-# Version 1.3
-#
-VBF_TITLE_PROPERTIES=Validation
-VBF_UI_POPUP_RUNVALIDATION=&Run Validation
-VBF_TITLE_PREFERENCE=Validation
+Acquiring_ArtifactEdit_For_Read_Exception=Exception while acquiring artifact edit for read.
+Acquiring_ArtifactEdit_For_Write_Exception=Exception while acquiring artifact edit for write.
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ArtifactEdit.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ArtifactEdit.java
index 320c26e..46c541d 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ArtifactEdit.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ArtifactEdit.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -10,25 +10,39 @@
  *******************************************************************************/
 package org.eclipse.wst.common.componentcore;
 
+import java.util.EventObject;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.common.command.BasicCommandStack;
 import org.eclipse.emf.common.command.CommandStack;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.jem.internal.util.emf.workbench.nls.EMFWorkbenchResourceHandler;
+import org.eclipse.jem.util.UIContextDetermination;
 import org.eclipse.wst.common.componentcore.internal.ArtifactEditModel;
+import org.eclipse.wst.common.componentcore.internal.BinaryComponentHelper;
+import org.eclipse.wst.common.componentcore.internal.impl.ArtifactEditModelFactory;
 import org.eclipse.wst.common.componentcore.internal.impl.ModuleURIUtil;
+import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.frameworks.internal.operations.IOperationHandler;
-import org.eclipse.wst.common.internal.emfworkbench.edit.EditModelRegistry;
 import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
 import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelListener;
-import org.eclipse.wst.common.internal.emfworkbench.integration.IEditModelFactory;
+import org.eclipse.wst.common.internal.emfworkbench.validateedit.IValidateEditContext;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
 
 /**
  * Provides a Facade pattern for accessing Module Content Metamodels for Web Tools Platform flexible
@@ -66,14 +80,17 @@
 	private boolean isReadOnly;
 	private boolean isArtifactEditModelSelfManaged;
 
-
+	private boolean isBinary;
+	private BinaryComponentHelper binaryComponentHelper;
+	private final IProject project;
+	
 	/**
 	 * 
 	 */
 	protected ArtifactEdit() {
 		super();
 		artifactEditModel = null;
-		// TODO Auto-generated constructor stub
+		project = null;
 	}
 
 	/**
@@ -98,11 +115,14 @@
 	 *         model
 	 */
 	public static ArtifactEdit getArtifactEditForRead(IVirtualComponent aModule) {
+		if(aModule.isBinary()){
+			return new ArtifactEdit(aModule);
+		}
 		if (isValidEditableModule(aModule)) {
 			IProject project = aModule.getProject();
 			ModuleCoreNature nature = ModuleCoreNature.getModuleCoreNature(project);
 			return new ArtifactEdit(nature, aModule, true);
-		}
+		} 
 		return null;
 	}
 
@@ -127,7 +147,7 @@
 	 *         underlying content model
 	 */
 	public static ArtifactEdit getArtifactEditForWrite(IVirtualComponent aModule) {
-		if (isValidEditableModule(aModule)) {
+		if (!aModule.isBinary() && isValidEditableModule(aModule)) {
 			IProject project = aModule.getProject();
 			ModuleCoreNature nature = ModuleCoreNature.getModuleCoreNature(project);
 			return new ArtifactEdit(nature, aModule, false);
@@ -207,15 +227,11 @@
 		if (aModule == null)
 			return false;
 		if (ModuleURIUtil.fullyQualifyURI(aModule.getProject()) == null)
-			return false;
-		/* and the containing project must be resolveable and accessible */
-		IProject project = aModule.getProject();
-		if (project == null || !project.isAccessible())
-			return false;
-		/* and an edit model factory must be defined for the module type */
-		IEditModelFactory factory = EditModelRegistry.getInstance().findEditModelFactoryByProject(aModule.getProject());
-		if (factory == null)
-			return false;
+				return false;
+			/* and the containing project must be resolveable and accessible */
+			IProject project = aModule.getProject();
+			if (project == null || !project.isAccessible())
+				return false;
 		return true;
 	}
 
@@ -231,6 +247,26 @@
 		artifactEditModel = anArtifactEditModel;
 		isReadOnly = artifactEditModel.isReadOnly();
 		isArtifactEditModelSelfManaged = false;
+		
+		project = anArtifactEditModel.getProject();
+	}
+
+	
+	protected ArtifactEdit(IVirtualComponent aBinaryModule){
+		if(!aBinaryModule.isBinary()){
+			throw new RuntimeException("This constructor is only for binary components.");
+		}
+		binaryComponentHelper = initBinaryComponentHelper(aBinaryModule);
+		artifactEditModel = null;
+		isReadOnly = true;
+		isBinary = true;
+		isArtifactEditModelSelfManaged = true;
+		project = null;
+		
+	}
+	
+	protected BinaryComponentHelper initBinaryComponentHelper(IVirtualComponent binaryModule) {
+		return null;
 	}
 
 	/**
@@ -251,6 +287,7 @@
 			artifactEditModel = aNature.getArtifactEditModelForWrite(ModuleURIUtil.fullyQualifyURI(aModule.getProject()), this);
 		isReadOnly = toAccessAsReadOnly;
 		isArtifactEditModelSelfManaged = true;
+		project = aNature.getProject();
 	}
 
 	/**
@@ -273,13 +310,48 @@
 	 * Creates an instance facade for the given {@see WorkbenchComponent}.
 	 * </p>
 	 * 
-	 * @param aNature
-	 *            A non-null {@see ModuleCoreNature}&nbsp;for an accessible project
-	 * @param aModule
-	 *            A non-null {@see WorkbenchComponent}&nbsp;pointing to a module from the given
-	 *            {@see ModuleCoreNature}
+	 * @param aProject
+	 * @param toAccessAsReadOnly
+	 * @param forCreate
+	 * @param projectType
+	 * @throws IllegalArgumentException
 	 */
 	protected ArtifactEdit(IProject aProject, boolean toAccessAsReadOnly, boolean forCreate, String projectType) throws IllegalArgumentException {
+		
+		this(aProject,toAccessAsReadOnly,forCreate,projectType,null);
+	}
+	
+	protected void verifyOperationSupported() {
+		if(!validArtifactEdit){
+			throw new RuntimeException("Invalid Artifact Edit access (model version not supported)");
+		}
+	}
+	
+	private boolean validArtifactEdit = true;
+	
+	public boolean isValid() {
+		return validArtifactEdit;
+	}
+	
+	protected void markInvalid(){
+		Logger.global.log(Level.WARNING, "Invalid Artifact Edit access (model version not supported)");
+		validArtifactEdit = false;
+	}
+	
+	
+	/**
+	 * <p>
+	 * Creates an instance facade for the given {@see WorkbenchComponent}.
+	 * </p>
+	 * 
+	 * @param aProject
+	 * @param toAccessAsReadOnly
+	 * @param forCreate
+	 * @param projectType - Used to pass specific editModel edit (Used to lookup factory)
+	 * @param editModelParams - Properties that can be used to create cacheKey on editModelFactory
+	 * @throws IllegalArgumentException
+	 */
+	protected ArtifactEdit(IProject aProject, boolean toAccessAsReadOnly, boolean forCreate, String projectType, Map editModelParams) throws IllegalArgumentException {
 
 		if (aProject == null || !aProject.isAccessible())
 			throw new IllegalArgumentException("Invalid project: " + aProject);
@@ -288,22 +360,82 @@
 
 		if (nature == null)
 			throw new IllegalArgumentException("Project does not have ModuleCoreNature: " + aProject);
-
+		if (!validProjectVersion(aProject)){
+			markInvalid();
+		}
 		IVirtualComponent component = ComponentCore.createComponent(aProject);
 		if (component == null)
 			throw new IllegalArgumentException("Invalid component handle: " + aProject);
 		if (!forCreate && !isValidEditableModule(component))
 			throw new IllegalArgumentException("Invalid component handle: " + aProject);
+		project = aProject;
 		URI componentURI = ModuleURIUtil.fullyQualifyURI(aProject);
-
-		if (toAccessAsReadOnly)
-			artifactEditModel = nature.getArtifactEditModelForRead(componentURI, this, projectType);
-		else
-			artifactEditModel = nature.getArtifactEditModelForWrite(componentURI, this, projectType);
+		if (getContentTypeDescriber() != null) {
+			if (editModelParams == null)
+				editModelParams = new HashMap();
+			editModelParams.put(ArtifactEditModelFactory.PARAM_ROOT_URI, getRootURI());
+			editModelParams.put(ArtifactEditModelFactory.PARAM_ROOT_CONTENT_TYPE, getContentTypeDescriber());
+		}
+		if (toAccessAsReadOnly) 
+			artifactEditModel = nature.getArtifactEditModelForRead(componentURI, this, projectType, editModelParams);
+		else 
+			artifactEditModel = nature.getArtifactEditModelForWrite(componentURI, this, projectType, editModelParams);
+		
+			
 		isReadOnly = toAccessAsReadOnly;
 		isArtifactEditModelSelfManaged = true;
 	}
+	
+	public boolean isProjectOfType(IProject project, String typeID) {
+		IFacetedProject facetedProject = null;
+		try {
+			facetedProject = ProjectFacetsManager.create(project);
+		} catch (CoreException e) {
+			return false;
+		}
+		if (facetedProject != null && ProjectFacetsManager.isProjectFacetDefined(typeID)) {
+			IProjectFacet projectFacet = ProjectFacetsManager.getProjectFacet(typeID);
+			return projectFacet != null && facetedProject.hasProjectFacet(projectFacet);
+		}
+		return false;
+	}
+	/**
+	 * Used to optionally define an associated content type for XML file creation
+	 * @return
+	 */
+	protected String getContentTypeDescriber() {
+		
+		if (isProjectOfType(project, IModuleConstants.JST_EJB_MODULE))
+			return "org.eclipse.jst.j2ee.ejbDD";
+		if (isProjectOfType(project, IModuleConstants.JST_WEB_MODULE))
+			return "org.eclipse.jst.j2ee.webDD";
+		if (isProjectOfType(project, IModuleConstants.JST_EAR_MODULE))
+			return "org.eclipse.jst.j2ee.earDD";
+		if (isProjectOfType(project, IModuleConstants.JST_APPCLIENT_MODULE))
+			return "org.eclipse.jst.j2ee.appclientDD";
+		return null;
+	}
+	
+	/**
+	 * Used to optionally define an root URI for the project
+	 * @return
+	 */
+	protected URI getRootURI() {
+		
+		if (isProjectOfType(project, IModuleConstants.JST_EJB_MODULE))
+			return URI.createURI("META-INF/ejb-jar.xml");
+		if (isProjectOfType(project, IModuleConstants.JST_WEB_MODULE))
+			return URI.createURI("WEB-INF/web.xml");
+		if (isProjectOfType(project, IModuleConstants.JST_EAR_MODULE))
+			return URI.createURI("META-INF/application.xml");
+		if (isProjectOfType(project, IModuleConstants.JST_APPCLIENT_MODULE))
+			return URI.createURI("META-INF/application-client.xml");
+		return null;
+	}
 
+	protected boolean validProjectVersion(IProject project2) {
+		return true;
+	}
 
 	/**
 	 * <p>
@@ -318,7 +450,8 @@
 	public void save(IProgressMonitor aMonitor) {
 		if (isReadOnly())
 			throwAttemptedReadOnlyModification();
-		artifactEditModel.save(aMonitor, this);
+		else if (validateEdit().isOK())
+			artifactEditModel.save(aMonitor, this);
 	}
 
 	/**
@@ -334,17 +467,25 @@
 	public void saveIfNecessary(IProgressMonitor aMonitor) {
 		if (isReadOnly())
 			throwAttemptedReadOnlyModification();
-		artifactEditModel.saveIfNecessary(aMonitor, this);
+		else if (validateEdit().isOK())
+			artifactEditModel.saveIfNecessary(aMonitor, this);
+	}
+	
+	/**
+	 * Validate edit for resource state
+	 */
+	public IStatus validateEdit() {
+		IValidateEditContext validator = (IValidateEditContext) UIContextDetermination.createInstance(IValidateEditContext.CLASS_KEY);
+		return validator.validateState(getArtifactEditModel());
 	}
 
 	/**
 	 * Save only if necessary. If typically a save would not occur because this edit model is
-	 * shared, the user will be prompted using the
-	 * 
-	 * @operationHandler. If the prompt returns true (the user wants to save) the entire edit model
-	 *                    will be saved. You may pass in a boolean <code>wasDirty</code> to
-	 *                    indicate whether this edit model was dirty prior to making any changes and
-	 *                    calling this method. {@link EditModel#isDirty()}
+	 * shared, the user will be prompted using the @operationHandler. 
+	 * If the prompt returns true (the user wants to save) and the model is not shared, 
+	 * the entire edit model will be saved. You may pass in a boolean <code>wasDirty</code> to
+	 * indicate whether this edit model was dirty prior to making any changes and
+	 * calling this method. {@link EditModel#isDirty()}
 	 */
 	public void saveIfNecessaryWithPrompt(IProgressMonitor monitor, IOperationHandler operationHandler, boolean wasDirty) {
 
@@ -402,7 +543,9 @@
 	 * @see org.eclipse.wst.common.componentcore.IEditModelHandler#dispose()
 	 */
 	public void dispose() {
-		if (isArtifactEditModelSelfManaged && artifactEditModel != null)
+		if(isBinary()){
+			binaryComponentHelper.dispose();
+		} else if (isArtifactEditModelSelfManaged && artifactEditModel != null)
 			artifactEditModel.releaseAccess(this);
 	}
 
@@ -415,7 +558,11 @@
 	 * @return The root object of the underlying model
 	 */
 	public EObject getContentModelRoot() {
-		return artifactEditModel.getPrimaryRootObject();
+		if(isBinary())
+		   return binaryComponentHelper.getPrimaryRootObject();
+		if (artifactEditModel!=null)
+			return artifactEditModel.getPrimaryRootObject();
+		return null;
 	}
 
 	/**
@@ -427,7 +574,12 @@
 	 *            A non-null EditModelListener
 	 */
 	public void addListener(EditModelListener listener) {
-		artifactEditModel.addListener(listener);
+		if(isBinary()){
+			
+		} else {
+			if (artifactEditModel!=null && listener!=null)
+				artifactEditModel.addListener(listener);
+		}
 	}
 
 	/**
@@ -440,7 +592,10 @@
 	 *           
 	 */
 	public void removeListener(EditModelListener listener) {
-		artifactEditModel.removeListener(listener);
+		if(isBinary()){
+		} else if (artifactEditModel!=null && !artifactEditModel.isDisposed()) {
+			artifactEditModel.removeListener(listener);
+		}
 	}
 
 	/**
@@ -454,6 +609,9 @@
 	 * @return
 	 */
 	public boolean hasEditModel(EditModel editModel) {
+		if(isBinary()){
+			return false;
+		}
 		return artifactEditModel == editModel;
 	}
 	/**
@@ -461,15 +619,19 @@
 	 * @return IProject - returns the project of the underlying workbench component.
 	 */
 	public IProject getProject() {
-		
-		return getArtifactEditModel().getProject();
+		if(isBinary()){
+			return null;
+		}
+		return project;
 	}
 	/**
 	 * 
 	 * @return IVirtualComponent - returns the underlying workbench component.
 	 */
 	public IVirtualComponent getComponent() {
-		
+		if(isBinary()){
+			return binaryComponentHelper.getComponent();
+		}
 		return getArtifactEditModel().getVirtualComponent();
 	}
 
@@ -477,14 +639,23 @@
 	 * @return The underlying managed edit model
 	 */
 	protected ArtifactEditModel getArtifactEditModel() {
+		if(isBinary()){
+			throwAttemptedBinaryEditModelAccess();
+		}
 		return artifactEditModel;
 	}
 	
+	protected BinaryComponentHelper getBinaryComponentHelper() {
+		return binaryComponentHelper;
+	}
+	
 	/**
 	 * @return The EMF command stack managed by the underlying editmodel
-	 * @deprecated Use ((ArtifactEditModel)getAdapter(ArtifactEditModel.ADAPTER_TYPE)).getCommandStack()
 	 */
 	public CommandStack getCommandStack() {
+		if(isBinary()){
+			return new BasicCommandStack();
+		}
 		return artifactEditModel.getCommandStack();
 	}
 	/**
@@ -492,13 +663,18 @@
 	 * @deprecated Use ((ArtifactEditModel)getAdapter(ArtifactEditModel.ADAPTER_TYPE)).deleteResource(aResource);
 	 */
 	public void deleteResource(Resource aResource) {
+		if(isBinary()){
+			throwAttemptedBinaryEditModelAccess();
+		}
 		artifactEditModel.deleteResource(aResource);
 	}
 	/**
 	 * @return The isDirty flag based the underlying editmodel's list of resources.
-	 * @deprecated Use ((ArtifactEditModel)getAdapter(ArtifactEditModel.ADAPTER_TYPE)).isDirty()
 	 */
 	public boolean isDirty() {
+		if(isBinary()){
+			return false;
+		}
 		return artifactEditModel.isDirty();
 	}
 
@@ -506,21 +682,32 @@
 		throw new IllegalStateException("Attempt to modify an ArtifactEdit instance facade that was loaded as read-only.");
 	}
 
+	protected void throwAttemptedBinaryEditModelAccess() {
+		throw new IllegalStateException("Attempt to modify an ArtifactEdit instance facade that was loaded as binary.");
+	}
+	
 	public boolean isReadOnly() {
 		return isReadOnly;
 	}
+
+	public boolean isBinary() {
+		return isBinary;
+	}
 	
 	/**
 	 * Force all of the known resource URIs to be loaded
 	 * if they are not already.
-	 * @deprecated Use ((ArtifactEditModel)getAdapter(ArtifactEditModel.ADAPTER_TYPE)).forceLoadKnownResources();
 	 */
 	public void forceLoadKnownResources() {
-		List uris = getArtifactEditModel().getKnownResourceUris();
-		URI uri = null;
-		for (int i = 0; i < uris.size(); i++) {
-			uri = (URI) uris.get(i);
-			getArtifactEditModel().getResource(uri);
+		if(isBinary()){
+		
+		} else {
+			List uris = getArtifactEditModel().getKnownResourceUris();
+			URI uri = null;
+			for (int i = 0; i < uris.size(); i++) {
+				uri = (URI) uris.get(i);
+				getArtifactEditModel().getResource(uri);
+			}
 		}
 	}
 	
@@ -529,10 +716,19 @@
 	 * @deprecated Use ((ArtifactEditModel)getAdapter(ArtifactEditModel.ADAPTER_TYPE)).getResource(aResource);
 	 */
 	public Resource getResource(URI aUri) {
+		if(isBinary()){
+			return binaryComponentHelper.getResource(aUri);
+		}
 		return getArtifactEditModel().getResource(aUri);
 	}
 
 	public Object getAdapter(Class adapterType) {
+		if (adapterType == ArtifactEditModel.class)
+			return getArtifactEditModel();
 		return Platform.getAdapterManager().getAdapter(this, adapterType);
 	}
+
+	public void commandStackChanged(EventObject event) {
+		getArtifactEditModel().commandStackChanged(event);
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ComponentCore.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ComponentCore.java
index 243e84b..93c1e35 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ComponentCore.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ComponentCore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -16,19 +16,14 @@
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Path;
 import org.eclipse.wst.common.componentcore.internal.ComponentResource;
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
 import org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeNode;
-import org.eclipse.wst.common.componentcore.internal.resources.VirtualArchiveComponent;
-import org.eclipse.wst.common.componentcore.internal.resources.VirtualComponent;
 import org.eclipse.wst.common.componentcore.internal.resources.VirtualFile;
-import org.eclipse.wst.common.componentcore.internal.resources.VirtualFolder;
 import org.eclipse.wst.common.componentcore.internal.resources.VirtualReference;
 import org.eclipse.wst.common.componentcore.internal.resources.VirtualResource;
+import org.eclipse.wst.common.componentcore.internal.util.ComponentImplManager;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
-import org.eclipse.wst.common.componentcore.resources.IVirtualContainer;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
 import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
@@ -59,12 +54,13 @@
 	 *            A valid, accessible project to contain the component
 	 * @return A handle to an IVirtualComponent that may or may not exist or
 	 *         null if passed project does not contain ModuleCoreNature.
-	 * @see IVirtualContainer#create(int, IProgressMonitor)
+	 * @see org.eclipse.core.runtime.IProgressMonitor#create(int, org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public static IVirtualComponent createComponent(IProject aProject) {
-		if (!ModuleCoreNature.isFlexibleProject(aProject))
+		if (aProject == null || !aProject.isAccessible()){
 			return null;
-		return new VirtualComponent(aProject, new Path("/")); //$NON-NLS-1$
+		}
+		return ComponentImplManager.instance().createComponent(aProject);
 	}
 
 	/**
@@ -77,7 +73,7 @@
 	 * @return A handle to an IVirtualComponent that may or may not exist or
 	 *         null if passed project does not contain ModuleCoreNature.
 	 * @deprecated
-	 * @see IVirtualContainer#create(int, IProgressMonitor)
+	 * @see org.eclipse.core.runtime.IProgressMonitor#create(int, org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public static IVirtualComponent createComponent(IProject aProject, String aName) {
 		return createComponent(aProject);
@@ -91,10 +87,10 @@
 	 *            lib/&lt;Absolute path of a jar&gt; or
 	 *            var/&lt;CLASSPATH_VARIABLE/library namer&gt;
 	 * @return A handle to an IVirtualComponent that may or may not exist.
-	 * @see IVirtualContainer#create(int, IProgressMonitor)
+	 * @see org.eclipse.core.runtime.IProgressMonitor#create(int, org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public static IVirtualComponent createArchiveComponent(IProject aProject, String aComponentName) {
-		return new VirtualArchiveComponent(aProject, aComponentName, new Path("/")); //$NON-NLS-1$
+		return ComponentImplManager.instance().createArchiveComponent(aProject, aComponentName);
 	}
 
 	/**
@@ -108,11 +104,11 @@
 	 *            The runtime path of the IVirtualFolder to return.
 	 * @return An IVirtualFolder contained by the specified component with the
 	 *         given runtime path
-	 * @see IVirtualContainer#create(int, IProgressMonitor)
-	 * @see IVirtualResource#createLink(IPath, int, IProgressMonitor)
+	 * @see org.eclipse.core.runtime.IProgressMonitor#create(int, org.eclipse.core.runtime.IProgressMonitor)
+	 * @see IVirtualResource#createLink(IPath, int, org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public static IVirtualFolder createFolder(IProject aProject, IPath aRuntimePath) {
-		return new VirtualFolder(aProject, aRuntimePath);
+		return ComponentImplManager.instance().createFolder(aProject, aRuntimePath);
 	}
 
 	/**
@@ -129,7 +125,7 @@
 	 *            The runtime path of the IVirtualFolder to return.
 	 * @return An IVirtualFile contained by the specified component with the
 	 *         given runtime path
-	 * @see IVirtualResource#createLink(IPath, int, IProgressMonitor)
+	 * @see IVirtualResource#createLink(IPath, int, org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public static IVirtualFile createFile(IProject aProject, IPath aRuntimePath) {
 		return new VirtualFile(aProject, aRuntimePath);
@@ -147,7 +143,7 @@
 	 *            A valid, existing IVirtualComponent
 	 * @return An IVirtualReference that captures the relationship between
 	 *         aComponent and aReferencedComponent.
-	 * @see IVirtualReference#create(int, IProgressMonitor)
+	 * @see IVirtualReference#create(int, org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public static IVirtualReference createReference(IVirtualComponent aComponent, IVirtualComponent aReferencedComponent) {
 		return new VirtualReference(aComponent, aReferencedComponent);
@@ -181,7 +177,7 @@
 					if (aResource.getType() == IResource.FILE)
 						foundResources.add(new VirtualFile(proj, resources[i].getRuntimePath()));
 					else
-						foundResources.add(new VirtualFolder(proj, resources[i].getRuntimePath()));
+						foundResources.add(ComponentCore.createFolder(proj, resources[i].getRuntimePath()));
 				}
 			}
 		} catch (UnresolveableURIException e) {
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ModuleCoreNature.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ModuleCoreNature.java
index ae06554..6093566 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ModuleCoreNature.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ModuleCoreNature.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -22,6 +22,7 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.IJobManager;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.resource.ResourceSet;
@@ -30,22 +31,23 @@
 import org.eclipse.jem.util.emf.workbench.ISynchronizerExtender;
 import org.eclipse.jem.util.emf.workbench.ProjectResourceSet;
 import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
-import org.eclipse.jem.util.emf.workbench.nature.EMFNature;
 import org.eclipse.wst.common.componentcore.internal.ArtifactEditModel;
 import org.eclipse.wst.common.componentcore.internal.ModuleStructuralModel;
+import org.eclipse.wst.common.componentcore.internal.ModulecorePlugin;
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
-import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
 import org.eclipse.wst.common.componentcore.internal.impl.ArtifactEditModelFactory;
 import org.eclipse.wst.common.componentcore.internal.impl.ComponentCoreURIConverter;
 import org.eclipse.wst.common.componentcore.internal.impl.ModuleStructuralModelFactory;
 import org.eclipse.wst.common.componentcore.internal.impl.WTPResourceFactoryRegistry;
 import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
+import org.eclipse.wst.common.componentcore.internal.util.ModuleCoreMessages;
 import org.eclipse.wst.common.internal.emfworkbench.edit.EditModelRegistry;
 import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
 import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelNature;
 import org.eclipse.wst.common.project.facet.core.IFacetedProject;
 import org.eclipse.wst.common.project.facet.core.IProjectFacet;
 import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 
 /**
  * <p>
@@ -134,13 +136,13 @@
  * @see org.eclipse.wst.common.componentcore.internal.StructureEdit#getStructureEditForRead(IProject)
  * @see org.eclipse.wst.common.componentcore.internal.StructureEdit#getStructureEditForWrite(IProject)
  * @see org.eclipse.wst.common.componentcore.ArtifactEdit
- * @see org.eclipse.wst.common.componentcore.ArtifactEdit#getArtifactEditForRead(WorkbenchComponent)
- * @see org.eclipse.wst.common.componentcore.ArtifactEdit#getArtifactEditForWrite(WorkbenchComponent)
+ * @see org.eclipse.wst.common.componentcore.ArtifactEdit#getArtifactEditForRead(org.eclipse.wst.common.componentcore.internal.WorkbenchComponent)
+ * @see org.eclipse.wst.common.componentcore.ArtifactEdit#getArtifactEditForWrite(org.eclipse.wst.common.componentcore.internal.WorkbenchComponent)
  * @plannedfor 1.0
  */
 public class ModuleCoreNature extends EditModelNature implements IProjectNature, IModuleConstants, ISynchronizerExtender {
 	
-    public static final String VALIDATION_BUILDER_ID = "org.eclipse.wst.validation.validationbuilder"; // plugin id of the validation builder//$NON-NLS-1$
+    public static final String VALIDATION_BUILDER_ID = ValidationPlugin.VALIDATION_BUILDER_ID;
     private ModuleStructuralModel cachedModel;
 	/**
 	 * <p>
@@ -267,8 +269,8 @@
 	/**
 	 * <p>
 	 * Returns an {@see ArtifactEditModel}&nbsp; to work with the underlying content of an
-	 * individual {@see WorkbenchComponent}&nbsp; contained in the project. {@see ArtifactEditModel}s
-	 * are used to manipulate the content models for individual {@see WorkbenchComponent}s. In
+	 * individual {@see org.eclipse.wst.common.componentcore.internal.WorkbenchComponent}&nbsp; contained in the project. {@see ArtifactEditModel}s
+	 * are used to manipulate the content models for individual {@see org.eclipse.wst.common.componentcore.internal.WorkbenchComponent}s. In
 	 * general, a content model will contain an EMF representation of the module's relevant
 	 * deployment descriptor, and possibly other EMF resources as well.
 	 * </p>
@@ -293,7 +295,7 @@
 	 * <code>WebEdit editFacade = WebEdit.getWebEditForRead(aWorkbenchModule);</code>
 	 * </p>
 	 * <p>
-	 * If a particular Edit Facade is not applicable to the supplied {@see WorkbenchComponent}, then
+	 * If a particular Edit Facade is not applicable to the supplied {@see org.eclipse.wst.common.componentcore.internal.WorkbenchComponent}, then
 	 * <b>null </b> will be returned.
 	 * </p>
 	 * 
@@ -314,45 +316,63 @@
 	 *            {@see ModuleStructuralModel}.
 	 * @return
 	 * @see ArtifactEdit
-	 * @see ArtifactEdit#getArtifactEditForRead(WorkbenchComponent)
+	 * @see ArtifactEdit#getArtifactEditForRead(org.eclipse.wst.common.componentcore.internal.WorkbenchComponent)
 	 */
 	public ArtifactEditModel getArtifactEditModelForRead(URI aModuleURI, Object anAccessorKey) {
 		return getArtifactEditModelForRead(aModuleURI, anAccessorKey, null);
 	}
 	
-	public ArtifactEditModel getArtifactEditModelForRead(URI aModuleURI, Object anAccessorKey, String projectType) {
-		Map params = new HashMap();
+	/**
+	 * @param aModuleURI - used to lookup project
+	 * @param anAccessorKey - used to set client accessor
+	 * @param projectType - used to determine editmodel factory
+	 * @param params - passed for specialized processing in factory
+	 * @return ArtifactEditModel instance
+	 */
+	public ArtifactEditModel getArtifactEditModelForRead(URI aModuleURI, Object anAccessorKey, String projectType, Map params) {
+		
+		if (params == null)
+			params = new HashMap();
 		params.put(ArtifactEditModelFactory.PARAM_MODULE_URI, aModuleURI);
 		if (projectType !=null)
 			return (ArtifactEditModel) getEditModelForRead(projectType, anAccessorKey, params);
 		try {
 			IProject aProject = StructureEdit.getContainingProject(aModuleURI);
 			IFacetedProject facetedProject = ProjectFacetsManager.create(aProject);
-			String[] editModelIDs = EditModelRegistry.getInstance().getRegisteredEditModelIDs();
-			for (int i=0; i<editModelIDs.length; i++) {
-				try {
-					IProjectFacet facet = ProjectFacetsManager.getProjectFacet(editModelIDs[i]);
-					if (facet != null && facetedProject.hasProjectFacet(facet)) {
-						ArtifactEditModel editModel = (ArtifactEditModel) getEditModelForRead(editModelIDs[i], anAccessorKey, params);
-						if (editModel !=null)
-							return editModel;
+			if (facetedProject != null) {
+				String[] editModelIDs = EditModelRegistry.getInstance().getRegisteredEditModelIDs();
+				for (int i=0; i<editModelIDs.length; i++) {
+					try {
+						IProjectFacet facet = ProjectFacetsManager.getProjectFacet(editModelIDs[i]);
+						if (facet != null && facetedProject.hasProjectFacet(facet)) {
+							ArtifactEditModel editModel = (ArtifactEditModel) getEditModelForRead(editModelIDs[i], anAccessorKey, params);
+							if (editModel !=null)
+								return editModel;
+						}
+					} catch (IllegalArgumentException e) {
+						// Ignore exceptions that come from ProjectFacetsManager
+						continue;
+					} catch (Exception e) {
+						ModulecorePlugin.logError(Status.ERROR, ModuleCoreMessages.Acquiring_ArtifactEdit_For_Read_Exception, e);
 					}
-				} catch (Exception e) {
-					continue;
 				}
 			}
-			
 		} catch (Exception e){
-			//Return null
+			ModulecorePlugin.logError(Status.ERROR, ModuleCoreMessages.Acquiring_ArtifactEdit_For_Read_Exception, e);
 		}
 		return null;
 	}
+	
+	public ArtifactEditModel getArtifactEditModelForRead(URI aModuleURI, Object anAccessorKey, String projectType) {
+		Map params = new HashMap();
+		return getArtifactEditModelForRead(aModuleURI, anAccessorKey, projectType, params);
+	}
 
 	/**
 	 * <p>
 	 * Returns an {@see ArtifactEditModel}&nbsp; to work with the underlying content of an
-	 * individual {@see WorkbenchComponent}&nbsp; contained in the project. {@see ArtifactEditModel}s
-	 * are used to manipulate the content models for individual {@see WorkbenchComponent}s. In
+	 * individual {@see org.eclipse.wst.common.componentcore.internal.WorkbenchComponent}&nbsp; contained in the project. {@see ArtifactEditModel}s
+	 * are used to manipulate the content models for individual {@see org.eclipse.wst.common.componentcore.internal.WorkbenchComponent}s. In
 	 * general, a content model will contain an EMF representation of the module's relevant
 	 * deployment descriptor, and possibly other EMF resources as well.
 	 * </p>
@@ -378,7 +398,7 @@
 	 * <code>WebEdit editFacade = WebEdit.getWebEditForWrite(aWorkbenchModule);</code>
 	 * </p>
 	 * <p>
-	 * If a particular Edit Facade is not applicable to the supplied {@see WorkbenchComponent}, then
+	 * If a particular Edit Facade is not applicable to the supplied {@see org.eclipse.wst.common.componentcore.internal.WorkbenchComponent}, then
 	 * <b>null </b> will be returned.
 	 * </p>
 	 * 
@@ -399,38 +419,55 @@
 	 *            {@see ModuleStructuralModel}.
 	 * @return
 	 * @see ArtifactEdit
-	 * @see ArtifactEdit#getArtifactEditForRead(WorkbenchComponent)
+	 * @see ArtifactEdit#getArtifactEditForRead(org.eclipse.wst.common.componentcore.internal.WorkbenchComponent)
 	 */
 	public ArtifactEditModel getArtifactEditModelForWrite(URI aModuleURI, Object anAccessorKey) {
 		return getArtifactEditModelForWrite(aModuleURI, anAccessorKey, null);
 	}
-	public ArtifactEditModel getArtifactEditModelForWrite(URI aModuleURI, Object anAccessorKey, String projectType) {
-		Map params = new HashMap();
+	/**
+	 * @param aModuleURI - used to lookup project
+	 * @param anAccessorKey - used to set client accessor
+	 * @param projectType - used to determine editmodel factory
+	 * @param params - passed for specialized processing in factory
+	 * @return ArtifactEditModel instance
+	 */
+	public ArtifactEditModel getArtifactEditModelForWrite(URI aModuleURI, Object anAccessorKey, String projectType, Map params) {
+		
+		if (params == null)
+			params = new HashMap();
 		params.put(ArtifactEditModelFactory.PARAM_MODULE_URI, aModuleURI);
 		if (projectType != null)
 			return  (ArtifactEditModel) getEditModelForWrite(projectType, anAccessorKey, params);
 		try {
 			IProject aProject = StructureEdit.getContainingProject(aModuleURI);
 			IFacetedProject facetedProject = ProjectFacetsManager.create(aProject);
-			String[] editModelIDs = EditModelRegistry.getInstance().getRegisteredEditModelIDs();
-			for (int i=0; i<editModelIDs.length; i++) {
-				try {
-					IProjectFacet facet = ProjectFacetsManager.getProjectFacet(editModelIDs[i]);
-					if (facet != null && facetedProject.hasProjectFacet(facet)) {
-						ArtifactEditModel editModel = (ArtifactEditModel) getEditModelForWrite(editModelIDs[i], anAccessorKey, params);
-						if (editModel !=null)
-							return editModel;
+			if (facetedProject != null) {
+				String[] editModelIDs = EditModelRegistry.getInstance().getRegisteredEditModelIDs();
+				for (int i=0; i<editModelIDs.length; i++) {
+					try {
+						IProjectFacet facet = ProjectFacetsManager.getProjectFacet(editModelIDs[i]);
+						if (facet != null && facetedProject.hasProjectFacet(facet)) {
+							ArtifactEditModel editModel = (ArtifactEditModel) getEditModelForWrite(editModelIDs[i], anAccessorKey, params);
+							if (editModel !=null)
+								return editModel;
+						}
+					} catch (IllegalArgumentException e) {
+						// Ignore exceptions that come from ProjectFacetsManager
+						continue;
+					} catch (Exception e) {
+						ModulecorePlugin.logError(Status.ERROR, ModuleCoreMessages.Acquiring_ArtifactEdit_For_Write_Exception, e);
 					}
-				} catch (Exception e) {
-					continue;
 				}
 			}
-			
 		} catch (Exception e){
-			//Return null
+			ModulecorePlugin.logError(Status.ERROR, ModuleCoreMessages.Acquiring_ArtifactEdit_For_Write_Exception, e);
 		}
 		return null;
 	}
+	public ArtifactEditModel getArtifactEditModelForWrite(URI aModuleURI, Object anAccessorKey, String projectType) {
+		Map params = new HashMap();
+		return getArtifactEditModelForWrite(aModuleURI, anAccessorKey, projectType, params);
+	}
 
 	public String getNatureID() {
 		return MODULE_NATURE_ID;
@@ -458,11 +495,11 @@
 		// addAdapterFactories(set);
 		// set.getSynchronizer().addExtender(this); // added so we can be informed of closes to the
 		// new J2EEResourceDependencyRegister(set); // This must be done after the URIConverter is
-
+		cacheModuleStructuralModel();
 	}
 	
 	/**
-	 * @see EMFNature.primConfigure
+	 * @see org.eclipse.jem.util.emf.workbench.nature.EMFNature.primConfigure
 	 */
 	protected void primConfigure() throws CoreException {
 		super.primConfigure();
@@ -511,7 +548,7 @@
 	 */
 	public void configure() throws CoreException {
 		super.configure();
-		cacheModuleStructuralModel();
+		
 	}
 
 	private void cacheModuleStructuralModel() {
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetDataModelConfigAdapter.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetDataModelConfigAdapter.java
index 705a702..431c7ee 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetDataModelConfigAdapter.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetDataModelConfigAdapter.java
@@ -13,11 +13,13 @@
 
 import org.eclipse.core.runtime.IAdapterFactory;
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
 import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetDataModelProperties;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.project.facet.core.IActionConfig;
+import org.eclipse.wst.common.project.facet.core.ActionConfig;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectWorkingCopy;
 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectEvent;
+import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener;
 
 /**
  * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
@@ -25,7 +27,7 @@
 
 public final class FacetDataModelConfigAdapter
 
-    implements IActionConfig
+    extends ActionConfig
     
 {
     private final IDataModel dm;
@@ -35,19 +37,30 @@
         this.dm = dm;
     }
     
-    public void setVersion( final IProjectFacetVersion fv )
+    public void setProjectFacetVersion( final IProjectFacetVersion fv )
     {
         dm.setProperty( IFacetDataModelProperties.FACET_VERSION, fv );
     }
-
-    public void setProjectName( final String pjname )
+    
+    public void setFacetedProjectWorkingCopy( final IFacetedProjectWorkingCopy fpjwc )
     {
-        dm.setStringProperty( IFacetDataModelProperties.FACET_PROJECT_NAME, pjname );
+        dm.setProperty( IFacetDataModelProperties.FACETED_PROJECT_WORKING_COPY, fpjwc );
+        
+        final IFacetedProjectListener nameChangeListener = new IFacetedProjectListener()
+        {
+            public void handleEvent( final IFacetedProjectEvent event )
+            {
+                dm.setStringProperty( IFacetDataModelProperties.FACET_PROJECT_NAME, fpjwc.getProjectName() );
+            }
+        };
+        
+        fpjwc.addListener( nameChangeListener, IFacetedProjectEvent.Type.PROJECT_NAME_CHANGED );
+        nameChangeListener.handleEvent( null );
     }
 
     public IStatus validate()
     {
-        return Status.OK_STATUS;
+        return dm.validate();
     }
 
     public static final class Factory
@@ -55,13 +68,12 @@
         implements IAdapterFactory
         
     {
-        private static final Class[] ADAPTER_TYPES
-            = { IActionConfig.class };
+        private static final Class[] ADAPTER_TYPES = { ActionConfig.class };
         
         public Object getAdapter( final Object adaptable, 
                                   final Class adapterType )
         {
-            if( adapterType == IActionConfig.class )
+            if( adapterType == ActionConfig.class )
             {
                 return new FacetDataModelConfigAdapter( (IDataModel) adaptable );
             }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetDataModelProvider.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetDataModelProvider.java
index 4cc5a6a..59a3b2d 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetDataModelProvider.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetDataModelProvider.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -19,7 +19,7 @@
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelProvider;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ExtendableOperationImpl;
+import org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl;
 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;
@@ -31,6 +31,7 @@
 
 	public Set getPropertyNames() {
 		Set names = super.getPropertyNames();
+		names.add(FACETED_PROJECT_WORKING_COPY);
 		names.add(FACET_PROJECT_NAME);
 		names.add(FACET_ID);
 		names.add(FACET_VERSION_STR);
@@ -67,7 +68,7 @@
 	}
 
 	protected IDataModelOperation getFacetNotificationOperation() {
-		return new ExtendableOperationImpl(new AbstractDataModelOperation(this.model) {
+		return new DataModelPausibleOperationImpl(new AbstractDataModelOperation(this.model) {
 			public String getID() {
 				return "FacetDataModelProvider.Notification." + model.getProperty(FACET_TYPE) + "." + model.getStringProperty(FACET_ID); //$NON-NLS-1$//$NON-NLS-2$ 
 			}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetInstallDataModelProvider.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetInstallDataModelProvider.java
index cb2ab1d..5022348 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetInstallDataModelProvider.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetInstallDataModelProvider.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -43,8 +43,8 @@
 			IProjectFacetVersion version = (IProjectFacetVersion) getProperty(FACET_VERSION);
 			return version.getVersionString();
 		} else if (FACET_VERSION.equals(propertyName)) {
-			DataModelPropertyDescriptor[] validVersions = getValidPropertyDescriptors(FACET_VERSION);
-			return validVersions[validVersions.length - 1].getPropertyValue();
+			IProjectFacetVersion version = ProjectFacetsManager.getProjectFacet(getStringProperty(FACET_ID)).getDefaultVersion();
+			return version;
 		}
 		return super.getDefaultProperty(propertyName);
 	}
@@ -107,4 +107,4 @@
 		return DataModelFactory.createDataModel(this);
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetProjectCreationDataModelProvider.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetProjectCreationDataModelProvider.java
index 2ae75d2..d8cb5d6 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetProjectCreationDataModelProvider.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetProjectCreationDataModelProvider.java
@@ -1,25 +1,29 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.wst.common.componentcore.datamodel;
 
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 
-
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetDataModelProperties;
 import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetProjectCreationDataModelProperties;
@@ -33,39 +37,168 @@
 import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
 import org.eclipse.wst.common.frameworks.internal.operations.IProjectCreationPropertiesNew;
 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.FacetedProjectFramework;
+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.IProjectFacetVersion;
 import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject.Action;
+import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectEvent;
+import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener;
 import org.eclipse.wst.common.project.facet.core.runtime.IRuntime;
-import org.eclipse.wst.common.project.facet.core.runtime.internal.RuntimeManagerImpl;
+import org.eclipse.wst.common.project.facet.core.runtime.RuntimeManager;
 
 public class FacetProjectCreationDataModelProvider extends AbstractDataModelProvider implements IFacetProjectCreationDataModelProperties {
 
+	/**
+	 * Type java.util.Collection. This is a smallest Collection of
+	 * IProjectFacets that are absolutely required by this project type. This
+	 * Collection will be used to filter runtimes. This property is not meant to
+	 * be exposed to clients. Subclasses should initialize this Collection in
+	 * their init() methods
+	 */
+	public static final String REQUIRED_FACETS_COLLECTION = "FacetProjectCreationDataModelProvider.REQUIRED_FACETS_COLLECTION";
+	
+	public static final String FORCE_VERSION_COMPLIANCE = "FacetProjectCreationDataModelProvider.FORCE_VERSION_COMPLIANCE";
+	
 	public FacetProjectCreationDataModelProvider() {
 		super();
 	}
 
 	public Set getPropertyNames() {
 		Set names = super.getPropertyNames();
+		names.add(FACETED_PROJECT_WORKING_COPY);
 		names.add(FACET_PROJECT_NAME);
 		names.add(FACET_DM_MAP);
+		names.add(FACET_ACTION_MAP);
 		names.add(FACET_RUNTIME);
+		names.add(REQUIRED_FACETS_COLLECTION);
+		names.add(FORCE_VERSION_COMPLIANCE);
 		return names;
 	}
 
 	public void init() {
 		super.init();
+		
+		final IFacetedProjectWorkingCopy fpjwc = FacetedProjectFramework.createNewProject();
+		model.setProperty(FACETED_PROJECT_WORKING_COPY, fpjwc);
+		
+		fpjwc.addListener
+		(
+		    new IFacetedProjectListener()
+		    {
+                public void handleEvent( final IFacetedProjectEvent event )
+                {
+                    for( IFacetedProject.Action action : fpjwc.getProjectFacetActions() )
+                    {
+                        final Object config = action.getConfig();
+                        
+                        if( config != null && config instanceof IDataModel )
+                        {
+                            final IDataModel dm = (IDataModel) config;
+                            
+                            if( dm.getAllProperties().contains( FacetInstallDataModelProvider.MASTER_PROJECT_DM ) )
+                            {
+                                dm.setProperty( FacetInstallDataModelProvider.MASTER_PROJECT_DM, model );
+                            }
+                        }
+                    }
+                }
+		    },
+		    IFacetedProjectEvent.Type.PROJECT_FACETS_CHANGED
+		);
+
+        fpjwc.addListener
+        (
+            new IFacetedProjectListener()
+            {
+                public void handleEvent( final IFacetedProjectEvent event )
+                {
+                    model.notifyPropertyChange(FACET_RUNTIME, IDataModel.VALID_VALUES_CHG);
+                }
+            },
+            IFacetedProjectEvent.Type.AVAILABLE_RUNTIMES_CHANGED
+        );
+		
 		IDataModel projectDataModel = DataModelFactory.createDataModel(new ProjectCreationDataModelProviderNew());
 		projectDataModel.addListener(new IDataModelListener() {
-			public void propertyChanged(DataModelEvent event) {
-				if (IProjectCreationPropertiesNew.PROJECT_NAME.equals(event.getPropertyName())) {
-					getDataModel().setProperty(FACET_PROJECT_NAME, event.getProperty());
+			public void propertyChanged(DataModelEvent event) 
+			{
+			    final String prop = event.getPropertyName();
+			    
+                if( event.getFlag() == IDataModel.VALUE_CHG &&
+                    prop.equals( IProjectCreationPropertiesNew.PROJECT_NAME ) )
+                {
+                    final String projectName = (String) event.getProperty();
+					getDataModel().setProperty(FACET_PROJECT_NAME, projectName);
+					fpjwc.setProjectName( projectName );
 				}
+                else if( prop.equals( IProjectCreationPropertiesNew.PROJECT_LOCATION ) )
+                {
+                    final String location = (String) event.getProperty();
+                    fpjwc.setProjectLocation( location == null ? null : new Path( location ) );
+                }
 			}
 		});
 		model.addNestedModel(NESTED_PROJECT_DM, projectDataModel);
 	}
 
+	protected class FacetActionMapImpl extends HashMap implements FacetActionMap {
+		private static final long serialVersionUID = 1L;
+		private boolean supressNotification = false;
+
+		public void add(Action action) {
+			put(action.getProjectFacetVersion().getProjectFacet().getId(), action);
+		}
+
+		public Action getAction(String facetID) {
+			return (Action) get(facetID);
+		}
+
+		public void clear() {
+			try {
+				supressNotification = true;
+				super.clear();
+			} finally {
+				supressNotification = false;
+				getDataModel().notifyPropertyChange(FACET_ACTION_MAP, IDataModel.VALUE_CHG);
+			}
+		}
+
+		public Object remove(Object key) {
+			try {
+				return super.remove(key);
+			} finally {
+				if (!supressNotification) {
+					getDataModel().notifyPropertyChange(FACET_ACTION_MAP, IDataModel.VALUE_CHG);
+				}
+			}
+		}
+
+		public Object put(Object key, Object value) {
+			try {
+				return super.put(key, value);
+			} finally {
+				if (!supressNotification) {
+					getDataModel().notifyPropertyChange(FACET_ACTION_MAP, IDataModel.VALUE_CHG);
+				}
+			}
+		}
+
+		public void putAll(Map m) {
+			try {
+				supressNotification = true;
+				super.putAll(m);
+			} finally {
+				supressNotification = false;
+				getDataModel().notifyPropertyChange(FACET_ACTION_MAP, IDataModel.VALUE_CHG);
+			}
+		}
+	}
+
 	protected class FacetDataModelMapImpl extends HashMap implements FacetDataModelMap, IDataModelListener {
 		private static final long serialVersionUID = 1L;
 		private boolean supressNotification = false;
@@ -121,9 +254,15 @@
 		}
 
 		public Object remove(Object key) {
-			IDataModel dm = (IDataModel) super.remove(key);
-			dm.removeListener(this);
-			return dm;
+			try {
+				IDataModel dm = (IDataModel) super.remove(key);
+				dm.removeListener(this);
+				return dm;
+			} finally {
+				if (!supressNotification) {
+					getDataModel().notifyPropertyChange(FACET_DM_MAP, IDataModel.VALUE_CHG);
+				}
+			}
 		}
 
 		public void propertyChanged(DataModelEvent event) {
@@ -135,7 +274,13 @@
 				}
 			} else if (event.getPropertyName().equals(FACET_RUNTIME)) {
 				if (containsValue(event.getDataModel())) {
-					getDataModel().setProperty(FACET_RUNTIME, event.getProperty());
+					if (event.getFlag() == IDataModel.VALID_VALUES_CHG) {
+						getDataModel().notifyPropertyChange(FACET_RUNTIME, IDataModel.VALID_VALUES_CHG);
+					} else if(event.getFlag() == IDataModel.ENABLE_CHG) {
+						getDataModel().notifyPropertyChange(FACET_RUNTIME, IDataModel.ENABLE_CHG);
+					} else {
+						getDataModel().setProperty(FACET_RUNTIME, event.getProperty());
+					}
 				} else {
 					event.getDataModel().removeListener(this);
 				}
@@ -160,26 +305,51 @@
 				}
 			}
 			if (runtime != null) {
-				Map facetDMs = (Map) getProperty(FACET_DM_MAP);
-
-				for (Iterator iterator = facetDMs.values().iterator(); iterator.hasNext();) {
-					IDataModel facetDataModel = (IDataModel) iterator.next();
-					IProjectFacet facet = ProjectFacetsManager.getProjectFacet((String) facetDataModel.getProperty(IFacetDataModelProperties.FACET_ID));
-
-					try {
-						IDataModel facetModel = ((FacetDataModelMap) facetDMs).getFacetDataModel(facet.getId());
-						IProjectFacetVersion oldVersion = (IProjectFacetVersion) facetModel.getProperty(IFacetDataModelProperties.FACET_VERSION);
-						IProjectFacetVersion newVersion = facet.getLatestSupportedVersion(runtime);
-						if (newVersion != null && (oldVersion == null || oldVersion.getVersionString().compareTo(newVersion.getVersionString()) > 0)) {
-							facetModel.setProperty(IFacetDataModelProperties.FACET_VERSION, newVersion);
+				if(getBooleanProperty(FORCE_VERSION_COMPLIANCE)){
+					Map facetDMs = (Map) getProperty(FACET_DM_MAP);
+	
+					for (Iterator iterator = facetDMs.values().iterator(); iterator.hasNext();) {
+						IDataModel facetDataModel = (IDataModel) iterator.next();
+						IProjectFacet facet = ProjectFacetsManager.getProjectFacet((String) facetDataModel.getProperty(IFacetDataModelProperties.FACET_ID));
+	
+						try {
+							IDataModel facetModel = ((FacetDataModelMap) facetDMs).getFacetDataModel(facet.getId());
+							IProjectFacetVersion oldVersion = (IProjectFacetVersion) facetModel.getProperty(IFacetDataModelProperties.FACET_VERSION);
+							IProjectFacetVersion newVersion = facet.getLatestSupportedVersion(runtime);
+							if (newVersion != null && (oldVersion == null || oldVersion.getVersionString().compareTo(newVersion.getVersionString()) > 0 || !runtime.supports(oldVersion))) {
+								facetModel.setProperty(IFacetDataModelProperties.FACET_VERSION, newVersion);
+							}
+						} catch (CoreException e) {
+							Logger.getLogger().logError(e);
 						}
-
-					} catch (CoreException e) {
-						Logger.getLogger().logError(e);
 					}
 				}
 			}
 		}
+		else if( REQUIRED_FACETS_COLLECTION.equals(propertyName) )
+		{
+		    final IFacetedProjectWorkingCopy fpjwc 
+		        = (IFacetedProjectWorkingCopy) this.model.getProperty( FACETED_PROJECT_WORKING_COPY );
+		    
+	        final Collection<IProjectFacet> fixedFacets = (Collection<IProjectFacet>) propertyValue;
+	        
+	        fpjwc.setFixedProjectFacets( new HashSet<IProjectFacet>( fixedFacets ) );
+	        
+	        final FacetDataModelMap facetDmMap = (FacetDataModelMap) getProperty( FACET_DM_MAP );
+	        
+	        for( IProjectFacet facet : fixedFacets )
+	        {
+	            final IFacetedProject.Action action = fpjwc.getProjectFacetAction( facet );
+	            Object config = action.getConfig();
+	            
+	            if( ! ( config instanceof IDataModel ) )
+	            {
+	                config = Platform.getAdapterManager().getAdapter( config, IDataModel.class );
+	            }
+	            
+	            facetDmMap.add( (IDataModel) config );
+	        }
+		}
 		return super.propertySet(propertyName, propertyValue);
 	}
 
@@ -188,6 +358,16 @@
 			Object obj = new FacetDataModelMapImpl();
 			setProperty(FACET_DM_MAP, obj);
 			return obj;
+		} else if (FACET_ACTION_MAP.equals(propertyName)) {
+			Object obj = new FacetActionMapImpl();
+			setProperty(FACET_ACTION_MAP, obj);
+			return obj;
+		} else if(REQUIRED_FACETS_COLLECTION.equals(propertyName)){
+			Collection c = new ArrayList();
+			setProperty(REQUIRED_FACETS_COLLECTION, c);
+			return c;
+		} else if(FORCE_VERSION_COMPLIANCE.equals(propertyName)){
+			return Boolean.TRUE;
 		}
 		return super.getDefaultProperty(propertyName);
 	}
@@ -196,59 +376,80 @@
 		if (FACET_RUNTIME.equals(propertyName)) {
 			IRuntime runtime = (IRuntime) getProperty(propertyName);
 			if (null != runtime) {
-				return new DataModelPropertyDescriptor(runtime, runtime.getName());
+				return new DataModelPropertyDescriptor(runtime, runtime.getLocalizedName());
 			}
+			return new DataModelPropertyDescriptor(null, WTPCommonPlugin.getResourceString(WTPCommonMessages.RUNTIME_NONE, null));
 		}
 		return super.getPropertyDescriptor(propertyName);
 	}
 
-
 	public DataModelPropertyDescriptor[] getValidPropertyDescriptors(String propertyName) {
-		if (FACET_RUNTIME.equals(propertyName)) {
+		if (FACET_RUNTIME.equals(propertyName)) 
+		{
+            final IFacetedProjectWorkingCopy fpjwc 
+                = (IFacetedProjectWorkingCopy) this.model.getProperty( FACETED_PROJECT_WORKING_COPY );
+            
+            final Set<IProjectFacet> fixedFacets = fpjwc.getFixedProjectFacets();
+            final ArrayList list = new ArrayList();
 
-			Set projectFacets = new HashSet();
-			Map facetDMs = (Map) getProperty(FACET_DM_MAP);
-			for (Iterator iterator = facetDMs.values().iterator(); iterator.hasNext();) {
-				IDataModel facetDataModel = (IDataModel) iterator.next();
-				IProjectFacet facet = ProjectFacetsManager.getProjectFacet((String) facetDataModel.getProperty(IFacetDataModelProperties.FACET_ID));
-				projectFacets.add(facet);
-			}
-			Set runtimes = RuntimeManagerImpl.getRuntimes();
-			ArrayList list = new ArrayList();
+            for( IRuntime rt : RuntimeManager.getRuntimes() ) 
+            {
+                // add this runtime in the list only if it supports all of the required facets
 
-			for (Iterator it = runtimes.iterator(); it.hasNext();) {
-				IRuntime rt = (IRuntime) it.next();
+                boolean supports = true;
+                
+                for( IProjectFacet facet : fixedFacets )
+                {
+                    if( ! rt.supports( facet ) )
+                    {
+                        supports = false;
+                        break;
+                    }
+                }
+                
+                if( supports ) 
+                {
+                    list.add(rt);
+                }
+            }
 
-				// add this runtime in the list only if this runtime supports all of the facets
-				// in the project
-
-				boolean supportsFactet = true;
-				for (Iterator facetIt = projectFacets.iterator(); facetIt.hasNext();) {
-					IProjectFacet facet = (IProjectFacet) facetIt.next();
-					if (!rt.supports(facet)) {
-						supportsFactet = false;
-					}
-				}
-				if (supportsFactet) {
-					list.add(rt);
-				}
-			}
-
-			DataModelPropertyDescriptor[] descriptors = new DataModelPropertyDescriptor[list.size()];
+            DataModelPropertyDescriptor[] descriptors = new DataModelPropertyDescriptor[list.size() + 1];
 			Iterator iterator = list.iterator();
-			for (int i = 0; i < descriptors.length; i++) {
+			for (int i = 0; i < descriptors.length - 1; i++) {
 				IRuntime runtime = (IRuntime) iterator.next();
-				descriptors[i] = new DataModelPropertyDescriptor(runtime, runtime.getName());
+				descriptors[i] = new DataModelPropertyDescriptor(runtime, runtime.getLocalizedName());
 			}
+			if(descriptors.length > 2){
+				Arrays.sort(descriptors, 0, descriptors.length - 2, new Comparator() {
+					public int compare(Object arg0, Object arg1) {
+						DataModelPropertyDescriptor d1 = (DataModelPropertyDescriptor)arg0;
+						DataModelPropertyDescriptor d2 = (DataModelPropertyDescriptor)arg1;
+						return d1.getPropertyDescription().compareTo(d2.getPropertyDescription());
+					}
+				});
+			}
+			
+			descriptors[descriptors.length - 1] = new DataModelPropertyDescriptor(null, WTPCommonPlugin.getResourceString(WTPCommonMessages.RUNTIME_NONE, null));
 			return descriptors;
 		}
 		return super.getValidPropertyDescriptors(propertyName);
 	}
 
-	public IStatus validate(String propertyName) {
-		if (FACET_PROJECT_NAME.equals(propertyName)) {
-			return validate(IProjectCreationPropertiesNew.PROJECT_NAME);
+	public IStatus validate(String propertyName) 
+	{
+		if (FACET_PROJECT_NAME.equals(propertyName)) 
+		{
+			IDataModel projModel = model.getNestedModel(NESTED_PROJECT_DM);
+			return projModel.validateProperty(IProjectCreationPropertiesNew.PROJECT_NAME);
 		}
+		else if( propertyName.equals( FACETED_PROJECT_WORKING_COPY ) )
+		{
+            final IFacetedProjectWorkingCopy fpjwc 
+                = (IFacetedProjectWorkingCopy) this.model.getProperty( FACETED_PROJECT_WORKING_COPY );
+            
+            return fpjwc.validate();
+		}
+		
 		return super.validate(propertyName);
 	}
 
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FlexibleProjectCreationDataModelProvider.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FlexibleProjectCreationDataModelProvider.java
deleted file mode 100644
index b3d1bc5..0000000
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FlexibleProjectCreationDataModelProvider.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.componentcore.datamodel;
-
-import java.util.Set;
-
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.wst.common.componentcore.datamodel.properties.IFlexibleProjectCreationDataModelProperties;
-import org.eclipse.wst.common.componentcore.internal.operation.FlexibleProjectCreationOperation;
-import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelProvider;
-import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-import org.eclipse.wst.common.frameworks.internal.operations.IProjectCreationProperties;
-import org.eclipse.wst.common.frameworks.internal.operations.ProjectCreationDataModelProvider;
-
-public class FlexibleProjectCreationDataModelProvider extends AbstractDataModelProvider implements IFlexibleProjectCreationDataModelProperties {
-
-	public FlexibleProjectCreationDataModelProvider() {
-		super();
-
-	}
-
-	public void init() {
-		super.init();
-		initNestedProjectModel();
-	}
-
-	protected void initNestedProjectModel() {
-		IDataModel projModel = DataModelFactory.createDataModel(new ProjectCreationDataModelProvider());
-		model.addNestedModel(NESTED_MODEL_PROJECT_CREATION, projModel);
-	}
-
-	public Set getPropertyNames() {
-		Set propertyNames = super.getPropertyNames();
-		propertyNames.add(PROJECT_NAME);
-		propertyNames.add(PROJECT_LOCATION);
-		propertyNames.add(NESTED_MODEL_PROJECT_CREATION);
-		return propertyNames;
-	}
-
-	public Object getDefaultProperty(String propertyName) {
-		if (PROJECT_LOCATION.equals(propertyName)) {
-			return getDefaultLocation();
-		}
-		return super.getDefaultProperty(propertyName);
-	}
-
-	public boolean propertySet(String propertyName, Object propertyValue) {
-		boolean status = super.propertySet(propertyName, propertyValue);
-		if (PROJECT_NAME.equals(propertyName)) {
-			IDataModel projModel = model.getNestedModel(NESTED_MODEL_PROJECT_CREATION);
-			projModel.setProperty(IProjectCreationProperties.PROJECT_NAME, propertyValue);
-		} else if (PROJECT_LOCATION.equals(propertyName)) {
-			IDataModel projModel = model.getNestedModel(NESTED_MODEL_PROJECT_CREATION);
-			projModel.setProperty(IProjectCreationProperties.PROJECT_LOCATION, propertyValue);
-		}
-		return status;
-	}
-
-	public IStatus validate(String propertyName) {
-		if (PROJECT_NAME.equals(propertyName)) {
-			return validateProjectName();
-		} else if (PROJECT_LOCATION.equals(propertyName)) {
-			return validateProjectLocation();
-		}
-		return OK_STATUS;
-	}
-
-	private IStatus validateProjectName() {
-		IDataModel projModel = model.getNestedModel(NESTED_MODEL_PROJECT_CREATION);
-		return projModel.validateProperty(IProjectCreationProperties.PROJECT_NAME);
-	}
-
-	private IStatus validateProjectLocation() {
-		IDataModel projModel = model.getNestedModel(NESTED_MODEL_PROJECT_CREATION);
-		return projModel.validateProperty(IProjectCreationProperties.PROJECT_LOCATION);
-	}
-
-	private String getDefaultLocation() {
-		IPath path = getRootLocation();
-		String projectName = (String) getProperty(PROJECT_NAME);
-		if (projectName != null)
-			path = path.append(projectName);
-		return path.toOSString();
-	}
-
-	private IPath getRootLocation() {
-		return ResourcesPlugin.getWorkspace().getRoot().getLocation();
-	}
-
-	//	
-	// protected void initNestedModels() {
-	// super.initNestedModels();
-	// initProjectModel();
-	// addNestedModel(NESTED_MODEL_PROJECT_CREATION, projectDataModel);
-	//
-	// serverTargetDataModel = new J2EEProjectServerTargetDataModel();
-	// addNestedModel(NESTED_MODEL_SERVER_TARGET, serverTargetDataModel);
-	// }
-
-	// protected void initProjectModel() {
-	// projectDataModel = new ProjectCreationDataModel();
-	// }
-	//	
-	public IDataModelOperation getDefaultOperation() {
-		return new FlexibleProjectCreationOperation(model);
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IComponentCreationDataModelProperties.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IComponentCreationDataModelProperties.java
index 4bb516b..c8dcf56 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IComponentCreationDataModelProperties.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IComponentCreationDataModelProperties.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -11,6 +11,7 @@
 package org.eclipse.wst.common.componentcore.datamodel.properties;
 
 import org.eclipse.wst.common.frameworks.datamodel.IDataModelProperties;
+import org.eclipse.wst.common.frameworks.internal.DoNotUseMeThisWillBeDeletedPost15;
 
 /**
  * <p>
@@ -31,7 +32,14 @@
  * 
  * @plannedfor 1.0
  */
-public interface IComponentCreationDataModelProperties extends IDataModelProperties {
+/**
+ * This has been slated for removal post WTP 1.5. Do not use this class/interface
+ * 
+ * @deprecated
+ * 
+ * @see IConnectorFacetInstallDataModelProperties
+ */
+public interface IComponentCreationDataModelProperties extends IDataModelProperties, DoNotUseMeThisWillBeDeletedPost15 {
 
 	/**
 	 * Required, type String. The user defined name of the target project for the component to be
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/ICreateReferenceComponentsDataModelProperties.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/ICreateReferenceComponentsDataModelProperties.java
index 78f3cb2..10a1f94 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/ICreateReferenceComponentsDataModelProperties.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/ICreateReferenceComponentsDataModelProperties.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
  * 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
@@ -11,22 +11,43 @@
 package org.eclipse.wst.common.componentcore.datamodel.properties;
 
 public interface ICreateReferenceComponentsDataModelProperties {
-	
-    /**
-     * Required, type IVirtualComponent
-     */	
-	public static final String SOURCE_COMPONENT = "ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT";
-	
-    /**
-     * Required, type ArrayList, ArrayList  should contain list of IVirtualComponent
-     */
-	public static final String TARGET_COMPONENT_LIST = "ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT"; //$NON-NLS-1$
-	
+
 	/**
-     * Optional, deploy path for the dependent component, default is "/"
-     */
+	 * <p>
+	 * This required property is the {@link org.eclipse.wst.common.componentcore.resources.IVirtualComponent} which will reference the
+	 * {@link org.eclipse.wst.common.componentcore.resources.IVirtualComponent}s specified by {@link #TARGET_COMPONENT_LIST}.
+	 * </p>
+	 * <p>
+	 * For example, if {@link org.eclipse.wst.common.componentcore.resources.IVirtualComponent}s A, B, and C exist and references are required
+	 * from A to B and A to C, then {@link #SOURCE_COMPONENT} should be set to A, and
+	 * {@link #TARGET_COMPONENT_LIST} should be set to a {@link java.util.List} containing B and C.
+	 * </p>
+	 */
+	public static final String SOURCE_COMPONENT = "ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT"; //$NON-NLS-1$
+
+	/**
+	 * <p>
+	 * This required property is the {@link java.util.List} containing the {@link org.eclipse.wst.common.componentcore.resources.IVirtualComponent}s that
+	 * will be referenced from the {@link org.eclipse.wst.common.componentcore.resources.IVirtualComponent} specified by {@link #SOURCE_COMPONENT}.
+	 * </p>
+	 */
+	public static final String TARGET_COMPONENT_LIST = "ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT"; //$NON-NLS-1$
+
+	//TODO this should be a map
+	/**
+	 * Optional, deploy path for the dependent component, default is "/"
+	 */
 	public static final String TARGET_COMPONENTS_DEPLOY_PATH = "ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_DEPLOY_PATH"; //$NON-NLS-1$
-	
-	
-	
+
+	/**
+	 * <p>
+	 * This optional property is the {@link java.util.Map} containing keys of {@link org.eclipse.wst.common.componentcore.resources.IVirtualComponent}s and
+	 * values of {@link String}s. This map is used to specify the String which should be used by
+	 * the {@link org.eclipse.wst.common.componentcore.resources.IVirtualComponent} specified by the {@link #SOURCE_COMPONENT} property to lookup
+	 * the keyed {@link org.eclipse.wst.common.componentcore.resources.IVirtualComponent}. The {@link java.util.Set} of {@link org.eclipse.wst.common.componentcore.resources.IVirtualComponent}s in the
+	 * keys of this {@link java.util.Map} should have the same contents as the {@link java.util.List}.
+	 * </p>
+	 */
+	public static final String TARGET_COMPONENTS_TO_URI_MAP = "ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_TO_URI_MAP"; //$NON-NLS-1$
+
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFacetDataModelProperties.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFacetDataModelProperties.java
index b775f39..91c694d 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFacetDataModelProperties.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFacetDataModelProperties.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -19,13 +19,13 @@
 	public static final Object FACET_TYPE_UNINSTALL = Action.Type.UNINSTALL;
 	public static final Object FACET_TYPE_VERSION_CHANGE = Action.Type.VERSION_CHANGE;
 
-	public static final String FACET_PROJECT_NAME = "IFacetDataModelPropeties.FACET_PROJECT_NAME"; //$NON-NLS-1$
+	public static final String FACET_PROJECT_NAME = "IFacetDataModelProperties.FACET_PROJECT_NAME"; //$NON-NLS-1$
 
-	public static final String FACET_TYPE = "IFacetDataModelPropeties.FACET_TYPE"; //$NON-NLS-1$
+	public static final String FACET_TYPE = "IFacetDataModelProperties.FACET_TYPE"; //$NON-NLS-1$
 
-	public static final String FACET_ID = "IFacetDataModelPropeties.FACET_ID"; //$NON-NLS-1$
+	public static final String FACET_ID = "IFacetDataModelProperties.FACET_ID"; //$NON-NLS-1$
 
-	public static final String FACET_VERSION_STR = "IFacetDataModelPropeties.FACET_VERSION_STR"; //$NON-NLS-1$
+	public static final String FACET_VERSION_STR = "IFacetDataModelProperties.FACET_VERSION_STR"; //$NON-NLS-1$
 
 	/**
 	 * an IProjectFacetVersion
@@ -38,4 +38,6 @@
 	public static final String FACET_ACTION = "IFacetDataModelProperties.FACET_ACTION"; //$NON-NLS-1$
 
 	public static final String SHOULD_EXECUTE = "IFacetDataModelProperties.SHOULD_EXECUTE"; //$NON-NLS-1$
+	
+	public static final String FACETED_PROJECT_WORKING_COPY = "IFacetDataModelProperties.FACETED_PROJECT_WORKING_COPY"; //$NON-NLS-1$
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFacetProjectCreationDataModelProperties.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFacetProjectCreationDataModelProperties.java
index 851f804..0d76a0f 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFacetProjectCreationDataModelProperties.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFacetProjectCreationDataModelProperties.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -14,8 +14,12 @@
 
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModelProperties;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
 
 public interface IFacetProjectCreationDataModelProperties extends IDataModelProperties {
+    
+    public static final String FACETED_PROJECT_WORKING_COPY 
+        = "IFacetProjectCreationDataModelProperties.FACETED_PROJECT_WORKING_COPY"; //$NON-NLS-1$";
 
 	/**
 	 * A String
@@ -28,15 +32,22 @@
 	public static final String NESTED_PROJECT_DM = "IFacetProjectCreationDataModelProperties.NESTED_PROJECT_DM"; //$NON-NLS-1$";
 
 	/**
-	 * An instanceof FacetDataModelMap
+	 * An instanceof FacetDataModelMap.
 	 */
 	public static final String FACET_DM_MAP = "IFacetProjectCreationDataModelProperties.FACET_DM_MAP"; //$NON-NLS-1$
 
 	/**
+	 * An instance of FacetActionMap
+	 */
+	public static final String FACET_ACTION_MAP = "IFacetProjectCreationDataModelProperties.FACET_ACTION_MAP"; //$NON-NLS-1$
+
+	
+	/**
 	 * An instanceof of IRuntime
 	 */
 	public static final String FACET_RUNTIME = "IFacetProjectCreationDataModelProperties.FACET_RUNTIME"; //$NON-NLS-1$
 
+	
 	/**
 	 * This map is used for tracking individual IDataModels implementing IFacetDataModelProperties.
 	 * The facet ids are the keys for retieving the specific IFacetataModelProperties IDataModels
@@ -45,4 +56,14 @@
 		public void add(IDataModel facetDataModel);
 		public IDataModel getFacetDataModel(String facetID);
 	}
+
+	/**
+	 * This map is used for tracing indivdual IFacetedProject.Actions for facets that either do not
+	 * have any config data, or facets whose config data is not an IDataModel.
+	 */
+	public interface FacetActionMap extends Map {
+		public void add(IFacetedProject.Action action);
+		public IFacetedProject.Action getAction(String facetID);
+	}
+	
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFlexibleProjectCreationDataModelProperties.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFlexibleProjectCreationDataModelProperties.java
deleted file mode 100644
index 6a9a06d..0000000
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFlexibleProjectCreationDataModelProperties.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.componentcore.datamodel.properties;
-
-import org.eclipse.wst.common.frameworks.internal.operations.IProjectCreationProperties;
-/**
- * <p>
- * IFlexibleProjectCreationDataModelProperties provides properties to the DataModel associated with the 
- * FlexibleProjectCreationDataModelProperties as well as all extending interfaces extending 
- * IFlexibleProjectCreationDataModelProperties specifically, but not limited to the Java releated creatoin in the 
- * JST layer. 
- * @see FlexibleJavaProjectCreationDataModelProvider
- * </p>
- * <p>
- * This interface is not intended to be implemented by clients.
- * </p>
- * 
- * @see org.eclipse.wst.common.frameworks.datamodel.IDataModelProvider
- * @see org.eclipse.wst.common.frameworks.datamodel.DataModelFactory
- * @see org.eclipse.wst.common.frameworks.datamodel.IDataModelProperties
- * 
- * @plannedfor 1.0
- */
-public interface IFlexibleProjectCreationDataModelProperties extends IProjectCreationProperties {
-   
-    /**
-     * Required, type IDataModel. The user set IDataModel used to create the initial project.  Providers which currently exist for
-     * this IDataModel include IProjectCreationProperties.
-     * @see org.eclipse.wst.common.frameworks.internal.operations.IProjectCreationProperties
-     */
-    public static final String NESTED_MODEL_PROJECT_CREATION = "IFlexibleProjectCreationDataModelProperties.NESTED_MODEL_PROJECT_CREATION"; //$NON-NLS-1$
-}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ArtifactEditModel.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ArtifactEditModel.java
index 6d8552a..9e38950 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ArtifactEditModel.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ArtifactEditModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -21,6 +21,7 @@
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.common.componentcore.ComponentCore;
 import org.eclipse.wst.common.componentcore.UnresolveableURIException;
 import org.eclipse.wst.common.componentcore.internal.impl.PlatformURLModuleConnection;
@@ -65,6 +66,8 @@
 	public static final Class ADAPTER_TYPE = ArtifactEditModel.class;
 	private final IProject componentProject; 
 	private final IPath modulePath;
+	private URI rootURI;
+	private String rootContentType;
 	private final IVirtualComponent virtualComponent;
 	private final URI componentURI;
 
@@ -100,7 +103,16 @@
 	public ArtifactEditModel(String anEditModelId, EMFWorkbenchContext aContext, boolean toMakeReadOnly, URI aModuleURI) {
 		this(anEditModelId, aContext, toMakeReadOnly, true, aModuleURI);
 	}
-
+	
+	public ArtifactEditModel(String anEditModelId, EMFWorkbenchContext aContext, boolean toMakeReadOnly, boolean toAccessUnknownResourcesAsReadOnly, URI aModuleURI,URI rootURI,
+			String rootContentType) {
+		this(anEditModelId, aContext, toMakeReadOnly, toAccessUnknownResourcesAsReadOnly, aModuleURI);
+		this.rootURI = rootURI;
+		this.rootContentType = rootContentType;
+		
+	}
+	
+	
 	/**
 	 * 
 	 * <p>
@@ -153,6 +165,14 @@
 		processLoadedResources(componentProject);
 	}
 
+	public ArtifactEditModel(String editModelID, EMFWorkbenchContext context, boolean toMakeReadOnly, URI moduleURI, URI rootURI,
+			String rootContentType) {
+		this(editModelID, context, toMakeReadOnly, true, moduleURI);
+		this.rootURI = rootURI;
+		this.rootContentType = rootContentType;
+		
+	}
+
 	/**
 	 * <p>
 	 * Accesses resources within the underlying resource set. Takes a standard URI attaches module
@@ -167,8 +187,15 @@
 	 * @return Resource (@see Resource)
 	 */
 	public Resource getResource(URI aUri) {
-		// First check if passed URI is already normalized...
-		IPath requestPath = modulePath.append(new Path(aUri.path()));
+		IPath requestPath;
+		//If requesting rootURI, use content type describer if available
+		if (rootURI != null && rootURI.equals(aUri) && rootContentType != null) {
+			requestPath = modulePath.append(new Path(rootContentType));
+			requestPath = requestPath.append(new Path(aUri.path()));
+		}
+		else {// First check if passed URI is already normalized...
+			requestPath = modulePath.append(new Path(aUri.path()));
+		}
 		URI resourceURI = URI.createURI(PlatformURLModuleConnection.MODULE_PROTOCOL + requestPath.toString());
 		return super.getResource(resourceURI);
 	}
@@ -258,7 +285,7 @@
 			resourceToProcess = (Resource) theResources.get(i);
 			if (resourceToProcess == null) continue;
 			String lastSegment = resourceToProcess.getURI().lastSegment();
-			if (null != lastSegment && lastSegment.equals(IModuleConstants.COMPONENT_FILE_NAME)) continue;
+			if (null != lastSegment && lastSegment.endsWith(IModuleConstants.COMPONENT_FILE_NAME)) continue;
 			resourceResource = WorkbenchResourceHelper.getFile(resourceToProcess);
 			if (resourceResource != null) {
 				virtualResources = ComponentCore.createResources(resourceResource); 
@@ -303,4 +330,16 @@
 		}
 		
 	}
+	
+	protected void doDispose() {
+		//Remove the listener from the faceted project
+		try {
+			IFacetedProject facetProj = ProjectFacetsManager.create(getComponentProject());
+			if (facetProj != null)
+				facetProj.removeListener(this);
+		} catch (Exception e) {
+			Logger.getLogger().logError(e);
+		}
+		super.doDispose();
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/BinaryComponentHelper.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/BinaryComponentHelper.java
new file mode 100644
index 0000000..ea71b40
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/BinaryComponentHelper.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.componentcore.internal;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+
+public abstract class BinaryComponentHelper {
+
+	private IVirtualComponent component;
+
+	protected BinaryComponentHelper(IVirtualComponent component) {
+		this.component = component;
+	}
+
+	public IVirtualComponent getComponent() {
+		return component;
+	}
+
+	public abstract EObject getPrimaryRootObject();
+
+	public abstract Resource getResource(URI uri);
+	
+	public void dispose(){
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentResource.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentResource.java
index 3318330..efe8adc 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentResource.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentResource.java
@@ -1,10 +1,11 @@
 /**
  * <copyright></copyright>
  * 
- * $Id: ComponentResource.java,v 1.3 2005/05/21 17:44:47 cbridgha Exp $
+ * $Id: ComponentResource.java,v 1.6 2006/04/27 04:17:40 cbridgha Exp $
  */
 package org.eclipse.wst.common.componentcore.internal;
 
+import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EObject;
@@ -35,11 +36,11 @@
  * </ul>
  * </p>
  *
- * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getComponentResource()
+ * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getComponentResource()
  * @model
  * @generated
  */
-public interface ComponentResource extends EObject{
+public interface ComponentResource extends EObject {
 	/**
 	 * Returns the value of the '<em><b>Source Path</b></em>' attribute.
 	 * <!-- begin-user-doc
@@ -51,7 +52,7 @@
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Source Path</em>' attribute.
 	 * @see #setSourcePath(IPath)
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getComponentResource_SourcePath()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getComponentResource_SourcePath()
 	 * @model dataType="org.eclipse.wst.common.componentcore.internal.IPath" required="true"
 	 * @generated
 	 */
@@ -77,7 +78,7 @@
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Runtime Path</em>' attribute.
 	 * @see #setRuntimePath(IPath)
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getComponentResource_RuntimePath()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getComponentResource_RuntimePath()
 	 * @model dataType="org.eclipse.wst.common.componentcore.internal.IPath" required="true"
 	 * @generated
 	 */
@@ -103,7 +104,7 @@
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Exclusions</em>' attribute list.
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getComponentResource_Exclusions()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getComponentResource_Exclusions()
 	 * @model type="java.lang.String" default=""
 	 * @generated
 	 */
@@ -120,7 +121,7 @@
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Component</em>' container reference.
 	 * @see #setComponent(WorkbenchComponent)
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getComponentResource_Component()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getComponentResource_Component()
 	 * @see org.eclipse.wst.common.componentcore.internal.WorkbenchComponent#getResources
 	 * @model opposite="resources" required="true"
 	 * @generated
@@ -148,7 +149,7 @@
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Resource Type</em>' attribute.
 	 * @see #setResourceType(String)
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getComponentResource_ResourceType()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getComponentResource_ResourceType()
 	 * @model default="" required="true"
 	 * @generated
 	 */
@@ -164,4 +165,7 @@
 	 */
 	void setResourceType(String value);
 
+	IProject getOwningProject();
+	void setOwningProject(IProject aProject);
+
 } // ComponentResource
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentType.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentType.java
index d4f7df3..48a0703 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentType.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -37,11 +37,11 @@
  * </ul>
  * </p>
  *
- * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getComponentType()
+ * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getComponentType()
  * @model
  * @generated
  */
-public interface ComponentType extends EObject{
+public interface ComponentType extends EObject {
 	/**
 	 * Returns the value of the '<em><b>Component Type Id</b></em>' attribute.
 	 * The default value is <code>""</code>.
@@ -53,7 +53,7 @@
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Component Type Id</em>' attribute.
 	 * @see #setComponentTypeId(String)
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getComponentType_ComponentTypeId()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getComponentType_ComponentTypeId()
 	 * @model default="" required="true"
 	 * @generated
 	 */
@@ -79,7 +79,7 @@
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Metadata Resources</em>' attribute list.
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getComponentType_MetadataResources()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getComponentType_MetadataResources()
 	 * @model type="org.eclipse.core.runtime.IPath" dataType="org.eclipse.wst.common.componentcore.internal.IPath"
 	 * @generated
 	 */
@@ -96,7 +96,7 @@
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Version</em>' attribute.
 	 * @see #setVersion(String)
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getComponentType_Version()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getComponentType_Version()
 	 * @model default="" required="true"
 	 * @generated
 	 */
@@ -122,7 +122,7 @@
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Properties</em>' reference list.
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getComponentType_Properties()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getComponentType_Properties()
 	 * @model type="org.eclipse.wst.common.componentcore.internal.Property"
 	 * @generated
 	 */
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentcoreFactory.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentcoreFactory.java
index 2d8f4da..25de4f9 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentcoreFactory.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentcoreFactory.java
@@ -2,11 +2,12 @@
  * <copyright>
  * </copyright>
  *
- * $Id: ComponentcoreFactory.java,v 1.1 2005/04/04 07:05:00 cbridgha Exp $
+ * $Id: ComponentcoreFactory.java,v 1.2 2006/04/27 04:17:40 cbridgha Exp $
  */
 package org.eclipse.wst.common.componentcore.internal;
 
 import org.eclipse.emf.ecore.EFactory;
+import org.eclipse.wst.common.componentcore.internal.impl.ComponentcoreFactoryImpl;
 
 /**
  * <!-- begin-user-doc -->
@@ -23,7 +24,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	ComponentcoreFactory eINSTANCE = new org.eclipse.wst.common.componentcore.internal.impl.ComponentcoreFactoryImpl();
+	ComponentcoreFactory eINSTANCE = ComponentcoreFactoryImpl.init();
 
 	/**
 	 * Returns a new object of class '<em>Workbench Component</em>'.
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentcorePackage.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentcorePackage.java
index 25530ca..eed4fe3 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentcorePackage.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentcorePackage.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: ComponentcorePackage.java,v 1.6 2005/10/18 22:25:43 cbridgha Exp $
+ * $Id: ComponentcorePackage.java,v 1.8 2006/04/27 04:17:40 cbridgha Exp $
  */
 package org.eclipse.wst.common.componentcore.internal;
 
@@ -12,6 +12,7 @@
 import org.eclipse.emf.ecore.EEnum;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EReference;
+import org.eclipse.wst.common.componentcore.internal.ComponentcoreFactory;
 
 /**
  * <!-- begin-user-doc -->
@@ -24,11 +25,11 @@
  *   <li>and each data type</li>
  * </ul>
  * <!-- end-user-doc -->
- * @see org.eclipse.wst.common.componentcore.internal.ComponentcoreFactory
+ * @see org.eclipse.wst.common.componentcore.ComponentcoreFactory
  * @model kind="package"
  * @generated
  */
-public interface ComponentcorePackage extends EPackage{
+public interface ComponentcorePackage extends EPackage {
 	/**
 	 * The package name.
 	 * <!-- begin-user-doc -->
@@ -126,7 +127,7 @@
 	int WORKBENCH_COMPONENT__METADATA_RESOURCES = 5;
 
 	/**
-	 * The number of structural features of the the '<em>Workbench Component</em>' class.
+	 * The number of structural features of the '<em>Workbench Component</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -190,7 +191,7 @@
 	int COMPONENT_RESOURCE__RESOURCE_TYPE = 4;
 
 	/**
-	 * The number of structural features of the the '<em>Component Resource</em>' class.
+	 * The number of structural features of the '<em>Component Resource</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -245,7 +246,7 @@
 	int COMPONENT_TYPE__METADATA_RESOURCES = 3;
 
 	/**
-	 * The number of structural features of the the '<em>Component Type</em>' class.
+	 * The number of structural features of the '<em>Component Type</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -282,7 +283,7 @@
 	int PROPERTY__VALUE = 1;
 
 	/**
-	 * The number of structural features of the the '<em>Property</em>' class.
+	 * The number of structural features of the '<em>Property</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -337,13 +338,22 @@
 	int REFERENCED_COMPONENT__DEPENDENT_OBJECT = 3;
 
 	/**
-	 * The number of structural features of the the '<em>Referenced Component</em>' class.
+	 * The feature id for the '<em><b>Archive Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int REFERENCED_COMPONENT_FEATURE_COUNT = 4;
+	int REFERENCED_COMPONENT__ARCHIVE_NAME = 4;
+
+	/**
+	 * The number of structural features of the '<em>Referenced Component</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REFERENCED_COMPONENT_FEATURE_COUNT = 5;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.wst.common.componentcore.internal.impl.ProjectComponentsImpl <em>Project Components</em>}' class.
@@ -374,13 +384,22 @@
 	int PROJECT_COMPONENTS__COMPONENTS = 1;
 
 	/**
-	 * The number of structural features of the the '<em>Project Components</em>' class.
+	 * The feature id for the '<em><b>Version</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int PROJECT_COMPONENTS_FEATURE_COUNT = 2;
+	int PROJECT_COMPONENTS__VERSION = 2;
+
+	/**
+	 * The number of structural features of the '<em>Project Components</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PROJECT_COMPONENTS_FEATURE_COUNT = 3;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.wst.common.componentcore.internal.DependencyType <em>Dependency Type</em>}' enum.
@@ -695,6 +714,17 @@
 	EReference getReferencedComponent_DependentObject();
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.wst.common.componentcore.internal.ReferencedComponent#getArchiveName <em>Archive Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Archive Name</em>'.
+	 * @see org.eclipse.wst.common.componentcore.internal.ReferencedComponent#getArchiveName()
+	 * @see #getReferencedComponent()
+	 * @generated
+	 */
+	EAttribute getReferencedComponent_ArchiveName();
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.wst.common.componentcore.internal.ProjectComponents <em>Project Components</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -727,6 +757,17 @@
 	EReference getProjectComponents_Components();
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.wst.common.componentcore.internal.ProjectComponents#getVersion <em>Version</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Version</em>'.
+	 * @see org.eclipse.wst.common.componentcore.internal.ProjectComponents#getVersion()
+	 * @see #getProjectComponents()
+	 * @generated
+	 */
+	EAttribute getProjectComponents_Version();
+
+	/**
 	 * Returns the meta object for enum '{@link org.eclipse.wst.common.componentcore.internal.DependencyType <em>Dependency Type</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -769,4 +810,309 @@
 	 */
 	ComponentcoreFactory getComponentcoreFactory();
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.wst.common.componentcore.internal.impl.WorkbenchComponentImpl <em>Workbench Component</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.wst.common.componentcore.internal.impl.WorkbenchComponentImpl
+		 * @see org.eclipse.wst.common.componentcore.internal.impl.ComponentcorePackageImpl#getWorkbenchComponent()
+		 * @generated
+		 */
+		EClass WORKBENCH_COMPONENT = eINSTANCE.getWorkbenchComponent();
+
+		/**
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute WORKBENCH_COMPONENT__NAME = eINSTANCE.getWorkbenchComponent_Name();
+
+		/**
+		 * The meta object literal for the '<em><b>Resources</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference WORKBENCH_COMPONENT__RESOURCES = eINSTANCE.getWorkbenchComponent_Resources();
+
+		/**
+		 * The meta object literal for the '<em><b>Component Type</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference WORKBENCH_COMPONENT__COMPONENT_TYPE = eINSTANCE.getWorkbenchComponent_ComponentType();
+
+		/**
+		 * The meta object literal for the '<em><b>Referenced Components</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference WORKBENCH_COMPONENT__REFERENCED_COMPONENTS = eINSTANCE.getWorkbenchComponent_ReferencedComponents();
+
+		/**
+		 * The meta object literal for the '<em><b>Properties</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference WORKBENCH_COMPONENT__PROPERTIES = eINSTANCE.getWorkbenchComponent_Properties();
+
+		/**
+		 * The meta object literal for the '<em><b>Metadata Resources</b></em>' attribute list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute WORKBENCH_COMPONENT__METADATA_RESOURCES = eINSTANCE.getWorkbenchComponent_MetadataResources();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.wst.common.componentcore.internal.impl.ComponentResourceImpl <em>Component Resource</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.wst.common.componentcore.internal.impl.ComponentResourceImpl
+		 * @see org.eclipse.wst.common.componentcore.internal.impl.ComponentcorePackageImpl#getComponentResource()
+		 * @generated
+		 */
+		EClass COMPONENT_RESOURCE = eINSTANCE.getComponentResource();
+
+		/**
+		 * The meta object literal for the '<em><b>Source Path</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute COMPONENT_RESOURCE__SOURCE_PATH = eINSTANCE.getComponentResource_SourcePath();
+
+		/**
+		 * The meta object literal for the '<em><b>Runtime Path</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute COMPONENT_RESOURCE__RUNTIME_PATH = eINSTANCE.getComponentResource_RuntimePath();
+
+		/**
+		 * The meta object literal for the '<em><b>Exclusions</b></em>' attribute list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute COMPONENT_RESOURCE__EXCLUSIONS = eINSTANCE.getComponentResource_Exclusions();
+
+		/**
+		 * The meta object literal for the '<em><b>Component</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference COMPONENT_RESOURCE__COMPONENT = eINSTANCE.getComponentResource_Component();
+
+		/**
+		 * The meta object literal for the '<em><b>Resource Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute COMPONENT_RESOURCE__RESOURCE_TYPE = eINSTANCE.getComponentResource_ResourceType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.wst.common.componentcore.internal.impl.ComponentTypeImpl <em>Component Type</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.wst.common.componentcore.internal.impl.ComponentTypeImpl
+		 * @see org.eclipse.wst.common.componentcore.internal.impl.ComponentcorePackageImpl#getComponentType()
+		 * @generated
+		 */
+		EClass COMPONENT_TYPE = eINSTANCE.getComponentType();
+
+		/**
+		 * The meta object literal for the '<em><b>Component Type Id</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute COMPONENT_TYPE__COMPONENT_TYPE_ID = eINSTANCE.getComponentType_ComponentTypeId();
+
+		/**
+		 * The meta object literal for the '<em><b>Version</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute COMPONENT_TYPE__VERSION = eINSTANCE.getComponentType_Version();
+
+		/**
+		 * The meta object literal for the '<em><b>Properties</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference COMPONENT_TYPE__PROPERTIES = eINSTANCE.getComponentType_Properties();
+
+		/**
+		 * The meta object literal for the '<em><b>Metadata Resources</b></em>' attribute list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute COMPONENT_TYPE__METADATA_RESOURCES = eINSTANCE.getComponentType_MetadataResources();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.wst.common.componentcore.internal.impl.PropertyImpl <em>Property</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.wst.common.componentcore.internal.impl.PropertyImpl
+		 * @see org.eclipse.wst.common.componentcore.internal.impl.ComponentcorePackageImpl#getProperty()
+		 * @generated
+		 */
+		EClass PROPERTY = eINSTANCE.getProperty();
+
+		/**
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute PROPERTY__NAME = eINSTANCE.getProperty_Name();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute PROPERTY__VALUE = eINSTANCE.getProperty_Value();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.wst.common.componentcore.internal.impl.ReferencedComponentImpl <em>Referenced Component</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.wst.common.componentcore.internal.impl.ReferencedComponentImpl
+		 * @see org.eclipse.wst.common.componentcore.internal.impl.ComponentcorePackageImpl#getReferencedComponent()
+		 * @generated
+		 */
+		EClass REFERENCED_COMPONENT = eINSTANCE.getReferencedComponent();
+
+		/**
+		 * The meta object literal for the '<em><b>Handle</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute REFERENCED_COMPONENT__HANDLE = eINSTANCE.getReferencedComponent_Handle();
+
+		/**
+		 * The meta object literal for the '<em><b>Runtime Path</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute REFERENCED_COMPONENT__RUNTIME_PATH = eINSTANCE.getReferencedComponent_RuntimePath();
+
+		/**
+		 * The meta object literal for the '<em><b>Dependency Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute REFERENCED_COMPONENT__DEPENDENCY_TYPE = eINSTANCE.getReferencedComponent_DependencyType();
+
+		/**
+		 * The meta object literal for the '<em><b>Dependent Object</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference REFERENCED_COMPONENT__DEPENDENT_OBJECT = eINSTANCE.getReferencedComponent_DependentObject();
+
+		/**
+		 * The meta object literal for the '<em><b>Archive Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute REFERENCED_COMPONENT__ARCHIVE_NAME = eINSTANCE.getReferencedComponent_ArchiveName();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.wst.common.componentcore.internal.impl.ProjectComponentsImpl <em>Project Components</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.wst.common.componentcore.internal.impl.ProjectComponentsImpl
+		 * @see org.eclipse.wst.common.componentcore.internal.impl.ComponentcorePackageImpl#getProjectComponents()
+		 * @generated
+		 */
+		EClass PROJECT_COMPONENTS = eINSTANCE.getProjectComponents();
+
+		/**
+		 * The meta object literal for the '<em><b>Project Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute PROJECT_COMPONENTS__PROJECT_NAME = eINSTANCE.getProjectComponents_ProjectName();
+
+		/**
+		 * The meta object literal for the '<em><b>Components</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PROJECT_COMPONENTS__COMPONENTS = eINSTANCE.getProjectComponents_Components();
+
+		/**
+		 * The meta object literal for the '<em><b>Version</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute PROJECT_COMPONENTS__VERSION = eINSTANCE.getProjectComponents_Version();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.wst.common.componentcore.internal.DependencyType <em>Dependency Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.wst.common.componentcore.internal.DependencyType
+		 * @see org.eclipse.wst.common.componentcore.internal.impl.ComponentcorePackageImpl#getDependencyType()
+		 * @generated
+		 */
+		EEnum DEPENDENCY_TYPE = eINSTANCE.getDependencyType();
+
+		/**
+		 * The meta object literal for the '<em>IPath</em>' data type.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.core.runtime.IPath
+		 * @see org.eclipse.wst.common.componentcore.internal.impl.ComponentcorePackageImpl#getIPath()
+		 * @generated
+		 */
+		EDataType IPATH = eINSTANCE.getIPath();
+
+		/**
+		 * The meta object literal for the '<em>URI</em>' data type.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.emf.common.util.URI
+		 * @see org.eclipse.wst.common.componentcore.internal.impl.ComponentcorePackageImpl#getURI()
+		 * @generated
+		 */
+		EDataType URI = eINSTANCE.getURI();
+
+	}
+
 } //ComponentcorePackage
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/DependencyType.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/DependencyType.java
index d9cf17a..09914ab 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/DependencyType.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/DependencyType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -114,12 +114,11 @@
 	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
 
 	/**
-	 * Returns the '<em><b>Dependency Type</b></em>' literal with the specified name. 
+	 * Returns the '<em><b>Dependency Type</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc --> 
 	 * @param name passes literal name
 	 * @return literal instance
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public static DependencyType get(String name) {
@@ -133,12 +132,11 @@
 	}
 
 	/**
-	 * Returns the '<em><b>Dependency Type</b></em>' literal with the specified value. 
+	 * Returns the '<em><b>Dependency Type</b></em>' literal with the specified value.
 	 *  <!-- begin-user-doc -->
 	 * @param value passes literal value
 	 * @return literal instance
 	 *  <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public static DependencyType get(int value) {
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleCoreValidator.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleCoreValidator.java
new file mode 100644
index 0000000..731efdf
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleCoreValidator.java
@@ -0,0 +1,120 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.componentcore.internal;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.xmi.XMIResource;
+import org.eclipse.wst.common.componentcore.ModuleCoreNature;
+import org.eclipse.wst.common.componentcore.internal.impl.WTPModulesResource;
+import org.eclipse.wst.common.internal.emf.resource.TranslatorResource;
+import org.eclipse.wst.common.project.facet.core.internal.FacetedProjectNature;
+import org.eclipse.wst.validation.internal.core.Message;
+import org.eclipse.wst.validation.internal.core.ValidationException;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
+import org.eclipse.wst.validation.internal.provisional.core.IValidationContext;
+import org.eclipse.wst.validation.internal.provisional.core.IValidatorJob;
+
+
+public class ModuleCoreValidator implements IValidatorJob {
+		protected IReporter _reporter;
+
+		public ModuleCoreValidator() {
+			super();
+			// TODO Auto-generated constructor stub
+		}
+		
+		public Resource getPrimaryResource(IProject project) {
+			// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=181334; Changing this method to call ModuleStructuralModel.getPrimaryResource() method instead.
+			// This does two things:
+			// 1. Reorders the locks to prevent deadlock between locking the resource (Bugzilla 181334),
+			//	  then the edit model and
+			// 2. Reuses code. (The code between this method and MSM.getPrimaryResource() is identical.
+			StructureEdit structureEdit = StructureEdit.getStructureEditForRead(project);
+			if (structureEdit != null) {
+				ModuleStructuralModel structuralModel = structureEdit.getModuleStructuralModel();
+				if (structuralModel != null) {
+					// acquiring the ModuleStructuralModel lock here first because the call to getPrimaryResource()
+					// will cause this lock to be acquired later resulting in a potential deadlock
+					synchronized (structuralModel) {
+						return structuralModel.getPrimaryResource();
+					}
+				}
+			}
+			return null;
+		}
+
+/* bug197531 - standardize compiler settings
+		private ResourceSet getResourceSet(IProject proj) {
+			ModuleCoreNature nature = ModuleCoreNature.getModuleCoreNature(proj);
+			return nature.getResourceSet();
+		}
+*/
+
+		public IStatus validateInJob(IValidationContext helper, IReporter reporter)
+				throws ValidationException {
+			_reporter = reporter;
+			//Remove all markers related to this validator
+			_reporter.removeAllMessages(this);
+			//Using the helper class, load the module model
+			IProject proj = (IProject) helper
+					.loadModel(ModuleCoreValidatorHelper.MODULECORE, null);
+			try {
+				if (proj.isAccessible() && proj.hasNature(ModuleCoreNature.MODULE_NATURE_ID)) {
+					if (needsMigrating(proj))
+						_reporter.addMessage(this, new Message("modulecore",
+								IMessage.HIGH_SEVERITY,
+								"NEEDSMIGRATING", null, proj));
+				}
+			} catch (CoreException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			
+			return Status.OK_STATUS;
+		}
+		public ISchedulingRule getSchedulingRule(IValidationContext helper) {
+			return null;
+		}
+
+		public void cleanup(IReporter reporter) {
+			_reporter = null;
+
+		}
+		private boolean needsMigrating(IProject project) throws CoreException {
+			XMIResource res = (XMIResource)getPrimaryResource(project);
+			boolean multiComps = false;
+			if (project==null)
+				return false;
+			boolean needsMigrating = (!project.hasNature(FacetedProjectNature.NATURE_ID)) || res == null || ((res != null) && ((WTPModulesResource)res).getRootObject() == null); //|| (res!=null && !res.isLoaded() && ((WTPModulesResource)res).getRootObject() != null);
+			if (!needsMigrating) {
+				if (res instanceof TranslatorResource && ((TranslatorResource)res).getRootObject() instanceof ProjectComponents) {
+					ProjectComponents components = (ProjectComponents) ((WTPModulesResource)res).getRootObject();
+					if (components.getComponents() != null) {
+						multiComps = components.getComponents().size() > 1;
+						return multiComps;
+					}
+				}
+			}
+			return needsMigrating;
+		}
+
+		public void validate(IValidationContext helper, IReporter reporter)
+				throws ValidationException {
+			// Forwarding to job method
+			validateInJob(helper, reporter);
+		}
+	}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleCoreValidatorHelper.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleCoreValidatorHelper.java
new file mode 100644
index 0000000..1969f61
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleCoreValidatorHelper.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.componentcore.internal;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.wst.validation.internal.operations.WorkbenchContext;
+
+
+public class ModuleCoreValidatorHelper extends WorkbenchContext {
+
+		public static final String MODULECORE = "MODULECORE";
+		public ModuleCoreValidatorHelper() {
+			super();
+			//	the following will register the helper's symbolic methods
+		    Class [] args = new Class[0] ;
+		    registerModel(MODULECORE, "loadModel", args);
+		}
+		/**
+		 * Load the Trading Session for validation
+		 */
+		public Object loadModel() {
+		return getProject();
+
+	}		
+		/**
+		 * Given a resource, return its non-eclipse-specific location. If this
+		 * resource, or type of resource, isn't handled by this helper, return
+		 * null.
+		 */
+		public String getPortableName(IResource resource) {
+			
+			return resource.getFullPath().toString();
+		}
+	}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleMigratorManager.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleMigratorManager.java
index d3b341b..88a9078 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleMigratorManager.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleMigratorManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
  * 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
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.common.componentcore.internal;
 
+import java.util.HashMap;
 import java.util.HashSet;
 
 import org.eclipse.core.commands.ExecutionException;
@@ -30,35 +31,27 @@
 import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
 import org.eclipse.wst.common.frameworks.internal.datamodel.IWorkspaceRunnableWithStatus;
-import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper;
 import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
 
 public class ModuleMigratorManager {
-	private static ModuleMigratorManager manager;
-	private HashSet migrated = new HashSet();
+
+	private static HashMap managerCache = new HashMap();
+	private static HashSet migrated = new HashSet();
 	private boolean migrating;
-	private HashSet moved = new HashSet();
 	public ModuleMigratorManager() {
 		super();
 	}
-	public static ModuleMigratorManager getManager() {
+	public static ModuleMigratorManager getManager(IProject proj) {
+		ModuleMigratorManager manager = (ModuleMigratorManager)managerCache.get(proj);
 		if (manager == null) {
 			manager = new ModuleMigratorManager();
+			managerCache.put(proj,manager);
 		}
 		return manager;
 	}
 	private void migrateComponentsIfNecessary(IProject project, boolean multiComps) {
-		if (multiComps) {
-			setupAndMigrateComponentProject(project);
-		} else {
-	        	  
-	        	  IProject[] projects = WorkbenchResourceHelper.getWorkspace().getRoot().getProjects();
-			      for (int i = 0; i < projects.length; i++) {
-						IProject proj = projects[i];
-						setupAndMigrateComponentProject(proj);
-			      }
-		}
-						
+		
+		setupAndMigrateComponentProject(project);
 		
 	}
 	private void setupAndMigrateComponentProject(IProject proj) {
@@ -73,17 +66,15 @@
 		}
 	}
 	public synchronized void migrateOldMetaData(IProject aProject, final boolean multiComps) throws CoreException {
-		
+		migrating = true;
 		IWorkspaceRunnableWithStatus workspaceRunnable = new IWorkspaceRunnableWithStatus(aProject) {
 			public void run(IProgressMonitor pm) throws CoreException {
 				IProject aProj = (IProject)this.getInfo();
-				migrating = true;
 				try {
 					if (aProj.isAccessible() && ModuleCoreNature.isFlexibleProject(aProj)) {
 						if (aProj.findMember(".wtpmodules") != null) {
-							if (!moved.contains(aProj))
-								moveOldMetaDataFile();
-						} else moved.add(aProj);
+							moveOldMetaDataFile(aProj);
+						}
 						if (needsComponentMigration(aProj,multiComps))
 							migrateComponentsIfNecessary(aProj,multiComps);
 					}
@@ -94,11 +85,11 @@
 
 			private boolean needsComponentMigration(IProject aProj,boolean multiComps) throws CoreException {
 				
-			boolean needs = !migrated.contains(aProj);
+			boolean needs = true;
 			if (multiComps)
 				return (needs && multiComps);
 			else
-				return (aProj.findMember(".settings/.component") != null) && 
+				return ((aProj.findMember(StructureEdit.MODULE_META_FILE_NAME) == null) && (aProj.findMember(".settings/.component") == null)) || 
 						(ProjectFacetsManager.create(aProj) == null) && needs;
 			}
 		};
@@ -117,41 +108,25 @@
 					IFolder settingsFolder = project.getFolder(".settings");
 					if (!settingsFolder.exists())
 						settingsFolder.create(true,true,null);
-					oldfile.move(new Path(".settings/.component"),true,null);
+					oldfile.move(new Path(StructureEdit.MODULE_META_FILE_NAME),true,null);
 			} catch (CoreException e) {
 				Platform.getLog(ModulecorePlugin.getDefault().getBundle()).log(new Status(IStatus.ERROR, ModulecorePlugin.PLUGIN_ID, IStatus.ERROR, e.getMessage(), e));
 			}
+		} 
+	}
+	private void moveOldMetaDataFile(IProject project) {
+
+		try {
+				moveMetaDataFile(project);
+				IFolder depFolder = project.getFolder(".deployables");
+				if (depFolder.exists())
+					depFolder.delete(true, null);
+				project.refreshLocal(IResource.DEPTH_INFINITE, null);
+
+		} catch (Exception e) {
 		}
 	}
-	private void moveOldMetaDataFile() {
-//		WorkspaceJob job = new WorkspaceJob("Migrating metadata")
-//	      {
-//	        
-//	        public IStatus runInWorkspace(IProgressMonitor monitor)
-//	        {
-	          try
-	          {
-	        	IProject[] projects = WorkbenchResourceHelper.getWorkspace().getRoot().getProjects();
-	      		for (int i = 0; i < projects.length; i++) {
-	      			IProject project = projects[i];
-	      			if (!moved.contains(project))
-		      			moveMetaDataFile(project);
-	      				IFolder depFolder = project.getFolder(".deployables");
-	      				if (depFolder.exists())
-	      					depFolder.delete(true,null);
-		      			project.refreshLocal(IResource.DEPTH_INFINITE,null);
-		      			moved.add(project);
-	      			}
-	      		
-	          } catch (Exception e) {
-	          }
-//	          return Status.OK_STATUS;
-//	        }
-//	      };
-//	      job.setRule(ResourcesPlugin.getWorkspace().getRuleFactory().buildRule());
-//	      job.schedule();
-	}
-	protected boolean isMigrating() {
+	public boolean isMigrating() {
 		return migrating;
 	}
 
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java
index dfc616c..1506e66 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -11,22 +11,42 @@
 package org.eclipse.wst.common.componentcore.internal;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.xmi.XMIResource;
+import org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeNode;
+import org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeRoot;
 import org.eclipse.wst.common.componentcore.internal.impl.WTPModulesResource;
 import org.eclipse.wst.common.componentcore.internal.impl.WTPModulesResourceFactory;
+import org.eclipse.wst.common.frameworks.internal.SaveFailedException;
 import org.eclipse.wst.common.internal.emf.resource.ReferencedResource;
+import org.eclipse.wst.common.internal.emf.resource.TranslatorResource;
 import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext;
 import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
+import org.eclipse.wst.common.internal.emfworkbench.validateedit.ResourceStateValidatorPresenter;
 import org.eclipse.wst.common.project.facet.core.internal.FacetedProjectNature;
 /**
  * Manages the underlying Module Structural Metamodel.
@@ -58,8 +78,11 @@
 */ 
 public class ModuleStructuralModel extends EditModel implements IAdaptable {
 	
+	private static final String R0_7_MODULE_META_FILE_NAME = ".component";
+	private static final String R1_MODULE_META_FILE_NAME = ".settings/.component";
 	public static final String MODULE_CORE_ID = "moduleCoreId"; //$NON-NLS-1$ 
-	private boolean multiComps;
+	private static final String PROJECT_VERSION_1_5 = "1.5.0";
+	private boolean useOldFormat = false;
 	public ModuleStructuralModel(String editModelID, EMFWorkbenchContext context, boolean readOnly) {
         super(editModelID, context, readOnly);
     }
@@ -86,34 +109,138 @@
     /* (non-Javadoc)
 	 * @see org.eclipse.wst.common.internal.emfworkbench.integration.EditModel#getPrimaryRootObject()
 	 */
-	public synchronized EObject getPrimaryRootObject() {
+	public EObject getPrimaryRootObject() {
+		
 		try {
-			prepareProjectModulesIfNecessary();
+			Resource res = prepareProjectModulesIfNecessary();
+			if (res == null)
+				return null;
 		} catch (CoreException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
-		EObject modelRoot = super.getPrimaryRootObject();
+		EObject modelRoot = null;
+		modelRoot = super.getPrimaryRootObject();
+		if (modelRoot != null) {
+			// if the workspace tree is locked we cannot try to change the .component resource
+			if (ResourcesPlugin.getWorkspace().isTreeLocked())
+				return modelRoot;
+			List components = ((ProjectComponents)modelRoot).getComponents();
+			if (components.size()>0) {
+				WorkbenchComponent wbComp = (WorkbenchComponent)components.get(0);
+				// Check and see if we need to clean up spurrious redundant map entries
+				if (!isVersion15(modelRoot)) {
+					((ProjectComponents)modelRoot).setVersion(PROJECT_VERSION_1_5);
+					cleanupWTPModules(wbComp);
+				}
+			}
+		}
 		return modelRoot;
 	}
-       
-	public WTPModulesResource  makeWTPModulesResource() {
-		return (WTPModulesResource) createResource(WTPModulesResourceFactory.WTP_MODULES_URI_OBJ);
+	private boolean isVersion15(EObject modelRoot){
+		return ((ProjectComponents)modelRoot).getVersion().equals(PROJECT_VERSION_1_5);
 	}
-
-	public Resource prepareProjectModulesIfNecessary() throws CoreException {
-		ModuleMigratorManager manager = ModuleMigratorManager.getManager();
-		XMIResource res = (XMIResource) getPrimaryResource();
-		if (resNeedsMigrating(res)) {
-			try {
-				if (!manager.isMigrating())
-					manager.migrateOldMetaData(getProject(),multiComps);
-			} catch (CoreException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
+    
+	/**
+	 * This method is used to remove spurrious redundant entries from the .component file
+	 * 
+	 * @param wbComp
+	 */
+	public void cleanupWTPModules(WorkbenchComponent wbComp) {
+		if (wbComp == null)
+			return;
+		ResourceTreeRoot root = ResourceTreeRoot.getSourceResourceTreeRoot(wbComp);
+		List rootResources = getModuleResources(root);
+		// Only if we need to do a clean, do we clear, add all required root resource mappings, and save
+		if (!(wbComp.getResources().containsAll(rootResources) && wbComp.getResources().size()==rootResources.size())) {
+			final ModuleStructuralModel model = new ModuleStructuralModel(getEditModelID(),getEmfContext(),false);
+			if(model == null){
+				return;
 			}
-			res = (XMIResource) getPrimaryResource();
+			boolean jobScheduled = false;
+			try {
+				final Object key = new Object();
+				model.access(key);
+				
+				wbComp.getResources().clear();
+				wbComp.getResources().addAll(rootResources);
+				URI uri = wbComp.eResource().getURI();
+				//need to get this resource into the model
+				Resource resource = model.getResource(uri);
+				//need to manually dirty this resource in order for it to save.
+				resource.setModified(true);
+				//this job is necessary to avoid the deadlock in 
+				//https://bugs.eclipse.org/bugs/show_bug.cgi?id=181253
+				class SaveJob extends Job {
+					
+					public SaveJob() {
+						super("Save ModuleStructuralModel Job");
+					}
+					
+					protected IStatus run(IProgressMonitor monitor) {
+						try {
+							model.save(key);
+							return OK_STATUS;
+						} finally {
+							disposeOnce();
+						}
+					}
+					
+					private boolean disposedAlready = false;
+					
+					public void disposeOnce(){
+						if(!disposedAlready){
+							disposedAlready = true;
+							model.dispose();
+						}
+					}
+				};
+				final SaveJob saveJob = new SaveJob();
+				saveJob.addJobChangeListener(new JobChangeAdapter(){
+					public void done(IJobChangeEvent event) {
+						saveJob.disposeOnce();
+					}
+				});
+				saveJob.setSystem(true);
+				saveJob.schedule();
+				jobScheduled = true;
+			} finally {
+				if (!jobScheduled && model != null)
+					model.dispose();
+			}
+		} 
+	}
+    
+	/**
+	 * This is a recursive method to find all the root level resources in the children's resource tree roots
+	 * 
+	 * @param node
+	 * @return List of module resources
+	 */
+	public List getModuleResources(ResourceTreeNode node) {
+		// If the resource node has module resources just return them
+		if (node.getModuleResources().length>0)
+			return Arrays.asList(node.getModuleResources());
+		// Otherwise, the root resource maps are really at the next level or lower
+		List rootResources = new ArrayList();
+		Map children = node.getChildren();
+		Iterator iter = children.values().iterator();
+		while (iter.hasNext()) {
+			ResourceTreeNode subNode = (ResourceTreeNode) iter.next();
+			// recursively call method to obtain module resources
+			rootResources.addAll(getModuleResources(subNode));
 		}
+		return rootResources;
+	}
+	public Resource prepareProjectModulesIfNecessary() throws CoreException {
+		XMIResource res;
+		if (!isComponentSynchronizedOrNull()) {
+			//Return if component file is out of sync from workspace
+			return null;
+		}
+		res = (XMIResource) getPrimaryResource();
+		if (res != null && resNeedsMigrating(res) && !useOldFormat)
+			return null;
 		if(res == null)
 			res = makeWTPModulesResource();		
 		try {
@@ -123,21 +250,72 @@
 		} 
 		return res;
 	}
-	private boolean resNeedsMigrating(XMIResource res) throws CoreException {
-		multiComps = false;
-		if (project==null)
-			return false;
-		boolean needsMigrating =  (!project.hasNature(FacetedProjectNature.NATURE_ID)) || (res!=null && !res.isLoaded());
-		if (!needsMigrating) {
-			if (res != null && ((WTPModulesResource)res).getRootObject() != null) {
-				ProjectComponents components = (ProjectComponents) ((WTPModulesResource)res).getRootObject();
-				if (components.getComponents() != null) {
-					multiComps = components.getComponents().size() > 1;
-					return multiComps;
+	
+	/**
+	 * This methods checks the status of the component file, and first checks for existance, then if its locally synchronized
+	 * @return boolean
+	 */
+	private boolean isComponentSynchronizedOrNull() {
+		IFile componentFile = getProject().getFile(StructureEdit.MODULE_META_FILE_NAME);
+		IPath componentFileLocation = componentFile.getLocation();
+		if (componentFileLocation != null && !componentFileLocation.toFile().exists()) {
+			componentFile = getProject().getFile(R1_MODULE_META_FILE_NAME);
+			componentFileLocation = componentFile.getLocation();
+			if (componentFileLocation != null && !componentFileLocation.toFile().exists()) {
+				componentFile = getProject().getFile(R0_7_MODULE_META_FILE_NAME);
+				componentFileLocation = componentFile.getLocation();
+				if (componentFileLocation != null && !componentFileLocation.toFile().exists()) 
+					return true;
+			}
+		}
+		if (componentFileLocation == null)
+			return true;
+		else return componentFile.isSynchronized(IResource.DEPTH_ZERO);
+	}
+	public WTPModulesResource  makeWTPModulesResource() {
+		return (WTPModulesResource) createResource(WTPModulesResourceFactory.WTP_MODULES_URI_OBJ);
+	}
+	protected void runSaveOperation(IWorkspaceRunnable runnable, IProgressMonitor monitor) throws SaveFailedException {
+		try {
+			ResourcesPlugin.getWorkspace().run(runnable, null,IWorkspace.AVOID_UPDATE,monitor);
+		} catch (CoreException e) {
+			throw new SaveFailedException(e);
+		}
+	}
+	/**
+	 * @see org.eclipse.wst.common.internal.emfworkbench.validateedit.ResourceStateValidator#checkActivation(ResourceStateValidatorPresenter)
+	 */
+	public void checkActivation(ResourceStateValidatorPresenter presenter) throws CoreException {
+		super.checkActivation(presenter);
+	}
+	/**
+	 * Subclasses can override - by default this will return the first resource referenced by the
+	 * known resource URIs for this EditModel
+	 * 
+	 * @return
+	 */
+	public Resource getPrimaryResource() {
+		// Overriden to handle loading the .component resource in new and old forms
+		// First will try to load from .settings/org.eclipse.wst.common.component
+		// Second will try to load from the old location(s) .settings/.component or .component
+		
+		URI uri = URI.createURI(StructureEdit.MODULE_META_FILE_NAME);
+		WTPModulesResource res = (WTPModulesResource)getResource(uri);
+		if (res == null || !res.isLoaded()) {
+			removeResource(res);
+			uri = URI.createURI(R1_MODULE_META_FILE_NAME);
+			res = (WTPModulesResource)getResource(uri);
+			if (res == null || !res.isLoaded()) {
+				removeResource(res);
+				uri = URI.createURI(R0_7_MODULE_META_FILE_NAME);
+				res = (WTPModulesResource)getResource(uri);
+				if (res == null || !res.isLoaded()) {
+					removeResource(res);
+					res = null;
 				}
 			}
 		}
-		return needsMigrating;
+		return res;
 	}
 	
 	public Object getAdapter(Class anAdapter) {
@@ -155,20 +333,38 @@
 			}
 		}
 	}
+	private boolean resNeedsMigrating(XMIResource res) throws CoreException {
+		boolean multiComps = false;
+		if (project==null)
+			return false;
+		boolean needsMigrating = (!project.hasNature(FacetedProjectNature.NATURE_ID)) || res == null || ((res != null) && ((WTPModulesResource)res).getRootObject() == null); 
+		if (!needsMigrating) {
+			if (res instanceof TranslatorResource && ((TranslatorResource)res).getRootObject() instanceof ProjectComponents) {
+				ProjectComponents components = (ProjectComponents) ((WTPModulesResource)res).getRootObject();
+				if (components.getComponents() != null) {
+					multiComps = components.getComponents().size() > 1;
+					return multiComps;
+				}
+			}
+		}
+		return needsMigrating;
+	}
 	protected Resource getAndLoadLocalResource(URI aUri) {
 		
 			Resource resource = getLocalResource(aUri);
 			if (null != resource) {
-				synchronized (resource) {
-					if (!resource.isLoaded()) {
-						try {
-							resource.load(Collections.EMPTY_MAP); // reload it
-						} catch (IOException e) {
-							// Ignore
-						}
+				if (!resource.isLoaded()) {
+					try {
+						resource.load(Collections.EMPTY_MAP); // reload it
+					} catch (IOException e) {
+						// Ignore
 					}
 				}
 			}
 			return resource;
 	}
+	
+	public void setUseOldFormat(boolean useOldFormat) {
+		this.useOldFormat = useOldFormat;
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModulecorePlugin.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModulecorePlugin.java
index 2b1c4bb..abb55db 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModulecorePlugin.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModulecorePlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
  * 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
@@ -15,8 +15,10 @@
 
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IAdapterManager;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.wst.common.componentcore.ArtifactEdit;
 import org.eclipse.wst.common.componentcore.internal.impl.PlatformURLModuleConnection;
 import org.eclipse.wst.common.componentcore.internal.impl.WTPModulesInit;
@@ -24,6 +26,8 @@
 import org.eclipse.wst.common.componentcore.internal.util.ModuleCoreEclipseAdapterFactory;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.osgi.framework.BundleContext;
+import java.lang.Throwable;
+import org.eclipse.core.runtime.CoreException;
 
 /**
  * The main plugin class to be used in the desktop.
@@ -47,7 +51,8 @@
 	/**
 	 * This method is called upon plug-in activation
 	 */
-	public void start(BundleContext context) throws Exception {
+	public synchronized void start(BundleContext context) throws Exception {
+		
 		super.start(context);
 		IAdapterManager manager = Platform.getAdapterManager();
 		
@@ -102,4 +107,85 @@
 		}
 		return resourceBundle;
 	}
+	
+
+	/**
+	 * Record an error against this plugin's log. 
+	 * 
+	 * @param aCode
+	 * @param aMessage
+	 * @param anException
+	 */
+	public static void logError(int aCode, String aMessage,
+			Throwable anException) {
+		getDefault().getLog().log(
+				createErrorStatus(aCode, aMessage, anException));
+	}
+
+	/**
+	 * 
+	 * Record a message against this plugin's log. 
+	 * 
+	 * @param severity
+	 * @param aCode
+	 * @param aMessage
+	 * @param exception
+	 */
+	public static void log(int severity, int aCode, String aMessage,
+			Throwable exception) {
+		log(createStatus(severity, aCode, aMessage, exception));
+	}
+
+	/**
+	 * 
+	 * Record a status against this plugin's log. 
+	 * 
+	 * @param aStatus
+	 */
+	public static void log(IStatus aStatus) {
+		getDefault().getLog().log(aStatus);
+	}
+
+	/**
+	 * Create a status associated with this plugin.
+	 *  
+	 * @param severity
+	 * @param aCode
+	 * @param aMessage
+	 * @param exception
+	 * @return A status configured with this plugin's id and the given parameters.
+	 */
+	public static IStatus createStatus(int severity, int aCode,
+			String aMessage, Throwable exception) {
+		return new Status(severity, PLUGIN_ID, aCode,
+				aMessage != null ? aMessage : "No message.", exception); //$NON-NLS-1$
+	}
+
+	/**
+	 * 
+	 * @param aCode
+	 * @param aMessage
+	 * @param exception
+	 * @return A status configured with this plugin's id and the given parameters.
+	 */
+	public static IStatus createErrorStatus(int aCode, String aMessage,
+			Throwable exception) {
+		return createStatus(IStatus.ERROR, aCode, aMessage, exception);
+	}
+
+	public static IStatus createStatus(int severity, String message, Throwable exception) {
+		return new Status(severity, PLUGIN_ID, message, exception);
+	}
+
+	public static IStatus createStatus(int severity, String message) {
+		return createStatus(severity, message, null);
+	}
+
+	public static void logError(Throwable exception) {
+		Platform.getLog(Platform.getBundle(PLUGIN_ID)).log( createStatus(IStatus.ERROR, exception.getMessage(), exception));
+	}
+
+	public static void logError(CoreException exception) {
+		Platform.getLog(Platform.getBundle(PLUGIN_ID)).log( exception.getStatus() );
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ProjectComponents.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ProjectComponents.java
index bf7649a..70a8a80 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ProjectComponents.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ProjectComponents.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -27,14 +27,15 @@
  * <ul>
  *   <li>{@link org.eclipse.wst.common.componentcore.internal.ProjectComponents#getProjectName <em>Project Name</em>}</li>
  *   <li>{@link org.eclipse.wst.common.componentcore.internal.ProjectComponents#getComponents <em>Components</em>}</li>
+ *   <li>{@link org.eclipse.wst.common.componentcore.internal.ProjectComponents#getVersion <em>Version</em>}</li>
  * </ul>
  * </p>
  *
- * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getProjectComponents()
+ * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getProjectComponents()
  * @model
  * @generated
  */
-public interface ProjectComponents extends EObject{
+public interface ProjectComponents extends EObject {
 	/**
 	 * Returns the value of the '<em><b>Project Name</b></em>' attribute.
 	 * The default value is <code>""</code>.
@@ -47,7 +48,7 @@
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Project Name</em>' attribute.
 	 * @see #setProjectName(String)
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getProjectComponents_ProjectName()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getProjectComponents_ProjectName()
 	 * @model default="" required="true"
 	 * @generated
 	 */
@@ -72,12 +73,38 @@
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Components</em>' containment reference list.
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getProjectComponents_Components()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getProjectComponents_Components()
 	 * @model type="org.eclipse.wst.common.componentcore.internal.WorkbenchComponent" containment="true"
 	 * @generated
 	 */
 	EList getComponents();
 
+	/**
+	 * Returns the value of the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Version</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Version</em>' attribute.
+	 * @see #setVersion(String)
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getProjectComponents_Version()
+	 * @model required="true"
+	 * @generated
+	 */
+	String getVersion();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.wst.common.componentcore.internal.ProjectComponents#getVersion <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Version</em>' attribute.
+	 * @see #getVersion()
+	 * @generated
+	 */
+	void setVersion(String value);
+
 	public WorkbenchComponent findWorkbenchModule(String aDeployName);
 
 } // ProjectComponents
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/Property.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/Property.java
index 5549bd5..350f111 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/Property.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/Property.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: Property.java,v 1.1 2005/04/04 07:05:00 cbridgha Exp $
+ * $Id: Property.java,v 1.2 2006/04/27 04:17:40 cbridgha Exp $
  */
 package org.eclipse.wst.common.componentcore.internal;
 
@@ -21,11 +21,11 @@
  * </ul>
  * </p>
  *
- * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getProperty()
+ * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getProperty()
  * @model
  * @generated
  */
-public interface Property extends EObject{
+public interface Property extends EObject {
 	/**
 	 * Returns the value of the '<em><b>Name</b></em>' attribute.
 	 * The default value is <code>""</code>.
@@ -37,7 +37,7 @@
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Name</em>' attribute.
 	 * @see #setName(String)
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getProperty_Name()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getProperty_Name()
 	 * @model default="" required="true"
 	 * @generated
 	 */
@@ -64,7 +64,7 @@
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Value</em>' attribute.
 	 * @see #setValue(String)
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getProperty_Value()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getProperty_Value()
 	 * @model default="" required="true"
 	 * @generated
 	 */
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ReferencedComponent.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ReferencedComponent.java
index 7caa133..dea5cf0 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ReferencedComponent.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ReferencedComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -39,14 +39,15 @@
  *   <li>{@link org.eclipse.wst.common.componentcore.internal.ReferencedComponent#getRuntimePath <em>Runtime Path</em>}</li>
  *   <li>{@link org.eclipse.wst.common.componentcore.internal.ReferencedComponent#getDependencyType <em>Dependency Type</em>}</li>
  *   <li>{@link org.eclipse.wst.common.componentcore.internal.ReferencedComponent#getDependentObject <em>Dependent Object</em>}</li>
+ *   <li>{@link org.eclipse.wst.common.componentcore.internal.ReferencedComponent#getArchiveName <em>Archive Name</em>}</li>
  * </ul>
  * </p>
  *
- * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getReferencedComponent()
+ * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getReferencedComponent()
  * @model
  * @generated
  */
-public interface ReferencedComponent extends EObject{
+public interface ReferencedComponent extends EObject {
 	/**
 	 * Returns the value of the '<em><b>Handle</b></em>' attribute.
 	 * <!-- begin-user-doc -->
@@ -57,7 +58,7 @@
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Handle</em>' attribute.
 	 * @see #setHandle(URI)
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getReferencedComponent_Handle()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getReferencedComponent_Handle()
 	 * @model dataType="org.eclipse.wst.common.componentcore.internal.URI" required="true"
 	 * @generated
 	 */
@@ -82,7 +83,7 @@
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Runtime Path</em>' attribute.
 	 * @see #setRuntimePath(IPath)
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getReferencedComponent_RuntimePath()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getReferencedComponent_RuntimePath()
 	 * @model dataType="org.eclipse.wst.common.componentcore.internal.IPath" required="true"
 	 * @generated
 	 */
@@ -137,7 +138,7 @@
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Dependent Object</em>' reference.
 	 * @see #setDependentObject(EObject)
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getReferencedComponent_DependentObject()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getReferencedComponent_DependentObject()
 	 * @model
 	 * @generated
 	 */
@@ -153,4 +154,30 @@
 	 */
 	void setDependentObject(EObject value);
 
+	/**
+	 * Returns the value of the '<em><b>Archive Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Archive Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Archive Name</em>' attribute.
+	 * @see #setArchiveName(String)
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getReferencedComponent_ArchiveName()
+	 * @model
+	 * @generated
+	 */
+	String getArchiveName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.wst.common.componentcore.internal.ReferencedComponent#getArchiveName <em>Archive Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Archive Name</em>' attribute.
+	 * @see #getArchiveName()
+	 * @generated
+	 */
+	void setArchiveName(String value);
+
 } // ReferencedComponent
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java
index 99acf93..3891ce6 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -24,10 +24,12 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.jobs.ILock;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.jem.util.UIContextDetermination;
 import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
 import org.eclipse.wst.common.componentcore.ComponentCore;
 import org.eclipse.wst.common.componentcore.IEditModelHandler;
@@ -40,6 +42,9 @@
 import org.eclipse.wst.common.componentcore.internal.util.EclipseResourceAdapter;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
+import org.eclipse.wst.common.internal.emf.utilities.ExtendedEcoreUtil;
+import org.eclipse.wst.common.internal.emfworkbench.edit.EMFWorkbenchEditContextFactory;
+import org.eclipse.wst.common.internal.emfworkbench.validateedit.IValidateEditContext;
 
 /**
  * <p>
@@ -79,13 +84,14 @@
 
 	public static final Class ADAPTER_TYPE = StructureEdit.class;
 
-	static String MODULE_META_FILE_NAME = ".settings/.component"; //$NON-NLS-1$
+	public static String MODULE_META_FILE_NAME = ".settings/org.eclipse.wst.common.component"; //$NON-NLS-1$
 
 	private final static ComponentcoreFactory COMPONENT_FACTORY = ComponentcoreFactory.eINSTANCE;
 	private static final ComponentResource[] NO_RESOURCES = new ComponentResource[0];
 	
 	private final ModuleStructuralModel structuralModel;
 	private final Map dependentCores = new HashMap();
+	private IProject aProject;
 	private boolean isStructuralModelSelfManaged;
 	private boolean isReadOnly;
 
@@ -236,7 +242,7 @@
 	 * @return The corresponding Eclipse IResource, if available.
 	 */
 	public static IResource getEclipseResource(ComponentResource aModuleResource) {
-		EclipseResourceAdapter eclipseResourceAdapter = (EclipseResourceAdapter) EcoreUtil.getAdapter(aModuleResource.eAdapters(), EclipseResourceAdapter.ADAPTER_TYPE);
+		EclipseResourceAdapter eclipseResourceAdapter = (EclipseResourceAdapter) ExtendedEcoreUtil.getAdapter(aModuleResource,aModuleResource.eAdapters(), EclipseResourceAdapter.ADAPTER_TYPE);
 		if (eclipseResourceAdapter != null)
 			return eclipseResourceAdapter.getEclipseResource();
 		eclipseResourceAdapter = new EclipseResourceAdapter();
@@ -279,10 +285,13 @@
 
 		IVirtualComponent targetComponent = null;
 		IProject targetProject = null;
-		boolean isClassPathURI = ModuleURIUtil.isClassPathURI(referencedComponent.getHandle());
+		URI uri = referencedComponent.getHandle();
+		if (uri == null)
+			return null;
+		boolean isClassPathURI = ModuleURIUtil.isClassPathURI(uri);
 		if( !isClassPathURI ){
 			try { 
-				targetProject = StructureEdit.getContainingProject(referencedComponent.getHandle());
+				targetProject = StructureEdit.getContainingProject(uri);
 			} catch(UnresolveableURIException uurie) {
 				//Ignore
 			} 
@@ -295,8 +304,8 @@
 			String archiveType = ""; //$NON-NLS-1$
 			String archiveName = ""; //$NON-NLS-1$
 			try {
-				archiveType = ModuleURIUtil.getArchiveType(referencedComponent.getHandle());
-				archiveName = ModuleURIUtil.getArchiveName(referencedComponent.getHandle());
+				archiveType = ModuleURIUtil.getArchiveType(uri);
+				archiveName = ModuleURIUtil.getArchiveName(uri);
 				
 			} catch (UnresolveableURIException e) {
 				//Ignore
@@ -311,6 +320,7 @@
 			structuralModel = aNature.getModuleStructuralModelForRead(this);
 		else
 			structuralModel = aNature.getModuleStructuralModelForWrite(this);
+		aProject = aNature.getProject();
 		isReadOnly = toAccessAsReadOnly;
 		isStructuralModelSelfManaged = true;
 	}
@@ -328,6 +338,7 @@
 	 */
 	public StructureEdit(ModuleStructuralModel aStructuralModel) {
 		structuralModel = aStructuralModel;
+		aProject = aStructuralModel.getProject();
 	}
 
 	/**
@@ -344,7 +355,12 @@
 	public void save(IProgressMonitor aMonitor) {
 		if (isReadOnly)
 			throwAttemptedReadOnlyModification();
-		structuralModel.save(aMonitor, this);
+		else if (validateEdit().isOK()) { 
+			synchronized (structuralModel) {
+				if (!structuralModel.isDisposed())
+					structuralModel.save(aMonitor, this);
+			}
+		}
 	}
 
 	/**
@@ -361,7 +377,10 @@
 	public void saveIfNecessary(IProgressMonitor aMonitor) {
 		if (isReadOnly)
 			throwAttemptedReadOnlyModification();
-		structuralModel.saveIfNecessary(aMonitor, this);
+		else if (validateEdit().isOK()) { 
+				if (!structuralModel.isDisposed())
+					structuralModel.saveIfNecessary(aMonitor, this);
+		}
 	}
 
 	/**
@@ -373,13 +392,20 @@
 	 * 
 	 * @see org.eclipse.wst.common.componentcore.IEditModelHandler#dispose()
 	 */
-	public void dispose() {
-		if (isStructuralModelSelfManaged)
-			structuralModel.releaseAccess(this);
-		if (dependentCores.size() > 0) {
+	public void dispose() {	
+		if (isStructuralModelSelfManaged && structuralModel!=null) {
+			synchronized (structuralModel) {
+				if (!structuralModel.isDisposed())
+					structuralModel.releaseAccess(this);
+			}	
+		}
+		if (dependentCores!=null && dependentCores.size() > 0) {
 			synchronized (dependentCores) {
-				for (Iterator cores = dependentCores.values().iterator(); cores.hasNext();)
-					((StructureEdit) cores.next()).dispose();
+				for (Iterator cores = dependentCores.values().iterator(); cores.hasNext();) {
+					StructureEdit core = (StructureEdit) cores.next();
+					if (core != null)
+						core.dispose();
+				}
 			}
 		}
 	}
@@ -390,11 +416,16 @@
 	 * </p>
 	 */
 	public void prepareProjectComponentsIfNecessary() {
-		try {
-			structuralModel.prepareProjectModulesIfNecessary();
-		} catch (CoreException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+		
+		synchronized (structuralModel) {
+			if (!structuralModel.isDisposed()) {
+				try {
+					structuralModel.prepareProjectModulesIfNecessary();
+				} catch (CoreException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
 		}
 	}
 
@@ -408,7 +439,23 @@
 	 * @return The root object of the underlying model
 	 */
 	public ProjectComponents getComponentModelRoot() {
-		return (ProjectComponents) structuralModel.getPrimaryRootObject();
+		ProjectComponents comps = null;
+		ILock lock = EMFWorkbenchEditContextFactory.getProjectLockObject(structuralModel.getProject());
+		try{
+			if(null != lock){
+				lock.acquire();
+			}
+			synchronized(structuralModel){
+				if (!structuralModel.isDisposed())
+					comps = (ProjectComponents) structuralModel.getPrimaryRootObject();
+			}
+		} finally{
+			if(null != lock){
+				lock.release();
+			}
+		}
+		
+		return comps;
 	}
 
 	/**
@@ -636,6 +683,7 @@
 	 */
 	public WorkbenchComponent findComponent(IPath aProjectRelativeResourcePath, int resourceFlag) throws UnresolveableURIException {
 		ProjectComponents projectModules = getComponentModelRoot();
+		if (projectModules == null) return null;
 		EList modules = projectModules.getComponents();
 
 		WorkbenchComponent module = null;
@@ -735,15 +783,19 @@
 	 * @see WorkbenchComponent#getHandle()
 	 */
 	public WorkbenchComponent findComponentByURI(URI aModuleURI) throws UnresolveableURIException {
+		if (aModuleURI == null)
+			return null;
 		if(aModuleURI.scheme() == null && aModuleURI.segmentCount() == 1)
 			return getComponent();
 		ModuleURIUtil.ensureValidFullyQualifiedModuleURI(aModuleURI);
 		String projectName = aModuleURI.segment(ModuleURIUtil.ModuleURI.PROJECT_NAME_INDX);
 		/* Accessing a local module */
-		if (structuralModel.getProject().getName().equals(projectName)) {
+		if (getProject()!=null && getProject().getName().equals(projectName))
 			return getComponent();
-		}
-		return getDependentModuleCore(aModuleURI).getComponent();
+		StructureEdit dependentCore = getDependentModuleCore(aModuleURI);
+		if (dependentCore != null)
+			return dependentCore.getComponent();
+		return null;
 	}
 
 	/**
@@ -818,7 +870,7 @@
 			return true; 
 		try {
 
-			String localProjectName = structuralModel.getProject().getName();
+			String localProjectName = getProject().getName();
 			if(ModuleURIUtil.ensureValidFullyQualifiedModuleURI(dependentHandle, false)) {
 				String dependentProjectName = aDependentModule.getHandle().segment(ModuleURIUtil.ModuleURI.PROJECT_NAME_INDX);
 				return localProjectName.equals(dependentProjectName);
@@ -874,12 +926,30 @@
 	 * 
 	 */
 	public WorkbenchComponent getComponent() {
-		if (getWorkbenchModules().length > 0)
-			return getWorkbenchModules()[0];
+		WorkbenchComponent[] comps = getWorkbenchModules();
+		if (comps.length > 0)
+			return comps[0];
 		return null;
 	}
 
 	public static URI createComponentURI(IProject aContainingProject, String aComponentName) {
 		return URI.createURI(PlatformURLModuleConnection.MODULE_PROTOCOL + IPath.SEPARATOR + PlatformURLModuleConnection.RESOURCE_MODULE + aContainingProject.getName() + IPath.SEPARATOR + aComponentName);
 	}
+
+	
+	protected IProject getProject() {
+		return aProject;
+	}
+	
+	public ModuleStructuralModel getModuleStructuralModel() {
+		return structuralModel;
+	}
+	
+	/**
+	 * Validate edit for resource state
+	 */
+	protected IStatus validateEdit() {
+		IValidateEditContext validator = (IValidateEditContext) UIContextDetermination.createInstance(IValidateEditContext.CLASS_KEY);
+		return validator.validateState(getModuleStructuralModel());
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/WorkbenchComponent.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/WorkbenchComponent.java
index f84bbf8..e8d7586 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/WorkbenchComponent.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/WorkbenchComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -35,11 +35,11 @@
  * </ul>
  * </p>
  *
- * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getWorkbenchComponent()
+ * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getWorkbenchComponent()
  * @model
  * @generated
  */
-public interface WorkbenchComponent extends EObject{
+public interface WorkbenchComponent extends EObject {
 	/**
 	 * Returns the value of the '<em><b>Name</b></em>' attribute.
 	 * The default value is <code>""</code>.
@@ -51,7 +51,7 @@
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Name</em>' attribute.
 	 * @see #setName(String)
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getWorkbenchComponent_Name()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getWorkbenchComponent_Name()
 	 * @model default="" required="true"
 	 * @generated
 	 */
@@ -78,7 +78,7 @@
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Resources</em>' containment reference list.
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getWorkbenchComponent_Resources()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getWorkbenchComponent_Resources()
 	 * @see org.eclipse.wst.common.componentcore.internal.ComponentResource#getComponent
 	 * @model type="org.eclipse.wst.common.componentcore.internal.ComponentResource" opposite="component" containment="true"
 	 * @generated
@@ -95,7 +95,7 @@
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Component Type</em>' containment reference.
 	 * @see #setComponentType(ComponentType)
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getWorkbenchComponent_ComponentType()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getWorkbenchComponent_ComponentType()
 	 * @model containment="true" required="true"
 	 * @generated
 	 */
@@ -121,7 +121,7 @@
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Referenced Components</em>' containment reference list.
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getWorkbenchComponent_ReferencedComponents()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getWorkbenchComponent_ReferencedComponents()
 	 * @model type="org.eclipse.wst.common.componentcore.internal.ReferencedComponent" containment="true"
 	 * @generated
 	 */
@@ -137,7 +137,7 @@
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Properties</em>' reference list.
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getWorkbenchComponent_Properties()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getWorkbenchComponent_Properties()
 	 * @model type="org.eclipse.wst.common.componentcore.internal.Property"
 	 * @generated
 	 */
@@ -153,7 +153,7 @@
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Metadata Resources</em>' attribute list.
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#getWorkbenchComponent_MetadataResources()
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#getWorkbenchComponent_MetadataResources()
 	 * @model type="org.eclipse.core.runtime.IPath" dataType="org.eclipse.wst.common.componentcore.internal.IPath"
 	 * @generated
 	 */
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraph.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraph.java
index e811f34..74341f2 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraph.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraph.java
@@ -10,45 +10,39 @@
  *******************************************************************************/
 package org.eclipse.wst.common.componentcore.internal.builder;
 
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
+import java.util.Collections;
 import java.util.Set;
 
 import org.eclipse.core.resources.IProject;
 
+/**
+ * @deprecated use {@link IDependencyGraph}
+ */
 public class DependencyGraph {
-	
+
 	private static final DependencyGraph INSTANCE = new DependencyGraph();
-	
-	private final Map dependencies = new HashMap();
-	
+
 	public static DependencyGraph getInstance() {
 		return INSTANCE;
 	}
 
 	public IProject[] getReferencingComponents(IProject target) {
-		Set referencingComponents = internalGetReferencingComponents(target);
+		Set<IProject> referencingComponents = IDependencyGraph.INSTANCE.getReferencingComponents(target);
 		return (IProject[]) referencingComponents.toArray(new IProject[referencingComponents.size()]);
 	}
-	
+
 	public void addReference(IProject target, IProject referencingComponent) {
-		internalGetReferencingComponents(target).add(referencingComponent);
+		// do nothing
 	}
-	
+
 	public void removeReference(IProject target, IProject referencingComponent) {
-		internalGetReferencingComponents(target).remove(referencingComponent);
-		
+		// do nothing
 	}
-	
+
 	protected Set internalGetReferencingComponents(IProject target) {
-		Set referencingComponents = (Set) dependencies.get(target);
-		if(referencingComponents == null) 
-			dependencies.put(target, (referencingComponents = new HashSet()));
-		return referencingComponents;
+		return Collections.EMPTY_SET;
 	}
-	
+
 	public void clear() {
-		dependencies.clear();
 	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphImpl.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphImpl.java
new file mode 100644
index 0000000..bca68a9
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphImpl.java
@@ -0,0 +1,454 @@
+package org.eclipse.wst.common.componentcore.internal.builder;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.internal.ModulecorePlugin;
+import org.eclipse.wst.common.componentcore.internal.impl.WTPModulesResourceFactory;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
+
+public class DependencyGraphImpl implements IDependencyGraph {
+
+	/**
+	 * Don't read or write the graph without first obtaining the graphLock.
+	 */
+	private Object graphLock = new Object();
+
+	/**
+	 * If projects and and B both depend on C an entry in this graph would be {C ->
+	 * {A, B} }
+	 */
+	private Map<IProject, Set<IProject>> graph = null;
+
+	private long modStamp = 0;
+
+	/**
+	 * This is not public; only {@link IDependencyGraph#INSTANCE} should be
+	 * used.
+	 * 
+	 * @return
+	 */
+	static IDependencyGraph getInstance() {
+		if (instance == null) {
+			instance = new DependencyGraphImpl();
+			instance.initGraph();
+		}
+		return instance;
+	}
+
+	private static DependencyGraphImpl instance = null;
+
+	private DependencyGraphImpl() {
+	}
+
+	public long getModStamp() {
+		synchronized (graphLock) {
+			return modStamp;
+		}
+	}
+
+	public Set<IProject> getReferencingComponents(IProject targetProject) {
+		waitForAllUpdates(null);
+		synchronized (graphLock) {
+			Set<IProject> set = graph.get(targetProject);
+			if (set == null) {
+				return Collections.EMPTY_SET;
+			} else {
+				for (Iterator<IProject> iterator = set.iterator(); iterator.hasNext();) {
+					IProject project = iterator.next();
+					if (!project.isAccessible()) {
+						iterator.remove();
+					}
+				}
+				Set<IProject> copy = new HashSet<IProject>();
+				copy.addAll(set);
+				return copy;
+			}
+		}
+	}
+
+	private class DependencyGraphResourceChangedListener implements IResourceChangeListener, IResourceDeltaVisitor {
+		// only registered for post change events
+		public void resourceChanged(IResourceChangeEvent event) {
+			try {
+				preUpdate();
+				event.getDelta().accept(this);
+			} catch (CoreException e) {
+				ModulecorePlugin.logError(e);
+			} finally {
+				postUpdate();
+			}
+		}
+
+		public boolean visit(IResourceDelta delta) throws CoreException {
+			IResource resource = delta.getResource();
+			switch (resource.getType()) {
+			case IResource.ROOT:
+				return true;
+			case IResource.PROJECT: {
+				int kind = delta.getKind();
+				if ((IResourceDelta.ADDED & kind) != 0) {
+					queueProjectAdded((IProject) resource);
+					return false;
+				} else if ((IResourceDelta.REMOVED & kind) != 0) {
+					queueProjectDeleted((IProject) resource);
+					return false;
+				} else if ((IResourceDelta.CHANGED & kind) != 0) {
+					int flags = delta.getFlags();
+					if ((IResourceDelta.OPEN & flags) != 0) {
+						boolean isOpen = ((IProject) resource).isOpen();
+						if (isOpen) {
+							queueProjectAdded((IProject) resource);
+						} else {
+							queueProjectDeleted((IProject) resource);
+						}
+						return false;
+					}
+					return true;
+				}
+				return false;
+			}
+			case IResource.FOLDER:
+				if (resource.getName().equals(".settings")) {
+					return true;
+				}
+				return false;
+			case IResource.FILE:
+				String name = resource.getName();
+				if (name.equals(WTPModulesResourceFactory.WTP_MODULES_SHORT_NAME)) {
+					update(resource.getProject());
+				}
+			default:
+				return false;
+			}
+		}
+	};
+
+	private DependencyGraphResourceChangedListener listener = null;
+
+	/**
+	 * The graph is built lazily once. Afterwards, the graph is updated as
+	 * necessary.
+	 */
+	private void initGraph() {
+		synchronized (graphLock) {
+			try {
+				preUpdate();
+				graph = new HashMap<IProject, Set<IProject>>();
+				listener = new DependencyGraphResourceChangedListener();
+				ResourcesPlugin.getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE);
+				IProject[] allProjects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+				for (IProject sourceProject : allProjects) {
+					queueProjectAdded(sourceProject);
+				}
+			} finally {
+				postUpdate();
+			}
+		}
+	}
+
+	private void removeAllReferences(IProject project) {
+		synchronized (graphLock) {
+			graph.remove(project);
+			for (Iterator<Set<IProject>> iterator = graph.values().iterator(); iterator.hasNext();) {
+				iterator.next().remove(project);
+			}
+			modStamp++;
+		}
+	}
+
+	private void removeReference(IProject sourceProject, IProject targetProject) {
+		synchronized (graphLock) {
+			Set<IProject> referencingProjects = graph.get(targetProject);
+			if (referencingProjects != null) {
+				referencingProjects.remove(sourceProject);
+			}
+			modStamp++;
+		}
+	}
+
+	private void addReference(IProject sourceProject, IProject targetProject) {
+		synchronized (graphLock) {
+			Set<IProject> referencingProjects = graph.get(targetProject);
+			if (referencingProjects == null) {
+				referencingProjects = new HashSet<IProject>();
+				graph.put(targetProject, referencingProjects);
+			}
+			referencingProjects.add(sourceProject);
+			modStamp++;
+		}
+	}
+
+	public static final Object GRAPH_UPDATE_JOB_FAMILY = new Object();
+
+	private static final int JOB_DELAY = 100;
+
+	private final GraphUpdateJob graphUpdateJob = new GraphUpdateJob();
+	private final Object jobLock = new Object();
+
+	private class GraphUpdateJob extends Job {
+
+		public GraphUpdateJob() {
+			super("Graph Update Job");
+			setSystem(true);
+			setRule(null);
+		}
+
+		public boolean belongsTo(Object family) {
+			if (family == GRAPH_UPDATE_JOB_FAMILY) {
+				return true;
+			}
+			return super.belongsTo(family);
+		}
+
+		// We use the listener list as a thread safe queue.
+		private class Queue extends ListenerList {
+			public synchronized Object[] getListeners() {
+				Object[] data = super.getListeners();
+				clear();
+				return data;
+			}
+
+			public synchronized boolean isEmpty() {
+				return super.isEmpty();
+			}
+		};
+
+		private Queue projectsAdded = new Queue();
+
+		private Queue projectsRemoved = new Queue();
+
+		private Queue projectsUpdated = new Queue();
+
+		public void queueProjectAdded(IProject project) {
+			synchronized (graphLock) {
+				modStamp++;
+			}
+			projectsAdded.add(project);
+		}
+
+		public void queueProjectDeleted(IProject project) {
+			synchronized (graphLock) {
+				modStamp++;
+			}
+			projectsRemoved.add(project);
+		}
+
+		public void queueProjectUpdated(IProject project) {
+			synchronized (graphLock) {
+				modStamp++;
+			}
+			projectsUpdated.add(project);
+		}
+
+		@Override
+		public boolean shouldSchedule() {
+			boolean isEmpty = projectsAdded.isEmpty() && projectsRemoved.isEmpty() && projectsUpdated.isEmpty();
+			return !isEmpty;
+		}
+
+		protected IStatus run(IProgressMonitor monitor) {
+			final Object[] removed = projectsRemoved.getListeners();
+			final Object[] updated = projectsUpdated.getListeners();
+			final Object[] added = projectsAdded.getListeners();
+			if (removed.length == 0 && updated.length == 0 && added.length == 0) {
+				return Status.OK_STATUS;
+			}
+			synchronized (graphLock) {
+				modStamp++;
+			}
+			SafeRunner.run(new ISafeRunnable() {
+				public void handleException(Throwable e) {
+					ModulecorePlugin.logError(e);
+				}
+
+				public void run() throws Exception {
+					// this is the simple case; just remove them all
+					synchronized (graphLock) {
+						for (Object o : removed) {
+							IProject project = (IProject) o;
+							removeAllReferences(project);
+						}
+					}
+					// get the updated queue in case there are any adds
+					// if there are any added projects, then unfortunately the
+					// entire workspace needs to be processed
+					if (added.length > 0) {
+						IProject[] allProjects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+						for (IProject sourceProject : allProjects) {
+							IVirtualComponent component = ComponentCore.createComponent(sourceProject);
+							if (component != null) {
+								IVirtualReference[] references = component.getReferences();
+								for (IVirtualReference ref : references) {
+									IVirtualComponent targetComponent = ref.getReferencedComponent();
+									if (targetComponent != null) {
+										IProject targetProject = targetComponent.getProject();
+										if (targetProject != null && !targetProject.equals(sourceProject)) {
+											addReference(sourceProject, targetProject);
+										}
+									}
+								}
+							}
+						}
+					} else if (updated.length > 0) {
+						IProject[] allProjects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+						Set<IProject> validRefs = new HashSet<IProject>();
+						for (Object o : updated) {
+							IProject sourceProject = (IProject) o;
+							IVirtualComponent component = ComponentCore.createComponent(sourceProject);
+							if (component != null) {
+								validRefs.clear();
+								IVirtualReference[] references = component.getReferences();
+								for (IVirtualReference ref : references) {
+									IVirtualComponent targetComponent = ref.getReferencedComponent();
+									if (targetComponent != null) {
+										IProject targetProject = targetComponent.getProject();
+										if (targetProject != null && !targetProject.equals(sourceProject)) {
+											validRefs.add(targetProject);
+										}
+									}
+								}
+								synchronized (graphLock) {
+									for (IProject targetProject : allProjects) {
+										// if the reference was identified
+										// above, be sure to add it
+										// otherwise, remove it
+										if (validRefs.remove(targetProject)) {
+											addReference(sourceProject, targetProject);
+										} else {
+											removeReference(sourceProject, targetProject);
+										}
+									}
+								}
+							} else {
+								// if this project is not a component, then it
+								// should be completely removed.
+								removeAllReferences(sourceProject);
+							}
+						}
+					}
+				}
+			});
+			// System.err.println(IDependencyGraph.INSTANCE);
+			return Status.OK_STATUS;
+		}
+	};
+
+	/**
+	 * @deprecated use {@link #update(IProject, int)}
+	 */
+	public void queueProjectAdded(IProject project) {
+		update(project, IDependencyGraph.ADDED);
+	}
+
+	/**
+	 * @deprecated use {@link #update(IProject, int)}
+	 */
+	public void queueProjectDeleted(IProject project) {
+		update(project, IDependencyGraph.REMOVED);
+	}
+
+	/**
+	 * @deprecated use {@link #update(IProject, int)}
+	 */
+	public void update(IProject project) {
+		update(project, IDependencyGraph.MODIFIED);
+	}
+
+	public void update(IProject project, final int updateType){
+		switch(updateType){
+		case IDependencyGraph.MODIFIED:
+			graphUpdateJob.queueProjectUpdated(project);
+			break;
+		case IDependencyGraph.ADDED:
+			graphUpdateJob.queueProjectAdded(project);
+			break;
+		case IDependencyGraph.REMOVED:
+			graphUpdateJob.queueProjectDeleted(project);
+			break;
+		}
+		synchronized (jobLock) {
+			if (pauseCount > 0) {
+				return;
+			}
+		}
+		graphUpdateJob.schedule(JOB_DELAY);
+	}
+	
+	
+	
+	private int pauseCount = 0;
+
+	/**
+	 * Pauses updates; any caller of this method must ensure through a
+	 * try/finally block that resumeUpdates is subsequently called.
+	 */
+	public void preUpdate() {
+		synchronized (jobLock) {
+			pauseCount++;
+		}
+	}
+
+	public void postUpdate() {
+		synchronized (jobLock) {
+			if (pauseCount > 0) {
+				pauseCount--;
+			}
+			if (pauseCount > 0) {
+				return;
+			}
+		}
+		graphUpdateJob.schedule(JOB_DELAY);
+	}
+
+	/**
+	 * Blocks until the graph is finished updating
+	 */
+	public void waitForAllUpdates(IProgressMonitor monitor) {
+		if(graphUpdateJob.shouldSchedule()){
+			graphUpdateJob.run(monitor);
+		}
+	}
+
+	public String toString() {
+		synchronized (graphLock) {
+			StringBuffer buff = new StringBuffer("Dependency Graph:\n{\n");
+			for (Iterator<Map.Entry<IProject, Set<IProject>>> iterator = graph.entrySet().iterator(); iterator.hasNext();) {
+				Map.Entry<IProject, Set<IProject>> entry = iterator.next();
+				buff.append("  " + entry.getKey().getName() + " -> {");
+				for (Iterator<IProject> mappedProjects = entry.getValue().iterator(); mappedProjects.hasNext();) {
+					buff.append(mappedProjects.next().getName());
+					if (mappedProjects.hasNext()) {
+						buff.append(", ");
+					}
+				}
+				buff.append("}\n");
+			}
+			buff.append("}");
+			return buff.toString();
+		}
+
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphManager.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphManager.java
index b646364..0b275c8 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphManager.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
  * 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
@@ -10,128 +10,46 @@
  *******************************************************************************/
 package org.eclipse.wst.common.componentcore.internal.builder;
 
-import java.util.HashMap;
-
 import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
-import org.eclipse.wst.common.componentcore.ComponentCore;
-import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
-import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
-import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
 
+/**
+ * @deprecated use {@link IDependencyGraph}
+ */
 public class DependencyGraphManager {
 
 	private static DependencyGraphManager INSTANCE = null;
-	private HashMap wtpModuleTimeStamps = null;
-	
+
 	private DependencyGraphManager() {
 		super();
 	}
-	
-	public static final DependencyGraphManager getInstance() {
-		if (INSTANCE == null) {
+
+	public synchronized static final DependencyGraphManager getInstance() {
+		if (INSTANCE == null)
 			INSTANCE = new DependencyGraphManager();
-			INSTANCE.constructIfNecessary();
-		}
 		return INSTANCE;
 	}
-	
+
 	public void construct(IProject project) {
-		if (project!=null && project.isAccessible() && project.findMember(IModuleConstants.COMPONENT_FILE_PATH) !=null) //$NON-NLS-1$
-			constructIfNecessary();
-	}
-	
-	private void constructIfNecessary() {
-		// Block other clients here while we are building
-		synchronized (this) {
-			if (moduleTimeStampsChanged()) {
-				cleanDependencyGraph();
-				buildDependencyGraph();
-			}
-		}
-	}
-	
-	private boolean moduleTimeStampsChanged() {
-		HashMap workspaceTimeStamps = collectModuleTimeStamps();
-		if (getWtpModuleTimeStamps().equals(workspaceTimeStamps))
-			return false;
-		return true;
-	}
-	
-	private HashMap collectModuleTimeStamps() {
-		HashMap timeStamps = new HashMap();
-		IProject[] projects = ProjectUtilities.getAllProjects();
-		for (int i=0; i<projects.length; i++) {
-			if (projects[i]==null || !projects[i].isAccessible())
-				continue;
-			IResource wtpModulesFile = projects[i].findMember(IModuleConstants.COMPONENT_FILE_PATH); //$NON-NLS-1$
-			if (wtpModulesFile != null) {
-				Long currentTimeStamp = new Long(wtpModulesFile.getLocalTimeStamp());
-				timeStamps.put(projects[i],currentTimeStamp);
-			}
-		}
-		return timeStamps;
-	}
-	
-	private void buildDependencyGraph() {
-		IProject[] projects = ProjectUtilities.getAllProjects();
-		for (int k=0; k<projects.length; k++) {
-			
-			if (!projects[k].isAccessible() || !addTimeStamp(projects[k])) 
-				continue;
-			IVirtualComponent component= ComponentCore.createComponent(projects[k]);
-			if (component == null) continue;
-			addDependencyReference(component);
-		}
-	}
-	
-	private void addDependencyReference(IVirtualComponent component) {
-		IProject componentProject = component.getProject();
-		IVirtualReference[] depRefs = component.getReferences();
-		for(int i = 0; i<depRefs.length; i++){
-			IVirtualComponent targetComponent = depRefs[i].getReferencedComponent();
-			if (targetComponent!=null) {
-				IProject targetProject = targetComponent.getProject();
-				DependencyGraph.getInstance().addReference(targetProject,componentProject);
-			}	
-		}
-		
-	}
-	
-	private boolean addTimeStamp(IProject project) {
-		// Get the .component file for the given project
-		IResource wtpModulesFile = project.findMember(IModuleConstants.COMPONENT_FILE_PATH); //$NON-NLS-1$
-		if (wtpModulesFile==null)
-			return false;
-		Long currentTimeStamp = new Long(wtpModulesFile.getLocalTimeStamp());
-		getWtpModuleTimeStamps().put(project,currentTimeStamp);
-		return true;
-	}
-	
-	private void cleanDependencyGraph() {
-		DependencyGraph.getInstance().clear();
-		getWtpModuleTimeStamps().clear();
+		// do nothing
 	}
 
 	/**
-	 * Lazy initialization and return of the key valued pair of projects and wtp modules file
-	 * timestamps.
-	 * 
-	 * @return HashMap of projects to .component file stamps
-	 */
-	private HashMap getWtpModuleTimeStamps() {
-		if (wtpModuleTimeStamps == null)
-			wtpModuleTimeStamps = new HashMap();
-		return wtpModuleTimeStamps;
-	}
-	
-	/**
-	 * Return the dependency graph which was initialized if need be in the 
+	 * Return the dependency graph which was initialized if need be in the
 	 * singleton manager method.
-	 */ 
+	 */
 	public DependencyGraph getDependencyGraph() {
-		constructIfNecessary();
 		return DependencyGraph.getInstance();
 	}
+
+	public void forceRefresh() {
+		// do nothing
+	}
+
+	public long getModStamp() {
+		return IDependencyGraph.INSTANCE.getModStamp();
+	}
+
+	public boolean checkIfStillValid(long timeStamp) {
+		return IDependencyGraph.INSTANCE.getModStamp() == timeStamp;
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/IDependencyGraph.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/IDependencyGraph.java
new file mode 100644
index 0000000..aa4f58c
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/IDependencyGraph.java
@@ -0,0 +1,132 @@
+package org.eclipse.wst.common.componentcore.internal.builder;
+
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+
+/**
+ * This graph provides a backward mapping of project component dependencies. It
+ * provides a project limited inverse of
+ * {@link IVirtualComponent#getReferences()}.
+ * 
+ * For example:
+ * <ul>
+ * <li>if the IVirtualComponent for project A has a dependency on the
+ * IVirtualComponent for project B, then calling
+ * {@link #getReferencingComponents(IProject)} on project B will return project
+ * A. </li>
+ * <li>if the IVirtualComponent for project A has a dependency on on the
+ * IVirtualComponent for a jar in project B, then calling
+ * {@link #getReferencingComponents(IProject)} for project B will return project
+ * A. This is true even if project B is not defined as an IVirtualComponent.
+ * </li>
+ * </ul>
+ * 
+ * Any call to {@link #getReferencingComponents(IProject)} is always expected to
+ * be up to date. The only case where a client may need to force an update is if
+ * that client is also defining dynamic IVirtualComponent dependencies, i.e. the
+ * client is using the org.eclipse.wst.common.modulecore.componentimpl extension
+ * point. Only in this case should a client be calling any of
+ * {@link #preUpdate()}, {@link #postUpdate()}, or {@link #update(IProject)}
+ * 
+ */
+public interface IDependencyGraph {
+
+	/**
+	 * Flag used by {@link #update(IProject, int)} to specify that something has
+	 * modified in a project which has changed the component dependencies.
+	 */
+	public static final int MODIFIED = 0;
+
+	/**
+	 * Flag used by {@link #update(IProject, int)} to specify a project has been
+	 * added or opened. This flag should be used as sparingly as possible
+	 * because there are performance implications.
+	 */
+	public static final int ADDED = 1;
+
+	/**
+	 * Flag used by {@link #update(IProject, int)} to specify a project has been
+	 * removed or closed.
+	 */
+	public static final int REMOVED = 2;
+
+	/**
+	 * The static instance of this graph
+	 */
+	public static IDependencyGraph INSTANCE = DependencyGraphImpl.getInstance();
+
+	/**
+	 * Returns the set of component projects referencing the specified target
+	 * project.
+	 * 
+	 * @param targetProject
+	 * @return
+	 */
+	public Set<IProject> getReferencingComponents(IProject targetProject);
+
+	/**
+	 * Returns a modification stamp. This modification stamp will be different
+	 * if the project dependencies ever change.
+	 */
+	public long getModStamp();
+
+	/**
+	 * WARNING: this should only be called by implementors of the
+	 * org.eclipse.wst.common.modulecore.componentimpl extension point.
+	 * 
+	 * This method is part of the update API.
+	 * 
+	 * @see {@link #update(IProject)}
+	 */
+	public void preUpdate();
+
+	/**
+	 * WARNING: this should only be called by implementors of the
+	 * org.eclipse.wst.common.modulecore.componentimpl extension point.
+	 * 
+	 * This method is part of the update API.
+	 * 
+	 * @see {@link #update(IProject)}
+	 */
+	public void postUpdate();
+
+	/**
+	 * @deprecated use {@link #update(IProject, int) using the #MODIFIED flag.
+	 */
+	public void update(IProject sourceProject);
+
+	/**
+	 * WARNING: this should only be called by implementors of the
+	 * org.eclipse.wst.common.modulecore.componentimpl extension point.
+	 * 
+	 * This method must be called when a resource change is detected which will
+	 * affect how dependencies behave. For example, the core IVirtualComponent
+	 * framework updates when changes are made to the
+	 * .settings/org.eclipse.wst.common.component file changes, and also when
+	 * IProjects are added or removed from the workspace. In the case for J2EE,
+	 * this occurs when changes are made to the META-INF/MANIFEST.MF file. In
+	 * general a call to update should only be made from a fast
+	 * {@link IResourceDeltaVisitor}.
+	 * 
+	 * In order to improve efficiency and avoid unnecessary update processing,
+	 * it is necessary to always proceed calls to update() with a call to
+	 * preUpdate() and follow with a call to postUpdate() using a try finally
+	 * block as follows: <code>
+	 * try {
+	 *     preUpdate();
+	 *     // perform 0 or more update() calls here
+	 * } finally {
+	 *     IDependencyGraph.INSTANCE.postUpdate();
+	 * }    
+	 * </code>
+	 * 
+	 * Valid updateType flags are {@link #MODIFIED}, {@link #ADDED}, and
+	 * {@link #REMOVED}
+	 * 
+	 */
+	public void update(IProject sourceProject, int updateType);
+
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ArtifactEditModelFactory.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ArtifactEditModelFactory.java
index aad88e4..17c57ea 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ArtifactEditModelFactory.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ArtifactEditModelFactory.java
@@ -29,15 +29,21 @@
 	
 	public static final String PARAM_MODULE_URI = "MODULE_URI"; //$NON-NLS-1$
 	
+	public static final String PARAM_ROOT_URI = "ROOT_URI"; //$NON-NLS-1$
+	
+	public static final String PARAM_ROOT_CONTENT_TYPE = "ROOT_CONTENT_TYPE"; //$NON-NLS-1$
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.wst.common.internal.emfworkbench.integration.EditModelFactory#createEditModelForRead(java.lang.String, org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext, java.util.Map)
 	 */
 	public EditModel createEditModelForRead(String editModelID, EMFWorkbenchContext context, Map params) {
 		URI moduleURI = (URI) ((params != null) ? params.get(PARAM_MODULE_URI) : null);
+		URI rootURI = (URI) ((params != null) ? params.get(PARAM_ROOT_URI) : null);
+		String rootContentType = (String) ((params != null) ? params.get(PARAM_ROOT_CONTENT_TYPE) : null);
 		if(moduleURI == null)
 			throw new IllegalStateException("A Module URI must be provided");
 		
-		return  new ArtifactEditModel(editModelID, context, true, moduleURI);
+		return  new ArtifactEditModel(editModelID, context, true, moduleURI, rootURI, rootContentType);
 	}
 	
 	/* (non-Javadoc)
@@ -45,9 +51,11 @@
 	 */
 	public EditModel createEditModelForWrite(String editModelID, EMFWorkbenchContext context, Map params) {
 		URI moduleURI = (URI) ((params != null) ? params.get(PARAM_MODULE_URI) : null);
+		URI rootURI = (URI) ((params != null) ? params.get(PARAM_ROOT_URI) : null);
+		String rootContentType = (String) ((params != null) ? params.get(PARAM_ROOT_CONTENT_TYPE) : null);
 		if(moduleURI == null)
 			throw new IllegalStateException("A Module URI must be provided");
-		return  new ArtifactEditModel(editModelID, context, false,false, moduleURI);
+		return  new ArtifactEditModel(editModelID, context, false, moduleURI, rootURI, rootContentType);
 	}
 	
 	/* (non-Javadoc)
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentCoreURIConverter.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentCoreURIConverter.java
index 8b881c0..a2722b6 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentCoreURIConverter.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentCoreURIConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -11,23 +11,21 @@
 package org.eclipse.wst.common.componentcore.internal.impl;
 
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.Collections;
+import java.util.List;
 
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.impl.URIMappingRegistryImpl;
 import org.eclipse.jem.util.emf.workbench.ResourceSetWorkbenchSynchronizer;
 import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
 import org.eclipse.wst.common.componentcore.ComponentCore;
-import org.eclipse.wst.common.componentcore.UnresolveableURIException;
-import org.eclipse.wst.common.componentcore.internal.ComponentResource;
-import org.eclipse.wst.common.componentcore.internal.StructureEdit;
-import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
@@ -42,7 +40,7 @@
 public class ComponentCoreURIConverter extends CompatibilityWorkbenchURIConverterImpl {
 	
 	private IProject containingProject;
-	private IFolder archiveRoot;
+//	private IFolder archiveRoot;
 	/**
 	 *  
 	 */
@@ -68,25 +66,9 @@
 	} 
  
 	public IVirtualComponent findComponent(IResource res) {
-
-		StructureEdit moduleCore = null;
-		WorkbenchComponent module = null;
-		try {
-			moduleCore = StructureEdit.getStructureEditForRead(containingProject);
-			ComponentResource[] resources = moduleCore.findResourcesBySourcePath(res.getFullPath(), ResourceTreeNode.CREATE_RESOURCE_ALWAYS);
-			for (int i = 0; i < resources.length; i++) {
-				module = resources[i].getComponent();
-				if (module != null)
-					break;
-			}
-		} catch (UnresolveableURIException e) {
-			// Ignore
-		} finally {
-			if (moduleCore != null)
-				moduleCore.dispose();
-		}
-		if( module != null )
-			return ComponentCore.createComponent(containingProject);
+		
+		if (res != null && res.exists())
+			return ComponentCore.createComponent(res.getProject());
 		return null;
 	}
 	/* (non-Javadoc)
@@ -115,7 +97,7 @@
 	private URI newPlatformURI(URI aNewURI) {
 		
 		try {
-			String componentName = StructureEdit.getDeployedName(aNewURI);
+//			String componentName = StructureEdit.getDeployedName(aNewURI);
 			IVirtualComponent component = ComponentCore.createComponent(containingProject);
 
 			URI deployPathSegment = ModuleURIUtil.trimToDeployPathSegment(aNewURI);
@@ -140,12 +122,18 @@
 			IFile aFile = WorkbenchResourceHelper.getPlatformFile(uri);
 			
 			if (aFile != null) {
-				IVirtualComponent component = findComponent(aFile);
+				IVirtualComponent component = ComponentCore.createComponent(getContainingProject());
+				
 				if (component != null) {
-					IProject fileProject = aFile.getProject();
-					//If it is not in the same project then just return the URI as is.
-					if (resourceSetSynchronizer.getProject() == fileProject)
-						return getArchiveRelativeURI(aFile,component.getRootFolder().getUnderlyingFolder());
+					IProject fileProject = getContainingProject();
+					
+					if (resourceSetSynchronizer.getProject() == fileProject){
+						List list = Arrays.asList(component.getRootFolder().getUnderlyingFolders());
+						IPath path = WorkbenchResourceHelperBase.getPathFromContainers(list, aFile.getFullPath());
+						if (path != null)
+							return URI.createURI(path.toString());
+						return null;
+					}
 				} else
 					return super.deNormalize(uri);
 			}
@@ -166,5 +154,42 @@
 		return null;
 	}
 
+	
+	
+	protected IProject getContainingProject() {
+		return containingProject;
+	}
+
+	@Override
+	protected URIMap getInternalURIMap() {
+
+	    if (uriMap == null)
+	    {
+	      URIMappingRegistryImpl mappingRegistryImpl = 
+	        new URIMappingRegistryImpl()
+	        {
+	          private static final long serialVersionUID = 1L;
+
+	          @Override
+	          protected URI delegatedGetURI(URI uri)
+	          {
+	        	if (ModuleURIUtil.hasContentTypeName(uri))
+	        		return newPlatformURI(uri);
+	            return URIMappingRegistryImpl.INSTANCE.getURI(uri);
+	          }
+	        };
+
+	      uriMap = (URIMap)mappingRegistryImpl.map();
+	    }
+
+	    URIMap uriConverterImplURIMap = null;
+	    if (uriMap instanceof URIMap)
+	    {
+	    	uriConverterImplURIMap = (URIMap)uriMap;
+	    }
+	    return uriConverterImplURIMap;
+	  
+	}
+
 
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentResourceImpl.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentResourceImpl.java
index 8aa7232..9147466 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentResourceImpl.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentResourceImpl.java
@@ -2,12 +2,13 @@
  * <copyright>
  * </copyright>
  *
- * $Id: ComponentResourceImpl.java,v 1.2 2005/04/05 03:35:37 cbridgha Exp $
+ * $Id: ComponentResourceImpl.java,v 1.3 2006/01/11 18:40:31 cbridgha Exp $
  */
 package org.eclipse.wst.common.componentcore.internal.impl;
 
 import java.util.Collection;
 
+import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
@@ -111,6 +112,7 @@
 	 */
 	protected String resourceType = RESOURCE_TYPE_EDEFAULT;
 
+	protected IProject owningProject;
 	protected static final int VIRTUAL = 0;
 	protected static final int PERSISTED = 1;
 	
@@ -419,6 +421,14 @@
 	public void setType(int type) {
 		this.type = type;
 	}
+
+	public IProject getOwningProject() {
+		return owningProject;
+	}
+
+	public void setOwningProject(IProject aProject) {
+		owningProject = aProject;
+	}
 	
 
 } //ComponentResourceImpl
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentcoreFactoryImpl.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentcoreFactoryImpl.java
index 1e23e37..0bcab20 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentcoreFactoryImpl.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentcoreFactoryImpl.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: ComponentcoreFactoryImpl.java,v 1.7 2005/10/18 22:27:18 cbridgha Exp $
+ * $Id: ComponentcoreFactoryImpl.java,v 1.8 2006/04/27 04:17:40 cbridgha Exp $
  */
 package org.eclipse.wst.common.componentcore.internal.impl;
 
@@ -11,7 +11,9 @@
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EDataType;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
 import org.eclipse.wst.common.componentcore.internal.ComponentResource;
 import org.eclipse.wst.common.componentcore.internal.ComponentType;
 import org.eclipse.wst.common.componentcore.internal.ComponentcoreFactory;
@@ -29,6 +31,26 @@
  * @generated
  */
 public class ComponentcoreFactoryImpl extends EFactoryImpl implements ComponentcoreFactory {
+	
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ComponentcoreFactory init() {
+		try {
+			ComponentcoreFactory theComponentcoreFactory = (ComponentcoreFactory)EPackage.Registry.INSTANCE.getEFactory("componentcore.xmi"); 
+			if (theComponentcoreFactory != null) {
+				return theComponentcoreFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new ComponentcoreFactoryImpl();
+	}
+
 	/**
 	 * Creates an instance of the factory.
 	 * <!-- begin-user-doc -->
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentcorePackageImpl.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentcorePackageImpl.java
index 6da7033..888ba54 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentcorePackageImpl.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentcorePackageImpl.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: ComponentcorePackageImpl.java,v 1.7 2005/10/18 22:25:44 cbridgha Exp $
+ * $Id: ComponentcorePackageImpl.java,v 1.9 2006/04/27 04:17:40 cbridgha Exp $
  */
 package org.eclipse.wst.common.componentcore.internal.impl;
 
@@ -105,7 +105,7 @@
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @see org.eclipse.emf.ecore.EPackage.Registry
-	 * @see org.eclipse.wst.common.componentcore.internal.ComponentcorePackage#eNS_URI
+	 * @see org.eclipse.wst.common.componentcore.ComponentcorePackage#eNS_URI
 	 * @see #init()
 	 * @generated
 	 */
@@ -401,6 +401,15 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public EAttribute getReferencedComponent_ArchiveName() {
+		return (EAttribute)referencedComponentEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public EClass getProjectComponents() {
 		return projectComponentsEClass;
 	}
@@ -428,6 +437,15 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public EAttribute getProjectComponents_Version() {
+		return (EAttribute)projectComponentsEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public EEnum getDependencyType() {
 		return dependencyTypeEEnum;
 	}
@@ -508,10 +526,12 @@
 		createEAttribute(referencedComponentEClass, REFERENCED_COMPONENT__RUNTIME_PATH);
 		createEAttribute(referencedComponentEClass, REFERENCED_COMPONENT__DEPENDENCY_TYPE);
 		createEReference(referencedComponentEClass, REFERENCED_COMPONENT__DEPENDENT_OBJECT);
+		createEAttribute(referencedComponentEClass, REFERENCED_COMPONENT__ARCHIVE_NAME);
 
 		projectComponentsEClass = createEClass(PROJECT_COMPONENTS);
 		createEAttribute(projectComponentsEClass, PROJECT_COMPONENTS__PROJECT_NAME);
 		createEReference(projectComponentsEClass, PROJECT_COMPONENTS__COMPONENTS);
+		createEAttribute(projectComponentsEClass, PROJECT_COMPONENTS__VERSION);
 
 		// Create enums
 		dependencyTypeEEnum = createEEnum(DEPENDENCY_TYPE);
@@ -577,10 +597,12 @@
 		initEAttribute(getReferencedComponent_RuntimePath(), this.getIPath(), "runtimePath", null, 1, 1, ReferencedComponent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getReferencedComponent_DependencyType(), this.getDependencyType(), "dependencyType", null, 1, 1, ReferencedComponent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getReferencedComponent_DependentObject(), ecorePackage.getEObject(), null, "dependentObject", null, 0, 1, ReferencedComponent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getReferencedComponent_ArchiveName(), ecorePackage.getEString(), "archiveName", null, 0, 1, ReferencedComponent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(projectComponentsEClass, ProjectComponents.class, "ProjectComponents", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getProjectComponents_ProjectName(), ecorePackage.getEString(), "projectName", "", 1, 1, ProjectComponents.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getProjectComponents_Components(), this.getWorkbenchComponent(), null, "components", null, 0, -1, ProjectComponents.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getProjectComponents_Version(), ecorePackage.getEString(), "version", null, 1, 1, ProjectComponents.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		// Initialize enums and add enum literals
 		initEEnum(dependencyTypeEEnum, DependencyType.class, "DependencyType");
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/IResourceFactoryExtPtConstants.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/IResourceFactoryExtPtConstants.java
new file mode 100644
index 0000000..fda1a5c
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/IResourceFactoryExtPtConstants.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.componentcore.internal.impl;
+
+public interface IResourceFactoryExtPtConstants {
+	
+
+	String EXTPT_RESOURCE_FACTORIES = "resourceFactories"; //$NON-NLS-1$
+	
+	String TAG_RESOURCE_FACTORY = "resourceFactory"; //$NON-NLS-1$
+	
+	String ATT_CLASS = "class"; //$NON-NLS-1$
+	
+	String ATT_SHORT_SEGMENT = "shortSegment"; //$NON-NLS-1$ 
+	
+	String TAG_CONTENTTYPE = "contentTypeBinding"; //$NON-NLS-1$ 
+	
+	String ATT_CONTENTTYPEID = "contentTypeId"; //$NON-NLS-1$ 
+	
+	String ATT_ISDEFAULT = "isDefault"; //$NON-NLS-1$ 
+		
+
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ModuleURIUtil.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ModuleURIUtil.java
index cbf3d51..170c513 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ModuleURIUtil.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ModuleURIUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -12,7 +12,9 @@
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.emf.common.util.URI;
+import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
 import org.eclipse.wst.common.componentcore.UnresolveableURIException;
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
 import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
@@ -34,6 +36,7 @@
 		public static final int SUB_PROTOCOL_INDX = 0;
 		public static final int PROJECT_NAME_INDX = 1;
 		public static final int MODULE_NAME_INDX = 2;
+		public static final int CONTENT_TYPE_INDX = 3;
 	}
 
 
@@ -70,6 +73,12 @@
 		}
 		return true;
 	}
+	public static boolean isValidFullyQualifiedModuleURI(URI aModuleURI) {
+		if (aModuleURI.segmentCount() < 3) {
+			return false;
+		}
+		return true;
+	}
 
 	public static boolean ensureValidFullyQualifiedPlatformURI(URI aFullyQualifiedResourceURI, boolean toThrowExceptionIfNecessary) throws UnresolveableURIException {
 		if (aFullyQualifiedResourceURI.segmentCount() < 2 || !PLATFORM_SCHEME.equals(aFullyQualifiedResourceURI.scheme()) || !RESOURCE_PROTOCOL.equals(aFullyQualifiedResourceURI.segment(0))) {
@@ -86,7 +95,8 @@
 
 	public static URI trimModuleResourcePathToModuleURI(URI aModuleResourcePath) throws UnresolveableURIException {
 		ensureValidFullyQualifiedModuleURI(aModuleResourcePath);
-		return aModuleResourcePath.trimSegments(aModuleResourcePath.segmentCount() - 3);
+		int trimIndex = (hasContentTypeName(aModuleResourcePath) ? 4 : 3);
+		return aModuleResourcePath.trimSegments(aModuleResourcePath.segmentCount() - trimIndex);
 	}
 
 	public static URI trimWorkspacePathToProjectRelativeURI(URI aFullyQualifiedResourceURI) throws UnresolveableURIException {
@@ -127,8 +137,15 @@
 	 * @return
 	 */
 	public static URI trimToDeployPathSegment(URI aFullyQualifiedModuleResourcePath) {
-		int segmentCount = aFullyQualifiedModuleResourcePath.segmentCount(); 
-		return aFullyQualifiedModuleResourcePath.deresolve(aFullyQualifiedModuleResourcePath.trimSegments(segmentCount - 4));
+		int segmentCount = aFullyQualifiedModuleResourcePath.segmentCount();
+		URI uri;
+		int trimIndex = (hasContentTypeName(aFullyQualifiedModuleResourcePath) ? 5 : 4);
+		if(segmentCount > trimIndex){
+			uri = aFullyQualifiedModuleResourcePath.deresolve(aFullyQualifiedModuleResourcePath.trimSegments(segmentCount - trimIndex), false,false,true);
+		} else {
+			uri = URI.createURI(aFullyQualifiedModuleResourcePath.segment(segmentCount-1));
+		}
+		return uri;
 	}
 
 	public static URI concat(URI uri1, URI uri2){
@@ -154,13 +171,16 @@
 	public static URI fullyQualifyURI(IProject aProject) {
 		return URI.createURI(RESOURCE_URI_PROTOCOL + aProject.getName() + IPath.SEPARATOR + aProject.getName());
 	}
+	public static URI fullyQualifyURI(IProject aProject, String contentTypeDescriber) {
+		return URI.createURI(RESOURCE_URI_PROTOCOL + aProject.getName() + IPath.SEPARATOR + aProject.getName() + IPath.SEPARATOR + contentTypeDescriber);
+	}
 
 	public static URI archiveComponentfullyQualifyURI(String aComponentName) {
 		return URI.createURI(ARCHIVE_URI_PROTOCOL + aComponentName);
 	}
 	
 	public static boolean isClassPathURI(URI uri){
-		if( PlatformURLModuleConnection.CLASSPATH.equals(uri.segment(0) )){
+		if(uri!=null && PlatformURLModuleConnection.CLASSPATH.equals(uri.segment(0) )){
 			return true;
 		}
 		return false;
@@ -182,4 +202,25 @@
 		else
 			return "[" + aComponent.getProject().getFullPath() + "]:" + aComponent.getProject().getName();
 	}
+
+	public static String getContentTypeName(URI uri) {
+		
+		if (WorkbenchResourceHelperBase.isPlatformResourceURI(uri) || !isValidFullyQualifiedModuleURI(uri))
+			return null;
+		String contentTypeIdentifier = (uri.segmentCount() > 3 ? uri.segment(ModuleURI.CONTENT_TYPE_INDX) : null);
+		if (contentTypeIdentifier != null && Platform.getContentTypeManager().getContentType(uri.segment(ModuleURI.CONTENT_TYPE_INDX)) != null)
+			return contentTypeIdentifier;
+		else
+			return null;
+	}
+	public static boolean hasContentTypeName(URI uri) {
+		
+		if (WorkbenchResourceHelperBase.isPlatformResourceURI(uri))
+			return false;
+		String contentTypeIdentifier = (uri.segmentCount() > 3 ? uri.segment(ModuleURI.CONTENT_TYPE_INDX) : null);
+		if (contentTypeIdentifier != null && Platform.getContentTypeManager().getContentType(uri.segment(ModuleURI.CONTENT_TYPE_INDX)) != null)
+			return true;
+		else
+			return false;
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/PlatformURLModuleConnection.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/PlatformURLModuleConnection.java
index 9b95e51..6033687 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/PlatformURLModuleConnection.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/PlatformURLModuleConnection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
  * 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
@@ -27,7 +27,6 @@
 import org.eclipse.core.runtime.Path;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.wst.common.componentcore.ComponentCore;
-import org.eclipse.wst.common.componentcore.UnresolveableURIException;
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
@@ -57,25 +56,27 @@
 	public static URI resolve(URI aModuleResourceRuntimePath) throws IOException {
 		try {
 			IProject componentProject = StructureEdit.getContainingProject(aModuleResourceRuntimePath);
-			String componentName = ModuleURIUtil.getDeployedName(aModuleResourceRuntimePath);
+			//String componentName = ModuleURIUtil.getDeployedName(aModuleResourceRuntimePath);
 			URI runtimeURI = ModuleURIUtil.trimToDeployPathSegment(aModuleResourceRuntimePath);
 			IPath runtimePath = new Path(runtimeURI.path());
 			IVirtualComponent component = ComponentCore.createComponent(componentProject);
 			//IVirtualFile vFile = component.getFile(runtimePath);
 			IVirtualFolder rootFolder = component.getRootFolder();
+			int matchingSegs = runtimePath.matchingFirstSegments(rootFolder.getProjectRelativePath());
+			if(matchingSegs > 0)
+				runtimePath = runtimePath.removeFirstSegments(matchingSegs);
 			IVirtualFile vFile = rootFolder.getFile(runtimePath);
 			return URI.createPlatformResourceURI(vFile.getWorkspaceRelativePath().toString());
-		} catch (UnresolveableURIException e) {
+		} catch (Exception e) {
 		}
 		return aModuleResourceRuntimePath;
 		 
 	}
 
-	private static URI normalizeToWorkspaceRelative(IProject project, IPath sourcePath, URI moduleResourceDeployPath) throws UnresolveableURIException {
-		String projectName = project.getName();
-		return URI.createURI(projectName + '/' + sourcePath.toString());
-	
-	}
+//	private static URI normalizeToWorkspaceRelative(IProject project, IPath sourcePath, URI moduleResourceDeployPath) throws UnresolveableURIException {
+//		String projectName = project.getName();
+//		return URI.createURI(projectName + '/' + sourcePath.toString());
+//	}
 
 	/*
 	 * (non-Javadoc)
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ProjectComponentsImpl.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ProjectComponentsImpl.java
index 543a3ab..e0645d7 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ProjectComponentsImpl.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ProjectComponentsImpl.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: ProjectComponentsImpl.java,v 1.2 2005/08/26 16:45:31 cbridgha Exp $
+ * $Id: ProjectComponentsImpl.java,v 1.3 2006/04/27 04:17:40 cbridgha Exp $
  */
 package org.eclipse.wst.common.componentcore.internal.impl;
 
@@ -16,7 +16,6 @@
 import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
@@ -35,6 +34,7 @@
  * <ul>
  *   <li>{@link org.eclipse.wst.common.componentcore.internal.impl.ProjectComponentsImpl#getProjectName <em>Project Name</em>}</li>
  *   <li>{@link org.eclipse.wst.common.componentcore.internal.impl.ProjectComponentsImpl#getComponents <em>Components</em>}</li>
+ *   <li>{@link org.eclipse.wst.common.componentcore.internal.impl.ProjectComponentsImpl#getVersion <em>Version</em>}</li>
  * </ul>
  * </p>
  *
@@ -71,6 +71,26 @@
 	 */
 	protected EList components = null;
 
+	/**
+	 * The default value of the '{@link #getVersion() <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getVersion()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String VERSION_EDEFAULT = "1.0.0";
+
+	/**
+	 * The cached value of the '{@link #getVersion() <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getVersion()
+	 * @generated
+	 * @ordered
+	 */
+	protected String version = VERSION_EDEFAULT;
+
 	private boolean isIndexed;
 
 	private final Map modulesIndex = new HashMap();
@@ -88,7 +108,7 @@
 	 * @generated
 	 */
 	protected EClass eStaticClass() {
-		return ComponentcorePackage.eINSTANCE.getProjectComponents();
+		return ComponentcorePackage.Literals.PROJECT_COMPONENTS;
 	}
 
 	/**
@@ -123,41 +143,63 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, Class baseClass, NotificationChain msgs) {
-		if (featureID >= 0) {
-			switch (eDerivedStructuralFeatureID(featureID, baseClass)) {
-				case ComponentcorePackage.PROJECT_COMPONENTS__COMPONENTS:
-					return ((InternalEList)getComponents()).basicRemove(otherEnd, msgs);
-				default:
-					return eDynamicInverseRemove(otherEnd, featureID, baseClass, msgs);
-			}
-		}
-		return eBasicSetContainer(null, featureID, msgs);
+	public String getVersion() {
+		return version;
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public Object eGet(EStructuralFeature eFeature, boolean resolve) {
-		switch (eDerivedStructuralFeatureID(eFeature)) {
+	public void setVersion(String newVersion) {
+		String oldVersion = version;
+		version = newVersion;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ComponentcorePackage.PROJECT_COMPONENTS__VERSION, oldVersion, version));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ComponentcorePackage.PROJECT_COMPONENTS__COMPONENTS:
+				return ((InternalEList)getComponents()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
 			case ComponentcorePackage.PROJECT_COMPONENTS__PROJECT_NAME:
 				return getProjectName();
 			case ComponentcorePackage.PROJECT_COMPONENTS__COMPONENTS:
 				return getComponents();
+			case ComponentcorePackage.PROJECT_COMPONENTS__VERSION:
+				return getVersion();
 		}
-		return eDynamicGet(eFeature, resolve);
+		return super.eGet(featureID, resolve, coreType);
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public void eSet(EStructuralFeature eFeature, Object newValue) {
-		switch (eDerivedStructuralFeatureID(eFeature)) {
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
 			case ComponentcorePackage.PROJECT_COMPONENTS__PROJECT_NAME:
 				setProjectName((String)newValue);
 				return;
@@ -165,38 +207,48 @@
 				getComponents().clear();
 				getComponents().addAll((Collection)newValue);
 				return;
+			case ComponentcorePackage.PROJECT_COMPONENTS__VERSION:
+				setVersion((String)newValue);
+				return;
 		}
-		eDynamicSet(eFeature, newValue);
+		super.eSet(featureID, newValue);
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public void eUnset(EStructuralFeature eFeature) {
-		switch (eDerivedStructuralFeatureID(eFeature)) {
+	public void eUnset(int featureID) {
+		switch (featureID) {
 			case ComponentcorePackage.PROJECT_COMPONENTS__PROJECT_NAME:
 				setProjectName(PROJECT_NAME_EDEFAULT);
 				return;
 			case ComponentcorePackage.PROJECT_COMPONENTS__COMPONENTS:
 				getComponents().clear();
 				return;
+			case ComponentcorePackage.PROJECT_COMPONENTS__VERSION:
+				setVersion(VERSION_EDEFAULT);
+				return;
 		}
-		eDynamicUnset(eFeature);
+		super.eUnset(featureID);
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public boolean eIsSet(EStructuralFeature eFeature) {
-		switch (eDerivedStructuralFeatureID(eFeature)) {
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
 			case ComponentcorePackage.PROJECT_COMPONENTS__PROJECT_NAME:
 				return PROJECT_NAME_EDEFAULT == null ? projectName != null : !PROJECT_NAME_EDEFAULT.equals(projectName);
 			case ComponentcorePackage.PROJECT_COMPONENTS__COMPONENTS:
 				return components != null && !components.isEmpty();
+			case ComponentcorePackage.PROJECT_COMPONENTS__VERSION:
+				return VERSION_EDEFAULT == null ? version != null : !VERSION_EDEFAULT.equals(version);
 		}
-		return eDynamicIsSet(eFeature);
+		return super.eIsSet(featureID);
 	}
 
 	/**
@@ -209,6 +261,8 @@
 		StringBuffer result = new StringBuffer(super.toString());
 		result.append(" (projectName: ");
 		result.append(projectName);
+		result.append(", version: ");
+		result.append(version);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ReferencedComponentImpl.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ReferencedComponentImpl.java
index 084b06e..f17b3dc 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ReferencedComponentImpl.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ReferencedComponentImpl.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: ReferencedComponentImpl.java,v 1.2 2005/09/12 02:48:31 cbridgha Exp $
+ * $Id: ReferencedComponentImpl.java,v 1.4 2007/02/14 16:00:52 jsholl Exp $
  */
 package org.eclipse.wst.common.componentcore.internal.impl;
 
@@ -31,6 +31,7 @@
  *   <li>{@link org.eclipse.wst.common.componentcore.internal.impl.ReferencedComponentImpl#getRuntimePath <em>Runtime Path</em>}</li>
  *   <li>{@link org.eclipse.wst.common.componentcore.internal.impl.ReferencedComponentImpl#getDependencyType <em>Dependency Type</em>}</li>
  *   <li>{@link org.eclipse.wst.common.componentcore.internal.impl.ReferencedComponentImpl#getDependentObject <em>Dependent Object</em>}</li>
+ *   <li>{@link org.eclipse.wst.common.componentcore.internal.impl.ReferencedComponentImpl#getArchiveName <em>Archive Name</em>}</li>
  * </ul>
  * </p>
  *
@@ -108,6 +109,26 @@
 	protected EObject dependentObject = null;
 
 	/**
+	 * The default value of the '{@link #getArchiveName() <em>Archive Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getArchiveName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ARCHIVE_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getArchiveName() <em>Archive Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getArchiveName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String archiveName = ARCHIVE_NAME_EDEFAULT;
+
+	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -196,7 +217,7 @@
 	public EObject getDependentObject() {
 		if (dependentObject != null && dependentObject.eIsProxy()) {
 			EObject oldDependentObject = dependentObject;
-			dependentObject = (EObject)eResolveProxy((InternalEObject)dependentObject);
+			dependentObject = eResolveProxy((InternalEObject)dependentObject);
 			if (dependentObject != oldDependentObject) {
 				if (eNotificationRequired())
 					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ComponentcorePackage.REFERENCED_COMPONENT__DEPENDENT_OBJECT, oldDependentObject, dependentObject));
@@ -231,6 +252,27 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public String getArchiveName() {
+		return archiveName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setArchiveName(String newArchiveName) {
+		String oldArchiveName = archiveName;
+		archiveName = newArchiveName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ComponentcorePackage.REFERENCED_COMPONENT__ARCHIVE_NAME, oldArchiveName, archiveName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public Object eGet(EStructuralFeature eFeature, boolean resolve) {
 		switch (eDerivedStructuralFeatureID(eFeature)) {
 			case ComponentcorePackage.REFERENCED_COMPONENT__HANDLE:
@@ -242,6 +284,8 @@
 			case ComponentcorePackage.REFERENCED_COMPONENT__DEPENDENT_OBJECT:
 				if (resolve) return getDependentObject();
 				return basicGetDependentObject();
+			case ComponentcorePackage.REFERENCED_COMPONENT__ARCHIVE_NAME:
+				return getArchiveName();
 		}
 		return eDynamicGet(eFeature, resolve);
 	}
@@ -265,6 +309,9 @@
 			case ComponentcorePackage.REFERENCED_COMPONENT__DEPENDENT_OBJECT:
 				setDependentObject((EObject)newValue);
 				return;
+			case ComponentcorePackage.REFERENCED_COMPONENT__ARCHIVE_NAME:
+				setArchiveName((String)newValue);
+				return;
 		}
 		eDynamicSet(eFeature, newValue);
 	}
@@ -288,6 +335,9 @@
 			case ComponentcorePackage.REFERENCED_COMPONENT__DEPENDENT_OBJECT:
 				setDependentObject((EObject)null);
 				return;
+			case ComponentcorePackage.REFERENCED_COMPONENT__ARCHIVE_NAME:
+				setArchiveName(ARCHIVE_NAME_EDEFAULT);
+				return;
 		}
 		eDynamicUnset(eFeature);
 	}
@@ -307,6 +357,8 @@
 				return dependencyType != DEPENDENCY_TYPE_EDEFAULT;
 			case ComponentcorePackage.REFERENCED_COMPONENT__DEPENDENT_OBJECT:
 				return dependentObject != null;
+			case ComponentcorePackage.REFERENCED_COMPONENT__ARCHIVE_NAME:
+				return ARCHIVE_NAME_EDEFAULT == null ? archiveName != null : !ARCHIVE_NAME_EDEFAULT.equals(archiveName);
 		}
 		return eDynamicIsSet(eFeature);
 	}
@@ -326,6 +378,8 @@
 		result.append(runtimePath);
 		result.append(", dependencyType: ");
 		result.append(dependencyType);
+		result.append(", archiveName: ");
+		result.append(archiveName);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeNode.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeNode.java
index 2828973..eaab41d 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeNode.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -11,8 +11,8 @@
 package org.eclipse.wst.common.componentcore.internal.impl;
 
 import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -47,8 +47,9 @@
 	 */
 	public static final int CREATE_RESOURCE_ALWAYS = 0x2;
 
-	private final Set moduleResources = Collections.synchronizedSet(new HashSet());	
-	private final Map children = Collections.synchronizedMap(new HashMap());
+	private final Set moduleResources = Collections.synchronizedSet(new LinkedHashSet());	
+	private final Map children = Collections.synchronizedMap(new LinkedHashMap());
+	private final Map transientChildResources = Collections.synchronizedMap(new LinkedHashMap());
 	private static final ComponentResource[] NO_MODULE_RESOURCES = new ComponentResource[]{};
 	private IPathProvider pathProvider;
 //	private ResourceTreeNode parent;
@@ -169,13 +170,13 @@
 	private Set findModuleResourcesSet(IPath aFullPath, IPath aPath, int creationFlags) {
 
 		if (aPath.segmentCount() == 0) {
-			Set resources = aggregateResources(new HashSet());
+			Set resources = aggregateResources(new LinkedHashSet());
 			return resources;
 		}
 		ResourceTreeNode child = findChild(aPath.segment(0), creationFlags);
 		if (child == null)
 			return findMatchingVirtualPathsSet(aFullPath, aPath, creationFlags);
-		Set foundResources = new HashSet();
+		Set foundResources = new LinkedHashSet();
 		foundResources.addAll(child.findModuleResourcesSet(aFullPath, aPath.removeFirstSegments(1), creationFlags));
 		foundResources.addAll(findMatchingVirtualPathsSet(aFullPath, aPath, creationFlags));
 		return foundResources;
@@ -187,29 +188,37 @@
 			ComponentResource moduleResource = null;
 			IResource eclipseResource = null;
 			IContainer eclipseContainer = null;
-			Set resultSet = new HashSet();
+			Set resultSet = new LinkedHashSet();
 			for (Iterator resourceIter = moduleResources.iterator(); resourceIter.hasNext();) {
 				moduleResource = (ComponentResource) resourceIter.next();
-				if(moduleResource.getRuntimePath() != null) {
+				if(moduleResource.getRuntimePath() != null && moduleResource.eResource() != null) {
 					eclipseResource = StructureEdit.getEclipseResource(moduleResource);
 					
 					if (eclipseResource != null && (eclipseResource.getType() == IResource.FOLDER || eclipseResource.getType() == IResource.PROJECT)) {
 						eclipseContainer = (IContainer) eclipseResource;
 				 
 						IPath runtimeURI = moduleResource.getRuntimePath().append(aPath);
+						IPath srcPath = eclipseContainer.getProjectRelativePath().append(aPath);
 						
 						// check for existing subpath in tree
-						ComponentResource newResource = findExistingComponentResource(moduleResource.getComponent(), runtimeURI);
+						ComponentResource newResource = findExistingComponentResource(moduleResource.getComponent(), runtimeURI, srcPath);
 						
-						// add new resource if null or found resource does not have the same source path
-						IPath srcPath = eclipseContainer.getProjectRelativePath().append(aPath);
-						if(newResource == null || !newResource.getSourcePath().equals(srcPath)) {
+						// add new resource if null
+						if(newResource == null) {
 							// flesh out the tree
-							if ((toCreateResourceAlways) || (eclipseContainer.findMember(aPath)) != null) {
+							IResource eclipseRes = eclipseContainer.findMember(aPath);
+							if ((toCreateResourceAlways) || (eclipseRes != null)) {
+								newResource = (ComponentResource)transientChildResources.get(srcPath);
+								if (newResource == null) {
 								newResource = ComponentcorePackage.eINSTANCE.getComponentcoreFactory().createComponentResource();
-								newResource.setComponent(moduleResource.getComponent());		
+								// Not setting the parent on this transient child resource
+								// newResource.setComponent(moduleResource.getComponent());
 								newResource.setRuntimePath(runtimeURI);
 								newResource.setSourcePath(srcPath);
+								if (eclipseRes != null)
+									newResource.setOwningProject(eclipseRes.getProject());
+								transientChildResources.put(srcPath,newResource);
+								}
 								resultSet.add(newResource);
 							}
 						}
@@ -222,11 +231,11 @@
 		return Collections.EMPTY_SET;
 	}
 
-	private ComponentResource findExistingComponentResource(WorkbenchComponent component, IPath runtimeURI) { 
+	private ComponentResource findExistingComponentResource(WorkbenchComponent component, IPath runtimeURI, IPath srcPath) { 
 		List resources = component.getResources();
 		for (Iterator iter = resources.iterator(); iter.hasNext();) {
 			ComponentResource element = (ComponentResource) iter.next();
-			if(runtimeURI.equals(element.getRuntimePath()))
+			if(runtimeURI.equals(element.getRuntimePath()) && srcPath.equals(element.getSourcePath()))
 				return element;
 			
 		}
@@ -272,4 +281,8 @@
 	/* package */IPathProvider getPathProvider() {
 		return pathProvider;
 	}
+	
+	public Map getChildren() {
+		return children;
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeRoot.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeRoot.java
index 86f4ce3..53293cd 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeRoot.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeRoot.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -18,12 +18,12 @@
 import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.common.notify.impl.AdapterImpl;
 import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.wst.common.componentcore.UnresolveableURIException;
 import org.eclipse.wst.common.componentcore.internal.ComponentResource;
 import org.eclipse.wst.common.componentcore.internal.ComponentcorePackage;
 import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
 import org.eclipse.wst.common.componentcore.internal.util.IPathProvider;
+import org.eclipse.wst.common.internal.emf.utilities.ExtendedEcoreUtil;
 
 /**
  * <p>
@@ -51,15 +51,20 @@
 					}
 					break;
 				case Notification.REMOVE:
-					resource = (ComponentResource) msg.getNewValue();
-					if(resource != null)
+					resource = (ComponentResource) msg.getOldValue();
+					if(resource != null){
 						resource.eAdapters().remove(getResourcePathListenerAdapter());
+						removeChild(resource);
+					}
 					break;
 				case Notification.REMOVE_MANY:
-					List removedValues = (List) msg.getNewValue();					
-					for (int i = 0; i < removedValues.size(); i++) {
-						resource = (ComponentResource) removedValues.get(i);
-						resource.eAdapters().remove(getResourcePathListenerAdapter());
+					List removedValues = (List) msg.getOldValue();
+					if (removedValues != null) {
+						for (int i = 0; i < removedValues.size(); i++) {
+							resource = (ComponentResource) removedValues.get(i);
+							resource.eAdapters().remove(getResourcePathListenerAdapter());
+							removeChild(resource);
+						}
 					}
 					break;
 				}
@@ -107,7 +112,7 @@
 
 	// TODO The source tree should be attached to the project modules root, not each module.
 	public static ResourceTreeRoot getSourceResourceTreeRoot(WorkbenchComponent aModule) {
-		ResourceTreeRootAdapter resourceTreeAdapter = (ResourceTreeRootAdapter) EcoreUtil.getAdapter(aModule.eAdapters(), ResourceTreeRootAdapter.SOURCE_ADAPTER_TYPE);
+		ResourceTreeRootAdapter resourceTreeAdapter = (ResourceTreeRootAdapter) ExtendedEcoreUtil.getAdapter(aModule, aModule.eAdapters(), ResourceTreeRootAdapter.SOURCE_ADAPTER_TYPE);
 		if (resourceTreeAdapter != null)
 			return resourceTreeAdapter.getResourceTreeRoot();
 		resourceTreeAdapter = new ResourceTreeRootAdapter(ResourceTreeRootAdapter.SOURCE_TREE);
@@ -116,7 +121,7 @@
 	}
 
 	public static ResourceTreeRoot getDeployResourceTreeRoot(WorkbenchComponent aModule) {
-		ResourceTreeRootAdapter resourceTreeAdapter = (ResourceTreeRootAdapter) EcoreUtil.getAdapter(aModule.eAdapters(), ResourceTreeRootAdapter.DEPLOY_ADAPTER_TYPE);
+		ResourceTreeRootAdapter resourceTreeAdapter = (ResourceTreeRootAdapter) ExtendedEcoreUtil.getAdapter(aModule, aModule.eAdapters(), ResourceTreeRootAdapter.DEPLOY_ADAPTER_TYPE);
 		if (resourceTreeAdapter != null)
 			return resourceTreeAdapter.getResourceTreeRoot();
 		resourceTreeAdapter = new ResourceTreeRootAdapter(ResourceTreeRootAdapter.DEPLOY_TREE);
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeRootAdapter.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeRootAdapter.java
index 1e6dd7d..24c4d17 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeRootAdapter.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeRootAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -62,5 +62,10 @@
 		}
 		return resourceTreeRoot;
 	}
+	
+	public void setResourceTreeRoot(ResourceTreeRoot r){
+		
+		resourceTreeRoot = r;
+	}
 
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesInit.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesInit.java
index 4548d97..85b5516 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesInit.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesInit.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -10,7 +10,9 @@
  *******************************************************************************/
 package org.eclipse.wst.common.componentcore.internal.impl;
 
+import org.eclipse.emf.ecore.EFactory;
 import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.wst.common.componentcore.internal.ComponentcoreFactory;
 import org.eclipse.wst.common.componentcore.internal.ComponentcorePackage;
 import org.eclipse.wst.common.internal.emf.resource.EMF2DOMRendererFactory;
 import org.eclipse.wst.common.internal.emf.utilities.DOMUtilities;
@@ -67,6 +69,9 @@
 			public EPackage getEPackage() {
 				return ComponentcorePackage.eINSTANCE;
 			}
+			public EFactory getEFactory() {
+				return ComponentcoreFactory.eINSTANCE;
+			}
 		});
 	}
 	
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesResourceFactory.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesResourceFactory.java
index cf9c94a..ee2a6dd 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesResourceFactory.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesResourceFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -12,6 +12,7 @@
 
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.wst.common.componentcore.internal.StructureEdit;
 import org.eclipse.wst.common.internal.emf.resource.EMF2DOMRendererFactory;
 import org.eclipse.wst.common.internal.emf.resource.Renderer;
 import org.eclipse.wst.common.internal.emf.resource.RendererFactory;
@@ -26,8 +27,12 @@
 public class WTPModulesResourceFactory extends TranslatorResourceFactory {
 	
 	
-	public static final String WTP_MODULES_SHORT_NAME = ".component"; //$NON-NLS-1$
-	public static final URI WTP_MODULES_URI_OBJ = URI.createURI(".settings/" + WTP_MODULES_SHORT_NAME);
+	public static final String WTP_MODULES_SHORT_NAME = "org.eclipse.wst.common.component"; //$NON-NLS-1$
+	public static final String OLD_WTP_MODULES_SHORT_NAME = ".component"; //$NON-NLS-1$
+	public static final String FIRST_WTP_MODULES_SHORT_NAME = ".wtpmodules"; //$NON-NLS-1$
+	public static final URI WTP_MODULES_URI_OBJ = URI.createURI(StructureEdit.MODULE_META_FILE_NAME);
+	public static final URI OLD_WTP_MODULES_URI_OBJ = URI.createURI(".settings/.component");
+	
 
 	/**
 	 * Method registerDtds.
@@ -64,6 +69,8 @@
 	 */
 	public static void registerWith(RendererFactory aRendererFactory) {
 		WTPResourceFactoryRegistry.INSTANCE.registerLastFileSegment(WTP_MODULES_SHORT_NAME, new WTPModulesResourceFactory(aRendererFactory));
+		WTPResourceFactoryRegistry.INSTANCE.registerLastFileSegment(OLD_WTP_MODULES_SHORT_NAME, new WTPModulesResourceFactory(aRendererFactory));
+		WTPResourceFactoryRegistry.INSTANCE.registerLastFileSegment(FIRST_WTP_MODULES_SHORT_NAME, new WTPModulesResourceFactory(aRendererFactory));
 	}
 	/**
 	 * register using the default renderer factory.
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPResourceFactoryRegistry.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPResourceFactoryRegistry.java
index ce47a23..e0698b2 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPResourceFactoryRegistry.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPResourceFactoryRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -10,9 +10,36 @@
  *******************************************************************************/
 package org.eclipse.wst.common.componentcore.internal.impl;
 
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.core.runtime.content.IContentDescription;
+import org.eclipse.core.runtime.content.IContentType;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.jem.util.RegistryReader;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.UnresolveableURIException;
+import org.eclipse.wst.common.componentcore.internal.ModulecorePlugin;
+import org.eclipse.wst.common.componentcore.internal.StructureEdit;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
 import org.eclipse.wst.common.internal.emf.resource.FileNameResourceFactoryRegistry;
+import org.eclipse.wst.common.internal.emf.resource.ResourceFactoryDescriptor;
+import org.eclipse.wst.common.internal.emf.utilities.DefaultOverridableResourceFactoryRegistry;
+import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper;
 
 /**
  * <p>
@@ -22,10 +49,308 @@
 public class WTPResourceFactoryRegistry extends FileNameResourceFactoryRegistry {
 
 	public static final WTPResourceFactoryRegistry INSTANCE = new WTPResourceFactoryRegistry();
+	 
+	private final static boolean LOG_WARNINGS = false;
+	
+	
+	private WTPResourceFactoryRegistry() {
+		new ResourceFactoryRegistryReader().readRegistry();
+	}
 	
 	public Resource.Factory delegatedGetFactory(URI uri) {
 		if (WTPResourceFactoryRegistry.INSTANCE == this)
 			return super.delegatedGetFactory(uri);
 		return WTPResourceFactoryRegistry.INSTANCE.getFactory(uri);	
+	}   
+
+	public synchronized Resource.Factory getFactory(URI uri, IContentDescription description) {
+		Resource.Factory resourceFactory = null;
+		if(uri != null && uri.lastSegment() != null) {
+			ResourceFactoryDescriptor descriptor = null;
+			if(null == description){
+				descriptor = getDescriptor(uri);
+			} else {
+				descriptor = getDescriptor(uri, description);
+			}
+			
+			if(descriptor != null) {
+				resourceFactory = getFactory(descriptor);	
+			}	
+		}
+		if(resourceFactory == null)
+			resourceFactory = super.getFactory(uri);
+		return resourceFactory; 
+	}
+	
+	public synchronized Resource.Factory getFactory(URI uri) {
+		return getFactory(uri, (IContentDescription)null);
+	}	
+
+
+	/**
+	 * Register a file name representing the last segment of a URI with the corresponding
+	 * Resource.Factory.
+	 */
+	public synchronized void registerLastFileSegment(String aSimpleFileName, Resource.Factory aFactory) { 
+		
+		if(LOG_WARNINGS) {
+			/* the third entry in the array is this stack frame, we walk back from there. */
+			StackTraceElement[] stackTrace = (new Exception()).getStackTrace();
+			if(stackTrace.length > 4) {
+				StringBuffer warningMessage = new StringBuffer("WTPResourceFactoryRegistry.registerLastFileSegment() was called explicitly from " + stackTrace[3]);
+				warningMessage.append("\nThis happened around: \n");
+				for (int i = 4; (i < stackTrace.length) && i < 8; i++) {
+					warningMessage.append("\tnear ").append(stackTrace[i]).append('\n');
+				}
+				warningMessage.append(".\nClients should use the org.eclipse.wst.common.modulecore.resourceFactories extension point instead.");
+				ModulecorePlugin.log(IStatus.INFO, 0, warningMessage.toString(), null);		
+			}
+		}
+		
+		super.registerLastFileSegment(aSimpleFileName, aFactory);
+		
+	}  
+	private WTPResourceFactoryRegistryKey getKey(ResourceFactoryDescriptor descriptor) {
+		WTPResourceFactoryRegistryKey key = new WTPResourceFactoryRegistryKey();
+		key.shortName = descriptor.getShortSegment();
+		key.type = descriptor.getContentType();
+		key.isDefault = descriptor.isDefault();
+		return key;
+	}
+	
+	/**
+	 * Declares a subclass to create Resource.Factory(ies) from an extension. 
+	 */
+	private class ConfigurationResourceFactoryDescriptor extends ResourceFactoryDescriptor  implements IResourceFactoryExtPtConstants {
+		
+		private String shortSegment;
+		private IContentType contentType;
+		private boolean isDefault = true;
+		private final IConfigurationElement element; 
+		
+		public ConfigurationResourceFactoryDescriptor(IConfigurationElement ext) throws CoreException {
+			Assert.isNotNull(ext);
+			element = ext;
+			init();
+		} 
+		
+		private void init() throws CoreException {
+			shortSegment = element.getAttribute(ATT_SHORT_SEGMENT);
+			if(shortSegment == null || shortSegment.trim().length() == 0)
+				throw new CoreException(
+							ModulecorePlugin.createErrorStatus(0, 
+										"The shortSegment attribute of " + TAG_RESOURCE_FACTORY + //$NON-NLS-1$ 
+										" must specify a valid, non-null, non-empty value in " +   //$NON-NLS-1$
+										element.getNamespaceIdentifier(), null));
+			if ("false".equals(element.getAttribute(ATT_ISDEFAULT)))
+					isDefault = false;
+			
+			IConfigurationElement[] bindings = element.getChildren(TAG_CONTENTTYPE);
+			if (bindings.length > 0) {
+				String contentTypeId = null;
+				contentTypeId = bindings[0].getAttribute(ATT_CONTENTTYPEID);			
+				if (contentTypeId != null)
+					contentType = Platform.getContentTypeManager().getContentType(contentTypeId);
+				}
+		} 
+
+		public boolean isEnabledFor(URI fileURI) {
+			/* shortSegment must be non-null for the descriptor to be created, 
+			 * a validation check in init() verifies this requirement */
+			if(fileURI != null && fileURI.lastSegment() != null)
+				return shortSegment.equals(fileURI.lastSegment());
+			return false;
+		} 
+		
+		public Resource.Factory createFactory() {
+			
+			final Resource.Factory[] factory = new Resource.Factory[1];
+			
+			SafeRunner.run(new ISafeRunnable() {
+				
+				public void run() throws Exception {
+					factory[0] = (Resource.Factory) element.createExecutableExtension(ATT_CLASS);					
+				}
+				
+				public void handleException(Throwable exception) {
+					ModulecorePlugin.log(ModulecorePlugin.createErrorStatus(0, exception.getMessage(), exception));					
+				}
+			});
+			
+			return factory[0] != null ? factory[0] : DefaultOverridableResourceFactoryRegistry.GLOBAL_FACTORY;
+			
+		}
+
+		public String getShortSegment() {
+			return shortSegment;
+		}
+
+		public IContentType getContentType() {
+			
+			return contentType;
+		}
+
+		public boolean isDefault() {
+			return isDefault;
+		}  
+		public int hashCode() {
+			if (getContentType() != null)
+				return getShortSegment().hashCode() & getContentType().hashCode();
+			else return super.hashCode();
+		}
+		
+		public boolean equals(Object o) {
+			if(o instanceof ResourceFactoryDescriptor && getContentType() != null)
+				return (getShortSegment().equals(((ResourceFactoryDescriptor)o).getShortSegment()) &&
+						getContentType().equals(((ResourceFactoryDescriptor)o).getContentType()));
+			else if (((ResourceFactoryDescriptor)o).getContentType() != null) return false;
+				
+			return super.equals(o);
+		}
+	}  
+	 
+	
+	private class ResourceFactoryRegistryReader extends RegistryReader implements IResourceFactoryExtPtConstants { 
+ 		
+		public ResourceFactoryRegistryReader() {
+			super(Platform.getPluginRegistry(), ModulecorePlugin.PLUGIN_ID, EXTPT_RESOURCE_FACTORIES);
+		}
+
+		public boolean readElement(final IConfigurationElement element) {
+			
+			if(element != null && TAG_RESOURCE_FACTORY.equals(element.getName())) {
+				final boolean[] success = new boolean[] { true }; 
+				SafeRunner.run(new ISafeRunnable() {
+					
+					public void run() throws Exception {
+						addDescriptor(new ConfigurationResourceFactoryDescriptor(element));
+					} 
+
+					public void handleException(Throwable exception) {
+						ModulecorePlugin.log(ModulecorePlugin.createErrorStatus(0, exception.getMessage(), exception));
+						success[0] = false;
+					}
+				});				
+				return success[0];
+			} else {
+				return false;
+			}	
+		}
+	}
+	private class WTPResourceFactoryRegistryKey { 
+ 		
+		public String shortName;
+		public IContentType type;
+		public boolean isDefault = true;
+		public WTPResourceFactoryRegistryKey() {
+			super();
+		}
+		
+		
+	}
+
+	protected void addDescriptor(ResourceFactoryDescriptor descriptor) {
+		getDescriptors().put(getKey(descriptor), descriptor);
+	}
+
+	protected synchronized ResourceFactoryDescriptor getDescriptor(URI uri, IContentDescription description) {
+		Set keys = getDescriptors().keySet();
+		ResourceFactoryDescriptor defaultDesc = null;
+		for (Iterator iterator = keys.iterator(); iterator.hasNext();) {
+			WTPResourceFactoryRegistryKey key = (WTPResourceFactoryRegistryKey) iterator.next();
+			if (key.shortName.equals(uri.lastSegment())) {
+				ResourceFactoryDescriptor desc = (ResourceFactoryDescriptor)getDescriptors().get(key);
+				if (description == null) {
+					if (key.type == null) 
+						return desc;
+					else if (desc.isDefault()) 
+						return desc;
+				}
+				//Allow the contentType discrimination to take place
+				if ((key.type != null) && 
+						(description != null) && 
+						(description.getContentType().equals(key.type))) {
+					// If the current describer is "default" then specify
+					if(desc.isDefault())
+						return desc;
+					else 	
+						defaultDesc = desc;
+				}
+					
+				if ((description != null) && (desc.isDefault()) && (defaultDesc == null))
+					defaultDesc = desc;
+			}
+		}
+		return defaultDesc;
+	}
+private URI newPlatformURI(URI aNewURI, IProject project) {
+		
+		if (project == null)
+			return ModuleURIUtil.trimToDeployPathSegment(aNewURI);
+		try {
+			IVirtualComponent component = ComponentCore.createComponent(project);
+
+			URI deployPathSegment = ModuleURIUtil.trimToDeployPathSegment(aNewURI);
+			
+			//IVirtualFile newFile = component.getFile(new Path(deployPathSegment.path()));			
+			IVirtualFolder rootFolder = component.getRootFolder();
+			IVirtualFile newFile = rootFolder.getFile(new Path(deployPathSegment.path()));
+			
+			return URI.createPlatformResourceURI(newFile.getWorkspaceRelativePath().toString());
+			 
+		} catch(Exception e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	private IContentDescription getDescriptionFromURI(URI uri) {
+		String contentTypeIdentifier = ModuleURIUtil.getContentTypeName(uri);
+		if (contentTypeIdentifier != null)
+			return Platform.getContentTypeManager().getContentType(contentTypeIdentifier).getDefaultDescription();
+		else
+			return null;
+		
+	}
+
+	protected synchronized ResourceFactoryDescriptor getDescriptor(URI uri) {
+		IFile file = WorkbenchResourceHelper.getPlatformFile(uri);
+		IContentDescription description = null;
+		if (file != null && file.exists()) {
+			try {
+				description = file.getContentDescription();
+			} catch (CoreException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+		if (description == null) {//Check for optional embedded uri segment, then normalize
+			description = getDescriptionFromURI(uri);
+			try {
+				if (description != null) {
+					IProject componentProject = null;
+					try {
+						componentProject = StructureEdit.getContainingProject(uri);
+					} catch (UnresolveableURIException e) {
+						// TODO Auto-generated catch block
+						e.printStackTrace();
+					}
+					uri = PlatformURLModuleConnection.resolve(uri);
+					uri = newPlatformURI(uri,componentProject);
+				} 
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+		
+		ResourceFactoryDescriptor defaultDesc = getDescriptor(uri, description);
+		// Ok no content type match - go to super
+		if (defaultDesc != null){
+			return defaultDesc;
+		}
+		else{
+			return super.getDescriptor(uri);
+		}
 	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WorkbenchComponentImpl.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WorkbenchComponentImpl.java
index c253388..883ebb9 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WorkbenchComponentImpl.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WorkbenchComponentImpl.java
@@ -2,18 +2,20 @@
  * <copyright>
  * </copyright>
  *
- * $Id: WorkbenchComponentImpl.java,v 1.7 2005/10/18 22:25:44 cbridgha Exp $
+ * $Id: WorkbenchComponentImpl.java,v 1.14 2007/02/14 16:00:52 jsholl Exp $
  */
 package org.eclipse.wst.common.componentcore.internal.impl;
 
 import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.Iterator;
+import java.util.List;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EClass;
@@ -52,6 +54,68 @@
  * @generated
  */
 public class WorkbenchComponentImpl extends EObjectImpl implements WorkbenchComponent {
+	
+	
+	
+	public static class ESynchronizedAdapterList extends EAdapterList
+	  {
+	
+	    public ESynchronizedAdapterList(Notifier notifier) {
+			super(notifier);
+		}
+	
+		public boolean add(Object object)
+	    {
+	    synchronized (this) {return super.add(object);}
+	    }
+	
+	    public void add(int index, Object object)
+	    {
+	    synchronized (this) {super.add(index, object);}
+	    }
+	
+	    public boolean addAll(Collection collection)
+	    {
+	    synchronized (this) {return super.addAll(collection);}
+	    }
+	
+	    public boolean remove(Object object)
+	    {
+	    synchronized (this) {return super.remove(object);}
+	    }
+	
+	    public Object remove(int index)
+	    {
+	    synchronized (this) {return super.remove(index);}
+	    }
+	
+	    public boolean removeAll(Collection collection)
+	    {
+	    synchronized (this) {return super.removeAll(collection);}
+	    }
+	
+	    public void clear()
+	    {
+	     synchronized (this) {super.clear();};
+	    }
+	
+	
+	    public Object set(int index, Object object)
+	    {
+	    synchronized (this) {return super.set(index, object);}
+	    }
+	
+	    public void move(int newPosition, Object object)
+	    {
+	    synchronized (this) {super.move(newPosition, object);}
+	    }
+	
+	    public Object move(int newPosition, int oldPosition)
+	    {
+	    synchronized (this) {return super.move(newPosition, oldPosition);}
+	    }
+	  }
+
 	/**
 	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -121,16 +185,18 @@
 	 */
 	protected EList metadataResources = null;
 
-	private final Map resourceIndexByDeployPath = new HashMap();
-	private final Map resourceIndexBySourcePath = new HashMap();
+//	private final Map resourceIndexByDeployPath = new HashMap();
+//	private final Map resourceIndexBySourcePath = new HashMap();
 
-	private boolean isIndexedByDeployPath;
+//	private boolean isIndexedByDeployPath;
 
-	private boolean isIndexedBySourcePath;
+//	private boolean isIndexedBySourcePath;
 
-	private static final ComponentResource[] NO_MODULE_RESOURCES = new ComponentResource[0];
+//	private static final ComponentResource[] NO_MODULE_RESOURCES = new ComponentResource[0];
 
 	private URI handle;
+	
+	private IPath defaultSourceRoot;
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
@@ -140,6 +206,18 @@
 		super();
 	}
 
+	private IPath getFirstRootSource() {
+		
+		List res = getResources();
+		for (Iterator iter = res.iterator(); iter.hasNext();) {
+			ComponentResource element = (ComponentResource) iter.next();
+			if (element.getRuntimePath().equals(new Path("/")))
+				return element.getSourcePath();
+			
+		}	
+		return null;
+	}
+
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
@@ -174,7 +252,7 @@
 		// TODO A more advanced adapter should be applied to keep the handle up to date.
 		if (eResource() != null) {
 			URI resourceURI = eResource().getURI();
-			String safeDeployedName = getName() != null ? getName() : ""; //$NON-NLS-1$
+//			String safeDeployedName = getName() != null ? getName() : ""; //$NON-NLS-1$
 			if (resourceURI != null && resourceURI.segmentCount() >= 2)
 				setHandle(computeHandle());
 		}
@@ -461,6 +539,31 @@
 		ResourceTreeRoot resourceTreeRoot = ResourceTreeRoot.getSourceResourceTreeRoot(this);
 		return resourceTreeRoot.exists(aSourcePath, resourceFlag); 
 	}
+	public EList eAdapters()
+	  {
+	    if (eAdapters == null)
+	    {
+	      eAdapters =  new ESynchronizedAdapterList(this);
+	    }
+	    return eAdapters;
+	  }
+
+
+	public void eNotify(Notification notification) {
+		synchronized (eAdapters()) {
+			super.eNotify(notification);
+		}
+	}
+	
+	public IPath getDefaultSourceRoot() {
+		if (defaultSourceRoot == null)
+			defaultSourceRoot = getFirstRootSource();
+		return defaultSourceRoot;
+	}
+	
+	public void setDefaultSourceRoot(IPath defaultSourceRoot) {
+		this.defaultSourceRoot = defaultSourceRoot;
+	}
   
 
 } // WorkbenchComponentImpl
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ArtifactEditOperationDataModelProvider.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ArtifactEditOperationDataModelProvider.java
index 3ac5534..1a61422 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ArtifactEditOperationDataModelProvider.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ArtifactEditOperationDataModelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
  * 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
@@ -43,7 +43,7 @@
 
 	public IProject getTargetProject() {
 		String projectName = (String) model.getProperty(IArtifactEditOperationDataModelProperties.PROJECT_NAME);
-		if (projectName != null)
+		if (projectName != null && projectName.length() > 0)
 			return ProjectUtilities.getProject(projectName);
 		return null;
 	}
@@ -76,6 +76,12 @@
 		}
 		return module;
 	}
+	public boolean propertySet(String propertyName, Object propertyValue) {
+		boolean notify = super.propertySet(propertyName, propertyValue);
+		if (COMPONENT_NAME.equals(propertyName))
+			setProperty(PROJECT_NAME, propertyValue);
+		return notify;
+	}
 
 	public ArtifactEdit getArtifactEditForRead() {
 		WorkbenchComponent module = getWorkbenchModule();
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ArtifactEditProviderOperation.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ArtifactEditProviderOperation.java
index 7d8935c..b956516 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ArtifactEditProviderOperation.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ArtifactEditProviderOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
  * 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
@@ -16,16 +16,21 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jem.util.UIContextDetermination;
 import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
 import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
 import org.eclipse.wst.common.componentcore.ArtifactEdit;
 import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.internal.ArtifactEditModel;
 import org.eclipse.wst.common.componentcore.internal.util.ArtifactEditRegistryReader;
 import org.eclipse.wst.common.componentcore.internal.util.IArtifactEditFactory;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
 import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext;
+import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
+import org.eclipse.wst.common.internal.emfworkbench.validateedit.IValidateEditContext;
 
 public abstract class ArtifactEditProviderOperation extends AbstractDataModelOperation {
 	
@@ -62,7 +67,7 @@
 		//Default
 	}
 
-	private ArtifactEdit getArtifactEditForModule(IVirtualComponent comp) {
+	protected ArtifactEdit getArtifactEditForModule(IVirtualComponent comp) {
 		ArtifactEditRegistryReader reader = ArtifactEditRegistryReader.instance();
 		IArtifactEditFactory factory = reader.getArtifactEdit(comp.getProject());
 		if (factory == null)
@@ -91,7 +96,9 @@
 	public final IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
 		try {
 			initialize(monitor);
-			return doExecute(monitor, info);
+			if (validateEdit().isOK())
+				return doExecute(monitor, info);
+			return Status.CANCEL_STATUS;
 		} finally {
 			dispose();
 		}
@@ -103,4 +110,12 @@
 		return artifactEdit;
 	}
 
+	/**
+	 * Validate edit for resource state
+	 */
+	protected IStatus validateEdit() {
+		IValidateEditContext validator = (IValidateEditContext) UIContextDetermination.createInstance(IValidateEditContext.CLASS_KEY);
+		return validator.validateState((EditModel)getArtifactEdit().getAdapter(ArtifactEditModel.ADAPTER_TYPE));
+		
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ComponentCreationDataModelProvider.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ComponentCreationDataModelProvider.java
deleted file mode 100644
index 47ae08e..0000000
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ComponentCreationDataModelProvider.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.componentcore.internal.operation;
-
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
-import org.eclipse.wst.common.componentcore.ComponentCore;
-import org.eclipse.wst.common.componentcore.datamodel.properties.IComponentCreationDataModelProperties;
-import org.eclipse.wst.common.componentcore.datamodel.properties.IFlexibleProjectCreationDataModelProperties;
-import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelProvider;
-import org.eclipse.wst.common.frameworks.datamodel.DataModelEvent;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonMessages;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
-
-/**
- * This dataModel is a common super class used for creation of WTP Components.
- * 
- * This class (and all its fields and methods) is likely to change during the WTP 1.0 milestones as
- * the new project structures are adopted. Use at your own risk.
- * 
- * @plannedfor WTP 1.0
- */
-public abstract class ComponentCreationDataModelProvider extends AbstractDataModelProvider implements IComponentCreationDataModelProperties {
-
-	// protected boolean isProjMultiComponents = false;
-
-	public void init() {
-		super.init();
-		// isProjMultiComponents =
-		// FlexibleJavaProjectPreferenceUtil.getMultipleModulesPerProjectProp();
-		// model.getBooleanProperty(SUPPORT_MULTIPLE_MODULES) =
-		// model.getBooleanProperty(SUPPORT_MULTIPLE_MODULES);
-		initProjectCreationModel();
-	}
-
-	public Set getPropertyNames() {
-		Set propertyNames = super.getPropertyNames();
-		propertyNames.add(PROJECT_NAME);
-		propertyNames.add(NESTED_PROJECT_CREATION_DM);
-		propertyNames.add(COMPONENT_NAME);
-		propertyNames.add(COMPONENT_NAME);
-		propertyNames.add(LOCATION);
-		propertyNames.add(COMPONENT_DEPLOY_NAME);
-		propertyNames.add(CREATE_DEFAULT_FILES);
-		propertyNames.add(COMPONENT);
-		return propertyNames;
-	}
-
-	public void propertyChanged(DataModelEvent event) {
-		if (event.getFlag() == DataModelEvent.VALUE_CHG) {
-			event.getDataModel();
-		}
-	}
-
-	public boolean propertySet(String propertyName, Object propertyValue) {
-		if (COMPONENT_NAME.equals(propertyName)) {
-			model.setProperty(COMPONENT_DEPLOY_NAME, propertyValue);
-			model.setProperty(PROJECT_NAME, propertyValue);
-		} else if (COMPONENT_DEPLOY_NAME.equals(propertyName)) {
-			model.setProperty(COMPONENT_DEPLOY_NAME, propertyValue);
-		} else if (COMPONENT.equals(propertyName)) {
-			throw new RuntimeException(propertyName + " should not be set.");
-		} else if (PROJECT_NAME.equals(propertyName)) {
-			// if(!FlexibleJavaProjectPreferenceUtil.getMultipleModulesPerProjectProp()){
-			// model.notifyPropertyChange(PROJECT_NAME, IDataModel.VALUE_CHG);
-			// set the property in nested FlexibleJavaProjectCreationDataModelProvider
-			IDataModel dm = model.getNestedModel(NESTED_PROJECT_CREATION_DM);
-			dm.setProperty(IFlexibleProjectCreationDataModelProperties.PROJECT_NAME, propertyValue);
-			return true;
-			// }
-		}
-		return true;
-	}
-
-	public Object getDefaultProperty(String propertyName) {
-		if (propertyName.equals(CREATE_DEFAULT_FILES)) {
-			return Boolean.TRUE;
-		} else if (propertyName.equals(COMPONENT)) {
-			String projectName = getStringProperty(PROJECT_NAME);
-			IProject project = ProjectUtilities.getProject(projectName);
-			return ComponentCore.createComponent(project);
-		}
-		return super.getDefaultProperty(propertyName);
-	}
-
-	public IStatus validate(String propertyName) {
-		if (propertyName.equals(COMPONENT_NAME)) {
-			IStatus status = OK_STATUS;
-			String moduleName = model.getStringProperty(COMPONENT_NAME);
-			if (status.isOK()) {
-				if (moduleName.indexOf("#") != -1 || moduleName.indexOf("/") != -1) { //$NON-NLS-1$
-					String errorMessage = WTPCommonPlugin.getResourceString(WTPCommonMessages.ERR_INVALID_CHARS); //$NON-NLS-1$
-					return WTPCommonPlugin.createErrorStatus(errorMessage);
-				} else if (moduleName == null || moduleName.equals("")) { //$NON-NLS-1$
-					String errorMessage = WTPCommonPlugin.getResourceString(WTPCommonMessages.ERR_EMPTY_MODULE_NAME);
-					return WTPCommonPlugin.createErrorStatus(errorMessage);
-				} else
-					return OK_STATUS;
-			} else
-				return status;
-		} else if (propertyName.equals(PROJECT_NAME)) {
-			IStatus status = OK_STATUS;
-
-				String projectName = model.getStringProperty(PROJECT_NAME);
-				if (projectName == null || projectName.length() == 0) {
-					String errorMessage = WTPCommonPlugin.getResourceString(WTPCommonMessages.PROJECT_NAME_EMPTY);
-					status = WTPCommonPlugin.createErrorStatus(errorMessage);
-				}
-				if (status.isOK()) {
-					status = validateProjectName(projectName);
-					if (status.isOK()) {
-						IProject proj = ProjectUtilities.getProject(projectName);
-						if (proj.exists()) {
-							String errorMessage = WTPCommonPlugin.getResourceString(WTPCommonMessages.PROJECT_EXISTS_ERROR);
-							status = WTPCommonPlugin.createErrorStatus(errorMessage);
-						}
-					}					
-				}
-
-			return status;
-		} else if (propertyName.equals(COMPONENT_DEPLOY_NAME)) {
-			return OK_STATUS;
-		} else if (propertyName.equals(CREATE_DEFAULT_FILES)) {
-			return OK_STATUS;
-		}
-		return OK_STATUS;
-	}
-
-	protected IStatus validateProjectName(String projectName) {
-		IWorkspace workspace = ResourcesPlugin.getWorkspace();
-		IStatus status = workspace.validateName(projectName, IResource.PROJECT);
-		if (!status.isOK())
-			return status;
-
-		if (ProjectUtilities.getProject(projectName).exists())
-			return WTPCommonPlugin.createErrorStatus(WTPCommonPlugin.getResourceString(WTPCommonMessages.PROJECT_EXISTS_ERROR, new Object[]{projectName}));
-
-		if (projectName.indexOf("#") != -1) { //$NON-NLS-1$
-			// String errorMessage = J2EECreationResourceHandler.getString("InvalidCharsError");
-			// //$NON-NLS-1$
-			String errorMessage = "InvalidCharsError"; //$NON-NLS-1$
-			return WTPCommonPlugin.createErrorStatus(errorMessage);
-		}
-		return OK_STATUS;
-	}
-
-	// protected static String[] getServerVersions(String moduleID, IRuntimeType type) {
-	// List list = new ArrayList();
-	// if (type == null)
-	// return null;
-	// IModuleType[] moduleTypes = type.getModuleTypes();
-	// if (moduleTypes != null) {
-	// int size = moduleTypes.length;
-	// for (int i = 0; i < size; i++) {
-	// IModuleType moduleType = moduleTypes[i];
-	// if (matches(moduleType.getId(), moduleID)) {
-	// list.add(moduleType.getVersion());
-	// }
-	//
-	// }
-	// }
-	// String[] versions = null;
-	// if (!list.isEmpty()) {
-	// versions = new String[list.size()];
-	// list.toArray(versions);
-	// }
-	// return versions;
-	// }
-
-//	protected static boolean matches(String serverTypeID, String j2eeModuleID) {
-//
-//		if (serverTypeID.equals("j2ee")) {
-//			if (j2eeModuleID.equals(IModuleConstants.JST_WEB_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_EJB_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_EAR_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_APPCLIENT_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_CONNECTOR_MODULE)) {
-//				return true;
-//			}
-//		} else if (serverTypeID.equals("j2ee.*")) {
-//			if (j2eeModuleID.equals(IModuleConstants.JST_WEB_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_EJB_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_EAR_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_APPCLIENT_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_CONNECTOR_MODULE)) {
-//				return true;
-//			}
-//		} else if (serverTypeID.equals("j2ee.web")) {//$NON-NLS-1$
-//			if (j2eeModuleID.equals(IModuleConstants.JST_WEB_MODULE)) {
-//				return true;
-//			}
-//		} else if (serverTypeID.equals("j2ee.ejb")) {//$NON-NLS-1$
-//			if (j2eeModuleID.equals(IModuleConstants.JST_EJB_MODULE)) {
-//				return true;
-//			}
-//		} else if (serverTypeID.equals("j2ee.ear")) {//$NON-NLS-1$
-//			if (j2eeModuleID.equals(IModuleConstants.JST_EAR_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_APPCLIENT_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_CONNECTOR_MODULE)) {
-//				return true;
-//			}
-//		}
-//		return false;
-//	}
-
-	// private static boolean matches(String a, String b) {
-	// if (a == null || b == null || "*".equals(a) || "*".equals(b) || a.startsWith(b) ||
-	// b.startsWith(a)) //$NON-NLS-1$ //$NON-NLS-2$
-	// return true;
-	// return false;
-	// }
-
-
-	protected String getComponentName() {
-		return model.getStringProperty(COMPONENT_NAME);
-	}
-
-	protected String getComponentDeployName() {
-		return model.getStringProperty(COMPONENT_DEPLOY_NAME);
-	}
-
-	protected abstract void initProjectCreationModel();
-
-	protected abstract EClass getComponentType();
-
-	protected abstract String getComponentExtension();
-
-	protected abstract List getProperties();
-
-	protected abstract Integer getDefaultComponentVersion();
-}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ComponentCreationOperation.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ComponentCreationOperation.java
deleted file mode 100644
index dc43f45..0000000
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ComponentCreationOperation.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.wst.common.componentcore.internal.operation;
-
-import java.util.List;
-
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.componentcore.datamodel.properties.IComponentCreationDataModelProperties;
-import org.eclipse.wst.common.componentcore.datamodel.properties.IFlexibleProjectCreationDataModelProperties;
-import org.eclipse.wst.common.componentcore.internal.StructureEdit;
-import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-
-
-public abstract class ComponentCreationOperation extends AbstractDataModelOperation implements IComponentCreationDataModelProperties {
-
-    public ComponentCreationOperation(IDataModel model) {
-        super(model);
-    }
-
-    public IStatus execute(IProgressMonitor monitor, IAdaptable info) {
-        createProjectIfNeeded(monitor, info);
-		StructureEdit edit = null;
-        try {
-			edit = StructureEdit.getStructureEditForWrite(getProject());
-
-            createAndLinkJ2EEComponentsForSingleComponent();
-        }
-        catch (CoreException e) {
-            Logger.getLogger().log(e);
-        }
-		finally {
-			if (edit != null) {
-				edit.saveIfNecessary(monitor);
-				edit.dispose();
-			}
-			
-		}
-        
-        return OK_STATUS;
-    }
-
-    private void createProjectIfNeeded(IProgressMonitor monitor, IAdaptable info) {
-        Object dm = model.getNestedModel(NESTED_PROJECT_CREATION_DM);
-        if(dm == null) return;
-        String projName = ((IDataModel)dm).getStringProperty(IFlexibleProjectCreationDataModelProperties.PROJECT_NAME);
-           
-        IProject proj = ProjectUtilities.getProject(projName);
-        if(projName == null || projName.equals("") || proj.exists()) return;
-        IDataModelOperation op = ((IDataModel)dm).getDefaultOperation();
-        try {
-            op.execute(monitor, info);
-        } catch (ExecutionException e) {
-            e.printStackTrace();
-        }
-    }
-
-
-    protected abstract void createAndLinkJ2EEComponentsForMultipleComponents() throws CoreException;
-    
-    protected abstract void createAndLinkJ2EEComponentsForSingleComponent() throws CoreException;
-
-    protected String getComponentName() {
-        return model.getStringProperty(COMPONENT_NAME);
-    }
-
-    public String getComponentDeployName() {
-        return model.getStringProperty(COMPONENT_DEPLOY_NAME);
-    }
-
-    protected abstract String getVersion();
-
-    protected abstract List getProperties();
-
-	public IProject getProject() {
-	    String projName = model.getStringProperty(PROJECT_NAME);
-	    return ProjectUtilities.getProject(projName);
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/CreateReferenceComponentsDataModelProvider.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/CreateReferenceComponentsDataModelProvider.java
index 67429ee..ff09903 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/CreateReferenceComponentsDataModelProvider.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/CreateReferenceComponentsDataModelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
  * 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
@@ -11,6 +11,8 @@
 package org.eclipse.wst.common.componentcore.internal.operation;
 
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Set;
 
 import org.eclipse.wst.common.componentcore.datamodel.properties.ICreateReferenceComponentsDataModelProperties;
@@ -21,7 +23,6 @@
 
 	public CreateReferenceComponentsDataModelProvider() {
 		super();
-
 	}
 
 	public Set getPropertyNames() {
@@ -29,19 +30,25 @@
 		propertyNames.add(SOURCE_COMPONENT);
 		propertyNames.add(TARGET_COMPONENT_LIST);
 		propertyNames.add(TARGET_COMPONENTS_DEPLOY_PATH);
+		propertyNames.add(TARGET_COMPONENTS_TO_URI_MAP);
 		return propertyNames;
 	}
 
-
 	public IDataModelOperation getDefaultOperation() {
 		return new CreateReferenceComponentsOp(model);
 	}
 
 	public Object getDefaultProperty(String propertyName) {
+		if (TARGET_COMPONENTS_TO_URI_MAP.equals(propertyName)) {
+			Map map = new HashMap();
+			setProperty(propertyName, map);
+			return map;
+		}
+		
 		if (propertyName.equals(TARGET_COMPONENT_LIST))
 			return new ArrayList();
 		else if (propertyName.equals(TARGET_COMPONENTS_DEPLOY_PATH)){
-			return "/";
+			return "/"; //$NON-NLS-1$
 		}
 		return super.getDefaultProperty(propertyName);
 	}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/CreateReferenceComponentsOp.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/CreateReferenceComponentsOp.java
index 25210f1..6b159fd 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/CreateReferenceComponentsOp.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/CreateReferenceComponentsOp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
  * 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
@@ -12,21 +12,29 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jem.util.UIContextDetermination;
 import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
 import org.eclipse.wst.common.componentcore.ComponentCore;
 import org.eclipse.wst.common.componentcore.datamodel.properties.ICreateReferenceComponentsDataModelProperties;
+import org.eclipse.wst.common.componentcore.internal.StructureEdit;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+import org.eclipse.wst.common.internal.emfworkbench.validateedit.IValidateEditContext;
 
 public class CreateReferenceComponentsOp extends AbstractDataModelOperation {
 
@@ -34,54 +42,112 @@
 	public CreateReferenceComponentsOp(IDataModel model) {
 		super(model);
 	}
-	
+
 	public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		if (!validateEdit().isOK())
+			return Status.CANCEL_STATUS;
 		addReferencedComponents(monitor);
 		addProjectReferences();
 		return OK_STATUS;
 	}
-	protected void addProjectReferences() {
+	
+	/**
+	 * Validate edit for resource state
+	 */
+	protected IStatus validateEdit() {
+		IStatus status = OK_STATUS;
+		IValidateEditContext validator = (IValidateEditContext) UIContextDetermination.createInstance(IValidateEditContext.CLASS_KEY);
+		IVirtualComponent sourceComp = (IVirtualComponent) model.getProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT);
+		IProject project = sourceComp.getProject();
+
+		if (status.isOK()) {
+			StructureEdit sEdit = null;
+			try {
+				sEdit = StructureEdit.getStructureEditForWrite(project);
+				status = validator.validateState(sEdit.getModuleStructuralModel());
+			} finally {
+				if (sEdit !=null)
+					sEdit.dispose();
+			}
+		}
 		
+		IFile [] files = new IFile[1];
+		files[0] = project.getFile(ProjectUtilities.DOT_PROJECT);
+		status = ResourcesPlugin.getWorkspace().validateEdit(files, null);
+		return status;
+	}
+
+	protected void addProjectReferences() {
+
 		IVirtualComponent sourceComp = (IVirtualComponent) model.getProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT);
 		List modList = (List) model.getProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_LIST);
 		List targetprojectList = new ArrayList();
-		for( int i=0; i< modList.size(); i++){
+		for (int i = 0; i < modList.size(); i++) {
 			IVirtualComponent IVirtualComponent = (IVirtualComponent) modList.get(i);
 			IProject targetProject = IVirtualComponent.getProject();
 			targetprojectList.add(targetProject);
 		}
 		try {
-			ProjectUtilities.addReferenceProjects(sourceComp.getProject(),targetprojectList);
+			ProjectUtilities.addReferenceProjects(sourceComp.getProject(), targetprojectList);
 		} catch (CoreException e) {
 			e.printStackTrace();
 		}
-		
+
 	}
+
 	protected void addReferencedComponents(IProgressMonitor monitor) {
-		
 		IVirtualComponent sourceComp = (IVirtualComponent) model.getProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT);
-		List vlist = new ArrayList();		
-        List modList = (List) model.getProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_LIST);
+		List vlist = new ArrayList();
+		List modList = (List) model.getProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_LIST);
+		String deployPathStr = model.getStringProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_DEPLOY_PATH);
+		IPath deployPath = null;
+		if (deployPathStr != null && deployPathStr.length() > 0){
+			deployPath = new Path(deployPathStr);
+		}
 		for (int i = 0; i < modList.size(); i++) {
 			IVirtualComponent comp = (IVirtualComponent) modList.get(i);
-			if (!srcComponentContainsReference(sourceComp, comp)) {
+			if (!srcComponentContainsReference(sourceComp, comp, deployPath)) {
 				IVirtualReference ref = ComponentCore.createReference(sourceComp, comp);
-				String deployPath = model.getStringProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_DEPLOY_PATH);
-				if(deployPath != null && deployPath.length() > 0)
-					ref.setRuntimePath(new Path(deployPath));
+				if(deployPath != null){
+					ref.setRuntimePath(new Path(deployPathStr));
+				}
+
+				String archiveName = getArchiveName(comp);
+				if (archiveName.length() > 0) {
+					ref.setArchiveName(archiveName);
+				}
 				vlist.add(ref);
 			}
 		}
-		
+
 		IVirtualReference[] refs = (IVirtualReference[]) vlist.toArray(new IVirtualReference[vlist.size()]);
 		sourceComp.addReferences(refs);
 	}
 
-	private boolean srcComponentContainsReference(IVirtualComponent sourceComp, IVirtualComponent comp) {
-		IVirtualReference[] existingReferences = sourceComp.getReferences();
-		for (int i = 0; i < existingReferences.length; i++) {
-			if(existingReferences[i].getReferencedComponent().getProject().equals(comp.getProject())){
-				return true;
+	protected String getArchiveName(IVirtualComponent comp) {
+		Map map = (Map) model.getProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_TO_URI_MAP);
+		String uri = (String) map.get(comp);
+		return uri == null ? "" : uri; //$NON-NLS-1$
+	}
+
+
+	private boolean srcComponentContainsReference(IVirtualComponent sourceComp, IVirtualComponent comp, IPath deployPath) {
+		if ((sourceComp != null && sourceComp.getProject() != null) && (comp != null && comp.getProject() != null)) {
+			IVirtualReference[] existingReferences = sourceComp.getReferences();
+			IVirtualComponent referencedComponent = null;
+			if (existingReferences != null) {
+				for (int i = 0; i < existingReferences.length; i++) {
+					IVirtualReference ref = existingReferences[i];
+					if(ref != null){
+						//also check to see if the deploy path is the same (remember that it can be null)
+						if((ref.getRuntimePath() == null && deployPath != null) || ref.getRuntimePath().equals(deployPath)){
+							referencedComponent = ref.getReferencedComponent();	
+							if (referencedComponent != null && referencedComponent.equals(comp) ){ 
+								return true;
+							}	
+						}
+					}
+				}
 			}
 		}
 		return false;
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/FacetProjectCreationOperation.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/FacetProjectCreationOperation.java
index 2421d4a..abdcd14 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/FacetProjectCreationOperation.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/FacetProjectCreationOperation.java
@@ -1,15 +1,16 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.wst.common.componentcore.internal.operation;
 
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
@@ -31,13 +32,17 @@
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
 import org.eclipse.wst.common.frameworks.internal.operations.IProjectCreationPropertiesNew;
 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.IProjectFacetVersion;
 import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject.Action;
 import org.eclipse.wst.common.project.facet.core.runtime.IRuntime;
 
 public class FacetProjectCreationOperation extends AbstractDataModelOperation {
 
+	protected boolean runtimeAdded = false;
+
 	public FacetProjectCreationOperation() {
 		super();
 	}
@@ -70,6 +75,10 @@
 					}
 				}
 			}
+			Map actionsMap = (Map) model.getProperty(IFacetProjectCreationDataModelProperties.FACET_ACTION_MAP);
+			for (Iterator iterator = actionsMap.values().iterator(); iterator.hasNext();) {
+				actions.add(iterator.next());
+			}
 			if (!actions.isEmpty()) {
 				facetProj.modify(actions, monitor);
 			}
@@ -91,10 +100,9 @@
 			if (!fixedFacets.isEmpty()) {
 				facetProj.setFixedProjectFacets(fixedFacets);
 			}
-			IRuntime runtime = (IRuntime) model.getProperty(IFacetProjectCreationDataModelProperties.FACET_RUNTIME);
-			IRuntime existingRuntime = facetProj.getRuntime();
-			if (runtime != null && (existingRuntime == null || !runtime.equals(existingRuntime))) {
-				facetProj.setRuntime(runtime, null);
+			if (runtimeAdded) {
+				IRuntime runtime = (IRuntime) model.getProperty(IFacetProjectCreationDataModelProperties.FACET_RUNTIME);
+				addDefaultFactets(facetProj, runtime);
 			}
 
 		} catch (CoreException e) {
@@ -106,6 +114,23 @@
 		return OK_STATUS;
 	}
 
+	private static void addDefaultFacets(IFacetedProject facetProj, Set defaultFacets) {
+		Set actions = new HashSet();
+		for (Iterator iter = defaultFacets.iterator(); iter.hasNext();) {
+			IProjectFacetVersion facetVersion = (IProjectFacetVersion) iter.next();
+			if (!facetProj.hasProjectFacet(facetVersion.getProjectFacet())) {
+				actions.add(new IFacetedProject.Action(Action.Type.INSTALL, facetVersion, null));
+			}
+		}
+
+		try {
+			if (!actions.isEmpty())
+				facetProj.modify(actions, null);
+		} catch (CoreException e) {
+			Logger.getLogger().logError(e);
+		}
+	}
+
 	public IFacetedProject createProject(IProgressMonitor monitor) throws CoreException {
 		IProject project = ProjectUtilities.getProject((String) model.getProperty(IFacetProjectCreationDataModelProperties.FACET_PROJECT_NAME));
 		IFacetedProject facetProj = null;
@@ -116,9 +141,23 @@
 			IPath locationPath = null == location ? null : new Path(location);
 			facetProj = ProjectFacetsManager.create(model.getStringProperty(IFacetProjectCreationDataModelProperties.FACET_PROJECT_NAME), locationPath, monitor);
 		}
+		IRuntime runtime = (IRuntime) model.getProperty(IFacetProjectCreationDataModelProperties.FACET_RUNTIME);
+		IRuntime existingRuntime = facetProj.getPrimaryRuntime();
+		if (runtime != null && (existingRuntime == null || !runtime.equals(existingRuntime))) {
+			facetProj.setTargetedRuntimes(Collections.singleton(runtime), null);
+			runtimeAdded = true;
+		}
 		return facetProj;
 	}
-
-
+	
+	public static void addDefaultFactets(IFacetedProject facetProj, IRuntime runtime) throws ExecutionException {
+		
+			if (runtime != null) {
+				final IFacetedProjectWorkingCopy fpjwc = facetProj.createWorkingCopy();
+				Set<IProjectFacetVersion> presetFacets = fpjwc.getDefaultConfiguration().getProjectFacets();
+				addDefaultFacets(facetProj, presetFacets);
+			}
+		
+	}
 
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/FlexibleProjectCreationOperation.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/FlexibleProjectCreationOperation.java
deleted file mode 100644
index f4686bd..0000000
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/FlexibleProjectCreationOperation.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.componentcore.internal.operation;
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.wst.common.componentcore.datamodel.properties.IFlexibleProjectCreationDataModelProperties;
-import org.eclipse.wst.common.componentcore.internal.ProjectComponents;
-import org.eclipse.wst.common.componentcore.internal.StructureEdit;
-import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
-import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-import org.eclipse.wst.common.frameworks.internal.WTPProjectUtilities;
-
-public class FlexibleProjectCreationOperation extends AbstractDataModelOperation {
-
-    public FlexibleProjectCreationOperation(IDataModel model) {
-        super(model);
-        // TODO Auto-generated constructor stub
-    }
-
-	public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-        try {
-			createProject(monitor);
-		    WTPProjectUtilities.addNatureToProjectLast(getProject(), IModuleConstants.MODULE_NATURE_ID);
-		} catch (CoreException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (InvocationTargetException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (InterruptedException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-        createInitialWTPModulesFile();
-		return OK_STATUS;
-	}
-
-    private void createProject(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException, ExecutionException {
-        IDataModel projModel = model.getNestedModel(IFlexibleProjectCreationDataModelProperties.NESTED_MODEL_PROJECT_CREATION);
-        IDataModelOperation op = projModel.getDefaultOperation();
-        op.execute(monitor, null);
-    }
-    
-    private void createInitialWTPModulesFile() {
-    	StructureEdit moduleCore = null;
-		try {
-			IProject containingProject = getProject();
-			moduleCore = StructureEdit.getStructureEditForWrite(containingProject);
-			moduleCore.prepareProjectComponentsIfNecessary(); 
-			ProjectComponents projectModules = moduleCore.getComponentModelRoot();
-			moduleCore.saveIfNecessary(null); 
-		} finally {
-			if(moduleCore != null)
-				moduleCore.dispose();
-		}     
-    }
-    
-    protected IProject getProject() {
-        String name = model.getStringProperty(IFlexibleProjectCreationDataModelProperties.PROJECT_NAME);
-        if (name != null && name.length() > 0)
-            return ResourcesPlugin.getWorkspace().getRoot().getProject(name);
-        return null;
-    }
-
-	public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		// TODO Auto-generated method stub
-		return null;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ProjectMigratorDataModelOperation.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ProjectMigratorDataModelOperation.java
index 4a5b167..d507389 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ProjectMigratorDataModelOperation.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ProjectMigratorDataModelOperation.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -21,7 +21,6 @@
 import org.eclipse.wst.common.componentcore.internal.ProjectMigratorRegistry;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.project.facet.core.IFacetedProject;
 
 public class ProjectMigratorDataModelOperation extends AbstractDataModelOperation {
 
@@ -30,7 +29,6 @@
 	}
 	
 	public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		IFacetedProject facetProj;
 		try {
 			IProject proj = ProjectUtilities.getProject(model.getStringProperty(IProjectMigratorDataModelProperties.PROJECT_NAME));
 			IComponentProjectMigrator[] migrators = ProjectMigratorRegistry.getInstance().getProjectMigrators();
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/RemoveReferenceComponentOperation.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/RemoveReferenceComponentOperation.java
index 29944b3..bb1f2c3 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/RemoveReferenceComponentOperation.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/RemoveReferenceComponentOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
  * 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
@@ -11,7 +11,6 @@
 package org.eclipse.wst.common.componentcore.internal.operation;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import org.eclipse.core.commands.ExecutionException;
@@ -23,7 +22,9 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
+import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.common.componentcore.datamodel.properties.ICreateReferenceComponentsDataModelProperties;
+import org.eclipse.wst.common.componentcore.internal.resources.VirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
@@ -47,57 +48,74 @@
 	protected void removeReferencedComponents(IProgressMonitor monitor) {
 		
 		IVirtualComponent sourceComp = (IVirtualComponent) model.getProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT);
-		if (!sourceComp.getProject().isAccessible()) return;
+		if (sourceComp == null || !sourceComp.getProject().isAccessible() || sourceComp.isBinary()) return;
 		
-        List modList = (List) model.getProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_LIST);
+		IVirtualReference [] existingReferencesArray = sourceComp.getReferences();
+		if(existingReferencesArray == null || existingReferencesArray.length == 0){
+			return;
+		}
+		
+		List existingReferences = new ArrayList();
+		for(int i=0;i<existingReferencesArray.length; i++){
+			existingReferences.add(existingReferencesArray[i]);
+		}
+		
+		String deployPath = model.getStringProperty( ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_DEPLOY_PATH );
+		IPath path = new Path( deployPath );
+		
+		List modList = (List) model.getProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_LIST);
     
 		List targetprojectList = new ArrayList();
 
-		for (int i = 0; i < modList.size(); i++) {
+		for (int i = 0; i < modList.size() && !existingReferences.isEmpty(); i++) {
 			IVirtualComponent comp = (IVirtualComponent) modList.get(i);
-			IVirtualReference ref = sourceComp.getReference(comp.getName());
-			if( ref != null && ref.getReferencedComponent() != null && ref.getReferencedComponent().isBinary()){
+			if (comp==null )
+				continue;
+
+			IVirtualReference ref = findMatchingReference(existingReferences, comp, path);
+			//if a ref was found matching the specified deployPath, then remove it
+			if(ref != null){
 				removeRefereneceInComponent(sourceComp, ref);
-			}else{
-				if (Arrays.asList(comp.getReferencingComponents()).contains(sourceComp)) {
-					
-					String deployPath = model.getStringProperty( ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_DEPLOY_PATH );
-					IPath path = new Path( deployPath );
-					
-					if( ref.getRuntimePath() != null && path != null && ref.getRuntimePath().equals( path )){
-						removeRefereneceInComponent(sourceComp,sourceComp.getReference(comp.getName()));
-						IProject targetProject = comp.getProject();
-						targetprojectList.add(targetProject);
-					}
-				}					
+				existingReferences.remove(ref);
+				//after removing the ref, check to see if it was the last ref removed to that component
+				//and if it was, then also remove the project reference
+				ref = findMatchingReference(existingReferences, comp);
+				if(ref == null){
+					IProject targetProject = comp.getProject();
+					targetprojectList.add(targetProject);
+				}
 			}
 		}
 		
 		try {
 			ProjectUtilities.removeReferenceProjects(sourceComp.getProject(),targetprojectList);
 		} catch (CoreException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			Logger.getLogger().logError(e);
 		}		
 		
 	}
 
-	protected void removeRefereneceInComponent(IVirtualComponent component, IVirtualReference reference) {
-		List refList = new ArrayList();
-		IVirtualReference[] refArray = component.getReferences();
-		for (int i = 0; i < refArray.length; i++) {
-			if (refArray[i].getReferencedComponent() != null && !refArray[i].getReferencedComponent().equals(reference.getReferencedComponent()))
-				refList.add(refArray[i]);
+	private IVirtualReference findMatchingReference(List existingReferences, IVirtualComponent comp, IPath path) {
+		for(int i=0;i<existingReferences.size(); i++){
+			IVirtualReference ref = (IVirtualReference)existingReferences.get(i);
+			IVirtualComponent c = ref.getReferencedComponent();
+			if(c != null && c.getName().equals(comp.getName())){
+				if(path == null){
+					return ref;
+				} else if(path.equals(ref.getRuntimePath())){
+					return ref;
+				}
+			}
 		}
-		component.setReferences((IVirtualReference[]) refList.toArray(new IVirtualReference[refList.size()]));
-	}
-
-	public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
 		return null;
 	}
 
-	public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		return null;
+	private IVirtualReference findMatchingReference(List existingReferences, IVirtualComponent comp) {
+		return findMatchingReference(existingReferences, comp, null);
+	}
+
+	protected void removeRefereneceInComponent(IVirtualComponent component, IVirtualReference reference) {
+		((VirtualComponent)component.getComponent()).removeReference(reference);
 	}
 
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/ResourceTimestampMappings.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/ResourceTimestampMappings.java
new file mode 100644
index 0000000..47710ab
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/ResourceTimestampMappings.java
@@ -0,0 +1,279 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.componentcore.internal.resources;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+
+
+/**
+ * Maps resources to cached data and remembers when the data was cached based on a timestamp
+ * signature of a given resource.
+ * 
+ */
+public class ResourceTimestampMappings {
+
+	private static final IPath COMPONENT_MANIFEST_PATH = new Path(".settings/org.eclipse.wst.common.component");
+	private static final IPath FACET_CONFIG_PATH = new Path(".settings/org.eclipse.wst.common.project.facet.core.xml");
+
+	private static final Object NO_DATA = new Object();
+	private static final Object ERROR = new Object();
+
+	private final Map timestamps = new HashMap();
+	private final Map data = new HashMap();
+
+
+	/**
+	 * Record a timestamp signature for the given resource.
+	 * <p>
+	 * Clients may use {@link #hasChanged(IResource)} to determine if the resource has changed since
+	 * it was recorded.
+	 * </p>
+	 * 
+	 * @param resource
+	 *            The resource that was processed.
+	 * @return True if the recording was successfull. The recording may fail if the resource does
+	 *         not exist.
+	 * 
+	 * @see #hasChanged(IResource)
+	 */
+	public synchronized boolean mark(IResource resource) {
+		return mark(resource, NO_DATA);
+	}
+
+	/**
+	 * Cache the data that was determined when processing the resource. The a timestamp signature
+	 * will be recorded for the resource as well.
+	 * 
+	 * <p>
+	 * Clients may use {@link #hasChanged(IResource)} to determine if the cached data should be
+	 * replaced.
+	 * </p>
+	 * 
+	 * @param resource
+	 *            The resource that was processed.
+	 * @param cachedData
+	 *            The data that was determined when the Resource was processed.
+	 * 
+	 * @return True if the recording was successfull. The recording may fail if the resource does
+	 *         not exist.
+	 * 
+	 * 
+	 * @see #hasChanged(IResource)
+	 * @see #hasCacheData(IResource)
+	 */
+	public synchronized boolean mark(IResource resource, Object cachedData) {
+
+		if (resource.getModificationStamp() != IResource.NULL_STAMP) {
+			if (timestamps.containsKey(resource)) {
+				TimestampSignature signature = (TimestampSignature) timestamps.get(resource);
+				signature.update(resource);
+			} else {
+				timestamps.put(resource, createTimestampSignature(resource));
+			}
+			data.put(resource, cachedData);
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * Note that an error occurred when processing this resource.
+	 * 
+	 * @param resource
+	 *            The resource that had some sort of error while processing.
+	 * @return True if the error was recorded. The error may not be recorded if the resource does
+	 *         not exist.
+	 * @see #hasCacheError(IResource)
+	 */
+	public synchronized boolean markError(IResource resource) {
+
+		if (resource.getModificationStamp() != IResource.NULL_STAMP) {
+			if (timestamps.containsKey(resource)) {
+				TimestampSignature signature = (TimestampSignature) timestamps.get(resource);
+				signature.update(resource);
+			} else {
+				timestamps.put(resource, createTimestampSignature(resource));
+			}
+			data.put(resource, ERROR);
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * 
+	 * @param resource
+	 *            The resource that was or is about to be processed.
+	 * @return True if the given resource has changed in a noticeable way since it was marked.
+	 * 
+	 * @see #mark(IResource)
+	 * @see #mark(IResource, Object)
+	 * @see #markError(IResource)
+	 */
+	public boolean hasChanged(IResource resource) {
+		TimestampSignature signature = (TimestampSignature) timestamps.get(resource);
+		return signature == null || signature.hasChanged(resource);
+	}
+
+	/**
+	 * 
+	 * @param resource
+	 *            The resource that was or is about to be processed.
+	 * @return True if there is any data cached for the given resource.
+	 * 
+	 * @see #mark(IResource)
+	 * @see #mark(IResource, Object)
+	 * @see #markError(IResource)
+	 */
+	public boolean hasCacheData(IResource resource) {
+		Object datum = data.get(resource);
+		return datum != null && datum != NO_DATA;
+
+	}
+
+
+	/**
+	 * 
+	 * @param resource
+	 *            The resource that was or is about to be processed.
+	 * @return True if there is any data cached for the given resource.
+	 * 
+	 * @see #mark(IResource)
+	 * @see #mark(IResource, Object)
+	 * @see #markError(IResource)
+	 */
+	public boolean hasCacheError(IResource resource) {
+		return data.get(resource) == ERROR;
+	}
+
+	public Object getData(IResource resource) {
+		Object datum = data.get(resource);
+		if (datum != NO_DATA)
+			return datum;
+		return null;
+	}
+
+
+	private TimestampSignature createTimestampSignature(IResource resource) {
+		switch (resource.getType()) {
+			case IResource.PROJECT :
+				return new ProjectTimestamp((IProject) resource);
+			default :
+				return new SimpleResourceTimestamp(resource);
+		}
+	}
+
+	/**
+	 * Provides a point in time signature of a Resource to determine whether that resource has
+	 * changed in a meaningful way since the time this signature was created or last updated.
+	 * 
+	 */
+	public interface TimestampSignature {
+
+		/**
+		 * 
+		 * @param resource
+		 *            A resource related to this signature
+		 * @return True if the current resource is different from this signature in a meaningful way
+		 */
+		boolean hasChanged(IResource resource);
+
+		/**
+		 * 
+		 * @param resource
+		 *            Update the signature details to the given resource's signature.
+		 */
+		void update(IResource resource);
+
+	}
+
+	/**
+	 * Provides a signature based on the modificationStamp of a resource.
+	 */
+	public class SimpleResourceTimestamp implements TimestampSignature {
+		private long timestamp = 0;
+
+		public SimpleResourceTimestamp(IResource resource) {
+			update(resource);
+		}
+
+		public boolean hasChanged(IResource resource) {
+			return timestamp != resource.getModificationStamp();
+		}
+
+		public void update(IResource resource) {
+			timestamp = resource.getModificationStamp();
+		}
+	}
+
+	/**
+	 * Provides a signature for a project based on the modificationStamp of the (1) project, (2) the
+	 * component manifest, and (3) the facet configuration
+	 */
+	public class ProjectTimestamp implements TimestampSignature {
+
+		private long projectTimestamp = 0;
+		private long componentManifestTimestamp = 0;
+		private long facetConfigTimestamp = 0;
+
+		public ProjectTimestamp(IProject project) {
+			update(project);
+		}
+
+		public boolean hasChanged(IResource resource) {
+			if (resource.getType() == IResource.PROJECT) {
+				IProject project = (IProject) resource;
+				if (projectTimestamp != project.getModificationStamp())
+					return true;
+
+				IFile file = project.getFile(COMPONENT_MANIFEST_PATH);
+				if (!file.exists() || componentManifestTimestamp != file.getModificationStamp())
+					return true;
+
+				file = project.getFile(FACET_CONFIG_PATH);
+				if (!file.exists() || facetConfigTimestamp != file.getModificationStamp())
+					return true;
+
+				return false;
+			}
+			return true;
+
+		}
+
+		public void update(IResource resource) {
+
+			if (resource instanceof IProject) {
+
+				IProject project = (IProject) resource;
+
+				projectTimestamp = project.getModificationStamp();
+
+				IFile file = project.getFile(COMPONENT_MANIFEST_PATH);
+				componentManifestTimestamp = file.getModificationStamp();
+
+				file = project.getFile(FACET_CONFIG_PATH);
+				facetConfigTimestamp = file.getModificationStamp();
+
+			} else {
+				projectTimestamp = componentManifestTimestamp = facetConfigTimestamp = IResource.NULL_STAMP;
+			}
+
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualArchiveComponent.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualArchiveComponent.java
index 5bf817e..b0b6d9b 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualArchiveComponent.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualArchiveComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -14,22 +14,20 @@
 import java.io.File;
 import java.util.Properties;
 
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.componentcore.UnresolveableURIException;
-import org.eclipse.wst.common.componentcore.internal.impl.ModuleURIUtil;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
 import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
 import org.eclipse.wst.common.componentcore.resources.IVirtualResource;
+import org.eclipse.wst.common.frameworks.internal.HashUtil;
 
 
 public class VirtualArchiveComponent implements IVirtualComponent, IAdaptable {
@@ -37,19 +35,23 @@
 	public static final Class ADAPTER_TYPE = VirtualArchiveComponent.class;
 	public static final String LIBARCHIVETYPE = "lib";
 	public static final String VARARCHIVETYPE = "var";
-
+	/**
+	 * VirtualArchiveComponent type for VirtualArchiveComponents that represent classpath component dependencies.
+	 */
+	public static final String CLASSPATHARCHIVETYPE = "cpe"; //$NON-NLS-1
+	
 	private static final IVirtualReference[] NO_REFERENCES = new VirtualReference[0];
 	private static final IVirtualComponent[] NO_COMPONENTS = new VirtualComponent[0];
-	private static final IResource[] NO_RESOURCES = null;
+//	private static final IResource[] NO_RESOURCES = null;
 	private static final IVirtualResource[] NO_VIRTUAL_RESOURCES = null;
 	private static final Properties NO_PROPERTIES = new Properties();
 	private static final IPath[] NO_PATHS = new Path[0];
 
-	private IPath runtimePath;
+//	private IPath runtimePath;
 	private IProject componentProject;
-	private IVirtualFolder rootFolder;
+//	private IVirtualFolder rootFolder;
 	private int flag = 1;
-	private String archiveLocation;
+//	private String archiveLocation;
 
 
 	private IPath archivePath;
@@ -58,8 +60,11 @@
 
 
 	public VirtualArchiveComponent(IProject aComponentProject,String archiveLocation, IPath aRuntimePath) {
+		if(aComponentProject == null){
+			throw new NullPointerException();
+		}
 		componentProject = aComponentProject;
-		runtimePath = aRuntimePath;
+//		runtimePath = aRuntimePath;
 
 		String archivePathString = archiveLocation.substring(4, archiveLocation.length());
 		archiveType	= archiveLocation.substring(0, archiveLocation.length() - archivePathString.length() -1);
@@ -73,6 +78,10 @@
 	public String getName() {
 		return this.archiveType + IPath.SEPARATOR + this.archivePath.toString();
 	}
+	
+	public String getDeployedName() {
+		return getName();
+	}
 
 	public void setComponentTypeId(String aComponentTypeId) {
 		return;
@@ -104,13 +113,19 @@
 	}
 
 	public IPath getWorkspaceRelativePath() {
-		if (getProject() != null)
-			return getProject().getFile(archivePath).getFullPath();
-		return archivePath;
+		if( archivePath.segmentCount() > 1 ){
+			IFile aFile = ResourcesPlugin.getWorkspace().getRoot().getFile(archivePath);
+			if (aFile.exists())
+				return aFile.getFullPath();
+		}
+		return null;
 	}
 
 	public IPath getProjectRelativePath() {
-		return archivePath;
+		IFile aFile = ResourcesPlugin.getWorkspace().getRoot().getFile(getWorkspaceRelativePath());
+		if (aFile.exists())
+			return aFile.getProjectRelativePath();
+		return null;
 	}
 
 	public IProject getProject() {
@@ -154,7 +169,17 @@
 	}
 
 	public boolean exists() {
-		return false;
+		boolean exists = false;
+		java.io.File diskFile = getUnderlyingDiskFile();
+		if( diskFile != null )
+			exists = diskFile.exists();
+		
+		if( !exists ){
+			IFile utilityJar = getUnderlyingWorkbenchFile();
+			if( utilityJar != null )
+				exists =  utilityJar.exists();
+		}
+		return exists;
 	}
 
 	public IVirtualFolder getRootFolder() {
@@ -174,10 +199,20 @@
 		return archiveType;
 	}
 
+	public int hashCode() {
+		int hash = HashUtil.SEED;
+		hash = HashUtil.hash(hash, getProject().getName());
+		hash = HashUtil.hash(hash, getName());
+		hash = HashUtil.hash(hash, isBinary());
+		return hash;
+	}
+	
 	public boolean equals(Object anOther) {
 		if (anOther instanceof VirtualArchiveComponent) {
 			VirtualArchiveComponent otherComponent = (VirtualArchiveComponent) anOther;
-			return getProject().equals(otherComponent.getProject()) && getName().equals(otherComponent.getName());
+			return getProject().equals(otherComponent.getProject()) && 
+					getName().equals(otherComponent.getName()) && 
+					isBinary() == otherComponent.isBinary();
 		}
 		return false;
 	}
@@ -189,25 +224,47 @@
 	public void setMetaProperties(Properties properties) {
 
 	}
+	public IFile getUnderlyingWorkbenchFile() {
+		if (getWorkspaceRelativePath()==null)
+			return null;
+		return ResourcesPlugin.getWorkspace().getRoot().getFile(getWorkspaceRelativePath());
+	}
 
 	public File getUnderlyingDiskFile() {
-		String osPath = "";
+		String osPath = null;
+		IPath loc = null;
 		if (getArchiveType().equals(VirtualArchiveComponent.VARARCHIVETYPE)) {
-			IPath resolvedpath = (IPath) getAdapter(VirtualArchiveComponent.ADAPTER_TYPE);
-			osPath = resolvedpath.toOSString();
-		} else {
-			String fileString = null;
-			try {
-				String name = "[" + getProject().getFullPath() + "]:" + getName();
-				fileString = ModuleURIUtil.getArchiveName(URI.createURI(name));
-			} catch (UnresolveableURIException e) {
-				Logger.getLogger().logError(e);
+			Object adapted = getAdapter(VirtualArchiveComponent.ADAPTER_TYPE);
+			if (adapted instanceof IPath) {
+				IPath resolvedpath = (IPath) adapted;
+				osPath = resolvedpath.toOSString();
+			} 
+		} else if(!archivePath.isAbsolute()) {
+			IFile file = getProject().getFile(archivePath);
+			if(file.exists())
+				loc  = file.getLocation();
+			else {
+				file = ResourcesPlugin.getWorkspace().getRoot().getFile(archivePath);
+				if(file.exists())
+					loc = file.getLocation();
 			}
-			IPath path = new Path(fileString);
-			osPath = path.toOSString();
+			// this is a file on the local filesystem
+			if(loc != null)  
+				osPath = loc.toOSString();
+		} else {
+			osPath = archivePath.toOSString();
 		}
+		if (osPath==null || osPath.length()==0)
+			return null;
 		File diskFile = new File(osPath);
 		return diskFile;
 	}
-
+	
+	public String toString() {
+		if(archivePath != null){
+			return componentProject + " " +archivePath;
+		}
+		return super.toString();
+	}
+	
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java
index a26d57b..ce24d69 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -20,12 +20,15 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.ModuleCoreNature;
 import org.eclipse.wst.common.componentcore.internal.ComponentcoreFactory;
 import org.eclipse.wst.common.componentcore.internal.ComponentcorePackage;
 import org.eclipse.wst.common.componentcore.internal.DependencyType;
+import org.eclipse.wst.common.componentcore.internal.ModulecorePlugin;
 import org.eclipse.wst.common.componentcore.internal.Property;
 import org.eclipse.wst.common.componentcore.internal.ReferencedComponent;
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
@@ -36,6 +39,7 @@
 import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
 import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
 import org.eclipse.wst.common.componentcore.resources.IVirtualResource;
+import org.eclipse.wst.common.frameworks.internal.HashUtil;
 
 
 public class VirtualComponent implements IVirtualComponent {
@@ -46,7 +50,13 @@
 	private int flag = 0;
 	
 
+	protected VirtualComponent(){
+	}
+	
 	public VirtualComponent(IProject aProject, IPath aRuntimePath) {
+		if(aProject == null){
+			throw new NullPointerException();
+		}
 		componentProject = aProject;
 		runtimePath = aRuntimePath;
 		rootFolder = ComponentCore.createFolder(componentProject, new Path("/")); //$NON-NLS-1$
@@ -60,64 +70,30 @@
 		return getProject().getName();
 	}
 	
-	public boolean exists() { 
+	public String getDeployedName() {
 		StructureEdit core = null;
 		IProject project = getProject();
 		try {
 			if (project != null && getName() != null) {
 				core = StructureEdit.getStructureEditForRead(project);
-				if(core == null){
-					return false;
+				if(core != null && core.getComponent() != null){
+					WorkbenchComponent component = core.getComponent();
+					if (component.getName()!=null && component.getName().length()>0)
+						return component.getName();
 				}
-				WorkbenchComponent component = core.getComponent(); 
-				return component != null;
 			}
 		} finally {
 			if(core != null)
 				core.dispose();
 		}
-		return false;
+		return getProject().getName();
 	}
 	
-//	public String getComponentTypeId() {
-//		if (null == componentTypeId) {
-//			StructureEdit core = null;
-//			try {
-//				if (getProject() == null || getName() == null)
-//					return null;
-//				core = StructureEdit.getStructureEditForRead(getProject());
-//				if (core == null)
-//					return null;
-//				WorkbenchComponent component = core.getComponent();
-//				ComponentType cType = component == null ? null : component.getComponentType();
-//				componentTypeId = cType == null ? null : cType.getComponentTypeId();
-//			} finally {
-//				if (core != null)
-//					core.dispose();
-//			}
-//		}
-//		return componentTypeId;
-//	}
-
-//	public void setComponentTypeId(String aComponentTypeId) {
-//
-//		StructureEdit core = null;
-//		try {
-//			core = StructureEdit.getStructureEditForWrite(getProject());
-//			WorkbenchComponent component = core.getComponent(); 
-//			ComponentType cType = component.getComponentType();
-//			if(cType == null) {
-//				cType = ComponentcorePackage.eINSTANCE.getComponentcoreFactory().createComponentType();
-//				component.setComponentType(cType);
-//			}
-//			cType.setComponentTypeId(aComponentTypeId);
-//		} finally {
-//			if(core != null) {
-//				core.saveIfNecessary(null);
-//				core.dispose();
-//			}
-//		}
-//	}
+	public boolean exists() { 
+		IProject project = getProject();
+		return ModuleCoreNature.isFlexibleProject(project);
+	}
+	
 
 	public Properties getMetaProperties() {
         StructureEdit core = null;
@@ -127,10 +103,19 @@
             if (core == null)
             	return props;
             WorkbenchComponent component = core.getComponent(); 
+            if (component == null) return props;
             List propList = component.getProperties();
             if(propList != null) {
                 for (int i = 0; i < propList.size(); i++) {
-                    props.setProperty(((Property)propList.get(i)).getName(), ((Property)propList.get(i)).getValue());
+                	Property property = (Property)propList.get(i);
+                	String name = property.getName();
+                	String value = property.getValue();
+                	if(value == null){
+                		value = ""; //$NON-NLS-1$
+                		String message = "WARNING:  The component file in "+getProject().getName()+" has no value defined for the property: "+name;  //$NON-NLS-1$//$NON-NLS-2$
+                		ModulecorePlugin.logError(IStatus.ERROR, message, null);
+                	}
+                    props.setProperty(name, value);
                 }
             }
             return props; 
@@ -146,25 +131,47 @@
             core = StructureEdit.getStructureEditForWrite(getProject());
             WorkbenchComponent component = core.getComponent(); 
             
-                List propList = component.getProperties();
-				if (properties != null && !properties.isEmpty()) {
-				        for(Enumeration itr = properties.keys(); itr.hasMoreElements();) {
-				            final String key = (String) itr.nextElement();
-				            final Property prop = ComponentcoreFactory.eINSTANCE.createProperty();
-				            prop.setName(key);
-				            prop.setValue(properties.getProperty(key));
-				            propList.add(prop);
-				         }
-				}
-                
-            
+            List propList = component.getProperties();
+			if (properties != null && !properties.isEmpty()) {
+		        for(Enumeration itr = properties.keys(); itr.hasMoreElements();) {
+		            final String key = (String) itr.nextElement();
+		            final Property prop = ComponentcoreFactory.eINSTANCE.createProperty();
+		            prop.setName(key);
+		            prop.setValue(properties.getProperty(key));
+		            // Remove existing property first
+		            for (int i=0; i<propList.size(); i++) {
+		            	Property existing = (Property) propList.get(i);
+		            	if (existing.getName().equals(key)) {
+		            		propList.remove(existing);
+		            		break;
+		            	}
+		            }
+		            // Add new property
+		            propList.add(prop);
+		         }
+			} 
         } finally {
             if(core != null){
             	core.saveIfNecessary(null);
                 core.dispose();
             }
         }
-	}	
+	}
+	
+	public void clearMetaProperties() {
+		StructureEdit core = null;
+        try {
+            core = StructureEdit.getStructureEditForWrite(getProject());
+            WorkbenchComponent component = core.getComponent(); 
+            component.getProperties().clear();
+        } finally {
+            if(core != null){
+            	core.saveIfNecessary(null);
+                core.dispose();
+            }
+        }
+	}
+	
 	public void setMetaProperty(String key, String value) {
         StructureEdit core = null;
         try {
@@ -198,9 +205,11 @@
 		List metaResources = new ArrayList();
 		try {
 			moduleCore = StructureEdit.getStructureEditForRead(getProject());
-			WorkbenchComponent component = moduleCore.getComponent();
-			if (component != null)
-				metaResources.addAll(component.getMetadataResources());
+			if (moduleCore != null) {
+				WorkbenchComponent component = moduleCore.getComponent();
+				if (component != null)
+					metaResources.addAll(component.getMetadataResources());
+			}
 		} finally {
 			if (moduleCore != null) {
 				moduleCore.dispose();
@@ -272,7 +281,10 @@
 						if (referencedComponent==null) 
 							continue;
 						IVirtualReference vReference = StructureEdit.createVirtualReference(this, referencedComponent);
-						if (vReference != null)
+						if( vReference != null ){
+							vReference.setArchiveName( referencedComponent.getArchiveName() );
+						}
+						if (vReference != null && vReference.getReferencedComponent() != null && vReference.getReferencedComponent().exists())
 							references.add(vReference); 
 					}
 				}
@@ -290,21 +302,30 @@
 		StructureEdit core = null;
 		try {
 			core = StructureEdit.getStructureEditForWrite(getProject());
+			if (core == null)
+				return;
 			WorkbenchComponent component = core.getComponent();
 			ReferencedComponent referencedComponent = null;
 			ComponentcoreFactory factory = ComponentcorePackage.eINSTANCE.getComponentcoreFactory();
 			for (int i=0; i<references.length; i++) {
+				if (references[i] == null)
+					continue;
 				referencedComponent = factory.createReferencedComponent();				
 				referencedComponent.setDependencyType(DependencyType.get(references[i].getDependencyType()));
 				referencedComponent.setRuntimePath(references[i].getRuntimePath());
 
 				IVirtualComponent comp = references[i].getReferencedComponent();
-				if( !comp.isBinary())
-					referencedComponent.setHandle(ModuleURIUtil.fullyQualifyURI(references[i].getReferencedComponent().getProject()));
-				else
-					referencedComponent.setHandle(ModuleURIUtil.archiveComponentfullyQualifyURI(references[i].getReferencedComponent().getName()));
-				
-				component.getReferencedComponents().add(referencedComponent);
+				if(comp!=null && !comp.isBinary())
+					referencedComponent.setHandle(ModuleURIUtil.fullyQualifyURI(comp.getProject()));
+				else if (comp!=null)
+					referencedComponent.setHandle(ModuleURIUtil.archiveComponentfullyQualifyURI(comp.getName()));
+				if (component != null)
+					component.getReferencedComponents().add(referencedComponent);
+				referencedComponent.setArchiveName(references[i].getArchiveName());
+			}
+			//clean up any old obsolete references
+			if (component != null){
+				cleanUpReferences(component);
 			}
 		} finally {
 			if(core != null) {
@@ -314,6 +335,19 @@
 		}	
 	}
 	
+	private void cleanUpReferences(WorkbenchComponent component) {
+		List referencedComponents = component.getReferencedComponents();
+		for (Iterator iter = referencedComponents.iterator(); iter.hasNext();) {
+			ReferencedComponent referencedComponent = (ReferencedComponent) iter.next();
+			if (referencedComponent==null) 
+				continue;
+			IVirtualReference vReference = StructureEdit.createVirtualReference(this, referencedComponent);
+			if (vReference == null || vReference.getReferencedComponent() == null || !vReference.getReferencedComponent().exists()){
+				iter.remove();
+			}
+		}
+	}
+	
 	public void setReferences(IVirtualReference[] references) { 
 		StructureEdit core = null;
 		try {
@@ -334,6 +368,7 @@
 				else
 					referencedComponent.setHandle(ModuleURIUtil.archiveComponentfullyQualifyURI(references[i].getReferencedComponent().getName()));
 				
+				referencedComponent.setArchiveName(references[i].getArchiveName());
 				component.getReferencedComponents().add(referencedComponent);
 			}
 			 
@@ -345,11 +380,20 @@
 		}	
 	}
 
+	public int hashCode() {
+		int hash = HashUtil.SEED;
+		hash = HashUtil.hash(hash, getProject().getName());
+		hash = HashUtil.hash(hash, getName());
+		hash = HashUtil.hash(hash, isBinary());
+		return hash;
+	}
 	
 	public boolean equals(Object anOther) { 
 		if(anOther instanceof IVirtualComponent) {
 			IVirtualComponent otherComponent = (IVirtualComponent) anOther;
-			return getProject()!=null && getProject().equals(otherComponent.getProject()) && getName().equals(otherComponent.getName());
+			return getProject().equals(otherComponent.getProject()) && 
+				   getName().equals(otherComponent.getName()) && 
+				   isBinary() == otherComponent.isBinary();
 		}
 		return false;
 	}
@@ -358,8 +402,10 @@
 		IVirtualReference[] refs = getReferences();
 		for (int i = 0; i < refs.length; i++) {
 			IVirtualReference reference = refs[i];
-			if (reference.getReferencedComponent().getName().equals(aComponentName))
-				return reference;
+			if( reference.getReferencedComponent() != null ){
+				if (reference.getReferencedComponent().getName().equals(aComponentName))
+					return reference;
+			}
 		}
 		return null;
 	}
@@ -389,4 +435,91 @@
 			result[i] = ComponentCore.createComponent(handles[i]);
 		return result;
 	}
+	
+	/**
+	 * Remove the associated ReferencedComponent for the virtual reference from the workbench component 
+	 * associated with this virtual component
+	 * 
+	 * @param aReference
+	 */
+	public void removeReference(IVirtualReference aReference) {
+		StructureEdit core = null;
+		try {
+			core = StructureEdit.getStructureEditForWrite(getProject());
+			if (core == null || aReference == null)
+				return;
+			WorkbenchComponent component = core.getComponent();
+			ReferencedComponent refComponent = getWorkbenchReferencedComponent(aReference, component);
+			if (component != null && refComponent != null)
+				component.getReferencedComponents().remove(refComponent);
+		} finally {
+			if(core != null) {
+				core.saveIfNecessary(null);
+				core.dispose();
+			}
+		}	
+	}
+	
+	/**
+	 * Return the associated structure edit ReferencedComponent object for the given IVirtualReference based on the handle
+	 * and module URI.
+	 * 
+	 * @param aReference
+	 * @param core
+	 * @return ReferencedComponent
+	 */
+	protected ReferencedComponent getWorkbenchReferencedComponent(IVirtualReference aReference, WorkbenchComponent component) {
+		if (aReference == null || aReference.getReferencedComponent() == null || component == null)
+			return null;
+		List referencedComponents = component.getReferencedComponents();
+		for (int i=0; i<referencedComponents.size(); i++) {
+			ReferencedComponent ref = (ReferencedComponent) referencedComponents.get(i);
+			if (!aReference.getReferencedComponent().isBinary()) {
+				if (ref.getHandle().equals(ModuleURIUtil.fullyQualifyURI(aReference.getReferencedComponent().getProject())))
+					return ref;	
+			} 
+			else {
+				if (ref.getHandle().equals(ModuleURIUtil.archiveComponentfullyQualifyURI(aReference.getReferencedComponent().getName())))
+					return ref;
+			}	
+		}
+		return null;
+	}
+	
+	
+	/**
+	 * @return IVirtualReference[] - All the references of this component, including potentially deleted references
+	 */
+	public IVirtualReference[] getAllReferences() { 
+		StructureEdit core = null;
+		List references = new ArrayList();
+		try {
+			core = StructureEdit.getStructureEditForRead(getProject());
+			if (core!=null && core.getComponent()!=null) {
+				WorkbenchComponent component = core.getComponent();
+				if (component!=null) {
+					List referencedComponents = component.getReferencedComponents();
+					for (Iterator iter = referencedComponents.iterator(); iter.hasNext();) {
+						ReferencedComponent referencedComponent = (ReferencedComponent) iter.next();
+						if (referencedComponent==null) 
+							continue;
+						IVirtualReference vReference = StructureEdit.createVirtualReference(this, referencedComponent);
+						if( vReference != null ){
+							vReference.setArchiveName( referencedComponent.getArchiveName() );
+						}
+						if (vReference != null && vReference.getReferencedComponent() != null)
+							references.add(vReference); 
+					}
+				}
+			}
+			return (IVirtualReference[]) references.toArray(new IVirtualReference[references.size()]);
+		} finally {
+			if(core != null)
+				core.dispose();
+		}		
+	}
+	
+	public String toString() {
+		return componentProject.toString();
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualContainer.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualContainer.java
index f097866..51f4f15 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualContainer.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualContainer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -17,9 +17,10 @@
 import java.util.Set;
 
 import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -30,6 +31,7 @@
 import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
 import org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeNode;
 import org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeRoot;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualContainer;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
@@ -76,24 +78,28 @@
 
 			structureEdit = StructureEdit.getStructureEditForRead(getProject());
 			WorkbenchComponent component = structureEdit.getComponent();
-			ResourceTreeRoot root = ResourceTreeRoot.getDeployResourceTreeRoot(component);
-			ComponentResource[] resources = root.findModuleResources(getRuntimePath().append(aPath), ResourceTreeNode.CREATE_NONE);
+			if (null != component) {
+				ResourceTreeRoot root = ResourceTreeRoot.getDeployResourceTreeRoot(component);
+				ComponentResource[] resources = root.findModuleResources(getRuntimePath().append(aPath), ResourceTreeNode.CREATE_NONE);
 
-			for (int i=0; i<resources.length; i++) {
+				for (int i = 0; i < resources.length; i++) {
 				// return the resources corresponding to the root, not any of the children if its a folder
-				if (resources[i].getRuntimePath().equals(getRuntimePath().append(aPath))) {
-					IResource platformResource = StructureEdit.getEclipseResource(resources[i]);
-				if (platformResource != null) {
-					switch (platformResource.getType()) {
-						case IResource.FOLDER :
-						case IResource.PROJECT :
-							return new VirtualFolder(getProject(), getRuntimePath().append(aPath));
-						case IResource.FILE :
-							return new VirtualFile(getProject(), getRuntimePath().append(aPath));
+					if (resources[i].getRuntimePath().equals(getRuntimePath().append(aPath))) {
+						IResource platformResource = getProject().findMember(resources[i].getSourcePath());
+						if (platformResource == null)
+							platformResource = ResourcesPlugin.getWorkspace().getRoot().findMember(resources[i].getSourcePath());
+						if (platformResource != null) {
+							switch (platformResource.getType()) {
+								case IResource.FOLDER :
+								case IResource.PROJECT :
+									return ComponentCore.createFolder(getProject(), getRuntimePath().append(aPath));
+								case IResource.FILE :
+									return new VirtualFile(getProject(), getRuntimePath().append(aPath));
+							}
+						}
 					}
 				}
 			}
-			}
 		} finally {
 			if (structureEdit != null)
 				structureEdit.dispose();
@@ -112,21 +118,21 @@
 	 * @see IContainer#getFolder(org.eclipse.core.runtime.IPath)
 	 */
 	public IVirtualFolder getFolder(IPath aPath) {
-		return new VirtualFolder(getProject(), getRuntimePath().append(aPath));
+		return ComponentCore.createFolder(getProject(), getRuntimePath().append(aPath));
 	}
 
 	/**
-	 * @see IFolder#getFile(java.lang.String)
+	 * @see org.eclipse.core.resources.IFolder#getFile(java.lang.String)
 	 */
 	public IVirtualFile getFile(String name) {
 		return new VirtualFile(getProject(), getRuntimePath().append(name));
 	}
 
 	/**
-	 * @see IFolder#getFolder(java.lang.String)
+	 * @see org.eclipse.core.resources.IFolder#getFolder(java.lang.String)
 	 */
 	public IVirtualFolder getFolder(String name) {
-		return new VirtualFolder(getProject(), getRuntimePath().append(name));
+		return ComponentCore.createFolder(getProject(), getRuntimePath().append(name));
 	}
 
 	/**
@@ -143,66 +149,72 @@
 		return members(includePhantoms ? IGNORE_EXCLUSIONS : IResource.NONE);
 	}
 
-	private ComponentResource[] orderResourcesByFolder(ComponentResource[] resources) {
-		List result = new ArrayList();
-		for (int i=0; i<resources.length; i++ ) {
-			IResource realResource = StructureEdit.getEclipseResource(resources[i]);
-			if (realResource!=null && realResource.getType() == IResource.PROJECT)
-				result.add(0,resources[i]);
-			else if (realResource!=null && realResource.getType() == IResource.FOLDER) {
-				int newResourceSegments = resources[i].getRuntimePath().segmentCount();
-				for (int j=0; j<result.size(); j++) {
-					int segmentCount = ((ComponentResource)result.get(j)).getRuntimePath().segmentCount();
-					if (newResourceSegments<=segmentCount) {
-						result.add(j,resources[i]);
-						break;
-					}
-				}
-				if (!result.contains(resources[i]))
-					result.add(resources[i]);
-			}
-			else
-				result.add(resources[i]);
-		}
-		return (ComponentResource[]) result.toArray(new ComponentResource[result.size()]);
-	}
 	/**
 	 * @see IContainer#members(int)
 	 */
 	public IVirtualResource[] members(int memberFlags) throws CoreException {
+		List virtualResources = new ArrayList(); // result
+		Set allNames = new HashSet();
+		// Ignore all meta data paths in the virtual container resource set
+		IVirtualComponent component = getComponent();
+		if (component == null)
+		    return new IVirtualResource[0];
+		IPath[] metaPaths = component.getMetaResources();
+		for (int i = 0; i < metaPaths.length; i++) {
+			String localName = getLocalName(metaPaths[i]);
+			if (localName != null)
+				allNames.add(localName);
+		}
 		StructureEdit moduleCore = null;
-		Set virtualResources = new HashSet();
 		try {
 			moduleCore = StructureEdit.getStructureEditForRead(getProject());
 			WorkbenchComponent wbComponent = moduleCore.getComponent();
 			if (wbComponent != null) {
 				ResourceTreeRoot root = ResourceTreeRoot.getDeployResourceTreeRoot(wbComponent);
 				ComponentResource[] componentResources = root.findModuleResources(getRuntimePath(), ResourceTreeNode.CREATE_NONE);
-				componentResources = orderResourcesByFolder(componentResources);
-				IResource realResource = null;
-				IPath fullRuntimePath = null;
-				IPath newRuntimePath = null;
+				// componentResources = orderResourcesByFolder(componentResources);
 
 				for (int componentResourceIndex = 0; componentResourceIndex < componentResources.length; componentResourceIndex++) {
-					fullRuntimePath = componentResources[componentResourceIndex].getRuntimePath();
+					IPath fullRuntimePath = componentResources[componentResourceIndex].getRuntimePath();
 					// exact match
 					if (fullRuntimePath.equals(getRuntimePath())) {
-						realResource = StructureEdit.getEclipseResource(componentResources[componentResourceIndex]);
+
+						IResource realResource = getProject().findMember(componentResources[componentResourceIndex].getSourcePath());
 						if ((realResource != null) && (realResource.getType() == IResource.FOLDER || realResource.getType() == IResource.PROJECT)) {
 							IContainer realContainer = (IContainer) realResource;
 							IResource[] realChildResources = realContainer.members(memberFlags);
 							for (int realResourceIndex = 0; realResourceIndex < realChildResources.length; realResourceIndex++) {
-								newRuntimePath = getRuntimePath().append(realChildResources[realResourceIndex].getName());
-								addVirtualResource(virtualResources, realChildResources[realResourceIndex], newRuntimePath);
+								IResource child = realChildResources[realResourceIndex];
+								String localName = child.getName();
+								if (allNames.add(localName)) {
+									IPath newRuntimePath = getRuntimePath().append(localName);
+									if (child instanceof IFile) {
+										virtualResources.add(new VirtualFile(getProject(), newRuntimePath, (IFile) child));
+									} else {
+										virtualResources.add(ComponentCore.createFolder(getProject(), newRuntimePath));
+									}
+								}
 							}
 						}
 						// An IResource.FILE would be an error condition (as this is a container)
 
 					} else { // fuzzy match
-						newRuntimePath = getRuntimePath().append(fullRuntimePath.segment(getRuntimePath().segmentCount()));
-						realResource = StructureEdit.getEclipseResource(componentResources[componentResourceIndex]);
-						if (realResource != null)
-							addVirtualResource(virtualResources, realResource, fullRuntimePath);
+						String localName = getLocalName(fullRuntimePath);
+						if (localName != null && allNames.add(localName)) {
+							IResource realResource = StructureEdit.getEclipseResource(componentResources[componentResourceIndex]);
+							if (realResource != null) {
+								IPath newRuntimePath = getRuntimePath().append(localName);
+								if (fullRuntimePath.segmentCount() > getRuntimePath().segmentCount() + 1) {	// not a direct child
+									virtualResources.add(ComponentCore.createFolder(getProject(), newRuntimePath));
+								} else {
+									if (realResource instanceof IFile) {
+										virtualResources.add(new VirtualFile(getProject(), newRuntimePath, (IFile) realResource));
+									} else {
+										virtualResources.add(ComponentCore.createFolder(getProject(), newRuntimePath));
+									}
+								}
+							}
+						}
 					}
 				}
 			}
@@ -216,13 +228,22 @@
 		return (IVirtualResource[]) virtualResources.toArray(new IVirtualResource[virtualResources.size()]);
 	}
 
+	/**
+	 * Local name within context of this virtual container.
+	 */
+	private String getLocalName(IPath path) {
+		if (!getRuntimePath().isPrefixOf(path))
+			return null;
+		return path.segment(getRuntimePath().segmentCount());
+	}
+
 	public IVirtualFile[] findDeletedMembersWithHistory(int depth, IProgressMonitor monitor) throws CoreException {
 		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
 		// return null;
 	}
 
 	/**
-	 * @see IFolder#createLink(org.eclipse.core.runtime.IPath, int,
+	 * @see org.eclipse.core.resources.IFolder#createLink(org.eclipse.core.runtime.IPath, int,
 	 *      org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public void createLink(IPath aProjectRelativeLocation, int updateFlags, IProgressMonitor monitor) throws CoreException {
@@ -230,7 +251,7 @@
 		StructureEdit moduleCore = null;
 		try {
 			IContainer resource = null;
-			if (aProjectRelativeLocation.isRoot()) {
+			if (aProjectRelativeLocation.isRoot() || aProjectRelativeLocation.isEmpty()) {
 				resource = getProject();
 			} else {
 				resource = getProject().getFolder(aProjectRelativeLocation);
@@ -238,27 +259,28 @@
 
 			moduleCore = StructureEdit.getStructureEditForWrite(getProject());
 			WorkbenchComponent component = moduleCore.getComponent();
+			if (null != component) {
+				ResourceTreeRoot root = ResourceTreeRoot.getDeployResourceTreeRoot(component);
+				ComponentResource[] resources = root.findModuleResources(getRuntimePath(), ResourceTreeNode.CREATE_NONE);
 
-			ResourceTreeRoot root = ResourceTreeRoot.getDeployResourceTreeRoot(component);
-			ComponentResource[] resources = root.findModuleResources(getRuntimePath(), ResourceTreeNode.CREATE_NONE);
-
-			if (resources.length == 0) {
-				ComponentResource componentResource = moduleCore.createWorkbenchModuleResource(resource);
-				componentResource.setRuntimePath(getRuntimePath());
-				component.getResources().add(componentResource);
-			} else {
-				boolean foundMapping = false;
-				for (int resourceIndx = 0; resourceIndx < resources.length && !foundMapping; resourceIndx++) {
-					if (aProjectRelativeLocation.makeAbsolute().equals(resources[resourceIndx].getSourcePath()))
-						foundMapping = true;
-				}
-				if (!foundMapping) {
+				if (resources.length == 0) {
 					ComponentResource componentResource = moduleCore.createWorkbenchModuleResource(resource);
 					componentResource.setRuntimePath(getRuntimePath());
 					component.getResources().add(componentResource);
+				} else {
+					boolean foundMapping = false;
+					for (int resourceIndx = 0; resourceIndx < resources.length && !foundMapping; resourceIndx++) {
+						if (aProjectRelativeLocation.makeAbsolute().equals(resources[resourceIndx].getSourcePath()))
+							foundMapping = true;
+					}
+					if (!foundMapping) {
+						ComponentResource componentResource = moduleCore.createWorkbenchModuleResource(resource);
+						componentResource.setRuntimePath(getRuntimePath());
+						component.getResources().add(componentResource);
+					}
 				}
+				createResource(resource, updateFlags, monitor);
 			}
-			createResource(resource, updateFlags, monitor);
 
 		} finally {
 			if (moduleCore != null) {
@@ -285,7 +307,9 @@
 		try {
 			moduleCore = StructureEdit.getStructureEditForWrite(getProject());
 			WorkbenchComponent component = moduleCore.getComponent();
-			moduleCore.getComponentModelRoot().getComponents().remove(component);
+			if (null != component) {
+				moduleCore.getComponentModelRoot().getComponents().remove(component);
+			}
 		} finally {
 			if (moduleCore != null) {
 				moduleCore.saveIfNecessary(monitor);
@@ -298,50 +322,28 @@
 		throw new UnsupportedOperationException("Method not supported"); //$NON-NLS-1$
 	}
 
-	/**
-	 * @param virtualResources
-	 * @param realResource
-	 * @param newRuntimePath
-	 */
-	private void addVirtualResource(Set virtualResources, IResource realResource, IPath newRuntimePath) {
-		// Ignore all meta data paths in the virtual container resource set
-		IPath[] metaPaths = getComponent().getMetaResources();
-		for (int i=0; i<metaPaths.length; i++) {
-			if (newRuntimePath.equals(metaPaths[i]))
-				return;
-		}
-		// If the parent path is in the resources set already, ignore the child
-		Iterator iter = virtualResources.iterator();
-		while (iter.hasNext()) {
-			IVirtualResource resource = (IVirtualResource)iter.next();
-			if (newRuntimePath.toString().startsWith(resource.getRuntimePath().toString()))
-				return;
-		}
-		if (realResource.getType() == IResource.FOLDER)
-			virtualResources.add(new VirtualFolder(getProject(), newRuntimePath));
-		else
-			virtualResources.add(new VirtualFile(getProject(), newRuntimePath));
-	}
-
 	public IVirtualResource[] getResources(String aResourceType) {
 		StructureEdit core = null;
 		try {
 			core = StructureEdit.getStructureEditForRead(getProject());
 			WorkbenchComponent component = core.getComponent();
-			List currentResources = component.getResources();
-			List foundResources = new ArrayList();
+			if (null != component) {
+				List currentResources = component.getResources();
+				List foundResources = new ArrayList();
 
-			if (aResourceType != null) {
-				for (Iterator iter = currentResources.iterator(); iter.hasNext();) {
-					ComponentResource resource = (ComponentResource) iter.next();
-					if (aResourceType.equals(resource.getResourceType())) {
-						IVirtualResource vres = createVirtualResource(resource);
-						if (vres != null)
-							foundResources.add(vres);
+				if (aResourceType != null) {
+					for (Iterator iter = currentResources.iterator(); iter.hasNext();) {
+						ComponentResource resource = (ComponentResource) iter.next();
+						if (aResourceType.equals(resource.getResourceType())) {
+							IVirtualResource vres = createVirtualResource(resource);
+							if (vres != null)
+								foundResources.add(vres);
+						}
 					}
 				}
+				return (IVirtualResource[]) foundResources.toArray(new IVirtualResource[foundResources.size()]);
 			}
-			return (IVirtualResource[]) foundResources.toArray(new IVirtualResource[foundResources.size()]);
+			return new IVirtualResource[0];
 		} finally {
 			if (core != null)
 				core.dispose();
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualFile.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualFile.java
index 908b70f..ee9ec04 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualFile.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -14,7 +14,6 @@
 import java.util.List;
 
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
@@ -30,12 +29,19 @@
 
 public class VirtualFile extends VirtualResource implements IVirtualFile {
 
+	private IFile underlyingFile;
+
 	public VirtualFile(IProject aComponentProject, IPath aRuntimePath) {
 		super(aComponentProject, aRuntimePath); 
 	}
 
+	public VirtualFile(IProject aComponentProject, IPath aRuntimePath, IFile underlyingFile) {
+		super(aComponentProject, aRuntimePath);
+		this.underlyingFile = underlyingFile; 
+	}
+
 	/**
-	 * @see IFolder#createLink(org.eclipse.core.runtime.IPath, int,
+	 * @see org.eclipse.core.resources.IFolder#createLink(org.eclipse.core.runtime.IPath, int,
 	 *      org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public void createLink(IPath aProjectRelativeLocation, int updateFlags, IProgressMonitor monitor) throws CoreException {
@@ -88,9 +94,12 @@
 	}
 	
 	public IFile getUnderlyingFile() {
-		return getProject().getFile(getProjectRelativePath());
+		if (underlyingFile == null) {
+			underlyingFile = getProject().getFile(getProjectRelativePath());
+		}
+		return underlyingFile;
 	}
-	
+
 	public IFile[] getUnderlyingFiles() {
 		IPath[] paths = getProjectRelativePaths();
 		List result = new ArrayList();
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualReference.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualReference.java
index 9b49be6..007b1ce 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualReference.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -14,7 +14,9 @@
 
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.wst.common.componentcore.internal.ComponentcorePackage;
 import org.eclipse.wst.common.componentcore.internal.DependencyType;
 import org.eclipse.wst.common.componentcore.internal.ReferencedComponent;
@@ -30,6 +32,7 @@
 	private IVirtualComponent enclosingComponent;
 	private IPath runtimePath;
 	private int dependencyType;
+	private String archiveName;
 
 	public VirtualReference() {
 		
@@ -63,6 +66,7 @@
 				refComp.setHandle(ModuleURIUtil.archiveComponentfullyQualifyURI(referencedComponent.getName())); 
 			refComp.setRuntimePath(runtimePath);
 			refComp.setDependencyType(DependencyType.get(dependencyType));
+			refComp.setArchiveName(archiveName);
 			if(!referencedComponents.contains(refComp)){
 				referencedComponents.add(refComp);
 			}
@@ -102,5 +106,46 @@
 	public IVirtualComponent getReferencedComponent() { 
 		return referencedComponent;
 	}
+	
+	/**
+	 * This is a helper method to update the actual referenceComponent on the .component file for this virtual reference.
+	 */
+	public void setReferencedComponent(IVirtualComponent aReferencedComponent, EObject dependentObject) {
+		if (aReferencedComponent == null)
+			return;
+		StructureEdit enclosingCore = null;
+		StructureEdit refCore = null;
+		try {
+			enclosingCore = StructureEdit.getStructureEditForWrite(enclosingComponent.getProject());
+			refCore = StructureEdit.getStructureEditForWrite(referencedComponent.getProject());
+			WorkbenchComponent enclosingComp = enclosingCore.getComponent();
+			WorkbenchComponent refComp = refCore.getComponent();
+			ReferencedComponent actualReferencedComponent = enclosingCore.findReferencedComponent(enclosingComp, refComp);
+			if (actualReferencedComponent != null) {
+				referencedComponent = aReferencedComponent;
+				if(!referencedComponent.isBinary())
+					actualReferencedComponent.setHandle(ModuleURIUtil.fullyQualifyURI(referencedComponent.getProject()));
+				else
+					actualReferencedComponent.setHandle(ModuleURIUtil.archiveComponentfullyQualifyURI(referencedComponent.getName()));
+				actualReferencedComponent.setDependentObject(dependentObject);
+			}
+		} finally {
+			if (enclosingCore != null) {
+				enclosingCore.saveIfNecessary(new NullProgressMonitor());
+				enclosingCore.dispose();
+			}
+			if (refCore != null) {
+				refCore.saveIfNecessary(new NullProgressMonitor());
+				refCore.dispose();
+			}
+		}
+	}
 
+	public String getArchiveName() {
+		return archiveName;
+	}
+
+	public void setArchiveName(String archiveName) {
+		this.archiveName = archiveName;
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualResource.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualResource.java
index c0c601a..541a609 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualResource.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualResource.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -21,6 +21,7 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.eclipse.wst.common.componentcore.ComponentCore;
 import org.eclipse.wst.common.componentcore.internal.ComponentResource;
@@ -29,6 +30,7 @@
 import org.eclipse.wst.common.componentcore.internal.impl.ModuleURIUtil;
 import org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeNode;
 import org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeRoot;
+import org.eclipse.wst.common.componentcore.internal.impl.WorkbenchComponentImpl;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualContainer;
 import org.eclipse.wst.common.componentcore.resources.IVirtualResource;
@@ -36,14 +38,16 @@
 public abstract class VirtualResource implements IVirtualResource {
 
 	protected static final IResource[] NO_RESOURCES = null;
-	private IProject componentProject;
-	private IPath runtimePath;
+	private final IProject componentProject;
+	private final IPath runtimePath;
 	private int hashCode;
 	private String toString;
 	private static final String EMPTY_STRING = ""; //$NON-NLS-1$
 	private IVirtualComponent component;
 	private String resourceType;
 
+	private final ResourceTimestampMappings mapping = new ResourceTimestampMappings();
+
 
 	protected VirtualResource(IProject aComponentProject, IPath aRuntimePath) {
 		componentProject = aComponentProject;
@@ -66,7 +70,8 @@
 			WorkbenchComponent aComponent = moduleCore.getComponent();
 			ComponentResource[] resources = aComponent.findResourcesByRuntimePath(getRuntimePath());
 			aComponent.getResources().removeAll(Arrays.asList(resources));
-		} finally {
+		}
+		finally {
 			if (moduleCore != null) {
 				moduleCore.saveIfNecessary(monitor);
 				moduleCore.dispose();
@@ -78,12 +83,13 @@
 	protected abstract void doDeleteRealResources(int updateFlags, IProgressMonitor monitor) throws CoreException;
 
 	public boolean exists() {
-		// verify all underlying resources exist for the virtual resource to exist
+		// verify all underlying resources exist for the virtual resource to
+		// exist
 		IResource[] resources = getUnderlyingResources();
-		if (resources==null || resources.length==0)
+		if (resources == null || resources.length == 0)
 			return false;
-		for (int i=0; i<resources.length; i++) {
-			if (resources[i]==null || !resources[i].exists())
+		for (int i = 0; i < resources.length; i++) {
+			if (resources[i] == null || !resources[i].exists())
 				return false;
 		}
 		return true;
@@ -108,42 +114,45 @@
 	}
 
 	public IPath[] getProjectRelativePaths() {
-		StructureEdit moduleCore = null;
-		try {
-			moduleCore = StructureEdit.getStructureEditForRead(getProject());
-			if (moduleCore !=null) {
-				WorkbenchComponent aComponent = moduleCore.getComponent();
-				if (aComponent != null) {
-					ResourceTreeRoot root = ResourceTreeRoot.getDeployResourceTreeRoot(aComponent);
-					// still need some sort of loop here to search subpieces of the runtime path.
-					ComponentResource[] componentResources = null;
-	
-					if (root != null) {
-						IPath[] estimatedPaths = null;
-						IPath searchPath = null;
-						do {
-							searchPath = (searchPath == null) ? getRuntimePath() : searchPath.removeLastSegments(1);
-							componentResources = root.findModuleResources(searchPath, ResourceTreeNode.CREATE_NONE);
-							estimatedPaths = findBestMatches(componentResources);
-						} while (estimatedPaths.length==0 && canSearchContinue(componentResources, searchPath));
-						if (estimatedPaths==null || estimatedPaths.length==0)
-							return new IPath[] {getRuntimePath()};
-						return estimatedPaths;
-					}
+
+		WorkbenchComponent aComponent = getReadOnlyComponent();
+		if (aComponent != null) {
+			ResourceTreeRoot root = ResourceTreeRoot.getDeployResourceTreeRoot(aComponent);
+			// still need some sort of loop here to search subpieces of the
+			// runtime path.
+			ComponentResource[] componentResources = null;
+
+			if (root != null) {
+				IPath[] estimatedPaths = null;
+				IPath searchPath = null;
+				do {
+					searchPath = (searchPath == null) ? getRuntimePath() : searchPath.removeLastSegments(1);
+					if (searchPath.isAbsolute())
+						searchPath = searchPath.makeRelative();
+					componentResources = root.findModuleResources(searchPath, ResourceTreeNode.CREATE_NONE);
+					estimatedPaths = findBestMatches(componentResources);
 				}
-			}
-		} finally {
-			if (moduleCore != null) {
-				moduleCore.dispose();
+				while (estimatedPaths.length == 0 && canSearchContinue(componentResources, searchPath));
+				if (estimatedPaths == null || estimatedPaths.length == 0)
+					return new IPath[]{getRuntimePath()};
+				return estimatedPaths;
 			}
 		}
-		return new IPath[] {getRuntimePath()};
+
+		return new IPath[]{getRuntimePath()};
 	}
 
 	public IPath getProjectRelativePath() {
+		if (getRuntimePath().equals(new Path("/"))) {
+			WorkbenchComponent aComponent = getReadOnlyComponent();
+			if (aComponent != null) {
+				if (((WorkbenchComponentImpl) aComponent).getDefaultSourceRoot() != null)
+					return ((WorkbenchComponentImpl) aComponent).getDefaultSourceRoot();
+			}
+		}
 		return getProjectRelativePaths()[0];
 	}
-	
+
 	private boolean canSearchContinue(ComponentResource[] componentResources, IPath searchPath) {
 		return (searchPath.segmentCount() > 0);
 	}
@@ -161,7 +170,7 @@
 				if (currentPath.segmentCount() == aRuntimePath.segmentCount()) {
 					result.add(theComponentResources[i].getSourcePath());
 					continue;
-				}	
+				}
 				currentMatchLength = currentPath.matchingFirstSegments(aRuntimePath);
 				if (currentMatchLength == currentPath.segmentCount() && currentMatchLength > bestMatchLength) {
 					bestMatchLength = currentMatchLength;
@@ -171,15 +180,15 @@
 				}
 			}
 		}
-		if (result.size()>0)
+		if (result.size() > 0)
 			return (IPath[]) result.toArray(new IPath[result.size()]);
 		if (estimatedPath == null)
-			return new IPath[] {};
-		return new IPath[] {estimatedPath};
+			return new IPath[]{};
+		return new IPath[]{estimatedPath};
 	}
 
 	public String getName() {
-		if (getRuntimePath().segmentCount()>0)
+		if (getRuntimePath().segmentCount() > 0)
 			return getRuntimePath().lastSegment();
 		return getRuntimePath().toString();
 	}
@@ -189,11 +198,11 @@
 			component = ComponentCore.createComponent(getProject());
 		return component;
 	}
-    
-	//returns null if the folder is already the root folder
+
+	// returns null if the folder is already the root folder
 	public IVirtualContainer getParent() {
 		if (getRuntimePath().segmentCount() >= 1)
-			return new VirtualFolder(getProject(), getRuntimePath().removeLastSegments(1));
+			return ComponentCore.createFolder(getProject(), getRuntimePath().removeLastSegments(1));
 		return null;
 	}
 
@@ -239,38 +248,24 @@
 
 	public void setResourceType(String aResourceType) {
 		resourceType = aResourceType;
-		StructureEdit moduleCore = null;
-		try {
-			moduleCore = StructureEdit.getStructureEditForRead(getProject());
-			WorkbenchComponent aComponent = moduleCore.getComponent();
-			ComponentResource[] resources = aComponent.findResourcesByRuntimePath(getRuntimePath());
-			for (int i = 0; i < resources.length; i++) {
-				resources[i].setResourceType(aResourceType);
-			}
-		} finally {
-			if (moduleCore != null) {
-				moduleCore.dispose();
-			}
+		WorkbenchComponent aComponent = getReadOnlyComponent();
+		ComponentResource[] resources = aComponent.findResourcesByRuntimePath(getRuntimePath());
+		for (int i = 0; i < resources.length; i++) {
+			resources[i].setResourceType(aResourceType);
 		}
+
 	}
 
 	// TODO Fetch the resource type from the model.
 	public String getResourceType() {
 		if (null == resourceType) {
-			StructureEdit moduleCore = null;
-			try {
-				moduleCore = StructureEdit.getStructureEditForRead(getProject());
-				WorkbenchComponent aComponent = moduleCore.getComponent();
-				ComponentResource[] resources = aComponent.findResourcesByRuntimePath(getRuntimePath());
-				for (int i = 0; i < resources.length; i++) {
-					resourceType = resources[i].getResourceType();
-					return resourceType;
-				}
-			} finally {
-				if (moduleCore != null) {
-					moduleCore.dispose();
-				}
+			WorkbenchComponent aComponent = getReadOnlyComponent();
+			ComponentResource[] resources = aComponent.findResourcesByRuntimePath(getRuntimePath());
+			for (int i = 0; i < resources.length; i++) {
+				resourceType = resources[i].getResourceType();
+				return resourceType;
 			}
+
 		}
 		resourceType = ""; //$NON-NLS-1$
 		return resourceType;
@@ -292,8 +287,11 @@
 		return aRuntimePath.isPrefixOf(getRuntimePath());
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.common.componentcore.resources.IVirtualResource#removeLink(org.eclipse.core.runtime.IPath, int, org.eclipse.core.runtime.IProgressMonitor)
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.wst.common.componentcore.resources.IVirtualResource#removeLink(org.eclipse.core.runtime.IPath,
+	 *      int, org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public void removeLink(IPath aProjectRelativeLocation, int updateFlags, IProgressMonitor monitor) throws CoreException {
 		StructureEdit moduleCore = null;
@@ -309,11 +307,35 @@
 					}
 				}
 			}
-		} finally {
+		}
+		finally {
 			if (moduleCore != null) {
 				moduleCore.saveIfNecessary(monitor);
 				moduleCore.dispose();
 			}
 		}
 	}
+
+	protected final WorkbenchComponent getReadOnlyComponent() {
+		if (!mapping.hasChanged(getProject()) && mapping.hasCacheData(getProject()))
+			return (WorkbenchComponent) mapping.getData(getProject());
+
+		StructureEdit moduleCore = null;
+		WorkbenchComponent component = null;
+		try {
+			moduleCore = StructureEdit.getStructureEditForRead(getProject());
+			if (moduleCore != null) {
+				component = moduleCore.getComponent();
+				mapping.mark(getProject(), component);
+			}
+		}
+		finally {
+			if (moduleCore != null) {
+				moduleCore.dispose();
+			}
+		}
+		return component;
+
+
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditAdapterFactory.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditAdapterFactory.java
index 8a1ebf4..14d94f8 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditAdapterFactory.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditAdapterFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -19,15 +19,11 @@
 import org.eclipse.wst.common.componentcore.ArtifactEdit;
 import org.eclipse.wst.common.componentcore.ModuleCoreNature;
 import org.eclipse.wst.common.componentcore.internal.ArtifactEditModel;
-import org.eclipse.wst.common.componentcore.internal.ModulecorePlugin;
 import org.eclipse.wst.common.componentcore.internal.impl.ArtifactEditModelFactory;
 import org.eclipse.wst.common.componentcore.internal.impl.ModuleURIUtil;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.internal.emfworkbench.edit.EditModelRegistry;
 import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
-import org.eclipse.wst.common.project.facet.core.IFacetedProject;
-import org.eclipse.wst.common.project.facet.core.IProjectFacet;
-import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
 
 /**
  * <p>
@@ -37,9 +33,9 @@
  * Adapts {@see ArtifactEditModel} to an {@see ArtifactEdit) 
  * instance facade, if possible. The following class is 
  * registered with the Platform Adapter Manager in 
- * {@see ModulecorePlugin#start(BundleContext)}
+ * {@see org.eclipse.wst.common.componentcore.internal.ModulecorePlugin#start(BundleContext)}
  * </p>
- * @see ModulecorePlugin
+ * @see org.eclipse.wst.common.componentcore.internal.ModulecorePlugin
  */
 public class ArtifactEditAdapterFactory implements IAdapterFactory {
 
@@ -62,16 +58,12 @@
 				Map params = new HashMap();
 				params.put(ArtifactEditModelFactory.PARAM_MODULE_URI, componentURI);
 				try {
-					IFacetedProject facetedProject = ProjectFacetsManager.create(aProject);
 					String[] editModelIDs = EditModelRegistry.getInstance().getRegisteredEditModelIDs();
 					for (int i=0; i<editModelIDs.length; i++) {
 						try {
-							IProjectFacet facet = ProjectFacetsManager.getProjectFacet(editModelIDs[i]);
-							if (facet != null && facetedProject.hasProjectFacet(facet)) {
-								EditModel editModel = nature.getExistingEditModel(editModelIDs[i],params,edit.isReadOnly());
-								if (editModel !=null)
-									return editModel;
-							}
+							EditModel editModel = nature.getExistingEditModel(editModelIDs[i],params,edit.isReadOnly());
+							if (editModel !=null)
+								return editModel;
 						} catch (Exception e) {
 							continue;
 						}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditRegistryReader.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditRegistryReader.java
index 7fb7950..1eb05c3 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditRegistryReader.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditRegistryReader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -16,12 +16,14 @@
  */
 package org.eclipse.wst.common.componentcore.internal.util;
 
-import java.util.Hashtable;
+import java.util.HashMap;
 import java.util.Iterator;
+import java.util.Map;
 
 import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.core.runtime.SafeRunner;
 import org.eclipse.jem.util.RegistryReader;
 import org.eclipse.wst.common.componentcore.internal.ModulecorePlugin;
 import org.eclipse.wst.common.project.facet.core.IFacetedProject;
@@ -35,69 +37,89 @@
  * Generation - Code and Comments
  */
 public class ArtifactEditRegistryReader extends RegistryReader {
-	/**
-	 * @param registry
-	 * @param plugin
-	 * @param extensionPoint
-	 */
-	Hashtable typeRegistry = new Hashtable();
+
 	static final String ARTIFACT_EDIT_EXTENSION_POINT = "artifactedit"; //$NON-NLS-1$
 	static final String ARTIFACTEDIT = "artifactedit"; //$NON-NLS-1$
 	static final String TYPE = "typeID"; //$NON-NLS-1$
 	static final String ARTIFACTEDITCLASS = "class"; //$NON-NLS-1$
-	private static ArtifactEditRegistryReader instance;
+	
+	private static final ArtifactEditRegistryReader instance = new ArtifactEditRegistryReader();
+	
+	private final Map/*<String, ArtifactEditDescriptor>*/ descriptors = new HashMap();
+	
+	private final Map/*<ArtifactEditDescriptor, IArtifactEditFactory>*/ instances = new HashMap();
 	
 	/**
 	 * @return Returns the instance.
 	 */
 	public static ArtifactEditRegistryReader instance() {
-		if (instance == null) {
-			instance = new ArtifactEditRegistryReader();
-			instance.readRegistry();
-		}
+		/* already initialized and registry read by the time the class initializes */
 		return instance;
 	}
 	
 	public ArtifactEditRegistryReader() {
 		super(ModulecorePlugin.PLUGIN_ID, ARTIFACT_EDIT_EXTENSION_POINT);
+		SafeRunner.run(new ISafeRunnable() {
+
+			public void handleException(Throwable exception) { 
+				ModulecorePlugin.logError(0, exception.getMessage(), exception);
+			}
+
+			public void run() throws Exception {
+				readRegistry();				
+			}
+			
+		});
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
+	/**
 	 * @see org.eclipse.wst.common.frameworks.internal.RegistryReader#readElement(org.eclipse.core.runtime.IConfigurationElement)
 	 */
 	public boolean readElement(IConfigurationElement element) {
-		if (!element.getName().equals(ARTIFACTEDIT))
-			return false;
-
-		IArtifactEditFactory staticCaller = null;
-		String typeID = null;
-		try {
-			typeID = element.getAttribute(TYPE);
-			staticCaller = (IArtifactEditFactory) element.createExecutableExtension(ARTIFACTEDITCLASS);
+		if (ARTIFACTEDIT.equals(element.getName())) {
 			
-		} catch (CoreException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			/* Because the only instance of this type is created from a static singleton 
+			 * field, and the registry is initialized in the constructor of this type, 
+			 * other threads cannot compete with readElement() for access to <i>descriptors</i> 
+			 */
+			String type = element.getAttribute(TYPE);
+			if(type != null)
+				descriptors.put(element.getAttribute(TYPE), new ArtifactEditDescriptor(element));
+			else 
+				ModulecorePlugin.logError(0, "No type attribute is specified for " + //$NON-NLS-1$
+										ModulecorePlugin.PLUGIN_ID + "." + ARTIFACT_EDIT_EXTENSION_POINT +  //$NON-NLS-1$ 
+										" extension in "  + element.getDeclaringExtension().getNamespaceIdentifier(), null);  //$NON-NLS-1$
+			return true;
 		}
-		if (staticCaller != null)
-			addArtifactEdit(typeID,staticCaller);
-		return true;
-	}
-
-	private void addArtifactEdit(String typeID, IArtifactEditFactory staticCaller) {
-		typeRegistry.put(typeID,staticCaller);
+		return false;
 	}
 	
-	public IArtifactEditFactory getArtifactEdit(String typeID) {
-		return (IArtifactEditFactory)typeRegistry.get(typeID);
-	}
+	public synchronized IArtifactEditFactory getArtifactEdit(String typeID) {
+		
+		ArtifactEditDescriptor descriptor = (ArtifactEditDescriptor) descriptors.get(typeID);
+		IArtifactEditFactory factory = null;
+		
+		if(descriptor != null) {  
+			
+			factory = (IArtifactEditFactory) instances.get(descriptor);
+			
+			if(factory == null) {
+				
+				if((factory = descriptor.createFactory()) != null) {
+					instances.put(descriptor, factory);
+				} else {
+					descriptors.remove(descriptor);
+				} 
+			} 
+		}
+		return factory;			
+	} 
 	
+	// TODO Don't like this because it's going to cycle every project facet for each project
 	public IArtifactEditFactory getArtifactEdit(IProject project) {
 		try {
 			IFacetedProject facetedProject = ProjectFacetsManager.create(project);
-			Iterator keys = typeRegistry.keySet().iterator();
+			Iterator keys = descriptors.keySet().iterator();
 			while (keys.hasNext()) {
 				String typeID = (String) keys.next();
 				try {
@@ -112,6 +134,51 @@
 			//Just return null
 		}
 		return null;
+	} 
+	
+	public class ArtifactEditDescriptor {
+		
+		private final IConfigurationElement element;
+		private final String type;
+
+		public ArtifactEditDescriptor(IConfigurationElement configElement) {
+			element = configElement;
+			type = element.getAttribute(TYPE);
+		}
+		
+		/**
+		 * Create and return an {@link IArtifactEditFactory} for the given descriptor or 
+		 * <b>null</b> if there are problems instantiating the extension.
+		 * @return An {@link IArtifactEditFactory} for the given descriptor or 
+		 * <b>null</b> if there are problems instantiating the extension.
+		 */
+		public IArtifactEditFactory createFactory() {
+			
+			final IArtifactEditFactory[] factory = new IArtifactEditFactory[1];
+			
+			SafeRunner.run(new ISafeRunnable() {
+
+				public void handleException(Throwable exception) {
+					ModulecorePlugin.logError(0, exception.getMessage(), exception); 
+				}
+
+				public void run() throws Exception {
+					factory[0] = (IArtifactEditFactory) element.createExecutableExtension(ARTIFACTEDITCLASS); 
+				}
+				
+			});
+			
+			return factory[0]; 
+		}
+
+		/**
+		 * 
+		 * @return The type id of this ArtifactEdit definition 
+		 */
+		public String getType() {
+			return type;
+		} 
+		
 	}
 
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java
new file mode 100644
index 0000000..2cc2fdc
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java
@@ -0,0 +1,260 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.componentcore.internal.util;
+
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.jem.util.RegistryReader;
+import org.eclipse.wst.common.componentcore.ModuleCoreNature;
+import org.eclipse.wst.common.componentcore.internal.ModulecorePlugin;
+import org.eclipse.wst.common.componentcore.internal.resources.ResourceTimestampMappings;
+import org.eclipse.wst.common.componentcore.internal.resources.VirtualArchiveComponent;
+import org.eclipse.wst.common.componentcore.internal.resources.VirtualComponent;
+import org.eclipse.wst.common.componentcore.internal.resources.VirtualFolder;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+
+public class ComponentImplManager  {
+
+	private static final String NO_FACETS = "NONE";//$NON-NLS-1$
+	
+	private static final String COMPONENT_IMPL_EXTENSION_POINT = "componentimpl"; //$NON-NLS-1$
+	private static final String TAG_COMPONENT_IMPL = "componentimpl"; //$NON-NLS-1$
+	private static final String ATT_TYPE = "typeID"; //$NON-NLS-1$
+	private static final String ATT_CLASS = "class"; //$NON-NLS-1$
+
+	private static final ComponentImplManager instance = new ComponentImplManager();
+//	private static final Object LOAD_FAILED = new Object();
+
+	private final Map/* <String, ComponentImplDescriptor> */ descriptors = new Hashtable();
+
+	private final Map/* <ComponentImplDescriptor, IComponentImplFactory> */ instances = new Hashtable();
+	private final ResourceTimestampMappings factoryMap = new ResourceTimestampMappings();
+
+	/**
+	 * @return Returns the instance.
+	 */
+	public static ComponentImplManager instance() {
+		/* already initialized and registry read by the time the class initializes */
+		return instance;
+	}
+
+	public ComponentImplManager() {
+		SafeRunner.run(new ISafeRunnable() {
+
+			public void handleException(Throwable exception) {
+				ModulecorePlugin.logError(0, exception.getMessage(), exception);
+			}
+
+			public void run() throws Exception {
+				new ComponentImplRegistryReader().readRegistry();
+			}
+
+		});
+	}
+
+
+	private IComponentImplFactory getComponentImplFactory(String typeID) {
+
+		ComponentImplDescriptor descriptor = (ComponentImplDescriptor) descriptors.get(typeID);
+		IComponentImplFactory factory = null;
+
+		if (descriptor != null) {
+
+			factory = (IComponentImplFactory) instances.get(descriptor);
+
+			if (factory == null) {
+
+				if ((factory = descriptor.createFactory()) != null) {
+					instances.put(descriptor, factory);
+				} else {
+					descriptors.remove(descriptor);
+				}
+			}
+		}
+		return factory;
+	}
+	 
+	private IComponentImplFactory findFactoryForProject(IProject project){
+		try {
+			IComponentImplFactory factory = null;		
+			
+			if( !factoryMap.hasChanged(project) ) {				
+
+				if( factoryMap.hasCacheError(project))
+					return null;
+				
+				if( factoryMap.hasCacheData(project)) 
+					return (IComponentImplFactory) factoryMap.getData(project);
+			} 
+			
+			IFacetedProject facetedProject = ProjectFacetsManager.create(project);
+			if (facetedProject == null){
+				factory = getComponentImplFactory(NO_FACETS);
+				factoryMap.mark(project, factory);
+				return factory;
+			}
+			Iterator keys = descriptors.keySet().iterator();
+			while (keys.hasNext()) {
+				String typeID = (String) keys.next();
+				if(typeID.equals(NO_FACETS)){
+					continue;
+				}
+				try {
+					IProjectFacet projectFacet = ProjectFacetsManager.getProjectFacet(typeID);
+					if (projectFacet != null && facetedProject.hasProjectFacet(projectFacet)){
+						factory = getComponentImplFactory(typeID);
+						if(null != factory){
+							factoryMap.mark(project, factory);
+							return factory;
+						}
+					}
+				} catch (Exception e) {
+					continue;
+				}
+			}
+			
+		} catch (Exception e) {
+			ModulecorePlugin.logError(0, "Returning null factory for project: " + project, e); //$NON-NLS-1$
+			factoryMap.markError(project);
+		}
+		return null;
+	}
+	 
+	
+	
+	public IVirtualFolder createFolder(IProject aProject, IPath aRuntimePath){
+		try {
+			IComponentImplFactory factory = findFactoryForProject(aProject);
+			if(null != factory){
+				return factory.createFolder(aProject, aRuntimePath);
+			}
+		} catch (Exception e) {
+			// Just return a default folder
+		}
+		return new VirtualFolder(aProject, aRuntimePath);
+	}
+
+	public IVirtualComponent createComponent(IProject project) {
+		try {
+			IComponentImplFactory factory = findFactoryForProject(project);
+			if(null != factory){
+				return factory.createComponent(project);
+			}
+		} catch (Exception e) {
+			// Just return a default component
+		}
+		if (!ModuleCoreNature.isFlexibleProject(project)){
+			return null;
+		}
+		return new VirtualComponent(project, new Path("/")); //$NON-NLS-1$
+	}
+
+	public IVirtualComponent createArchiveComponent(IProject aProject, String aComponentName) {
+		try {
+			IComponentImplFactory factory = findFactoryForProject(aProject);
+			if(null != factory){
+				return factory.createArchiveComponent(aProject, aComponentName, new Path("/")); //$NON-NLS-1$
+			}
+		} catch (Exception e) {
+			// Just return a default archive component
+		}
+		return new VirtualArchiveComponent(aProject, aComponentName, new Path("/")); //$NON-NLS-1$
+	}
+	
+	private class ComponentImplDescriptor {
+
+		private final IConfigurationElement element;
+		private final String type;
+
+		public ComponentImplDescriptor(IConfigurationElement configElement) {
+			element = configElement;
+			type = element.getAttribute(ATT_TYPE);
+		}
+
+		/**
+		 * Create and return an {@link IArtifactEditFactory} for the given descriptor or <b>null</b>
+		 * if there are problems instantiating the extension.
+		 * 
+		 * @return An {@link IArtifactEditFactory} for the given descriptor or <b>null</b> if there
+		 *         are problems instantiating the extension.
+		 */
+		public IComponentImplFactory createFactory() {
+
+			final IComponentImplFactory[] factory = new IComponentImplFactory[1];
+
+			SafeRunner.run(new ISafeRunnable() {
+
+				public void handleException(Throwable exception) {
+					ModulecorePlugin.logError(0, exception.getMessage(), exception);
+				}
+
+				public void run() throws Exception {
+					factory[0] = (IComponentImplFactory) element.createExecutableExtension(ATT_CLASS);
+				}
+
+			});
+
+			return factory[0];
+		}
+
+		/**
+		 * 
+		 * @return The type id of this ArtifactEdit definition
+		 */
+		public String getType() {
+			return type;
+		}
+
+	}
+	
+	private class ComponentImplRegistryReader extends RegistryReader {
+
+		public ComponentImplRegistryReader() {
+			super(ModulecorePlugin.PLUGIN_ID, COMPONENT_IMPL_EXTENSION_POINT);
+		} 
+
+		/**
+		 * @see org.eclipse.wst.common.frameworks.internal.RegistryReader#readElement(org.eclipse.core.runtime.IConfigurationElement)
+		 */
+		public boolean readElement(IConfigurationElement element) {
+			if (TAG_COMPONENT_IMPL.equals(element.getName())) {
+
+				/*
+				 * Because the only instance of this type is created from a static singleton field, and
+				 * the registry is initialized in the constructor of this type, other threads cannot
+				 * compete with readElement() for access to <i>descriptors</i>
+				 */
+				String type = element.getAttribute(ATT_TYPE);
+				if (type != null)
+					descriptors.put(element.getAttribute(ATT_TYPE), new ComponentImplDescriptor(element));
+				else
+					ModulecorePlugin.logError(0, "No type attribute is specified for " + //$NON-NLS-1$
+								ModulecorePlugin.PLUGIN_ID + "." + COMPONENT_IMPL_EXTENSION_POINT + //$NON-NLS-1$ 
+								" extension in " + element.getDeclaringExtension().getNamespaceIdentifier(), null); //$NON-NLS-1$
+				return true;
+			}
+			return false;
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentResolver.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentResolver.java
index c544700..94f8334 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentResolver.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentResolver.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2005 IBM Corporation and others.
+ * Copyright (c) 2001, 2007 IBM Corporation and others.
  * 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:
  *     IBM Corporation - initial API and implementation
  *     
@@ -12,6 +12,8 @@
 package org.eclipse.wst.common.componentcore.internal.util;
 
 import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URL;
 
 import org.eclipse.core.resources.IFile;
@@ -33,12 +35,13 @@
 	private static final String FILE_PROTOCOL = "file:///"; //$NON-NLS-1$
 	private static final String FILE_PROTOCOL2 = "file://"; //$NON-NLS-1$
 	private static final String ROOT_PATH_STRING = Path.ROOT.toString(); //$NON-NLS-1$
+	private static final String HTTP_PROTOCOL = "http:"; //$NON-NLS-1$
 
 	/**
 	 * Various resolvers disagree on how many preceding slashes should
 	 * actually be used. On Win32, 2 slashes results in a URL object where the
 	 * volume is stripped out of the file path as the host name, but on Unix 2
-	 * is the correct number. On Win32. java.io.File.toURL adds only 1 slash,
+	 * is the correct number. On Win32, java.io.File.toURL adds only 1 slash,
 	 * and on Unix it adds 2.
 	 * 
 	 * @param uri
@@ -46,8 +49,24 @@
 	 */
 	private IFile recalculateFile(String uri) {
 		IFile file = null;
-		if (uri != null) {
-			String location = null;
+		String location = null;
+
+		long time0 = -1;
+		if (_DEBUG)
+			time0 = System.currentTimeMillis();
+		if (uri.startsWith(HTTP_PROTOCOL)) {
+			IFile files[] = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocationURI(URI.create(uri));
+			for (int i = 0; i < files.length && file == null; i++) {
+				if (files[i].isAccessible()) {
+					file = files[i];
+				}
+			}
+			if (_DEBUG) {
+				System.out.println("\"" + uri + "\" findFilesForLocationURI:" + (System.currentTimeMillis() - time0));
+				time0 = System.currentTimeMillis();
+			}
+		}
+		else {
 			if (uri.startsWith(FILE_PROTOCOL)) {
 				location = uri.substring(FILE_PROTOCOL.length());
 			}
@@ -65,6 +84,8 @@
 				}
 			}
 		}
+		if (_DEBUG)
+			System.out.println("\"" + location + "\" findFilesForLocation:" + (System.currentTimeMillis() - time0));
 		return file;
 	}
 
@@ -72,20 +93,33 @@
 		if (_DEBUG) {
 			System.out.print("ComponentResolver: resolve \"[{" + publicId + "}{" + systemId + "}]\" from \"" + baseLocation + "\""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 		}
+		// argument sanity checks
 		/*
 		 * Check for a system reference; without one, there's no point in
-		 * continuing.
+		 * continuing (we can't resolve just a public identifier).
 		 */
-		if (systemId == null) {
+		if (systemId == null || systemId.length() == 0) {
 			if (_DEBUG) {
 				System.out.println(" (no system reference)"); //$NON-NLS-1$
 			}
 			return null;
 		}
+
 		/* Recompute the IFile, if needed, from the base location. */
-		if (file == null && baseLocation != null) {
+		if (file == null) {
+			if (baseLocation == null || baseLocation.length() == 0) {
+				/*
+				 * We can't proceed if we lack both an IFile and a system
+				 * reference
+				 */
+				if (_DEBUG) {
+					System.out.println(" (no base location or file given)"); //$NON-NLS-1$
+				}
+				return null;
+			}
 			file = recalculateFile(baseLocation);
 		}
+
 		/*
 		 * If a workspace IFile is (still) not the base point of reference,
 		 * don't continue.
@@ -102,7 +136,7 @@
 			URL testURL = new URL(systemId);
 			if (testURL != null) {
 				if (_DEBUG) {
-					System.out.println(" (reference is a URL)"); //$NON-NLS-1$
+					System.out.println(" (reference is already a URL)"); //$NON-NLS-1$
 				}
 				return null;
 			}
@@ -111,6 +145,20 @@
 			// Continue resolving
 		}
 
+		/* Check for a URI without a scheme, but with a host */
+		try
+		{
+			URI uri = new URI(systemId);
+			if ((uri.getScheme() == null) && (uri.getHost() != null))
+			{
+				return null;
+			}
+		}
+		catch (URISyntaxException use)
+		{
+			// do nothing- we need to check to see if this is a local file
+		}
+
 		/* Check for a system file name as the system reference. */
 		IPath systemPath = new Path(systemId);
 		if (systemPath.toFile().exists()) {
@@ -124,7 +172,7 @@
 		boolean prependFilePrefix2 = baseLocation.startsWith(FILE_PROTOCOL2) && baseLocation.length() > 8;
 
 		String resolvedPath = null;
-		
+
 		IVirtualResource[] virtualResources = null;
 		try {
 			virtualResources = ComponentCore.createResources(file);
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentUtilities.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentUtilities.java
index a546f1a..ba5afa0 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentUtilities.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentUtilities.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -31,19 +31,25 @@
 import org.eclipse.wst.common.componentcore.ComponentCore;
 import org.eclipse.wst.common.componentcore.ModuleCoreNature;
 import org.eclipse.wst.common.componentcore.datamodel.properties.ICreateReferenceComponentsDataModelProperties;
+import org.eclipse.wst.common.componentcore.internal.Property;
+import org.eclipse.wst.common.componentcore.internal.StructureEdit;
+import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
 import org.eclipse.wst.common.componentcore.internal.operation.CreateReferenceComponentsDataModelProvider;
 import org.eclipse.wst.common.componentcore.internal.operation.CreateReferenceComponentsOp;
 import org.eclipse.wst.common.componentcore.internal.operation.RemoveReferenceComponentOperation;
 import org.eclipse.wst.common.componentcore.internal.operation.RemoveReferenceComponentsDataModelProvider;
-import org.eclipse.wst.common.componentcore.internal.resources.VirtualComponent;
+import org.eclipse.wst.common.componentcore.internal.resources.ResourceTimestampMappings;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
+import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
 import org.eclipse.wst.common.componentcore.resources.IVirtualResource;
 import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
 import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper;
 
 public class ComponentUtilities {
+	
+	private static final ResourceTimestampMappings ContextRootMapping = new ResourceTimestampMappings();
 
 	/**
 	 * Ensure the container is not read-only.
@@ -92,6 +98,15 @@
 		return null;
 	}
 
+	public static ArtifactEdit getArtifactEditForRead(IVirtualComponent comp, String type) {
+		if (comp != null) {
+			ArtifactEditRegistryReader reader = ArtifactEditRegistryReader.instance();
+			IArtifactEditFactory factory = reader.getArtifactEdit(type);
+			if (factory != null)
+				return factory.createArtifactEditForRead(comp);
+		}
+		return null;
+	}
 
 
 	public static IFile findFile(IVirtualComponent comp, IPath aPath) throws CoreException {
@@ -99,8 +114,12 @@
 			return null;
 		IVirtualFolder root = comp.getRootFolder();
 		IVirtualResource file = root.findMember(aPath);
-		if (file != null)
-			return (IFile) file.getUnderlyingResource();
+		if (file != null && file.getType() == IVirtualResource.FILE){
+			IResource resource = file.getUnderlyingResource();
+			if(resource.getType() == IResource.FILE){
+				return (IFile) resource;
+			}
+		}
 		return null;
 	}
 
@@ -127,7 +146,7 @@
 				components.add(wbComp);
 			}
 		}
-		VirtualComponent[] temp = (VirtualComponent[]) components.toArray(new VirtualComponent[components.size()]);
+		IVirtualComponent[] temp = (IVirtualComponent[]) components.toArray(new IVirtualComponent[components.size()]);
 		return temp;
 	}
 	
@@ -167,7 +186,10 @@
 	}
 
 	public static IVirtualComponent findComponent(Resource aResource) {
-		return (IVirtualComponent)WorkbenchResourceHelper.getFile(aResource).getAdapter(IVirtualComponent.class);
+		IFile file = WorkbenchResourceHelper.getFile(aResource);
+		if (file == null)
+			return null;
+		return (IVirtualComponent)file.getAdapter(IVirtualComponent.class);
 	}
 
 //	public static JavaProjectMigrationOperation createFlexJavaProjectForProjectOperation(IProject project) {
@@ -232,5 +254,82 @@
 		}
 		return (IVirtualComponent[]) result.toArray(new IVirtualComponent[result.size()]);
 	}
+	
+	/**
+	 * This method will retrieve the context root for the associated workbench module which is used
+	 * by the server at runtime.  This method is not yet completed as the context root has to be
+	 * abstracted and added to the workbenchModule model.  This API will not change though.
+	 * Returns null for now.
+	 * 
+	 * @return String value of the context root for runtime of the associated module
+	 */
+	public static String getServerContextRoot(IProject project) {		
+		
+		if(!ContextRootMapping.hasChanged(project)) {
+			/*Simply return the cached data*/
+			String data = null;
+			if(!ContextRootMapping.hasCacheError(project) && ContextRootMapping.hasCacheData(project))
+				data = (String) ContextRootMapping.getData(project);
+			return data;
+		}
+		
+		StructureEdit moduleCore = null;
+		WorkbenchComponent wbComponent = null;
+		try {
+			moduleCore = StructureEdit.getStructureEditForRead(project);
+			if (moduleCore == null || moduleCore.getComponent() == null) {
+				ContextRootMapping.markError(project);
+				return null;
+			}
+			wbComponent = moduleCore.getComponent();
+		} finally {
+			if (moduleCore != null) {
+				moduleCore.dispose();
+			}
+		}
+		List existingProps = wbComponent.getProperties();
+		for (int i = 0; i < existingProps.size(); i++) {
+			Property prop = (Property) existingProps.get(i);
+			if(prop.getName().equals(IModuleConstants.CONTEXTROOT)){
+				ContextRootMapping.mark(project, prop.getValue());
+				return prop.getValue();
+			}
+		}		
+		ContextRootMapping.markError(project);
+		// If all else fails...
+		return null;
+	}
+	
+	/**
+	 * This method will set the context root on the associated workbench module with the given string
+	 * value passed in.  This context root is used by the server at runtime.  This method is not yet
+	 * completed as the context root still needs to be abstracted and added to the workbench module
+	 * model.  This API will not change though.
+	 * Does nothing as of now.
+	 * 
+	 * @param contextRoot string
+	 */
+	public static void setServerContextRoot(IProject project, String contextRoot) {
+		IVirtualComponent comp = ComponentCore.createComponent(project);
+		comp.setMetaProperty(IModuleConstants.CONTEXTROOT, contextRoot);
+	}
 
-}
+	/**
+	 * @deprecated use {@link #getDeployUriOfComponent(IVirtualReference, String)}
+	 * @param reference
+	 * @return
+	 */
+	public static String getDeployUriOfUtilComponent(IVirtualReference reference){
+		return ComponentUtilities.getDeployUriOfComponent(reference, ".jar"); //$NON-NLS-1$
+	}
+
+	public static String getDeployUriOfComponent(IVirtualReference reference, String extension) {
+		String archiveName = reference.getArchiveName();
+		String uri = null;
+		if( archiveName != null && !archiveName.equals("") ){ //$NON-NLS-1$
+			uri = reference.getRuntimePath() + "/" + reference.getArchiveName(); //$NON-NLS-1$
+		}else{
+			uri = reference.getRuntimePath() + "/" + reference.getReferencedComponent().getProject().getName() + extension; //$NON-NLS-1$
+		}
+		return uri;
+	}}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/EclipseResourceAdapter.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/EclipseResourceAdapter.java
index 088edc0..0109525 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/EclipseResourceAdapter.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/EclipseResourceAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -29,8 +29,7 @@
 public class EclipseResourceAdapter extends AdapterImpl implements Adapter {
 
 	public static final Class ADAPTER_TYPE = EclipseResourceAdapter.class;
-	private IResource resource;
-	private boolean hasSearchFailed = false;
+	private IResource resource; 
 
 	/*
 	 * (non-Javadoc)
@@ -41,25 +40,28 @@
 		if (aNotification.getFeature() == ComponentcorePackage.eINSTANCE.getComponentResource_SourcePath()) {
 			if (aNotification.getEventType() == Notification.SET) {
 				resource = null;
-				hasSearchFailed = false;
+				
 			}
 		}
 	}
 
-	public IResource getEclipseResource() {
-		if (resource != null || hasSearchFailed)
-			return resource;
+	public IResource getEclipseResource() { 
 		synchronized (this) {
 			if (resource == null) {
+
+				IProject container = null;
 				ComponentResource moduleResource = (ComponentResource) getTarget();
-				IPath sourcePath = moduleResource.getSourcePath();
-				IProject container = StructureEdit.getContainingProject(moduleResource.getComponent());
-				if (container != null)
-					resource = container.findMember(sourcePath); 
-				if(resource == null)
-					resource = ResourcesPlugin.getWorkspace().getRoot().findMember(sourcePath); 
-				
-				hasSearchFailed = resource == null;
+				if (moduleResource != null) {
+					IPath sourcePath = moduleResource.getSourcePath();
+					if (moduleResource.getOwningProject() != null)
+						container = moduleResource.getOwningProject();
+					else
+						container = StructureEdit.getContainingProject(moduleResource.getComponent());
+					if (container != null)
+						resource = container.findMember(sourcePath); 
+					if(resource == null)
+						resource = ResourcesPlugin.getWorkspace().getRoot().findMember(sourcePath);
+				}
 			}
 		}
 		return resource;
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/HRefTranslator.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/HRefTranslator.java
index 3bcd8b7..aba016c 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/HRefTranslator.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/HRefTranslator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
  * 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
@@ -20,6 +20,7 @@
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
 import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.internal.emf.resource.CompatibilityXMIResource;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 import org.eclipse.wst.common.internal.emf.resource.TranslatorPath;
 
@@ -64,13 +65,33 @@
 	 * @see org.eclipse.wst.common.internal.emf.resource.Translator#convertStringToValue(java.lang.String,
 	 *      org.eclipse.emf.ecore.EObject)
 	 */
-	public Object convertStringToValue(String aValue, EObject anOwner) { 
-		WorkbenchComponent earComp = (WorkbenchComponent)anOwner.eContainer();
-		IVirtualComponent virtualComp = ComponentCore.createComponent(StructureEdit.getContainingProject(earComp));
-		ArtifactEdit edit = (ArtifactEdit)virtualComp.getAdapter(ArtifactEdit.class);
-		if (edit == null) return null;
-		Resource res = edit.getContentModelRoot().eResource();
-		return res.getEObject(aValue);
+	public Object convertStringToValue(String aValue, EObject anOwner) {
+		Object retVal = null;
+		if (aValue != null)
+		{
+			Resource res = null;
+			try {
+				WorkbenchComponent earComp = (WorkbenchComponent)anOwner.eContainer();
+				IVirtualComponent virtualComp = ComponentCore.createComponent(StructureEdit.getContainingProject(earComp));
+				ArtifactEdit edit = (ArtifactEdit)virtualComp.getAdapter(ArtifactEdit.class);
+				if (edit != null)
+				{
+					EObject contentModelRoot = edit.getContentModelRoot(); 
+					if( contentModelRoot != null )
+					{
+						res = contentModelRoot.eResource();
+						if (res != null)
+							retVal = res.getEObject(aValue);
+					}
+				}
+			} finally {
+//			if ((res != null) && res.getResourceSet() != null) {
+//				res.getResourceSet().getResources().remove(res);
+//				res.unload();
+//			}
+			}
+		}
+		return retVal;
 	}
 
 	/*
@@ -81,8 +102,14 @@
 	 */
 	public String convertValueToString(Object aValue, EObject anOwner) { 
 		String frag = null;
-		if (((EObject)aValue).eResource() != null)
-			frag = ((EObject)aValue).eResource().getURIFragment((EObject)aValue);
+		Resource theResource = ((EObject)aValue).eResource();
+		if (theResource != null)
+		{
+			if (theResource instanceof CompatibilityXMIResource)
+				frag = theResource.getURIFragment((EObject)aValue);
+			else
+				frag = null;
+		}
 		else
 			frag = EcoreUtil.getID((EObject)aValue);
 		return frag;
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/IComponentImplFactory.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/IComponentImplFactory.java
new file mode 100644
index 0000000..8673b16
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/IComponentImplFactory.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.componentcore.internal.util;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
+
+public interface IComponentImplFactory {
+
+	public IVirtualComponent createComponent(IProject aProject);
+	
+	public IVirtualFolder createFolder(IProject aProject, IPath aRuntimePath);
+	
+	public IVirtualComponent createArchiveComponent(IProject aProject, String archiveLocation, IPath aRuntimePath);
+
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/IModuleConstants.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/IModuleConstants.java
index 3eab079..f1c98d0 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/IModuleConstants.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/IModuleConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -11,6 +11,7 @@
 package org.eclipse.wst.common.componentcore.internal.util;
 
 import org.eclipse.core.runtime.Path;
+import org.eclipse.wst.common.componentcore.internal.StructureEdit;
 
 /**
  * <p>
@@ -19,10 +20,13 @@
  */
 public interface IModuleConstants {
 	
+	public static final String DOT_SETTINGS =  ".settings"; //$NON-NLS-1$
+	
 	public final static String COMPONENT_FILE_NAME = ".component"; //$NON-NLS-1$
-	public final static Path COMPONENT_FILE_PATH = new Path(".settings/"+COMPONENT_FILE_NAME); //$NON-NLS-1$
+	public final static Path COMPONENT_FILE_PATH = new Path(StructureEdit.MODULE_META_FILE_NAME);
     public final static String WTPMODULE_FILE_NAME = ".wtpmodules"; //$NON-NLS-1$
-	public final static Path WTPMODULE_FILE_PATH = new Path(WTPMODULE_FILE_NAME); //$NON-NLS-1$
+    public final static Path R1_MODULE_META_FILE_PATH = new Path(".settings/.component"); //$NON-NLS-1$
+	public final static Path WTPMODULE_FILE_PATH = new Path(WTPMODULE_FILE_NAME);
 	public final static String MODULE_PLUG_IN_ID = "org.eclipse.wst.common.modulecore"; //$NON-NLS-1$
 	public final static String MODULE_NATURE_ID = "org.eclipse.wst.common.modulecore.ModuleCoreNature"; //$NON-NLS-1$
 
@@ -40,5 +44,7 @@
     
     //Property Constants
     public final static String PROJ_REL_JAVA_OUTPUT_PATH = "java-output-path"; //$NON-NLS-1$ 
+    
+    public final static String CONTEXTROOT = "context-root"; //$NON-NLS-1$
 	 
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ModuleCoreMessages.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ModuleCoreMessages.java
new file mode 100644
index 0000000..b3e395d
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ModuleCoreMessages.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.common.componentcore.internal.util;
+
+import org.eclipse.osgi.util.NLS;
+
+public class ModuleCoreMessages extends NLS {
+
+	private static final String BUNDLE_NAME = "modulecoreNLS"; //$NON-NLS-1$
+	
+	private ModuleCoreMessages() {
+		//do not instantiate
+	}
+	
+	static {
+		NLS.initializeMessages(BUNDLE_NAME, ModuleCoreMessages.class);
+	}
+	
+	public static String Acquiring_ArtifactEdit_For_Read_Exception;
+	public static String Acquiring_ArtifactEdit_For_Write_Exception;
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesTranslator.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesTranslator.java
index 4f5f383..b88af6b 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesTranslator.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesTranslator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
  * 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
@@ -30,13 +30,6 @@
 		super(PROJECT_MODULES, ComponentcorePackage.eINSTANCE.getProjectComponents());
 	}	
 	
-//	public void setMOFValue(Notifier owner, Object value, int newIndex) {		
-//		super.setMOFValue(owner, value, newIndex);
-//		EObject target = ((EObject)value);
-//		IProject project = ProjectUtilities.getProject(target);
-//		if(project != null)
-//			target.eSet(ComponentcorePackage.eINSTANCE.getProjectComponents_ProjectName(), project.getName());
-//	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.wst.common.internal.emf.resource.Translator#getChildren(java.lang.Object, int)
 	 */
@@ -49,6 +42,7 @@
 	private static Translator[] createWTPModulesTranslator() {
 		return new Translator[] {
 				IDTranslator.INSTANCE,
+				new Translator(PROJECT_VERSION, MODULE_CORE_PKG.getProjectComponents_Version(), DOM_ATTRIBUTE), 
 				createWBModuleTranslator(MODULE_CORE_PKG.getProjectComponents_Components())
 		};
 	}
@@ -99,6 +93,7 @@
 			new IPathTranslator(RUNTIME_PATH, MODULE_CORE_PKG.getReferencedComponent_RuntimePath(), DOM_ATTRIBUTE),
 			new URITranslator(HANDLE, MODULE_CORE_PKG.getReferencedComponent_Handle(), DOM_ATTRIBUTE),
 			new HRefTranslator(DEP_OBJECT,MODULE_CORE_PKG.getReferencedComponent_DependentObject()),
+			new Translator(ARCHIVE_NAME, MODULE_CORE_PKG.getReferencedComponent_ArchiveName(), DOM_ATTRIBUTE),
 			new DependencyTypeTranslator()
 		});
 		return result;
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesXmlMapperI.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesXmlMapperI.java
index cc3ee7a..9ed9de9 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesXmlMapperI.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesXmlMapperI.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
  * 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
@@ -31,5 +31,7 @@
 	String PROPERTY_NAME = "name";//$NON-NLS-1$
 	String PROPERTY_VALUE = "value";//$NON-NLS-1$
 	String RESOURCE_TYPE = "resource-type";//$NON-NLS-1$
+	String ARCHIVE_NAME="archiveName";//$NON-NLS-1$
+	String PROJECT_VERSION="project-version";
 	
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ZipFileExporter.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ZipFileExporter.java
index 7be0c31..cc0a5b6 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ZipFileExporter.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ZipFileExporter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
  * 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
@@ -28,7 +28,6 @@
  */
 public class ZipFileExporter {
 	private ZipOutputStream outputStream;
-	private StringBuffer manifestContents;
 
 	private boolean useCompression = true;
 
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualComponent.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualComponent.java
index 6adb71d..7de081d 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualComponent.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -43,6 +43,11 @@
 	 * @return The name of the component.
 	 */
 	String getName();
+	
+	/**
+	 * @return The deployed name of the component.
+	 */
+	String getDeployedName();
 
 	/**
 	 * The componentTypeId is used to understand how this component should be edited and deployed.
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualReference.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualReference.java
index 688cf12..6ef2274 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualReference.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * 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
@@ -12,6 +12,7 @@
 
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.wst.common.componentcore.internal.DependencyType;
 
 /**
@@ -86,5 +87,24 @@
 	 * @return the referenced component.
 	 */
 	public IVirtualComponent getReferencedComponent();
+	
+	/**
+	 * Set the referenced component that is "targeted" by the reference and will be absorbed by the enclosing component. 
+	 * @param referencedComponent
+	 */
+	public void setReferencedComponent(IVirtualComponent referencedComponent, EObject dependentObject);
+	
+	
+	/**
+	 * Get the archive name of the referenced component
+	 * @return
+	 */
+	public String getArchiveName();
 
+	/**
+	 * Set the archive name of the referenced component
+	 * @param archiveName
+	 */
+	public void setArchiveName(String archiveName);
+	
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/plugin.properties b/plugins/org.eclipse.wst.common.modulecore/plugin.properties
index aef7448..abd0a89 100644
--- a/plugins/org.eclipse.wst.common.modulecore/plugin.properties
+++ b/plugins/org.eclipse.wst.common.modulecore/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2005 IBM Corporation and others.
+# Copyright (c) 2003, 2007 IBM Corporation and others.
 # 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
@@ -9,3 +9,5 @@
 # IBM Corporation - initial API and implementation
 ###############################################################################
 provider=Eclipse.org
+
+Bundle-Name.0 = Modulecore Plug-in
diff --git a/plugins/org.eclipse.wst.common.modulecore/plugin.xml b/plugins/org.eclipse.wst.common.modulecore/plugin.xml
index a93e275..52abf91 100644
--- a/plugins/org.eclipse.wst.common.modulecore/plugin.xml
+++ b/plugins/org.eclipse.wst.common.modulecore/plugin.xml
@@ -30,14 +30,20 @@
             factoryClass="org.eclipse.wst.common.componentcore.internal.impl.ModuleStructuralModelFactory">
          <editModelResource
                autoload="false"
-               URI=".settings/.component"/>
+               URI=".settings/org.eclipse.wst.common.component"/>
       </editModel> 
    </extension>
 	
 	<extension point="org.eclipse.core.runtime.contentTypes">
  			<file-association
 				content-type="org.eclipse.core.runtime.xml"
+				file-names="org.eclipse.wst.common.component"/>
+			<file-association
+				content-type="org.eclipse.core.runtime.xml"
 				file-names=".component"/>
+			<file-association
+				content-type="org.eclipse.core.runtime.xml"
+				file-names=".wtpmodules"/>
 	</extension>
 
 	<extension point="org.eclipse.team.core.ignore">
@@ -47,6 +53,8 @@
 	</extension>
 	<extension-point id="ComponentProjectMigrator" name="ComponentProjectMigrator" schema="schema/ComponentProjectMigrator.exsd"/>
 	<extension-point id="artifactedit" name="Component Artifact Edit" schema="schema/artifactedit.exsd"/>
+    <extension-point id="componentimpl" name="componentimpl" schema="schema/componentimpl.exsd"/>
+	<extension-point id="resourceFactories" name="Resource Factory Association (Internal)" schema="schema/resourceFactories.exsd"/>
 	
 	<!-- Contribute a URIResolverExtension for flexible projects -->
 	<extension point="org.eclipse.wst.common.uriresolver.resolverExtensions">
@@ -62,8 +70,74 @@
     <factory 
       class="org.eclipse.wst.common.componentcore.datamodel.FacetDataModelConfigAdapter$Factory" 
       adaptableType="org.eclipse.wst.common.frameworks.datamodel.IDataModel">
-      <adapter type="org.eclipse.wst.common.project.facet.core.IActionConfig"/>
+      <adapter type="org.eclipse.wst.common.project.facet.core.ActionConfig"/>
     </factory>
   </extension>
+  
+  <extension
+         id="ModuleCoreValidator"
+         name="ModuleCore Validator"
+         point="org.eclipse.wst.validation.validator">
+      <validator>
+      	<projectNature
+               id="org.eclipse.wst.common.modulecore.ModuleCoreNature">
+         </projectNature>
+         <filter
+               objectClass="org.eclipse.core.resources.IFile"
+               caseSensitive="false"
+               nameFilter="*.wtpmodules">
+         </filter>
+         <filter
+               objectClass="org.eclipse.core.resources.IFile"
+               caseSensitive="false"
+               nameFilter="*.component">
+         </filter>
+		   <markerId
+               	   markerIdValue="ModuleCoreValidatorMarker">
+         </markerId>
+         <helper      
+               class="org.eclipse.wst.common.componentcore.internal.ModuleCoreValidatorHelper">
+         </helper>
+         <run
+               class="org.eclipse.wst.common.componentcore.internal.ModuleCoreValidator">
+         </run>
+      </validator>
+   </extension>
+
+<extension
+         id="ModuleCoreValidatorMarker"
+         name="ModuleCore Validation Marker"
+         point="org.eclipse.core.resources.markers">
+      <super
+            type="org.eclipse.wst.validation.problemmarker">
+      </super>
+      <persistent
+            value="true">
+      </persistent>
+      <attribute
+            name="owner">
+      </attribute>
+      <attribute
+            name="validationSeverity">
+      </attribute>
+      <attribute
+            name="targetObject">
+      </attribute>
+      <attribute
+            name="groupName">
+      </attribute>
+      <attribute
+            name="messageId">
+      </attribute>
+</extension> 
+
+   <!-- Register the nature id with the EMFNature -->
+   <extension
+         point="org.eclipse.jem.util.nature_registration">
+      <nature
+            id="org.eclipse.wst.common.modulecore.ModuleCoreNature">
+      </nature>
+   </extension> 
+  
    
 </plugin>
diff --git a/plugins/org.eclipse.wst.common.modulecore/schema/artifactedit.exsd b/plugins/org.eclipse.wst.common.modulecore/schema/artifactedit.exsd
index b11df64..c46f74e 100644
--- a/plugins/org.eclipse.wst.common.modulecore/schema/artifactedit.exsd
+++ b/plugins/org.eclipse.wst.common.modulecore/schema/artifactedit.exsd
@@ -6,7 +6,7 @@
          <meta.schema plugin="org.eclipse.wst.common.modulecore" id="artifactedit" name="Component Artifact Edit"/>
       </appInfo>
       <documentation>
-         This is used to contribute an artifact edit model type.
+         This is for INTERNAL use only!  It is used for the base artifact edit types only.
       </documentation>
    </annotation>
 
@@ -17,21 +17,21 @@
          <attribute name="point" type="string" use="required">
             <annotation>
                <documentation>
-                  
+                  a fully qualified identifier of the target extension point 
                </documentation>
             </annotation>
          </attribute>
          <attribute name="id" type="string">
             <annotation>
                <documentation>
-                  
+                  an optional identifier of the extension instance 
                </documentation>
             </annotation>
          </attribute>
          <attribute name="name" type="string">
             <annotation>
                <documentation>
-                  
+                  an optional name of the extension instance 
                </documentation>
                <appInfo>
                   <meta.attribute translatable="true"/>
@@ -46,14 +46,14 @@
          <attribute name="typeID" type="string" use="required">
             <annotation>
                <documentation>
-                  
+                  The type this artifactEdit contributes to, for example, the facet id which is associated with projects which should use this artifactEdit.
                </documentation>
             </annotation>
          </attribute>
          <attribute name="class" type="string" use="required">
             <annotation>
                <documentation>
-                  
+                  The name of the actual artifact edit class implementation which extends org.eclipse.wst.common.componentcore.ArtifactEdit.
                </documentation>
             </annotation>
          </attribute>
diff --git a/plugins/org.eclipse.wst.common.modulecore/schema/componentimpl.exsd b/plugins/org.eclipse.wst.common.modulecore/schema/componentimpl.exsd
new file mode 100644
index 0000000..667317e
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/schema/componentimpl.exsd
@@ -0,0 +1,104 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.wst.common.modulecore" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.wst.common.modulecore" id="componentimpl" name="componentimpl"/>
+      </appinfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="componentimpl">
+      <complexType>
+         <attribute name="typeID" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.wst.common.componentcore.resources.IVirtualComponent"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiInfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/plugins/org.eclipse.wst.common.modulecore/schema/resourceFactories.exsd b/plugins/org.eclipse.wst.common.modulecore/schema/resourceFactories.exsd
new file mode 100644
index 0000000..dd43bdb
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/schema/resourceFactories.exsd
@@ -0,0 +1,147 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.wst.common.modulecore">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.wst.common.modulecore" id="resourceFactories" name="Resource Factory Association (Internal)"/>
+      </appInfo>
+      <documentation>
+         An *internal* extension point that declares an association between a short-segment filename and a Resource.Factory.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="resourceFactory"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="resourceFactory">
+      <annotation>
+         <documentation>
+            Associates a short name (e.g. &quot;web.xml&quot;) with the appropriate Resource.Factory to create the Resource type when loading files of the declared shortname.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="contentTypeBinding" minOccurs="0" maxOccurs="1"/>
+         </sequence>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Declares an implementation of &lt;code&gt;org.eclipse.emf.ecore.resource.Resource.Factory&lt;/code&gt;.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.emf.ecore.resource.Resource.Factory"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="shortSegment" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Declares the short segment of a filename that the resource factory applies to (e.g. &quot;web.xml&quot;).
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="isDefault" type="boolean" use="default" value="true">
+            <annotation>
+               <documentation>
+                  If multiple factories are declared for the same fileName - then the &quot;default&quot; is used.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="contentTypeBinding">
+      <annotation>
+         <appInfo>
+            <meta.element labelAttribute="contentTypeId"/>
+         </appInfo>
+         <documentation>
+            Advertises that the containing editor understands the given content type and is suitable for editing files of that type.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="contentTypeId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The content type identifier. This is an ID defined by the &apos;org.eclipse.core.runtime.contentTypes&apos; extension point.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.wst.common.ui/.classpath b/plugins/org.eclipse.wst.common.ui/.classpath
deleted file mode 100644
index 751c8f2..0000000
--- a/plugins/org.eclipse.wst.common.ui/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/plugins/org.eclipse.wst.common.ui/.cvsignore b/plugins/org.eclipse.wst.common.ui/.cvsignore
deleted file mode 100644
index 0aa63e1..0000000
--- a/plugins/org.eclipse.wst.common.ui/.cvsignore
+++ /dev/null
@@ -1,7 +0,0 @@
-bin
-ui.jar
-build.xml
-temp.folder
-org.eclipse.wst.common.ui_1.0.0.jar
-@dot
-src.zip
diff --git a/plugins/org.eclipse.wst.common.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.ui/META-INF/MANIFEST.MF
deleted file mode 100644
index 8ae7957..0000000
--- a/plugins/org.eclipse.wst.common.ui/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,20 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Eclipse Base UI extensions
-Bundle-SymbolicName: org.eclipse.wst.common.ui; singleton:=true
-Bundle-Version: 1.0.0
-Bundle-Activator: org.eclipse.core.internal.compatibility.PluginActivator
-Bundle-Vendor: Eclipse.org
-Bundle-Localization: plugin
-Export-Package: org.eclipse.wst.common.ui.internal,
- org.eclipse.wst.common.ui.internal.dialogs,
- org.eclipse.wst.common.ui.internal.dnd,
- org.eclipse.wst.common.ui.internal.viewers,
- org.eclipse.wst.common.ui.provisional.editors
-Require-Bundle: org.eclipse.core.runtime.compatibility,
- org.eclipse.ui.ide,
- org.eclipse.ui,
- org.eclipse.core.runtime,
- org.eclipse.core.resources
-Eclipse-AutoStart: true
-Plugin-Class: org.eclipse.wst.common.ui.internal.UIPlugin
diff --git a/plugins/org.eclipse.wst.common.ui/README.txt b/plugins/org.eclipse.wst.common.ui/README.txt
deleted file mode 100644
index 4fc93df..0000000
--- a/plugins/org.eclipse.wst.common.ui/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-UI Utility classes for actions, drag'n'drop and wizards.
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.ui/about.html b/plugins/org.eclipse.wst.common.ui/about.html
deleted file mode 100644
index 6f6b96c..0000000
--- a/plugins/org.eclipse.wst.common.ui/about.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.ui/build.properties b/plugins/org.eclipse.wst.common.ui/build.properties
deleted file mode 100644
index 36e8b2c..0000000
--- a/plugins/org.eclipse.wst.common.ui/build.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-bin.includes = plugin.properties,\
-               plugin.xml,\
-               .,\
-               META-INF/,\
-               about.html
-jars.compile.order = .
-source.. = src/
-output.. = bin/
-src.includes = component.xml
diff --git a/plugins/org.eclipse.wst.common.ui/component.xml b/plugins/org.eclipse.wst.common.ui/component.xml
deleted file mode 100644
index d3d9ccc..0000000
--- a/plugins/org.eclipse.wst.common.ui/component.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<component xmlns="http://eclipse.org/wtp/releng/tools/component-model"
-	name="org.eclipse.wst.common">
-	<component-depends unrestricted="true"></component-depends>
-	<plugin id="org.eclipse.wst.common.ui" fragment="false" />
-	<plugin id="org.eclipse.wst.common.ui.properties" fragment="false" />
-	<plugin id="org.eclipse.wst.common.uriresolver" fragment="false" />
-	
-<!--	<description url="http://eclipse.org/webtools/wst/components/common/overview.html" /> -->
-
-<!--	<package name="org.eclipse.wst.common.ui.viewers"> -->
-<!--		<type name="SelectSingleFileView" />  -->  <!-- ?, does eclipse provide better support? -->
-<!--		<type name="ResourceFilter" /> -->
-<!--		<type name="SelectMultiFilePage" /> -->
-<!--		<type name="SelectSingleFilePage" /> -->
-<!--		<type name="TableNavigator" /> -->       <!-- No, should be in eclipse base -->
-<!--		<type name="NavigableTableViewer" /> --> <!-- No, should be in eclipse base -->
-<!--	</package> -->
-<!--	<package name="org.eclipse.wst.common.ui.actionhandler.action"> -->
-<!--		<type name="CutAction" />  -->    <!-- No to these four,  should be removed? -->
-<!--		<type name="PasteAction" /> -->
-<!--		<type name="CopyAction" />  -->
-<!--		<type name="EditAction" /> -->
-<!--	</package>  -->
-<!--	<package name="org.eclipse.wst.common.ui"> -->
-<!--  	<type name="UIPlugin" />  -->    <!-- No, delete this -->
-<!-- 	<type name="OverlayIconManager" />  --> <!--  No -->
-<!--  	<type name="WindowUtility" />  -->   <!-- Remove class, clean up xsd.ui -->
-<!--    <type name="ImageFactory" />  -->   <!-- No -->
-<!--	</package> -->
-<!--	<package name="org.eclipse.wst.common.ui.wizards">  -->
-<!--  		<type name="ExampleProjectCreationOperation" />  -->  <!-- referenced externally only within package (ExampleProjectCreationWizardPage -->
-<!-- 		<type name="ExampleProjectCreationWizardPage" /> --> <!-- referenced externally only within package (ExampleProjectCreationWizard, and Operation -->
-<!--  		<type name="ExampleProjectCreationWizard" />  --> <!-- referenced by XMLExampleProjectCreationWizard, which is deprecated and going to be removed in M4  -->
-<!--	</package> -->
-<!--	<package name="org.eclipse.wst.common.ui.dnd"> -->
-<!--		<type name="ViewerDropAdapter" />  -->
-<!--		<type name="DragAndDropCommand" /> -->  <!-- referenced externally only within package -->
-<!--		<type name="DragAndDropManager" /> -->  <!--   -->
-<!--		<type name="ObjectTransfer" />  -->
-<!--		<type name="DefaultDragAndDropCommand" />  -->
-<!--		<type name="ViewerDragAdapter" /> -->
-<!--	</package>  -->
-<!--	<package name="org.eclipse.wst.common.ui.resource"> -->
-<!--		<type name="ResourceDeleteListener" />  -->  <!-- no references -->
-<!--	</package> -->
-<!--	<package name="org.eclipse.wst.common.ui.dialogs">  -->
-<!--		<type name="SelectSingleFileDialog" />  -->    <!-- No, should look into base for support? -->
-<!--	</package>  -->
-<!--	<package name="org.eclipse.wst.common.ui.actionhandler">
-		<type name="ActionHandlerListener" />
-	</package>
--->
-<!-- provisional APIs -->
-<!--
-	<package name="org.eclipse.wst.common.uriresolver">
-		<type name="URIResolverPlugin"  subclass="false" instantiate="false"/>
-		<type name="URIResolver" implement="false"/>
-		<type name="URIResolverExtension" implement="true"/>
-	</package>
--->
-</component>
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.ui/plugin.properties b/plugins/org.eclipse.wst.common.ui/plugin.properties
deleted file mode 100644
index eb3402d..0000000
--- a/plugins/org.eclipse.wst.common.ui/plugin.properties
+++ /dev/null
@@ -1,132 +0,0 @@
-! SelectSingleFilePage and SelectMultiFilePage
-_UI_LABEL_SOURCE_FILES   = Workbench Files
-_UI_LABEL_SELECTED_FILES = Selected Files
-
-_UI_IMPORT_BUTTON          = Import Files...
-_UI_IMPORT_BUTTON_TOOL_TIP = Import files from file system
-
-
-! SelectMultiFilePage
-! NOTE TO TRANSLATOR: the following three lines refers to _UI_LABEL_SELECTED_FILES label above
-_UI_ADD_BUTTON_TOOL_TIP    = Add files to Selected Files list.
-_UI_REMOVE_BUTTON_TOOL_TIP = Remove files from Selected Files list.
-_UI_REMOVE_ALL_BUTTON_TOOL_TIP =  Remove all files from Selected Files list.
-
-! NOTE TO TRANSLATOR: No translation needed of following three lines
-_UI_ADD_BUTTON             = >
-_UI_REMOVE_BUTTON          = <
-_UI_REMOVE_ALL_BUTTON      = <<
-
-! SelectJavaProjectView
-_UI_LABEL_CHOOSE_FOLDER = Select a project or folder:
-
-! SelectJavaProjectDialog
-_UI_LABEL_FOLDER_SELECTION = Container Selection
-
-! TextViewerOperationAction
-_UI_MENU_COPY         = &Copy
-_UI_MENU_CUT          = Cu&t
-_UI_MENU_DELETE       = Delete
-_UI_MENU_PASTE        = &Paste
-_UI_MENU_PREFIX       = Prefix
-_UI_MENU_REDO         = Redo
-_UI_MENU_SELECT_ALL   = Select All
-_UI_MENU_SHIFT_LEFT   = Shift Left
-_UI_MENU_SHIFT_RIGHT  = Shift Right
-_UI_MENU_STRIP_PREFIX = Strip Prefix
-_UI_MENU_UNDO         = Undo
-
-! SourceViewerGotoLineAction
-_UI_MENU_GOTO_LINE           = Go To Line...
-_UI_GOTO_LINE_DIALOG_TITLE   = Go To Line
-_UI_GOTO_LINE_DIALOG_TEXT    = Enter Line Number
-
-_UI_FILE_CHANGED_TITLE = File Changed
-_UI_FILE_DELETED_SAVE_CHANGES = The file has been deleted from the file system. Do you want to save your changes or close the editor without saving?
-_UI_FILE_DELETED_EDITOR_CLOSED = The file has been deleted from the file system. This editor will be closed.
-_UI_FILE_CHANGED_LOAD_CHANGES = The file has been changed on the file system. Do you want to load the changes?
-_UI_SAVE_BUTTON = Save
-_UI_CLOSE_BUTTON = Close
-
-
-! XSL Prefererence
-_UI_XSLT_SELECT     = Select which element to use for your stylesheet
-_UI_XSLT_STYLESHEET = &Use <xsl:stylesheet>
-_UI_XSLT_TRANSFORM  = U&se <xsl:transform>
-
-! XSL Debug Prefererence
-_UI_XSL_DEBUG_SELECT_LAUNCHER = Set the default XSL launcher for the XSL Debugging and Transformation tool
-_UI_XSL_DEBUG_LOCAL           = &XSL application
-_UI_XSL_DEBUG_REMOTE          = XS&L remote application
-_UI_XSL_TILE_EDITOR           = &Show all debugging files in a tile editor
-_UI_XSL_DEBUG_AND_TRANSFORM   = &Run transformation and open a debugging session
-_UI_XSL_CONTEXT_URI           = Context Path 
-_UI_XSL_CONTEXT               = Specify a &context path for resolving URIs in xsl:import, xsl:include or document()
-
-
-_UI_OVERRIDE_FILE    = Overwrite existing files
-_UI_JAVA_EXIST_FILE1 = The following Java classes already exist.
-_UI_JAVA_EXIST_FILE2 = Do you want to overwrite the existing file?
-      
-! some options strings common to several plugins
-_UI_ERROR_CREATING_FILE_TITLE = Error Creating File
-_UI_ERROR_CREATING_FILE_SHORT_DESC = Error creating file "{0}"
-_UI_ERROR_CREATING_FILE_LONG_DESC = An error occured while attempting to create the file "{0}".
-_UI_PARENT_FOLDER_IS_READ_ONLY = The parent directory "{0}" is read only.
-_UI_UNKNOWN_ERROR_WITH_HINT = Unknown error. Ensure that the parent directory "{0}" is writeable.
-_UI_UNKNOWN_ERROR = Unknown error. Ensure that the parent directory "{0}" is writeable.
-
-! usage - this label is followed by two radio button options for the file location
-_UI_LABEL_INCLUDE_URL_FILE = Select file location
-_UI_RADIO_FILE             = Workbench projects
-_UI_RADIO_URL              = HTTP
-
-!======================================================================================
-!
-! Here is the list of Error string that have message IDs - make sure they are unique
-!  Range for b2bgui messageIDs: IWAX1201 - IWAX1400
-!
-!======================================================================================
-
-_ERROR_THE_CONTAINER_NAME = The specified container must exist in the workspace and its path must start at the workspace root.
-
-_ERROR_LOCAL_LOCATION     = The local location of this container cannot be resolved.
-_ERROR_NOT_JAVA_PROJECT   = The specified project is not a Java project.
-
-!NOTE TO TRANSLATOR: this error message text is followed by a message from another plugin
-_ERROR_INVALID_JAVA_PACKAGE = IWAX1201E Invalid package name error:
-
-!NOTE TO TRANSLATOR: (_ERROR_BAD_FILENAME_EXTENSION + string + _UI_LABEL_OR + string) or (_ERROR_BAD_FILENAME_EXTENSION)
-_ERROR_BAD_FILENAME_EXTENSION         = The file name must end with
-_ERROR_FILE_ALREADY_EXISTS            = The same name already exists.
-
-_ERROR_CONTAINER_NOT_JAVA_BUILDPATH = The container is not a Java source folder for this project
-_ERROR_USE_PROJECT_JAVA_SOURCE_FOLDER = The project is not on the build path.  Select a Java source folder for the project.
-
-_UI_ERROR             = Error
-
-!NOTE TO TRANSLATOR: this warning message text is followed by a message from another plugin
-_WARN_INVALID_JAVA_PACKAGE = Invalid package name warning:
-
-_ERROR_ROOT_ELEMENT = The XML schema does not contain any global elements that can be used as a root element.
-_ERROR_SAVING_FILE = Error saving file "{0}"
-
-! File Validator
-_UI_ERROR_VALIDATE_FAIL_TITLE = Failed to check out necessary files
-_UI_ERROR_VALIDATE_FAIL_MESSAGE = Generation failed. Necessary files could not be checked out. 
-
-! PropertyDirtyChangeListener and PropertyResourceChangeListener
-_UI_ERROR_VALIDATE_EDIT_FAIL_ONE_FILE = Error
-
-ExampleProjectCreationWizard.title=New Example Project
-ExampleProjectCreationWizard.op_error.title=Project Creation Failed
-ExampleProjectCreationWizard.op_error.message=Project could not be created.
-
-ExampleProjectCreationWizard.overwritequery.title=Overwrite
-ExampleProjectCreationWizard.overwritequery.message=Do you want to overwrite {0}?
-
-
-ExampleProjectCreationOperation.op_desc=Creating example projects...
-ExampleProjectCreationOperation.op_desc_proj=Configuring project...
-
-ExampleProjectCreationWizardPage.error.alreadyexists=Project already exists.
diff --git a/plugins/org.eclipse.wst.common.ui/plugin.xml b/plugins/org.eclipse.wst.common.ui/plugin.xml
deleted file mode 100644
index 11cd5ea..0000000
--- a/plugins/org.eclipse.wst.common.ui/plugin.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-
-     <extension-point id="exampleProjectCreationWizard" name="Example Project Creation Wizard" schema="schema/exampleProjectCreationWizard.exsd"/>
-  
-
-</plugin>
diff --git a/plugins/org.eclipse.wst.common.ui/schema/exampleProjectCreationWizard.exsd b/plugins/org.eclipse.wst.common.ui/schema/exampleProjectCreationWizard.exsd
deleted file mode 100644
index 578c329..0000000
--- a/plugins/org.eclipse.wst.common.ui/schema/exampleProjectCreationWizard.exsd
+++ /dev/null
@@ -1,243 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>

-<!-- Schema file written by PDE -->

-<schema targetNamespace="org.eclipse.wst.common.ui">

-<annotation>

-      <appInfo>

-         <meta.schema plugin="org.eclipse.wst.common.ui" id="ExampleProjectCreationWizard" name="Example Project Creation Wizard"/>

-      </appInfo>

-      <documentation>

-         This extension point allows to extend New project withard with the

-page set up setup information for the created project as well as source files that will be imported on the project creation.

-      </documentation>

-   </annotation>

-

-   <element name="extension">

-      <complexType>

-         <sequence>

-            <element ref="wizard"/>

-         </sequence>

-         <attribute name="point" type="string" use="required">

-            <annotation>

-               <documentation>

-                  a fully qualified identifier of the target extension point

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="id" type="string">

-            <annotation>

-               <documentation>

-                  an optional identifier of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string">

-            <annotation>

-               <documentation>

-                  an optional name of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="wizard">

-      <complexType>

-         <sequence>

-            <element ref="projectsetup" minOccurs="0" maxOccurs="unbounded"/>

-         </sequence>

-         <attribute name="id" type="string" use="required">

-            <annotation>

-               <documentation>

-                  Id of the wizard that this extension is intended for.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="banner" type="string">

-            <annotation>

-               <documentation>

-                  Plugin relative path to the image that will be displayed as a banner on the wizard.

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="projectsetup">

-      <annotation>

-         <documentation>

-            Element that describes additional project setup.

-There will be as many pages created for the wizard as there are projectsetup elements.

-         </documentation>

-      </annotation>

-      <complexType>

-         <sequence>

-            <element ref="import" minOccurs="0" maxOccurs="unbounded"/>

-            <element ref="nature" minOccurs="0" maxOccurs="unbounded"/>

-            <element ref="references" minOccurs="0" maxOccurs="unbounded"/>

-         </sequence>

-         <attribute name="pagetitle" type="string">

-            <annotation>

-               <documentation>

-                  Title of the wizard&apos;s page.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string">

-            <annotation>

-               <documentation>

-                  Initial project name that will be provided on the wizard page.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="label" type="string">

-            <annotation>

-               <documentation>

-                  Label for the project name field on the wizard page.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="pagedescription" type="string">

-            <annotation>

-               <documentation>

-                  Description of the wizard page

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="open" type="string">

-            <annotation>

-               <documentation>

-                  Plugin relative path of the file that will be opened when wizard finished.

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="import">

-      <annotation>

-         <documentation>

-            Element that describes what to import into the project when it&apos;s created.

-         </documentation>

-      </annotation>

-      <complexType>

-         <attribute name="dest" type="string">

-            <annotation>

-               <documentation>

-                  Project relative path of the folder where project files will be imported to, if not specified, it&apos;s the projest itself.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="src" type="string">

-            <annotation>

-               <documentation>

-                  Plugin relative path of the import .zip file with the files to be imported into the project.

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="nature">

-      <annotation>

-         <documentation>

-            Element that specified Eclipse nature that is applicable to the project.

-         </documentation>

-      </annotation>

-      <complexType>

-         <attribute name="id" type="string">

-            <annotation>

-               <documentation>

-                  The id of the nature that will be opened when project will be created.

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="references">

-      <annotation>

-         <documentation>

-            Element that specifies reference for the project that will be created.

-         </documentation>

-      </annotation>

-      <complexType>

-         <attribute name="id" type="string">

-            <annotation>

-               <documentation>

-                  The id of the referenced project.

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="since"/>

-      </appInfo>

-      <documentation>

-         &lt;b&gt;This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.&lt;/b&gt;

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="examples"/>

-      </appInfo>

-      <documentation>

-         &lt;pre&gt;

-   &lt;extension

-         point=&quot;org.eclipse.wst.common.ui.exampleProjectCreationWizard&quot;

-         id=&quot;org.eclipse.wst.xml.ui.ExampleProjectCreationWizardExtension&quot;&gt; 

-      &lt;wizard

-           id=&quot;org.eclipse.wst.xml.ui.ExampleProjectCreationWizard&quot;

-           banner=&quot;icons/newSampleProject_wizbanner.gif&quot;&gt;

-         &lt;projectsetup

-               pagetitle=&quot;%XMLExampleProjectCreationWizard.pagetitle&quot;

-               name=&quot;%XMLExampleProjectCreationWizard.projectname&quot;

-               label=&quot;%XMLExampleProjectCreationWizard.label&quot;

-               pagedescription=&quot;%XMLExampleProjectCreationWizard.pagedescription&quot;

-               open=&quot;readme.html&quot;&gt;

-            &lt;import

-                  dest=&quot;&quot;

-                  src=&quot;examples/EditingAndValidatingXML.zip&quot;&gt;

-            &lt;/import&gt;

-        &lt;/projectsetup&gt;

-     &lt;/wizard&gt;

-   &lt;/extension&gt;

-&lt;/pre&gt;

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="apiInfo"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="implementation"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="copyright"/>

-      </appInfo>

-      <documentation>

-         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;

-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 &lt;a

-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

-      </documentation>

-   </annotation>

-

-</schema>

diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/UIPlugin.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/UIPlugin.java
deleted file mode 100644
index 978fc3e..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/UIPlugin.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - Initial API and implementation
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.text.MessageFormat;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.resource.ImageRegistry;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class UIPlugin extends AbstractUIPlugin {
-	//The shared instance.
-	private static UIPlugin plugin;
-	
-	/**
-	 * The constructor.
-	 */
-	public UIPlugin() {
-		super();
-		plugin = this;
-	}
-	
-	public UIPlugin(IPluginDescriptor descriptor) {
-		super(descriptor);
-		plugin = this;
-	}
-	
-	/**
-	 * Returns the shared instance.
-	 */
-	public static UIPlugin getDefault() {
-		return plugin;
-	}
-
-	/**
-	 * Returns the workspace instance.
-	 */
-	public static IWorkspace getWorkspace() {
-		return ResourcesPlugin.getWorkspace();
-	}
-
-	/**
-	 * Returns the string from the plugin's resource bundle,
-	 * or 'key' if not found.
-	 */
-	public static String getResourceString(String key) {
-		ResourceBundle aResourceBundle = getDefault().getResourceBundle();
-		try {
-			return (aResourceBundle != null) ? aResourceBundle.getString(key) : key;
-		} catch (MissingResourceException e) {
-			return key;
-		}
-	}
-	
-	/**
-	 * This gets the string resource and does one substitution.
-	 */
-	public static String getString(String key, Object s1)
-	{
-	  return MessageFormat.format(getResourceString(key), new Object [] { s1 });
-	}
-
-	/**
-	 * This gets the string resource and does two substitutions.
-	 */
-	public static String getString(String key, Object s1, Object s2)
-	{
-	  return MessageFormat.format(getResourceString(key), new Object [] { s1, s2 });
-	}     
-	
-	/**
-	 * Returns the plugin's resource bundle,
-	 */
-	public ResourceBundle getResourceBundle() {
-		try {
-			return Platform.getResourceBundle(plugin.getBundle());
-		} catch (MissingResourceException x) {
-			log(x);
-		}
-		return null;
-	}
-
-	public ImageDescriptor getImageDescriptor(String name) {
-		try {
-			URL url= new URL(getBundle().getEntry("/"), name);
-			return ImageDescriptor.createFromURL(url);
-		} catch (MalformedURLException e) {
-			return ImageDescriptor.getMissingImageDescriptor();
-		}
-	}
-	
-    public Image getImage(String iconName)
-    {
-      ImageRegistry imageRegistry = getImageRegistry();
-      
-      if (imageRegistry.get(iconName) != null)
-      {
-        return imageRegistry.get(iconName);
-      }
-      else
-      {
-        imageRegistry.put(iconName, ImageDescriptor.createFromFile(getClass(), iconName));
-        return imageRegistry.get(iconName);
-      }
-    }
-    
-    public static String getPluginId() {
-		return getDefault().getBundle().getSymbolicName();
-	}	
-
-	public static void log(IStatus status) {
-		getDefault().getLog().log(status);
-	}
-
-	public static void log(String message, Throwable e) {
-		log(new Status(IStatus.ERROR, getPluginId(), IStatus.ERROR, message, e));
-	}
-	
-	public static void log(String message) {
-		log(new Status(IStatus.ERROR, getPluginId(), IStatus.ERROR, message, null));
-	}
-
-	public static void log(Throwable e) {
-		log(new Status(IStatus.ERROR, getPluginId(), IStatus.ERROR, e.getLocalizedMessage(), e));
-	}
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(BundleContext context) throws Exception {
-		// TODO Auto-generated method stub
-		super.start(context);
-	}
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext context) throws Exception {
-		// TODO Auto-generated method stub
-		super.stop(context);
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dialogs/SelectSingleFileDialog.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dialogs/SelectSingleFileDialog.java
deleted file mode 100644
index d4e2f04..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dialogs/SelectSingleFileDialog.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - Initial API and implementation
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package  org.eclipse.wst.common.ui.internal.dialogs;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.TitleAreaDialog;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.internal.WorkbenchImages;
-import org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages;
-import org.eclipse.wst.common.ui.internal.viewers.SelectSingleFileView;
-
-
-
-public class SelectSingleFileDialog extends TitleAreaDialog
-{            
-  protected SelectSingleFileView selectSingleFileView; 
-  protected Button okButton;
- 
-  public SelectSingleFileDialog(Shell parentShell, IStructuredSelection selection, boolean isFileMandatory) 
-  {
-    super(parentShell);                      
-    if (selection == null)
-    {
-      selection = new StructuredSelection();
-    }
-    selectSingleFileView = new SelectSingleFileView(selection, isFileMandatory)
-    {
-	  public void createFilterControl(Composite composite)
-	  {
-		SelectSingleFileDialog.this.createFilterControl(composite);
-	  }
-    };  
-  }
-
-  protected Control createDialogArea(Composite parent) 
-  {                                                 
-    Composite dialogArea = (Composite)super.createDialogArea(parent);
-    
-    //TODO.. enable context help
-    //WorkbenchHelp.setHelp(dialogArea, B2BGUIContextIds.BTBG_SELECT_SINGLE_FILE_DIALOG);
-
-    Composite composite = new Composite(dialogArea, SWT.NONE);
-    composite.setLayout(new GridLayout());
-    GridData gd = new GridData(GridData.FILL_BOTH);
-    gd.widthHint = 350;
-    gd.heightHint = 350;
-    composite.setLayoutData(gd);   
-            
-    SelectSingleFileView.Listener listener = new SelectSingleFileView.Listener()
-    {                                             
-      public void setControlComplete(boolean isComplete)
-      {                            
-        okButton.setEnabled(isComplete);
-      }
-    };
-    selectSingleFileView.setListener(listener);
-    selectSingleFileView.createControl(composite);
-    return dialogArea;
-  }  
-
-  protected void createButtonsForButtonBar(Composite parent) 
-  {
-    okButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
-    okButton.setEnabled(false);
-    createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
-  }  
-       
-  public void create()
-  {
-    super.create();
-    selectSingleFileView.setVisibleHelper(true);   
-	  setTitleImage(WorkbenchImages.getImageDescriptor(IDEInternalWorkbenchImages.IMG_DLGBAN_SAVEAS_DLG).createImage());
-  }
-
-  public void createFilterCombo(Composite composite)
-  {
-  } 
-
-  public IFile getFile()
-  {  
-    return selectSingleFileView.getFile();
-  }   
-
-  public void addFilterExtensions(String[] filterExtensions)
-  { 
-    selectSingleFileView.addFilterExtensions(filterExtensions);
-  }
-
-  public void addFilterExtensions(String[] filterExtensions, IFile [] excludedFiles)
-  {
-    selectSingleFileView.addFilterExtensions(filterExtensions, excludedFiles);
-  }
-  
-  public void createFilterControl(Composite composite)
-  { 
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/DefaultDragAndDropCommand.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/DefaultDragAndDropCommand.java
deleted file mode 100644
index 9631e6a..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/DefaultDragAndDropCommand.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - Initial API and implementation
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.dnd;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.eclipse.swt.dnd.DND;
-
-
-abstract public class DefaultDragAndDropCommand implements DragAndDropCommand
-{
-  /**
-   * This keeps track of the owner that is the target of the drag and drop.
-   */
-  protected Object target;
-
-  /**
-   * This keeps track of the location of the drag and drop.
-   */
-  protected float location;
-
-  /**
-   * This keeps track of the lower range of locations in which the effect of this command remains unchanged.
-   */
-  protected float lowerLocationBound;
-
-  /**
-   * This keeps track of the upper range of locations in which the effect of this command remains unchanged.
-   */
-  protected float upperLocationBound;
-
-  /**
-   * This keeps track of the permitted operations.
-   */
-  protected int operations;
-
-  /**
-   * This keeps track of the current operation that will be returned by {@link #getOperation}.
-   */
-  protected int operation;
-
-  /**
-   * This keeps track of the feedback that will be returned by {@link #getFeedback}.
-   */
-  protected int feedback;
-
-  /**
-   * This keeps track of the collection of dragged sources.
-   */
-  protected Collection sources;
-
-  public DefaultDragAndDropCommand(Object target, float location, int operations, int operation, Collection sources)
-  {
-    this.target = target;
-    this.location = location;
-    this.operations = operations;
-    this.operation = operation;
-    this.sources = new ArrayList(sources);
-    if (!canExecute()) 
-    {
-      this.operation = DND.DROP_NONE;
-    }
-    
-  }
-
-  public int getFeedback()
-  {
-    if (isAfter())
-    {
-      return DND.FEEDBACK_INSERT_AFTER;
-    }
-    else 
-    {
-      return DND.FEEDBACK_INSERT_BEFORE;
-    }
-  }    
-
-  public boolean isAfter()
-  {
-    return location > 0.5;
-  }
-
-  public int getOperation()
-  {
-    return operation;
-  }
-
-  public void reinitialize(Object target, float location, int operations, int operation, Collection sources)
-  {
-    this.target = target;
-    this.location = location;
-    this.operations = operations;
-    this.operation = operation;
-    this.sources = new ArrayList(sources);
-    if (!canExecute()) 
-    {
-      this.operation = DND.DROP_NONE;
-    }
-  }    
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/DragAndDropCommand.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/DragAndDropCommand.java
deleted file mode 100644
index 0ceb414..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/DragAndDropCommand.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - Initial API and implementation
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.dnd;
-
-import java.util.Collection;
-
-public interface DragAndDropCommand
-{
-  //  public DragAndDropCommand(Object target, float location, int operations, int operation, Collection sources);
-
-  public boolean canExecute();
-
-  public void execute();
-
-  public int getFeedback();
-  
-  public int getOperation();
-
-  public void reinitialize(Object target, float location, int operations, int operation, Collection sources);
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/DragAndDropManager.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/DragAndDropManager.java
deleted file mode 100644
index 013a5b2..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/DragAndDropManager.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - Initial API and implementation
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.dnd;
-
-import java.util.Collection;
-
-public interface DragAndDropManager
-{
-  public DragAndDropCommand createCommand(Object target, float location, int operations, int operation, Collection source);
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/ObjectTransfer.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/ObjectTransfer.java
deleted file mode 100644
index 684eafa..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/ObjectTransfer.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - Initial API and implementation
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.dnd;
-
-
-import org.eclipse.swt.dnd.ByteArrayTransfer;
-import org.eclipse.swt.dnd.TransferData;
-
-
-/**
- * This derived implementation of a byte array transfer short circuits the transfer process
- * so that a local transfer does not serialize the object
- * and hence can and will return the original object, not just a clone.
- * You only really need ever know about {@link #getInstance ObjectTransfer.getInstance()},
- * so that you can include it in when adding drag support to a viewer.
- * See {@link EditingDomainViewerDropAdapter} and {@link ViewerDragAdapter} for more details.
- * <p>
- * As an addded guard, the time is recorded and serialized in javaToNative
- * to that navive to java can ensure that it's returns the value that was really to have been transferred.
- */
-public class ObjectTransfer extends ByteArrayTransfer
-{
-  /**
-   * This is the register transfer type name.
-   */
-  protected static final String TYPE_NAME = "local-transfer-format";
-
-  /**
-   * This is the ID that is registered to the name.
-   */
-  protected static final int TYPE_ID = registerType(TYPE_NAME);
-
-  /**
-   * This is initialized and returned by {@link #getInstance}.
-   */
-  protected static ObjectTransfer instance;
-
-  /**
-   * This returns the one instance of this transfer agent.
-   */
-  public static ObjectTransfer getInstance()
-  {
-    if (instance == null)
-    {
-      instance = new ObjectTransfer();
-    }
-
-    return instance;
-  }
-
-  /**
-   * This records the time at which the transfer data was recorded.
-   */
-  protected long startTime;
-
-  /**
-   * This records the data being transferred.
-   */
-  protected Object object;
-
-  /**
-   * This creates an instance; typically you get one from {@link #getInstance}.
-   */
-  protected ObjectTransfer()
-  {
-  }
-
-  /**
-   * This returns the transfer ids that this agent supports.
-   */
-  protected int[] getTypeIds() 
-  {
-    return new int[] { TYPE_ID };
-  }
-
-  /**
-   * This returns the transfer names that this agent supports.
-   */
-  public String[] getTypeNames() 
-  {
-    return new String[] { TYPE_NAME };
-  }
-
-  /**
-   * This records the object and current time and encodes only the current time into the transfer data.
-   */
-  public void javaToNative(Object object, TransferData transferData) 
-  {
-    startTime = System.currentTimeMillis();
-    this.object = object;
-    if (transferData != null)
-    {
-      super.javaToNative(String.valueOf(startTime).getBytes(), transferData);
-    }
-  }
-
-  /**
-   * This decodes the time of the transfer and returns the recorded the object if the recorded time and the decoded time match.
-   */
-  public Object nativeToJava(TransferData transferData) 
-  {
-    long startTime  = Long.valueOf(new String((byte[])super.nativeToJava(transferData))).longValue();
-    return
-      this.startTime == startTime ?
-        object :
-        null;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/ViewerDragAdapter.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/ViewerDragAdapter.java
deleted file mode 100644
index d3aa343..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/ViewerDragAdapter.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - Initial API and implementation
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.dnd;
-
-
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.dnd.DragSourceEvent;
-import org.eclipse.swt.dnd.DragSourceListener;
-
-
-/**
- * This is an implemention of {@link DragSourceListener}.
- * It allows the selection in effect at the start of the drag and drop interaction to be recorded,
- * which is especially important for a drag and drop interaction within a single view.
- * This is how one of these adapters is typically hooked up:
- * <pre>
- *   viewer.addDragSupport
- *     (DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK, 
- *      new Transfer [] { LocalTransfer.getInstance() },
- *      ViewerDragAdapter(viewer));
- * </pre>
- * Doing so simply allows a drag operation to be initiated from the viewer
- * such that the viewer's selection is transferred to the drop target.
- * See {@link EditingDomainViewerDropAdapter} and {@link LocalTransfer} for more details.
- */
-public class ViewerDragAdapter implements DragSourceListener
-{
-  /**
-   * This keeps track of the viewer to which we are listening.
-   */
-  protected Viewer viewer;
-
-  /**
-   * This keeps track of the selection that is in effect at the start of the drag operation
-   */
-  protected ISelection selection;
-
-  /**
-   * This creates an instance for the given viewer.
-   */
-  public ViewerDragAdapter(Viewer viewer)
-  {
-    super();
-
-    // Remember the viewer and listen to SWT.DragDetect to alert the start of the drag operation.
-    //
-    this.viewer = viewer;
-  }
-
-  /**
-   * This is called when dragging is initiated; it records the {@link #selection} of {@link #viewer}.
-   */
-  public void dragStart(DragSourceEvent event)
-  {
-    selection = viewer.getSelection();
-  }
-
-  /**
-   * This is called when dragging is completed; it forgets the {@link #selection}.
-   */
-  public void dragFinished(DragSourceEvent event)
-  {
-    selection = null;
-  }
-  
-  /**
-   * This is called to transfer the data.
-   */
-  public void dragSetData(DragSourceEvent event)
-  {
-    if (ObjectTransfer.getInstance().isSupportedType(event.dataType))
-    {
-      event.data = selection;
-    }
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/ViewerDropAdapter.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/ViewerDropAdapter.java
deleted file mode 100644
index 3bd03f2..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/ViewerDropAdapter.java
+++ /dev/null
@@ -1,768 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - Initial API and implementation
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.dnd;
-
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-
-import org.eclipse.jface.viewers.AbstractTreeViewer;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.custom.TableTreeItem;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.DropTargetAdapter;
-import org.eclipse.swt.dnd.DropTargetEvent;
-import org.eclipse.swt.dnd.TransferData;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.ScrollBar;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeItem;
-import org.eclipse.swt.widgets.Widget;
-
-
-/**
- * This implementation of a drop target listener 
- * is designed to turn a drag and drop operation into a {@link Command} based on the model objects of an {@link EditingDomain}
- * and created by {@link DragAndDropManager#create}.
- * It is designed to do early data transfer so the the enablement and feedback of the drag and drop interaction
- * can intimately depend on the state of the model objects involed.
- * <p>
- * The base implementation of this class should be sufficient for most applications.
- * Any change in behaviour is typically accomplished by overriding 
- * {@link ItemProviderAdapter}.createDragAndDropCommand
- * to return a derived implementation of {@link DragAndDropCommand}.
- * This is how one these adapters is typically hooked up:
- * <pre>
- *   viewer.addDropSupport
- *     (DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK,
- *      new Transfer [] { ObjectTransfer.getInstance() },
- *      EditingDomainViewerDropAdapter(viewer));
- * </pre>
- * <p>
- * This implementation prefers to use a {@link ObjectTransfer}, 
- * which short-circuits the transfer process for simple transfers within the workbench,
- * the method {@link #getDragSource} can be overriden to change the behaviour.
- * The implementation also only handles an {@link IStructuredSelection},
- * but the method {@link #extractDragSource} can be overriden to change the behaviour.
- * <p>
- * You can call {@link #setHoverThreshold} to set the amount of time, in milliseconds, 
- * to hover over an item before {@link #hover} is called;
- * the default is 1500 milliseconds.
- */
-public class ViewerDropAdapter extends DropTargetAdapter
-{
-  /**
-   * This is the viewer for which this is a drop target listener.
-   */
-  protected Viewer viewer;
-
-  /**
-   * This is the collection of source objects being dragged.
-   */
-  protected Collection source;
-
-  /**
-   * This is the command created during dragging which provides the feedback and will carry out the action upon completion.
-   */
-  //  protected Command command;
-  protected DragAndDropCommand command;
- 
-  /**
-   * This records the object for which the {@link #command} was created.
-   */
-  protected Object commandTarget;
-
-  /**
-   * The amount of time to hover over a tree item before expanding it
-   */
-  protected int hoverThreshold = 1500;
-
-  /**
-   * The is the time the mouse first started hovering over the current item.
-   */
-  protected long hoverStart = 0;
-
-  /**
-   * This keeps track of the most recent item for the {@link #hoverStart}.
-   */
-  protected Widget previousItem;
-
-  /**
-   * This keeps track of the original operation that was in effect before we set the event.detail in here.
-   */
-  protected int originalOperation;
-
-  /**
-   * This keeps track of the information used to create the current command.
-   */
-  protected DragAndDropCommandInformation dragAndDropCommandInformation;
-
-  protected DragAndDropManager dragAndDropManager;
-
-  /**
-   * This creates and instance of the given domain and viewer.
-   */
-  public ViewerDropAdapter(Viewer viewer, DragAndDropManager dragAndDropManager)
-  {
-    this.viewer = viewer;
-    this.dragAndDropManager = dragAndDropManager;
-  }
-
-  /**
-   * This is called when the mouse first enters or starts dragging in the viewer.
-   */
-  public void dragEnter(DropTargetEvent event)
-  {
-    originalOperation = event.detail;
-    helper(event);
-  }
-
-  /**
-   * This is called when the mouse leaves or stops dragging in the viewer
-   */
-  public void dragLeave(DropTargetEvent event)
-  {
-    // Clean up the command if there is one.
-    //
-    if (command != null)
-    {
-//        command.dispose();
-      command = null;
-      commandTarget = null;
-    }
-
-    // Reset the other values.
-    //
-    previousItem = null;
-    hoverStart = 0;
-    source = null;
-  }
-
-  /**
-   * This is called when the operation has changed in some way, typically because the user changes keyboard modifiers.
-   */
-  public void dragOperationChanged(DropTargetEvent event)
-  {
-    originalOperation = event.detail;
-    helper(event);
-  }
-
-  /**
-   * This is called repeated when the mouse over the viewer.
-   */
-  public void dragOver(DropTargetEvent event) 
-  {
-    helper(event);
-  }
-
-  /**
-   * This is called just as the mouse is released over the viewer to initiate a drop.
-   */
-  public void dropAccept(DropTargetEvent event) 
-  {
-    // There seems to be a bug in SWT that the view may have scrolled.
-    // helper(event);
-  }
-
-  /**
-   * This is called to indate that the drop action should be invoked.
-   */
-  public void drop(DropTargetEvent event)
-  {
-    // There seems to be a bug in SWT that the view may have scrolled.
-    // helper(event);
-    if (dragAndDropCommandInformation != null)
-    {
-      command = dragAndDropCommandInformation.createCommand();
-
-      // Execute the command
-      command.execute();
-
-      // Clean up the state.
-      //
-      command = null;
-      commandTarget = null;
-      previousItem = null;
-      hoverStart = 0;
-      source = null;
-    }
-  }
-
-  /**
-   * This method is called the same way for each of the {@link org.eclipse.swt.dnd.DropTargetListener} methods, except during leave.
-   */
-  protected void helper(DropTargetEvent event)
-  {
-    // Try to get the source if there isn't one.
-    //
-    if (source == null)
-    {
-      source = getDragSource(event);
-    }                   
-    else if (event.currentDataType == null)
-    {
-      setCurrentDataType(event);
-    }
-
-    // If there's still no source, wait until the next time to try again.
-    //
-    if (source == null)
-    {
-      event.detail = DND.DROP_NONE;
-      event.feedback = DND.FEEDBACK_SELECT;
-    }
-    // Otherwise, if we need to scroll...
-    //
-    else if (scrollIfNeeded(event))
-    {
-      // In the case that we scroll, we just do all the work on the next event and only just scroll now.
-      //
-      event.feedback = DND.FEEDBACK_SELECT;
-    }
-    else
-    {
-      // Get the data from the item, if there is one.
-      //
-      Object target = event.item == null ? null : event.item.getData();
-      if (target instanceof TableTreeItem)
-      {
-        target = ((TableTreeItem)target).getData();
-      }
-
-      // Do the logic to determine the hover information.
-      // If we're over a new item from before.
-      //
-      if (event.item != previousItem)
-      {
-        // Remember the item and the time.
-        //
-        previousItem = event.item;
-        hoverStart = event.time;
-      } 
-      else if (target != null)
-      {
-        if (event.time - hoverStart > hoverThreshold)
-        {
-          hover(target);
-
-          // We don't need to hover over this guy again.
-          //
-          hoverStart = Integer.MAX_VALUE;
-        }
-      }
-
-      // Determine if we can create a valid command at the current mouse location.
-      //
-      boolean valid = false;
-
-      // If we don't have a previous cached command...
-      //
-      if (command == null)
-      {
-        // Create the command and test if it is executable.
-        //
-        commandTarget = target;
-        command = dragAndDropManager.createCommand(target, getLocation(event), event.operations, event.detail, source);
-        if (command != null)
-        {
-        	valid = command.canExecute();
-        }
-      }
-      else
-      {
-        int operation = originalOperation != event.detail ? originalOperation : event.detail;
-
-        // Check if the cached command is able to provide drag and drop feedback.
-        //
-        if (target == commandTarget)// && command instanceof DragAndDropFeedback)
-        {
-          float location = getLocation(event);
-
-          dragAndDropCommandInformation = 
-            new DragAndDropCommandInformation(target, location, event.operations, operation, source);
-
-          // If so, revalidate the command.
-          //
-          command.reinitialize(target, location, event.operations, operation, source);
-          if (command != null)
-          {
-          valid = command.canExecute();
-          }
-        }
-        else
-        {
-          // If not, dispose the current command and create a new one.
-          //
-          //          command.dispose();
-          commandTarget = target;
-
-          dragAndDropCommandInformation = 
-            new DragAndDropCommandInformation(target, getLocation(event), event.operations, operation, source);
-
-          // DragAndDropManager.create(domain, target, getLocation(event), event.operations, operation, source);
-          //
-          command = dragAndDropCommandInformation.createCommand();
-
-          if (command != null)
-          {
-          	valid = command.canExecute();
-          }
-        }
-      }
-
-      // If this command can provide detailed drag and drop feedback...
-      //
-      //if (command instanceof DragAndDropCommand)
-      if (command != null)
-      {
-        // Use the feedback for the operation and mouse point from the command.
-        //
-        event.detail = command.getOperation();
-        event.feedback = command.getFeedback();
-      }
-      else if (valid)
-      {
-        // All we can know is to provide selection feedback.
-        //
-        event.feedback = DND.FEEDBACK_SELECT;
-      }
-      else
-      {
-        // There is no executable command, so we'd better nix the whole deal.
-        //
-        event.detail = DND.DROP_NONE;
-        event.feedback = DND.FEEDBACK_SELECT;
-      }
-    }
-  }
-    
-
-  protected void setCurrentDataType(DropTargetEvent event)
-  {                                
-    ObjectTransfer objectTransfer = ObjectTransfer.getInstance();
-    TransferData [] dataTypes = event.dataTypes;
-    for (int i = 0; i < dataTypes.length; ++i)
-    {
-      TransferData transferData = dataTypes[i];
-      // If the local tansfer supports this datatype, switch to that data type
-      //
-      if (objectTransfer.isSupportedType(transferData))
-      {
-        event.currentDataType = transferData;
-      }
-    }
-  }
-
-  /** 
-   * This  attempts to extract the drag source from the event early, i.e., before the drop method.
-   * This implementation tries to use a {@link org.eclipse.wst.common.ui.internal.dnd.ObjectTransfer}.
-   */
-  protected Collection getDragSource(DropTargetEvent event)
-  {
-    // Check whether the current data type can be transfered locally.
-    //
-    ObjectTransfer objectTransfer = ObjectTransfer.getInstance();
-    if (!objectTransfer.isSupportedType(event.currentDataType))
-    {
-      // Iterate over the data types to see if there is a datatype that supports a local transfer.
-      //
-      setCurrentDataType(event);
-      return null;
-    }
-    else
-    {
-      // Transfer the data and extract it.
-      //
-      Object object = objectTransfer.nativeToJava(event.currentDataType);
-      if (object == null)
-      {
-      	return null;
-      }
-      else
-      {
-      	return extractDragSource(object);
-      }
-    }
-  }
-
-  /**
-   * This extracts a collection of dragged source objects from the given object retrieved from the transfer agent.
-   * This default implementation converts a structured selection into a collection of elements.
-   */
-  protected Collection extractDragSource(Object object)
-  {
-    // Transfer the data and convert the structured selection to a collection of objects.
-    //
-    if (object instanceof IStructuredSelection)
-    {
-      Collection result = new ArrayList();
-      for (Iterator elements = ((IStructuredSelection)object).iterator(); elements.hasNext(); )
-      {
-        result.add(elements.next());
-      }
-      return result;
-    }
-    else
-    {
-      return Collections.EMPTY_LIST;
-    }
-  }
-
-  /**
-   * This gets the amount of time, in milliseconds, to hover over an item before {@link #hover} is called.
-   */
-  public int getHoverThreshold()
-  {
-    return hoverThreshold;
-  }
-
-  /**
-   * This set the amount of time, in milliseconds, to hover over an item before {@link #hover} is called.
-   */
-  public void setHoverThreshold(int hoverThreshold)
-  {
-    this.hoverThreshold = hoverThreshold;
-  }
-
-  /**
-   * This is called when the cursor has hovered over the given target for longer than {@link #hoverThreshold}.
-   */
-  protected void hover(Object target)
-  {
-    if (viewer instanceof AbstractTreeViewer)
-    {
-      ((AbstractTreeViewer)viewer).expandToLevel(target, 1);
-    }
-  }
-
-  /** 
-   * This returns whether a scroll was performed based on the given drag coordinates.
-   */
-  protected boolean scrollIfNeeded(DropTargetEvent event)
-  {
-    // By default we'll not scroll
-    //
-    boolean result = false;
-
-    // We only handle a tree item right now.
-    //
-    if (event.item instanceof TreeItem)
-    {
-      // Tree items have special data that will help.
-      //
-      TreeItem treeItem = (TreeItem)event.item;
-
-      // We need need the point in the coordinates of the control and the control's bounds.
-      //
-      Tree tree = treeItem.getParent();
-      Point point = tree.toControl(new Point(event.x, event.y));
-      Rectangle bounds = tree.getClientArea();
-
-      // This is the distance in pixels from the top or bottom that will cause scrolling.
-      //
-      int scrollEpsilon = Math.min(treeItem.getBounds().height, bounds.height / 3);
-
-      // This will be the item that should be scrolled into the view.
-      //
-      TreeItem scrollTreeItem = null;
-
-      // If we should scroll up.
-      //
-      if (point.y < scrollEpsilon)
-      {
-        // Determine the parent to find the sibling.
-        //
-        TreeItem parent = treeItem.getParentItem();
-        // Walk through the siblings.
-        //
-        TreeItem [] children = parent == null ? tree.getItems() : parent.getItems();
-        for (int i = 0; i < children.length; ++i)
-        {
-          // Is this a match.
-          //
-          if (children[i] == treeItem)
-          {
-            // If there is a previous sibling...
-            //
-            if (i > 0)
-            {
-              scrollTreeItem = children[i - 1];
-
-              // Get the last deepest descendent of this previous sibling.
-              //
-              for (;;)
-              {
-                children = scrollTreeItem.getItems();
-                if (children != null && children.length != 0 && scrollTreeItem.getExpanded())
-                {
-                  scrollTreeItem = children[children.length - 1];
-                }
-                else
-                {
-                  break;
-                }
-              }
-            }
-            else
-            {
-              // The parent must be the previous.
-              //
-              scrollTreeItem = parent;
-            }
-
-            // We're done after the match.
-            //
-            break;
-          }
-        }
-      }
-      // If we should scroll down...
-      //
-      else if (bounds.height - point.y < scrollEpsilon)
-      {
-        // If this thing has visible children, then the first child must be next.
-        //
-        TreeItem [] children = treeItem.getItems();
-        if (children != null && children.length != 0 && treeItem.getExpanded())
-        {
-          scrollTreeItem = children[0];
-        }
-        else
-        {
-          // We need the parent to determine siblings and will walk up the tree if we are the last sibling.
-          //
-          while (scrollTreeItem == null)
-          {
-            // If there's no parent, we're done.
-            //
-            TreeItem parent = treeItem.getParentItem();
-            // Walk the children.
-            //
-            children = parent == null ? tree.getItems() : parent.getItems();
-            for (int i = 0; i < children.length; ++i)
-            {
-              // When we find the child.
-              //
-              if (children[i] == treeItem)
-              {
-                // If the next index is a valid index...
-                //
-                if (++i < children.length)
-                {
-                  // We've found the item.
-                  //
-                  scrollTreeItem = children[i];
-                }
-
-                // We're done with this parent.
-                //
-                break;
-              }
-            }
-
-            if (parent == null)
-            {
-              break;
-            }
-
-            // Walk up.
-            //
-            treeItem = parent;
-          }
-        }
-      }
-
-      // If we should scroll.
-      //
-      if (scrollTreeItem != null)
-      {
-        // Only scroll if we're on an item for a while.
-        //
-        if (previousItem != null && event.time - hoverStart > 200)
-        {
-          ScrollBar verticalScrollBar = tree.getVerticalBar();
-          if (verticalScrollBar != null)
-          {
-            int before = verticalScrollBar.getSelection();
-
-            // Make sure the item is scrolled in place.
-            //
-            tree.showItem(scrollTreeItem);
-
-            // Make sure we don't scroll again quickly.
-            //
-            previousItem = null;
-
-            // Indicate that we've done a scroll and nothing else should be done.
-            //
-            result = before != verticalScrollBar.getSelection();
-          }
-        }
-        else
-        {
-          // If the item changes, reset the timer information.
-          //
-          if (event.item != previousItem)
-          {
-            previousItem = event.item;
-            hoverStart = event.time;
-          }
-        }
-      }
-    }
-    else if (event.item instanceof TableItem)
-    {
-      // Table items have special data that will help.
-      //
-      TableItem tableItem = (TableItem)event.item;
-
-      // We need need the point in the coordinates of the control and the control's bounds.
-      //
-      Table table = tableItem.getParent();
-      Point point = table.toControl(new Point(event.x, event.y));
-      Rectangle bounds = table.getClientArea();
-      if (table.getHeaderVisible())
-      {
-        int offset = table.getItemHeight();
-        bounds.y += offset;
-        bounds.height -= offset;
-        point.y -= offset;
-      }
-
-      // The position of this item.
-      //
-      int index = table.indexOf(tableItem);
-
-      // This is the distance in pixels from the top or bottom that will cause scrolling.
-      //
-      int scrollEpsilon = Math.min(tableItem.getBounds(0).height, bounds.height / 3);
-
-      // This will be the item that should be scrolled into the view.
-      //
-      TableItem scrollTableItem = null;
-
-      // If we should scroll up.
-      //
-      if (point.y < scrollEpsilon)
-      {
-        if (index > 0)
-        {
-          scrollTableItem = table.getItems()[index - 1];
-        }
-      }
-      // If we should scroll down...
-      //
-      else if (bounds.height - point.y < scrollEpsilon)
-      {
-        if (index + 1 < table.getItems().length)
-        {
-          scrollTableItem =  table.getItems()[index + 1];
-        }
-      }
-
-      // If we should scroll.
-      //
-      if (scrollTableItem != null)
-      {
-        // Only scroll if we're on an item for a while.
-        //
-        if (previousItem != null && event.time - hoverStart > 200)
-        {
-          ScrollBar verticalScrollBar = table.getVerticalBar();
-          if (verticalScrollBar != null)
-          {
-            int before = verticalScrollBar.getSelection();
-
-            // Make sure the item is scrolled in place.
-            //
-            table.showItem(scrollTableItem);
-
-            // Make sure we don't scroll again quickly.
-            //
-            previousItem = null;
-
-            // Indicate that we've done a scroll and nothing else should be done.
-            //
-            result = before != verticalScrollBar.getSelection();
-          }
-        }
-        else
-        {
-          // If the item changes, reset the timer information.
-          //
-          if (event.item != previousItem)
-          {
-            previousItem = event.item;
-            hoverStart = event.time;
-          }
-        }
-      }
-    }
-
-    return result;
-  }
-
-  protected static float getLocation(DropTargetEvent event) 
-  {
-    if (event.item instanceof TreeItem)
-    {
-      TreeItem treeItem = (TreeItem)event.item;
-      Control control = treeItem.getParent();
-      Point point = control.toControl(new Point(event.x, event.y));
-      Rectangle bounds = treeItem.getBounds();
-      return (float)(point.y - bounds.y) / (float)bounds.height;
-    }
-    else if (event.item instanceof TableItem)
-    {
-      TableItem tableItem = (TableItem)event.item;
-      Control control = tableItem.getParent();
-      Point point = control.toControl(new Point(event.x, event.y));
-      Rectangle bounds = tableItem.getBounds(0);
-      return (float)(point.y - bounds.y) / (float)bounds.height;
-    }
-    else
-    {
-      return 0.0F;
-    }
-  }
-
-  protected class DragAndDropCommandInformation
-  {
-    //    protected EditingDomain domain;
-    protected Object target;
-    protected float location;
-    protected int operations;
-    protected int operation;
-    protected Collection source;
-    public DragAndDropCommandInformation
-      (Object target, float location, int operations, int operation, Collection source)
-    {
-      this.target = target;
-      this.location = location;
-      this.operations = operations;
-      this.operation = operation;
-      this.source = new ArrayList(source);
-    }
-
-    public DragAndDropCommand createCommand()
-    {
-      return dragAndDropManager.createCommand(target, location, operations, operation, source);
-    }
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/NavigableTableViewer.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/NavigableTableViewer.java
deleted file mode 100644
index 9f03d3b..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/NavigableTableViewer.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - Initial API and implementation
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.viewers;
-
-import org.eclipse.jface.viewers.CellEditor;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.swt.widgets.Table;
-
-public class NavigableTableViewer extends TableViewer
-{
-   TableNavigator navigator;
-
-   public NavigableTableViewer(Table parent)
-   {
-      super(parent);
-      navigator = new TableNavigator(getTable(), this);
-   }
-
-   //override setCellEditors to put in call to moveAboveCellEditors for TableNavigator
-   public void setCellEditors(CellEditor[] editors)
-   {
-     super.setCellEditors(editors);
-     navigator.moveCellEditorsAbove(editors);
-
-   }
-
-   //override refresh so that TableNavigator is refreshed for all model changes
-   public void refresh()
-   {
-   	if( !this.getTable().isDisposed() )
-   	{
-      	super.refresh();
-      	navigator.refresh();
-   	}
-   }
-
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/ResourceFilter.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/ResourceFilter.java
deleted file mode 100644
index aaa3f5d..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/ResourceFilter.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - Initial API and implementation
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.viewers;
-
-import java.util.Collection;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerFilter;
-
-public class ResourceFilter extends ViewerFilter 
-{
-  protected String[] fExtensions;
-  protected IFile[] fExcludedFiles;
-  protected Collection fExcludes;
-	
-  public ResourceFilter(String[] extensions, Collection exclude) 
-  {
-    fExtensions= extensions;
-    fExcludes= exclude;
-    fExcludedFiles = null;
-  }
-
-  public ResourceFilter(String[] extensions, IFile[] excludedFiles, Collection exclude) 
-  {
-    fExtensions= extensions;
-    fExcludes= exclude;
-    fExcludedFiles = excludedFiles;
-  }
-	
-  public boolean isFilterProperty(Object element, Object property) 
-  {
-    return false;
-  }
-	
-  public boolean select(Viewer viewer, Object parent, Object element) 
-  {
-    if (element instanceof IFile) 
-    {
-      if (fExcludes != null && fExcludes.contains(element)) 
-      {
-	return false;
-      }
-      String name= ((IFile)element).getName();
-      if (fExcludedFiles != null) 
-      {
-        for (int j= 0; j < fExcludedFiles.length; j++) 
-        {
-          if ( ((IFile)element).getLocation().
-               toOSString().compareTo((fExcludedFiles[j]).getLocation().toOSString()) == 0 )
-           return false;             
-        }            
-      }
-      if (fExtensions.length == 0) 
-      {
-        // assume that we don't want to filter any files based on 
-        // extension
-        return true;
-      }
-      for (int i= 0; i < fExtensions.length; i++) 
-      {
-        if (name.endsWith(fExtensions[i]))
-        {
-          return true;
-        }
-      } 
-      return false;
-    } 
-    else if (element instanceof IContainer) 
-    { // IProject, IFolder
-      try 
-      {
-      	IResource[] resources= ((IContainer)element).members();
-	for (int i= 0; i < resources.length; i++) 
-        {
-	  // recursive!
-	  if (select(viewer, parent, resources[i])) 
-          {
-	    return true;
-	  }
-	}
-      } 
-      catch (CoreException e) 
-      {
-      }				
-    }
-    return false;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectMultiFilePage.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectMultiFilePage.java
deleted file mode 100644
index 2ee7982..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectMultiFilePage.java
+++ /dev/null
@@ -1,389 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - Initial API and implementation
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.viewers;
-
-import java.util.*;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.jface.wizard.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.widgets.List;
-import org.eclipse.core.resources.*;
-import org.eclipse.ui.*;
-import org.eclipse.ui.model.*;
-import org.eclipse.ui.wizards.datatransfer.*;
-import org.eclipse.wst.common.ui.internal.UIPlugin;
-
-
-// Page to specify the source files
-public class SelectMultiFilePage extends WizardPage {
-  IWorkbench workbench;
-  IStructuredSelection selection;
-  boolean isFileMandatory;
-  TreeViewer sourceFileViewer;
-  Button addButton;
-  Button removeButton;
-  Button removeAllButton;
-  org.eclipse.swt.widgets.List selectedListBox;
-  Button importButton;
-  private Vector fFilters;
-  protected IFile[] fileNames;
-  IWorkspaceRoot workspaceRoot;
-
-  private final static int SIZING_LISTS_HEIGHT = 200;
-  private final static int SIZING_LISTS_WIDTH = 150;
-
-  // parameter isFileMandatory is used to determine if at least one file must be selected  
-  // before being able to proceed to the next page
-  public SelectMultiFilePage(
-      IWorkbench workbench,
-      IStructuredSelection selection,
-      boolean isFileMandatory) {
-    super("SelectMultiFilePage");
-    this.workbench = workbench;
-    this.selection = selection;
-    this.isFileMandatory = isFileMandatory;
-    this.workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
-    this.fileNames = null;
-  }
-
-  public void createControl(Composite parent) {
-    
-    Composite pageContent = new Composite(parent, SWT.NONE);
-    GridLayout layout = new GridLayout();
-    layout.numColumns = 3;
-    pageContent.setLayout(layout);
-    pageContent.setLayoutData(new GridData(GridData.FILL_BOTH));
-
-    GridData outerFrameGridData = (GridData) pageContent.getLayoutData();
-    //		outerFrameGridData.horizontalAlignment = GridData.HORIZONTAL_ALIGN_FILL;
-    //		outerFrameGridData.verticalAlignment = GridData.VERTICAL_ALIGN_FILL;
-
-    //    WorkbenchHelp.setHelp(
-    //        pageContent,
-    //        B2BGUIContextIds.BTBG_SELECT_MULTI_FILE_PAGE);
-
-    createLabels(pageContent);
-    createSourceViewer(pageContent);
-    createButtonPanel(pageContent);
-    createSelectedListBox(pageContent);
-    createImportButton(pageContent);
-
-    setControl(pageContent);
-    if (isFileMandatory)
-      setPageComplete(false);
-
-  }
-
-  public IFile[] getFiles() {
-    return fileNames;
-  }
-
-  // This is a convenience method that allows filtering of the given file
-  // exensions. It internally creates a ResourceFilter so that users of this
-  // class don't have to construct one.
-  // If the extensions provided don't have '.', one will be added.
-  public void addFilterExtensions(String[] filterExtensions) {
-    // First add the '.' to the filterExtensions if they don't already have one
-    String[] correctedFilterExtensions =
-      new String[filterExtensions.length];
-    for (int i = 0; i < filterExtensions.length; i++) {
-      // If the extension doesn't start with a '.', then add one.
-      if (filterExtensions[i].startsWith("."))
-        correctedFilterExtensions[i] = filterExtensions[i];
-      else
-        correctedFilterExtensions[i] = "." + filterExtensions[i];
-    }
-
-    ViewerFilter filter =
-      new ResourceFilter(correctedFilterExtensions, null);
-    addFilter(filter);
-  }
-
-  public boolean isValidSourceFileViewerSelection(ISelection selection) {
-    return true;
-  }
-
-  public void setVisible(boolean visible) {
-    if (visible == true) {
-      if (fFilters != null) {
-        sourceFileViewer.resetFilters();
-        for (Iterator i = fFilters.iterator(); i.hasNext();)
-          sourceFileViewer.addFilter((ViewerFilter) i.next());
-      }
-      sourceFileViewer.setInput(ResourcesPlugin.getWorkspace().getRoot());
-    }
-    super.setVisible(visible);
-  }
-
-  public void setFiles(String[] fileNames) {
-    int size = Arrays.asList(fileNames).size();
-    Vector iFileNames = new Vector();
-    for (int i = 0; i < size; i++) {
-      IResource resource = workspaceRoot.findMember(fileNames[i]);
-      if (resource instanceof IFile)
-        iFileNames.addElement(resource);
-    }
-    IFile[] dummyArray = new IFile[iFileNames.size()];
-    this.fileNames = (IFile[]) (iFileNames.toArray(dummyArray));
-  }
-
-  public void resetFilters() {
-    fFilters = null;
-  }
-
-  public void addFilter(ViewerFilter filter) {
-    if (fFilters == null)
-      fFilters = new Vector();
-    fFilters.add(filter);
-  }
-
-  public void setAddButtonEnabled(boolean isEnabled) {
-    addButton.setEnabled(isEnabled);
-  }
-
-  public void setRemoveButtonEnabled(boolean isEnabled) {
-    removeButton.setEnabled(isEnabled);
-  }
-
-  private void createLabels(Composite pageContent) {
-    Label label = new Label(pageContent, SWT.LEFT);
-    label.setText(UIPlugin.getResourceString("_UI_LABEL_SOURCE_FILES"));
-
-    GridData data = new GridData();
-    data.horizontalAlignment = GridData.FILL;
-    data.horizontalSpan = 2;
-    label.setLayoutData(data);
-
-    label = new Label(pageContent, SWT.LEFT);
-    label.setText(UIPlugin.getResourceString("_UI_LABEL_SELECTED_FILES"));
-  }
-
-  public boolean checkIfFileInTarget(IFile fileToCheck) {
-    String[] strings = selectedListBox.getItems();
-    int size = selectedListBox.getItemCount();
-    for (int i = 0; i < size; i++) {
-      if (strings[i].compareTo(fileToCheck.getFullPath().toString())
-          == 0)
-        return true;
-    }
-    return false;
-  }
-
-  private void createSourceViewer(Composite parent) {
-    sourceFileViewer =
-      new TreeViewer(
-          new Tree(
-              parent,
-              SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER));
-    sourceFileViewer.setContentProvider(new WorkbenchContentProvider());
-    sourceFileViewer.setLabelProvider(new WorkbenchLabelProvider());
-    sourceFileViewer
-    .addSelectionChangedListener(new ISelectionChangedListener() {
-      public void selectionChanged(SelectionChangedEvent event) {
-        java.util.List list;
-        ISelection selection = event.getSelection();
-        boolean newFilesSelected = false;
-
-        if (selection instanceof IStructuredSelection) {
-          list = ((IStructuredSelection) selection).toList();
-          for (Iterator i = list.iterator(); i.hasNext();) {
-            IResource resource = (IResource) i.next();
-            if (resource instanceof IFile) {
-              if (checkIfFileInTarget((IFile) resource) == false)
-                newFilesSelected = true;
-            }
-          }
-          setAddButtonEnabled(newFilesSelected);
-        }
-      }
-    });
-    sourceFileViewer.addDoubleClickListener(new IDoubleClickListener() {
-      public void doubleClick(DoubleClickEvent event) {
-        addSelectedFilesToTargetList();
-      }
-    });
-
-    Control treeWidget = sourceFileViewer.getTree();
-    GridData gd = new GridData(GridData.FILL_BOTH);
-    gd.widthHint = SIZING_LISTS_WIDTH;
-    gd.heightHint = SIZING_LISTS_HEIGHT;
-    treeWidget.setLayoutData(gd);
-  }
-
-  private void createButtonPanel(Composite pageContent) {
-    Composite buttonPanel = new Composite(pageContent, SWT.NONE);
-    GridLayout layout = new GridLayout();
-    layout.numColumns = 1;
-    buttonPanel.setLayout(layout);
-    
-    GridData gridData = new GridData();
-    gridData.grabExcessHorizontalSpace = false;
-    gridData.grabExcessVerticalSpace = true;
-    gridData.verticalAlignment = GridData.CENTER;
-    gridData.horizontalAlignment = GridData.CENTER;
-    buttonPanel.setLayoutData(gridData);
-
-    addButton = new Button(buttonPanel, SWT.PUSH);
-    addButton.setText(UIPlugin.getResourceString("_UI_ADD_BUTTON"));
-    gridData = new GridData();
-    gridData.horizontalAlignment = GridData.FILL;
-    gridData.verticalAlignment = GridData.CENTER;
-    addButton.setLayoutData(gridData);
-    addButton.addSelectionListener(new ButtonSelectListener());
-    addButton.setToolTipText(
-        UIPlugin.getResourceString("_UI_ADD_BUTTON_TOOL_TIP"));
-    addButton.setEnabled(false);
-
-    removeButton = new Button(buttonPanel, SWT.PUSH);
-    removeButton.setText(UIPlugin.getResourceString("_UI_REMOVE_BUTTON"));
-    gridData = new GridData();
-    gridData.horizontalAlignment = GridData.FILL;
-    gridData.verticalAlignment = GridData.CENTER;
-    removeButton.setLayoutData(gridData);
-    removeButton.addSelectionListener(new ButtonSelectListener());
-    removeButton.setToolTipText(
-        UIPlugin.getResourceString("_UI_REMOVE_BUTTON_TOOL_TIP"));
-    removeButton.setEnabled(false);
-
-    removeAllButton = new Button(buttonPanel, SWT.PUSH);
-    removeAllButton.setText(UIPlugin.getResourceString("_UI_REMOVE_ALL_BUTTON"));
-    gridData = new GridData();
-    gridData.horizontalAlignment = GridData.FILL;
-    gridData.verticalAlignment = GridData.CENTER;
-    removeAllButton.setLayoutData(gridData);
-    removeAllButton.addSelectionListener(new ButtonSelectListener());
-    removeAllButton.setToolTipText(
-        UIPlugin.getResourceString("_UI_REMOVE_ALL_BUTTON_TOOL_TIP"));
-    removeAllButton.setEnabled(false);
-  }
-
-  private void createSelectedListBox(Composite parent) {
-    selectedListBox = new List(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
-    selectedListBox.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent event) {
-      }
-
-      public void widgetSelected(SelectionEvent event) {
-        java.util.List list;
-        if (selectedListBox.getSelectionCount() > 0)
-          setRemoveButtonEnabled(true);
-        else
-          setRemoveButtonEnabled(false);
-        return;
-      }
-    });
-
-    GridData gd = new GridData(GridData.FILL_BOTH);
-    gd.widthHint = SIZING_LISTS_WIDTH;
-    gd.heightHint = SIZING_LISTS_HEIGHT;
-    selectedListBox.setLayoutData(gd);
-  }
-
-  void createImportButton(Composite parent) {
-    importButton = new Button(parent, SWT.PUSH);
-    importButton.setText(UIPlugin.getResourceString("_UI_IMPORT_BUTTON"));
-    
-    GridData gridData = new GridData();
-    gridData.horizontalAlignment = GridData.CENTER;
-    importButton.setLayoutData(gridData);
-    importButton.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent e) {
-      }
-
-      public void widgetSelected(SelectionEvent e) {
-        FileSystemImportWizard importWizard =
-          new FileSystemImportWizard();
-        importWizard.init(workbench, selection);
-        Shell shell = Display.getCurrent().getActiveShell();
-        WizardDialog wizardDialog =
-          new WizardDialog(shell, importWizard);
-        wizardDialog.create();
-        wizardDialog.open();
-        sourceFileViewer.refresh();
-      }
-    });
-    importButton.setToolTipText(
-        UIPlugin.getResourceString("_UI_IMPORT_BUTTON_TOOL_TIP"));
-  }
-
-  public void addSelectedFilesToTargetList() {
-    ISelection selection = sourceFileViewer.getSelection();
-
-    if (isValidSourceFileViewerSelection(selection)) {
-      java.util.List list = null;
-      if (selection instanceof IStructuredSelection) {
-        list = ((IStructuredSelection) selection).toList();
-
-        if (list != null) {
-          list = ((IStructuredSelection) selection).toList();
-          for (Iterator i = list.iterator(); i.hasNext();) {
-            IResource resource = (IResource) i.next();
-            if (resource instanceof IFile) {
-              // Check if its in the list. Don't add it if it is.
-              String resourceName =
-                resource.getFullPath().toString();
-              if (selectedListBox.indexOf(resourceName) == -1)
-                selectedListBox.add(resourceName);
-            }
-          }
-          setFiles(selectedListBox.getItems());
-        }
-
-        setAddButtonEnabled(false);
-
-        if (selectedListBox.getItemCount() > 0) {
-          removeAllButton.setEnabled(true);
-          if (isFileMandatory)
-            setPageComplete(true);
-          if (selectedListBox.getSelectionCount() > 0)
-            setRemoveButtonEnabled(true);
-          else
-            setRemoveButtonEnabled(false);
-        }
-      }
-    }
-  }
-
-  class ButtonSelectListener implements SelectionListener {
-    public void widgetDefaultSelected(SelectionEvent e) {
-    }
-
-    public void widgetSelected(SelectionEvent e) {
-      if (e.widget == addButton) {
-        addSelectedFilesToTargetList();
-      } else if (e.widget == removeButton) {
-        String[] strings = selectedListBox.getSelection();
-        int size = selectedListBox.getSelectionCount();
-        for (int i = 0; i < size; i++) {
-          selectedListBox.remove(strings[i]);
-        }
-        removeButton.setEnabled(false);
-        if (selectedListBox.getItemCount() == 0) {
-          removeAllButton.setEnabled(false);
-          if (isFileMandatory)
-            setPageComplete(false);
-        }
-        setFiles(selectedListBox.getItems());
-      } else if (e.widget == removeAllButton) {
-        selectedListBox.removeAll();
-        removeButton.setEnabled(false);
-        removeAllButton.setEnabled(false);
-        if (isFileMandatory)
-          setPageComplete(false);
-        setFiles(selectedListBox.getItems());
-      }
-    }
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectSingleFilePage.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectSingleFilePage.java
deleted file mode 100644
index 78af295..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectSingleFilePage.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - Initial API and implementation
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.viewers;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.ViewerFilter;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.ui.IWorkbench;
-//import org.eclipse.ui.help.WorkbenchHelp;
-
-public class SelectSingleFilePage extends WizardPage
-{
-  protected IWorkbench workbench;
-  protected SelectSingleFileView selectSingleFileView;
-  
-  // parameter isFileMandatory is used to determine if a file must be selected  
-  // before being able to proceed to the next page
-  public SelectSingleFilePage(IWorkbench workbench, IStructuredSelection selection, boolean isFileMandatory)
-  {
-    super("SelectSingleFilePage");
-    this.workbench = workbench;           
-    selectSingleFileView = new SelectSingleFileView(selection, isFileMandatory);    
-  }
-
-  public void setVisible(boolean visible)
-  {
-    selectSingleFileView.setVisibleHelper(visible);
-    super.setVisible(visible);
-  }
-
-  public void createControl(Composite parent)
-  {                          
-    SelectSingleFileView.Listener listener = new SelectSingleFileView.Listener()
-    {                                             
-      public void setControlComplete(boolean isComplete)
-      {
-        setPageComplete(isComplete);
-      }
-    };
-    selectSingleFileView.setListener(listener);
-    Control control = selectSingleFileView.createControl(parent);
-//    WorkbenchHelp.setHelp(control, B2BGUIContextIds.BTBG_SELECT_SINGLE_FILE_PAGE);
-    setControl(control);
-  }  
-
-  public void addFilter(ViewerFilter filter) 
-  { 
-    selectSingleFileView.addFilter(filter);
-  }
-
-  public void addFilterExtensions(String[] filterExtensions)
-  { 
-    selectSingleFileView.addFilterExtensions(filterExtensions);
-  }     
-
-  public void resetFilters()
-  {    
-    selectSingleFileView.resetFilters();
-  }
-  
-  public IFile getFile()
-  {  
-    return selectSingleFileView.getFile();
-  }
-  
-  
-  /**
-   * Returns the selectSingleFileView.
-   * @return SelectSingleFileView
-   */
-  public TreeViewer getSourceFileViewer() {
-    return selectSingleFileView.sourceFileViewer;
-  }
-
-  /**
-   * Returns the selectSingleFileView.
-   * @return SelectSingleFileView
-   */
-  public SelectSingleFileView getSelectSingleFileView() {
-    return selectSingleFileView;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectSingleFileView.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectSingleFileView.java
deleted file mode 100644
index b63c506..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectSingleFileView.java
+++ /dev/null
@@ -1,400 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - Initial API and implementation
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.viewers;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Vector;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IResourceDeltaVisitor;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.ViewerFilter;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.model.WorkbenchContentProvider;
-import org.eclipse.ui.model.WorkbenchLabelProvider;
-import org.eclipse.ui.wizards.datatransfer.FileSystemImportWizard;
-import org.eclipse.wst.common.ui.internal.UIPlugin;
-
-    
-
-public class SelectSingleFileView
-{                                
-  protected Composite            composite;
-  protected IStructuredSelection selection;
-  protected boolean              isFileMandatory;
-  protected TreeViewer           sourceFileViewer;
-  protected Button               importButton;
-  protected Vector               fFilters;
-  protected IFile                selectedFile;
-  protected ISelection           defaultSelection;  
-  protected Listener             listener;
-  
-  public static interface Listener
-  {
-    public void setControlComplete(boolean isComplete); 
-  }
-
-  public SelectSingleFileView(IStructuredSelection selection, boolean isFileMandatory)
-  {                      
-    this.selection = selection;
-    this.isFileMandatory = isFileMandatory;
-    this.selectedFile= null;
-    this.defaultSelection = null;      
-  }                              
-
-  public Composite createControl(Composite parent)
-  {              
-    Composite composite = new Composite(parent, SWT.NONE);
-    composite.setLayout(new GridLayout());
-    composite.setLayoutData(new GridData(GridData.FILL_BOTH));
-	Label label = new Label(composite, SWT.NONE);
-	label.setText(UIPlugin.getResourceString("_UI_LABEL_SOURCE_FILES"));
-    createSourceViewer(composite);
-	  createFilterControl(composite);   
-    createImportButton(composite);  
-    return composite;
-  }
-
-
-  protected void createFilterControl(Composite composite) 
-  {	
-  } 
-
-public void setListener(Listener listener)
-  {
-    this.listener = listener;
-  }  
-
-  protected void createSourceViewer(Composite parent)
-  {
-    sourceFileViewer = new TreeViewer(new Tree(parent, SWT.SINGLE | SWT.BORDER));
-    sourceFileViewer.setContentProvider(new WorkbenchContentProvider());
-    sourceFileViewer.setLabelProvider(new WorkbenchLabelProvider());
-    sourceFileViewer.addSelectionChangedListener(new ISelectionChangedListener() 
-    {
-      public void selectionChanged(SelectionChangedEvent event) 
-      {                  
-        boolean isComplete = true;
-        java.util.List list;
-        ISelection selection = event.getSelection();
-        if (selection instanceof IStructuredSelection) 
-        {
-          list = ((IStructuredSelection)selection).toList();
-          for (Iterator i = list.iterator(); i.hasNext();)
-          {
-            IResource resource = (IResource) i.next();
-            if (resource instanceof IFile) 
-            {
-              selectedFile = (IFile) resource;
-              if (isFileMandatory) 
-              {                                   
-                isComplete = true;
-                break;     
-              }                                   
-            }            
-            else 
-            {
-              selectedFile = null;
-              if (isFileMandatory) 
-              {            
-                isComplete = false;
-              }
-            }
-          } 
-          
-          if (listener != null)
-          {           
-            listener.setControlComplete(isComplete);
-          }
-        }
-      }	
-    });
-    Control treeWidget = sourceFileViewer.getTree();
-    GridData gd = new GridData(GridData.FILL_BOTH);
-    treeWidget.setLayoutData(gd);
-  }
-  
-                                        
-  protected void createImportButton(Composite parent)
-  {   
-    importButton = new Button(parent, SWT.NONE);
-    importButton.setText(UIPlugin.getResourceString("_UI_IMPORT_BUTTON"));
-    
-    GridData gridData = new GridData();    
-    gridData.horizontalAlignment = GridData.CENTER;
-    importButton.setLayoutData(gridData);
-    importButton.addSelectionListener(new SelectionListener()
-    {
-      public void widgetDefaultSelected(SelectionEvent e)
-      {
-      }
-
-      public void widgetSelected(SelectionEvent e)
-      {                 
-        // This listener is if the Import Wizard adds a new few, we want
-        // it to be selected when we come back from it
-        ImportAddResourceListener importAddResourceListener= new ImportAddResourceListener();
-        
-        ResourcesPlugin.getWorkspace().addResourceChangeListener(importAddResourceListener);
-          
-        FileSystemImportWizard importWizard = new FileSystemImportWizard();
-        IWorkbench workbench = UIPlugin.getDefault().getWorkbench();
-        selection = (IStructuredSelection) sourceFileViewer.getSelection();
-        importWizard.init(workbench, selection != null ? selection : new StructuredSelection());
-        Shell shell = Display.getCurrent().getActiveShell();
-        WizardDialog wizardDialog = new WizardDialog(shell, importWizard);
-        wizardDialog.create();
-        wizardDialog.open();
-        sourceFileViewer.refresh();
-        ResourcesPlugin.getWorkspace().removeResourceChangeListener(importAddResourceListener);
-        IFile importedFile = importAddResourceListener.getImportedFile();
-        if (importedFile != null) 
-        {          
-          StructuredSelection structuredSelection = new StructuredSelection(importedFile);
-          sourceFileViewer.setSelection(structuredSelection);
-        }
-      }
-    });                  
-    importButton.setToolTipText(UIPlugin.getResourceString("_UI_IMPORT_BUTTON_TOOL_TIP"));
-  } 
-
-  public IFile getFile()
-  {
-    return selectedFile;
-  }
-
-  public void setDefaultSelection(ISelection selection)
-  {
-    this.defaultSelection = selection;
-  } 
-
-  public void resetFilters()
-  {
-    fFilters=null;
-  }
-
-  public void addFilter(ViewerFilter filter) 
-  {
-    if (fFilters == null)
-    {
-      fFilters= new Vector();
-    }
-    fFilters.add(filter);
-  }
-
-  // This is a convenience method that allows filtering of the given file
-  // exensions. It internally creates a ResourceFilter so that users of this
-  // class don't have to construct one.
-  // If the extensions provided don't have '.', one will be added.
-  public void addFilterExtensions(String[] filterExtensions)
-  {
-    // First add the '.' to the filterExtensions if they don't already have one
-    String[] correctedFilterExtensions = new String[filterExtensions.length];
-    for (int i=0; i < filterExtensions.length; i++) 
-    {
-      // If the extension doesn't start with a '.', then add one.
-      if (filterExtensions[i].startsWith("."))
-      {
-        correctedFilterExtensions[i] = filterExtensions[i];
-      }
-      else
-      {
-        correctedFilterExtensions[i] = "." + filterExtensions[i];
-      }
-    }
-
-    ViewerFilter filter = new ResourceFilter(correctedFilterExtensions, null);
-    addFilter(filter);
-  }                     
-
-// This is a convenience method that allows filtering of the given file
-// exensions. It internally creates a ResourceFilter so that users of this
-// class don't have to construct one.
-// If the extensions provided don't have '.', one will be added.
-  public void addFilterExtensions(String[] filterExtensions, IFile [] excludedFiles)
-  {
-    // First add the '.' to the filterExtensions if they don't already have one
-    String[] correctedFilterExtensions = new String[filterExtensions.length];
-    for (int i=0; i < filterExtensions.length; i++)
-    {
-      // If the extension doesn't start with a '.', then add one.
-      if (filterExtensions[i].startsWith("."))
-      {
-        correctedFilterExtensions[i] = filterExtensions[i];
-      }
-      else
-      {
-        correctedFilterExtensions[i] = "." + filterExtensions[i];
-      }
-    }
-    ViewerFilter filter;
-    if (excludedFiles != null)
-    {
-      filter = new ResourceFilter(correctedFilterExtensions, excludedFiles, null);
-    }
-    else
-    {
-      filter = new ResourceFilter(correctedFilterExtensions, null);
-    }
-    addFilter(filter);
-  }
-  
-  // This is a convenience method that allows filtering of the given file
-  // exensions. It internally creates a ResourceFilter so that users of this
-  // class don't have to construct one.
-  // If the extensions provided don't have '.', one will be added.
-  public void setFilterExtensions(String[] filterExtensions)
-  {
-	// First add the '.' to the filterExtensions if they don't already have one
-	String[] correctedFilterExtensions = new String[filterExtensions.length];
-	for (int i=0; i < filterExtensions.length; i++) 
-	{		
-	  // If the extension doesn't start with a '.', then add one.
-	  if (filterExtensions[i].startsWith("."))
-	  {
-		correctedFilterExtensions[i] = filterExtensions[i];
-	  }
-	  else
-	  {
-		correctedFilterExtensions[i] = "." + filterExtensions[i];
-	  }
-	}
-	ViewerFilter filter = new ResourceFilter(correctedFilterExtensions, null);
-    fFilters= new Vector();
-	fFilters.add(filter);
-	if (sourceFileViewer != null)
-	{	
-	  sourceFileViewer.getTree().setRedraw(false);
-      sourceFileViewer.resetFilters();
-      for (Iterator i=fFilters.iterator(); i.hasNext();)
-      {     
-	    sourceFileViewer.addFilter((ViewerFilter)i.next());
- 	  }
-	  sourceFileViewer.getTree().setRedraw(true);
-	  sourceFileViewer.getTree().redraw();
-	}	
-  }     
-                                 
-  // this method should be called by a Wizard page or Dialog when it becomes visible
-  public void setVisibleHelper(boolean visible)
-  {    
-    if (visible == true) 
-    {
-      if (fFilters != null) 
-      {
-        sourceFileViewer.resetFilters();
-        for (Iterator i=fFilters.iterator(); i.hasNext();) 
-       	  sourceFileViewer.addFilter((ViewerFilter)i.next());
-      }
-      sourceFileViewer.setInput(ResourcesPlugin.getWorkspace().getRoot());
-      sourceFileViewer.expandToLevel(2);
-
-      if (defaultSelection != null) 
-      {
-        sourceFileViewer.setSelection(defaultSelection, true);        
-      }   
-      else if (!sourceFileViewer.getSelection().isEmpty())
-      {     
-        sourceFileViewer.setSelection(sourceFileViewer.getSelection());
-      } 
-      else
-      {                         
-        if (isFileMandatory && listener != null)
-        {           
-          listener.setControlComplete(false);
-        }
-      }         
-    }                                   
-  }
-  
-  class ImportAddResourceListener implements IResourceChangeListener, IResourceDeltaVisitor
-  {
-	Vector importedFiles;
-
-	ImportAddResourceListener()
-	{
-	  importedFiles = new Vector(); 
-	}
-  
-	public void resourceChanged(IResourceChangeEvent event)
-	{
-	  IResourceDelta resourceDelta = event.getDelta();
-    
-	  try
-	  {
-		if (resourceDelta != null) 
-		{
-		  resourceDelta.accept(this);
-		}
-	  }
-	  catch (Exception e)
-	  {
-		//TODO... log exception
-		//UIPlugin.getMsgLogger().write("Exception caught during resource change" + e);
-		//UIPlugin.getMsgLogger().writeCurrentThread(); 
-	  }      
-	}
-
-	public boolean visit(IResourceDelta delta)
-	{
-	  if (delta.getKind() == IResourceDelta.ADDED)
-	  {
-		if (delta.getResource() instanceof IFile) 
-		  importedFiles.add(delta.getResource());
-	  }
-	  return true;
-	}
-
-	public Collection getImportedFiles()
-	{
-	  return importedFiles;
-	}
-    
-	// This returns the first imported file in the list of imported files
-	public IFile getImportedFile()
-	{
-	  if (importedFiles.isEmpty() == false) 
-		return (IFile)importedFiles.firstElement();
-  
-	  return null;
-	}
-  }  
-  
-  public void addSelectionChangedTreeListener(ISelectionChangedListener treeListener) {
-  	sourceFileViewer.addSelectionChangedListener(treeListener);
-  }
-}              
-
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/TableNavigator.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/TableNavigator.java
deleted file mode 100644
index e729cfb..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/TableNavigator.java
+++ /dev/null
@@ -1,409 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - Initial API and implementation
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.viewers;
-
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.*;
-
-import org.eclipse.swt.custom.TableCursor;
-import org.eclipse.swt.custom.TableTreeItem;
-import org.eclipse.jface.viewers.*;
-
-
-  /**
-   * Adds a TableCursor to a StructuredViewer - for keyboard navigation of the table
-   * The intent of this class is to provide the standard listeners for using F2 to
-   * activate cell editors.
-   *
-   * Due to a current bug in the TableCursor, TableViewers using this class must make
-   * a call similar to the TableNavigator method moveCellEditorsAbove(cellEditors)
-   * whenever a setCellEditors call is made in the StructuredViewer.  This is so that the
-   * cell editor control shows up above the table cursor control.
-   */
-
-public class TableNavigator extends TableCursor
-{
-  private static final String TABLETREEITEM_ID = "TableTreeItemID";
-
-   final Table table;
-
-   public TableNavigator(Table table, StructuredViewer viewer)
-   {
-      super(table, SWT.NONE);
-      this.table = table;
-      final Table currentTable = table;
-      final StructuredViewer sViewer = viewer;
-
-      // Linux index out of bounds fix.  See defect 253429, 253433, and more
-      setVisible(false);
-
-      addPaintListener(viewer);
-      addKeyListeners(viewer);
-      addMouseListeners(viewer);
-      addSelectionListener(new SelectionAdapter()
-      {
-      	/**
-		 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(SelectionEvent)
-		 */
-		public void widgetSelected(SelectionEvent e) {
-			super.widgetSelected(e);
-			     if (sViewer instanceof TableTreeViewer)
-                 {
-                   TableTreeItem tableTreeItem = (TableTreeItem)getRow().getData(TABLETREEITEM_ID);
-                   StructuredSelection selection = new StructuredSelection(tableTreeItem.getData());
-                   sViewer.setSelection(selection, true);
-                 }
-		}
-
-
-      });
-      addFocusListener(new FocusAdapter(){
-         public void focusGained(FocusEvent e)
-         {
-         	// if e.source is not a child of the table then set selection - this is for tab into viewer
-         	Object eventSource = e.getSource();
-         	if (eventSource instanceof Control)
-         	{
-         	if (!isChild(currentTable, (Control)eventSource))
-         	{
-         	  if (currentTable.getItemCount() > 0 && currentTable.getSelectionCount() <= 0)
-              {
-                 if (sViewer instanceof TableTreeViewer)
-                 {
-                   TableTreeItem tableTreeItem = (TableTreeItem)getRow().getData(TABLETREEITEM_ID);
-                   StructuredSelection selection = new StructuredSelection(tableTreeItem.getData());
-                   sViewer.setSelection(selection, true);
-                 }
-                 else
-                 {
-               	   currentTable.setSelection(0); 
-               	   setSelection(0,0);
-                 }              
-              }              
-       	    }
-       	    else 
-       	    {
-       	      if (currentTable.getItems().length > 0)
-       	      {
-       	      	 // cursor can end up on a non-existent table row 
-       	         //   currently no way to get the current table cursor row 
-       	      	 //   so for now just catch the exception since it doesn't
-       	      	 //   cause any side effects.
-       	      	 try
-       	      	 {
-                   setVisible(true);
-       	      	 }
-       	      	 catch (Exception ee)
-       	      	 {     	            	      	
-       	      		currentTable.setSelection(0);       	      		         
-       	      		setSelection(0,0);
-       	      	 }
-       	       }       	    
-       	       else  // do not show table cursor if there are no elements in the table - avoid repaint
-       	       {
-       	         setVisible(false);
-       	       }
-              }
-         	}          
-          }
-          
-          protected boolean isChild(Control parent, Control child)
-          {
-            Control tempChild = child;
-            while (tempChild != null)
-            {
-              if (tempChild == parent)
-              {
-                return true;
-              }
-              tempChild = tempChild.getParent();
-            }
-            return false;
-          }
-          
-          /**
-           * @see org.eclipse.swt.events.FocusAdapter#focusLost(FocusEvent)
-           */
-          public void focusLost(FocusEvent e)
-          {
-            // Set the table navigator to be not visible if the the table
-            // is not in focus and a child of the table is not in focus
-            // note that we do this asynchronously so we don't mess up the
-            // current focus handling.
-            Display.getDefault().asyncExec(new Runnable()
-            { 
-              /**
-               * @see java.lang.Runnable#run()
-               */
-              public void run()
-              {
-                if (currentTable != null && !currentTable.isDisposed() && !currentTable.isFocusControl() &&
-                    !isChild(currentTable, Display.getDefault().getFocusControl()))
-                {
-                  setVisible(false);
-                }
-              }
-            });
-          }
-
-      }); 
-      
-     
-      
-
-      table.addFocusListener(new FocusAdapter()
-      {
-        /**
-         * @see org.eclipse.swt.events.FocusListener#focusGained(FocusEvent)
-         */
-        public void focusGained(FocusEvent e)
-        {
-          // only display navigator if there are items in the table 
-          // and if the focus wasn't gained from our own table navigator
-          // (ie focus came from outside)
-          if (currentTable.getItemCount() > 0 &&
-              (Display.getDefault().getFocusControl() != null) &&
-              !Display.getDefault().getFocusControl().equals(TableNavigator.this))
-          {
-            // note that we do this asynchronously so we don't mess up the
-            // current focus handling.
-            Display.getDefault().asyncExec(new Runnable()            
-            {
-              /**
-               * @see java.lang.Runnable#run()
-               */
-              public void run()
-              {
-                if (!isVisible())
-                {
-                  try
-                  {
-                    setVisible(true);
-                    setFocus();
-                  }
-                  catch (Exception e)
-                  {
-                      // catch IllegalArgumentExceptions here - index out of bounds on tableviewer
-                      if (currentTable.getItemCount() > 0)
-                      {
-                      currentTable.setSelection(0);                     
-                      setSelection(0,0);                   
-                      }
-                      else  // do not show table cursor if there are no elements in the table - avoid repaint
-                      {
-                        setVisible(false);
-                      }
-                  }
-                }
-              }
-            });
-          }
-        }
-      });           
-   }
-
-   public Table getTable()
-   {
-     return table;
-   }
-
-    public void addPaintListener(StructuredViewer viewer)
-    {
-      final StructuredViewer tableViewer = viewer;
-
-      addPaintListener(new PaintListener() 
-      {
-         public void paintControl(PaintEvent e)
-         {
-         	TableItem[] selection = table.getSelection();
-            final TableItem row = (selection.length == 0) ? table.getItem(table.getTopIndex()) : selection[0];
-            final String cellText = row.getText(getColumn());
-            final Image cellImage = row.getImage(getColumn());
-            final int col = getColumn();
-
-            Display.getCurrent().asyncExec(new Runnable()
-            {
-               public void run()
-               {
-                  if (!row.isDisposed())
-                  {
-                     String newText = row.getText(getColumn());
-                     TableItem cursorRow = getRow();
-                     if (!newText.equals(cellText) || !(row.getImage(col) == cellImage)) 
-                     {
-                       redraw();
-                     }
-                  }
-                }
-             });
-           }
-       });
-    }
-
-
-    public SelectionKeyAdapter getKeyAdapter(StructuredViewer viewer)
-    {
-        if (keyAdapter == null)
-        {
-           return new SelectionKeyAdapter(viewer);
-        }
-        else return keyAdapter;
-    }
-
-    public void setKeyAdapter(SelectionKeyAdapter kAdapter)
-    {
-       keyAdapter = kAdapter;
-    }
-
-    protected SelectionKeyAdapter keyAdapter = null;
-
-    public class SelectionKeyAdapter extends KeyAdapter
-    {
-       StructuredViewer structuredViewer;
-
-       public SelectionKeyAdapter(StructuredViewer viewer)
-       {
-          super();
-          this.structuredViewer = viewer;
-       }
-
-       int lastKeyPressed = -1;  // used to cache the last key for key combos
-
-       public void keyPressed(KeyEvent e) 
-       {       	
-               TableItem row = getRow();
-               int column = getColumn();                
-
-               // hack to emulate SHIFT+F10 popup menu - otherwise table cursor
-               //   obscures the table popup mechanism and it doesn't work.
-               if (lastKeyPressed == SWT.SHIFT && e.keyCode == SWT.F10)
-               {
-                  Menu popup = getTable().getMenu();
-                  popup.setVisible(true);
-               }
-               lastKeyPressed = e.keyCode;
-               
-               //jvh - look for + or - key
-               // column == 0
-               if (row.getData(TABLETREEITEM_ID) instanceof TableTreeItem)
-               {
-	               if (column == 0 && e.character == '+') 
-	               {
-               	  	  TableTreeItem tableTreeItem = (TableTreeItem)row.getData(TABLETREEITEM_ID);	               	
-	               	  ((TableTreeViewer)structuredViewer).setExpandedState(tableTreeItem.getData(), true);                       
-	               	  refresh();
-	               }
-	               else if (column == 0 && e.character == '-') 
-	               {
-	               	  TableTreeItem tableTreeItem = (TableTreeItem)row.getData(TABLETREEITEM_ID);	               	
-	               	  ((TableTreeViewer)structuredViewer).setExpandedState(tableTreeItem.getData(), false);                       
-                      refresh();
-	               }               
-               }
-               // use F2 to invoke editing for a cell
-               if (e.keyCode == SWT.F2)     
-               {
-               	  if (structuredViewer instanceof TableViewer)
-               	  {
-                    ((TableViewer)structuredViewer).editElement(row.getData(), column);   
-               	  }
-               	  else if (structuredViewer instanceof TableTreeViewer)
-               	  {  
-               	  	  TableTreeItem tableTreeItem = (TableTreeItem)row.getData(TABLETREEITEM_ID);
-               	  	 ((TableTreeViewer)structuredViewer).editElement(tableTreeItem.getData(), column);   
-               	  }
-               }
-        }
-    }
-
-    public void addKeyListeners(StructuredViewer viewer)
-    {
-      final StructuredViewer structuredViewer = viewer;
-                     
-      addKeyListener(getKeyAdapter(structuredViewer));
-    }      
-    
-   public void addMouseListeners(StructuredViewer viewer)
-   {
-      final StructuredViewer structuredViewer = viewer;
-
-      addMouseListener(new MouseAdapter()
-      {
-
-         public void mouseUp(MouseEvent e) 
-         {        
-               TableItem row = getRow();
-               int column = getColumn(); 
-         
-               // use mouse button 1 to invoke editing for a cell
-               if (e.button == 1)     
-               {
-                  if (structuredViewer instanceof TableViewer)
-                        {
-                     ((TableViewer)structuredViewer).editElement(row.getData(), column);   
-                        }
-                        else if (structuredViewer instanceof TableTreeViewer && column == 1)
-                        {
-                                 TableTreeItem tableTreeItem = (TableTreeItem)row.getData(TABLETREEITEM_ID);
-                                ((TableTreeViewer)structuredViewer).editElement(tableTreeItem.getData(), column);   
-                        }                                               
-               
-                 if (structuredViewer instanceof TableTreeViewer && row.getData(TABLETREEITEM_ID) instanceof TableTreeItem)
-                 {              
-                                   if (column == 0)
-                                   {
-                                    TableTreeItem tableTreeItem = (TableTreeItem)row.getData(TABLETREEITEM_ID);                             
-                                          boolean expandState = tableTreeItem.getExpanded();
-                       ((TableTreeViewer)structuredViewer).setExpandedState(tableTreeItem.getData(), !expandState);
-                       refresh();
-                    }
-                 }
-               }          
-            }
-      });
-     }
-
-
-  /**
-   * Ensure that cell editor control shows up above the table cursor control.
-   * Should be called whenever the table viewer makes a new call to setCellEditors
-   * i.e. in constructor and in refreshCellEditors
-   *
-   * @param - array of cell editors for the StructuredViewer
-   */
-
-  public void moveCellEditorsAbove(CellEditor[] editorArray)
-  {
-    for (int i = 0; i < editorArray.length ; i++)
-    {
-      CellEditor cEd = editorArray[i];
-      if (cEd != null && cEd.getControl() != null)
-      {
-        cEd.getControl().moveAbove(null);
-      }
-    }
-  }
-
-  public void refresh()
-  {
-     Display.getCurrent().asyncExec(new Runnable()
-     {
-        public void run()
-        {
-           if (!isDisposed() && isVisible())
-             redraw();
-        }
-     });
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/provisional/editors/PostMultiPageEditorSite.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/provisional/editors/PostMultiPageEditorSite.java
deleted file mode 100644
index da78acd..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/provisional/editors/PostMultiPageEditorSite.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.ui.provisional.editors;
-
-import org.eclipse.jface.viewers.IPostSelectionProvider;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.part.MultiPageEditorPart;
-import org.eclipse.ui.part.MultiPageEditorSite;
-
-public class PostMultiPageEditorSite extends MultiPageEditorSite {
-	/**
-	 * The post selection change listener, initialized lazily;
-	 * <code>null</code> if not yet created.
-	 */
-	private ISelectionChangedListener postSelectionChangedListener = null;
-
-	public PostMultiPageEditorSite(MultiPageEditorPart multiPageEditor, IEditorPart editor) {
-		super(multiPageEditor, editor);
-	}
-
-	/**
-	 * Returns the selection changed listener which listens to the nested
-	 * editor's post selection changes, and calls
-	 * <code>handlePostSelectionChanged</code>.
-	 * 
-	 * @return the selection changed listener
-	 */
-	private ISelectionChangedListener getPostSelectionChangedListener() {
-		if (postSelectionChangedListener == null) {
-			postSelectionChangedListener = new ISelectionChangedListener() {
-				public void selectionChanged(SelectionChangedEvent event) {
-					PostMultiPageEditorSite.this.handlePostSelectionChanged(event);
-				}
-			};
-		}
-		return postSelectionChangedListener;
-	}
-
-	/**
-	 * Handles a post selection changed event from the nested editor. The
-	 * default implementation gets the selection provider from the multi-page
-	 * editor's site, and calls <code>firePostSelectionChanged</code> on it
-	 * (only if it is an instance of <code>MultiPageSelectionProvider</code>),
-	 * passing a new event object.
-	 * <p>
-	 * Subclasses may extend or reimplement this method.
-	 * </p>
-	 * 
-	 * @param event
-	 *            the event
-	 */
-	protected void handlePostSelectionChanged(SelectionChangedEvent event) {
-		ISelectionProvider parentProvider = getMultiPageEditor().getSite().getSelectionProvider();
-		if (parentProvider instanceof PostMultiPageSelectionProvider) {
-			SelectionChangedEvent newEvent = new SelectionChangedEvent(parentProvider, event.getSelection());
-			((PostMultiPageSelectionProvider) parentProvider).firePostSelectionChanged(newEvent);
-		}
-	}
-
-	/**
-	 * The <code>MultiPageEditorSite</code> implementation of this
-	 * <code>IWorkbenchPartSite</code> method remembers the selection
-	 * provider, and also hooks a listener on it, which calls
-	 * <code>handleSelectionChanged</code> when a selection changed event
-	 * occurs and <code>handlePostSelectionChanged</code> when a post
-	 * selection changed event occurs.
-	 * 
-	 * @param provider
-	 *            The selection provider.
-	 * @see PostMultiPageEditorSite#handleSelectionChanged(SelectionChangedEvent)
-	 */
-	public void setSelectionProvider(ISelectionProvider provider) {
-		ISelectionProvider oldSelectionProvider = getSelectionProvider();
-		if (oldSelectionProvider != null) {
-			if (oldSelectionProvider instanceof IPostSelectionProvider) {
-				((IPostSelectionProvider) oldSelectionProvider).removePostSelectionChangedListener(getPostSelectionChangedListener());
-			}
-		}
-
-		super.setSelectionProvider(provider);
-
-		if (provider != null) {
-			if (provider instanceof IPostSelectionProvider) {
-				((IPostSelectionProvider) provider).addPostSelectionChangedListener(getPostSelectionChangedListener());
-			}
-		}
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/provisional/editors/PostMultiPageSelectionProvider.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/provisional/editors/PostMultiPageSelectionProvider.java
deleted file mode 100644
index acdf9df..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/provisional/editors/PostMultiPageSelectionProvider.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.ui.provisional.editors;
-
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jface.util.ListenerList;
-import org.eclipse.jface.util.SafeRunnable;
-import org.eclipse.jface.viewers.IPostSelectionProvider;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.ui.part.MultiPageEditorPart;
-import org.eclipse.ui.part.MultiPageSelectionProvider;
-
-public class PostMultiPageSelectionProvider extends MultiPageSelectionProvider implements IPostSelectionProvider {
-	private ListenerList postListeners;
-
-	public PostMultiPageSelectionProvider(MultiPageEditorPart multiPageEditor) {
-		super(multiPageEditor);
-		postListeners = new ListenerList();
-	}
-
-	public void addPostSelectionChangedListener(ISelectionChangedListener listener) {
-		postListeners.add(listener);
-	}
-
-	public void firePostSelectionChanged(final SelectionChangedEvent event) {
-		Object[] listeners = postListeners.getListeners();
-		for (int i = 0; i < listeners.length; ++i) {
-			final ISelectionChangedListener pl = (ISelectionChangedListener) listeners[i];
-			Platform.run(new SafeRunnable() {
-				public void run() {
-					pl.selectionChanged(event);
-				}
-			});
-		}
-	}
-
-	public void removePostSelectionChangedListener(ISelectionChangedListener listener) {
-		postListeners.remove(listener);
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/provisional/editors/PostSelectionMultiPageEditorPart.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/provisional/editors/PostSelectionMultiPageEditorPart.java
deleted file mode 100644
index 00da77b..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/provisional/editors/PostSelectionMultiPageEditorPart.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
- * 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.ui.provisional.editors;
-
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IEditorSite;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.part.MultiPageEditorPart;
-
-/**
- * Adds posts selection notifications from contained editor parts to
- * listeners. This part was created as a workaround for
- * https://bugs.eclipse.org/bugs/show_bug.cgi?id=108324 and will be removed
- * once WTP is building on a platform milestone that includes a fix.
- */
-public abstract class PostSelectionMultiPageEditorPart extends MultiPageEditorPart {
-	public void init(IEditorSite site, IEditorInput input) throws PartInitException {
-		super.init(site, input);
-		site.setSelectionProvider(new PostMultiPageSelectionProvider(this));
-	}
-
-	protected void pageChange(int newPageIndex) {
-		super.pageChange(newPageIndex);
-		IEditorPart activeEditor = getEditor(newPageIndex);
-		if (activeEditor != null) {
-			ISelectionProvider selectionProvider = activeEditor.getSite().getSelectionProvider();
-			if (selectionProvider != null) {
-				SelectionChangedEvent event = new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection());
-				((PostMultiPageSelectionProvider) getSite().getSelectionProvider()).firePostSelectionChanged(event);
-			}
-		}
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.uriresolver/.classpath b/plugins/org.eclipse.wst.common.uriresolver/.classpath
index 751c8f2..ce73933 100644
--- a/plugins/org.eclipse.wst.common.uriresolver/.classpath
+++ b/plugins/org.eclipse.wst.common.uriresolver/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.wst.common.uriresolver/.cvsignore b/plugins/org.eclipse.wst.common.uriresolver/.cvsignore
index 80bdb6d..30d3363 100644
--- a/plugins/org.eclipse.wst.common.uriresolver/.cvsignore
+++ b/plugins/org.eclipse.wst.common.uriresolver/.cvsignore
@@ -5,3 +5,4 @@
 org.eclipse.wst.common.uriresolver_1.0.0.jar
 @dot
 src.zip
+javaCompiler...args
diff --git a/plugins/org.eclipse.wst.common.uriresolver/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.common.uriresolver/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..b8a0d61
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.uriresolver/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,57 @@
+#Mon Jan 30 19:48:07 EST 2006
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLocal=error
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/plugins/org.eclipse.wst.common.uriresolver/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.uriresolver/META-INF/MANIFEST.MF
index 9db0bb5..66af992 100644
--- a/plugins/org.eclipse.wst.common.uriresolver/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.uriresolver/META-INF/MANIFEST.MF
@@ -2,14 +2,15 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.common.uriresolver; singleton:=true
-Bundle-Version: 1.0.0
+Bundle-Version: 1.1.301.qualifier
 Bundle-Activator: org.eclipse.wst.common.uriresolver.internal.provisional.URIResolverPlugin
-Bundle-Vendor: %pluginProvider
+Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: org.eclipse.wst.common.uriresolver.internal,
  org.eclipse.wst.common.uriresolver.internal.provisional,
-  org.eclipse.wst.common.uriresolver.internal.util
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.core.resources
-Eclipse-AutoStart: true
+ org.eclipse.wst.common.uriresolver.internal.util
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)"
+Eclipse-LazyStart: true
 Bundle-ClassPath: .
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/plugins/org.eclipse.wst.common.uriresolver/about.html b/plugins/org.eclipse.wst.common.uriresolver/about.html
index 6f6b96c..2199df3 100644
--- a/plugins/org.eclipse.wst.common.uriresolver/about.html
+++ b/plugins/org.eclipse.wst.common.uriresolver/about.html
@@ -1,22 +1,34 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
+<HTML>
+
 <head>
 <title>About</title>
 <meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
 </head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
 
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+<BODY lang="EN-US">
 
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
+<H3>About This Content</H3>
 
-</body>
-</html>
\ No newline at end of file
+<P>June, 2008</P>
+
+<H3>License</H3>
+
+<P>The Eclipse Foundation makes available all content in this plug-in 
+("Content"). Unless otherwise indicated below, the Content is provided to you 
+under the terms and conditions of the Eclipse Public License Version 1.0 
+("EPL"). A copy of the EPL is available at
+<A href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</A>. 
+For purposes of the EPL, "Program" will mean the Content.</P>
+
+<P>If you did not receive this Content directly from the Eclipse Foundation, the 
+Content is being redistributed by another party ("Redistributor") and different 
+terms and conditions may apply to your use of any object code in the Content. 
+Check the Redistributor’s license that was provided with the Content. If no such 
+license exists, contact the Redistributor. Unless otherwise indicated below, the 
+terms and conditions of the EPL still apply to any source code in the Content 
+and such source code may be obtained at
+<A href="http://www.eclipse.org/">http://www.eclipse.org/</A>.</P>
+
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.wst.common.uriresolver/build.properties b/plugins/org.eclipse.wst.common.uriresolver/build.properties
index afe5fa3..a1aa98a 100644
--- a/plugins/org.eclipse.wst.common.uriresolver/build.properties
+++ b/plugins/org.eclipse.wst.common.uriresolver/build.properties
@@ -4,7 +4,8 @@
                META-INF/,\
                about.html,\
                .,\
-               plugin.properties
+               plugin.properties,\
+               schema/
 bin.excludes = bin/**,\
                @dot/**,\
                temp.folder/**
diff --git a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/ExtensibleURIResolver.java b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/ExtensibleURIResolver.java
index aa3c82b..e9b2c17 100644
--- a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/ExtensibleURIResolver.java
+++ b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/ExtensibleURIResolver.java
@@ -126,45 +126,63 @@
 	  // so return null;
 	  if(systemId == null)
 	    return null;
-		String result = systemId;
-		// normalize the URI
-		URI systemURI = URI.createURI(systemId);
-		if (systemURI.isRelative())
-		{
-			baseLocation = baseLocation.replace('\\','/');
-			URI baseURI = URI.createURI(baseLocation);
-			try
-			{
-			  result = systemURI.resolve(baseURI).toString();
-			}
-			catch (IllegalArgumentException e) {
-				Bundle bundle = URIResolverPlugin.getInstance().getBundle();
-				IStatus statusObj = null;
-				java.net.URI baseURI2 = null;
-				try {
-					baseURI2 = java.net.URI.create(baseLocation);
-				}
-				catch (IllegalArgumentException e2) {
-					if(logExceptions) {
-					    statusObj = new Status(IStatus.ERROR, bundle.getSymbolicName(), IStatus.ERROR, "Problem in creating java.net.URI in ExtensibleURIResolver:" + e2.getMessage(), e2); //$NON-NLS-1$
-					    Platform.getLog(bundle).log(statusObj);
-					}
-				}
-				try {
-					if(baseURI2 != null) {
-						java.net.URI resultURI = baseURI2.resolve(systemId);
-						result = resultURI.toString();
-					}
-				}
-				catch (IllegalArgumentException e2) {
-					if(logExceptions) {
-					    statusObj = new Status(IStatus.ERROR, bundle.getSymbolicName(), IStatus.ERROR, "Problem in resolving with java.net.URI in ExtensibleURIResolver:" + e2.getMessage(), null); //$NON-NLS-1$
-					    Platform.getLog(bundle).log(statusObj);
-					}
-				}
-			}
-		}
-		return result;
+	  String result = systemId;
+      
+      // cs : sometimes normalizing the URI will cause an exception to get thrown
+      // for example the 'bad' version of the URI below ...
+      //
+      //   good = "jar:/resource/project-name/WebContent/WEB-INF/lib/generator.jar!/META-INF/schema/config.dtd"
+      //   bad  = "jar:/resource/project-name/WebContent/WEB-INF/lib/generator.jar/META-INF/schema/config.dtd"
+      //
+      // Here we enclose the normalization in a try/catch block with the assumption that the caller
+      // (i.e. the 'resolve' method) isn't interested in handling this exception.        
+	  try
+	  {
+	    // normalize the URI
+	    URI systemURI = URI.createURI(systemId);
+	    if (systemURI.isRelative())
+	    {
+	      baseLocation = baseLocation.replace('\\','/');
+	      URI baseURI = URI.createURI(baseLocation);
+          
+          // TODO (cs) we should add more comments to explain this in a bit more detail
+	      try
+	      {
+	        result = systemURI.resolve(baseURI).toString();
+	      }
+	      catch (IllegalArgumentException e) {
+	        Bundle bundle = URIResolverPlugin.getInstance().getBundle();
+	        IStatus statusObj = null;
+	        java.net.URI baseURI2 = null;
+	        try {
+	          baseURI2 = java.net.URI.create(baseLocation);
+	        }
+	        catch (IllegalArgumentException e2) {
+	          if(logExceptions) {
+	            statusObj = new Status(IStatus.ERROR, bundle.getSymbolicName(), IStatus.ERROR, "Problem in creating java.net.URI in ExtensibleURIResolver:" + e2.getMessage(), e2); //$NON-NLS-1$
+	            Platform.getLog(bundle).log(statusObj);
+	          }
+	        }
+	        try {
+	          if(baseURI2 != null) {
+	            java.net.URI resultURI = baseURI2.resolve(systemId);
+	            result = resultURI.toString();
+	          }
+	        }
+	        catch (IllegalArgumentException e2) {
+	          if(logExceptions) {
+	            statusObj = new Status(IStatus.ERROR, bundle.getSymbolicName(), IStatus.ERROR, "Problem in resolving with java.net.URI in ExtensibleURIResolver:" + e2.getMessage(), null); //$NON-NLS-1$
+	            Platform.getLog(bundle).log(statusObj);
+	          }
+	        }
+	      }
+	    }
+	  }
+	  catch (Exception e)
+	  {     
+        // just eat the exception and return back the original systemId
+	  }
+	  return result;
 	}
 
   protected IFile computeFile(String baseLocation)
diff --git a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URI.java b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URI.java
index aa411a9..044d20b 100644
--- a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URI.java
+++ b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URI.java
@@ -2763,6 +2763,31 @@
     return 0;
   }
 
+  
+  /**
+   * This method takes two URIs, the first one relative, the second absolute. It
+   * tries to resolve the first URI (making it absolute) by using the second one.
+   * If the URI cannot be resolved, the relative one is returned unmodified.
+   * 
+   * @param relativeURI
+   * @param absoluteURI
+   * @return relativeURI resolved (absolute) or relativeURI unmodified if it cannot
+   * be resolved.
+   */
+  public static String resolveRelativeURI(String relativeURI, String absoluteURI) {
+
+	  String result = relativeURI;
+
+	  try {
+      	URI relative = URI.createURI(relativeURI);
+       	URI absolute = URI.createURI(absoluteURI);
+       	URI resolvedRelative = relative.resolve(absolute);
+       	result = resolvedRelative.toString();
+      } catch (Exception e) {}
+      return result;
+  }
+  
+  
   /*
    * Returns <code>true</code> if this URI contains non-ASCII characters;
    * <code>false</code> otherwise.
diff --git a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistry.java b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistry.java
index d081bf1..1403071 100644
--- a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistry.java
+++ b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistry.java
@@ -112,24 +112,29 @@
 	 */
 	public List getExtensionDescriptors(IProject project)
 	{
-		List result = new ArrayList();
-		for (Iterator i = map.keySet().iterator(); i.hasNext();)
-		{
-			String key = (String) i.next();
-			try
-			{
-				if (key == NULL_PROJECT_NATURE_ID || project == null
-						|| project.hasNature(key))
-				{
-					result.addAll((List) ((HashMap) map.get(key)).get(PRIORITY_HIGH));
-					result.addAll((List) ((HashMap) map.get(key)).get(PRIORITY_MEDIUM));
-					result.addAll((List) ((HashMap) map.get(key)).get(PRIORITY_LOW));
-				}
-			} catch (CoreException e)
-			{
-			}
-		}
-		return result;
+	  List result = new ArrayList();
+	  List lowPriorityList = new ArrayList();
+	  List mediumPriorityList = new ArrayList();
+	  List highPriorityList = new ArrayList();          
+	  for (Iterator i = map.keySet().iterator(); i.hasNext();)
+	  {
+	    String key = (String) i.next();
+	    try
+	    {
+	      if (key == NULL_PROJECT_NATURE_ID || project == null || project.hasNature(key))
+	      {
+	        highPriorityList.addAll((List) ((HashMap) map.get(key)).get(PRIORITY_HIGH));
+	        mediumPriorityList.addAll((List) ((HashMap) map.get(key)).get(PRIORITY_MEDIUM));
+	        lowPriorityList.addAll((List) ((HashMap) map.get(key)).get(PRIORITY_LOW));
+	      }
+	    } catch (CoreException e)
+	    {
+	    }
+	  }
+	  result.addAll(highPriorityList);
+	  result.addAll(mediumPriorityList);
+	  result.addAll(lowPriorityList);
+	  return result;
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistryReader.java b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistryReader.java
index 35eb702..a173f28 100644
--- a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistryReader.java
+++ b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistryReader.java
@@ -113,7 +113,7 @@
 			{
 				try
 				{
-					String pluginId = element.getDeclaringExtension().getNamespace();
+					String pluginId = element.getDeclaringExtension().getNamespaceIdentifier();
 
 					int stageint = URIResolverExtensionRegistry.STAGE_POSTNORMALIZATION;
 					if (stage.equalsIgnoreCase(VAL_STAGE_PRE))
diff --git a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/util/URIHelper.java b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/util/URIHelper.java
index e564f41..8467409 100644
--- a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/util/URIHelper.java
+++ b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/util/URIHelper.java
@@ -1,13 +1,17 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2007 IBM Corporation and others.
  * 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:
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
  *     IBM Corporation - Initial API and implementation
  *     Jens Lukowski/Innoopract - initial renaming/restructuring
+ * 20071205   211262 ericdp@ca.ibm.com - Eric Peters, CopyWSDLTreeCommand fails to copy ?wsdl
  *******************************************************************************/
 package org.eclipse.wst.common.uriresolver.internal.util;
 
@@ -18,9 +22,9 @@
 import java.net.URL;
 
 import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
 
 
 public class URIHelper
@@ -28,7 +32,39 @@
   protected static final String FILE_PROTOCOL = "file:";
   protected static final String PLATFORM_RESOURCE_PROTOCOL = "platform:/resource/";
   protected static final String PROTOCOL_PATTERN = ":"; 
-
+  
+  
+  public static String ensureURIProtocolFormat(String uri) {
+	  String protocol = getProtocol(uri);
+	  if (protocol != null) {
+		  if (protocol.equals(FILE_PROTOCOL)) {
+			  return ensureFileURIProtocolFormat(uri);
+		  }
+	  }
+	 return uri;
+  }
+  
+  
+  /**
+   * This method takes a file URI in String format and ensures the protocol is followed by three slashes.
+   * For example, files "file:D:/XXX", "file:/D:/XXX" and "file://D:/XXX" are corrected to:
+   * "file:///D:/XXX".
+   * If the input is not a file URI (does not start with "file:"), the String is returned unmodified.
+   */
+  public static String ensureFileURIProtocolFormat(String uri) {
+      if (uri.startsWith(FILE_PROTOCOL) && !uri.startsWith(FILE_PROTOCOL + "///")) //$NON-NLS-1$
+      {
+      	if (uri.startsWith(FILE_PROTOCOL + "//")) {
+      		uri = FILE_PROTOCOL + "/" + uri.substring(FILE_PROTOCOL.length()); //$NON-NLS-1$
+      	} else if (uri.startsWith(FILE_PROTOCOL + "/")) {
+      		uri = FILE_PROTOCOL + "//" + uri.substring(FILE_PROTOCOL.length()); //$NON-NLS-1$
+      	} else {
+      		uri = FILE_PROTOCOL + "///" + uri.substring(FILE_PROTOCOL.length()); //$NON-NLS-1$
+      	}
+      }
+     return uri;
+  }
+  
   public static String normalize(String uri)
   {                           
     if (uri != null)
@@ -176,7 +212,7 @@
     {                        
       urlspec = urlspec.replace('\\', '/'); 
       URL url = new URL(urlspec);
-      URL resolvedURL = Platform.resolve(url);
+      URL resolvedURL = FileLocator.resolve(url);
       result = resolvedURL.toString();
     }
     catch (Exception e)
@@ -256,7 +292,7 @@
     if (uri != null)
     {
       int index = uri.indexOf(PROTOCOL_PATTERN);
-      if (index != -1 || uri.startsWith("/"))
+      if (index != -1 || uri.startsWith("/") || uri.startsWith("\\"))
       {
         result = true;
       }
@@ -314,6 +350,11 @@
     return protocol == null || protocol.equals(FILE_PROTOCOL);
   }  
 
+  public static boolean isProtocolFile(String uri)
+  {                                    
+	  return uri != null && uri.startsWith(FILE_PROTOCOL);
+  }  
+
                                            
   protected static boolean isMatchingProtocol(String uri1, String uri2)
   { 
@@ -428,7 +469,7 @@
         if (isProtocolFileOrNull(uri))
         {
           uri = removeProtocol(uri);                            
-          File file = new File(uri);
+          File file = new File(org.eclipse.wst.common.uriresolver.internal.URI.decode(uri));
           result = file.exists() && file.isFile();
         }
         else if (isPlatformResourceProtocol(uri))
diff --git a/plugins/org.eclipse.wst.internet.cache/.classpath b/plugins/org.eclipse.wst.internet.cache/.classpath
index 751c8f2..ce73933 100644
--- a/plugins/org.eclipse.wst.internet.cache/.classpath
+++ b/plugins/org.eclipse.wst.internet.cache/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.wst.internet.cache/.cvsignore b/plugins/org.eclipse.wst.internet.cache/.cvsignore
index 95b91e4..0515302 100644
--- a/plugins/org.eclipse.wst.internet.cache/.cvsignore
+++ b/plugins/org.eclipse.wst.internet.cache/.cvsignore
@@ -4,3 +4,4 @@
 cache.jar
 @dot
 src.zip
+javaCompiler...args
diff --git a/plugins/org.eclipse.wst.internet.cache/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.internet.cache/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..53d1a0e
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.cache/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,57 @@
+#Wed Mar 15 17:27:33 EST 2006
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLocal=error
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/plugins/org.eclipse.wst.internet.cache/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.wst.internet.cache/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..82024b2
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.cache/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,3 @@
+#Wed Mar 15 17:27:33 EST 2006
+eclipse.preferences.version=1
+internal.default.compliance=default
diff --git a/plugins/org.eclipse.wst.internet.cache/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.internet.cache/META-INF/MANIFEST.MF
index d0ec349..c315cde 100644
--- a/plugins/org.eclipse.wst.internet.cache/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.internet.cache/META-INF/MANIFEST.MF
@@ -2,13 +2,15 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %_PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.wst.internet.cache; singleton:=true
-Bundle-Version: 1.0.0
+Bundle-Version: 1.0.301.qualifier
 Bundle-Activator: org.eclipse.wst.internet.cache.internal.CachePlugin
 Bundle-Vendor: %_PLUGIN_PROVIDER
 Bundle-Localization: plugin
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime,
- org.eclipse.wst.common.uriresolver,
- org.eclipse.core.resources
-Eclipse-AutoStart: true
-Export-Package: org.eclipse.wst.internet.cache.internal;x-friends:="org.eclipse.wst.internet.cache.tests"
+Require-Bundle: org.eclipse.ui;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.wst.common.uriresolver;bundle-version="[1.1.301,2.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)"
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.wst.internet.cache.internal;x-friends:="org.eclipse.wst.internet.cache.tests",
+ org.eclipse.wst.internet.cache.internal.preferences;x-internal:=true
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/plugins/org.eclipse.wst.internet.cache/about.html b/plugins/org.eclipse.wst.internet.cache/about.html
index 6f6b96c..2199df3 100644
--- a/plugins/org.eclipse.wst.internet.cache/about.html
+++ b/plugins/org.eclipse.wst.internet.cache/about.html
@@ -1,22 +1,34 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
+<HTML>
+
 <head>
 <title>About</title>
 <meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
 </head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
 
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+<BODY lang="EN-US">
 
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
+<H3>About This Content</H3>
 
-</body>
-</html>
\ No newline at end of file
+<P>June, 2008</P>
+
+<H3>License</H3>
+
+<P>The Eclipse Foundation makes available all content in this plug-in 
+("Content"). Unless otherwise indicated below, the Content is provided to you 
+under the terms and conditions of the Eclipse Public License Version 1.0 
+("EPL"). A copy of the EPL is available at
+<A href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</A>. 
+For purposes of the EPL, "Program" will mean the Content.</P>
+
+<P>If you did not receive this Content directly from the Eclipse Foundation, the 
+Content is being redistributed by another party ("Redistributor") and different 
+terms and conditions may apply to your use of any object code in the Content. 
+Check the Redistributor’s license that was provided with the Content. If no such 
+license exists, contact the Redistributor. Unless otherwise indicated below, the 
+terms and conditions of the EPL still apply to any source code in the Content 
+and such source code may be obtained at
+<A href="http://www.eclipse.org/">http://www.eclipse.org/</A>.</P>
+
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.wst.internet.cache/exsd/cacheresource.exsd b/plugins/org.eclipse.wst.internet.cache/exsd/cacheresource.exsd
index bacb272..8d0dd11 100644
--- a/plugins/org.eclipse.wst.internet.cache/exsd/cacheresource.exsd
+++ b/plugins/org.eclipse.wst.internet.cache/exsd/cacheresource.exsd
@@ -6,7 +6,11 @@
          <meta.schema plugin="org.eclipse.wst.internet.cache" id="cacheresource" name="Cache Resource"/>
       </appInfo>
       <documentation>
-         The cache resource extension point allows clients to specify resources that may be cached that require licenses to be accepted prior to caching.
+         Deprecated. No longer used in WTP, and will be removed. 
+
+The cache resource extension point allows clients to specify resources that may be cached that require licenses to be accepted prior to caching.
+
+Deprecated. No longer used in WTP, and will be removed. 
       </documentation>
    </annotation>
 
@@ -87,23 +91,7 @@
       </documentation>
    </annotation>
 
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
 
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
 
    <annotation>
       <appInfo>
diff --git a/plugins/org.eclipse.wst.internet.cache/plugin.xml b/plugins/org.eclipse.wst.internet.cache/plugin.xml
index 09c05eb..fecaed9 100644
--- a/plugins/org.eclipse.wst.internet.cache/plugin.xml
+++ b/plugins/org.eclipse.wst.internet.cache/plugin.xml
@@ -10,7 +10,7 @@
             name="%_UI_CACHE_PREFERENCE_PAGE_TITLE"
             class="org.eclipse.wst.internet.cache.internal.preferences.CachePreferencePage"
             id="org.eclipse.wst.internet.cache.internal.preferences.CachePreferencePage"
-            category = "org.eclipse.internet">
+            category="org.eclipse.ui.net.NetPreferences">
       </page>
    </extension>
    <extension
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/Cache.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/Cache.java
index 1951319..399f421 100644
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/Cache.java
+++ b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/Cache.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
  * 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
@@ -168,10 +168,12 @@
   }
   
   /**
-   * Add an uncached resource to the list.
+   * Add an uncached resource to the list and start the 
+   * uncached job if not already started.
    */
   protected void addUncachedURI(String uri)
   {
+	CacheJob.startJob();
     uncached.add(uri);
   }
   
@@ -227,11 +229,11 @@
 		  }
 
 	  }
-	  catch(Throwable t)
+	  catch(Exception t)
 	  {
 		  // Put the entry in the uncached list so the resolution work will not be performed again.
       // TODO: Add in a timeout for the non-located uris.
-      uncached.add(uri);
+      addUncachedURI(uri);
 	  }
 	  finally
 	  {
@@ -400,7 +402,7 @@
 	  TransformerFactory tFactory  = TransformerFactory.newInstance();
       Transformer transformer = tFactory.newTransformer();
       Source input = new DOMSource(cachedoc);
-	  IPath stateLocation = Platform.getPluginStateLocation(CachePlugin.getDefault());
+	  IPath stateLocation = Platform.getStateLocation(CachePlugin.getDefault().getBundle());
       Result output = new StreamResult(stateLocation.toString() + "/" + CACHE_FILE);
       transformer.transform(input, output);
 
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CacheJob.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CacheJob.java
index 8108abc..34c3943 100644
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CacheJob.java
+++ b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CacheJob.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
  * 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
@@ -11,6 +11,8 @@
 
 package org.eclipse.wst.internet.cache.internal;
 
+import java.text.MessageFormat;
+
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
@@ -23,18 +25,15 @@
  */
 public class CacheJob extends Job
 {
-  private static final String _UI_CACHE_MONITOR_NAME = "_UI_CACHE_MONITOR_NAME";
-  private static final String _UI_CACHE_MONITOR_CACHING = "_UI_CACHE_MONITOR_CACHING";
-  private String[] specifiedURIsToCache = null;
   private static final long SCHEDULE_TIME = 3600000;
 
+  private static CacheJob job = null;
   /**
    * Constructor.
    */
   public CacheJob()
   {
-    super(CachePlugin.getResourceString(_UI_CACHE_MONITOR_NAME));
-    //specifiedURIsToCache = ToCacheRegistryReader.getInstance().getURIsToCache();
+    super(CacheMessages._UI_CACHE_MONITOR_NAME);
   }
 
   /**
@@ -42,24 +41,13 @@
    */
   protected IStatus run(IProgressMonitor monitor)
   {
+	boolean allSuccessful = true;
     Cache cache = Cache.getInstance();
     String[] uncachedURIs = cache.getUncachedURIs();
     int numUncachedURIs = uncachedURIs.length;
-    // Special case for the first time the job is run which will attemp to 
-    // cache specified resources.
-    if(specifiedURIsToCache != null)
-    {
-      int numSpecifiedURIs = specifiedURIsToCache.length;
-      String[] temp = new String[numUncachedURIs + numSpecifiedURIs];
-      System.arraycopy(specifiedURIsToCache, 0, temp, 0, numSpecifiedURIs);
-      System.arraycopy(uncachedURIs, 0, temp, numSpecifiedURIs, numUncachedURIs);
-      uncachedURIs = temp;
-      numUncachedURIs = uncachedURIs.length;
-      specifiedURIsToCache = null;
-    }
 
     cache.clearUncachedURIs();
-    monitor.beginTask(CachePlugin.getResourceString(_UI_CACHE_MONITOR_NAME), numUncachedURIs);
+    monitor.beginTask(CacheMessages._UI_CACHE_MONITOR_NAME, numUncachedURIs);
     try
     {
       for(int i = 0; i < numUncachedURIs; i++)
@@ -73,19 +61,66 @@
           return Status.CANCEL_STATUS;
         }
         String uri = uncachedURIs[i];
-        monitor.subTask(CachePlugin.getResourceString(_UI_CACHE_MONITOR_CACHING, uri));
-        cache.getResource(uri);
+        monitor.setTaskName(MessageFormat.format(CacheMessages._UI_CACHE_MONITOR_CACHING, new Object[]{uri}));
+       
+        String cachedURI = cache.getResource(uri);
+        if(cachedURI == null)
+    	{
+    	  allSuccessful = false;
+    	}
         monitor.worked(1);
-        monitor.subTask("");
       }
       monitor.done();
       return Status.OK_STATUS;
     } 
     finally
     {
-      schedule(SCHEDULE_TIME); // schedule the next time the job should run
+      // If all the uncached URIs could not be cached 
+      // schedule the next time the job should run.
+      if(!allSuccessful)
+      {
+    	  startJob(SCHEDULE_TIME); 
+      }
     }
   }
+  
+  /**
+   * Start the cache job. The cache job caches resources that were not able to be previously
+   * downloaded. Only one job is run at a time.
+   */
+  protected static void startJob() 
+  {
+	if(job == null)
+	{
+	  startJob(0);
+	}
+  }
+  
+  /**
+   * Start a new cache job with the specified delay.
+   * 
+   * @param delay
+   * 		The start delay for the cache job.
+   */
+  private static void startJob(long delay)
+  {
+	job = new CacheJob();
+	job.setPriority(CacheJob.DECORATE);
+	job.schedule(delay); // start as soon as possible
+  }
+
+  /**
+   * Stop the current cache job. The cache job caches resources that were not able to be previously
+   * downloaded.
+   */
+  protected static void stopJob() 
+  {
+	if (job != null) 
+	{
+	  job.cancel();
+	}
+	job = null;
+  }
 
 }
 
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CacheMessages.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CacheMessages.java
new file mode 100644
index 0000000..f8fee2f
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CacheMessages.java
@@ -0,0 +1,58 @@
+/**
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *   IBM - Initial API and implementation
+ */
+package org.eclipse.wst.internet.cache.internal;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Strings used by the cache.
+ */
+public class CacheMessages extends NLS {
+	private static final String BUNDLE_NAME = "org.eclipse.wst.internet.cache.internal.CachePluginResources";//$NON-NLS-1$
+
+	public static String _UI_CONFIRM_CLEAR_CACHE_DIALOG_TITLE;
+	public static String _UI_CONFIRM_CLEAR_CACHE_DIALOG_MESSAGE;
+	public static String _UI_CONFIRM_DELETE_CACHE_ENTRY_DIALOG_TITLE;
+	public static String _UI_CONFIRM_DELETE_CACHE_ENTRY_DIALOG_MESSAGE;
+	public static String _UI_BUTTON_CLEAR_CACHE;
+	public static String _UI_BUTTON_DELETE_ENTRY;
+	public static String _UI_PREF_CACHE_ENTRIES_TITLE;
+	public static String _UI_PREF_CACHE_CACHE_OPTION;
+	public static String _UI_PREF_CACHE_ABOUT;
+	public static String _UI_PREF_PROMPT_FOR_DISAGREED_LICENSES;
+	public static String _UI_CACHE_MONITOR_NAME;
+	public static String _UI_CACHE_MONITOR_CACHING;
+
+	// Cache license dialog
+	public static String _UI_CACHE_DIALOG_LICENSE_STATEMENT1;
+	public static String _UI_CACHE_DIALOG_LICENSE_STATEMENT2;
+	public static String _UI_CACHE_DIALOG_LICENSE_STATEMENT2_NO_INTERNAL;
+	public static String _UI_CACHE_DIALOG_LICENSE_STATEMENT2_NO_BROWSER;
+	public static String _UI_CACHE_DIALOG_AGREE_BUTTON;
+	public static String _UI_CACHE_DIALOG_DISAGREE_BUTTON;
+	public static String _UI_CACHE_DIALOG_TITLE;
+	public static String _UI_LOADING_LICENSE;
+
+	// Cache logging messages
+	public static String _LOG_INFO_WTP_NO_USER_INTERACTION;
+
+	// WTP test no user interaction system property
+	public static String WTP_NO_USER_INTERACTION_SYSTEM_PROP;   
+
+	static {
+		// load message values from bundle file
+		NLS.initializeMessages(BUNDLE_NAME, CacheMessages.class);
+	}
+
+	private CacheMessages() {
+		// cannot create new instance
+	}
+}
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CachePlugin.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CachePlugin.java
index 9001763..704f0e0 100644
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CachePlugin.java
+++ b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CachePlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
  * 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
@@ -11,10 +11,6 @@
 
 package org.eclipse.wst.internet.cache.internal;
 
-import java.text.MessageFormat;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Preferences;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
@@ -37,11 +33,6 @@
   private static CachePlugin plugin;
 
   /**
-   * The cache job caches resources that were not able to be downloaded when requested.
-   */
-  private CacheJob job = null;
-
-  /**
    * The constructor.
    */
   public CachePlugin() 
@@ -57,7 +48,7 @@
   {
 	super.start(context);
 	ToCacheRegistryReader.getInstance().readRegistry();
-	Cache.open(Platform.getPluginStateLocation(this));
+	Cache.open(Platform.getStateLocation(getBundle()));
 	if (getPluginPreferences().contains(PreferenceConstants.CACHE_ENABLED)) 
 	{
 	  setCacheEnabled(getPluginPreferences().getBoolean(PreferenceConstants.CACHE_ENABLED));
@@ -110,7 +101,7 @@
 	}
 	
 	Cache.getInstance().close();
-	stopJob();
+	CacheJob.stopJob();
 	super.stop(context);
 	plugin = null;
   }
@@ -126,39 +117,6 @@
   }
 
   /**
-   * Returns the string from the plugin's resource bundle, or 'key' if not found.
-   * 
-   * @param key The key for which the string is requested.
-   * @return The string from the plugin's resource bundle, or 'key' if not found.
-   */
-  public static String getResourceString(String key) 
-  {
-	ResourceBundle bundle = ResourceBundle
-			.getBundle("org.eclipse.wst.internet.cache.internal.CachePluginResources");
-	try 
-	{
-	  return (bundle != null) ? bundle.getString(key) : key;
-	} 
-	catch (MissingResourceException e) 
-	{
-	  return key;
-	}
-  }
-
-  /**
-   * Returns the string from the plugin's resource bundle using the specified
-   * object, or 'key' if not found.
-   * 
-   * @param key The key for which the string is requested.
-   * @param s1 The object to insert into the string.
-   * @return The formatted string.
-   */
-  public static String getResourceString(String key, Object s1) 
-  {
-	return MessageFormat.format(getResourceString(key), new Object[] { s1 });
-  }
-
-  /**
    * Set whether or not the cache is enabled.
    * 
    * @param enabled If true the cache is enabled, if false it is not enabled.
@@ -166,14 +124,7 @@
   public void setCacheEnabled(boolean enabled) 
   {
 	getPluginPreferences().setValue(PreferenceConstants.CACHE_ENABLED, enabled);
-	if (enabled) 
-	{
-	  startJob();
-	} 
-	else 
-	{
-	  stopJob();
-	}
+	CacheJob.stopJob();
   }
 
   /**
@@ -211,31 +162,4 @@
 	  return getPluginPreferences().getBoolean(PreferenceConstants.PROMPT_DISAGREED_LICENSES);
 	return true;
   }
-
-  /**
-   * Start the cache job. The cache job caches resources that were not able to be previously
-   * downloaded.
-   */
-  private void startJob() 
-  {
-	if (job == null) 
-	{
-	  job = new CacheJob();
-	  job.setPriority(CacheJob.DECORATE);
-	  job.schedule(); // start as soon as possible
-	}
-  }
-
-  /**
-   * Stop the cache job. The cache job caches resources that were not able to be previously
-   * downloaded.
-   */
-  private void stopJob() 
-  {
-	if (job != null) 
-	{
-	  job.cancel();
-	}
-	job = null;
-  }
 }
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CachePluginResources.properties b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CachePluginResources.properties
index 05729d2..6dc881a 100644
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CachePluginResources.properties
+++ b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CachePluginResources.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005 IBM Corporation and others.
+# Copyright (c) 2005, 2006 IBM Corporation and others.
 # 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
@@ -19,7 +19,7 @@
 _UI_PREF_CACHE_ENTRIES_TITLE                     = &Cache entries:
 _UI_PREF_CACHE_CACHE_OPTION                      = &Disable caching
 _UI_PREF_CACHE_ABOUT                             = Manage the cache of remote resources, such as those downloaded from the internet.
-_UI_PREF_PROMPT_FOR_DISAGREED_LICENSES           = &Prompt me for agreement for licenses for whose terms I have already disagreed.
+_UI_PREF_PROMPT_FOR_DISAGREED_LICENSES           = &Prompt me for agreement for licenses for whose terms I have already disagreed
 
 # Cache monitor strings.
 _UI_CACHE_MONITOR_NAME                           = Caching Remote Resources
@@ -33,9 +33,11 @@
 _UI_CACHE_DIALOG_AGREE_BUTTON                    = I Agree
 _UI_CACHE_DIALOG_DISAGREE_BUTTON                 = I Disagree
 _UI_CACHE_DIALOG_TITLE                           = License Agreement
+_UI_LOADING_LICENSE                              = Loading license
 
 # Cache logging messages
 _LOG_INFO_WTP_NO_USER_INTERACTION                = {0} is set. Licenses dialogs will not be displayed.
 
 # WTP test no user interaction system property
+# This property is checked by the cache. This sting is not shown to the user.
 WTP_NO_USER_INTERACTION_SYSTEM_PROP              = wtp.autotest.noninteractive
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/LicenseAcceptanceDialog.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/LicenseAcceptanceDialog.java
index a26a254..d9bc3c1 100644
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/LicenseAcceptanceDialog.java
+++ b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/LicenseAcceptanceDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
  * 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
@@ -10,17 +10,25 @@
  *******************************************************************************/
 package org.eclipse.wst.internet.cache.internal;
 
+import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.net.URL;
+import java.text.MessageFormat;
 import java.util.Hashtable;
 
 import org.eclipse.jface.dialogs.IconAndMessageDialog;
+import org.eclipse.jface.wizard.ProgressMonitorPart;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.browser.ProgressEvent;
+import org.eclipse.swt.browser.ProgressListener;
+import org.eclipse.swt.custom.StackLayout;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
@@ -32,17 +40,6 @@
 public class LicenseAcceptanceDialog extends IconAndMessageDialog 
 {
   /**
-   * Externalized string keys.
-   */
-  private static final String _UI_CACHE_DIALOG_LICENSE_STATEMENT1 = "_UI_CACHE_DIALOG_LICENSE_STATEMENT1";
-  private static final String _UI_CACHE_DIALOG_LICENSE_STATEMENT2 = "_UI_CACHE_DIALOG_LICENSE_STATEMENT2";
-  private static final String _UI_CACHE_DIALOG_LICENSE_STATEMENT2_NO_INTERNAL = "_UI_CACHE_DIALOG_LICENSE_STATEMENT2_NO_INTERNAL";
-  private static final String _UI_CACHE_DIALOG_LICENSE_STATEMENT2_NO_BROWSER = "_UI_CACHE_DIALOG_LICENSE_STATEMENT2_NO_BROWSER";
-  private static final String _UI_CACHE_DIALOG_AGREE_BUTTON = "_UI_CACHE_DIALOG_AGREE_BUTTON";
-  private static final String _UI_CACHE_DIALOG_DISAGREE_BUTTON = "_UI_CACHE_DIALOG_DISAGREE_BUTTON";
-  private static final String _UI_CACHE_DIALOG_TITLE = "_UI_CACHE_DIALOG_TITLE";
-
-  /**
    * Holds all the dialogs that are currently displayed keyed by the license URL.
    */
   private static Hashtable dialogsInUse = new Hashtable();
@@ -58,6 +55,11 @@
   private String licenseURL;
   
   /**
+   * The agree button for the dialog.
+   */
+  private Button agreeButton = null;
+  
+  /**
    * Constructor.
    * 
    * @param parent The parent of this dialog.
@@ -76,7 +78,7 @@
   protected void configureShell(Shell shell) 
   {
     super.configureShell(shell);
-    shell.setText(CachePlugin.getResourceString(_UI_CACHE_DIALOG_TITLE));
+    shell.setText(CacheMessages._UI_CACHE_DIALOG_TITLE);
     shell.setImage(null);
   }
 
@@ -94,12 +96,13 @@
 	buttonBar.setLayoutData(gd);
 	
 	// Create the agree button.
-	createButton(buttonBar, LicenseAcceptanceDialog.OK, 
-			CachePlugin.getResourceString(_UI_CACHE_DIALOG_AGREE_BUTTON), false);
-
+	agreeButton = createButton(buttonBar, LicenseAcceptanceDialog.OK, 
+			CacheMessages._UI_CACHE_DIALOG_AGREE_BUTTON, false);
+	agreeButton.setEnabled(false);
+	
 	// Create the disagree button.
 	createButton(buttonBar, LicenseAcceptanceDialog.CANCEL, 
-			CachePlugin.getResourceString(_UI_CACHE_DIALOG_DISAGREE_BUTTON), false);
+			CacheMessages._UI_CACHE_DIALOG_DISAGREE_BUTTON, false);
 	
 	return buttonBar;
   }
@@ -118,7 +121,7 @@
 
 	// Display a statement about the license.
 	Label licenseText1 = new Label(composite, SWT.NONE);
-	licenseText1.setText(CachePlugin.getResourceString(_UI_CACHE_DIALOG_LICENSE_STATEMENT1));
+	licenseText1.setText(CacheMessages._UI_CACHE_DIALOG_LICENSE_STATEMENT1);
 	Label urlText = new Label(composite, SWT.WRAP);
 	gd = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1);
 	urlText.setLayoutData(gd);
@@ -131,26 +134,114 @@
 	// Display the license in a browser.
 	try
 	{
-	  Browser browser = new Browser(composite, SWT.BORDER);
-	  gd = new GridData(GridData.FILL_BOTH);
+	  final Composite licenseTextComposite = new Composite(composite, SWT.NONE);
+	  final StackLayout stackLayout = new StackLayout();
+	  licenseTextComposite.setLayout(stackLayout);
+	  gd = new GridData(SWT.FILL, SWT.FILL, true, true);
 	  gd.heightHint = 400;
+	  licenseTextComposite.setLayoutData(gd);
+	  // Create the loading progress monitor composite and part.
+	  Composite monitorComposite = new Composite(licenseTextComposite, SWT.NONE);
+	  monitorComposite.setLayout(new GridLayout());
+	  gd = new GridData(SWT.FILL, SWT.FILL, true, true);
+	  gd.heightHint = 400;
+	  monitorComposite.setLayoutData(gd);
+	  final ProgressMonitorPart monitor = new ProgressMonitorPart(monitorComposite, new GridLayout());
+	  gd = new GridData(SWT.FILL, SWT.BOTTOM, true, true);
+	  monitor.setLayoutData(gd);
+	  monitor.beginTask(CacheMessages._UI_LOADING_LICENSE, 100);
+	  stackLayout.topControl = monitorComposite;
+	  // Create the browser.
+	  final Browser browser = new Browser(licenseTextComposite, SWT.BORDER);
+	  gd = new GridData(SWT.FILL, SWT.FILL, true, true);
+	  //gd.heightHint = 400;
+	  
+	  // It's important that the license URL is set even if we read 
+	  // the contents of the license file ourselves (see below) as
+	  // otherwise the progress monitor will not be called on certain
+	  // linux systems with certain browsers.
 	  browser.setUrl(licenseURL);
+	  
+	  // The browser widget has problems loading files stored in jars
+	  // so we read from the jar and set the browser text ourselves.
+	  // See bug 154721.
+	  if(licenseURL.startsWith("jar:"))
+	  {
+		  InputStream licenseStream = null;
+		  InputStreamReader isreader = null;
+		  BufferedReader breader = null;
+		  try
+		  {
+		  URL browserURL = new URL(licenseURL);
+		  licenseStream = browserURL.openStream();
+		  isreader = new InputStreamReader(licenseStream);
+		  breader = new BufferedReader(isreader);
+		  String str;
+		  StringBuffer sb = new StringBuffer();
+		  while((str = breader.readLine())!=null){
+		      sb.append(str);
+		  }
+		  browser.setText(sb.toString());
+		  }
+		  finally
+		  {
+			  if(licenseStream != null)
+			  {
+				  licenseStream.close();
+			  }
+			  if(isreader != null)
+			  {
+				  isreader.close();
+			  }
+			  if(breader != null)
+			  {
+				  breader.close();
+			  }
+		  }
+	  }
+	  
 	  browser.setLayoutData(gd);
-	  licenseText2.setText(CachePlugin.getResourceString(_UI_CACHE_DIALOG_LICENSE_STATEMENT2));
+	  browser.addProgressListener(new ProgressListener(){
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.swt.browser.ProgressListener#changed(org.eclipse.swt.browser.ProgressEvent)
+		 */
+		public void changed(ProgressEvent event) 
+		{
+		  if (event.total != 0)
+		  {
+		    monitor.internalWorked(event.current * 100 / event.total);
+		  }
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.swt.browser.ProgressListener#completed(org.eclipse.swt.browser.ProgressEvent)
+		 */
+		public void completed(ProgressEvent event) 
+		{
+		  monitor.done();
+			
+		  stackLayout.topControl = browser;
+		  agreeButton.setEnabled(true);
+		  licenseTextComposite.layout();
+		}
+	  });
+	  
+	  licenseText2.setText(CacheMessages._UI_CACHE_DIALOG_LICENSE_STATEMENT2);
 	}
-	catch(Throwable e)
+	catch(Exception e)
 	{
 	  // The browser throws an exception on platforms that do not support it. 
 	  // In this case we need to create an external browser.
 	  try
 	  {
 	    CachePlugin.getDefault().getWorkbench().getBrowserSupport().getExternalBrowser().openURL(new URL(licenseURL));
-	    licenseText2.setText(CachePlugin.getResourceString(_UI_CACHE_DIALOG_LICENSE_STATEMENT2_NO_INTERNAL));
+	    licenseText2.setText(CacheMessages._UI_CACHE_DIALOG_LICENSE_STATEMENT2_NO_INTERNAL);
 	  }
 	  catch(Exception ex)
 	  {
 		// In this case the license cannot be display. Inform the user of this and give them the license location.
-		licenseText2.setText(CachePlugin.getResourceString(_UI_CACHE_DIALOG_LICENSE_STATEMENT2_NO_BROWSER, licenseURL));
+		licenseText2.setText(MessageFormat.format(CacheMessages._UI_CACHE_DIALOG_LICENSE_STATEMENT2_NO_BROWSER, new Object[]{licenseURL}));
 	  }
 	}
 
@@ -190,25 +281,13 @@
 	}
 	else
 	{
-	  //BufferedReader bufreader = null;
 	  InputStream is = null;
-//	  StringBuffer source = new StringBuffer();
+
 	  try
 	  {
 	    URL urlObj = new URL(licenseURL);
 	    is = urlObj.openStream();
-//        if (urlObj != null)
-//        {
-//          bufreader = new BufferedReader(new InputStreamReader(urlObj.openStream()));
-//
-//          if (bufreader != null)
-//          {
-//            while (bufreader.ready())
-//            {
-//              source.append(bufreader.readLine());
-//            }
-//          }
-//        } 
+
 	    dialog = new LicenseAcceptanceDialog(parent, url, licenseURL);
 	    dialogsInUse.put(licenseURL, dialog);
 	    dialog.setBlockOnOpen(true);
@@ -219,10 +298,6 @@
 	  }
 	  finally
 	  {
-//		if(bufreader != null)
-//		{
-//		  bufreader.close();
-//		}
 		if(is != null)
 		{
 		  try
@@ -250,9 +325,21 @@
        dialogsInUse.remove(licenseURL);
 	  }
 	}
-	
-	
 	 
 	return agreedToLicense;
   }
+
+  /* (non-Javadoc)
+   * @see org.eclipse.jface.dialogs.Dialog#close()
+   */
+  public boolean close() 
+  {
+	if(agreeButton != null)
+	{
+	  agreeButton.dispose();
+	  agreeButton = null;
+	}
+	return super.close();
+  }
+  
 }
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/LicenseRegistry.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/LicenseRegistry.java
index 6a66bc5..2ffb248 100644
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/LicenseRegistry.java
+++ b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/LicenseRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
  * 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
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.internet.cache.internal;
 
+import java.text.MessageFormat;
 import java.util.Hashtable;
 
 import org.eclipse.core.runtime.IStatus;
@@ -28,10 +29,6 @@
   // Signifies a license that has been disagreed to this session.
   protected static Integer LICENSE_DISAGREE_THIS_SESSION = new Integer(3);
   
-  protected final static String _LOG_INFO_WTP_NO_USER_INTERACTION = "_LOG_INFO_WTP_NO_USER_INTERACTION";
-  
-  protected final static String WTP_NO_USER_INTERACTION_SYSTEM_PROP = CachePlugin.getResourceString("WTP_NO_USER_INTERACTION_SYSTEM_PROP");
-  
   /**
    * There is only one instance of the license registry.
    */
@@ -53,9 +50,9 @@
 	
 	// If the wtp quiet system property is set the DO_NOT_PROMPT flag is set to true.
 	// This is used for automated testing.
-	if(System.getProperty(WTP_NO_USER_INTERACTION_SYSTEM_PROP, "false").equals("true"))
+	if(System.getProperty(CacheMessages.WTP_NO_USER_INTERACTION_SYSTEM_PROP, "false").equals("true"))
 	{
-	  CachePlugin.getDefault().getLog().log(new Status(IStatus.INFO, CachePlugin.PLUGIN_ID, IStatus.OK, CachePlugin.getResourceString(_LOG_INFO_WTP_NO_USER_INTERACTION, WTP_NO_USER_INTERACTION_SYSTEM_PROP), null));
+	  CachePlugin.getDefault().getLog().log(new Status(IStatus.INFO, CachePlugin.PLUGIN_ID, IStatus.OK, MessageFormat.format(CacheMessages._LOG_INFO_WTP_NO_USER_INTERACTION, new Object[]{CacheMessages.WTP_NO_USER_INTERACTION_SYSTEM_PROP}), null));
 	  DO_NOT_PROMPT = true;
 	}
   }
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/ToCacheRegistryReader.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/ToCacheRegistryReader.java
index 9673376..73165b2 100644
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/ToCacheRegistryReader.java
+++ b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/ToCacheRegistryReader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
  * 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
@@ -11,12 +11,18 @@
 
 package org.eclipse.wst.internet.cache.internal;
 
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
 import java.util.Hashtable;
 
+import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtensionPoint;
 import org.eclipse.core.runtime.IExtensionRegistry;
 import org.eclipse.core.runtime.Platform;
+import org.osgi.framework.Bundle;
 
 /**
  * The ToCacheRegistryReaders reads Eclipse extensions which specify
@@ -88,6 +94,30 @@
       if(url != null)
       {
     	String license = element.getAttribute(ATT_LICENSE);
+    	
+    	// If the license is relative resolve relative to the
+    	// plug-in that declares it.
+    	try
+    	{
+    	  URI licenseURI = new URI(license);
+    	  if(!licenseURI.isAbsolute())
+    	  {
+    		Bundle pluginBundle = Platform.getBundle(element.getDeclaringExtension().getContributor().getName());
+    		URL licenseURL = pluginBundle.getEntry(license);
+    		if(licenseURL != null)
+    		{
+    	      license = FileLocator.resolve(licenseURL).toExternalForm();  
+    		}
+    	  }
+    	}
+    	catch(URISyntaxException e)
+    	{
+    	  // Use the license as specified.
+    	}
+    	catch(IOException e)
+    	{
+    	  // Use the license as specified.
+    	}
     	return new ToCacheResource(url, license);
       }
     }
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/preferences/CachePreferencePage.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/preferences/CachePreferencePage.java
index 5b8bd6c..4ac9667 100644
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/preferences/CachePreferencePage.java
+++ b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/preferences/CachePreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
  * 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
@@ -31,6 +31,7 @@
 import org.eclipse.ui.IWorkbenchPreferencePage;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.wst.internet.cache.internal.Cache;
+import org.eclipse.wst.internet.cache.internal.CacheMessages;
 import org.eclipse.wst.internet.cache.internal.CachePlugin;
 
 /**
@@ -43,26 +44,6 @@
 public class CachePreferencePage extends PreferencePage implements
     IWorkbenchPreferencePage
 {
-  private static final String _UI_CONFIRM_CLEAR_CACHE_DIALOG_TITLE = "_UI_CONFIRM_CLEAR_CACHE_DIALOG_TITLE";
-
-  private static final String _UI_CONFIRM_CLEAR_CACHE_DIALOG_MESSAGE = "_UI_CONFIRM_CLEAR_CACHE_DIALOG_MESSAGE";
-
-  private static final String _UI_BUTTON_CLEAR_CACHE = "_UI_BUTTON_CLEAR_CACHE";
-
-  private static final String _UI_BUTTON_DELETE_ENTRY = "_UI_BUTTON_DELETE_ENTRY";
-
-  private static final String _UI_PREF_CACHE_ENTRIES_TITLE = "_UI_PREF_CACHE_ENTRIES_TITLE";
-
-  private static final String _UI_PREF_CACHE_CACHE_OPTION = "_UI_PREF_CACHE_CACHE_OPTION";
-
-  private static final String _UI_CONFIRM_DELETE_CACHE_ENTRY_DIALOG_TITLE = "_UI_CONFIRM_DELETE_CACHE_ENTRY_DIALOG_TITLE";
-
-  private static final String _UI_CONFIRM_DELETE_CACHE_ENTRY_DIALOG_MESSAGE = "_UI_CONFIRM_DELETE_CACHE_ENTRY_DIALOG_MESSAGE";
-  
-  private static final String _UI_PREF_CACHE_ABOUT = "_UI_PREF_CACHE_ABOUT";
-  
-  private static final String _UI_PREF_PROMPT_FOR_DISAGREED_LICENSES = "_UI_PREF_PROMPT_FOR_DISAGREED_LICENSES";
-
   protected Button clearButton;
 
   protected Button deleteButton;
@@ -121,7 +102,7 @@
     composite.setLayoutData(gd);
     
     Label aboutLabel = new Label(composite, SWT.WRAP);
-    aboutLabel.setText(CachePlugin.getResourceString(_UI_PREF_CACHE_ABOUT));
+    aboutLabel.setText(CacheMessages._UI_PREF_CACHE_ABOUT);
     GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
     gridData.horizontalSpan = 2;
     aboutLabel.setLayoutData(gridData);
@@ -133,8 +114,7 @@
       gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
       gridData.horizontalSpan = 2;
       enabledButton.setLayoutData(gridData);
-      enabledButton.setText(CachePlugin
-          .getResourceString(_UI_PREF_CACHE_CACHE_OPTION));
+      enabledButton.setText(CacheMessages._UI_PREF_CACHE_CACHE_OPTION);
       enabledButton.setSelection(!CachePlugin.getDefault().getPreferenceStore()
           .getBoolean(PreferenceConstants.CACHE_ENABLED));
       enabledButton.addSelectionListener(new SelectionListener()
@@ -158,8 +138,7 @@
       gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
       gridData.horizontalSpan = 2;
       disagreedLicensesButton.setLayoutData(gridData);
-      disagreedLicensesButton.setText(CachePlugin
-          .getResourceString(_UI_PREF_PROMPT_FOR_DISAGREED_LICENSES));
+      disagreedLicensesButton.setText(CacheMessages._UI_PREF_PROMPT_FOR_DISAGREED_LICENSES);
       disagreedLicensesButton.setSelection(CachePlugin.getDefault().getPreferenceStore()
           .getBoolean(PreferenceConstants.PROMPT_DISAGREED_LICENSES));
       disagreedLicensesButton.addSelectionListener(new SelectionListener()
@@ -181,7 +160,7 @@
 
       // Create the entities group.
       Label entriesLabel = new Label(composite, SWT.WRAP);
-      entriesLabel.setText(CachePlugin.getResourceString(_UI_PREF_CACHE_ENTRIES_TITLE));
+      entriesLabel.setText(CacheMessages._UI_PREF_CACHE_ENTRIES_TITLE);
       gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
       gridData.horizontalSpan = 2;
       entriesLabel.setLayoutData(gridData);
@@ -217,8 +196,7 @@
       buttonComposite.setLayoutData(gridData);
       // Create the Delete button
       deleteButton = new Button(buttonComposite, SWT.PUSH);
-      deleteButton.setText(CachePlugin
-          .getResourceString(_UI_BUTTON_DELETE_ENTRY));
+      deleteButton.setText(CacheMessages._UI_BUTTON_DELETE_ENTRY);
       gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
       gridData.grabExcessHorizontalSpace = true;
       deleteButton.setLayoutData(gridData);
@@ -229,8 +207,8 @@
           if (MessageDialog
               .openConfirm(
                   Display.getDefault().getActiveShell(),
-                  CachePlugin.getResourceString(_UI_CONFIRM_DELETE_CACHE_ENTRY_DIALOG_TITLE),
-                  CachePlugin.getResourceString(_UI_CONFIRM_DELETE_CACHE_ENTRY_DIALOG_MESSAGE)))
+                  CacheMessages._UI_CONFIRM_DELETE_CACHE_ENTRY_DIALOG_TITLE,
+                  CacheMessages._UI_CONFIRM_DELETE_CACHE_ENTRY_DIALOG_MESSAGE))
           {
             String[] selectedEntries = entries.getSelection();
             int numSelectedEntries = selectedEntries.length;
@@ -250,7 +228,7 @@
 
       // Create the Clear Cache button
       clearButton = new Button(buttonComposite, SWT.PUSH);
-      clearButton.setText(CachePlugin.getResourceString(_UI_BUTTON_CLEAR_CACHE));
+      clearButton.setText(CacheMessages._UI_BUTTON_CLEAR_CACHE);
       gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
       gridData.grabExcessHorizontalSpace = true;
       clearButton.setLayoutData(gridData);
@@ -259,8 +237,8 @@
         public void widgetSelected(SelectionEvent event)
         {
           if (MessageDialog.openConfirm(Display.getDefault().getActiveShell(),
-              CachePlugin.getResourceString(_UI_CONFIRM_CLEAR_CACHE_DIALOG_TITLE),
-              CachePlugin.getResourceString(_UI_CONFIRM_CLEAR_CACHE_DIALOG_MESSAGE)))
+              CacheMessages._UI_CONFIRM_CLEAR_CACHE_DIALOG_TITLE,
+              CacheMessages._UI_CONFIRM_CLEAR_CACHE_DIALOG_MESSAGE))
           {
             Cache cache = Cache.getInstance();
             cache.clear();
@@ -272,11 +250,13 @@
         }
       });
 
-    } catch (Throwable e)
+    } catch (Exception e)
     {
-      //TODO: Log error
+        //TODO: Log error
+    	e.printStackTrace();
     }
     setPreferenceWidgets();
+    applyDialogFont(composite);
 
     return composite;
   }
diff --git a/plugins/org.eclipse.wst.validation.ui/.classpath b/plugins/org.eclipse.wst.validation.ui/.classpath
deleted file mode 100644
index 1c68a63..0000000
--- a/plugins/org.eclipse.wst.validation.ui/.classpath
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="validateui/"/>
-	<classpathentry kind="src" path="property_files"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/plugins/org.eclipse.wst.validation.ui/.cvsignore b/plugins/org.eclipse.wst.validation.ui/.cvsignore
deleted file mode 100644
index 994d5a2..0000000
--- a/plugins/org.eclipse.wst.validation.ui/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-bin
-temp.folder
-build.xml
-runtime
-@dot
-src.zip
diff --git a/plugins/org.eclipse.wst.validation.ui/.project b/plugins/org.eclipse.wst.validation.ui/.project
deleted file mode 100644
index 32471f6..0000000
--- a/plugins/org.eclipse.wst.validation.ui/.project
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.wst.validation.ui</name>
-	<comment></comment>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/plugins/org.eclipse.wst.validation.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.validation.ui/META-INF/MANIFEST.MF
deleted file mode 100644
index a907186..0000000
--- a/plugins/org.eclipse.wst.validation.ui/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,21 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Validation Framework UI
-Bundle-SymbolicName: org.eclipse.wst.validation.ui; singleton:=true
-Bundle-Version: 1.0.0
-Bundle-Activator: org.eclipse.wst.validation.internal.ui.plugin.ValidationUIPlugin
-Bundle-Vendor: Eclipse.org
-Bundle-Localization: plugin
-Export-Package: .,
- org.eclipse.wst.validation.internal.ui,
- org.eclipse.wst.validation.internal.ui.plugin
-Require-Bundle: org.eclipse.ui.ide,
- org.eclipse.core.resources,
- org.eclipse.ui,
- org.eclipse.swt,
- org.eclipse.wst.common.frameworks.ui,
- org.eclipse.core.runtime,
- org.eclipse.wst.common.frameworks,
- org.eclipse.wst.validation,
- org.eclipse.jem.util
-Eclipse-AutoStart: true
diff --git a/plugins/org.eclipse.wst.validation.ui/about.html b/plugins/org.eclipse.wst.validation.ui/about.html
deleted file mode 100644
index 6f6b96c..0000000
--- a/plugins/org.eclipse.wst.validation.ui/about.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation.ui/build.properties b/plugins/org.eclipse.wst.validation.ui/build.properties
deleted file mode 100644
index caced11..0000000
--- a/plugins/org.eclipse.wst.validation.ui/build.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-###############################################################################
-# Copyright (c) 2001, 2004 IBM Corporation and others.
-# 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:
-# IBM Corporation - initial API and implementation
-###############################################################################
-bin.includes = .,\
-               plugin.xml,\
-               plugin.properties,\
-               META-INF/,\
-               about.html
-source.. = validateui/,\
-                                property_files/
-output.. = bin/
diff --git a/plugins/org.eclipse.wst.validation.ui/build/buildcontrol.properties b/plugins/org.eclipse.wst.validation.ui/build/buildcontrol.properties
deleted file mode 100644
index 5938f6c..0000000
--- a/plugins/org.eclipse.wst.validation.ui/build/buildcontrol.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-###############################################################################
-# Copyright (c) 2001, 2004 IBM Corporation and others.
-# 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:
-# IBM Corporation - initial API and implementation
-###############################################################################
-CONTACT=ruthdaly@ca.ibm.com
-ComponentShortName=validationui
-ComponentFullName=Validation Framework UI
-ComponentCompetency=Validation
-JavaCompile.1=srcjar
-BuildVerification.1=dir
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation.ui/build/package.xml b/plugins/org.eclipse.wst.validation.ui/build/package.xml
deleted file mode 100644
index 0ae0c31..0000000
--- a/plugins/org.eclipse.wst.validation.ui/build/package.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<project name="com.ibm.etools.validation.ui" default="packagingPlugin" basedir="./..">
-    <target name="init">
-        <property name="packageDir" value=""/>
-        <property name="plugin.directory"  value="${basedir}"/>
-        <property name="plugin.id" value="com.ibm.etools.validation.ui"/>
-        <property name="plugin.version"  value=""/>
-    </target>
-    <target name="packagingPlugin" depends="init">
-        <echo message="${plugin.id}"/>
-        <copy todir="${packageDir}/plugins/${plugin.id}_${plugin.version}">
-            <fileset dir="${plugin.directory}">
-                <include name="plugin.properties"/>
-                <include name="plugin.xml"/>
-                <include name="runtime/validateui.jar"/>
-            </fileset>
-        </copy>
-    </target>
-</project>
diff --git a/plugins/org.eclipse.wst.validation.ui/build/sourcejar.txt b/plugins/org.eclipse.wst.validation.ui/build/sourcejar.txt
deleted file mode 100644
index b96f41c..0000000
--- a/plugins/org.eclipse.wst.validation.ui/build/sourcejar.txt
+++ /dev/null
@@ -1 +0,0 @@
-validateui
diff --git a/plugins/org.eclipse.wst.validation.ui/build/wsBuild.xml b/plugins/org.eclipse.wst.validation.ui/build/wsBuild.xml
deleted file mode 100644
index 77c0b82..0000000
--- a/plugins/org.eclipse.wst.validation.ui/build/wsBuild.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE project [
-	<!ENTITY baseBuild SYSTEM "file:../../wsBuildDef.xml">
-]>
-
-<project name="buildPlugin" default="build" basedir="./..">
-
-<!-- include the common xml build file -->
-&baseBuild;
-
-<target name="build" depends="prepare" if="plugin.id">
-	<antcall target="buildjar">
-		<param name="jarname" value="${defaultjarname}"/>
-		<param name="jarclasspath" value="${plugin.classpath}"/>
-	</antcall>
-</target>
-</project>
diff --git a/plugins/org.eclipse.wst.validation.ui/plugin.xml b/plugins/org.eclipse.wst.validation.ui/plugin.xml
deleted file mode 100644
index eedab8f..0000000
--- a/plugins/org.eclipse.wst.validation.ui/plugin.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-
-    
-<!-- ============================================== -->
-<!-- Popup Contributions                            -->
-<!-- ============================================== -->
-<!-- By saying "adaptable=true", this item will appear on both IProject and IJavaProject -->
-   <extension
-         point="org.eclipse.ui.popupMenus">
-      <viewerContribution 
-            targetID="#CommonNavigatorPopupMenu"
-            id="ValidationMenuAction">
-         <action
-               label="%VBF_UI_POPUP_RUNVALIDATION"
-               class="org.eclipse.wst.validation.internal.ui.ValidationMenuAction"
-               menubarPath="additions"
-               enablesFor="+"
-               id="ValidationAction">
-         </action>
-      </viewerContribution>
-   </extension>
-  
-
-<!-- ====================================================== -->
-<!--           Validation preference page                   -->
-<!-- ====================================================== -->
-   <extension
-         point="org.eclipse.ui.preferencePages">
-      <page
-            name="%VBF_TITLE_PREFERENCE"
-            class="org.eclipse.wst.validation.internal.ui.ValidationPreferencePage"
-            id="ValidationPreferencePage">
-      </page>
-   </extension>
-   
-<!-- ====================================================== -->
-<!--           Validation properties page                   -->
-<!-- ====================================================== -->
-<!-- By saying "adaptable=true", this item will appear on both IProject and IJavaProject -->
-   <extension
-         point="org.eclipse.ui.propertyPages">
-      <page
-            adaptable="true"
-            objectClass="org.eclipse.core.resources.IProject"
-            name="%VBF_TITLE_PROPERTIES"
-            class="org.eclipse.wst.validation.internal.ui.ValidationPropertiesPage"
-            id="ValidationPropertiesPage">
-      </page>
-   </extension>
-
-</plugin>
diff --git a/plugins/org.eclipse.wst.validation.ui/prepareforpii.xml b/plugins/org.eclipse.wst.validation.ui/prepareforpii.xml
deleted file mode 100644
index 1c3e278..0000000
--- a/plugins/org.eclipse.wst.validation.ui/prepareforpii.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<project name="PrepareForPII" default="main" basedir=".">
-		
-	<!-- Setup temp variables -->
-	<target name="init">
-		<property name="nlsDir" value="d:/NLS/Corona/0526"/>
-		<property name="plugin" value="com.ibm.etools.validation.ui"/>
-		<property name="plugindir" value="d:/workspaceCorona/${plugin}"/>
-		<property name="outputDir" value="${nlsDir}/${plugin}"/>
-		
-	
-	</target>
-
-	<!-- Create the destination dir -->
-	<target name="nlsDir" depends="init">
-		<mkdir dir="${nlsDir}"/>
-	</target>
-	
-	<!-- Create the destination dir -->
-	<target name="plugindir" depends="nlsDir">
-		<delete dir="${outputDir}"/>
-		<mkdir dir="${outputDir}"/>
-	</target>
-
-	<!-- Move the files to the correct locations in the workspace. -->
-	<target name="main" depends="plugindir">
-	
-		<messageIdGen folderPath = "${plugindir}" componentId = "E" />
-		
-		<copy todir = "${outputDir}/property_files" >
-			 <fileset dir="${plugindir}/property_files">
-           	  <include name="**/*.properties"/>
-  			 </fileset>
-  		</copy>
-  		
-  		<copy file="${plugindir}/plugin.properties" todir="${outputDir}"/>
-  		
-	</target>
-</project>
diff --git a/plugins/org.eclipse.wst.validation.ui/property_files/validate_ui.properties b/plugins/org.eclipse.wst.validation.ui/property_files/validate_ui.properties
deleted file mode 100644
index 36173e0..0000000
--- a/plugins/org.eclipse.wst.validation.ui/property_files/validate_ui.properties
+++ /dev/null
@@ -1,113 +0,0 @@
-###############################################################################
-# Copyright (c) 2001, 2004 IBM Corporation and others.
-# 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:
-# IBM Corporation - initial API and implementation
-###############################################################################
-#     *************************************************************************
-#     * Code oriented instructions:
-#     *
-#     * In the string, you may see the following special sequences:
-#     * a) {n}  where n is a number. These are replaceable parameters.
-#     * b) ''  In .properties files, in order to see one apostrophe (') in the final
-#     *    string, sometimes two apostrophes must be entered in the string. In the translated
-#     *    string, if there is at least one {n} in the string, then to show one apostrophe
-#     *    to the user, put two apostrophes in the string. If there are no {n} in the string,
-#     *    then put one apostrophe.
-#     *    For example, say that you want the user to read "George's file". 
-#     *        GEORGE=George's file was on the desk.
-#     *        GEORGE2=George''s file and {0} were on the desk.
-#     *    GEORGE uses one apostrophe because there are no {n} and GEORGE2
-#     *    uses two apostrophes because there is a {n}.
-#     * c) '' text '' where text can be any word(s). The text between the double
-#     *    apostrophes should not be translated. 
-#     * d) <text> where text can be any word(s). The text between the angle
-#     *    brackets should NOT be translated.
-#     * e) "text" where text can be any word(s). The text between the quotation 
-#     *    marks should NOT be translated.
-#     *    
-#     *************************************************************************
-#     * Other instructions
-#     * a) Do not translate any text that is on a line which begins with a comment 
-#     *    symbol (#).
-#     * b) Do not translate these words: 
-#     *        schema, EJB, RDB, JAR, RMI, BMP, CMP, OOSQL
-#     * c) Please return the .properties files using the same directory structure.
-#     *    This is necessary because two of the files have the same name.
-#     *
-#     *************************************************************************
-# Any other comments to the translators are on lines which start like this:  # 2TC:
-#
-# Version 1.12
-#
-#
-# ID:
-#    VBF - Validation Builder Framework
-#
-
-# 
-# Begin Validation Builder Framework UI Strings
-#
-# IDs:
-#    VBF_EXC=Exception or error text
-#    VBF_UI=UI label
-#
-PREF_BUTTON_OVERRIDE=Allow projects to override these preference settings
-PREF_BUTTON_FULL=Run validation when you manually build a project
-PREF_BUTTON_AUTO=Run validation automatically when you save changes to a resource
-PREF_BUTTON_SELECTALL=Select All
-PREF_BUTTON_DESELECTALL=Deselect All
-PREF_VALLIST_TITLE=The selected validators will run when validation is performed:
-PREF_LBL_MAXMSGS=Maximum number of validation messages on a project
-PREF_ERROR_INT=IWAE0001E The number of validation messages must be a positive integer.
-PREF_BUTTON_ASYNC=Run validation in a background thread
-
-PROP_BUTTON_OVERRIDE=Override validation preferences
-PROP_BUTTON_FULL=Run validation when you manually build {0}
-VBF_UI_LBL_AUTO_VALIDATE=Run validation automatically when you save changes to {0} resources.
-PROP_BUTTON_SELECTALL=Select All
-PROP_BUTTON_DESELECTALL=Deselect All
-VBF_UI_LBL_DESC=The selected validators will run when {0} is validated:
-PROP_LBL_MAXMSSGS=Maximum number of validation messages on {0}
-PROP_ERROR_INT=IWAE0002E The number of validation messages must be a positive integer.
-PROP_LBL_CANNOTOVERRIDE=To enable the "Override validation preferences" checkbox, select the "Allow projects to override these preference settings" checkbox in the workbench Preferences dialog.
-PROP_BUTTON_ASYNC=Run validation in a background thread on {0}
-
-VBF_EXC_INTERNAL=IWAE0003E An unexpected error occurred during validation. Read the log file.
-VBF_EXC_INTERNAL_PROJECT=IWAE0004E An unexpected error occurred during validation of project {0}. Read the log file.
-VBF_EXC_INTERNAL_TITLE=IWAE0005E Internal error
-VBF_EXC_INTERNAL_PAGE=IWAE0006E An unexpected error occured; click Cancel to close the wizard.
-
-VBF_EXC_INVALID_REGISTER=IWAE0007E Validators can run only on open resources.
-
-VBF_UI_NO_VALIDATORS_INSTALLED=No validators are installed.
-
-VBF_UI_LBL_NOVALIDATORS_DESC=It is not possible to run any Validators, at the project level, for this type of project.
-
-VBF_UI_NO_VALIDATORS_ENABLED=Enable at least one validator on {0}. To select the validators that you want to run, open this project''s Properties wizard, turn to the Validation section, and select one or more validators in the list.
-
-VBF_UI_CHECKBOXGROUP_TITLE=Validators
-
-VBF_UI_CLOSED_PROJECT=Validation cannot run on a closed project. Open project {0} and try again.
-VBF_UI_MSSGBOX_TITLE_NONINC=Some of the Validators Do Not Support Automatic Validation
-VBF_UI_AUTO_ON_NONINC=Although automatic validation has been selected, some of the validators will not be invoked during the automatic processing. The following validators do not support automatic validation: {0}
-
-VBF_UI_PRJNEEDINPUT=Project {0} and its children were not validated because none of the enabled validators validates that type of project.
-VBF_UI_RESNEEDINPUT=Resource {0} was not validated because none of the enabled validators validates that type of resource.
-
-VBF_UI_MAX_REPORTED=Validation was terminated on {0} because the maximum number of messages were reported.
-VBF_UI_PRJVALIDATED=Validation of project {0} is complete.
-VBF_UI_RESVALIDATED=Validation of resource {0} is complete.
-VBF_UI_CANCELLED=Validation cancelled.
-VBF_UI_COMPLETE=Validation completed.
-VBF_UI_CLOSE=Close
-VBF_UI_STATUS=Status
-VBF_UI_RESCANCELLED=Validation was cancelled on {0}.
-#
-# End Validation Builder Framework UI Strings
-#
-
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ContextIds.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ContextIds.java
deleted file mode 100644
index ab3e337..0000000
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ContextIds.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.ui;
-
-import org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin;
-
-public interface ContextIds {
-	static final String PREFIX = WTPUIPlugin.PLUGIN_ID;
-
-	// context ids for the Validation Properties Page
-	public static final String VALIDATION_PROPERTIES_PAGE = PREFIX + ".jvpp0000"; //$NON-NLS-1$
-	public static final String VALIDATION_PROPERTIES_PAGE_DISABLED_OVERRIDE = PREFIX + ".jvpp0001"; //$NON-NLS-1$
-	public static final String VALIDATION_PROPERTIES_PAGE_DISABLED_BUILD_NOVALSELECTED = PREFIX + ".jvpp0003"; //$NON-NLS-1$
-	public static final String VALIDATION_PROPERTIES_PAGE_DISABLED_AUTO_AUTOBUILD = PREFIX + ".jvpp0004"; //$NON-NLS-1$
-	public static final String VALIDATION_PROPERTIES_PAGE_DISABLED_AUTO_NOINCVALSELECTED = PREFIX + ".jvpp0005"; //$NON-NLS-1$
-	public static final String VALIDATION_PROPERTIES_PAGE_DISABLED_AUTO_NOINCVALCONFIG = PREFIX + ".jvpp0006"; //$NON-NLS-1$
-	public static final String VALIDATION_PROPERTIES_PAGE_AUTO_ENABLED = PREFIX + ".jvpp0020"; //$NON-NLS-1$
-	public static final String VALIDATION_PROPERTIES_PAGE_OVERRIDE_ENABLED = PREFIX + ".jvpp0030"; //$NON-NLS-1$
-	public static final String VALIDATION_PROPERTIES_PAGE_OVERRIDE_ENABLED_CANNOT_HONOUR_BOTH = PREFIX + ".jvpp0031"; //$NON-NLS-1$
-	public static final String VALIDATION_PROPERTIES_PAGE_OVERRIDE_ENABLED_CANNOT_HONOUR_AUTO = PREFIX + ".jvpp0032"; //$NON-NLS-1$
-	public static final String VALIDATION_PROPERTIES_PAGE_OVERRIDE_ENABLED_CANNOT_HONOUR_MANUAL = PREFIX + ".jvpp0033"; //$NON-NLS-1$
-	public static final String VALIDATION_PROPERTIES_PAGE_REBUILD_ENABLED = PREFIX + ".jvpp0040"; //$NON-NLS-1$
-	public static final String VALIDATION_PROPERTIES_PAGE_MAX_MESSAGES = PREFIX + ".jvpp0050"; //$NON-NLS-1$
-
-	public static final String VALIDATION_PREFERENCE_PAGE = PREFIX + ".jvgp0000"; //$NON-NLS-1$
-	public static final String VALIDATION_PREFERENCE_PAGE_OVERRIDE = PREFIX + ".jvgp0005"; //$NON-NLS-1$
-	public static final String VALIDATION_PREFERENCE_PAGE_REBUILD_ENABLED = PREFIX + ".jvgp0010"; //$NON-NLS-1$
-	//	public static final String VALIDATION_PREFERENCE_PAGE_REBUILD_DISABLED = PREFIX +
-	// ".jvgp0011"; //$NON-NLS-1$
-	public static final String VALIDATION_PREFERENCE_PAGE_AUTO_ENABLED = PREFIX + ".jvgp0020"; //$NON-NLS-1$
-	//	public static final String VALIDATION_PREFERENCE_PAGE_AUTO_DISABLED_AUTOBUILD = PREFIX +
-	// ".jvgp0021"; //$NON-NLS-1$
-	//	public static final String VALIDATION_PREFERENCE_PAGE_AUTO_DISABLED_NOINCVALSELECTED = PREFIX
-	// + ".jvgp0022"; //$NON-NLS-1$
-	//	public static final String VALIDATION_PREFERENCE_PAGE_AUTO_DISABLED_NOINCVALCONFIG = PREFIX +
-	// ".jvgp0023"; //$NON-NLS-1$
-	public static final String VALIDATION_PREFERENCE_PAGE_MAX_MESSAGES = PREFIX + ".jvgp0030"; //$NON-NLS-1$
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ProgressAndTextDialog.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ProgressAndTextDialog.java
deleted file mode 100644
index 63af6e3..0000000
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ProgressAndTextDialog.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.ui;
-
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Cursor;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-
-/**
- * Display both progress status and cumulative status (text) to the user.
- */
-public class ProgressAndTextDialog extends ProgressMonitorDialog {
-	protected static final String NEWLINE = System.getProperty("line.separator"); //$NON-NLS-1$
-	protected Text text = null;
-	protected boolean cancelPressed = false; // Has the "Cancel" button been clicked?
-	protected boolean closePressed = false; // Has the "Close" button been clicked?
-	protected boolean operationDone = false; // Has the operation completed?
-	protected Cursor arrowCursor; // The cursor used in the cancel button.
-
-
-	public ProgressAndTextDialog(Shell parent) {
-		super(parent);
-		setShellStyle(SWT.BORDER | SWT.TITLE | SWT.RESIZE); // do not make this dialog modal
-		setBlockOnOpen(false); // do not force the user to close this dialog before using eclipse
-	}
-
-	public Control createDialogArea(Composite parent) {
-		super.createDialogArea(parent);
-
-		final int hHint = 100;
-		final int wHint = 250;
-
-		Composite composite = new Composite(parent, SWT.NONE);
-		Label textLabel = new Label(composite, SWT.LEFT | SWT.WRAP);
-		textLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_STATUS));
-		GridData labelData = new GridData();
-		labelData.horizontalSpan = 2;
-		textLabel.setLayoutData(labelData);
-
-		composite.setLayout(new GridLayout()); // use the layout's default preferences
-		GridData data = new GridData(GridData.FILL_BOTH);
-		data.heightHint = hHint;
-		data.widthHint = wHint;
-		data.horizontalSpan = 2;
-		composite.setLayoutData(data);
-
-		text = new Text(composite, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL | SWT.READ_ONLY | SWT.BORDER);
-		GridData d = new GridData(GridData.FILL_BOTH);
-		text.setLayoutData(d);
-
-		return composite;
-	}
-
-	public void addText(final String messageString) {
-		if (getShell() != null) {
-			getShell().getDisplay().asyncExec(new Runnable() {
-				public void run() {
-					text.append(messageString);
-					text.append(NEWLINE);
-				}
-			});
-		}
-	}
-
-	/**
-	 * Do not dismiss the dialog until the user presses the Close button.
-	 */
-	public boolean close() {
-		if (closePressed) {
-			// Cancel button converted to "Close" button, and user clicked the "Close" button
-			return super.close();
-		}
-
-		// Turn the "cancel" button into a "Close" button and keep the window open until
-		// the user clicks the "Close" button.
-		progressIndicator.setVisible(false);
-		if (arrowCursor == null)
-			arrowCursor = new Cursor(cancel.getDisplay(), SWT.CURSOR_ARROW);
-		getShell().setCursor(arrowCursor);
-		if (cancelPressed) {
-			messageLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_CANCELLED));
-		} else {
-			messageLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_COMPLETE));
-		}
-		cancel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_CLOSE));
-		cancel.setEnabled(true);
-		return false;
-	}
-
-	protected void internalCancelPressed() {
-		// Has this method been called because "Cancel" has been clicked or
-		// because "Close" has been clicked?
-		if (operationDone) {
-			// "Close" was clicked.
-			closePressed = true;
-			close();
-		} else {
-			// "Cancel" was clicked.
-			cancelPressed = true;
-		}
-	}
-
-	/**
-	 * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(Composite)
-	 */
-	protected void createButtonsForButtonBar(Composite parent) {
-		super.createButtonsForButtonBar(parent);
-
-		// Cannot override cancelPressed() because of the way that
-		// ProgressMonitorDialog is coded.
-		// The ProgressMonitorDialog parent, instead of overriding the
-		// cancelPressed() method, added an anonymous Listener to the
-		// cancel button. When the button's Listener is invoked, if
-		// close() has been called by cancelPressed(), then an
-		// exception is thrown (SWTException - "Widget is disposed').
-		// Work around this by adding an anonymous
-		// cancel listener, which will be called after the parent's
-		// cancel listener, and this class' listener will call close().
-		cancel.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				internalCancelPressed();
-			}
-		});
-	}
-
-	/**
-	 * @see org.eclipse.jface.operation.IRunnableContext#run(boolean, boolean,
-	 *      IRunnableWithProgress)
-	 */
-	public void run(boolean fork, boolean cancelable, IRunnableWithProgress runnable) throws InvocationTargetException, InterruptedException {
-		try {
-			super.run(fork, cancelable, runnable);
-		} finally {
-			operationDone = true;
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ResourceConstants.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ResourceConstants.java
deleted file mode 100644
index ac4b244..0000000
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ResourceConstants.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.ui;
-
-
-/**
- * This interface contains the constants used as keys into the ResourceBundle.
- */
-public interface ResourceConstants {
-	// Internal error has occurred.
-	public static final String VBF_EXC_INTERNAL = "VBF_EXC_INTERNAL"; //$NON-NLS-1$
-
-	// Internal error occurred while constructing or running the Properties or Preference page.
-	public static final String VBF_EXC_INTERNAL_PAGE = "VBF_EXC_INTERNAL_PAGE"; //$NON-NLS-1$
-
-	// Internal error has occurred.
-	public static final String VBF_EXC_INTERNAL_PROJECT = "VBF_EXC_INTERNAL_PROJECT"; //$NON-NLS-1$
-	public static final String VBF_EXC_INTERNAL_TITLE = "VBF_EXC_INTERNAL_TITLE"; //$NON-NLS-1$
-
-	// Should never happen, since plugin.xml specifies an IProject objectClass filter, but if the
-	// ValidationPropertiesPage is shown on a non-IProject resource, this message will be what's
-	// shown.
-	public static final String VBF_EXC_INVALID_REGISTER = "VBF_EXC_INVALID_REGISTER"; //$NON-NLS-1$
-
-	// On the Properties Page, this is the string which explains to the user what to do. The string
-	// is
-	// displayed in a label.
-	public static final String VBF_UI_LBL_DESC = "VBF_UI_LBL_DESC"; //$NON-NLS-1$
-
-	// On the Properties Page, this is the string which explains to the user what to do. The string
-	// is
-	// displayed in a label.
-	public static final String VBF_UI_LBL_NOVALIDATORS_DESC = "VBF_UI_LBL_NOVALIDATORS_DESC"; //$NON-NLS-1$
-
-	// Label on the checkbox button of the validator page
-	public static final String VBF_UI_LBL_AUTO_VALIDATE = "VBF_UI_LBL_AUTO_VALIDATE"; //$NON-NLS-1$
-
-	// If the user has selected "Validate this project" from the popupMenu, but has no validators
-	// enabled, tell them that nothing will run.
-	public static final String VBF_UI_NO_VALIDATORS_ENABLED = "VBF_UI_NO_VALIDATORS_ENABLED"; //$NON-NLS-1$
-
-	// On the Properties Page, this is the title of the group which encloses the CheckboxTableViewer
-	// (the list of configured validators).
-	public static final String VBF_UI_CHECKBOXGROUP_TITLE = "VBF_UI_CHECKBOXGROUP_TITLE"; //$NON-NLS-1$
-	public static final String VBF_UI_AUTO_ON_NONINC = "VBF_UI_AUTO_ON_NONINC"; //$NON-NLS-1$
-	public static final String VBF_UI_MSSGBOX_TITLE_NONINC = "VBF_UI_MSSGBOX_TITLE_NONINC"; //$NON-NLS-1$
-	public static final String VBF_UI_AUTO_NOTE = "VBF_UI_AUTO_NOTE"; //$NON-NLS-1$
-	public static final String VBF_UI_AUTO_NOTE_TEXT = "VBF_UI_AUTO_NOTE_TEXT"; //$NON-NLS-1$
-	public static final String VBF_UI_MENUITEM_TEXT = "VBF_UI_MENUITEM_TEXT"; //$NON-NLS-1$
-	public static final String VBF_UI_MENUITEM_TEXT_DEFAULT = "VBF_UI_MENUITEM_TEXT_DEFAULT"; //$NON-NLS-1$
-	public static final String VBF_UI_CLOSED_PROJECT = "VBF_UI_CLOSED_PROJECT"; //$NON-NLS-1$
-	public static final String VBF_UI_NO_VALIDATORS_INSTALLED = "VBF_UI_NO_VALIDATORS_INSTALLED"; //$NON-NLS-1$
-
-	public static final String VBF_UI_POPUP_RUNVALIDATION = "%VBF_UI_POPUP_RUNVALIDATION"; //$NON-NLS-1$
-
-	/* package */static final String PREF_BUTTON_SELECTALL = "PREF_BUTTON_SELECTALL"; //$NON-NLS-1$
-	/* package */static final String PREF_BUTTON_DESELECTALL = "PREF_BUTTON_DESELECTALL"; //$NON-NLS-1$
-	/* package */static final String PREF_VALLIST_TITLE = "PREF_VALLIST_TITLE"; //$NON-NLS-1$
-	/* package */static final String PREF_BUTTON_AUTO = "PREF_BUTTON_AUTO"; //$NON-NLS-1$
-	/* package */static final String PREF_BUTTON_OVERRIDE = "PREF_BUTTON_OVERRIDE"; //$NON-NLS-1$
-	/* package */static final String PREF_BUTTON_FULL = "PREF_BUTTON_FULL"; //$NON-NLS-1$
-	/* package */static final String PREF_LBL_MAXMSGS = "PREF_LBL_MAXMSGS"; //$NON-NLS-1$
-	/* package */static final String PROP_BUTTON_OVERRIDE = "PROP_BUTTON_OVERRIDE"; //$NON-NLS-1$
-	/* package */static final String PROP_BUTTON_FULL = "PROP_BUTTON_FULL"; //$NON-NLS-1$
-	/* package */static final String PROP_BUTTON_SELECTALL = "PROP_BUTTON_SELECTALL"; //$NON-NLS-1$
-	/* package */static final String PROP_BUTTON_DESELECTALL = "PROP_BUTTON_DESELECTALL"; //$NON-NLS-1$
-	/* package */static final String PROP_LBL_MAXMSSGS = "PROP_LBL_MAXMSSGS"; //$NON-NLS-1$
-	/* package */static final String PREF_ERROR_INT = "PREF_ERROR_INT"; //$NON-NLS-1$
-	/* package */static final String PROP_ERROR_INT = "PROP_ERROR_INT"; //$NON-NLS-1$
-
-	/* package */static final String VBF_UI_PRJNEEDINPUT = "VBF_UI_PRJNEEDINPUT"; //$NON-NLS-1$
-	/* package */static final String VBF_UI_RESNEEDINPUT = "VBF_UI_RESNEEDINPUT"; //$NON-NLS-1$
-	/* package */static final String VBF_UI_MAX_REPORTED = "VBF_UI_MAX_REPORTED"; //$NON-NLS-1$
-	/* package */static final String VBF_UI_PRJVALIDATED = "VBF_UI_PRJVALIDATED"; //$NON-NLS-1$
-	/* package */static final String VBF_UI_RESVALIDATED = "VBF_UI_RESVALIDATED"; //$NON-NLS-1$
-	/* package */static final String VBF_UI_CANCELLED = "VBF_UI_CANCELLED"; //$NON-NLS-1$
-	/* package */static final String VBF_UI_COMPLETE = "VBF_UI_COMPLETE"; //$NON-NLS-1$
-	/* package */static final String VBF_UI_CLOSE = "VBF_UI_CLOSE"; //$NON-NLS-1$
-	/* package */static final String VBF_UI_STATUS = "VBF_UI_STATUS"; //$NON-NLS-1$
-	/* package */static final String VBF_UI_RESCANCELLED = "VBF_UI_RESCANCELLED"; //$NON-NLS-1$
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ResourceHandler.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ResourceHandler.java
deleted file mode 100644
index 531ff42..0000000
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ResourceHandler.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.ui;
-
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-import java.util.logging.Level;
-
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin;
-import org.eclipse.wst.validation.internal.ui.plugin.ValidationUIPlugin;
-
-
-/**
- * This class retrieves the Strings from the .properties file appropriate for the machine's Locale.
- */
-public class ResourceHandler {
-	//TODO Make this class final once the public ResourceHandler has been deleted.
-	private static ResourceBundle _bundle = null;
-
-	protected ResourceHandler() {
-		//TODO Make this method private once the public ResourceHandler has been deleted.
-		super();
-	}
-
-	/**
-	 * Return the resource bundle which contains the messages, as identified by
-	 */
-	public static ResourceBundle getBundle() {
-		if (_bundle == null) {
-			try {
-				_bundle = ResourceBundle.getBundle(ValidationUIPlugin.getBundleName());
-			} catch (MissingResourceException exc) {
-				_bundle = null;
-				Logger logger = WTPUIPlugin.getLogger();
-				if (logger.isLoggingLevel(Level.FINE)) {
-					LogEntry entry = ValidationUIPlugin.getLogEntry();
-					entry.setSourceID("org.eclipse.wst.validation.internal.operations.ui.ResourceHandler.getBundle()"); //$NON-NLS-1$
-					entry.setText("Cannot find bundle " + ValidationUIPlugin.getBundleName()); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.FINE, entry);
-				}
-			}
-		}
-		return _bundle;
-	}
-
-	public static String getExternalizedMessage(String key) {
-		try {
-			ResourceBundle bundle = getBundle();
-			if (bundle == null) {
-				Logger logger = WTPUIPlugin.getLogger();
-				if (logger.isLoggingLevel(Level.FINE)) {
-					LogEntry entry = ValidationUIPlugin.getLogEntry();
-					entry.setSourceID("org.eclipse.wst.validation.internal.operations.ui.ResourceHandler.getExternalizedMessage(String)"); //$NON-NLS-1$
-					entry.setText("Resource bundle is null"); //$NON-NLS-1$
-					logger.write(Level.FINE, entry);
-				}
-				return key;
-			}
-
-			return bundle.getString(key);
-		} catch (NullPointerException exc) {
-			Logger logger = WTPUIPlugin.getLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationUIPlugin.getLogEntry();
-				entry.setSourceID("org.eclipse.wst.validation.internal.operations.ui.ResourceHandler.getExternalizedMessage(String)"); //$NON-NLS-1$
-				entry.setText("Cannot find message id " + key); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.FINE, entry);
-			}
-		}
-		return key;
-	}
-
-	public static String getExternalizedMessage(String key, String[] parms) {
-		String res = ""; //$NON-NLS-1$
-		try {
-			res = java.text.MessageFormat.format(getExternalizedMessage(key), parms);
-		} catch (MissingResourceException exc) {
-			Logger logger = WTPUIPlugin.getLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationUIPlugin.getLogEntry();
-				entry.setSourceID("org.eclipse.wst.validation.internal.operations.ui.ResourceHandler.getExternalizedMessage(String, String[])"); //$NON-NLS-1$
-				entry.setText("Cannot find message id " + key); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.FINE, entry);
-			}
-		} catch (NullPointerException exc) {
-			Logger logger = WTPUIPlugin.getLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationUIPlugin.getLogEntry();
-				entry.setSourceID("org.eclipse.wst.validation.internal.operations.ui.ResourceHandler.getExternalizedMessage(String, String[])"); //$NON-NLS-1$
-				entry.setText("Cannot format message id " + key + " with " + parms.length + " parameters."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				entry.setTargetException(exc);
-				logger.write(Level.FINE, entry);
-			}
-		}
-		return res;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidateAction.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidateAction.java
deleted file mode 100644
index d52b12d..0000000
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidateAction.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others. 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
-package org.eclipse.wst.validation.internal.ui;
-
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.ui.actions.SelectionListenerAction;
-import org.eclipse.wst.validation.internal.ui.plugin.ValidationUIPlugin;
-
-
-public class ValidateAction extends SelectionListenerAction {
-	protected ValidationMenuAction delegate;
-
-	public ValidateAction() {
-		super(ValidationUIPlugin.getResourceString(ResourceConstants.VBF_UI_POPUP_RUNVALIDATION));
-		delegate = new ValidationMenuAction();
-	}
-
-	/**
-	 * Implementation of method defined on <code>IAction</code>.
-	 */
-	public void run() {
-		delegate.run(this);
-	}
-
-	/**
-	 * Updates this action in response to the given selection.
-	 * <p>
-	 * The <code>SelectionListenerAction</code> implementation of this method returns
-	 * <code>true</code>. Subclasses may extend to react to selection changes; however, if the
-	 * super method returns <code>false</code>, the overriding method must also return
-	 * <code>false</code>.
-	 * </p>
-	 * 
-	 * @param selection
-	 *            the new selection
-	 * @return <code>true</code> if the action should be enabled for this selection, and
-	 *         <code>false</code> otherwise
-	 */
-	protected boolean updateSelection(IStructuredSelection selection) {
-		if (!super.updateSelection(selection))
-			return false;
-
-		delegate.selectionChanged(this, selection);
-
-		return isEnabled(); // "Enabled" is set by the delegate.
-	}
-
-	/**
-	 * If a subclass of ValidateAction enables this menu action on a type that is not an IResource,
-	 * this method returns the IResource[] that represent that object. If null is returned, the
-	 * object will be ignored and the user will not be notified that the object was not validated.
-	 * This method will be called when updateSelection and run are called. (The result of this
-	 * method is used to determine which resources will be validated)
-	 */
-	protected IResource[] getResource(Object selected) {
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationMenuAction.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationMenuAction.java
deleted file mode 100644
index 035a218..0000000
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationMenuAction.java
+++ /dev/null
@@ -1,568 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.ui;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceVisitor;
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IViewActionDelegate;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin;
-import org.eclipse.wst.validation.internal.ConfigurationManager;
-import org.eclipse.wst.validation.internal.ProjectConfiguration;
-import org.eclipse.wst.validation.internal.ValidationRegistryReader;
-import org.eclipse.wst.validation.internal.ValidationSelectionHandlerRegistryReader;
-import org.eclipse.wst.validation.internal.operations.EnabledIncrementalValidatorsOperation;
-import org.eclipse.wst.validation.internal.operations.EnabledValidatorsOperation;
-import org.eclipse.wst.validation.internal.operations.ValidatorManager;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-import org.eclipse.wst.validation.internal.ui.plugin.ValidationUIPlugin;
-
-/**
- * This class implements the pop-up menu item "Run Validation" When the item is selected, this
- * action triggers a validation of the project, using all configured, enabled validators.
- */
-public class ValidationMenuAction implements IViewActionDelegate {
-	private ISelection _currentSelection = null;
-	protected static final String SEP = "/"; //$NON-NLS-1$
-	private Display _currentDisplay = null;
-	private IResourceVisitor _folderVisitor = null;
-	private Map _selectedResources = null;
-	//protected IWorkbenchContext workbenchContext;
-
-	public ValidationMenuAction() {
-		super();
-		_currentDisplay = Display.getCurrent(); // cache the display before
-		// this action is forked. After
-		// the action is forked,
-		// Display.getCurrent() returns
-		// null.
-		_selectedResources = new HashMap();
-	}
-
-	private Display getDisplay() {
-		return (_currentDisplay == null) ? Display.getCurrent() : _currentDisplay;
-	}
-
-	/**
-	 * Return the wizard's shell.
-	 */
-	Shell getShell() {
-		Display display = getDisplay();
-		Shell shell = (display == null) ? null : display.getActiveShell();
-		if (shell == null && display != null) {
-			Shell[] shells = display.getShells();
-			if (shells.length > 0)
-				shell = shells[0];
-		}
-		return shell;
-	}
-
-	private ISelection getCurrentSelection() {
-		return _currentSelection;
-	}
-
-	/**
-	 * Return a map of the selected elements. Each key of the map is an IProject, and the value is a
-	 * Set of the selected resources in that project. If a project is selected, and nothing else in
-	 * the project is selected, a full validation (null value) will be done on the project. If a
-	 * project is selected, and some files/folders in the project are also selected, only the
-	 * files/folders will be validated. If a folder is selected, all of its contents are also
-	 * validated.
-	 */
-	private Map loadSelected(ValidateAction action, boolean refresh) {
-		if (refresh) {
-			// selectionChanged(IAction, ISelection) has been called. Flush the
-			// existing cache of resources and
-			// add just the currently selected ones.
-			_selectedResources.clear();
-		}
-		ISelection selection = getCurrentSelection();
-		if ((selection == null) || selection.isEmpty() || !(selection instanceof IStructuredSelection)) {
-			return null;
-		}
-		Object[] elements = ((IStructuredSelection) selection).toArray();
-		for (int i = 0; i < elements.length; i++) {
-			Object element = elements[i];
-			if (element == null) {
-				continue;
-			}
-			addSelected(action, element);
-		}
-		return _selectedResources;
-	}
-
-	private void addSelected(ValidateAction action, Object selected) {
-		if (selected instanceof IProject) {
-			addSelected((IProject) selected);
-		} else if (selected instanceof IFile) {
-			addSelected((IFile) selected);
-		} else if (selected instanceof IFolder) {
-			addVisitor((IFolder) selected);
-		} else if (isValidType(getExtendedType(selected))) {
-			addSelected(action,getExtendedType(selected));
-		} else {
-			// Not a valid input type. Must be IProject, IJavaProject, or
-			// IResource.
-			// If this ValidationMenuAction is a delegate of ValidateAction, is
-			// the input type recognized by the ValidateAction?
-			boolean valid = false;
-			if (action != null) {
-				IResource[] resources = action.getResource(selected);
-				if (resources != null) {
-					valid = true;
-					for (int i = 0; i < resources.length; i++) {
-						addSelected(action, resources[i]);
-					}
-				}
-			}
-			if (!valid) {
-				// Stop processing. (This allows the "Run Validation" menu item
-				// to gray
-				// out once at least one non-validatable element is selected.)
-				_selectedResources.clear();
-			}
-		}
-	}
-	
-	private Object getExtendedType(Object selected) {
-		Object result = ValidationSelectionHandlerRegistryReader.getInstance().getExtendedType(selected);
-		return result == null ? selected : result;
-	}
-	
-	private boolean isValidType(Object object) {
-		return object instanceof IProject || object instanceof IFile || object instanceof IFolder;
-	}
-
-	private void addSelected(IProject selected) {
-		_selectedResources.put(selected, null); // whatever the values were
-		// before, the entire project
-		// needs to be revalidated now
-	}
-
-//	private void addSelected(IJavaProject selected) {
-//		_selectedResources.put(selected.getProject(), null); // whatever the
-//		// values were
-//		// before, the
-//		// entire project
-//		// needs to be
-//		// revalidated now
-//	}
-
-	void addSelected(IResource selected) {
-		IProject project = selected.getProject();
-		boolean added = _selectedResources.containsKey(project);
-		List changedRes = null;
-		if (added) {
-			// If the value is null, the entire project needs to be validated
-			// anyway.
-			changedRes = (List) _selectedResources.get(project);
-			if (changedRes == null) {
-				return;
-			}
-		} else {
-			changedRes = new ArrayList();
-		}
-		if (!changedRes.contains(selected)) {
-			changedRes.add(selected);
-			_selectedResources.put(project, changedRes);
-		}
-	}
-
-	private void addVisitor(IFolder selected) {
-		// add the folder and its children
-		try {
-			selected.accept(getFolderVisitor());
-		} catch (CoreException exc) {
-			Logger logger = WTPUIPlugin.getLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationUIPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidationMenuAction.addSelected(IFolder)"); //$NON-NLS-1$
-				entry.setMessageTypeIdentifier(ResourceConstants.VBF_EXC_INTERNAL);
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-			return;
-		}
-	}
-
-	private IResourceVisitor getFolderVisitor() {
-		if (_folderVisitor == null) {
-			_folderVisitor = new IResourceVisitor() {
-				public boolean visit(IResource res) {
-					if (res instanceof IFile) {
-						addSelected(res);
-					} else if (res instanceof IFolder) {
-						addSelected(res);
-					}
-					return true; // visit the resource's children
-				}
-			};
-		}
-		return _folderVisitor;
-	}
-
-	/**
-	 * The delegating action has been performed. Implement this method to do the actual work.
-	 * 
-	 * @param action
-	 *            action proxy that handles the presentation portion of the plugin action
-	 * @param window
-	 *            the desktop window passed by the action proxy
-	 */
-	public void run(IAction action) {
-		ValidateAction vaction = null;
-		if (action instanceof ValidateAction) {
-			vaction = (ValidateAction) action;
-		}
-		final Map projects = loadSelected(vaction, false);
-		if ((projects == null) || (projects.size() == 0)) {
-			return;
-		}
-		final ProgressAndTextDialog dialog = new ProgressAndTextDialog(getShell());
-		try {
-			IRunnableWithProgress runnable = ValidationUIPlugin.getRunnableWithProgress(new IWorkspaceRunnable() {
-				public void run(IProgressMonitor monitor) {
-					validate(monitor, projects, dialog);
-				}
-			});
-			// validate all EJBs in this project
-			dialog.run(true, true, runnable); // fork, cancelable.
-		} catch (InvocationTargetException exc) {
-			Logger logger = WTPUIPlugin.getLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationUIPlugin.getLogEntry();
-				entry.setSourceID("ValidationMenuAction.run(IAction)"); //$NON-NLS-1$
-				entry.setMessageTypeIdentifier(ResourceConstants.VBF_EXC_INTERNAL);
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc.getTargetException());
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-			String internalErrorMessage = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL);
-			dialog.addText(internalErrorMessage);
-		} catch (InterruptedException exc) {
-			// User cancelled validation
-		} catch (Throwable exc) {
-			Logger logger = WTPUIPlugin.getLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationUIPlugin.getLogEntry();
-				entry.setSourceID("ValidationMenuAction.run(IAction)"); //$NON-NLS-1$
-				entry.setMessageTypeIdentifier(ResourceConstants.VBF_EXC_INTERNAL);
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-			String internalErrorMessage = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL);
-			dialog.addText(internalErrorMessage);
-		} finally {
-			_selectedResources.clear();
-		}
-	}
-
-	void validate(final IProgressMonitor monitor, final Map projects, ProgressAndTextDialog dialog) {
-		boolean cancelled = false; // Was the operation cancelled?
-		Iterator iterator = projects.keySet().iterator();
-		while (iterator.hasNext()) {
-			IProject project = (IProject) iterator.next();
-			if (project == null) {
-				continue;
-			}
-			try {
-				if (cancelled) {
-					String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_RESCANCELLED, new String[]{project.getName()});
-					dialog.addText(message);
-					continue;
-				}
-				if (!project.isOpen()) {
-					String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_CLOSED_PROJECT, new String[]{project.getName()});
-					dialog.addText(message);
-					continue;
-				}
-				performValidation(monitor, projects, dialog, project);
-			} catch (OperationCanceledException exc) {
-				// When loading file deltas, if the operation has been
-				// cancelled, then
-				// resource.accept throws an OperationCanceledException.
-				cancelled = true;
-				String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_RESCANCELLED, new String[]{project.getName()});
-				dialog.addText(message);
-			} catch (Throwable exc) {
-				logException(dialog, project, exc);
-			}
-		}
-	}
-
-	/**
-	 * @param dialog
-	 * @param project
-	 * @param exc
-	 */
-	private void logException(ProgressAndTextDialog dialog, IProject project, Throwable exc) {
-		Logger logger = WTPUIPlugin.getLogger();
-		if (logger.isLoggingLevel(Level.SEVERE)) {
-			LogEntry entry = ValidationUIPlugin.getLogEntry();
-			entry.setSourceID("ValidationMenuAction.validate"); //$NON-NLS-1$
-			entry.setMessageTypeIdentifier(ResourceConstants.VBF_EXC_INTERNAL);
-			entry.setTargetException(exc);
-			logger.write(Level.SEVERE, entry);
-		}
-		String internalErrorMessage = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PROJECT, new String[]{project.getName()});
-		dialog.addText(internalErrorMessage);
-	}
-
-	/**
-	 * @param monitor
-	 * @param projects
-	 * @param dialog
-	 * @param project
-	 * @throws CoreException
-	 */
-	private void performValidation(final IProgressMonitor monitor, final Map projects, ProgressAndTextDialog dialog, IProject project) throws CoreException {
-		// Even if the "maximum number of messages" message is on
-		// the task list,
-		// run validation, because some messages may have been
-		// fixed
-		// and there may be space for more messages.
-		List changedResources = (List) projects.get(project);
-		IResource[] resources = null;
-		if (changedResources != null) {
-			resources = new IResource[changedResources.size()];
-			changedResources.toArray(resources);
-		}
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			if (prjp.numberOfEnabledValidators() > 0) {
-				checkProjectConfiguration(monitor, dialog, project, resources, prjp);
-			} else {
-				String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_NO_VALIDATORS_ENABLED, new String[]{project.getName()});
-				dialog.addText(message);
-			}
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidationMenuAction::run"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-	}
-
-	/**
-	 * @param monitor
-	 * @param dialog
-	 * @param project
-	 * @param resources
-	 * @param prjp
-	 * @throws InvocationTargetException
-	 * @throws CoreException
-	 */
-	private void checkProjectConfiguration(final IProgressMonitor monitor, ProgressAndTextDialog dialog, IProject project, IResource[] resources, ProjectConfiguration prjp) throws InvocationTargetException, CoreException {
-		boolean successful = true; // Did the operation
-		// complete
-		// successfully?
-		EnabledValidatorsOperation validOp = null;
-		if (resources == null) {
-			validOp = new EnabledValidatorsOperation(project,prjp.runAsync());
-		} else {
-			validOp = new EnabledIncrementalValidatorsOperation(resources, project, prjp.runAsync());
-		}
-		if (validOp.isNecessary(monitor)) {
-			ResourcesPlugin.getWorkspace().run(validOp, monitor);
-		} else {
-			if (resources == null) {
-				String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_PRJNEEDINPUT, new String[]{project.getName()});
-				dialog.addText(message);
-			} else {
-				for (int i = 0; i < resources.length; i++) {
-					String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_RESNEEDINPUT, new String[]{resources[i].getFullPath().toString()});
-					dialog.addText(message);
-				}
-			}
-		}
-		if (successful) {
-			performSucessful(dialog, project, resources);
-		} else {
-			String internalErrorMessage = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PROJECT, new String[]{project.getName()});
-			dialog.addText(internalErrorMessage);
-		}
-	}
-
-	/*public IWorkbenchContext getWorkbenchContext() {
-		if(workbenchContext == null)
-			workbenchContext = new WorkbenchContext();
-		return workbenchContext;
-	}*/
-
-	/**
-	 * @param dialog
-	 * @param project
-	 * @param resources
-	 */
-	private void performSucessful(ProgressAndTextDialog dialog, IProject project, IResource[] resources) {
-		boolean limitExceeded = ValidatorManager.getManager().wasValidationTerminated(project);
-		if (limitExceeded) {
-			String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_MAX_REPORTED, new String[]{project.getName()});
-			dialog.addText(message);
-		} else if (resources == null) {
-			String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_PRJVALIDATED, new String[]{project.getName()});
-			dialog.addText(message);
-		} else {
-			for (int i = 0; i < resources.length; i++) {
-				String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_RESVALIDATED, new String[]{resources[i].getFullPath().toString()});
-				dialog.addText(message);
-			}
-		}
-	}
-
-	/**
-	 * Selection in the desktop has changed. Plugin provider can use it to change the availability
-	 * of the action or to modify other presentation properties.
-	 * 
-	 * <p>
-	 * Action delegate cannot be notified about selection changes before it is loaded. For that
-	 * reason, control of action's enable state should also be performed through simple XML rules
-	 * defined for the extension point. These rules allow enable state control before the delegate
-	 * has been loaded.
-	 * </p>
-	 * 
-	 * @param action
-	 *            action proxy that handles presentation portion of the plugin action
-	 * @param selection
-	 *            current selection in the desktop
-	 */
-	public void selectionChanged(IAction action, ISelection selection) {
-		_currentSelection = selection;
-		int count = 0;
-		boolean fwkActivated = (ValidationPlugin.isActivated() && ValidationRegistryReader.isActivated());
-		if (fwkActivated) {
-			ValidateAction vaction = null;
-			if (action instanceof ValidateAction) {
-				vaction = (ValidateAction) action;
-			}
-			final Map projects = loadSelected(vaction, true);
-			if ((projects != null) && (projects.size() > 0)) {
-				Iterator iterator = projects.keySet().iterator();
-				while (iterator.hasNext()) {
-					// If at least one project can be validated, make "enabled"
-					// true and
-					// let the dialog tell the user which projects need to be
-					// opened,
-					// validators enabled, etc.
-					IProject project = (IProject) iterator.next();
-					if ((project != null) && (project.isOpen())) {
-						// If the validation plugin hasn't been activated yet,
-						// don't activate it just to
-						// find out if there are validators. Only ask if there
-						// are enabled validators if
-						// the plugin has already been activated.
-						try {
-							ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfigurationWithoutMigrate(project);
-							count += prjp.numberOfEnabledValidators();
-						} catch (InvocationTargetException exc) {
-							Logger logger = ValidationPlugin.getPlugin().getLogger();
-							if (logger.isLoggingLevel(Level.SEVERE)) {
-								LogEntry entry = ValidationPlugin.getLogEntry();
-								entry.setSourceIdentifier("ValidationMenuAction::selectionChanged"); //$NON-NLS-1$
-								entry.setTargetException(exc);
-								logger.write(Level.SEVERE, entry);
-								if (exc.getTargetException() != null) {
-									entry.setTargetException(exc);
-									logger.write(Level.SEVERE, entry);
-								}
-							}
-						}
-						if (count > 0)
-							break;
-					}
-				}
-			}
-		}
-		action.setEnabled((count > 0) || (!fwkActivated)); // Don't disable the
-		// action just
-		// because the
-		// framework hasn't
-		// been activated.
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.navigator.internal.views.navigator.INavigatorActionsExtension#init(org.eclipse.wst.common.navigator.internal.views.navigator.INavigatorExtensionSite)
-	 */
-
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.IActionDelegate2#runWithEvent(org.eclipse.jface.action.IAction,
-	 *      org.eclipse.swt.widgets.Event)
-	 */
-	public void runWithEvent(IAction action, Event event) {
-		run(action);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.IActionDelegate2#init(org.eclipse.jface.action.IAction)
-	 */
-	public void init(IAction action) {
-		//init
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.IActionDelegate2#dispose()
-	 */
-	public void dispose() { 
-		//dispose
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
-	 */
-	public void init(IViewPart view) { 
-		//init
-		
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationPreferencePage.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationPreferencePage.java
deleted file mode 100644
index ff9caf3..0000000
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationPreferencePage.java
+++ /dev/null
@@ -1,946 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.ui;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.jface.preference.PreferencePage;
-import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerSorter;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.KeyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.MessageBox;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPreferencePage;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin;
-import org.eclipse.wst.validation.internal.ConfigurationManager;
-import org.eclipse.wst.validation.internal.GlobalConfiguration;
-import org.eclipse.wst.validation.internal.ProjectConfiguration;
-import org.eclipse.wst.validation.internal.ValidationConfiguration;
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-import org.eclipse.wst.validation.internal.operations.ValidatorManager;
-import org.eclipse.wst.validation.internal.ui.plugin.ValidationUIPlugin;
-
-/**
- * This class and its inner classes are not intended to be subclassed outside of the validation
- * framework.
- */
-public class ValidationPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
-	private IValidationPage _pageImpl = null;
-
-	/**
-	 * Initially, this interface was created as an abstract class, and getControl() was implemented.
-	 * (getProject() could also have been implemented in the abstract class.) However, at runtime, a
-	 * NullPointerException was thrown; the inner class had lost its pointer to its enclosing class.
-	 * After some experimentation, I discovered that if I changed the parent to an interface, the
-	 * enclosing class could be found. (Merely moving the AValidationPage into its own file was
-	 * insufficient.)
-	 */
-	public interface IValidationPage {
-		public Composite createPage(Composite parent) throws InvocationTargetException;
-
-		public boolean performOk() throws InvocationTargetException;
-
-		public boolean performDefaults() throws InvocationTargetException;
-
-		public Composite getControl();
-
-		public void dispose();
-
-		public void loseFocus(); // Page is losing focus (event notification)
-
-		public void gainFocus(); // Page is gaining focus (event notification)
-	}
-
-	public class InvalidPage implements IValidationPage {
-		private Composite page = null;
-
-		private Composite composite = null;
-		private GridLayout layout = null;
-		private Label messageLabel = null;
-
-		public InvalidPage(Composite parent) {
-			page = createPage(parent);
-		}
-
-		/**
-		 * This page is added to the Properties guide if some internal problem occurred; for
-		 * example, the highlighted item in the workbench is not an IProject (according to this
-		 * page's plugin.xml, this page is only valid when an IProject is selected).
-		 */
-		public Composite createPage(Composite parent) {
-			// Don't create the default and apply buttons.
-			noDefaultAndApplyButton();
-
-			final ScrolledComposite sc1 = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
-			sc1.setLayoutData(new GridData(GridData.FILL_BOTH));
-			composite = new Composite(sc1, SWT.NONE);
-			sc1.setContent(composite);
-			layout = new GridLayout();
-			composite.setLayout(layout);
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ContextIds.VALIDATION_PROPERTIES_PAGE);
-
-			messageLabel = new Label(composite, SWT.NONE);
-			messageLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INVALID_REGISTER));
-
-			composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-
-			return composite;
-		}
-
-		public boolean performDefaults() {
-			return true;
-		}
-
-		/**
-		 * Since this page occurs under invalid circumstances, there is nothing to save.
-		 */
-		public boolean performOk() {
-			return true;
-		}
-
-		public Composite getControl() {
-			return page;
-		}
-
-		public void dispose() {
-			messageLabel.dispose();
-			//			layout.dispose();
-			composite.dispose();
-		}
-
-		public void loseFocus() {
-			// This page does not depend on the contents of any other page in the wizard, so do
-			// nothing.
-		}
-
-		public void gainFocus() {
-			// This page does not depend on the contents of any other page in the wizard, so do
-			// nothing.
-		}
-	}
-
-	private class NoValidatorsPage implements IValidationPage {
-		private Composite page = null;
-		private Composite composite = null;
-		private GridLayout layout = null;
-		private GridData data = null;
-		private Label messageLabel = null;
-
-		public NoValidatorsPage(Composite parent) {
-			page = createPage(parent);
-		}
-
-		/**
-		 * This page is created if an IProject is selected, but that project has no validators
-		 * configured (i.e., the page is valid, but an empty list.)
-		 */
-		public Composite createPage(Composite parent) {
-			// Don't create the default and apply buttons.
-			noDefaultAndApplyButton();
-
-			// top level group
-			final ScrolledComposite sc1 = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
-			sc1.setLayoutData(new GridData(GridData.FILL_BOTH));
-			composite = new Composite(sc1, SWT.NONE);
-			sc1.setContent(composite);
-			layout = new GridLayout();
-			composite.setLayout(layout);
-			data = new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL);
-			composite.setLayoutData(data);
-
-			messageLabel = new Label(composite, SWT.NONE);
-			messageLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_NO_VALIDATORS_INSTALLED));
-
-			composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-
-			return composite;
-		}
-
-
-		/**
-		 * Since there are no validators, there is nothing to save.
-		 */
-		public boolean performOk() {
-			return true;
-		}
-
-		public boolean performDefaults() {
-			return true;
-		}
-
-		public Composite getControl() {
-			return page;
-		}
-
-		public void dispose() {
-			messageLabel.dispose();
-			//			layout.dispose();
-			//			data.dispose();
-			composite.dispose();
-		}
-
-		public void loseFocus() {
-			// This page does not depend on the contents of any other page in the wizard, so do
-			// nothing.
-		}
-
-		public void gainFocus() {
-			// This page does not depend on the contents of any other page in the wizard, so do
-			// nothing.
-		}
-	}
-
-	private class ValidatorListPage implements IValidationPage {
-		private Composite page = null;
-
-		private Composite composite = null;
-		CheckboxTableViewer validatorList = null;
-		private Button selectAllButton = null;
-		private Button deselectAllButton = null;
-		private Label emptyRowPlaceholder = null;
-		Button valWhenBuildButton = null;
-		Button valWhenAutoBuildButton = null;
-		private Text maxValProblemsField = null;
-		private Label maxValProblemsFieldLabel = null;
-		Button overrideButton = null;
-		private Label listLabel = null;
-
-		GlobalConfiguration pagePreferences = null; // the values currently on the page, but not
-		// necessarily stored yet. Package visibility
-		// for the widget listeners (the compiler would
-		// have to create a synthetic accessor method in
-		// order to access this field)
-		private boolean _isAutoBuildEnabled; // initialized in the constructor
-		private ValidatorMetaData[] _oldVmd = null; // Cache the enabled validators so that, if
-		// there is no change to this list, the
-		// expensive task list update can be avoided
-		private boolean _allow = false; // Cache the value of the prefence "allow projects to
-
-		// override" so that, when OK is clicked, we can determine
-		// if "allow" has changed or not.
-
-		/**
-		 * This class is provided for the CheckboxTableViewer in the
-		 * ValidationPropertiesPage$ValidatorListPage class.
-		 */
-		public class ValidationContentProvider implements IStructuredContentProvider {
-			/**
-			 * Disposes of this content provider. This is called by the viewer when it is disposed.
-			 */
-			public void dispose() {
-				//dispose
-			}
-
-			/**
-			 * Returns the elements to display in the viewer when its input is set to the given
-			 * element. These elements can be presented as rows in a table, items in a list, etc.
-			 * The result is not modified by the viewer.
-			 * 
-			 * @param inputElement
-			 *            the input element
-			 * @return the array of elements to display in the viewer
-			 */
-			public java.lang.Object[] getElements(Object inputElement) {
-				if (inputElement instanceof ValidatorMetaData[]) {
-					// The Collection is the Collection which is returned by ValidatorManager's
-					// getConfiguredValidatorMetaData(IProject) call.
-					// This Collection is set to be the input of the CheckboxTableViewer in
-					// ValidationPropertiesPage$ValidatorListPage's createPage(Composite)
-					// method.
-					return (ValidatorMetaData[]) inputElement;
-				}
-				return new Object[0];
-			}
-
-			/**
-			 * Notifies this content provider that the given viewer's input has been switched to a
-			 * different element.
-			 * <p>
-			 * A typical use for this method is registering the content provider as a listener to
-			 * changes on the new input (using model-specific means), and deregistering the viewer
-			 * from the old input. In response to these change notifications, the content provider
-			 * propagates the changes to the viewer.
-			 * </p>
-			 * 
-			 * @param viewer
-			 *            the viewer
-			 * @param oldInput
-			 *            the old input element, or <code>null</code> if the viewer did not
-			 *            previously have an input
-			 * @param newInput
-			 *            the new input element, or <code>null</code> if the viewer does not have
-			 *            an input
-			 */
-			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-				//do nothing
-			}
-
-
-
-		}
-
-		/**
-		 * This class is provided for ValidationPropertiesPage$ValidatorListPage's
-		 * checkboxTableViewer element.
-		 */
-		public class ValidationLabelProvider extends LabelProvider {
-			/**
-			 * Override the LabelProvider's text, by customizing the text for a ValidatorMetaData
-			 * element.
-			 */
-			public String getText(Object element) {
-				if (element == null) {
-					return ""; //$NON-NLS-1$
-				} else if (element instanceof ValidatorMetaData) {
-					return ((ValidatorMetaData) element).getValidatorDisplayName();
-				} else {
-					return super.getText(element);
-				}
-			}
-		}
-
-		/**
-		 * This class is used to sort the CheckboxTableViewer elements.
-		 */
-		public class ValidationViewerSorter extends ViewerSorter {
-			/**
-			 * Returns a negative, zero, or positive number depending on whether the first element
-			 * is less than, equal to, or greater than the second element.
-			 * <p>
-			 * The default implementation of this method is based on comparing the elements'
-			 * categories as computed by the <code>category</code> framework method. Elements
-			 * within the same category are further subjected to a case insensitive compare of their
-			 * label strings, either as computed by the content viewer's label provider, or their
-			 * <code>toString</code> values in other cases. Subclasses may override.
-			 * </p>
-			 * 
-			 * @param viewer
-			 *            the viewer
-			 * @param e1
-			 *            the first element
-			 * @param e2
-			 *            the second element
-			 * @return a negative number if the first element is less than the second element; the
-			 *         value <code>0</code> if the first element is equal to the second element;
-			 *         and a positive number if the first element is greater than the second element
-			 */
-			public int compare(Viewer viewer, Object e1, Object e2) {
-				// Can't instantiate ViewerSorter because it's abstract, so use this
-				// inner class to represent it.
-				return super.compare(viewer, e1, e2);
-			}
-		}
-
-		public ValidatorListPage(Composite parent) throws InvocationTargetException {
-			_isAutoBuildEnabled = ValidatorManager.getManager().isGlobalAutoBuildEnabled();
-			pagePreferences = new GlobalConfiguration(ConfigurationManager.getManager().getGlobalConfiguration()); // This
-			// represents
-			// the
-			// values
-			// on
-			// the
-			// page
-			// that
-			// haven't
-			// been
-			// persisted
-			// yet.
-			// Start
-			// with
-			// the
-			// last
-			// values
-			// that
-			// were
-			// persisted
-			// into
-			// the
-			// current
-			// page's
-			// starting
-			// values.
-			_oldVmd = pagePreferences.getEnabledValidators(); // Cache the enabled validators so
-			// that, if there is no change to this
-			// list, the expensive task list
-			// update can be avoided
-			_allow = pagePreferences.canProjectsOverride();
-
-			page = createPage(parent);
-		}
-
-		public Composite createPage(Composite parent) throws InvocationTargetException {
-			// top level group
-			final ScrolledComposite sc1 = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
-			sc1.setLayoutData(new GridData(GridData.FILL_BOTH));
-			composite = new Composite(sc1, SWT.NONE);
-			sc1.setContent(composite);
-			composite.setLayout(new GridLayout()); // use the layout's default preferences
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ContextIds.VALIDATION_PREFERENCE_PAGE);
-
-			Composite validatorGroup = new Composite(composite, SWT.NONE);
-			GridLayout validatorGroupLayout = new GridLayout();
-			validatorGroupLayout.numColumns = 2;
-			validatorGroup.setLayout(validatorGroupLayout);
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(validatorGroup, ContextIds.VALIDATION_PREFERENCE_PAGE);
-
-			GridData overrideData = new GridData(GridData.FILL_HORIZONTAL);
-			overrideData.horizontalSpan = 2;
-			overrideButton = new Button(validatorGroup, SWT.CHECK);
-			overrideButton.setLayoutData(overrideData);
-			overrideButton.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_BUTTON_OVERRIDE));
-			overrideButton.setEnabled(true);
-			overrideButton.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					pagePreferences.setCanProjectsOverride(overrideButton.getSelection());
-					try {
-						updateWidgets();
-					} catch (InvocationTargetException exc) {
-						displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-					}
-				}
-			});
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(overrideButton, ContextIds.VALIDATION_PREFERENCE_PAGE_OVERRIDE);
-
-			emptyRowPlaceholder = new Label(validatorGroup, SWT.NONE);
-			emptyRowPlaceholder.setLayoutData(new GridData());
-
-			GridData valWhenBuildData = new GridData(GridData.FILL_HORIZONTAL);
-			valWhenBuildData.horizontalSpan = 2;
-			valWhenBuildButton = new Button(validatorGroup, SWT.CHECK);
-			valWhenBuildButton.setLayoutData(valWhenBuildData);
-			valWhenBuildButton.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_BUTTON_FULL));
-			valWhenBuildButton.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					pagePreferences.setBuildValidate(valWhenBuildButton.getSelection());
-					valWhenBuildButton.setFocus();
-				}
-			});
-
-			GridData valWhenAutoBuildData = new GridData(GridData.FILL_HORIZONTAL);
-			valWhenAutoBuildData.horizontalSpan = 2;
-			valWhenAutoBuildButton = new Button(validatorGroup, SWT.CHECK);
-			valWhenAutoBuildButton.setLayoutData(valWhenAutoBuildData);
-			valWhenAutoBuildButton.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_BUTTON_AUTO));
-			valWhenAutoBuildButton.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					pagePreferences.setAutoValidate(valWhenAutoBuildButton.getSelection());
-					valWhenAutoBuildButton.setFocus();
-				}
-			});
-
-			listLabel = new Label(validatorGroup, SWT.NONE);
-			GridData listLabelData = new GridData(GridData.FILL_HORIZONTAL);
-			listLabelData.horizontalSpan = 2;
-			listLabel.setLayoutData(listLabelData);
-			listLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_VALLIST_TITLE));
-
-			GridData validatorListData = new GridData(GridData.FILL_HORIZONTAL);
-			validatorListData.horizontalSpan = 2;
-			validatorList = CheckboxTableViewer.newCheckList(validatorGroup, SWT.BORDER);
-			validatorList.getTable().setLayoutData(validatorListData);
-			validatorList.setLabelProvider(new ValidationLabelProvider());
-			validatorList.setContentProvider(new ValidationContentProvider());
-			validatorList.setSorter(new ValidationViewerSorter());
-			validatorList.setInput(pagePreferences.getValidators());
-			validatorList.getTable().addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					pagePreferences.setEnabledValidators(ValidationConfiguration.convertToArray(validatorList.getCheckedElements()));
-					try {
-						updateWidgets();
-					} catch (InvocationTargetException exc) {
-						displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-					}
-				}
-
-				public void widgetDefaultSelected(SelectionEvent e) {
-					try {
-						performDefaults();
-					} catch (InvocationTargetException exc) {
-						displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-					}
-				}
-			});
-
-			selectAllButton = new Button(validatorGroup, SWT.PUSH);
-			selectAllButton.setLayoutData(new GridData());
-			selectAllButton.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_BUTTON_SELECTALL));
-			selectAllButton.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					try {
-						performSelectAll();
-					} catch (InvocationTargetException exc) {
-						displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-					}
-				}
-			});
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(selectAllButton, ContextIds.VALIDATION_PREFERENCE_PAGE);
-
-			deselectAllButton = new Button(validatorGroup, SWT.PUSH);
-			deselectAllButton.setLayoutData(new GridData());
-			deselectAllButton.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_BUTTON_DESELECTALL));
-			deselectAllButton.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					try {
-						performDeselectAll();
-					} catch (InvocationTargetException exc) {
-						displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-					}
-				}
-			});
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(deselectAllButton, ContextIds.VALIDATION_PREFERENCE_PAGE);
-
-			Composite buttonGroup = new Composite(composite, SWT.NONE);
-			GridLayout buttonGroupLayout = new GridLayout();
-			buttonGroupLayout.numColumns = 2;
-			buttonGroup.setLayout(buttonGroupLayout);
-			buttonGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
-
-			maxValProblemsFieldLabel = new Label(buttonGroup, SWT.NONE);
-			maxValProblemsFieldLabel.setLayoutData(new GridData());
-			maxValProblemsFieldLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_LBL_MAXMSGS));
-
-			maxValProblemsField = new Text(buttonGroup, SWT.SINGLE | SWT.BORDER);
-			maxValProblemsField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-			maxValProblemsField.addKeyListener(new KeyListener() {
-				/**
-				 * Sent when a key is pressed on the system keyboard.
-				 * 
-				 * @param e
-				 *            an event containing information about the key press
-				 */
-				public void keyPressed(KeyEvent e) {
-					//do nothing
-				}
-
-				/**
-				 * Sent when a key is released on the system keyboard.
-				 * 
-				 * @param e
-				 *            an event containing information about the key release
-				 */
-				public void keyReleased(KeyEvent e) {
-					try {
-						pagePreferences.setMaximumNumberOfMessages(checkInteger());
-					} catch (InvocationTargetException exc) {
-						displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-					}
-				}
-			});
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(maxValProblemsField, ContextIds.VALIDATION_PREFERENCE_PAGE_MAX_MESSAGES);
-
-			// Have to set the tab order or only the first checkbox in a Composite can
-			// be tab-ed to. (Seems to apply only to checkboxes. Have to use the arrow
-			// key to navigate the checkboxes.)
-			validatorGroup.setTabList(new Control[]{overrideButton, valWhenBuildButton, valWhenAutoBuildButton, validatorList.getTable(), selectAllButton, deselectAllButton});
-
-			updateWidgets();
-
-			composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-
-			return composite;
-		}
-
-		protected int checkInteger() throws InvocationTargetException {
-			GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
-			String text = maxValProblemsField.getText();
-			if (text == null) {
-				setErrorMessage(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_ERROR_INT));
-				return gp.getMaximumNumberOfMessages();
-			}
-			try {
-				Integer tempInt = new Integer(text.trim());
-
-				// no exception? It's an int, then.
-				if (tempInt.intValue() <= 0) {
-					setErrorMessage(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_ERROR_INT));
-					return gp.getMaximumNumberOfMessages();
-				}
-				setErrorMessage(null);
-				return Integer.valueOf(maxValProblemsField.getText().trim()).intValue();
-			} catch (NumberFormatException exc) {
-				setErrorMessage(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_ERROR_INT));
-				return gp.getMaximumNumberOfMessages();
-			}
-		}
-
-		protected void updateWidgets() throws InvocationTargetException {
-			// Need to update even the widgets that do not change based on another
-			// widgets because of performDefaults(). If performDefaults() is selected,
-			// then the pagePreferences values are reset, and these widgets
-			// might also need to be updated.
-			overrideButton.setSelection(pagePreferences.canProjectsOverride());
-
-			maxValProblemsField.setText(String.valueOf(pagePreferences.getMaximumNumberOfMessages()));
-
-			updateTable();
-
-			boolean valEnabled = (pagePreferences.numberOfEnabledValidators() > 0);
-			valWhenBuildButton.setEnabled(valEnabled);
-			valWhenBuildButton.setSelection(pagePreferences.isBuildValidate() && valEnabled);
-
-			boolean incValEnabled = (pagePreferences.numberOfEnabledIncrementalValidators() > 0);
-			valWhenAutoBuildButton.setEnabled(_isAutoBuildEnabled && incValEnabled);
-			valWhenAutoBuildButton.setSelection(pagePreferences.isAutoValidate() && incValEnabled && _isAutoBuildEnabled);
-
-			updateHelp();
-		}
-
-		protected void updateTable() throws InvocationTargetException {
-			TableItem[] items = validatorList.getTable().getItems();
-			for (int i = 0; i < items.length; i++) {
-				TableItem item = items[i];
-				ValidatorMetaData vmd = (ValidatorMetaData) item.getData();
-
-				// Should the validator be enabled? Read the user's preferences from last time,
-				// if they exist, and set from that. If they don't exist, use the Validator class'
-				// default value.
-				validatorList.setChecked(vmd, pagePreferences.isEnabled(vmd));
-			}
-		}
-
-		public boolean performOk() throws InvocationTargetException {
-			storeValues();
-			updateTaskList();
-			return true;
-		}
-
-		public boolean performDefaults() throws InvocationTargetException {
-			pagePreferences.resetToDefault();
-			updateWidgets();
-			checkInteger(); // clear the "max must be a positive integer" message if it exists
-			getDefaultsButton().setFocus();
-			return true;
-		}
-
-		public boolean performSelectAll() throws InvocationTargetException {
-			validatorList.setAllChecked(true);
-			pagePreferences.setEnabledValidators(ValidationConfiguration.convertToArray(validatorList.getCheckedElements()));
-			updateWidgets();
-			selectAllButton.setFocus();
-			return true;
-		}
-
-		public boolean performDeselectAll() throws InvocationTargetException {
-			validatorList.setAllChecked(false);
-			pagePreferences.setEnabledValidators(ValidationConfiguration.convertToArray(validatorList.getCheckedElements()));
-			updateWidgets();
-			deselectAllButton.setFocus();
-			return true;
-		}
-
-		protected void updateHelp() {
-			// never disable this widget because users don't expect the preference page to alter
-			// based on workbench contents
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(valWhenBuildButton, ContextIds.VALIDATION_PREFERENCE_PAGE_REBUILD_ENABLED);
-
-			// never disable this widget because users don't expect the preference page to alter
-			// based on workbench contents
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(valWhenAutoBuildButton, ContextIds.VALIDATION_PREFERENCE_PAGE_AUTO_ENABLED);
-		}
-
-		/*
-		 * Store the current values of the controls into the preference store.
-		 */
-		private void storeValues() throws InvocationTargetException {
-			pagePreferences.setCanProjectsOverride(overrideButton.getSelection());
-
-			// If the manual build button is disabled because no validators are selected in the
-			// task list, don't overwrite the user's preference.
-			if (valWhenBuildButton.isEnabled()) {
-				pagePreferences.setBuildValidate(valWhenBuildButton.getSelection());
-			}
-
-			// If the auto build button is disabled because no validators are selected in the
-			// task list, or because auto-build is disabled, don't overwrite the user's preference.
-			if (valWhenAutoBuildButton.isEnabled()) {
-				pagePreferences.setAutoValidate(valWhenAutoBuildButton.getSelection());
-			}
-
-			pagePreferences.setMaximumNumberOfMessages(checkInteger());
-			pagePreferences.setEnabledValidators(ValidationConfiguration.convertToArray(validatorList.getCheckedElements()));
-
-			pagePreferences.passivate();
-			pagePreferences.store();
-			// If the projects aren't allowed to override, clear their settings.
-			if (!pagePreferences.canProjectsOverride()) {
-				IWorkspace workspace = ResourcesPlugin.getWorkspace();
-				IProject[] projects = workspace.getRoot().getProjects();
-				for (int i = 0; i < projects.length; i++) {
-					IProject project = projects[i];
-					try {
-						if (project.isOpen()) {
-							if (ConfigurationManager.getManager().isMigrated(project)) {
-								ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-								prjp.setDoesProjectOverride(false);
-								prjp.passivate();
-								prjp.store();
-							}
-						}
-					} catch (InvocationTargetException exc) {
-						displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-					}
-				}
-			}
-
-		}
-
-		private void updateTaskList() {
-			IWorkspace workspace = ResourcesPlugin.getWorkspace();
-			IProject[] projects = workspace.getRoot().getProjects();
-			boolean allowChanged = (pagePreferences.canProjectsOverride() != _allow);
-			for (int i = 0; i < projects.length; i++) {
-				IProject project = projects[i];
-				try {
-					if (project.isOpen()) {
-						ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-						if (!prjp.doesProjectOverride() && (prjp.hasEnabledValidatorsChanged(_oldVmd, allowChanged) || ValidatorManager.getManager().isMessageLimitExceeded(project))) {
-							// If the project used to override the preferences, and the preferences
-							// make that impossible now, then update the task list.
-							//
-							// If the preferences allow projects to override, and they don't, and if
-							// the validators have changed, then update the task list.
-							ValidatorManager.getManager().updateTaskList(project); // Do not remove
-							// the exceeded
-							// message; only
-							// ValidationOperation
-							// should do that
-							// because it's
-							// about to run
-							// validation. If
-							// the limit is
-							// increased,
-							// messages may
-							// still be
-							// missing, so
-							// don't remove
-							// the "messages
-							// may be
-							// missing"
-							// message.
-						}
-					}
-				} catch (InvocationTargetException exc) {
-					displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-				}
-			}
-		}
-
-		public Composite getControl() {
-			return page;
-		}
-
-		public void dispose() {
-			listLabel.dispose();
-			overrideButton.dispose();
-			maxValProblemsField.dispose();
-			maxValProblemsFieldLabel.dispose();
-			valWhenAutoBuildButton.dispose();
-			valWhenBuildButton.dispose();
-			emptyRowPlaceholder.dispose();
-			deselectAllButton.dispose();
-			selectAllButton.dispose();
-			validatorList.getTable().dispose();
-			//			validatorList.dispose();
-			//			layout.dispose();
-			//			data.dispose();
-			composite.dispose();
-		}
-
-		public void loseFocus() {
-			// This page does not need to cache anything before it loses focus.
-		}
-
-		public void gainFocus() {
-			// This page depends on the Workbench Preference page, so update the value of the
-			// isAutoBuild (in case the workbench page's value has changed), and then update
-			// this page's widgets.
-			try {
-				_isAutoBuildEnabled = ValidatorManager.getManager().isGlobalAutoBuildEnabled();
-				updateWidgets();
-			} catch (InvocationTargetException exc) {
-				displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-			}
-		}
-	}
-
-	/*
-	 * @see PreferencePage#createContents(Composite)
-	 */
-	protected Control createContents(Composite parent) {
-		try {
-			GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
-			if (gp.numberOfValidators() == 0) {
-				_pageImpl = new NoValidatorsPage(parent);
-			} else {
-				try {
-					_pageImpl = new ValidatorListPage(parent);
-				} catch (InvocationTargetException exc) {
-					_pageImpl = new InvalidPage(parent);
-					displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-				} catch (Throwable exc) {
-					_pageImpl = new InvalidPage(parent);
-					displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-				}
-			}
-		} catch (InvocationTargetException exc) {
-			_pageImpl = new InvalidPage(parent);
-			displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-		} catch (Throwable exc) {
-			_pageImpl = new InvalidPage(parent);
-			displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-		}
-
-		return _pageImpl.getControl();
-	}
-
-	/*
-	 * @see IWorkbenchPreferencePage#init(IWorkbench)
-	 */
-	public void init(IWorkbench workbench) {
-		//init
-	}
-
-	protected void noDefaultAndApplyButton() {
-		super.noDefaultAndApplyButton();
-	}
-
-	/**
-	 * Performs special processing when this page's Defaults button has been pressed.
-	 * <p>
-	 * This is a framework hook method for sublcasses to do special things when the Defaults button
-	 * has been pressed. Subclasses may override, but should call <code>super.performDefaults</code>.
-	 * </p>
-	 */
-	protected void performDefaults() {
-		super.performDefaults();
-
-		try {
-			_pageImpl.performDefaults();
-		} catch (InvocationTargetException exc) {
-			displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-		} catch (Throwable exc) {
-			displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-		}
-	}
-
-	/**
-	 * When the user presses the "OK" or "Apply" button on the Properties Guide/Properties Page,
-	 * respectively, some processing is performed by this PropertyPage. If the page is found, and
-	 * completes successfully, true is returned. Otherwise, false is returned, and the guide doesn't
-	 * finish.
-	 */
-	public boolean performOk() {
-		try {
-			return _pageImpl.performOk();
-		} catch (InvocationTargetException exc) {
-			displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-			return false;
-		} catch (Throwable exc) {
-			displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-			return false;
-		}
-	}
-
-	/**
-	 * Since the pages are inner classes of a child PreferencePage, not a PreferencePage itself,
-	 * DialogPage's automatic disposal of its children's widgets cannot be used. Instead, dispose of
-	 * each inner class' widgets explicitly.
-	 */
-	public void dispose() {
-		super.dispose();
-		try {
-			if (_pageImpl != null) {
-				_pageImpl.dispose();
-			}
-		} catch (Throwable exc) {
-			displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-		}
-	}
-
-	private void logError(Throwable exc) {
-		Logger logger = WTPUIPlugin.getLogger();
-		if (logger.isLoggingLevel(Level.SEVERE)) {
-			LogEntry entry = ValidationUIPlugin.getLogEntry();
-			entry.setSourceIdentifier("ValidationPreferencePage.displayAndLogError"); //$NON-NLS-1$
-			entry.setMessageTypeIdentifier(ResourceConstants.VBF_EXC_INTERNAL_PAGE);
-			entry.setTargetException(exc);
-			logger.write(Level.SEVERE, entry);
-
-			if (exc instanceof InvocationTargetException) {
-				if (((InvocationTargetException) exc).getTargetException() != null) {
-					entry.setTargetException(((InvocationTargetException) exc).getTargetException());
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-	}
-
-	/**
-	 * package visibility because if this method is private, then the compiler needs to create a
-	 * synthetic accessor method for the internal classes, and that can have performance
-	 * implications.
-	 */
-	void displayAndLogError(String title, String message, Throwable exc) {
-		logError(exc);
-		displayMessage(title, message, org.eclipse.swt.SWT.ICON_ERROR);
-	}
-
-	private void displayMessage(String title, String message, int iIconType) {
-		MessageBox messageBox = new MessageBox(getShell(), org.eclipse.swt.SWT.OK | iIconType | org.eclipse.swt.SWT.APPLICATION_MODAL);
-		messageBox.setMessage(message);
-		messageBox.setText(title);
-		messageBox.open();
-	}
-
-	/**
-	 * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
-	 */
-	public void setVisible(boolean visible) {
-		super.setVisible(visible);
-		if (_pageImpl == null)
-			return;
-		if (visible) {
-			_pageImpl.gainFocus();
-		} else {
-			_pageImpl.loseFocus();
-		}
-	}
-
-	/**
-	 * @see org.eclipse.jface.preference.PreferencePage#getDefaultsButton()
-	 */
-	protected Button getDefaultsButton() {
-		return super.getDefaultsButton();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationPropertiesPage.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationPropertiesPage.java
deleted file mode 100644
index 36ff675..0000000
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationPropertiesPage.java
+++ /dev/null
@@ -1,1033 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.ui;
-
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerSorter;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.KeyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.MessageBox;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.PropertyPage;
-import org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin;
-import org.eclipse.wst.validation.internal.ConfigurationManager;
-import org.eclipse.wst.validation.internal.GlobalConfiguration;
-import org.eclipse.wst.validation.internal.ProjectConfiguration;
-import org.eclipse.wst.validation.internal.ValidationConfiguration;
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-import org.eclipse.wst.validation.internal.operations.ValidatorManager;
-import org.eclipse.wst.validation.internal.ui.plugin.ValidationUIPlugin;
-
-/**
- * This class and its inner classes are not intended to be subclassed outside of the validation
- * framework.
- * 
- * This page implements the PropertyPage for validators; viewed when the user right-clicks on the
- * IProject, selects "Properties", and then "Validation."
- * 
- * There exist three possible page layouts: if there is an eclipse internal error, and the page is
- * brought up on a non-IProject type; if there are no validators configured on that type of
- * IProject, and a page which lists all validators configured on that type of IProject. These three
- * pages are implemented as inner classes, so that it's clear which method is needed for which
- * input. When all of the methods, and behaviour, were implemented in this one class, much more
- * error-checking had to be done, to ensure that the method wasn't being called incorrectly by one
- * of the pages.
- */
-public class ValidationPropertiesPage extends PropertyPage {
-	static final String NEWLINE = System.getProperty("line.separator"); //$NON-NLS-1$
-	static final String TAB = "\t"; //$NON-NLS-1$
-	static final String NEWLINE_AND_TAB = NEWLINE + TAB;
-	private IValidationPage _pageImpl = null;
-
-	/**
-	 * Initially, this interface was created as an abstract class, and getControl() was implemented.
-	 * (getProject() could also have been implemented in the abstract class.) However, at runtime, a
-	 * NullPointerException was thrown; the inner class had lost its pointer to its enclosing class.
-	 * After some experimentation, I discovered that if I changed the parent to an interface, the
-	 * enclosing class could be found. (Merely moving the AValidationPage into its own file was
-	 * insufficient.)
-	 */
-	public interface IValidationPage {
-		public abstract Composite createPage(Composite parent) throws InvocationTargetException;
-
-		public abstract boolean performOk() throws InvocationTargetException;
-
-		public boolean performDefaults() throws InvocationTargetException;
-
-		public Composite getControl();
-
-		public abstract void dispose();
-	}
-
-	public class InvalidPage implements IValidationPage {
-		private Composite page = null;
-
-		private Composite composite = null;
-		private GridLayout layout = null;
-		private Label messageLabel = null;
-
-		public InvalidPage(Composite parent) {
-			page = createPage(parent);
-		}
-
-		/**
-		 * This page is added to the Properties guide if some internal problem occurred; for
-		 * example, the highlighted item in the workbench is not an IProject (according to this
-		 * page's plugin.xml, this page is only valid when an IProject is selected).
-		 */
-		public Composite createPage(Composite parent) {
-			// Don't create the default and apply buttons.
-			noDefaultAndApplyButton();
-
-			final ScrolledComposite sc1 = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
-			sc1.setLayoutData(new GridData(GridData.FILL_BOTH));
-			composite = new Composite(sc1, SWT.NONE);
-			sc1.setContent(composite);
-			layout = new GridLayout();
-			composite.setLayout(layout);
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ContextIds.VALIDATION_PROPERTIES_PAGE);
-
-			messageLabel = new Label(composite, SWT.NONE);
-			messageLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INVALID_REGISTER));
-
-			composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-
-			return composite;
-		}
-
-		public boolean performDefaults() {
-			return true;
-		}
-
-		/**
-		 * Since this page occurs under invalid circumstances, there is nothing to save.
-		 */
-		public boolean performOk() {
-			return true;
-		}
-
-		public Composite getControl() {
-			return page;
-		}
-
-		public void dispose() {
-			messageLabel.dispose();
-			//			layout.dispose();
-			composite.dispose();
-		}
-	}
-
-	public class NoValidatorsPage implements IValidationPage {
-		private Composite page = null;
-
-		private Composite composite = null;
-		private GridLayout layout = null;
-		private GridData data = null;
-		private Label messageLabel = null;
-
-		public NoValidatorsPage(Composite parent) {
-			page = createPage(parent);
-		}
-
-		/**
-		 * This page is created if an IProject is selected, but that project has no validators
-		 * configured (i.e., the page is valid, but an empty list.)
-		 */
-		public Composite createPage(Composite parent) {
-			// Don't create the default and apply buttons.
-			noDefaultAndApplyButton();
-
-			// top level group
-			final ScrolledComposite sc1 = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
-			sc1.setLayoutData(new GridData(GridData.FILL_BOTH));
-			composite = new Composite(sc1, SWT.NONE);
-			sc1.setContent(composite);
-			layout = new GridLayout();
-			composite.setLayout(layout);
-			data = new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL);
-			composite.setLayoutData(data);
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ContextIds.VALIDATION_PROPERTIES_PAGE);
-
-			messageLabel = new Label(composite, SWT.NONE);
-			String[] msgParm = {getProject().getName()};
-			messageLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_LBL_NOVALIDATORS_DESC, msgParm));
-			composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-			return composite;
-		}
-
-		public boolean performDefaults() {
-			return true;
-		}
-
-		/**
-		 * Since there are no validators, there is nothing to save.
-		 */
-		public boolean performOk() {
-			return true;
-		}
-
-		public Composite getControl() {
-			return page;
-		}
-
-		public void dispose() {
-			messageLabel.dispose();
-			//			layout.dispose();
-			//			data.dispose();
-			composite.dispose();
-		}
-	}
-
-	public class ValidatorListPage implements IValidationPage {
-		Composite page = null;
-		GridLayout layout = null;
-		GridData data = null;
-		Label messageLabel = null;
-		CheckboxTableViewer validatorList = null;
-		Button overrideGlobalButton = null;
-		Button autoButton = null;
-		Button valWhenBuildButton = null;
-		Button selectAllButton = null;
-		Button deselectAllButton = null;
-		Label emptyRowPlaceholder = null;
-		Text maxValProblemsField = null;
-		Label maxValProblemsFieldLabel = null;
-
-		ProjectConfiguration pagePreferences = null;
-
-		// default values for the widgets, initialized in the constructor
-		private boolean isAutoBuildEnabled = false;
-		private boolean isBuilderConfigured = false;
-		private boolean canOverride = false;
-
-		private ValidatorMetaData[] oldVmd = null; // Cache the enabled validators so that, if there
-
-		// is no change to this list, the expensive task
-		// list update can be avoided
-
-		/**
-		 * This class is provided for the CheckboxTableViewer in the
-		 * ValidationPropertiesPage$ValidatorListPage class.
-		 */
-		public class ValidationContentProvider implements IStructuredContentProvider {
-			/**
-			 * Disposes of this content provider. This is called by the viewer when it is disposed.
-			 */
-			public void dispose() {
-				//dispose
-			}
-
-			/**
-			 * Returns the elements to display in the viewer when its input is set to the given
-			 * element. These elements can be presented as rows in a table, items in a list, etc.
-			 * The result is not modified by the viewer.
-			 * 
-			 * @param inputElement
-			 *            the input element
-			 * @return the array of elements to display in the viewer
-			 */
-			public java.lang.Object[] getElements(Object inputElement) {
-				if (inputElement instanceof ValidatorMetaData[]) {
-					// The ValidatorMetaData[] is the array which is returned by ValidatorManager's
-					// getConfiguredValidatorMetaData(IProject) call.
-					// This array is set to be the input of the CheckboxTableViewer in
-					// ValidationPropertiesPage$ValidatorListPage's createPage(Composite)
-					// method.
-					return (ValidatorMetaData[]) inputElement;
-				}
-				return new Object[0];
-			}
-
-			/**
-			 * Notifies this content provider that the given viewer's input has been switched to a
-			 * different element.
-			 * <p>
-			 * A typical use for this method is registering the content provider as a listener to
-			 * changes on the new input (using model-specific means), and deregistering the viewer
-			 * from the old input. In response to these change notifications, the content provider
-			 * propagates the changes to the viewer.
-			 * </p>
-			 * 
-			 * @param viewer
-			 *            the viewer
-			 * @param oldInput
-			 *            the old input element, or <code>null</code> if the viewer did not
-			 *            previously have an input
-			 * @param newInput
-			 *            the new input element, or <code>null</code> if the viewer does not have
-			 *            an input
-			 */
-			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-				//do nothing
-			}
-
-
-
-		}
-
-		/**
-		 * This class is provided for ValidationPropertiesPage$ValidatorListPage's
-		 * checkboxTableViewer element.
-		 */
-		public class ValidationLabelProvider extends LabelProvider {
-			/**
-			 * Override the LabelProvider's text, by customizing the text for a ValidatorMetaData
-			 * element.
-			 */
-			public String getText(Object element) {
-				if (element == null) {
-					return ""; //$NON-NLS-1$
-				} else if (element instanceof ValidatorMetaData) {
-					return ((ValidatorMetaData) element).getValidatorDisplayName();
-				} else {
-					return super.getText(element);
-				}
-			}
-		}
-
-		/**
-		 * This class is used to sort the CheckboxTableViewer elements.
-		 */
-		public class ValidationViewerSorter extends ViewerSorter {
-			/**
-			 * Returns a negative, zero, or positive number depending on whether the first element
-			 * is less than, equal to, or greater than the second element.
-			 * <p>
-			 * The default implementation of this method is based on comparing the elements'
-			 * categories as computed by the <code>category</code> framework method. Elements
-			 * within the same category are further subjected to a case insensitive compare of their
-			 * label strings, either as computed by the content viewer's label provider, or their
-			 * <code>toString</code> values in other cases. Subclasses may override.
-			 * </p>
-			 * 
-			 * @param viewer
-			 *            the viewer
-			 * @param e1
-			 *            the first element
-			 * @param e2
-			 *            the second element
-			 * @return a negative number if the first element is less than the second element; the
-			 *         value <code>0</code> if the first element is equal to the second element;
-			 *         and a positive number if the first element is greater than the second element
-			 */
-			public int compare(Viewer viewer, Object e1, Object e2) {
-				// Can't instantiate ViewerSorter because it's abstract, so use this
-				// inner class to represent it.
-				return super.compare(viewer, e1, e2);
-			}
-		}
-
-		public ValidatorListPage(Composite parent) throws InvocationTargetException {
-			ConfigurationManager prefMgr = ConfigurationManager.getManager();
-			ValidatorManager vMgr = ValidatorManager.getManager();
-
-			pagePreferences = new ProjectConfiguration(prefMgr.getProjectConfiguration(getProject())); // This
-			// represents
-			// the
-			// values
-			// on
-			// the
-			// page
-			// that
-			// haven't
-			// been
-			// persisted
-			// yet.
-			// Start
-			// with
-			// the
-			// last
-			// values
-			// that
-			// were
-			// persisted
-			// into
-			// the
-			// current
-			// page's
-			// starting
-			// values.
-
-			// store the default values for the widgets
-			canOverride = prefMgr.getGlobalConfiguration().canProjectsOverride();
-			isAutoBuildEnabled = vMgr.isGlobalAutoBuildEnabled();
-			isBuilderConfigured = ValidatorManager.doesProjectSupportBuildValidation(getProject());
-			oldVmd = pagePreferences.getEnabledValidators(); // Cache the enabled validators so
-			// that, if there is no change to this
-			// list, the expensive task list update
-			// can be avoided
-
-			createPage(parent);
-		}
-
-		/**
-		 * This page is created if the current project has at least one validator configured on it.
-		 */
-		public Composite createPage(Composite parent) throws InvocationTargetException {
-			// top level group
-			final ScrolledComposite sc1 = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
-			sc1.setLayoutData(new GridData(GridData.FILL_BOTH));
-			page = new Composite(sc1, SWT.NONE);
-			sc1.setContent(page);
-			page.setLayout(new GridLayout()); // use the layout's default preferences
-
-			Composite validatorGroup = new Composite(page, SWT.NONE);
-			GridLayout validatorGroupLayout = new GridLayout();
-			validatorGroupLayout.numColumns = 2;
-			validatorGroup.setLayout(validatorGroupLayout);
-
-			GridData overrideData = new GridData(GridData.FILL_HORIZONTAL);
-			overrideData.horizontalSpan = 2;
-			overrideGlobalButton = new Button(validatorGroup, SWT.CHECK);
-			overrideGlobalButton.setLayoutData(overrideData);
-			overrideGlobalButton.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PROP_BUTTON_OVERRIDE, new String[]{getProject().getName()}));
-			overrideGlobalButton.setFocus(); // must focus on something for F1 to have a topic to
-			// launch
-			overrideGlobalButton.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					pagePreferences.setDoesProjectOverride(overrideGlobalButton.getSelection());
-					try {
-						updateWidgets();
-					} catch (InvocationTargetException exc) {
-						displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-					}
-				}
-			});
-
-
-			emptyRowPlaceholder = new Label(validatorGroup, SWT.NONE);
-			emptyRowPlaceholder.setLayoutData(new GridData());
-
-			GridData valWhenBuildData = new GridData(GridData.FILL_HORIZONTAL);
-			valWhenBuildData.horizontalSpan = 2;
-			valWhenBuildButton = new Button(validatorGroup, SWT.CHECK);
-			valWhenBuildButton.setLayoutData(valWhenBuildData);
-			valWhenBuildButton.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PROP_BUTTON_FULL, new String[]{getProject().getName()}));
-			valWhenBuildButton.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					pagePreferences.setBuildValidate(valWhenBuildButton.getSelection());
-					valWhenBuildButton.setFocus();
-				}
-			});
-
-			GridData valWhenAutoBuildData = new GridData(GridData.FILL_HORIZONTAL);
-			valWhenAutoBuildData.horizontalSpan = 2;
-			autoButton = new Button(validatorGroup, SWT.CHECK);
-			autoButton.setLayoutData(valWhenAutoBuildData);
-			autoButton.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_LBL_AUTO_VALIDATE, new String[]{getProject().getName()}));
-			autoButton.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					pagePreferences.setAutoValidate(autoButton.getSelection());
-					autoButton.setFocus();
-				}
-			});
-
-			GridData listLabelData = new GridData(GridData.FILL_HORIZONTAL);
-			listLabelData.horizontalSpan = 2;
-			messageLabel = new Label(validatorGroup, SWT.NONE);
-			messageLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_LBL_DESC, new String[]{getProject().getName()}));
-			messageLabel.setLayoutData(listLabelData);
-
-			GridData validatorListData = new GridData(GridData.FILL_HORIZONTAL);
-			validatorListData.horizontalSpan = 2;
-			validatorList = CheckboxTableViewer.newCheckList(validatorGroup, SWT.BORDER);
-			validatorList.getTable().setLayoutData(validatorListData);
-			validatorList.setLabelProvider(new ValidationLabelProvider());
-			validatorList.setContentProvider(new ValidationContentProvider());
-			validatorList.setSorter(new ValidationViewerSorter());
-			validatorList.getTable().addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					pagePreferences.setEnabledValidators(ValidationConfiguration.convertToArray(validatorList.getCheckedElements()));
-					try {
-						updateWidgets();
-					} catch (InvocationTargetException exc) {
-						displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-					}
-				}
-			});
-			validatorList.setInput(pagePreferences.getValidators());
-
-			selectAllButton = new Button(validatorGroup, SWT.PUSH);
-			GridData selectData = new GridData();
-			selectAllButton.setLayoutData(selectData);
-			selectAllButton.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PROP_BUTTON_SELECTALL));
-			selectAllButton.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					try {
-						performSelectAll();
-					} catch (InvocationTargetException exc) {
-						displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-					}
-				}
-			});
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(selectAllButton, ContextIds.VALIDATION_PROPERTIES_PAGE);
-
-
-			GridData deselectData = new GridData();
-			deselectAllButton = new Button(validatorGroup, SWT.PUSH);
-			deselectAllButton.setLayoutData(deselectData);
-			deselectAllButton.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PROP_BUTTON_DESELECTALL));
-			deselectAllButton.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					try {
-						performDeselectAll();
-					} catch (InvocationTargetException exc) {
-						displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-					}
-				}
-			});
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(deselectAllButton, ContextIds.VALIDATION_PROPERTIES_PAGE);
-
-			Composite maxGroup = new Composite(page, SWT.NONE);
-			GridLayout maxGroupLayout = new GridLayout();
-			maxGroupLayout.numColumns = 2;
-			maxGroup.setLayout(maxGroupLayout);
-			GridData maxGroupData = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-			maxGroup.setLayoutData(maxGroupData);
-
-			GridData maxLabel = new GridData();
-			maxValProblemsFieldLabel = new Label(maxGroup, SWT.NONE);
-			maxValProblemsFieldLabel.setLayoutData(maxLabel);
-			maxValProblemsFieldLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PROP_LBL_MAXMSSGS, new String[]{getProject().getName()}));
-
-			maxValProblemsField = new Text(maxGroup, SWT.SINGLE | SWT.BORDER);
-			GridData maxValProblemsData = new GridData(GridData.FILL_HORIZONTAL);
-			maxValProblemsField.setLayoutData(maxValProblemsData);
-			maxValProblemsField.addKeyListener(new KeyListener() {
-				/**
-				 * Sent when a key is pressed on the system keyboard.
-				 * 
-				 * @param e
-				 *            an event containing information about the key press
-				 */
-				public void keyPressed(KeyEvent e) {
-					//do nothing
-				}
-
-				/**
-				 * Sent when a key is released on the system keyboard.
-				 * 
-				 * @param e
-				 *            an event containing information about the key release
-				 */
-				public void keyReleased(KeyEvent e) {
-					try {
-						pagePreferences.setMaximumNumberOfMessages(checkInteger());
-					} catch (InvocationTargetException exc) {
-						displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-					}
-				}
-			});
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(maxValProblemsField, ContextIds.VALIDATION_PROPERTIES_PAGE_MAX_MESSAGES);
-
-			// Have to set the tab order or only the first checkbox in a Composite can
-			// be tab-ed to. (Seems to apply only to checkboxes. Have to use the arrow
-			// key to navigate the checkboxes.)
-			validatorGroup.setTabList(new Control[]{overrideGlobalButton, valWhenBuildButton, autoButton, validatorList.getTable(), selectAllButton, deselectAllButton});
-
-			updateWidgets();
-
-			page.setSize(page.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-
-			return page;
-		}
-
-		protected void updateTable() throws InvocationTargetException {
-			TableItem[] items = validatorList.getTable().getItems();
-			for (int i = 0; i < items.length; i++) {
-				TableItem item = items[i];
-				ValidatorMetaData vmd = (ValidatorMetaData) item.getData();
-
-				// Should the validator be enabled? Read the user's preferences from last time,
-				// if they exist, and set from that. If they don't exist, use the Validator class'
-				// default value.
-				validatorList.setChecked(vmd, pagePreferences.isEnabled(vmd));
-			}
-		}
-
-		public boolean performDefaults() throws InvocationTargetException {
-			pagePreferences.resetToDefault();
-			updateWidgets();
-			checkInteger(); // clear the "max must be a positive integer" message if it exists
-			getDefaultsButton().setFocus();
-			return true;
-		}
-
-		public boolean performSelectAll() throws InvocationTargetException {
-			validatorList.setAllChecked(true);
-			pagePreferences.setEnabledValidators(ValidationConfiguration.convertToArray(validatorList.getCheckedElements()));
-			updateWidgets();
-			selectAllButton.setFocus();
-			return true;
-		}
-
-		public boolean performDeselectAll() throws InvocationTargetException {
-			validatorList.setAllChecked(false);
-			pagePreferences.setEnabledValidators(ValidationConfiguration.convertToArray(validatorList.getCheckedElements()));
-			updateWidgets();
-			deselectAllButton.setFocus();
-			return true;
-		}
-
-		protected int checkInteger() throws InvocationTargetException {
-			ProjectConfiguration pc = ConfigurationManager.getManager().getProjectConfiguration(getProject());
-			String text = maxValProblemsField.getText();
-			if (text == null) {
-				setErrorMessage(ResourceHandler.getExternalizedMessage(ResourceConstants.PROP_ERROR_INT));
-				return pc.getMaximumNumberOfMessages();
-			}
-			try {
-				Integer tempInt = new Integer(text.trim());
-
-				// no exception? It's an int, then.
-				if (tempInt.intValue() <= 0) {
-					setErrorMessage(ResourceHandler.getExternalizedMessage(ResourceConstants.PROP_ERROR_INT));
-					return pc.getMaximumNumberOfMessages();
-				}
-				setErrorMessage(null);
-				return Integer.valueOf(maxValProblemsField.getText().trim()).intValue();
-			} catch (NumberFormatException exc) {
-				setErrorMessage(ResourceHandler.getExternalizedMessage(ResourceConstants.PROP_ERROR_INT));
-				return pc.getMaximumNumberOfMessages();
-			}
-
-		}
-
-		void updateWidgets() throws InvocationTargetException {
-			// Since the setting of the "override" button enables/disables the other widgets on the
-			// page,
-			// update the enabled state of the other widgets from the "override" button.
-			boolean overridePreferences = canOverride && pagePreferences.doesProjectOverride();
-
-			overrideGlobalButton.setEnabled(canOverride);
-			overrideGlobalButton.setSelection(overridePreferences);
-
-			validatorList.getTable().setEnabled(overridePreferences);
-			validatorList.setAllGrayed(!overridePreferences);
-
-			selectAllButton.setEnabled(overridePreferences); // since help messsage isn't
-			// context-sensitive, it's set in the
-			// createPage method
-			deselectAllButton.setEnabled(overridePreferences);
-
-			maxValProblemsField.setEnabled(overridePreferences);
-			maxValProblemsField.setText(String.valueOf(pagePreferences.getMaximumNumberOfMessages()));
-
-			updateTable();
-
-			// Never check if builder is configured because if it isn't, the user needs to be able
-			// to add the builder via the instructions on the F1 infopops.
-			// In the case when the builder isn't configured, show the checkbox as enabled but
-			// cleared
-			// The only time that these two checkboxes are disabled is when no validators are
-			// enabled in the list.
-			boolean valEnabled = (pagePreferences.numberOfEnabledValidators() > 0);
-			valWhenBuildButton.setEnabled(overridePreferences && valEnabled);
-			valWhenBuildButton.setSelection(pagePreferences.isBuildValidate() && valEnabled && isBuilderConfigured);
-
-			boolean incValEnabled = (pagePreferences.numberOfEnabledIncrementalValidators() > 0);
-			autoButton.setEnabled(overridePreferences && isAutoBuildEnabled && incValEnabled);
-			autoButton.setSelection(pagePreferences.isAutoValidate() && incValEnabled && isAutoBuildEnabled && isBuilderConfigured);
-
-			updateHelp();
-		}
-
-		protected void updateHelp() throws InvocationTargetException {
-			// Whenever a widget is disabled, it cannot get focus.
-			// Since it can't have focus, its context-sensitive F1 help can't come up.
-			// From experimentation, I know that the composite parent of the widget
-			// can't have focus either. So, fudge the focus by making the table the widget
-			// surrogate so that the F1 help can be shown, with its instructions on how to
-			// enable the disabled widget. The table never has F1 help associated with it other
-			// than the page F1, so this fudge doesn't remove any context-sensitive help
-			// from the table widget.
-
-			if (autoButton.getEnabled()) {
-				// set the table's help back to what it was
-				PlatformUI.getWorkbench().getHelpSystem().setHelp(validatorList.getTable(), ContextIds.VALIDATION_PROPERTIES_PAGE);
-				PlatformUI.getWorkbench().getHelpSystem().setHelp(autoButton, ContextIds.VALIDATION_PROPERTIES_PAGE_AUTO_ENABLED);
-			} else {
-				// The order of the following if statement is important!
-				// If the user cannot enable automatic validation on the project, then the user
-				// should not be told, for example, to turn auto-build on. Let the user know that
-				// no matter what they do they cannot run auto-validate on the project. IF the
-				// project
-				// supports auto-validate, THEN check for the items which the user can change.
-				validatorList.getTable().setFocus();
-				if (pagePreferences.numberOfIncrementalValidators() == 0) {
-					PlatformUI.getWorkbench().getHelpSystem().setHelp(validatorList.getTable(), ContextIds.VALIDATION_PROPERTIES_PAGE_DISABLED_AUTO_NOINCVALCONFIG);
-				} else if (!ValidatorManager.getManager().isGlobalAutoBuildEnabled()) {
-					PlatformUI.getWorkbench().getHelpSystem().setHelp(validatorList.getTable(), ContextIds.VALIDATION_PROPERTIES_PAGE_DISABLED_AUTO_AUTOBUILD);
-				} else {
-					// Incremental validators configured but not selected
-					PlatformUI.getWorkbench().getHelpSystem().setHelp(validatorList.getTable(), ContextIds.VALIDATION_PROPERTIES_PAGE_DISABLED_AUTO_NOINCVALSELECTED);
-				}
-			}
-
-			// if autoButton AND build button are disabled, show the build button's "to enable" text
-			if (valWhenBuildButton.getEnabled()) {
-				// Do NOT set the table's help back to what it was.
-				// Only if auto-validate is enabled should the page go back.
-				PlatformUI.getWorkbench().getHelpSystem().setHelp(valWhenBuildButton, ContextIds.VALIDATION_PROPERTIES_PAGE_REBUILD_ENABLED);
-			} else {
-				//				page.getParent().setFocus();
-				validatorList.getTable().setFocus();
-				PlatformUI.getWorkbench().getHelpSystem().setHelp(validatorList.getTable(), ContextIds.VALIDATION_PROPERTIES_PAGE_DISABLED_BUILD_NOVALSELECTED);
-			}
-
-			// if the override button is disabled, show its "to enable" text.
-			if (overrideGlobalButton.getEnabled()) {
-				// Do NOT set the table's help back to what it was.
-				// Only if auto-validate is enabled should the page go back.
-				boolean doesProjectSupportBuildValidation = ValidatorManager.doesProjectSupportBuildValidation(getProject());
-				GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
-				boolean isPrefAuto = gp.isAutoValidate();
-				boolean isPrefManual = gp.isBuildValidate();
-				if (doesProjectSupportBuildValidation) {
-					// Project supports build validation, so it doesn't matter what the preferences
-					// are
-					PlatformUI.getWorkbench().getHelpSystem().setHelp(overrideGlobalButton, ContextIds.VALIDATION_PROPERTIES_PAGE_OVERRIDE_ENABLED);
-				} else if (!doesProjectSupportBuildValidation && (isPrefAuto && isPrefManual)) {
-					// Project doesn't support build validation, and the user prefers both auto and
-					// manual build validation
-					PlatformUI.getWorkbench().getHelpSystem().setHelp(overrideGlobalButton, ContextIds.VALIDATION_PROPERTIES_PAGE_OVERRIDE_ENABLED_CANNOT_HONOUR_BOTH);
-				} else if (!doesProjectSupportBuildValidation && isPrefAuto) {
-					// Project doesn't support build validation, and the user prefers auto build
-					// validation
-					PlatformUI.getWorkbench().getHelpSystem().setHelp(overrideGlobalButton, ContextIds.VALIDATION_PROPERTIES_PAGE_OVERRIDE_ENABLED_CANNOT_HONOUR_AUTO);
-				} else if (!doesProjectSupportBuildValidation && isPrefManual) {
-					// Project doesn't support build validation, and the user prefers manual build
-					// validation
-					PlatformUI.getWorkbench().getHelpSystem().setHelp(overrideGlobalButton, ContextIds.VALIDATION_PROPERTIES_PAGE_OVERRIDE_ENABLED_CANNOT_HONOUR_MANUAL);
-				} else if (!doesProjectSupportBuildValidation && !isPrefAuto && !isPrefManual) {
-					// Project doesn't support build validation, but that doesn't matter because the
-					// user prefers no build validation.
-					PlatformUI.getWorkbench().getHelpSystem().setHelp(overrideGlobalButton, ContextIds.VALIDATION_PROPERTIES_PAGE_OVERRIDE_ENABLED);
-				}
-			} else {
-				validatorList.getTable().setFocus();
-				// Preference page doesn't allow projects to override
-				PlatformUI.getWorkbench().getHelpSystem().setHelp(validatorList.getTable(), ContextIds.VALIDATION_PROPERTIES_PAGE_DISABLED_OVERRIDE);
-			}
-		}
-
-		/*
-		 * Store the current values of the controls into the preference store.
-		 */
-		private void storeValues() throws InvocationTargetException {
-			pagePreferences.setDoesProjectOverride(overrideGlobalButton.getSelection());
-
-			if (pagePreferences.doesProjectOverride()) {
-				// project override = user's preference + does the global preference allow the
-				// project to override
-
-				// If the manual build button is disabled because no validators are selected in the
-				// task list, don't overwrite the user's preference.
-				if (valWhenBuildButton.isEnabled()) {
-					pagePreferences.setBuildValidate(valWhenBuildButton.getSelection());
-				}
-
-				// If the auto build button is disabled because no validators are selected in the
-				// task list, or because auto-build is disabled, don't overwrite the user's
-				// preference.
-				if (autoButton.isEnabled()) {
-					pagePreferences.setAutoValidate(autoButton.getSelection());
-				}
-
-				pagePreferences.setMaximumNumberOfMessages(checkInteger());
-				pagePreferences.setEnabledValidators(ValidationConfiguration.convertToArray(validatorList.getCheckedElements()));
-			} else {
-				pagePreferences.resetToDefault(); // If the project can't or doesn't override,
-				// update its values to match the global
-				// preference values.
-			}
-
-			pagePreferences.passivate();
-		}
-
-		/**
-		 * Reads the list of validators, enables the validators which are selected, disables the
-		 * validators which are not selected, and if the auto-validate checkbox is chosen, performs
-		 * a full validation.
-		 */
-		public boolean performOk() throws InvocationTargetException {
-			// addBuilder MUST be called before storeValues
-			// addBuilder adds a builder to the project, and that changes the project description.
-			// Changing a project's description triggers the validation framework's "natureChange"
-			// migration, and a nature change requires that the list of validators be recalculated.
-			// If the builder is added after the values are stored, the stored values are
-			// overwritten.
-			addBuilder();
-
-			// If this method is being called because an APPLY was hit instead of an OK,
-			// recalculate the "can build be enabled" status because the builder may have
-			// been added in the addBuilder() call above.
-			// Also recalculate the values that depend on the isBuilderConfigured value.
-			isBuilderConfigured = ValidatorManager.doesProjectSupportBuildValidation(getProject());
-
-			// Persist the values.
-			storeValues();
-
-			if (autoButton.getSelection()) {
-				int enabledIncrementalValidators = pagePreferences.numberOfEnabledIncrementalValidators();
-				int enabledValidators = pagePreferences.numberOfEnabledValidators();
-				if (enabledValidators != enabledIncrementalValidators) {
-					// Then some of the enabled validators are not incremental
-					int iIconType = org.eclipse.swt.SWT.ICON_INFORMATION;
-					Display display = Display.getCurrent();
-					Shell shell = (display == null) ? null : display.getActiveShell();
-					MessageBox messageBox = new MessageBox(shell, org.eclipse.swt.SWT.OK | iIconType);
-					messageBox.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_MSSGBOX_TITLE_NONINC));
-
-					ValidatorMetaData[] vmds = pagePreferences.getEnabledValidators();
-					StringBuffer buffer = new StringBuffer(NEWLINE_AND_TAB);
-					for (int i = 0; i < vmds.length; i++) {
-						ValidatorMetaData vmd = vmds[i];
-
-						if (!vmd.isIncremental()) {
-							buffer.append(vmd.getValidatorDisplayName());
-							buffer.append(NEWLINE_AND_TAB);
-						}
-					}
-					messageBox.setMessage(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_AUTO_ON_NONINC, new String[]{buffer.toString()}));
-					messageBox.open();
-				}
-			}
-
-			if (pagePreferences.hasEnabledValidatorsChanged(oldVmd, false) || ValidatorManager.getManager().isMessageLimitExceeded(getProject())) { // false
-				// means
-				// that
-				// the
-				// preference
-				// "allow"
-				// value
-				// hasn't
-				// changed
-				ValidatorManager.getManager().updateTaskList(getProject()); // Do not remove the
-				// exceeded message;
-				// only
-				// ValidationOperation
-				// should do that
-				// because it's about to
-				// run validation. If
-				// the limit is
-				// increased, messages
-				// may still be missing,
-				// so don't remove the
-				// "messages may be
-				// missing" message.
-			}
-
-			return true;
-		}
-
-		/**
-		 * If the current project doesn't have the validation builder configured on it, add the
-		 * builder. Otherwise return without doing anything.
-		 */
-		private void addBuilder() {
-			if (overrideGlobalButton.getSelection()) { // do not add the builder unless the user
-				// overrides the preferences
-				if (autoButton.getSelection() || valWhenBuildButton.getSelection()) {
-					ValidatorManager.addProjectBuildValidationSupport(getProject());
-				}
-			}
-		}
-
-		public Composite getControl() {
-			return page;
-		}
-
-		public void dispose() {
-			maxValProblemsField.dispose();
-			maxValProblemsFieldLabel.dispose();
-			selectAllButton.dispose();
-			deselectAllButton.dispose();
-			autoButton.dispose();
-			valWhenBuildButton.dispose();
-			validatorList.getTable().dispose();
-			messageLabel.dispose();
-			//			layout.dispose();
-			//			data.dispose();
-			emptyRowPlaceholder.dispose();
-			overrideGlobalButton.dispose();
-			page.dispose();
-		}
-	}
-
-	/**
-	 * ValidationPreferencePage constructor comment.
-	 */
-	public ValidationPropertiesPage() {
-		// Some of the initialization is done in the "initialize" method, which is
-		// called by the "getPageType" method, because the current project must
-		// be known in order to initialize those fields.
-	}
-
-	/**
-	 * Given a parent (the Properties guide), create the Validators page to be added to it.
-	 */
-	protected Control createContents(Composite parent) {
-		IProject project = getProject();
-
-		if ((project == null) || !project.isOpen()) {
-			_pageImpl = new InvalidPage(parent);
-		} else {
-			try {
-				if (ConfigurationManager.getManager().getProjectConfiguration(project).numberOfValidators() == 0) {
-					_pageImpl = new NoValidatorsPage(parent);
-				} else {
-					_pageImpl = new ValidatorListPage(parent);
-				}
-			} catch (InvocationTargetException exc) {
-				_pageImpl = new InvalidPage(parent);
-				displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-			} catch (Throwable exc) {
-				_pageImpl = new InvalidPage(parent);
-				displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-			}
-		}
-
-		return _pageImpl.getControl();
-	}
-
-	/**
-	 * Since the pages are inner classes of a child PreferencePage, not a PreferencePage itself,
-	 * DialogPage's automatic disposal of its children's widgets cannot be used. Instead, dispose of
-	 * each inner class' widgets explicitly.
-	 */
-	public void dispose() {
-		super.dispose();
-		try {
-			_pageImpl.dispose();
-		} catch (Throwable exc) {
-			logError(exc);
-		}
-	}
-
-	/**
-	 * Returns the highlighted item in the workbench.
-	 */
-	public IProject getProject() {
-		Object element = getElement();
-
-		if (element == null) {
-			return null;
-		}
-
-		if (element instanceof IProject) {
-			return (IProject) element;
-		}
-
-		return null;
-	}
-
-	protected void noDefaultAndApplyButton() {
-		super.noDefaultAndApplyButton();
-	}
-
-	/**
-	 * Performs special processing when this page's Defaults button has been pressed.
-	 * <p>
-	 * This is a framework hook method for sublcasses to do special things when the Defaults button
-	 * has been pressed. Subclasses may override, but should call <code>super.performDefaults</code>.
-	 * </p>
-	 */
-	protected void performDefaults() {
-		super.performDefaults();
-		try {
-			_pageImpl.performDefaults();
-		} catch (InvocationTargetException exc) {
-			displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-		} catch (Throwable exc) {
-			displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-		}
-	}
-
-	/**
-	 * When the user presses the "OK" or "Apply" button on the Properties Guide/Properties Page,
-	 * respectively, some processing is performed by this PropertyPage. If the page is found, and
-	 * completes successfully, true is returned. Otherwise, false is returned, and the guide doesn't
-	 * finish.
-	 */
-	public boolean performOk() {
-		try {
-			return _pageImpl.performOk();
-		} catch (InvocationTargetException exc) {
-			displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-			return false;
-		} catch (Throwable exc) {
-			displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-			return false;
-		}
-	}
-
-	void logError(Throwable exc) {
-		Logger logger = WTPUIPlugin.getLogger();
-		if (logger.isLoggingLevel(Level.SEVERE)) {
-			LogEntry entry = ValidationUIPlugin.getLogEntry();
-			entry.setSourceIdentifier("ValidationPropertiesPage.displayAndLogError"); //$NON-NLS-1$
-			entry.setMessageTypeIdentifier(ResourceConstants.VBF_EXC_INTERNAL_PAGE);
-			entry.setTargetException(exc);
-			logger.write(Level.SEVERE, entry);
-
-			if (exc instanceof InvocationTargetException) {
-				if (((InvocationTargetException) exc).getTargetException() != null) {
-					entry.setTargetException(((InvocationTargetException) exc).getTargetException());
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-	}
-
-	void displayAndLogError(String title, String message, Throwable exc) {
-		logError(exc);
-		displayMessage(title, message, org.eclipse.swt.SWT.ICON_ERROR);
-	}
-
-	private void displayMessage(String title, String message, int iIconType) {
-		MessageBox messageBox = new MessageBox(getShell(), org.eclipse.swt.SWT.OK | iIconType | org.eclipse.swt.SWT.APPLICATION_MODAL);
-		messageBox.setMessage(message);
-		messageBox.setText(title);
-		messageBox.open();
-	}
-
-	/**
-	 * @see org.eclipse.jface.preference.PreferencePage#getDefaultsButton()
-	 */
-	protected Button getDefaultsButton() {
-		return super.getDefaultsButton();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationUIConstants.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationUIConstants.java
deleted file mode 100644
index b06484b..0000000
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationUIConstants.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.ui;
-
-
-/**
- * @deprecated For use by the validation framework only.
- */
-public interface ValidationUIConstants extends org.eclipse.wst.validation.internal.ui.ResourceConstants {
-	//Default
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/plugin/RunnableWithProgressWrapper.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/plugin/RunnableWithProgressWrapper.java
deleted file mode 100644
index cf32408..0000000
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/plugin/RunnableWithProgressWrapper.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.ui.plugin;
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.wst.common.frameworks.internal.operations.IHeadlessRunnableWithProgress;
-import org.eclipse.wst.validation.internal.operations.ValidationOperation;
-
-
-/**
- * This is a wrapper for an IWorkspaceRunnable to the IRunnableWithProgress. This class needs to be
- * used when running the operation from a IRunnableContext.
- * 
- * @see IRunnableContext
- * @see ValidationUIPlugin#getRunnableWithProgress Creation date: (5/8/2001 1:28:45 PM)
- * @author: Administrator
- */
-public class RunnableWithProgressWrapper implements IRunnableWithProgress {
-	private IHeadlessRunnableWithProgress headlessRunnable = null;
-	private IWorkspaceRunnable workspaceRunnable = null;
-	private ValidationOperation validationOperation = null;
-
-	/**
-	 * @deprecated Will be removed in Milestone 3. Use
-	 *             RunnableWithProgressWrapper(IWorkspaceRunnable)
-	 */
-	public RunnableWithProgressWrapper(IHeadlessRunnableWithProgress aHeadlessRunnableWithProgress) {
-		setHeadlessRunnable(aHeadlessRunnableWithProgress);
-	}
-
-	public RunnableWithProgressWrapper(IWorkspaceRunnable aHeadlessRunnableWithProgress) {
-		setWorkspaceRunnable(aHeadlessRunnableWithProgress);
-	}
-
-	public RunnableWithProgressWrapper(ValidationOperation op) {
-		setValidationOperation(op);
-	}
-
-	/**
-	 * @deprecated Will be removed in Milestone 3. Use getWorkspaceRunnable()
-	 */
-	protected IHeadlessRunnableWithProgress getHeadlessRunnable() {
-		return headlessRunnable;
-	}
-
-	protected IWorkspaceRunnable getWorkspaceRunnable() {
-		return workspaceRunnable;
-	}
-
-	/**
-	 * @see IRunnableWithProgress
-	 */
-	public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-		try {
-			if (getHeadlessRunnable() != null) {
-				getHeadlessRunnable().run(monitor);
-			} else {
-				IWorkspaceRunnable runnable = (getWorkspaceRunnable() == null) ? validationOperation : getWorkspaceRunnable();
-				if (runnable == null) {
-					return;
-				}
-				ResourcesPlugin.getWorkspace().run(runnable, monitor);
-			}
-		} catch (CoreException exc) {
-			throw new InvocationTargetException(exc);
-		}
-	}
-
-	/**
-	 * @deprecated Will be removed in Milestone 3. Use setWorkspaceRunnable(IWorkspaceRunnable)
-	 */
-	protected void setHeadlessRunnable(IHeadlessRunnableWithProgress newHeadlessRunnable) {
-		headlessRunnable = newHeadlessRunnable;
-	}
-
-	protected void setWorkspaceRunnable(IWorkspaceRunnable newWorkspaceRunnable) {
-		workspaceRunnable = newWorkspaceRunnable;
-	}
-
-	protected void setValidationOperation(ValidationOperation op) {
-		validationOperation = op;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/plugin/ValidationUIPlugin.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/plugin/ValidationUIPlugin.java
deleted file mode 100644
index f4121fe..0000000
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/plugin/ValidationUIPlugin.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others. 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
-package org.eclipse.wst.validation.internal.ui.plugin;
-
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin;
-import org.eclipse.wst.validation.internal.operations.ValidationOperation;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-import org.osgi.framework.BundleContext;
-
-
-
-public class ValidationUIPlugin extends WTPUIPlugin {
-	private static ValidationUIPlugin _plugin = null;
-
-	public final static String VALIDATION_PROP_FILE_NAME = "validate_ui"; //$NON-NLS-1$
-	public static final String VALIDATION_PLUGIN_ID = "org.eclipse.wst.validation.ui"; //$NON-NLS-1$
-
-	public ValidationUIPlugin() {
-		super();
-		if (_plugin == null) {
-			_plugin = this;
-		}
-	}
-
-	public static String getBundleName() {
-		return VALIDATION_PROP_FILE_NAME;
-	}
-
-	public static LogEntry getLogEntry() {
-		return ValidationPlugin.getLogEntry();
-	}
-
-
-	public static ValidationUIPlugin getPlugin() {
-		return _plugin;
-	}
-
-	/**
-	 * Returns the translated String found with the given key.
-	 * 
-	 * @param key
-	 *            java.lang.String
-	 * @return java.lang.String
-	 */
-	public static String getResourceString(String key) {
-		try {
-			return Platform.getResourceString(Platform.getBundle(VALIDATION_PLUGIN_ID), key);
-		} catch (Exception e) {
-			e.printStackTrace();
-			Logger logger = WTPUIPlugin.getLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = getLogEntry();
-				entry.setSourceID("ValidationUIPlugin.getResourceString(String)"); //$NON-NLS-1$
-				entry.setText("Missing resource for key" + key); //$NON-NLS-1$
-				logger.write(Level.FINE, entry);
-			}
-
-			return key;
-		}
-	}
-
-	/**
-	 * This method should be called whenever you need to run one of our headless operations in the
-	 * UI.
-	 */
-	public static IRunnableWithProgress getRunnableWithProgress(IWorkspaceRunnable aWorkspaceRunnable) {
-		return new RunnableWithProgressWrapper(aWorkspaceRunnable);
-	}
-
-//	public static IRunnableWithProgress getRunnableWithProgress(IHeadlessRunnableWithProgress aHeadlessRunnableWithProgress) {
-//		return new RunnableWithProgressWrapper(aHeadlessRunnableWithProgress);
-//	}
-
-	// Need a third, ValidationOperation version of this method, because ValidationOperation
-	// is both an IWorkspaceRunnable and an IHeadlessRunnableWithProgress. This method will
-	// exist only while IHeadlessRunnableWithProgress exists.
-	public static IRunnableWithProgress getRunnableWithProgress(ValidationOperation op) {
-		return new RunnableWithProgressWrapper(op);
-	}
-
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-		//	org.eclipse.wst.validation.internal.operations.ValidatorManager.setResourceUtilClass(org.eclipse.wst.validation.internal.operations.ui.UIResourceUtil.class);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/.classpath b/plugins/org.eclipse.wst.validation/.classpath
deleted file mode 100644
index f8323da..0000000
--- a/plugins/org.eclipse.wst.validation/.classpath
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="validate"/>
-	<classpathentry kind="src" path="validate_core"/>
-	<classpathentry kind="src" path="property_files"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/plugins/org.eclipse.wst.validation/.cvsignore b/plugins/org.eclipse.wst.validation/.cvsignore
deleted file mode 100644
index 874e992..0000000
--- a/plugins/org.eclipse.wst.validation/.cvsignore
+++ /dev/null
@@ -1,10 +0,0 @@
-bin
-temp.folder
-validate.jar
-build.xml
-common.jar
-validatesrc.zip
-commonsrc.zip
-src.zip
-org.eclipse.wst.validation_1.0.0.zip
-@dot
diff --git a/plugins/org.eclipse.wst.validation/.options b/plugins/org.eclipse.wst.validation/.options
deleted file mode 100644
index 26565de..0000000
--- a/plugins/org.eclipse.wst.validation/.options
+++ /dev/null
@@ -1,2 +0,0 @@
-com.ibm.etools.validation/debug=true
-com.ibm.etools.validation/tracefilter=
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/.project b/plugins/org.eclipse.wst.validation/.project
deleted file mode 100644
index 846dae7..0000000
--- a/plugins/org.eclipse.wst.validation/.project
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.wst.validation</name>
-	<comment></comment>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF
deleted file mode 100644
index 94faa86..0000000
--- a/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,20 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Validation Framework
-Bundle-SymbolicName: org.eclipse.wst.validation; singleton:=true
-Bundle-Version: 1.0.0
-Bundle-Activator: org.eclipse.wst.validation.internal.plugin.ValidationPlugin
-Bundle-Vendor: Eclipse.org
-Bundle-Localization: plugin
-Export-Package: .,
- org.eclipse.wst.validation.internal,
- org.eclipse.wst.validation.internal.core,
- org.eclipse.wst.validation.internal.operations,
- org.eclipse.wst.validation.internal.plugin,
- org.eclipse.wst.validation.internal.provisional,
- org.eclipse.wst.validation.internal.provisional.core
-Require-Bundle: org.eclipse.core.resources,
- org.eclipse.wst.common.frameworks,
- org.eclipse.jem.util,
- org.eclipse.core.runtime
-Eclipse-AutoStart: true
diff --git a/plugins/org.eclipse.wst.validation/about.html b/plugins/org.eclipse.wst.validation/about.html
deleted file mode 100644
index 6f6b96c..0000000
--- a/plugins/org.eclipse.wst.validation/about.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/build.properties b/plugins/org.eclipse.wst.validation/build.properties
deleted file mode 100644
index 8a3225d..0000000
--- a/plugins/org.eclipse.wst.validation/build.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-###############################################################################
-# Copyright (c) 2001, 2004 IBM Corporation and others.
-# 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:
-# IBM Corporation - initial API and implementation
-###############################################################################
-bin.includes = plugin.xml,\
-               plugin.properties,\
-               META-INF/,\
-               about.html,\
-               .
-jars.compile.order = .
-src.includes = component.xml,\
-               xsds/
-output.. = bin/
-source.. = validate_core/,\
-           property_files/,\
-           validate/
diff --git a/plugins/org.eclipse.wst.validation/component.xml b/plugins/org.eclipse.wst.validation/component.xml
deleted file mode 100644
index 21011d7..0000000
--- a/plugins/org.eclipse.wst.validation/component.xml
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><component  xmlns="http://eclipse.org/wtp/releng/tools/component-model" name="org.eclipse.wst.validation"><component-depends unrestricted="true"></component-depends><plugin id="org.eclipse.wst.validation" fragment="false"/><plugin id="org.eclipse.wst.validation.ui" fragment="false"/><package name="org.eclipse.wst.validation.core"></package><package name="org.eclipse.wst.validation.plugin"></package></component>
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/plugin.properties b/plugins/org.eclipse.wst.validation/plugin.properties
deleted file mode 100644
index 7ca7dd6..0000000
--- a/plugins/org.eclipse.wst.validation/plugin.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2001, 2004 IBM Corporation and others.
-# 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:
-# IBM Corporation - initial API and implementation
-###############################################################################
-#
-# Version 1.3
-#
-VALIDATION_BUILDER_NAME=Validation
-VALIDATION_PROBLEMMARKER_NAME=Validation Message
-VALIDATION_PROJECTMARKER_NAME=Enabled Validators
-VALIDATION_PREFERENCEMARKER_NAME=Validation Preferences
-Validator=Validator
-ReferencialFileValidator=ReferencialFileValidator
-validationSelectionHandler=validationSelectionHandler
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/plugin.xml b/plugins/org.eclipse.wst.validation/plugin.xml
deleted file mode 100644
index c861ce1..0000000
--- a/plugins/org.eclipse.wst.validation/plugin.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-
-    
-<!-- Validation extension points -->
-   <extension-point id="validator" name="%Validator" schema="xsds/validatorExtSchema.exsd"/>
-   <extension-point id="referencialFileValidator" name="%ReferencialFileValidator" schema="xsds/referencialFileExtSchema.exsd"/>
-   <extension-point id="validationSelectionHandler" name="%validationSelectionHandler" schema="xsds/validationSelectionHandler.exsd"/>
-   <extension-point id="validationHelper" name="validationHelper" schema="xsds/validationHelper.exsd"/>   
-   
-<!--============================-->
-<!-- Validation Contributions   -->
-<!--============================-->
-   <extension
-         id="validationbuilder"
-         name="%VALIDATION_BUILDER_NAME"
-         point="org.eclipse.core.resources.builders">
-      <builder>
-         <run
-               class="org.eclipse.wst.validation.internal.operations.ValidationBuilder">
-         </run>
-      </builder>
-   </extension>
-<!-- Problem markers must be a subtype of problemmarker to be displayed in the task view -->
-   <extension
-         id="problemmarker"
-         name="%VALIDATION_PROBLEMMARKER_NAME"
-         point="org.eclipse.core.resources.markers">
-      <super
-            type="org.eclipse.core.resources.problemmarker">
-      </super>
-      <persistent
-            value="true">
-      </persistent>
-      <attribute
-            name="owner">
-      </attribute>
-      <attribute
-            name="validationSeverity">
-      </attribute>
-      <attribute
-            name="targetObject">
-      </attribute>
-      <attribute
-            name="groupName">
-      </attribute>
-      <attribute
-            name="messageId">
-      </attribute>
-   </extension>
-<!-- Don't want to display this marker in the task view -->
-   <extension
-         id="projectmarker"
-         name="%VALIDATION_PROJECTMARKER_NAME"
-         point="org.eclipse.core.resources.markers">
-      <super
-            type="org.eclipse.core.resources.textmarker">
-      </super>
-      <persistent
-            value="true">
-      </persistent>
-      <attribute
-            name="enabledValidatorList">
-      </attribute>
-      <attribute
-            name="autoValidate">
-      </attribute>
-      <attribute
-            name="runWhenBuild">
-      </attribute>
-      <attribute
-            name="maxNumMessages">
-      </attribute>
-      <attribute
-            name="overrideGlobalPreferences">
-      </attribute>
-      <attribute
-            name="version">
-      </attribute>
-   </extension>
-<!-- Don't want to display this marker in the task view -->
-   <extension
-         id="preferencemarker"
-         name="%VALIDATION_PREFERENCEMARKER_NAME"
-         point="org.eclipse.core.resources.markers">
-      <super
-            type="org.eclipse.core.resources.textmarker">
-      </super>
-      <persistent
-            value="true">
-      </persistent>
-      <attribute
-            name="enabledValidatorList">
-      </attribute>
-      <attribute
-            name="autoValidate">
-      </attribute>
-      <attribute
-            name="runWhenBuild">
-      </attribute>
-      <attribute
-            name="maxNumMessages">
-      </attribute>
-      <attribute
-            name="projectsCanOverride">
-      </attribute>
-      <attribute
-            name="version">
-      </attribute>
-   </extension>
-
-</plugin>
diff --git a/plugins/org.eclipse.wst.validation/prepareforpii.xml b/plugins/org.eclipse.wst.validation/prepareforpii.xml
deleted file mode 100644
index 1aad5fe..0000000
--- a/plugins/org.eclipse.wst.validation/prepareforpii.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<project name="PrepareForPII" default="main" basedir=".">
-		
-	<!-- Setup temp variables -->
-	<target name="init">
-		<property name="nlsDir" value="d:/NLS/Corona/0526"/>
-		<property name="plugin" value="com.ibm.etools.validation"/>
-		<property name="plugindir" value="d:/workspaceCorona/${plugin}"/>
-		<property name="outputDir" value="${nlsDir}/${plugin}"/>
-		
-	
-	</target>
-
-	<!-- Create the destination dir -->
-	<target name="nlsDir" depends="init">
-		<mkdir dir="${nlsDir}"/>
-	</target>
-	
-	<!-- Create the destination dir -->
-	<target name="plugindir" depends="nlsDir">
-		<delete dir="${outputDir}"/>
-		<mkdir dir="${outputDir}"/>
-	</target>
-
-	<!-- Move the files to the correct locations in the workspace. -->
-	<target name="main" depends="plugindir">
-	
-		<messageIdGen folderPath = "${plugindir}" componentId = "E" />
-		
-		<copy todir = "${outputDir}/property_files" >
-			 <fileset dir="${plugindir}/property_files">
-           	  <include name="**/*.properties"/>
-  			 </fileset>
-  		</copy>
-  		
-  		<copy file="${plugindir}/plugin.properties" todir="${outputDir}"/>
-  		
-	</target>
-</project>
diff --git a/plugins/org.eclipse.wst.validation/property_files/validate_base.properties b/plugins/org.eclipse.wst.validation/property_files/validate_base.properties
deleted file mode 100644
index a97ae38..0000000
--- a/plugins/org.eclipse.wst.validation/property_files/validate_base.properties
+++ /dev/null
@@ -1,139 +0,0 @@
-###############################################################################
-# Copyright (c) 2001, 2004 IBM Corporation and others.
-# 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:
-# IBM Corporation - initial API and implementation
-###############################################################################
-# To avoid name collisions, each extension point should preface their property names with an identifier.
-#
-#     *************************************************************************
-#     * Code oriented instructions:
-#     *
-#     * In the string, you may see the following special sequences:
-#     * a) {n}  where n is a number. These are replaceable parameters.
-#     * b) ''  In .properties files, in order to see one apostrophe (') in the final
-#     *    string, sometimes two apostrophes must be entered in the string. In the translated
-#     *    string, if there is at least one {n} in the string, then to show one apostrophe
-#     *    to the user, put two apostrophes in the string. If there are no {n} in the string,
-#     *    then put one apostrophe.
-#     *    For example, say that you want the user to read "George's file". 
-#     *        GEORGE=George's file was on the desk.
-#     *        GEORGE2=George''s file and {0} were on the desk.
-#     *    GEORGE uses one apostrophe because there are no {n} and GEORGE2
-#     *    uses two apostrophes because there is a {n}.
-#     * c) '' text '' where text can be any word(s). The text between the double
-#     *    apostrophes should not be translated. 
-#     * d) <text> where text can be any word(s). The text between the angle
-#     *    brackets should NOT be translated.
-#     * e) "text" where text can be any word(s). The text between the quotation 
-#     *    marks should NOT be translated.
-#     *    
-#     *************************************************************************
-#     * Other instructions
-#     * a) Do not translate any text that is on a line which begins with a comment 
-#     *    symbol (#).
-#     * b) Do not translate these words: 
-#     *        schema, EJB, RDB, JAR, RMI, BMP, CMP, OOSQL
-#     * c) Please return the .properties files using the same directory structure.
-#     *    This is necessary because two of the files have the same name.
-#     *
-#     *************************************************************************
-# Any other comments to the translators are on lines which start like this:  # 2TC:
-#
-# Version 1.14
-#
-#
-# ID:
-#    VBF - Validation Builder Framework
-#       VBF_EXC=Exception or error text
-#       VBF_STATUS=Status message
-#       VBF_TASK=Task list message
-#
-
-# 
-# Begin Validation Builder Framework Strings
-#
-# IDs:
-#    VBF_EXC=Exception or error text
-#    VBF_STATUS=Status message
-#    VBF_TASK=Task list message
-#
-VBF_EXC_CANNOT_ADD_MARKER=IWAE0001E The marker cannot be added to resource {0} in the task list.
-VBF_EXC_CANNOT_REMOVE_MARKER=IWAE0002E The marker cannot be removed from resource {0} in the task list.
-
-VBF_EXC_HELPER_MISSING=IWAE0003E Unable to load {0} because it did not specify a <helper>. Each validator must identify the helper class that loads its MOF model.
-VBF_EXC_HELPER_CANNOTLOAD=IWAE0004E Unable to load {0} because its <helper>, {1}, could not be loaded. Ensure that the case-sensitive file name is spelled correctly.
-
-VBF_EXC_INTERNAL=IWAE0005E An internal error occurred during validation. Validation was being run on project {0} with validator {1}. The message thrown was {2}.
-
-# 2TC: In the following string, "type" is a noun
-VBF_EXC_INVALID_TYPE_FILTER=IWAE0006E Invalid type filter; {0} must be an instance of {1}.
-VBF_EXC_INVALID_RESOURCE=IWAE0007E Cannot add message "{0}" with target object "{1}" because no file, folder, or project can be found with which to associate the message.
-
-VBF_EXC_MISSING_VALIDATOR_EP=IWAE0008E The validator framework could not be started. The extension point named \"{0}\" could not be found. Save all log files and contact your IBM representative.
-VBF_EXC_MISSING_PROJECTNATURE_ID=IWAE0009E A projectNature must have an associated ID. Validation is ignoring this tag and continuing.
-
-VBF_EXC_RUNTIME=IWAE0010E Run-time exception {0} occurred during validation. The validator being run was {1} and the message thrown was {2}.
-
-VBF_EXC_SYNTAX_NULL_NAME=IWAE0011E Resource {0} cannot be added to file list because IHelper.getPortableName() returns null. This resource will not be validated by the validator named {1}.
-VBF_EXC_SYNTAX_NO_HELPER=IWAE0012E No <helper> element is specified in the plugin.xml file for validator {0}. Since the helper cannot be created, the validator will not be loaded.
-VBF_EXC_SYNTAX_NO_HELPER_CLASS=IWAE0013E No "class" attribute in the <helper> element is specified in the plugin.xml file for validator {0}. The helper cannot be created without the name of the class that implements it. Since the helper cannot be created, the validator will not be loaded.
-VBF_EXC_SYNTAX_NO_HELPER_THROWABLE=IWAE0014E The helper {0} cannot be created because a Throwable was caught.
-VBF_EXC_SYNTAX_NO_VAL_RUN=IWAE0015E Validator cannot be created because no <run> element is specified in the plugin.xml file for the validator named {0}. Cannot create a validator unless a <run> element exists that specifies the "class" attribute. The value of the "class" attribute should be the name of the class that implements the IWorkbenchHelper interface.
-VBF_EXC_SYNTAX_NO_VAL_CLASS=IWAE0016E Validator cannot be created because no "class" attribute is specified in the <run> element of the plugin.xml file for the validator named {0}. Cannot create a validator unless a <run> element exists that specifies the "class" attribute. The value of the "class" attribute should be the name of the class that implements the IWorkbenchHelper interface.
-VBF_EXC_SYNTAX_NO_VAL_THROWABLE=IWAE0017E Cannot create validator {0} because a Throwable was caught.
-VBF_EXC_SYNTAX_NO_VAL_NULL=IWAE0018E Validator class {0} could not be created. IConfigurationElement.createExecutableExtension(String) returned null.
-
-VBF_EXC_DISABLEV=IWAE0019E Cannot instantiate validator {0}. Disabling the validator; read the log for details.
-VBF_EXC_DISABLEH=IWAE0020E Cannot instantiate helper {0}. Disabling validator {1}; read the log for details.
-VBF_EXC_ORPHAN_IVALIDATOR=IWAE0021E Cannot locate meta-data for validator {0}.
-
-VBF_EXC_VALIDATORNAME_IS_NULL=IWAE0022E The plugin with ID {0} has been disabled because its getName() method returns null. The method must return a value.
-
-VBF_EXC_NULLCREATE=IWAE0023E Cannot create a validation configuration on a null resource.
-VBF_EXC_NULLSAVE=IWAE0024E Cannot save a validation configuration on a null resource.
-VBF_EXC_SAVE=IWAE0025E Could not save the validation configuration on resource {0}.
-VBF_EXC_NULLRETRIEVE=IWAE0026E Cannot retrieve the validation configuration because resource is null.
-VBF_EXC_RETRIEVE=IWAE0027E Could not retrieve the validation configuration for resource {0}.
-
-VBF_EXC_BADVMD=IWAE0028E ValidatorMetaData[] must not be null or empty.
-VBF_EXC_OPENPRJ=IWAE0029E Project {0} must be open.
-VBF_EXC_EXISTPRJ=IWAE0030E Project {0} must exist.
-VBF_EXC_BADPRJ=IWAE0031E Project {0} must be the project that contains the resources in the IResource[].
-VBF_EXC_MULTIPRJ=IWAE0032E All IResource instances in the IResource[] must be part of the same IProject instance. The resources come from the following projects: {0}.
-VBF_EXC_BADVAL=IWAE0033E Validator {0} must be configured on {1};
-
-VBF_STATUS_INITIALIZING=Initializing {0}.
-
-VBF_STATUS_VALIDATOR_CLEANUP=Performing cleanup on {0} before termination.
-
-VBF_STATUS_PROGRESSMONITOR_TITLE=Validating
-VBF_STATUS_NULL_DELTA=Last build state of {0} could not be retrieved. Performing a full validation.
-
-VBF_STATUS_VALIDATOR_TERMINATED=Validation of {0} using {1} was cancelled.
-
-VBF_STATUS_START_REMOVING_OLD_MESSAGES=Removing {0} messages on {1} has started...
-VBF_STATUS_FINISH_REMOVING_OLD_MESSAGES=Messages removed.
-
-VBF_STATUS_STARTING_VALIDATION=Validation of {0} by {1} has started...
-VBF_STATUS_ENDING_VALIDATION=Validation of {0} by {1} is complete. All known problems have been reported.
-VBF_STATUS_ENDING_VALIDATION_ABNORMALLY=Validation of {0} by {1} ended abnormally. The list of problems may be incomplete. Please check the information messages for the cause of the abnormal termination.
-
-VBF_STATUS_LOOKING=Looking for validation messages owned by uninstalled validators...
-VBF_STATUS_LOOKINGDONE=Looking for validation messages owned by uninstalled validators...done.
-VBF_STATUS_REMOVING=Removing validation messages owned by uninstalled validators...
-VBF_STATUS_REMOVINGDONE=Removing validation messages owned by uninstalled validators...done.
-
-# The following message will be deleted soon.
-VBF_TASK_WARN_MESSAGE_LIMIT_ABORT=IWAE0034W IWAD3000I: {1} terminated validation of {0} because the maximum number of messages were reported. Some messages may be missing.
-
-VBF_TASK_WARN_MESSAGE_LIMIT_VAL=IWAE0035W IWAD3000I: Some messages may be missing because the maximum number of messages has been reported. Increase the maximum number of messages and try again.
-
-#
-# End Validation Builder Framework Strings
-#
-
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ConfigurationConstants.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ConfigurationConstants.java
deleted file mode 100644
index 00d4b36..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ConfigurationConstants.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.QualifiedName;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-
-/**
- * Validation constants needed to implement the marker extension point and the user's preferences.
- * 
- * Only the validation framework should use this interface.
- */
-public interface ConfigurationConstants {
-	/* package */static final String ASYNC_SETTING = "runAsync"; //$NON-NLS-1$ // boolean (Use the global preferences or override)
-	/* package */static final String AUTO_SETTING = "autoValidate"; //$NON-NLS-1$ // boolean
-	/* package */static final String BUILD_SETTING = "runWhenBuild"; //$NON-NLS-1$ // boolean
-
-	// Defaults for the preference and project values
-	
-	/* package */static String CURRENT_VERSION = (String) ValidationPlugin.getPlugin().getBundle().getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION); //$NON-NLS-1$ // this is a constant, so it should be intern
-	/* package */static final boolean DEFAULT_ASYNC = true;
-	/* package */static final boolean DEFAULT_AUTO_SETTING = true;
-	/* package */static final boolean DEFAULT_BUILD_SETTING = true;
-	/* package */static ValidatorMetaData[] DEFAULT_ENABLED_VALIDATORS = ValidationRegistryReader.getReader().getValidatorMetaDataArrayEnabledByDefault(); //$NON-NLS-1$ // store a copy here so that we don't modify the original and don't create a copy every time we need this value
-	/* package */static final int DEFAULT_MAXNUMMESSAGES = 50;
-	public static final int DEPTH_INFINITE = IResource.DEPTH_INFINITE;
-	public static final int DEPTH_ZERO = IResource.DEPTH_ZERO;
-	/* package */static final String ELEMENT_SEPARATOR = ";"; //$NON-NLS-1$ // separates the name of one IValidator from the next in the list of enabled validators for a project or preference
-
-	// The following values must match the attributes in the preference marker as shown in
-	// plugin.xml
-	// Even though the plugin.xml values are not used to create new Preference or Project markers,
-	// maintaining one local name ensures that there's no confusion writing the migration code.
-	// These are the QualifiedNames used to persist the user's settings.
-	/* package */static final String ENABLED_VALIDATORS = "enabledValidatorList"; //$NON-NLS-1$ // String
-	public static final String J2EE_PLUGIN_ID = "org.eclipse.jst.j2ee"; //$NON-NLS-1$ // For 4.03, this is the plugin id that the validation constants were declared in.
-	/* package */static final String MAXNUMMESSAGES = "maxNumMessages"; //$NON-NLS-1$ // integer
-	public static final String PLUGIN_ID = ValidationPlugin.PLUGIN_ID;
-	/* package */static final String PREF_PROJECTS_CAN_OVERRIDE = "projectsCanOverride"; //$NON-NLS-1$ // boolean
-	// end validation message marker constants
-
-	// Preference and Project constants
-	/* package */static final String PREFERENCE_MARKER = PLUGIN_ID + ".preferencemarker"; //$NON-NLS-1$
-	/* package */static final String PRJ_MARKER = PLUGIN_ID + ".projectmarker"; //$NON-NLS-1$ // The extension which saves user validation preferences for a particular project (e.g. which validators run on the project)
-	/* package */static final String PRJ_MARKER_403 = J2EE_PLUGIN_ID + ".projectmarker"; //$NON-NLS-1$ // The extension which saves user validation preferences for a particular project (e.g. which validators run on the project)
-	/* package */static final String PRJ_OVERRIDEGLOBAL = "overrideGlobalPreferences"; //$NON-NLS-1$ // boolean (Use the global preferences or override)
-
-	/* package */static final QualifiedName USER_PREFERENCE = new QualifiedName(PLUGIN_ID, "ValidationConfiguration"); //$NON-NLS-1$ // ValidationConfiguration for the IResource
-
-	// Validation message marker constants
-	/* package */static final String VALIDATION_MARKER = PLUGIN_ID + ".problemmarker"; //$NON-NLS-1$ // The extension which is used to add validation markers to the task list
-	/* package */static final String VALIDATION_MARKER_GROUP = "groupName"; //$NON-NLS-1$ // For incremental validation, this field associates a message with a group, so that a subset of messages may be removed from a file.
-	/* package */static final String VALIDATION_MARKER_MESSAGEID = "messageId"; //$NON-NLS-1$ // Persist the message id of the message, not just the translated text.
-
-	// The following values must match the attributes in the validation message marker as shown in
-	// plugin.xml
-	/* package */static final String VALIDATION_MARKER_OWNER = "owner"; //$NON-NLS-1$ // The IValidator who owns the IMarker on the task list
-	/* package */static final String VALIDATION_MARKER_SEVERITY = "validationSeverity"; //$NON-NLS-1$ // one of the SeverityEnum values
-	/* package */static final String VALIDATION_MARKER_TARGETOBJECT = "targetObject"; //$NON-NLS-1$ // When more than one target object resolves to the same IResource, this field identifies which targetObject owns a particular message.
-	/* package */static final String VERSION = "version"; //$NON-NLS-1$
-
-	// WSAD versions which created markers of these types
-	/* package */static final String VERSION4_03 = "4.03"; //$NON-NLS-1$
-	/* package */static final String VERSION5_0 = "5.0"; //$NON-NLS-1$
-	/* package */static final String VERSION5_01 = "5.0.1"; //$NON-NLS-1$
-	// end preference and project defaults
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ConfigurationManager.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ConfigurationManager.java
deleted file mode 100644
index a5f7fc1..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ConfigurationManager.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-
-/**
- * Only the validation framework can use this class.
- */
-public final class ConfigurationManager implements ConfigurationConstants {
-	private static ConfigurationManager inst = null;
-
-	private ConfigurationManager() {
-		//Default constructor
-	}
-
-	public static ConfigurationManager getManager() {
-		if (inst == null) {
-			inst = new ConfigurationManager();
-		}
-		return inst;
-	}
-
-	/**
-	 * Given a validation marker, return the fully-qualified class name of the validator who owns
-	 * the message. If the validator cannot be found or if the marker is not a validation marker,
-	 * return null.
-	 */
-	public String getValidator(IMarker marker) {
-		if (marker == null) {
-			return null;
-		}
-
-		try {
-			if (!marker.getType().equals(VALIDATION_MARKER)) {
-				return null;
-			}
-
-			Object attrib = marker.getAttribute(VALIDATION_MARKER_OWNER);
-			if (attrib == null) {
-				// owner not set
-				return null;
-			}
-			return attrib.toString();
-		} catch (CoreException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("InternalPreferenceManager.getValidator(IMarker)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-			return null;
-		}
-	}
-
-	/**
-	 * Return true if the given marker is a validation marker. Otherwise return false.
-	 */
-	public boolean isValidationMarker(IMarker marker) {
-		if (marker == null) {
-			return false;
-		}
-
-		try {
-			return marker.getType().equals(VALIDATION_MARKER);
-		} catch (CoreException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("InternalPreferenceManager.isValidationMarker(IMarker)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-			return false;
-		}
-	}
-
-	/**
-	 * This method is for use by the TVT Validation plugin ONLY!!! No code should access the
-	 * validation markers in the list directly except for the validation framework and the TVT
-	 * Validation plugin.
-	 */
-	public void removeAllValidationMarkers(IProject project) {
-		if ((project == null) || (!project.isOpen())) {
-			return;
-		}
-
-		try {
-			project.deleteMarkers(VALIDATION_MARKER, false, DEPTH_INFINITE); // false means only
-			// consider VALIDATION_MARKER, not variants of VALIDATION_MARKER. 
-			//Since addTask only adds VALIDATION_MARKER, we don't need to consider its subtypes.
-		} catch (CoreException exc) {
-			// Couldn't retrieve the markers from the resource for some reason...
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("WorkbenchMonitor.removeAllValidationMarkers(IProject)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-	}
-
-	/**
-	 * This method returns the global preferences for the workspace.
-	 */
-	public GlobalConfiguration getGlobalConfiguration() throws InvocationTargetException {
-		IWorkspaceRoot root = ValidationConfiguration.getRoot();
-		GlobalConfiguration gp = null;
-		try {
-			gp = (GlobalConfiguration) root.getSessionProperty(USER_PREFERENCE);
-			if (gp == null) {
-				gp = new GlobalConfiguration(root);
-				gp.getVersion(); // initialize the configuration's version attribute
-				gp.load(); // initialize this instance from the stored values
-				gp.passivate(); // store this instance as a property on the IResource
-			}
-			return gp;
-		} catch (CoreException exc) {
-			throw new InvocationTargetException(exc, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_RETRIEVE, new String[]{root.getName()}));
-		}
-	}
-
-	public ProjectConfiguration getProjectConfiguration(IProject project) throws InvocationTargetException {
-		ProjectConfiguration prjp = null;
-		try {
-			prjp = (ProjectConfiguration) project.getSessionProperty(USER_PREFERENCE);
-			if (prjp == null || !prjp.getResource().exists()) {
-				prjp = new ProjectConfiguration(project);
-				prjp.getVersion(); // initialize the configuration's version attribute
-				prjp.load(); // initialize this instance from the stored values
-				prjp.passivate(); // store this instance as a property on the IResource
-			}
-			return prjp;
-		} catch (CoreException exc) {
-			throw new InvocationTargetException(exc, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_RETRIEVE, new String[]{project.getName()}));
-		}
-	}
-
-	public ProjectConfiguration getProjectConfigurationWithoutMigrate(IProject project) throws InvocationTargetException {
-		ProjectConfiguration prjp = null;
-		try {
-			prjp = (ProjectConfiguration) project.getSessionProperty(USER_PREFERENCE);
-			if (prjp == null || !prjp.getResource().exists()) {
-				prjp = new ProjectConfiguration(project);
-				prjp.getVersion(); // initialize the configuration's version attribute
-				prjp.load(); // initialize this instance from the stored values
-				prjp.passivate(); // store this instance as a property on the IResource
-			}
-			return prjp;
-		} catch (CoreException exc) {
-			throw new InvocationTargetException(exc, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_RETRIEVE, new String[]{project.getName()}));
-		}
-	}
-
-
-	/**
-	 * The nature of the project has changed; update the enabled validators on the project.
-	 */
-	public void resetProjectNature(IProject project) throws InvocationTargetException {
-		resetProjectNature(getProjectConfiguration(project));
-	}
-
-	/**
-	 * When a project has been created for the first time, its natures may not have been complete at
-	 * the time that this Preference was recreated. Call this method to recalculate the vmds.
-	 */
-	protected void resetProjectNature(ProjectConfiguration prjp) throws InvocationTargetException {
-		prjp.resetProjectNature();
-	}
-
-	public void closing(IProject project) {
-		try {
-			if (isMigrated(project)) {
-				ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-				prjp.store();
-			}
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("InternalPreferenceManager::closing(" + project.getName() + ")"); //$NON-NLS-1$ //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-	}
-
-	public void deleting(IProject project) {
-	}
-
-	public void opening(IProject project) {
-		// Do not load or migrate the project in this method; let the getConfiguration(IProject)
-		// method do that. Do not load the project before it's necessary.
-	}
-
-	/**
-	 * Return true if the global preferences are at the current level of metadata, false otherwise.
-	 */
-	public boolean isGlobalMigrated() throws InvocationTargetException {
-		IWorkspaceRoot root = ValidationConfiguration.getRoot();
-		if (root == null) {
-			return false;
-		}
-
-		try {
-			GlobalConfiguration gp = (GlobalConfiguration) root.getSessionProperty(USER_PREFERENCE);
-			if (gp != null) {
-				return gp.isVersionCurrent();
-			}
-
-			String serializedPrjp = root.getPersistentProperty(USER_PREFERENCE);
-			if (serializedPrjp != null) {
-				gp = new GlobalConfiguration(root);
-				gp.getVersion(); // initialize the configuration's version attribute
-				return gp.isVersionCurrent();
-			}
-		} catch (CoreException exc) {
-			throw new InvocationTargetException(exc, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_RETRIEVE, new String[]{root.getName()}));
-		}
-
-		return false;
-	}
-
-	/**
-	 * Return true if the given project has the current level of metadata, false otherwise.
-	 */
-	public boolean isMigrated(IProject project) throws InvocationTargetException {
-		if (project == null) {
-			return false;
-		}
-		try {
-			if (project.isAccessible()) {
-				ProjectConfiguration prjp = (ProjectConfiguration) project.getSessionProperty(USER_PREFERENCE);
-				if (prjp != null) {
-					return prjp.isVersionCurrent();
-				}
-				String serializedPrjp = project.getPersistentProperty(USER_PREFERENCE);
-				if (serializedPrjp != null) {
-					prjp = new ProjectConfiguration(project);
-					prjp.getVersion(); // initialize the configuration's
-					// version attribute
-					return prjp.isVersionCurrent();
-				}
-			}
-		} catch (CoreException exc) {
-			throw new InvocationTargetException(exc, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_RETRIEVE, new String[]{project.getName()}));
-		}
-		return false;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/EventManager.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/EventManager.java
deleted file mode 100644
index fa7a232..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/EventManager.java
+++ /dev/null
@@ -1,430 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IResourceDeltaVisitor;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jem.util.UIContextDetermination;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.operations.IWorkbenchContext;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-/**
- * This class manages resource change events for the validation framework.
- */
-public class EventManager implements IResourceChangeListener {
-	private static EventManager _inst = null;
-	private boolean _shutdown = false; // false means that eclipse is not shutting down, and true
-	// means that it is shutting down. Used in two methods:
-	// shutdown(),and resourceChanged(IResourceChangeEvent)
-	private IResourceDeltaVisitor _postAutoBuildVisitor = null;
-	private boolean _isActive = false; // has the registry been read?
-
-	private EventManager() {
-		super();
-	}
-
-	public static EventManager getManager() {
-		if (_inst == null) {
-			_inst = new EventManager();
-		}
-		return _inst;
-	}
-
-	public void opening(IProject project) {
-		if (project == null || !ValidationPlugin.isActivated()) {
-			return;
-		}
-
-		// When the project is opened, check for any orphaned tasks
-		// or tasks whose owners need to be updated.
-		ConfigurationManager.getManager().opening(project);
-	}
-
-	public void closing(IProject project) {
-		if (project == null || !ValidationPlugin.isActivated()) {
-			return;
-		}
-
-		try {
-			boolean isMigrated = ConfigurationManager.getManager().isMigrated(project);
-			// If it's not migrated, then it hasn't been loaded, and we don't want to load the
-			// validator and its prerequisite plugins until they're needed.
-			if (isMigrated) {
-				ValidatorMetaData[] vmds = ConfigurationManager.getManager().getProjectConfiguration(project).getValidators();
-				for (int i = 0; i < vmds.length; i++) {
-					ValidatorMetaData vmd = vmds[i];
-
-					if (!vmd.isActive()) {
-						// If this validator has not been activated, or if it has been shut down,
-						// don't activate it again.
-						continue;
-					}
-
-					IWorkbenchContext helper = null;
-					try {
-						helper = vmd.getHelper(project);
-						helper.closing();
-					} catch (InstantiationException exc) {
-						// Remove the vmd from the reader's list
-						ValidationRegistryReader.getReader().disableValidator(vmd);
-
-						// Log the reason for the disabled validator
-						Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-						if (logger.isLoggingLevel(Level.SEVERE)) {
-							LogEntry entry = ValidationPlugin.getLogEntry();
-							entry.setSourceID("EventManager::closing(IProject)"); //$NON-NLS-1$
-							entry.setTargetException(exc);
-							logger.write(Level.SEVERE, entry);
-						}
-
-						continue;
-					} catch (Throwable exc) {
-						// If there is a problem with this particular helper, log the error and
-						// continue
-						// with the next validator.
-						Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-						if (logger.isLoggingLevel(Level.SEVERE)) {
-							LogEntry entry = ValidationPlugin.getLogEntry();
-							entry.setSourceID("EventManager::closing(IProject)"); //$NON-NLS-1$
-							entry.setTargetException(exc);
-							logger.write(Level.SEVERE, entry);
-						}
-						continue;
-					}
-				}
-
-				ConfigurationManager.getManager().closing(project);
-			}
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("EventManager::closing(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-	}
-
-	public void deleting(IProject project) {
-		if (project == null) {
-			return;
-		}
-
-		try {
-			boolean isMigrated = ConfigurationManager.getManager().isMigrated(project);
-			// If it's not migrated, then it hasn't been loaded, and we don't want to load the
-			// validator and its prerequisite plugins until they're needed.
-			if (isMigrated) {
-				ValidatorMetaData[] vmds = ConfigurationManager.getManager().getProjectConfiguration(project).getValidators();
-				for (int i = 0; i < vmds.length; i++) {
-					ValidatorMetaData vmd = vmds[i];
-
-					if (!vmd.isActive()) {
-						// If this validator has not been activated, or if it has been shut down,
-						// don't activate it again.
-						continue;
-					}
-
-					IWorkbenchContext helper = null;
-					try {
-						helper = vmd.getHelper(project);
-						helper.deleting();
-					} catch (InstantiationException exc) {
-						// Remove the vmd from the reader's list
-						ValidationRegistryReader.getReader().disableValidator(vmd);
-
-						// Log the reason for the disabled validator
-						Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-						if (logger.isLoggingLevel(Level.SEVERE)) {
-							LogEntry entry = ValidationPlugin.getLogEntry();
-							entry.setSourceID("EventManager::deleting(IProject)"); //$NON-NLS-1$
-							entry.setTargetException(exc);
-							logger.write(Level.SEVERE, entry);
-						}
-
-						continue;
-					} catch (Throwable exc) {
-						// If there is a problem with this particular helper, log the error and
-						// continue
-						// with the next validator.
-						Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-						if (logger.isLoggingLevel(Level.SEVERE)) {
-							LogEntry entry = ValidationPlugin.getLogEntry();
-							entry.setSourceID("EventManager::deleting(IProject)"); //$NON-NLS-1$
-							entry.setTargetException(exc);
-							logger.write(Level.SEVERE, entry);
-						}
-						continue;
-					}
-				}
-
-				ConfigurationManager.getManager().deleting(project);
-			}
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("EventManager::deleting(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-	}
-
-	/**
-	 * If a project's description changes, The project may have changed its nature. Update the cache
-	 * to reflect the new natures. The project could be opening. Migrate.
-	 */
-	private void postAutoChange(IResourceDelta delta) {
-		if (_postAutoBuildVisitor == null) {
-			_postAutoBuildVisitor = new IResourceDeltaVisitor() {
-				public boolean visit(IResourceDelta subdelta) throws CoreException {
-					if (subdelta == null)
-						return true;
-
-					IResource resource = subdelta.getResource();
-					if (resource instanceof IProject) {
-						IProject project = (IProject) resource;
-						if ((subdelta.getFlags() & IResourceDelta.DESCRIPTION) == IResourceDelta.DESCRIPTION) {
-							try {
-								ConfigurationManager.getManager().resetProjectNature(project); // flush
-								// existing
-								// "enabled
-								// validator"
-								// settings
-								// and
-								// reset
-								// to
-								// default
-							} catch (InvocationTargetException exc) {
-								Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-								if (logger.isLoggingLevel(Level.SEVERE)) {
-									LogEntry entry = ValidationPlugin.getLogEntry();
-									entry.setSourceIdentifier("EventManager::postAutoChange"); //$NON-NLS-1$
-									entry.setTargetException(exc);
-									logger.write(Level.SEVERE, entry);
-
-									if (exc.getTargetException() != null) {
-										entry.setTargetException(exc);
-										logger.write(Level.SEVERE, entry);
-									}
-								}
-							}
-							return false;
-						}
-
-						if ((subdelta.getFlags() & IResourceDelta.OPEN) == IResourceDelta.OPEN) {
-							if (project.isOpen()) {
-								// Project was just opened. If project.isOpen() had returned false,
-								// project
-								// would just have been closed.
-								opening(project);
-							}
-							// closing is called by PRE_CLOSE in resourceChanged
-							//							else {
-							//								closing(project);
-							//							}
-						}
-					}
-
-					return true;
-				}
-			};
-		}
-
-		try {
-			delta.accept(_postAutoBuildVisitor, true);
-		} catch (CoreException exc) {
-			exc.printStackTrace();
-		}
-	}
-
-	/**
-	 * Notifies this manager that some resource changes have happened on the platform. If the change
-	 * is a project deletion, that project should be removed from the cache.
-	 * 
-	 * @see IResourceDelta
-	 * @see IResource
-	 */
-	public void resourceChanged(IResourceChangeEvent event) {
-		if (_shutdown && (!isActive())) {
-			// If we're shutting down, and nothing has been activated, don't need to
-			// do anything.
-			return;
-		}
-
-		/*
-		 * StringBuffer buffer = new StringBuffer(); buffer.append("IResourceChangeEvent type = ");
-		 * buffer.append(event.getType()); buffer.append(", resource = ");
-		 * buffer.append(event.getResource()); buffer.append(", source = ");
-		 * buffer.append(event.getSource()); buffer.append(", delta = ");
-		 * buffer.append(event.getDelta()); System.out.println(buffer.toString());
-		 */
-
-		if (event.getSource() instanceof IWorkspace) {
-			if ((event.getType() == IResourceChangeEvent.PRE_DELETE) && (event.getResource() instanceof IProject)) {
-				deleting((IProject) event.getResource());
-			} else if ((event.getType() == IResourceChangeEvent.PRE_CLOSE) && (event.getResource() instanceof IProject)) {
-				closing((IProject) event.getResource());
-			} else if (event.getType() == IResourceChangeEvent.POST_BUILD) {
-				postAutoChange(event.getDelta());
-			}
-
-		}
-	}
-
-	/**
-	 * Notifies this manager that the ValidationPlugin is shutting down. (Usually implies that
-	 * either the plugin could not load, or that the workbench is shutting down.)
-	 * 
-	 * The manager will then notify all active helpers of the shutdown, so that they may perform any
-	 * last-minute writes to disk, cleanup, etc.
-	 */
-	public void shutdown() {
-		try {
-			_shutdown = true; // resourceChanged(IResourceChangeEvent) needs to know when a shutdown
-			// has started.
-
-			/*
-			 * if( !isHeadless() && ConfigurationManager.getManager().isGlobalMigrated()) {
-			 * GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
-			 * gp.store(); // First, see if any validators are loaded. If none are, there is nothing
-			 * to // clean up. if(gp.numberOfValidators() == 0) { return; } }
-			 */
-
-			// If the validators are loaded, then for every project in the workbench,
-			// we must see if it has been loaded. If it has, every enabled IWorkbenchContext
-			// must be called to clean up. If the project hasn't been loaded, then no
-			// IWorkbenchContext built anything, and there's nothing to clean up.
-			IWorkspace workspace = ResourcesPlugin.getWorkspace();
-			IWorkspaceRoot workspaceRoot = workspace.getRoot();
-			IProject[] projects = workspaceRoot.getProjects();
-			ProjectConfiguration prjp = null;
-			IProject project = null;
-			for (int i = 0; i < projects.length; i++) {
-				project = projects[i];
-				if (!project.isOpen()) {
-					// If the project isn't opened, there's nothing to clean up.
-					// If the project was opened, it would have been migrated, and there's something
-					// to clean up.
-					continue;
-				}
-
-				try {
-					boolean isMigrated = ConfigurationManager.getManager().isMigrated(project);
-					// If it's not migrated, then it hasn't been loaded, and we don't want to load
-					// the
-					// validator and its prerequisite plugins until they're needed.
-					if (isMigrated) {
-						prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-						prjp.store();
-
-						ValidatorMetaData[] vmdList = prjp.getEnabledValidators();
-						// if vmdList is null, IProject has never been loaded, so nothing to clean
-						// up
-						if (vmdList != null) {
-							for (int j = 0; j < vmdList.length; j++) {
-								ValidatorMetaData vmd = vmdList[j];
-
-								if (!vmd.isActive()) {
-									// If this validator has not been activated, or if it has been
-									// shut down, don't activate it again.
-									continue;
-								}
-
-								IWorkbenchContext helper = vmd.getHelper(project);
-								if (helper != null) {
-									try {
-										helper.shutdown();
-									} catch (Throwable exc) {
-										// Since we're shutting down, ignore the exception.
-									}
-								}
-							}
-						}
-					}
-				} catch (InvocationTargetException exc) {
-					Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setSourceIdentifier("EventManager::shutdown(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-						entry.setTargetException(exc);
-						logger.write(Level.SEVERE, entry);
-
-						if (exc.getTargetException() != null) {
-							entry.setTargetException(exc);
-							logger.write(Level.SEVERE, entry);
-						}
-					}
-				}
-			}
-		} catch (Throwable exc) {
-			// Since we're shutting down, ignore the exception.
-		}
-	}
-
-	public boolean isActive() {
-		// Have to use this convoluted technique for the shutdown problem.
-		// i.e., when eclipse is shut down, if validation plugin hasn't been loaded,
-		// the EventManager is activated for the first time, and it
-		// sends many exceptions to the .log. At first, I wrote a
-		// static method on ValidationRegistryReader, which returned true
-		// if the registry had been read, and false otherwise. However,
-		// that didn't solve the exception problem, because eclipse's
-		// class loader failed to load the ValidationRegistryReader class.
-		//
-		// The fix is to keep all shutdown mechanisms in this class.
-		// Track everything in here.
-		return _isActive;
-	}
-
-	/**
-	 * This method should only be called by the ValidationRegistryReader once the registry has been
-	 * read.
-	 */
-	public void setActive(boolean b) {
-		_isActive = b;
-	}
-
-	/**
-	 * This method should be used to determine if the workbench is running in UI or Headless
-	 */
-	public static boolean isHeadless() {
-		boolean ret = UIContextDetermination.getCurrentContext() == UIContextDetermination.HEADLESS_CONTEXT;
-		return ret;
-		//return UIContextDetermination.getCurrentContext() ==
-		// UIContextDetermination.HEADLESS_CONTEXT;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/FilterUtil.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/FilterUtil.java
deleted file mode 100644
index 3a82813..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/FilterUtil.java
+++ /dev/null
@@ -1,732 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-
-import java.text.MessageFormat;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IResourceDeltaVisitor;
-import org.eclipse.core.resources.IResourceVisitor;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.core.IFileDelta;
-import org.eclipse.wst.validation.internal.operations.IWorkbenchContext;
-import org.eclipse.wst.validation.internal.operations.WorkbenchFileDelta;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-/**
- * Utility class for the ValidationOperation hierarchy.
- */
-public final class FilterUtil {
-	private static VMDDeltaVisitor _deltaVisitor = null;
-	private static VMDResourceVisitor _resourceVisitor = null;
-
-	private interface VMDRecorder {
-		public Map getResult();
-
-		public void setEnabledValidators(Set enabledValidators);
-
-		public void setProgressMonitor(IProgressMonitor monitor);
-
-		public IProgressMonitor getProgressMonitor();
-	}
-
-	private interface VMDDeltaVisitor extends VMDRecorder, IResourceDeltaVisitor {
-		//constructor
-	}
-
-	private interface VMDResourceVisitor extends VMDRecorder, IResourceVisitor {
-		//constructor
-	}
-
-	/**
-	 * Don't let anyone create an instance of this class.
-	 */
-	private FilterUtil() {
-		//default
-	}
-
-	/**
-	 * Given a Set of enabled ValidatorMetaData, create a Map with each ValidatorMetaData as a key
-	 * with an associated null value.
-	 */
-	static Map wrapInMap(Set enabledValidators) {
-		Map result = new HashMap();
-		if ((enabledValidators == null) || (enabledValidators.size() == 0)) {
-			return result;
-		}
-
-		Iterator iterator = enabledValidators.iterator();
-		while (iterator.hasNext()) {
-			result.put(iterator.next(), null);
-		}
-		return result;
-	}
-
-	static void checkCanceled(IProgressMonitor monitor) throws OperationCanceledException {
-		if (monitor == null) {
-			return;
-		} else if (monitor.isCanceled()) {
-			throw new OperationCanceledException(""); //$NON-NLS-1$
-		}
-	}
-
-	/**
-	 * Given a Map of VMD <=>Set(IFileDelta), either return the existing Set or create a Set and
-	 * return it.
-	 */
-	private static Set getResourceDeltas(Map enabledValidators, ValidatorMetaData vmd) {
-		Set fileDeltas = (Set) enabledValidators.get(vmd);
-		if (fileDeltas == null) {
-			fileDeltas = new HashSet();
-			enabledValidators.put(vmd, fileDeltas);
-		}
-		return fileDeltas;
-	}
-
-	/**
-	 * Given the IFileDelta type, return the corresponding IResourceDelta type.
-	 */
-	private static int getResourceDeltaType(int ifileDeltaType) {
-		switch (ifileDeltaType) {
-			case (IFileDelta.ADDED) : {
-				return IResourceDelta.ADDED;
-			}
-
-			case (IFileDelta.DELETED) : {
-				return IResourceDelta.REMOVED;
-			}
-
-			case (IFileDelta.CHANGED) :
-			default : {
-				return IResourceDelta.CHANGED;
-			}
-		}
-	}
-
-	/**
-	 * Given the IResourceDelta type, return the corresponding IFileDelta type.
-	 */
-	static int getFileDeltaType(int iresourceDeltaType) {
-		switch (iresourceDeltaType) {
-			case IResourceDelta.ADDED : // resource has been added to the workbench
-			{
-				return IFileDelta.ADDED;
-			}
-
-			case IResourceDelta.CHANGED : // resources has been changed in the workbench
-			{
-				return IFileDelta.CHANGED;
-			}
-
-			case IResourceDelta.REMOVED : // resource has been deleted from the workbench
-			{
-				return IFileDelta.DELETED;
-			}
-
-			case IResourceDelta.ADDED_PHANTOM : // incoming workbench resource
-			{
-				return IFileDelta.ADDED;
-			}
-
-			case IResourceDelta.REMOVED_PHANTOM : // outgoing workbench resource
-			{
-				return IFileDelta.DELETED;
-			}
-
-			default : {
-				return IFileDelta.CHANGED;
-			}
-		}
-	}
-
-
-	/**
-	 * Return the validators which are both configured on this type of project, (as stored in
-	 * getProject()), and enabled by the user on this project.
-	 */
-	static void addFileDelta(Map enabledValidators, ValidatorMetaData vmd, WorkbenchFileDelta fileDelta) {
-		Set fileDeltas = getResourceDeltas(enabledValidators, vmd);
-		fileDeltas.add(fileDelta);
-		enabledValidators.put(vmd, fileDeltas);
-	}
-
-	/**
-	 * Return a Map wrapper, with each VMD from enabledValidators as the key, and the value a Set of
-	 * IFileDelta wrapper around the changed Object[].
-	 * 
-	 * If filterIn is true, do not check if the resources are filtered in by the validator. If
-	 * filterIn is false, check if the resources are filtered in by the validator (recommended).
-	 */
-	public static Map getFileDeltas(Set enabledValidators, Object[] changedResources, boolean filterIn) {
-		return getFileDeltas(enabledValidators, changedResources, IFileDelta.CHANGED, filterIn); // by
-		// default,
-		// assume
-		// that
-		// the
-		// resources
-		// have
-		// changed,
-		// not
-		// added
-		// or
-		// deleted
-	}
-
-	/**
-	 * Return a Map wrapper, with each VMD from enabledValidators as the key, and the value a Set of
-	 * IFileDelta wrapper around the changed Object[], with each delta of type deltaType.
-	 */
-	public static Map getFileDeltas(Set enabledValidators, Object[] changedResources, int ifileDeltaType) {
-		return getFileDeltas(enabledValidators, changedResources, ifileDeltaType, false); // by
-		// default,
-		// check
-		// if the
-		// Object[]
-		// are
-		// filtered
-		// in by
-		// the
-		// validator
-	}
-
-	/**
-	 * Return a Map wrapper, with each VMD from enabledValidators as the key, and the value a Set of
-	 * IFileDelta wrapper around the changed Object[].
-	 * 
-	 * If "force" is true, then don't check if the object is filtered in by the validator or not.
-	 * ValidatorSubsetOperation can use validators that don't filter in these particular resources,
-	 * but can use a defaultExtension's validators instead.
-	 */
-	public static Map getFileDeltas(Set enabledValidators, Object[] changedResources, int ifileDeltaType, boolean force) {
-		Map result = new HashMap();
-		if ((enabledValidators == null) || (enabledValidators.size() == 0)) {
-			return result;
-		}
-
-		Iterator iterator = enabledValidators.iterator();
-		boolean cannotLoad = false;
-		IWorkbenchContext helper = null;
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-			try {
-				Set deltas = new HashSet();
-				IProgressMonitor monitor = new NullProgressMonitor();
-				for (int i = 0; i < changedResources.length; i++) {
-					Object obj = changedResources[i];
-					WorkbenchFileDelta wfd = null;
-					if (obj instanceof IResource) {
-						IResource res = (IResource) obj;
-						if (force || !filterOut(monitor, vmd, res, getResourceDeltaType(ifileDeltaType))) {
-							helper = vmd.getHelper(res.getProject());
-
-							wfd = getFileDelta(helper, vmd, res, getResourceDeltaType(ifileDeltaType));
-						}
-					} else {
-						wfd = new WorkbenchFileDelta(obj);
-					}
-
-					if (wfd != null) {
-						deltas.add(wfd);
-					}
-				}
-				result.put(vmd, deltas);
-			} catch (InstantiationException exc) {
-				cannotLoad = true;
-
-				// Remove the vmd from the reader's list
-				ValidationRegistryReader.getReader().disableValidator(vmd);
-
-				// Log the reason for the disabled validator
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("FilterUtil::getFileDeltas(Set, Object[], int, boolean)"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-				continue;
-			}
-
-		}
-
-		if (cannotLoad) {
-			// Some of the validators should not be in the result set because either their
-			// validator class or helper class could not be instantiated.
-			Object[] vmds = enabledValidators.toArray();
-			for (int i = 0; i < vmds.length; i++) {
-				ValidatorMetaData vmd = (ValidatorMetaData) vmds[i];
-				if (vmd.cannotLoad()) {
-					result.remove(vmd);
-				}
-			}
-		}
-
-
-		return result;
-	}
-
-	public static WorkbenchFileDelta getFileDelta(IWorkbenchContext helper, ValidatorMetaData vmd, IResource resource, int iresourceDeltaType) {
-		// strip off the eclipse-specific information
-		String fileName = helper.getPortableName(resource);
-		if (fileName == null) {
-			// The resource is not contained in the current project.
-			// Can't see how this would happen, but check for it anyway.
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("FilterUtil::getFileDelta(IWorkbenchContext, ValidatorMetaData, IResource, int)"); //$NON-NLS-1$
-				entry.setMessageTypeID(ResourceConstants.VBF_EXC_SYNTAX_NULL_NAME);
-				String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_SYNTAX_NULL_NAME), new String[]{resource.getName(), vmd.getValidatorDisplayName()});
-				entry.setText(result);
-				//entry.setTokens(new String[]{resource.getName(), vmd.getValidatorDisplayName()});
-				logger.write(Level.SEVERE, entry);
-			}
-
-			IPath resourcePath = resource.getFullPath();
-			if (resourcePath != null) {
-				// Since null file names are not allowed, default to the fully-qualified name of the
-				// resource.
-				fileName = resourcePath.toString();
-			} else {
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("FilterUtil::getFileDelta(IWorkbenchContext, ValidtaorMetaData, IResource, int)"); //$NON-NLS-1$
-					entry.setText("portableName is null and path is null for resource " + resource); //$NON-NLS-1$
-					logger.write(Level.SEVERE, entry);
-				}
-				return null;
-			}
-		}
-
-		int ifileDeltaType = getFileDeltaType(iresourceDeltaType);
-		return new WorkbenchFileDelta(fileName, ifileDeltaType, resource);
-	}
-
-
-	/**
-	 * Add the IResource to the vmd's list of resources to validate. Return true if the add was
-	 * successful or false if the add was not successful.
-	 */
-	static boolean addToFileList(Map enabledValidators, IWorkbenchContext helper, ValidatorMetaData vmd, IResource resource, int resourceDelta, boolean isFullBuild) {
-		if ((vmd == null) || (resource == null)) {
-			return false;
-		}
-
-		try {
-			helper.registerResource(resource);
-		} catch (Throwable exc) {
-			// How to log this????
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("FilterUtil.addToFileList"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-
-			InternalValidatorManager.getManager().addInternalErrorTask(resource.getProject(), vmd, exc);
-
-			// Don't return ... even though the register threw an exception, that's not to say
-			// that the validator can't validate.
-		}
-
-		if (isFullBuild) {
-			// To indicate a full build to the validator, don't build up a list of files;
-			// pass in null instead. Given that the list of files should not be used,
-			// don't calculate it.
-			return true;
-		}
-
-
-		WorkbenchFileDelta newFileDelta = getFileDelta(helper, vmd, resource, resourceDelta);
-		if (newFileDelta != null) {
-			// if delta is null, getFileDelta will have logged the problem already
-			addFileDelta(enabledValidators, vmd, newFileDelta);
-		}
-
-		return true;
-	}
-
-	/**
-	 * Whether a full verification or a delta verification is in progress, both will call this
-	 * method to process the resource. This method calls the current Validator to filter the
-	 * resource (i.e., this method returns if the resource fails the filter test).
-	 * <code>process</code> also sends output to the <code>IProgressMonitor</code>, and calls
-	 * the current Validator to validate the resource.
-	 * 
-	 * To process a resource, there are several steps: 1. check if the resource is registered for
-	 * this validator (i.e., the validator has either specified it in a filter, or has not filtered
-	 * it out explicitly) 2. call <code>isValidationSource</code> on the current validator with
-	 * the current resource. This method performs further filtering by the Validator itself, in
-	 * addition to the static filtering done by the framework, based on the information in
-	 * plugin.xml. 3. If the resource passes both filters, call <code>validate</code> on the
-	 * validator, with the resource. 4. When complete (either by failing to pass a filter, or by the
-	 * completion of the <code>validate</code>), increment the IProgressMonitor's status by one
-	 * (i.e., one resource has been processed.)
-	 */
-	static boolean filterOut(IProgressMonitor monitor, ValidatorMetaData vmd, IResource resource, int resourceDelta) {
-		if (monitor == null) {
-			return false;
-		}
-
-		checkCanceled(monitor);
-		return !(vmd.isApplicableTo(resource, resourceDelta));
-	}
-
-	/**
-	 * Whether a full verification or a delta verification is in progress, both will call this
-	 * method to process the resource. This method calls the current Validator to filter the
-	 * resource (i.e., this method returns if the resource fails the filter test).
-	 * <code>process</code> also sends output to the <code>IProgressMonitor</code>, and calls
-	 * the current Validator to validate the resource.
-	 * 
-	 * To process a resource, there are several steps: 1. check if the resource is registered for
-	 * this validator (i.e., the validator has either specified it in a filter, or has not filtered
-	 * it out explicitly) 2. call <code>isValidationSource</code> on the current validator with
-	 * the current resource. This method performs further filtering by the Validator itself, in
-	 * addition to the static filtering done by the framework, based on the information in
-	 * plugin.xml. 3. If the resource passes both filters, call <code>validate</code> on the
-	 * validator, with the resource. 4. When complete (either by failing to pass a filter, or by the
-	 * completion of the <code>validate</code>), increment the IProgressMonitor's status by one
-	 * (i.e., one resource has been processed.)
-	 */
-	static void filterOut(IProgressMonitor monitor, Map enabledValidators, IResource resource, int resourceDelta, boolean isFullBuild) {
-		if (monitor == null) {
-			return;
-		}
-
-		checkCanceled(monitor);
-
-		Iterator iterator = enabledValidators.keySet().iterator();
-		boolean cannotLoad = false;
-		while (iterator.hasNext()) {
-			checkCanceled(monitor);
-
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-
-			if (!filterOut(monitor, vmd, resource, resourceDelta)) {
-				try {
-					// Notify the helper that a resource is about to be filtered in
-					IWorkbenchContext helper = vmd.getHelper(resource.getProject());
-					addToFileList(enabledValidators, helper, vmd, resource, resourceDelta, isFullBuild);
-				} catch (InstantiationException exc) {
-					cannotLoad = true;
-
-					// Remove the vmd from the reader's list
-					ValidationRegistryReader.getReader().disableValidator(vmd);
-
-					// Log the reason for the disabled validator
-					Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setSourceID("FilterUtil::filterOut(IProgressMonitor, Map, IResource, int, boolean)"); //$NON-NLS-1$
-						entry.setTargetException(exc);
-						logger.write(Level.SEVERE, entry);
-					}
-				}
-			}
-		}
-
-		if (cannotLoad) {
-			// Some of the validators need to be removed from the set because the validator
-			// or helper cannot be instantiated.
-			Object[] vmds = enabledValidators.keySet().toArray();
-			for (int i = 0; i < vmds.length; i++) {
-				ValidatorMetaData vmd = (ValidatorMetaData) vmds[i];
-				if (vmd.cannotLoad()) {
-					enabledValidators.remove(vmd);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Whether a full verification or a delta verification is in progress, both will call this
-	 * method to process the resource. This method calls the current Validator to filter the
-	 * resource (i.e., this method returns if the resource fails the filter test).
-	 * <code>process</code> also sends output to the <code>IProgressMonitor</code>, and calls
-	 * the current Validator to validate the resource.
-	 * 
-	 * This method is called during an incremental, not a full, validation. The full validation
-	 * fakes an IResourceDelta, and the incremental needs to check that the delta is one of the
-	 * deltas which is filtered in by the validation framework.
-	 * 
-	 * @see filterOut(IResourceDelta)
-	 * 
-	 * To process a resource, there are several steps: 1. check if the resource is registered for
-	 * this validator (i.e., the validator has either specified it in a filter, or has not filtered
-	 * it out explicitly) 2. call <code>isValidationSource</code> on the current validator with
-	 * the current resource. This method performs further filtering by the Validator itself, in
-	 * addition to the static filtering done by the framework, based on the information in
-	 * plugin.xml. 3. If the resource passes both filters, call <code>validate</code> on the
-	 * validator, with the resource. 4. When complete (either by failing to pass a filter, or by the
-	 * completion of the <code>validate</code>), increment the IProgressMonitor's status by one
-	 * (i.e., one resource has been processed.)
-	 */
-	static void filterOut(IProgressMonitor monitor, Map enabledValidators, IResource resource, IResourceDelta delta) {
-		// filter in only resources which have been added, deleted, or its content changed.
-		// moves will be registered as an add & delete combination
-		if (filterOut(delta)) {
-			return;
-		}
-		filterOut(monitor, enabledValidators, resource, delta.getKind(), false); // false =
-		// incremental
-		// build
-	}
-
-	/**
-	 * Filter out resource deltas which don't correspond to changes that validators can validate.
-	 * 
-	 * This method will filter in deltas only if the delta is an add, a delete, or if the content of
-	 * the file has changed.
-	 * 
-	 * Return true if the delta should be filtered out, and false if we should validate it.
-	 * 
-	 * @see IResourceDelta
-	 */
-	static boolean filterOut(IResourceDelta delta) {
-		if (delta == null) {
-			return true;
-		}
-
-		switch (delta.getKind()) {
-			case IResourceDelta.ADDED : // resource has been added to the workbench
-			{
-				return false;
-			}
-
-			case IResourceDelta.REMOVED : // resource has been deleted from the workbench
-			{
-				// If the delta is an IProject, and the IProject is getting deleted or closed, don't
-				// validate it or its children.
-				if (delta.getResource() instanceof IProject) {
-					return true;
-				}
-				return false;
-			}
-
-			case IResourceDelta.CHANGED : // resources has been changed in the workbench
-			{
-				// We want to add the enterprise bean only if its source file's
-				// contents have changed. (for example, if a folder has been
-				// added to the project, the IFile will be changed because
-				// its position has been changed, but the enterprise bean
-				// doesn't need to be redeployed. See IResourceDelta.getFlags()
-				// for more information.)
-				//
-				// Or, if ejb-jar.xml has changed, the EJBJar is destroyed & created
-				// from scratch, so the list of EnterpriseBean is new. Purge the old
-				// EJBJar from the EJBCache (since it will never be referenced again),
-				// and load the new EJBJar into the cache.
-				if ((delta.getResource() instanceof IFile) && ((delta.getFlags() & IResourceDelta.CONTENT) != 0)) {
-					return false;
-				}
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * This method returns true if the given resource and its children should be processed by the
-	 * validators. That is, there are several types of changes which can occur to an IProject which
-	 * should not trigger a revalidation of the project or its children. (e.g. project is deleted or
-	 * closed.) For those cases, or if the IResourceDelta is invalid, this method will return false
-	 * (do not validate the IProject or its children). Otherwise, return true (validate the resource &
-	 * its children). If an IProject itself has not changed, but one of its children has
-	 * (delta.getKind() of NO_CHANGE), then return true so that the children are validated.
-	 */
-	static boolean shouldProcess(IResource resource, IResourceDelta delta) {
-		if ((resource != null) && !(resource instanceof IProject)) {
-			return true;
-		}
-
-		if (delta == null) {
-			return false;
-		}
-
-		switch (delta.getKind()) {
-			case IResourceDelta.ADDED : // resource has been deleted from the workbench; may be part
-			// of a move
-			{
-				if (0 != (delta.getFlags() & IResourceDelta.MOVED_FROM)) {
-					// If it's being moved, don't revalidate its children. If it's being added, fall
-					// through to the "return true;" at the end of this method.
-					return false;
-				}
-				break;
-			}
-
-			case IResourceDelta.REMOVED : // resource has been deleted from the workbench; may be
-			// part of a move
-			{
-				// Whether it's being deleted or moved, don't revalidate its children.
-				return false;
-			}
-
-			case IResourceDelta.CHANGED : // resource has been changed in the workbench; may be part
-			// of a move
-			{
-				if ((delta.getFlags() & IResourceDelta.OPEN) != 0) {
-					// Change is related to the OPEN bit. Whether the project was closed and is now
-					// open,
-					// or the project was open and is now closed, don't need to revalidate the
-					// children.
-					return false;
-				} else if ((delta.getFlags() & IResourceDelta.REPLACED) != 0) {
-					// project was moved
-					return false;
-				}
-
-				break;
-			}
-		}
-
-		return true;
-	}
-
-	private static VMDResourceVisitor getResourceVisitor(IProgressMonitor monitor, Set enabledValidators) {
-		if (_resourceVisitor == null) {
-			_resourceVisitor = new VMDResourceVisitor() {
-				private Map _vmdDeltas = null;
-				private IProgressMonitor _progressMonitor = null;
-
-				public Map getResult() {
-					return _vmdDeltas;
-				}
-
-				public void setEnabledValidators(Set validators) {
-					_vmdDeltas = wrapInMap(validators);
-				}
-
-				public IProgressMonitor getProgressMonitor() {
-					return _progressMonitor;
-				}
-
-				public void setProgressMonitor(IProgressMonitor m) {
-					_progressMonitor = m;
-				}
-
-				public boolean visit(IResource res) throws CoreException {
-					FilterUtil.checkCanceled(getProgressMonitor());
-
-					// We don't need to filter out anything, because a full validation
-					// is about to be performed.
-					filterOut(getProgressMonitor(), _vmdDeltas, res, IResourceDelta.CHANGED, true); // true
-					// -
-					// this
-					// is a
-					// full
-					// build
-
-					return true; // visit the resource's children as well
-				}
-			};
-		}
-		_resourceVisitor.setProgressMonitor(monitor);
-		_resourceVisitor.setEnabledValidators(enabledValidators);
-
-		return _resourceVisitor;
-	}
-
-	private static VMDDeltaVisitor getDeltaVisitor(IProgressMonitor monitor, Set enabledValidators) {
-		if (_deltaVisitor == null) {
-			_deltaVisitor = new VMDDeltaVisitor() {
-				private Map _vmdDeltas = null;
-				private IProgressMonitor _progressMonitor = null;
-
-				public Map getResult() {
-					return _vmdDeltas;
-				}
-
-				public void setEnabledValidators(Set validators) {
-					_vmdDeltas = wrapInMap(validators);
-				}
-
-				public IProgressMonitor getProgressMonitor() {
-					return _progressMonitor;
-				}
-
-				public void setProgressMonitor(IProgressMonitor m) {
-					_progressMonitor = m;
-				}
-
-				public boolean visit(IResourceDelta subdelta) throws CoreException {
-					checkCanceled(getProgressMonitor());
-					if (subdelta == null)
-						return true;
-
-					IResource resource = subdelta.getResource();
-
-					Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.FINEST)) {
-						StringBuffer buffer = new StringBuffer("subdelta of "); //$NON-NLS-1$
-						buffer.append(resource.getName());
-						buffer.append(" is "); //$NON-NLS-1$
-						buffer.append(subdelta.getKind());
-						buffer.append(" resource exists? "); //$NON-NLS-1$
-						buffer.append(resource.exists());
-						buffer.append(" resource.isPhantom?"); //$NON-NLS-1$
-						buffer.append(resource.isPhantom());
-
-						if (logger.isLoggingLevel(Level.FINEST)) {
-							LogEntry entry = ValidationPlugin.getLogEntry();
-							entry.setSourceID("FilterUtil::visit(IResourceDelta)"); //$NON-NLS-1$
-							entry.setText(buffer.toString());
-							logger.write(Level.FINEST, entry);
-						}
-
-					}
-
-					// If the delta is an IProject, and the IProject is getting deleted or closed,
-					// don't validate it or its children.
-					if (shouldProcess(resource, subdelta)) {
-						filterOut(getProgressMonitor(), _vmdDeltas, resource, subdelta);
-						return true; // visit the delta's children as well
-					}
-					return false; // do not visit the delta's children
-				}
-			};
-		}
-		_deltaVisitor.setProgressMonitor(monitor);
-		_deltaVisitor.setEnabledValidators(enabledValidators);
-
-		return _deltaVisitor;
-	}
-
-	public static Map loadDeltas(final IProgressMonitor monitor, final Set enabledValidators, IResourceDelta delta) throws CoreException {
-		VMDDeltaVisitor visitor = getDeltaVisitor(monitor, enabledValidators);
-		delta.accept(visitor, true); // true means include phantom resources
-		return visitor.getResult();
-	}
-
-	public static Map loadDeltas(final IProgressMonitor monitor, final Set enabledValidators, IProject project) throws CoreException {
-		VMDResourceVisitor visitor = getResourceVisitor(monitor, enabledValidators);
-		project.accept(visitor, IResource.DEPTH_INFINITE, true); // true means include phantom
-		// resources
-		return visitor.getResult();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/GlobalConfiguration.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/GlobalConfiguration.java
deleted file mode 100644
index cf9829f..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/GlobalConfiguration.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-
-/**
- * This class represents the global Preferences as set on the Validation Preferences page.
- */
-public class GlobalConfiguration extends ValidationConfiguration {
-	/* package */static final boolean PREF_PROJECTS_CAN_OVERRIDE_DEFAULT = true;
-
-	private boolean _canProjectsOverride = getCanProjectsOverrideDefault();
-
-	/**
-	 * This constructor should be used in all cases except for the Preference page's values.
-	 */
-	public GlobalConfiguration(IWorkspaceRoot root) throws InvocationTargetException {
-		super(root, convertToArray(ValidationRegistryReader.getReader().getAllValidators()));
-
-		// Can't put the call to load() and passivate() in the ValidationConfiguration constructor
-		// due
-		// to the order of initialization.
-		//    1. First the ValidationConfiguration constructor is called, and that loads the stored
-		// values.
-		//    2. Then this class's <init> method is called, and that initializes the "override" field
-		// to the default,
-		//       which may be different than the stored value.
-	}
-
-	/**
-	 * This constructor is provided only for the Preference page, so that the page can store values
-	 * without persisting them (i.e., if the user presses Cancel then nothing needs to be done.)
-	 */
-	public GlobalConfiguration(GlobalConfiguration original) throws InvocationTargetException {
-		super();
-		original.copyTo(this);
-	}
-
-	public boolean canProjectsOverride() {
-		return _canProjectsOverride;
-	}
-
-	public void setCanProjectsOverride(boolean can) {
-		_canProjectsOverride = can;
-	}
-
-	public void resetToDefault() {
-		setAutoValidate(getAutoValidateDefault());
-		setEnabledValidators(getEnabledValidatorsDefault());
-		setMaximumNumberOfMessages(getMaximumNumberOfMessagesDefault());
-		setBuildValidate(getBuildValidateDefault());
-		setCanProjectsOverride(getCanProjectsOverrideDefault());
-	}
-
-	/**
-	 * This method exists only for migration purposes. The root marker must be deleted after
-	 * migration is complete.
-	 */
-	protected IMarker[] getMarker() {
-		try {
-			IWorkspaceRoot root = getRoot();
-			IMarker[] markers = root.findMarkers(ConfigurationConstants.PREFERENCE_MARKER, false, IResource.DEPTH_ONE);
-
-			if (markers.length == 1) {
-				return markers;
-			}
-			// job is done. Nothing to migrate.
-			return null;
-
-		} catch (CoreException exc) {
-			// Can't find the IMarker? Assume it's deleted.
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("GlobalConfiguration.getMarker()"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-			return null;
-		}
-	}
-
-	protected void load(IMarker[] marker) {
-		// The 5.0 preferences were stored in an IMarker, and the current.preferences are stored in
-		// PersistentProperties on the IResource.
-		// A 5.0 root can have no marker values if the preference page, properties page, and
-		// validation were never viewed or run.
-		try {
-			IWorkspaceRoot root = getRoot();
-			if (marker == null) {
-				// There were no global preferences in 4.03, so the migration is to create some.
-				resetToDefault(); // assign the default values to the new Global Preference
-				return;
-			}
-
-			IMarker rootMarker = marker[0]; // getMarker() has already checked that there's a marker
-			// in the array
-			ValidatorMetaData[] enabledValidators = null;
-			String enabledValidatorsString = (String) getValue(rootMarker, ConfigurationConstants.ENABLED_VALIDATORS);
-			if (enabledValidatorsString == null) {
-				enabledValidators = ConfigurationConstants.DEFAULT_ENABLED_VALIDATORS;
-			} else {
-				enabledValidators = getStringAsEnabledElementsArray(enabledValidatorsString);
-			}
-
-			setEnabledValidators(enabledValidators);
-			setAutoValidate(getValue(rootMarker, ConfigurationConstants.AUTO_SETTING, ConfigurationConstants.DEFAULT_AUTO_SETTING));
-			setBuildValidate(getValue(rootMarker, ConfigurationConstants.BUILD_SETTING, ConfigurationConstants.DEFAULT_BUILD_SETTING));
-			setMaximumNumberOfMessages(getValue(rootMarker, ConfigurationConstants.MAXNUMMESSAGES, ConfigurationConstants.DEFAULT_MAXNUMMESSAGES));
-			setCanProjectsOverride(getValue(rootMarker, ConfigurationConstants.PREF_PROJECTS_CAN_OVERRIDE, PREF_PROJECTS_CAN_OVERRIDE_DEFAULT));
-
-			root.getWorkspace().deleteMarkers(marker);
-		} catch (CoreException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("GlobalConfiguration.loadV50"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-	}
-
-	protected void copyTo(GlobalConfiguration gp) throws InvocationTargetException {
-		super.copyTo(gp);
-
-		// Need to have a distinct method for this child class (i.e., the parameter
-		// is not a ValidationConfiguration) because if this initialization is
-		// called as part of ValidationConfiguration's constructor, then the value of
-		// this field is overwritten. Fields of this class are initialized to the
-		// default after the ValidationConfiguration parent is created.
-		gp.setCanProjectsOverride(canProjectsOverride());
-	}
-
-	public static boolean getCanProjectsOverrideDefault() {
-		return PREF_PROJECTS_CAN_OVERRIDE_DEFAULT;
-	}
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.operations.internal.attribute.ValidationConfiguration#deserialize(String)
-	 */
-	public void deserialize(String storedConfiguration) throws InvocationTargetException {
-		super.deserialize(storedConfiguration);
-
-		if (storedConfiguration != null && storedConfiguration.length() > 0) {
-			// If it's null, then super.deserialize has already called resetToDefault to initialize
-			// this instance.
-			int canOverrideIndex = storedConfiguration.indexOf(ConfigurationConstants.PREF_PROJECTS_CAN_OVERRIDE);
-			int autoIndex = storedConfiguration.indexOf(ConfigurationConstants.AUTO_SETTING);
-
-			String canOverride = storedConfiguration.substring(canOverrideIndex + ConfigurationConstants.PREF_PROJECTS_CAN_OVERRIDE.length(), autoIndex);
-			setCanProjectsOverride(Boolean.valueOf(canOverride).booleanValue());
-		}
-	}
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.operations.internal.attribute.ValidationConfiguration#serialize()
-	 */
-	public String serialize() throws InvocationTargetException {
-		StringBuffer buffer = new StringBuffer();
-		buffer.append(ConfigurationConstants.PREF_PROJECTS_CAN_OVERRIDE);
-		buffer.append(String.valueOf(canProjectsOverride()));
-		buffer.append(super.serialize());
-		return buffer.toString();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/IProjectValidationHelper.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/IProjectValidationHelper.java
deleted file mode 100644
index f85fddf..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/IProjectValidationHelper.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IProject;
-
-public interface IProjectValidationHelper {
-	
-	public IContainer[] getOutputContainers(IProject project);
-	
-	public IContainer[] getSourceContainers(IProject project);
-
-}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/IValidationSelectionHandler.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/IValidationSelectionHandler.java
deleted file mode 100644
index 38292b6..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/IValidationSelectionHandler.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-import org.eclipse.core.resources.IResource;
-
-/**
- * This is used by extensions to add valid validation types to the validate
- * menu action.
- */
-public interface IValidationSelectionHandler {
-
-	/**
-	 * Return a valid IResource type for the extensible object selection,
-	 * should be instance of IFolder, IFile, or IProject if this extension knows
-	 * how to handle the selection, otherwise it should return null
-	 */ 
-	public IResource getBaseValidationType(Object selection);
-	
-	/**
-	 * @return the classname of the validation type to register for validation
-	 */
-	public String getValidationTypeString();
-	
-	public void setValidationTypeString(String validationType);
-	
-}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/InternalValidatorManager.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/InternalValidatorManager.java
deleted file mode 100644
index 07d3845..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/InternalValidatorManager.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.core.Message;
-import org.eclipse.wst.validation.internal.operations.WorkbenchReporter;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-import org.eclipse.wst.validation.internal.provisional.core.IMessage;
-
-/**
- */
-public final class InternalValidatorManager {
-	private static InternalValidatorManager _inst = null;
-	private static final String OP_GROUP = "ValidationOperation"; //$NON-NLS-1$ // when the ValidationOperation
-
-	// adds a message to the task
-	// list; e.g. cancel, or internal
-	// error, this group name is used
-	// to distinguish between the
-	// messages that the validator
-	// itself put, and the ones which
-	// the validator owns, but the
-	// operation put. //$NON-NLS-1$
-
-	private InternalValidatorManager() {
-		//default
-	}
-
-	public static InternalValidatorManager getManager() {
-		if (_inst == null) {
-			_inst = new InternalValidatorManager();
-		}
-		return _inst;
-	}
-
-	/**
-	 * Return a new Set that contains all of the elements from the array.
-	 */
-	public static Set wrapInSet(Object[] obj) {
-		Set result = new HashSet();
-		if ((obj == null) || (obj.length == 0)) {
-			return result;
-		}
-
-		for (int i = 0; i < obj.length; i++) {
-			result.add(obj[i]);
-		}
-
-		return result;
-	}
-
-	/**
-	 * If the current validator throws a Throwable, log the internal error to the task list.
-	 * 
-	 * This method is for use by the validation framework only.
-	 */
-	public void addInternalErrorTask(IProject project, ValidatorMetaData vmd, Throwable exc) {
-		addOperationTask(project, vmd, ResourceConstants.VBF_EXC_INTERNAL, new String[]{project.getName(), vmd.getValidatorDisplayName(), ((exc.getMessage() == null) ? "" : exc.getMessage())}); //$NON-NLS-1$
-	}
-
-	/**
-	 * If the user is cancelling validation on the current project/resource, Add an information task
-	 * to the task list informing the user that validation has not been run on the current project.
-	 * 
-	 * If the current validator throws a Throwable, log the internal error to the task list.
-	 */
-	public void addOperationTask(IProject project, ValidatorMetaData vmd, String messageId, String[] parms) {
-		Message message = ValidationPlugin.getMessage();
-		message.setSeverity(IMessage.LOW_SEVERITY);
-		message.setId(messageId);
-		message.setParams(parms);
-		message.setGroupName(OP_GROUP);
-
-		// Although the message is owned by the validator, the string of the message has to be
-		// loaded by this class' ClassLoader
-		WorkbenchReporter.addMessage(project, vmd.getValidatorUniqueName(), getClass().getClassLoader(), message);
-	}
-
-
-	/**
-	 * If the user cancelled the previous validation with this validator, or if there was a
-	 * Throwable caught during the last execution of this validator, and the validator is in the
-	 * process of validating now, remove the former information task messages.
-	 */
-	public void removeOperationTasks(IProject project, ValidatorMetaData vmd) {
-		WorkbenchReporter.removeMessageSubset(project, vmd.getValidatorUniqueName(), OP_GROUP);
-	}
-
-	/**
-	 * Return an array of the fully-qualified names of the validator classes.
-	 */
-	public String[] getValidatorNames(ValidatorMetaData[] vmds) {
-		Set temp = new HashSet();
-		for (int i = 0; i < vmds.length; i++) {
-			String[] names = vmds[i].getValidatorNames();
-			for (int j = 0; j < names.length; j++) {
-				temp.add(names[j]);
-			}
-		}
-
-		String[] vmdNames = new String[temp.size()];
-		temp.toArray(vmdNames);
-		return vmdNames;
-	}
-
-	/**
-	 * Return an array of the fully-qualified names of the validator classes.
-	 */
-	public String[] getValidatorNames(Collection vmds) {
-		Set temp = new HashSet();
-		Iterator iterator = vmds.iterator();
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-			String[] names = vmd.getValidatorNames();
-			for (int j = 0; j < names.length; j++) {
-				temp.add(names[j]);
-			}
-		}
-
-		String[] vmdNames = new String[temp.size()];
-		temp.toArray(vmdNames);
-		return vmdNames;
-	}
-
-	/**
-	 * Return a list of validators that validate files with the given extension.
-	 */
-	public ValidatorMetaData[] getValidatorsForExtension(IProject project, String fileExtension) {
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-
-			// Get all of the validators configured on the project for the given file extension
-			ValidatorMetaData[] vmds = prjp.getValidators();
-
-			// Construct a fake IFile type to represent a file with this extension.
-			StringBuffer buffer = new StringBuffer(project.getName());
-			buffer.append(IPath.SEPARATOR);
-			buffer.append(fileExtension);
-			IPath path = new Path(buffer.toString());
-			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
-
-			ValidatorMetaData[] temp = new ValidatorMetaData[vmds.length];
-			int count = 0;
-			for (int i = 0; i < vmds.length; i++) {
-				ValidatorMetaData vmd = vmds[i];
-				if (vmd.isApplicableTo(file)) {
-					temp[count++] = vmd;
-				}
-			}
-
-			ValidatorMetaData[] result = new ValidatorMetaData[count];
-			System.arraycopy(temp, 0, result, 0, count);
-			return result;
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("InternalValidatorManager::getValidatorsForExtension(" + project.getName() + ", " + fileExtension + ")"); //$NON-NLS-1$  //$NON-NLS-2$ //$NON-NLS-3$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-			return new ValidatorMetaData[0];
-		}
-	}
-
-	/**
-	 * Return a list of validator names that validate files with the given extension.
-	 */
-	public String[] getValidatorNamesForExtension(IProject project, String fileExtension) {
-		ValidatorMetaData[] vmds = getValidatorsForExtension(project, fileExtension);
-
-		String[] names = new String[vmds.length];
-		for (int i = 0; i < names.length; i++) {
-			names[i] = vmds[i].getValidatorUniqueName();
-		}
-		return names;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ProjectConfiguration.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ProjectConfiguration.java
deleted file mode 100644
index 0e7d711..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ProjectConfiguration.java
+++ /dev/null
@@ -1,615 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-
-/**
- * This class represents the Project Preferences as set on the Project's Validation Properties page.
- */
-public class ProjectConfiguration extends ValidationConfiguration {
-	/* package */static final boolean PRJ_OVERRIDEGLOBAL_DEFAULT = false; // If the user has never
-	// set
-	// a preference before, this
-	// is the override default
-	// (on)
-	private boolean _doesProjectOverride = getDoesProjectOverrideDefault();
-
-	/**
-	 * This constructor should be used in all cases except for the Properties page's values.
-	 */
-	protected ProjectConfiguration(IProject project) throws InvocationTargetException {
-		// The extractProjectValidators method extracts just this project's validators from the
-		// global list.
-		super(project, extractProjectValidators(convertToArray(ValidationRegistryReader.getReader().getAllValidators()), project));
-
-		// Can't put the call to load() and passivate() in the ValidationConfiguration constructor
-		// due
-		// to the order of initialization.
-		//    1. First the ValidationConfiguration constructor is called, and that loads the stored
-		// values.
-		//    2. Then this class's <init> method is called, and that initializes the "override" field
-		// to the default,
-		//       which may be different than the stored value.
-	}
-
-	/**
-	 * This constructor is provided only for the Properties page, so that the page can store values
-	 * without persisting them (i.e., if the user presses Cancel then nothing needs to be done.)
-	 */
-	public ProjectConfiguration(ProjectConfiguration original) throws InvocationTargetException {
-		super();
-		original.copyTo(this);
-	}
-
-	/**
-	 * Return the ValidationConfiguration to use, whether global or project.
-	 */
-	protected boolean useGlobalPreference() {
-		try {
-			GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
-			if (gp == null) {
-				return false;
-			}
-
-			if (!gp.canProjectsOverride()) {
-				// If project's can't override the global, use the global
-				return true;
-			}
-
-			// If the project overrides, then don't use the global.
-			// If the project does not override, use the global.
-			return !_doesProjectOverride;
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ProjectConfiguration.userGlobalPreference"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-			return false;
-		}
-	}
-
-	public boolean doesProjectOverride() {
-		// If the global preference doesn't allow projects to override, it doesn't matter what the
-		// value of _doesProjectOverride is.
-		return !useGlobalPreference();
-	}
-
-	public void setDoesProjectOverride(boolean does) {
-		_doesProjectOverride = does;
-	}
-
-	/**
-	 * If the preferences should be used then the preference settings are returned; otherwise return
-	 * the project settings.
-	 */
-	public ValidatorMetaData[] getEnabledValidators() throws InvocationTargetException {
-		if (useGlobalPreference()) {
-			return extractProjectValidators(ConfigurationManager.getManager().getGlobalConfiguration().getEnabledValidators(), getResource());
-		}
-		return super.getEnabledValidators();
-	}
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.operations.internal.preference.ValidationConfiguration#getDisabledValidators()
-	 */
-	public ValidatorMetaData[] getDisabledValidators() throws InvocationTargetException {
-		if (useGlobalPreference()) {
-			return extractProjectValidators(ConfigurationManager.getManager().getGlobalConfiguration().getDisabledValidators(), getResource());
-		}
-		return super.getDisabledValidators();
-	}
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.operations.internal.preference.ValidationConfiguration#getValidators()
-	 */
-	public ValidatorMetaData[] getValidators() throws InvocationTargetException {
-		if (useGlobalPreference()) {
-			return extractProjectValidators(ConfigurationManager.getManager().getGlobalConfiguration().getValidators(), getResource());
-		}
-		return super.getValidators();
-	}
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.operations.internal.attribute.ValidationConfiguration#getEnabledIncrementalValidators(boolean)
-	 */
-	public ValidatorMetaData[] getEnabledIncrementalValidators(boolean incremental) throws InvocationTargetException {
-		if (useGlobalPreference()) {
-			return extractProjectValidators(ConfigurationManager.getManager().getGlobalConfiguration().getEnabledIncrementalValidators(incremental), getResource());
-		}
-		return super.getEnabledIncrementalValidators(incremental);
-	}
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.operations.internal.preference.ValidationConfiguration#isEnabled(ValidatorMetaData)
-	 */
-	public boolean isEnabled(ValidatorMetaData vmd) throws InvocationTargetException {
-		if (useGlobalPreference()) {
-			return ConfigurationManager.getManager().getGlobalConfiguration().isEnabled(vmd);
-		}
-		return super.isEnabled(vmd);
-	}
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.operations.internal.preference.ValidationConfiguration#numberOfDisabledValidators()
-	 */
-	public int numberOfDisabledValidators() throws InvocationTargetException {
-		if (useGlobalPreference()) {
-			return ConfigurationManager.getManager().getGlobalConfiguration().numberOfDisabledValidators();
-		}
-		return super.numberOfDisabledValidators();
-	}
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.operations.internal.preference.ValidationConfiguration#numberOfEnabledIncrementalValidators()
-	 */
-	public int numberOfEnabledIncrementalValidators() throws InvocationTargetException {
-		if (useGlobalPreference()) {
-			return ConfigurationManager.getManager().getGlobalConfiguration().numberOfEnabledIncrementalValidators();
-		}
-		return super.numberOfEnabledIncrementalValidators();
-	}
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.operations.internal.preference.ValidationConfiguration#numberOfEnabledValidators()
-	 */
-	public int numberOfEnabledValidators() throws InvocationTargetException {
-		if (useGlobalPreference()) {
-			return ConfigurationManager.getManager().getGlobalConfiguration().numberOfEnabledValidators();
-		}
-		return super.numberOfEnabledValidators();
-	}
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.operations.internal.preference.ValidationConfiguration#numberOfIncrementalValidators()
-	 */
-	public int numberOfIncrementalValidators() throws InvocationTargetException {
-		if (useGlobalPreference()) {
-			return ConfigurationManager.getManager().getGlobalConfiguration().numberOfIncrementalValidators();
-		}
-		return super.numberOfIncrementalValidators();
-	}
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.operations.internal.preference.ValidationConfiguration#numberOfValidators()
-	 */
-	public int numberOfValidators() throws InvocationTargetException {
-		if (useGlobalPreference()) {
-			return ConfigurationManager.getManager().getGlobalConfiguration().numberOfValidators();
-		}
-		return super.numberOfValidators();
-	}
-
-	/**
-	 * This method could be called with the project's values, or with the global preference values.
-	 * Validators that are not configured on this project will be ignored.
-	 */
-	public void setEnabledValidators(ValidatorMetaData[] vmds) {
-		super.setEnabledValidators(extractProjectValidators(vmds, getResource()));
-	}
-
-	/**
-	 * This method could be called with the project's values, or with the global preference values.
-	 * Validators that are not configured on this project will be ignored.
-	 */
-	public void setValidators(ValidatorMetaData[] vmds) {
-		super.setValidators(extractProjectValidators(vmds, getResource()));
-	}
-
-	/**
-	 * Given a set of validators, usually the global preference set, change the set so that it
-	 * contains only the validators configured on this project.
-	 */
-	private static ValidatorMetaData[] extractProjectValidators(ValidatorMetaData[] vmds, IResource resource) {
-		ValidationRegistryReader reader = ValidationRegistryReader.getReader();
-		int length = (vmds == null) ? 0 : vmds.length;
-		ValidatorMetaData[] temp = new ValidatorMetaData[length];
-		if (length == 0) {
-			return temp;
-		}
-
-		int count = 0;
-		IProject project = (IProject) resource;
-		for (int i = 0; i < vmds.length; i++) {
-			ValidatorMetaData vmd = vmds[i];
-			if (reader.isConfiguredOnProject(vmd, project)) {
-				temp[count++] = vmd;
-			}
-		}
-
-		ValidatorMetaData[] result = new ValidatorMetaData[count];
-		System.arraycopy(temp, 0, result, 0, count);
-		temp = null;
-
-		return result;
-	}
-
-	/**
-	 * If the preferences should be used then the preference settings are returned; otherwise return
-	 * the project settings.
-	 */
-	public int getMaximumNumberOfMessages() throws InvocationTargetException {
-		if (useGlobalPreference()) {
-			return ConfigurationManager.getManager().getGlobalConfiguration().getMaximumNumberOfMessages();
-		}
-		return super.getMaximumNumberOfMessages();
-	}
-
-	/**
-	 * If the preferences should be used then the preference settings are returned; otherwise return
-	 * the project settings.
-	 */
-	public boolean isAutoValidate() throws InvocationTargetException {
-		if (useGlobalPreference()) {
-			return ConfigurationManager.getManager().getGlobalConfiguration().isAutoValidate();
-		}
-		return super.isAutoValidate();
-	}
-
-	/**
-	 * If the preferences should be used then the preference settings are returned; otherwise return
-	 * the project settings.
-	 */
-	public boolean isBuildValidate() throws InvocationTargetException {
-		if (useGlobalPreference()) {
-			return ConfigurationManager.getManager().getGlobalConfiguration().isBuildValidate();
-		}
-		return super.isBuildValidate();
-	}
-
-	/**
-	 * If the preferences should be used then the preference settings are returned; otherwise return
-	 * the project settings.
-	 */
-	public boolean runAsync() throws InvocationTargetException {
-		if (useGlobalPreference()) {
-			return ConfigurationManager.getManager().getGlobalConfiguration().runAsync();
-		}
-		return super.runAsync();
-	}
-
-	public void resetToDefault() throws InvocationTargetException {
-		// The default values of the project is whatever the preference values are
-		GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
-
-		setAutoValidate(gp.isAutoValidate());
-		setEnabledValidators(gp.getEnabledValidators());
-		setMaximumNumberOfMessages(gp.getMaximumNumberOfMessages());
-		setBuildValidate(gp.isBuildValidate());
-
-		// except for this field, which is unique to the project preferences
-		setDoesProjectOverride(getDoesProjectOverrideDefault());
-	}
-
-	public void resetToDefaultForProjectDescriptionChange() throws InvocationTargetException {
-		// The default values of the project is whatever the preference values are
-		GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
-
-		setAutoValidate(gp.isAutoValidate());
-		setEnabledValidators(gp.getEnabledValidators());
-		setMaximumNumberOfMessages(gp.getMaximumNumberOfMessages());
-		setBuildValidate(gp.isBuildValidate());
-
-		// except for this field, which is unique to the project preferences
-		//setDoesProjectOverride(getDoesProjectOverrideDefault());
-	}
-
-	/**
-	 * The project's nature has changed, so recalculate the validators that are configured on the
-	 * project, and reset the values of the project to the default.
-	 */
-	public void resetProjectNature() {
-		/*
-		 * We do not want to perform the resetting the of the validators as the nature never gets
-		 * reset due to change in the project references - VKB GlobalConfiguration gp =
-		 * ConfigurationManager.getManager().getGlobalConfiguration();
-		 * setValidators(gp.getValidators()); // Reset the validators that are configured on the
-		 * project (the ProjectConfiguration automatically saves only the validators that are
-		 * configured on the project). resetToDefault(); // Given that the project is "new", reset
-		 * its values to the Preferences.
-		 */
-	}
-
-	/**
-	 * This method exists only for migration purposes. The project marker must be deleted after
-	 * migration is complete.
-	 */
-	protected IMarker[] getMarker() {
-		try {
-			// First try to find the 4.03 project marker.
-			IMarker[] allMarkers = getResource().findMarkers(ConfigurationConstants.PRJ_MARKER_403, false, IResource.DEPTH_ZERO);
-
-			// If it doesn't exist, then this might be a 5.0 project marker.
-			if ((allMarkers == null) || (allMarkers.length == 0)) {
-				allMarkers = getResource().findMarkers(ConfigurationConstants.PRJ_MARKER, false, IResource.DEPTH_ZERO);
-			}
-
-			// There should be only one projectmarker.
-			if (allMarkers.length == 1) {
-				return allMarkers;
-			}
-			// Job is done. Nothing to migrate.
-			return null;
-		} catch (CoreException exc) {
-			// Can't find the IMarker? Assume it's deleted.
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ProjectConfiguration::getMarker"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-			return null;
-		}
-	}
-
-	protected void load(IMarker[] marker) {
-		// 4.03 project preferences are different from the current in the following ways:
-		//    1. Only preferences that could be set were the enabled validators and the auto-validate
-		// option.
-		//    2. The preferences were stored in an IMarker instead of a PersistentProperty.
-		// The 5.0 project settings were stored in an IMarker, and the current settings are stored
-		// in a PersistentProperty.
-		// A 5.0 project could have a null validation marker if the validation page was never
-		// opened on it, and if validation was never run.
-		try {
-			if (marker == null) {
-				// Assume default values
-				resetToDefault();
-				return;
-			}
-
-			IMarker prjMarker = marker[0]; // getProjectMarker() has already checked that there's a
-			// marker in the array
-			GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
-
-			String enabledValStr = (String) getValue(prjMarker, ConfigurationConstants.ENABLED_VALIDATORS);
-			ValidatorMetaData[] enabledVal = null;
-			if (enabledValStr == null) {
-				enabledVal = gp.getEnabledValidators();
-			} else {
-				enabledVal = getStringAsEnabledElementsArray(enabledValStr);
-			}
-			setEnabledValidators(enabledVal);
-
-			String version = loadVersion(marker); // In 4.03, every project had its own validators &
-			// auto-validate settings.
-			Boolean boolVal = (Boolean) getValue(prjMarker, ConfigurationConstants.PRJ_OVERRIDEGLOBAL);
-			if ((boolVal == null) && (version.equals(ConfigurationConstants.VERSION4_03))) {
-				// Different default for 4.03. In 4.03, all projects overrode the global, because
-				// the
-				// global preferences didn't exist.
-				setDoesProjectOverride(true);
-			} else if (boolVal == null) {
-				setDoesProjectOverride(getDoesProjectOverrideDefault());
-			} else {
-				setDoesProjectOverride(boolVal.booleanValue());
-			}
-			boolean override = doesProjectOverride();
-
-
-			boolVal = (Boolean) getValue(prjMarker, ConfigurationConstants.AUTO_SETTING);
-			if ((boolVal == null) || (!override)) {
-				setAutoValidate(gp.isAutoValidate());
-			} else {
-				setAutoValidate(boolVal.booleanValue());
-			}
-
-			boolVal = (Boolean) getValue(prjMarker, ConfigurationConstants.BUILD_SETTING);
-			if ((boolVal == null) || (!override)) {
-				setBuildValidate(gp.isBuildValidate());
-			} else {
-				setBuildValidate(boolVal.booleanValue());
-			}
-
-			Integer intVal = (Integer) getValue(prjMarker, ConfigurationConstants.MAXNUMMESSAGES);
-			if ((intVal == null) || (!override)) {
-				setMaximumNumberOfMessages(gp.getMaximumNumberOfMessages());
-			} else {
-				setMaximumNumberOfMessages(intVal.intValue());
-			}
-
-			getResource().getWorkspace().deleteMarkers(marker);
-		} catch (CoreException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ProjectConfiguration.loadMarker "); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ProjectConfiguration.loadMarker InvocationTargetException"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-	}
-
-	protected void copyTo(ProjectConfiguration prjp) throws InvocationTargetException {
-		super.copyTo(prjp);
-
-		// Need to have a distinct method for this child class (i.e., the parameter
-		// is not a ValidationConfiguration) because if this initialization is
-		// called as part of ValidationConfiguration's constructor, then the value of
-		// this field is overwritten. Fields of this class are initialized to the
-		// default after the ValidationConfiguration parent is created.
-		prjp.setDoesProjectOverride(doesProjectOverride());
-	}
-
-	public static boolean getDoesProjectOverrideDefault() {
-		return PRJ_OVERRIDEGLOBAL_DEFAULT;
-	}
-
-	/**
-	 * Return true if the enabled validators have not changed since this ValidationConfiguration was
-	 * constructed, false otherwise. (This method is needed for the Properties and Preference pages;
-	 * if the list of validators hasn't changed, then there is no need to update the task list;
-	 * updating the task list is a costly operation.)
-	 * 
-	 * The "allow" parameter represents whether or not the global "allow projects to override" has
-	 * been changed: - TRUE means that the preference "allow" parameter has been changed - FALSE
-	 * means that the preference "allow" paramter has not been changed
-	 */
-	public boolean hasEnabledValidatorsChanged(ValidatorMetaData[] oldEnabledVmd, boolean allow) throws InvocationTargetException {
-		// First check the obvious: is every enabled validator still enabled, and is
-		// the number of enabled validators the same as it was before? If not, return true.
-		if (super.hasEnabledValidatorsChanged(oldEnabledVmd)) {
-			return true;
-		}
-
-
-		// If the global preference validators have changed, does the task list need to be updated?
-		// PREF | PROJ | UPDATE
-		// ALLOW | OVERRIDE | TASK LIST
-		//------------------------------
-		//     0 | 0 | 1
-		//     0 | 1 | 1
-		//     1 | 0 | 1
-		//     1 | 1 | 0
-		//
-		// If the global "allow" preference changes from "allow" to "don't allow", or vice versa,
-		// and the project overrides the preferences, and the validators differ between the project
-		// and the preferences, then the task list must be updated.
-		if (allow) {
-			// "allow" has changed, so see if the preference and the project validators match.
-			ValidatorMetaData[] projEnabledVmd = super.getEnabledValidators(); // bypass the check
-			// for whether the
-			// global preferences
-			// are to be used or
-			// not
-			GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
-			return gp.hasEnabledValidatorsChanged(projEnabledVmd);
-		}
-
-		return false;
-	}
-
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.operations.internal.attribute.ValidationConfiguration#deserialize(String)
-	 */
-	public void deserialize(String storedConfiguration) throws InvocationTargetException {
-		if (storedConfiguration == null) {
-			resetToDefault();
-		} else if (storedConfiguration != null) {
-			int prjOverrideIndex = storedConfiguration.indexOf(ConfigurationConstants.PRJ_OVERRIDEGLOBAL);
-			int autoIndex = storedConfiguration.indexOf(ConfigurationConstants.AUTO_SETTING);
-
-			String prjOverride = null;
-			if (autoIndex < 0) {
-				// project doesn't override the global
-				prjOverride = storedConfiguration.substring(prjOverrideIndex + ConfigurationConstants.PRJ_OVERRIDEGLOBAL.length());
-			} else {
-				// project overrides the global, so retrieve the values
-				super.deserialize(storedConfiguration);
-				prjOverride = storedConfiguration.substring(prjOverrideIndex + ConfigurationConstants.PRJ_OVERRIDEGLOBAL.length(), autoIndex);
-			}
-			setDoesProjectOverride(Boolean.valueOf(prjOverride).booleanValue());
-		}
-	}
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.operations.internal.attribute.ValidationConfiguration#serialize()
-	 */
-	public String serialize() throws InvocationTargetException {
-		StringBuffer buffer = new StringBuffer();
-		buffer.append(ConfigurationConstants.PRJ_OVERRIDEGLOBAL);
-		buffer.append(String.valueOf(doesProjectOverride()));
-		if (doesProjectOverride()) {
-			// Store common values for the Project configuration only if they differ from the global
-			buffer.append(super.serialize());
-		}
-		return buffer.toString();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.validation.internal.operations.internal.attribute.ValidationConfiguration#getEnabledFullBuildValidators(boolean)
-	 */
-	public ValidatorMetaData[] getEnabledFullBuildValidators(boolean fullBuild) throws InvocationTargetException {
-		if (useGlobalPreference()) {
-			return extractProjectValidators(ConfigurationManager.getManager().getGlobalConfiguration().getEnabledFullBuildValidators(fullBuild), getResource());
-		}
-		return super.getEnabledFullBuildValidators(fullBuild);
-	}
-
-	/**
-	 * Given a set of validators, usually the global preference set, change the set so that it
-	 * contains only the validators configured on this project.
-	 */
-	private static ValidatorMetaData[] extractProjectValidators(ValidatorMetaData[] vmds, IResource resource, boolean onlyReferenced) {
-		ValidationRegistryReader reader = ValidationRegistryReader.getReader();
-		int length = (vmds == null) ? 0 : vmds.length;
-		ValidatorMetaData[] temp = new ValidatorMetaData[length];
-		if (length == 0) {
-			return temp;
-		}
-
-		int count = 0;
-		IProject project = (IProject) resource;
-		for (int i = 0; i < vmds.length; i++) {
-			ValidatorMetaData vmd = vmds[i];
-			if (reader.isConfiguredOnProject(vmd, project)) {
-				if (!onlyReferenced || vmd.isDependentValidator())
-					temp[count++] = vmd;
-			}
-		}
-
-		ValidatorMetaData[] result = new ValidatorMetaData[count];
-		System.arraycopy(temp, 0, result, 0, count);
-		temp = null;
-
-		return result;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.validation.internal.operations.internal.attribute.ValidationConfiguration#getEnabledFullBuildValidators(boolean)
-	 */
-	public ValidatorMetaData[] getEnabledFullBuildValidators(boolean fullBuild, boolean onlyReferenced) throws InvocationTargetException {
-		if (useGlobalPreference()) {
-			return extractProjectValidators(ConfigurationManager.getManager().getGlobalConfiguration().getEnabledFullBuildValidators(fullBuild), getResource(), onlyReferenced);
-		}
-		return super.getEnabledFullBuildValidators(fullBuild, onlyReferenced);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.validation.internal.operations.internal.attribute.ValidationConfiguration#getIncrementalValidators()
-	 */
-	public ValidatorMetaData[] getIncrementalValidators() throws InvocationTargetException {
-		if (useGlobalPreference()) {
-			return extractProjectValidators(ConfigurationManager.getManager().getGlobalConfiguration().getIncrementalValidators(), getResource());
-		}
-		return super.getIncrementalValidators();
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ReferencialFileValidatorExtension.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ReferencialFileValidatorExtension.java
deleted file mode 100644
index 9927fd4..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ReferencialFileValidatorExtension.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on May 3, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.validation.internal;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.operations.ReferencialFileValidator;
-
-/**
- * @author vijayb
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-public class ReferencialFileValidatorExtension {
-	private String id = null;
-	private ReferencialFileValidator instance;
-	private boolean errorCondition = false;
-	private IConfigurationElement element;
-	public static final String REF_FILE_VALIDATOR_EXTENSION = "referencialFileValidator"; //$NON-NLS-1$
-	public static final String RUN = "run"; //$NON-NLS-1$
-	public static final String ATT_ID = "id"; //$NON-NLS-1$
-	public static final String ATT_CLASS = "class"; //$NON-NLS-1$
-
-	/**
-	 *  
-	 */
-	public ReferencialFileValidatorExtension() {
-		super();
-	}
-
-	public ReferencialFileValidator getInstance() {
-		try {
-			if (instance == null && !errorCondition)
-				instance = (ReferencialFileValidator) element.createExecutableExtension("run"); //$NON-NLS-1$
-		} catch (Throwable e) {
-			Logger.getLogger().logError(e);
-			errorCondition = true;
-		}
-		return instance;
-	}
-
-	public ReferencialFileValidatorExtension(IConfigurationElement element) {
-		if(!REF_FILE_VALIDATOR_EXTENSION.equals(element.getName()))
-			throw new IllegalArgumentException("Extensions must be of the type \"" + REF_FILE_VALIDATOR_EXTENSION + "\"."); //$NON-NLS-1$ //$NON-NLS-2$
-		this.element = element;
-		init();
-	}
-
-	private void init() {
-		this.id = this.element.getAttribute(ATT_ID);
-	}
-
-	/**
-	 * @return Returns the id.
-	 */
-	public String getId() {
-		return id;
-	}
-	
-	public IConfigurationElement getElement() {
-		return element;
-	}
-
-	/**
-	 * @param id
-	 *            The id to set.
-	 */
-	public void setId(String id) {
-		this.id = id;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ReferencialFileValidatorRegistryReader.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ReferencialFileValidatorRegistryReader.java
deleted file mode 100644
index 59f803a..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ReferencialFileValidatorRegistryReader.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on May 3, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.validation.internal;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.RegistryReader;
-import org.eclipse.wst.validation.internal.operations.ReferencialFileValidator;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-/**
- * @author vijayb
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-public class ReferencialFileValidatorRegistryReader extends RegistryReader {
-	static ReferencialFileValidatorRegistryReader instance = null;
-	protected List referencialFileValidationExtensions;
-
-	/**
-	 * @param arg0
-	 * @param arg1
-	 * @param arg2
-	 */
-	public ReferencialFileValidatorRegistryReader() {
-		super(ValidationPlugin.PLUGIN_ID, "referencialFileValidator"); //$NON-NLS-1$
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.RegistryReader#readElement(org.eclipse.core.runtime.IConfigurationElement)
-	 */
-	public boolean readElement(IConfigurationElement element) {
-		if (ReferencialFileValidatorExtension.REF_FILE_VALIDATOR_EXTENSION.equals(element.getName())) {
-			addExtension(element);
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Sets the extension point.
-	 * 
-	 * @param extensions
-	 *            The extensions to set
-	 */
-	protected void addExtension(IConfigurationElement newExtension) {
-
-    	//add to the list of post validator extesions only if the ext is not added yet
-    	boolean containsExt = true;
-    	List extensions = getReferencialFileValidationExtensions();
-    	Iterator it = extensions.iterator();
-    	while(it.hasNext()) {
-    		ReferencialFileValidatorExtension ext = (ReferencialFileValidatorExtension)it.next();
-    		if(!ext.getElement().getAttribute("id").equals(newExtension.getAttribute("id")))
-    			containsExt = false;
-    	}
-    	if(!containsExt ||getReferencialFileValidationExtensions().isEmpty())
-    		getReferencialFileValidationExtensions().add(new ReferencialFileValidatorExtension(newExtension));
-    
-		getReferencialFileValidationExtensions().add(new ReferencialFileValidatorExtension(newExtension));
-	}
-
-	/**
-	 * Sets the extension point.
-	 * 
-	 * @param extensions
-	 *            The extensions to set
-	 */
-	protected void addExtensionPoint(ReferencialFileValidatorExtension newExtension) {
-		if (referencialFileValidationExtensions == null)
-			referencialFileValidationExtensions = new ArrayList();
-		referencialFileValidationExtensions.add(newExtension);
-	}
-
-	/**
-	 * @return the appropriate handler for the project based on priorities of those which are
-	 *         available and enabled
-	 */
-	public ReferencialFileValidator getReferencialFileValidator() {
-		ReferencialFileValidatorExtension refFileValExt;
-		for (Iterator refFileValItr = getReferencialFileValidationExtensions().iterator(); refFileValItr.hasNext();) {
-			refFileValExt = (ReferencialFileValidatorExtension) refFileValItr.next();
-			return refFileValExt.getInstance();
-		}
-		return null;
-	}
-
-	/**
-	 * Gets the instance.
-	 * 
-	 * @return Returns a EJBCodegenHandlerExtensionReader
-	 */
-	public static ReferencialFileValidatorRegistryReader getInstance() {
-		if (instance == null) {
-			instance = new ReferencialFileValidatorRegistryReader();
-			instance.readRegistry();
-		}
-		return instance;
-	}
-
-	/**
-	 * @return Returns the handlerExtensions.
-	 */
-	protected List getReferencialFileValidationExtensions() {
-		if (referencialFileValidationExtensions == null)
-			referencialFileValidationExtensions = new ArrayList();
-		return referencialFileValidationExtensions;
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/RegistryConstants.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/RegistryConstants.java
deleted file mode 100644
index aba5d1c..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/RegistryConstants.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-
-import org.eclipse.wst.validation.internal.operations.IRuleGroup;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-
-/**
- * Validation constants needed to declare an extension point, and to implement an extension.
- */
-public interface RegistryConstants {
-	public static final String PLUGIN_ID = ValidationPlugin.PLUGIN_ID;
-	public static final String VALIDATOR_EXT_PT_ID = "validator"; //$NON-NLS-1$ // extension point declaration of the validator
-
-	/* package */static final String TAG_RUN_CLASS = "run"; //$NON-NLS-1$ // identifies the Validator class
-	/* package */static final String TAG_FILTER = "filter"; //$NON-NLS-1$ // identifies a filter -- type and/or name -- used to filter out resources which are not to be validated. (i.e., if the resource doesn't pass this filter test, don't validate it.)
-	/* package */static final String TAG_HELPER_CLASS = "helper"; //$NON-NLS-1$ // IValidationContext which loads the MOF model for the IValidator
-	/* package */static final String TAG_PROJECT_NATURE = "projectNature"; //$NON-NLS-1$ // identifies the projects which the validator should run on
-	/* package */static final String TAG_AGGREGATE_VALIDATORS = "aggregateValidator"; //$NON-NLS-1$ // identifies a validator(s) which this validator aggregates. This value is used to remove all messages owned by a particular validator. Aggregate validators cannot be shared. Only one validator may use an aggregate of that type.
-
-	/* package */static final String ATT_OBJECT_CLASS = "objectClass"; //$NON-NLS-1$ // identifies a type
-	/* package */static final String ATT_NAME_FILTER = "nameFilter"; //$NON-NLS-1$ // identifies a name (may include the '*' wildcard anywhere in the name)
-	/* package */static final String ATT_ID = "id"; //$NON-NLS-1$ // identifies a unique id to filter on
-	/* package */static final String ATT_CLASS = "class"; //$NON-NLS-1$ // identifies a class name of a tag, e.g. "helper class", or "run class"
-	/* package */static final String ATT_ACTION_FILTER = "action"; //$NON-NLS-1$ // identifies the incremental validation actions for which a resource should be filtered in
-	/* package */static final String ATT_INCREMENTAL = "incremental"; //$NON-NLS-1$ // identifies whether or not the validator supports incremental build validation. Default is true (i.e., incremental builds are supported).
-	/* package */static final boolean ATT_INCREMENTAL_DEFAULT = true; // The incremental default.
-	/* package */static final String ATT_FULLBUILD = "fullBuild"; //$NON-NLS-1$ // identifies whether or not the validator supports full build validation. Default is true (i.e., full build validation is supported).
-	/* package */static final boolean ATT_FULLBUILD_DEFAULT = true; // The build default.
-	/* package */static final String ATT_ENABLED = "enabled"; //$NON-NLS-1$ // identifies whether or not the validator is enabled by default. Default is "true" (enabled).
-	/* package */static final boolean ATT_ENABLED_DEFAULT = true; // The "enabled" default.
-	/* package */static final String ATT_INCLUDE = "include"; //$NON-NLS-1$ // Include projects with this nature
-	/* package */static final boolean ATT_INCLUDE_DEFAULT = true; // By default, if "include" is not
-	// specified in the projectNature
-	// element, then assume that the
-	// nature is included.
-	/* package */static final String ATT_RULE_GROUP = "ruleGroup"; //$NON-NLS-1$ // identifies the different validation passes which this validator recognizes. The values are identified in IRuleGroup.
-	/* package */static final int ATT_RULE_GROUP_DEFAULT = IRuleGroup.PASS_FAST; // the default pass
-	// includes only the
-	// FAST PASS. FULL
-	// can be invoked
-	// only explicitly by
-	// an operation.
-	/* package */static final String ATT_CASE_SENSITIVE = "caseSensitive"; //$NON-NLS-1$
-	/* package */static final String ATT_ASYNC = "async"; //$NON-NLS-1$ // Is the validator thread-safe? 
-	/* package */static final boolean ATT_ASYNC_DEFAULT = false; // The "can validator run
-	// asynchronously" default. Initially
-	// set to false, but in future this
-	// will be changed to true.
-
-
-	/* package */static final String TAG_MIGRATE = "migrate"; //$NON-NLS-1$ // the "migrate" section of the validator
-	/* package */static final String TAG_VALIDATOR = "validator"; //$NON-NLS-1$ // the "validator" element of the "migrate" section
-	/* package */static final String ATT_FROM = "from"; //$NON-NLS-1$ // the fully-qualified class name of the former validator class
-	/* package */static final String ATT_TO = "to"; //$NON-NLS-1$ // the fully-qualified class name of the current validator class
-	static final String DEP_VALIDATOR = "dependentValidator"; //$NON-NLS-1$
-	static final String DEP_VAL_VALUE = "depValValue"; //$NON-NLS-1$
-	static final String MARKER_ID = "markerId"; //$NON-NLS-1$
-	static final String MARKER_ID_VALUE = "markerIdValue"; //$NON-NLS-1$
-	static final boolean DEP_VAL_VALUE_DEFAULT = false;
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ResourceConstants.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ResourceConstants.java
deleted file mode 100644
index 7d7ba30..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ResourceConstants.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-
-
-/**
- * Constants used to access the string resources associated with the plugin.
- * 
- * See the plugin.properties file, in the plugin's directory, for the contents of the strings.
- */
-public interface ResourceConstants {
-	// A marker cannot be added to the task list.
-	public static final String VBF_EXC_CANNOT_ADD_MARKER = "VBF_EXC_CANNOT_ADD_MARKER"; //$NON-NLS-1$ 
-
-	// A marker cannot be removed from the task list.
-	public static final String VBF_EXC_CANNOT_REMOVE_MARKER = "VBF_EXC_CANNOT_REMOVE_MARKER"; //$NON-NLS-1$ 
-
-	// Internal error has occurred.
-	public static final String VBF_EXC_INTERNAL = "VBF_EXC_INTERNAL"; //$NON-NLS-1$ 
-
-	// If the validator cannot be loaded because it didn't specify a helper
-	public static final String VBF_EXC_HELPER_MISSING = "VBF_EXC_HELPER_MISSING"; //$NON-NLS-1$ 
-
-	// If the validator cannot be loaded because its helper cannot be loaded
-	public static final String VBF_EXC_HELPER_CANNOTLOAD = "VBF_EXC_HELPER_CANNOTLOAD"; //$NON-NLS-1$ 
-
-	// A java.lang.Runtime error has occured during the build.
-	public static final String VBF_EXC_RUNTIME = "VBF_EXC_RUNTIME"; //$NON-NLS-1$ 
-
-	// If the "Validator" extension point has been removed from the plugin.xml file.
-	public static final String VBF_EXC_MISSING_VALIDATOR_EP = "VBF_EXC_MISSING_VALIDATOR_EP"; //$NON-NLS-1$ 
-
-	// If the user has specified an invalid type filter in their plugin.xml file.
-	// i.e., it isn't an instance of IResource.
-	public static final String VBF_EXC_INVALID_TYPE_FILTER = "VBF_EXC_INVALID_TYPE_FILTER"; //$NON-NLS-1$ 
-
-	// The validator extension has made a mistake in its plugin.xml's projectNature tag
-	public static final String VBF_EXC_MISSING_PROJECTNATURE_ID = "VBF_EXC_MISSING_PROJECTNATURE_ID"; //$NON-NLS-1$ 
-
-	// The validator extension has made a mistake in its plugin.xml's syntax.
-	public static final String VBF_EXC_VALIDATORNAME_IS_NULL = "VBF_EXC_VALIDATORNAME_IS_NULL"; //$NON-NLS-1$ 
-
-	// Title for the IProgressMonitor.
-	public static final String VBF_STATUS_PROGRESSMONITOR_TITLE = "VBF_STATUS_PROGRESSMONITOR_TITLE"; //$NON-NLS-1$ 
-
-	// Status line for the IProgressMonitor
-	public static final String VBF_STATUS_INITIALIZING = "VBF_STATUS_INITIALIZING"; //$NON-NLS-1$ 
-
-	// If the user has cancelled validation, each validator might have cleanup to do. This message
-	// is shown to tell the user which validator is being cleaned up at the moment.
-	public static final String VBF_STATUS_VALIDATOR_CLEANUP = "VBF_STATUS_VALIDATOR_CLEANUP"; //$NON-NLS-1$ 
-
-	// If the user cancelled validation, remove all of the validator's tasks from the task list, and
-	// put an entry saying that validation on {project} using {validator} was cancelled.
-	public static final String VBF_STATUS_VALIDATOR_TERMINATED = "VBF_STATUS_VALIDATOR_TERMINATED"; //$NON-NLS-1$ 
-
-	// Before a validator is begun, this message informs the user that validation, using a
-	// particular validator, has begun
-	public static final String VBF_STATUS_STARTING_VALIDATION = "VBF_STATUS_STARTING_VALIDATION"; //$NON-NLS-1$ 
-
-	// After a validator is finished, this message informs the user that validtaion, using a
-	// particular validator, has completed.
-	public static final String VBF_STATUS_ENDING_VALIDATION = "VBF_STATUS_ENDING_VALIDATION"; //$NON-NLS-1$ 
-
-	// If a validator throws an unchecked exception, this message is displayed to the user.
-	public static final String VBF_STATUS_ENDING_VALIDATION_ABNORMALLY = "VBF_STATUS_ENDING_VALIDATION_ABNORMALLY"; //$NON-NLS-1$ 
-
-	// If the build's getDelta(getProject()) method returns null, let the user know that a full
-	// validation will be performed because there's no delta information.
-	public static final String VBF_STATUS_NULL_DELTA = "VBF_STATUS_NULL_DELTA"; //$NON-NLS-1$ 
-
-	public static final String VBF_EXC_SYNTAX_NULL_NAME = "VBF_EXC_SYNTAX_NULL_NAME"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_SYNTAX_NO_HELPER = "VBF_EXC_SYNTAX_NO_HELPER"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_SYNTAX_NO_HELPER_CLASS = "VBF_EXC_SYNTAX_NO_HELPER_CLASS"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_SYNTAX_NO_HELPER_THROWABLE = "VBF_EXC_SYNTAX_NO_HELPER_THROWABLE"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_SYNTAX_NO_VAL_RUN = "VBF_EXC_SYNTAX_NO_VAL_RUN"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_SYNTAX_NO_VAL_CLASS = "VBF_EXC_SYNTAX_NO_VAL_CLASS"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_SYNTAX_NO_VAL_THROWABLE = "VBF_EXC_SYNTAX_NO_VAL_THROWABLE"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_SYNTAX_NO_VAL_NULL = "VBF_EXC_SYNTAX_NO_VAL_NULL"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_INVALID_RESOURCE = "VBF_EXC_INVALID_RESOURCE"; //$NON-NLS-1$ 
-
-	public static final String VBF_EXC_NULLCREATE = "VBF_EXC_NULLCREATE"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_NULLSAVE = "VBF_EXC_NULLSAVE"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_SAVE = "VBF_EXC_SAVE"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_NULLRETRIEVE = "VBF_EXC_NULLRETRIEVE"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_RETRIEVE = "VBF_EXC_RETRIEVE"; //$NON-NLS-1$ 
-
-	public static final String VBF_EXC_BADVMD = "VBF_EXC_BADVMD"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_OPENPRJ = "VBF_EXC_OPENPRJ"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_EXISTPRJ = "VBF_EXC_EXISTPRJ"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_BADPRJ = "VBF_EXC_BADPRJ"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_MULTIPRJ = "VBF_EXC_MULTIPRJ"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_BADVAL = "VBF_EXC_BADVAL"; //$NON-NLS-1$ 
-
-	public static final String VBF_STATUS_START_REMOVING_OLD_MESSAGES = "VBF_STATUS_START_REMOVING_OLD_MESSAGES"; //$NON-NLS-1$ 
-	public static final String VBF_STATUS_FINISH_REMOVING_OLD_MESSAGES = "VBF_STATUS_FINISH_REMOVING_OLD_MESSAGES"; //$NON-NLS-1$ 
-
-	public static final String VBF_TASK_WARN_MESSAGE_LIMIT_VAL = "VBF_TASK_WARN_MESSAGE_LIMIT_VAL"; //$NON-NLS-1$ 
-
-	public static final String VBF_EXC_DISABLEV = "VBF_EXC_DISABLEV"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_DISABLEH = "VBF_EXC_DISABLEH"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_ORPHAN_IVALIDATOR = "VBF_EXC_ORPHAN_IVALIDATOR"; //$NON-NLS-1$ 
-
-	public static final String VBF_STATUS_LOOKING = "VBF_STATUS_LOOKING"; //$NON-NLS-1$ 
-	public static final String VBF_STATUS_LOOKINGDONE = "VBF_STATUS_LOOKINGDONE"; //$NON-NLS-1$ 
-	public static final String VBF_STATUS_REMOVING = "VBF_STATUS_REMOVING"; //$NON-NLS-1$ 
-	public static final String VBF_STATUS_REMOVINGDONE = "VBF_STATUS_REMOVINGDONE"; //$NON-NLS-1$ 
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ResourceHandler.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ResourceHandler.java
deleted file mode 100644
index 0cf1cd4..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ResourceHandler.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-import java.util.logging.Level;
-
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-
-/**
- * This class retrieves the Strings from the .properties file appropriate for the machine's Locale.
- * 
- *  
- */
-public class ResourceHandler {
-	//TODO Make this class final once the public ResourceHandler has been deleted.
-	private static ResourceBundle _bundle = null;
-
-	protected ResourceHandler() {
-		//TODO Make this method private once the public ResourceHandler has been deleted.
-		super();
-	}
-
-	/**
-	 * Return the resource bundle which contains the messages, as identified by
-	 */
-	public static ResourceBundle getBundle() {
-		if (_bundle == null) {
-			try {
-				_bundle = ResourceBundle.getBundle(ValidationPlugin.getBundleName());
-			} catch (MissingResourceException exc) {
-				_bundle = null;
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.FINE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("org.eclipse.wst.validation.internal.operations.internal.ResourceHandler.getBundle()"); //$NON-NLS-1$
-					entry.setText("Cannot find bundle " + ValidationPlugin.getBundleName()); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.FINE, entry);
-				}
-			}
-		}
-		return _bundle;
-	}
-
-	public static String getExternalizedMessage(String key) {
-		try {
-			ResourceBundle bundle = getBundle();
-			if (bundle == null) {
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.FINE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("org.eclipse.wst.validation.internal.operations.internal.ResourceHandler.getExternalizedMessage(String)"); //$NON-NLS-1$
-					entry.setText("Resource bundle is null"); //$NON-NLS-1$
-					logger.write(Level.FINE, entry);
-				}
-				return key;
-			}
-
-			return bundle.getString(key);
-		} catch (NullPointerException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("org.eclipse.wst.validation.internal.operations.ui.ResourceHandler.getExternalizedMessage(String)"); //$NON-NLS-1$
-				entry.setText("Cannot find message id " + key); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.FINE, entry);
-			}
-		}
-		return key;
-	}
-
-	public static String getExternalizedMessage(String key, String[] parms) {
-		String res = ""; //$NON-NLS-1$
-		try {
-			res = java.text.MessageFormat.format(getExternalizedMessage(key), parms);
-		} catch (MissingResourceException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("org.eclipse.wst.validation.internal.operations.internal.ResourceHandler.getExternalizedMessage(String, String[])"); //$NON-NLS-1$
-				entry.setText("Cannot find message id " + key); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.FINE, entry);
-			}
-		} catch (NullPointerException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("org.eclipse.wst.validation.internal.operations.internal.ResourceHandler.getExternalizedMessage(String, String[])"); //$NON-NLS-1$
-				entry.setText("Cannot format message id " + key + " with " + parms.length + " parameters."); //$NON-NLS-1$  //$NON-NLS-2$  //$NON-NLS-3$
-				entry.setTargetException(exc);
-				logger.write(Level.FINE, entry);
-			}
-		}
-		return res;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/TaskListUtility.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/TaskListUtility.java
deleted file mode 100644
index cdbf991..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/TaskListUtility.java
+++ /dev/null
@@ -1,571 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-import java.util.Map;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-import org.eclipse.wst.validation.internal.provisional.core.IMessage;
-
-/**
- * This class must be called only by the validation framework.
- * 
- * This singleton interacts with the eclipse workbench's Task list. TaskListUtility adds and removes
- * tasks from the list.
- * 
- * This class must not be called outside of an IWorkspaceRunnable or IRunnableWithProgress. Many
- * resource deltas can be generated by the methods in this class.
- */
-public class TaskListUtility implements ConfigurationConstants {
-	protected static final int DEPTH_INFINITE = IResource.DEPTH_INFINITE;
-	protected static final int DEPTH_ZERO = IResource.DEPTH_ZERO;
-	protected static final String VALIDATION_MARKER_TARGETOBJECT = "targetObject"; //$NON-NLS-1$
-	private final static IMarker[] NO_MARKERS = new IMarker[0];
-
-	public static IWorkspaceRoot getRoot() {
-		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-		return root;
-	}
-
-	/**
-	 * This method is here for use by the SABER validator's reporter instance ONLY. Do not use. See
-	 * defect 260144 for details.
-	 */
-	public static IMarker setPriority(IMarker item, int priority) throws CoreException {
-		Map attrib = item.getAttributes();
-		attrib.put(IMarker.PRIORITY, new Integer(priority));
-		item.setAttributes(attrib);
-		return item;
-	}
-	
-	/**
-	 * This method adds a message to a resource in the task list.
-	 */
-	public static IMarker addTask(String pluginId, IResource resource, String location, String messageId, String message, int markerType, String markerName, String targetObjectName, String groupName, int offset, int length) throws CoreException {
-		if ((message == null) || (resource == null)) {
-			return null;
-		}
-
-		int severity = getSeverity(markerType);
-
-		// Allow duplicate entries in the task list.
-		// Prior to a full validation, the validation framework will remove all messages owned
-		// by a validator before it is executed.
-		// Prior to an incremental validation, the validation framework will remove all messages,
-		// on each of the changed resources, owned by a validator before it is invoked.
-		// 
-		// It is up to the validator to make sure that it is not adding the same message
-		// in more than one place, and also to clear out any old messages which are not cleared
-		// by the validation framework.
-		IMarker item = null;
-		if(markerName != null && markerName.length() >0 )
-			 item = resource.createMarker(markerName); // add a validation marker
-		else
-		     item = resource.createMarker(VALIDATION_MARKER); // add a validation marker
-
-		// For performance reasons, replace the multiple setAttribute
-		// calls above with a single setAttributes call.
-		boolean offsetSet = ((offset != IMessage.OFFSET_UNSET) && (length != IMessage.OFFSET_UNSET));
-		int size = (offsetSet) ? 10 : 8; // add CHAR_START, CHAR_END only if the offset is set. If
-		// the offset is set, it takes precendence over the line
-		// number. (eclipse's rule, not mine.)
-		String[] attribNames = new String[size];
-		Object[] attribValues = new Object[size];
-
-		// Very first thing, add the owner. That way, if the code dies
-		// before things are persisted, hopefully this marker will be persisted.
-		// Hopefully, eclipse WILL persist this field, as requested.
-		attribNames[0] = VALIDATION_MARKER_OWNER;
-		attribValues[0] = pluginId;
-		attribNames[1] = VALIDATION_MARKER_SEVERITY; // this validation severity is stored, in
-		// addition to the marker severity, to enable
-		// more than one severity of message to be
-		// displayed. e.g. ERROR | WARNING (using
-		// binary OR). The IMarker constants are
-		// regular decimal constants.
-		attribValues[1] = new Integer(markerType);
-		attribNames[2] = VALIDATION_MARKER_TARGETOBJECT; // to distinguish between messages which
-		// are registered on an IResource, but
-		// against different target objects
-		attribValues[2] = ((targetObjectName == null) ? "" : targetObjectName); //$NON-NLS-1$
-		attribNames[3] = VALIDATION_MARKER_GROUP;
-		attribValues[3] = ((groupName == null) ? "" : groupName); //$NON-NLS-1$
-		attribNames[4] = IMarker.MESSAGE;
-		attribValues[4] = message;
-		attribNames[5] = VALIDATION_MARKER_MESSAGEID;
-		attribValues[5] = messageId;
-
-		attribNames[6] = IMarker.SEVERITY; // IMarker.SEVERITY_ERROR, IMarker.SEVERITY_WARNING,
-		// IMarker.SEVERITY_INFO
-		attribValues[6] = new Integer(severity);
-		try {
-			// If the location is a line number, store it as a line number
-			Integer lineNumber = Integer.valueOf(location);
-			attribNames[7] = IMarker.LINE_NUMBER;
-			attribValues[7] = lineNumber;
-		} catch (NumberFormatException exc) {
-			// Otherwise, store it as a text location
-			attribNames[7] = IMarker.LOCATION;
-			attribValues[7] = location;
-		}
-
-		if (offsetSet) {
-			attribNames[8] = IMarker.CHAR_START;
-			attribValues[8] = new Integer(offset);
-			attribNames[9] = IMarker.CHAR_END;
-			attribValues[9] = new Integer(offset + length);
-		}
-
-		item.setAttributes(attribNames, attribValues);
-
-		return item;
-	}
-
-	/**
-	 * This method adds a message to a resource in the task list.
-	 */
-	public static IMarker addTask(String pluginId, IResource resource, String location, String messageId, String message, int markerType, String targetObjectName, String groupName, int offset, int length) throws CoreException {
-		if ((message == null) || (resource == null)) {
-			return null;
-		}
-
-		int severity = getSeverity(markerType);
-
-		// Allow duplicate entries in the task list.
-		// Prior to a full validation, the validation framework will remove all messages owned
-		// by a validator before it is executed.
-		// Prior to an incremental validation, the validation framework will remove all messages,
-		// on each of the changed resources, owned by a validator before it is invoked.
-		// 
-		// It is up to the validator to make sure that it is not adding the same message
-		// in more than one place, and also to clear out any old messages which are not cleared
-		// by the validation framework.
-		IMarker item = resource.createMarker(VALIDATION_MARKER); // add a validation marker
-
-		// For performance reasons, replace the multiple setAttribute
-		// calls above with a single setAttributes call.
-		boolean offsetSet = ((offset != IMessage.OFFSET_UNSET) && (length != IMessage.OFFSET_UNSET));
-		int size = (offsetSet) ? 10 : 8; // add CHAR_START, CHAR_END only if the offset is set. If
-		// the offset is set, it takes precendence over the line
-		// number. (eclipse's rule, not mine.)
-		String[] attribNames = new String[size];
-		Object[] attribValues = new Object[size];
-
-		// Very first thing, add the owner. That way, if the code dies
-		// before things are persisted, hopefully this marker will be persisted.
-		// Hopefully, eclipse WILL persist this field, as requested.
-		attribNames[0] = VALIDATION_MARKER_OWNER;
-		attribValues[0] = pluginId;
-		attribNames[1] = VALIDATION_MARKER_SEVERITY; // this validation severity is stored, in
-		// addition to the marker severity, to enable
-		// more than one severity of message to be
-		// displayed. e.g. ERROR | WARNING (using
-		// binary OR). The IMarker constants are
-		// regular decimal constants.
-		attribValues[1] = new Integer(markerType);
-		attribNames[2] = VALIDATION_MARKER_TARGETOBJECT; // to distinguish between messages which
-		// are registered on an IResource, but
-		// against different target objects
-		attribValues[2] = ((targetObjectName == null) ? "" : targetObjectName); //$NON-NLS-1$
-		attribNames[3] = VALIDATION_MARKER_GROUP;
-		attribValues[3] = ((groupName == null) ? "" : groupName); //$NON-NLS-1$
-		attribNames[4] = IMarker.MESSAGE;
-		attribValues[4] = message;
-		attribNames[5] = VALIDATION_MARKER_MESSAGEID;
-		attribValues[5] = messageId;
-
-		attribNames[6] = IMarker.SEVERITY; // IMarker.SEVERITY_ERROR, IMarker.SEVERITY_WARNING,
-		// IMarker.SEVERITY_INFO
-		attribValues[6] = new Integer(severity);
-		try {
-			// If the location is a line number, store it as a line number
-			Integer lineNumber = Integer.valueOf(location);
-			attribNames[7] = IMarker.LINE_NUMBER;
-			attribValues[7] = lineNumber;
-		} catch (NumberFormatException exc) {
-			// Otherwise, store it as a text location
-			attribNames[7] = IMarker.LOCATION;
-			attribValues[7] = location;
-		}
-
-		if (offsetSet) {
-			attribNames[8] = IMarker.CHAR_START;
-			attribValues[8] = new Integer(offset);
-			attribNames[9] = IMarker.CHAR_END;
-			attribValues[9] = new Integer(offset + length);
-		}
-
-		item.setAttributes(attribNames, attribValues);
-
-		return item;
-	}
-
-	/**
-	 * Given one of the SeverityEnum severities, return the IMarker severity int that is its
-	 * equivalent.
-	 * 
-	 * This method was made public for the SaberReporter. No one other than TaskListUtility, or the
-	 * SaberReporter, should use this method!
-	 *  
-	 */
-	private static int getSeverity(int severityEnumValue) {
-		switch (severityEnumValue) {
-			case (IMessage.HIGH_SEVERITY) : {
-				return IMarker.SEVERITY_ERROR;
-			}
-
-			case (IMessage.LOW_SEVERITY) : {
-				return IMarker.SEVERITY_INFO;
-			}
-
-			case (IMessage.NORMAL_SEVERITY) : {
-				return IMarker.SEVERITY_WARNING;
-			}
-
-			case (IMessage.ALL_MESSAGES) :
-			case (IMessage.ERROR_AND_WARNING) :
-			default : {
-				// assume it's a warning.
-				return IMarker.SEVERITY_WARNING;
-			}
-		}
-	}
-
-	private static int getDepth(IResource resource) {
-		if (resource instanceof IProject) {
-			return DEPTH_INFINITE; // DEPTH_INFINITE means get this project's markers, and the
-			// markers belonging to the project's children.
-		} else if (resource instanceof IWorkspaceRoot) {
-			// Needed for the ValidationMigrator when it checks for orphan tasks.
-			return DEPTH_INFINITE; // DEPTH_INFINITE means get all of the markers in the workspace
-		}
-
-		return DEPTH_ZERO; // DEPTH_ZERO means just this resource, not its children
-	}
-
-	public static IMarker[] getValidationTasks(int severity, IProject project) {
-		// DEPTH_INFINITE means get this project's markers, and the markers
-		// belonging to the project's children.
-		return getValidationTasks(project, severity);
-	}
-
-	public static IMarker[] getValidationTasks(IResource resource, int severity) {
-		return getValidationTasks(resource, severity, getDepth(resource));
-	}
-
-	/**
-	 * Return true if the marker is owned by the ownerId.
-	 */
-	public static boolean isOwner(IMarker marker, String ownerId) {
-		try {
-			Object owner = marker.getAttribute(VALIDATION_MARKER_OWNER);
-			if ((owner == null) || !(owner instanceof String)) {
-				// The ValidationMigrator will remove any "unowned" validation markers.
-				return false;
-			}
-
-			return ((String) owner).equals(ownerId);
-		} catch (CoreException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("TaskListUtility.isOwner(IMarker, ownerId)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-			return false;
-		}
-	}
-
-	private static IMarker[] getValidationTasks(IResource resource, int severity, int depth) {
-		IMarker[] tempMarkers = null;
-		int validCount = 0;
-		try {
-			IMarker[] allMarkers = null;
-			try {
-				allMarkers = resource.findMarkers(VALIDATION_MARKER, true, depth); // false means
-				// only consider
-				// PROBLEM_MARKER,
-				// not variants
-				// of
-				// PROBLEM_MARKER.
-				// Since addTask
-				// only adds
-				// PROBLEM_MARKER,
-				// we don't need
-				// to consider
-				// its subtypes.
-			} catch (CoreException exc) {
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("TaskListUtility.getValidationTasks(IResource, int)"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-				return NO_MARKERS;
-			}
-
-			// Now filter in the markers, based on severity type.
-			if (allMarkers.length != 0) {
-				tempMarkers = new IMarker[allMarkers.length];
-				for (int i = 0; i < allMarkers.length; i++) {
-					IMarker marker = allMarkers[i];
-					Integer filterSeverity = (Integer) marker.getAttribute(VALIDATION_MARKER_SEVERITY);
-					if (filterSeverity == null) {
-						// odd...marker wasn't created correctly. How could this happen?
-						// Default to the current severity and add it to the list.
-						try {
-							marker.setAttribute(IMarker.SEVERITY, getSeverity(severity));
-						} catch (CoreException exc) {
-							Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-							if (logger.isLoggingLevel(Level.SEVERE)) {
-								LogEntry entry = ValidationPlugin.getLogEntry();
-								entry.setSourceID("TaskListUtility.getValidationTasks(int, IResource, int)"); //$NON-NLS-1$
-								entry.setTargetException(exc);
-								logger.write(Level.SEVERE, entry);
-							}
-							continue;
-						} catch (Throwable exc) {
-							Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-							if (logger.isLoggingLevel(Level.SEVERE)) {
-								LogEntry entry = ValidationPlugin.getLogEntry();
-								entry.setSourceID("TaskListUtility.getValidationTasks(int, IResource, int)"); //$NON-NLS-1$
-								entry.setTargetException(exc);
-								logger.write(Level.SEVERE, entry);
-							}
-							continue;
-						}
-					} else if ((severity & filterSeverity.intValue()) == 0) {
-						continue;
-					}
-					tempMarkers[validCount++] = marker;
-				}
-			}
-		} catch (CoreException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("TaskListUtility.getValidationTasks(int, IResource, int)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-
-		if (validCount == 0) {
-			return NO_MARKERS;
-		}
-
-		IMarker[] validMarkers = new IMarker[validCount];
-		System.arraycopy(tempMarkers, 0, validMarkers, 0, validCount);
-		return validMarkers;
-	}
-
-	public static IMarker[] getValidationTasks(IResource resource, String messageOwner) {
-		return getValidationTasks(resource, new String[]{messageOwner}, getDepth(resource));
-	}
-
-	public static IMarker[] getValidationTasks(IResource resource, String[] messageOwners) {
-		return getValidationTasks(resource, messageOwners, getDepth(resource));
-	}
-
-	private static IMarker[] getValidationTasks(IResource resource, String[] messageOwners, int depth) {
-		IMarker[] markers = getValidationTasks(resource, IMessage.ALL_MESSAGES, depth);
-		if (markers.length == 0) {
-			return NO_MARKERS;
-		}
-
-		IMarker[] temp = new IMarker[markers.length];
-		int validCount = 0;
-		for (int i = 0; i < markers.length; i++) {
-			IMarker marker = markers[i];
-
-			try {
-				Object owner = marker.getAttribute(VALIDATION_MARKER_OWNER);
-				if ((owner == null) || !(owner instanceof String)) {
-					// The ValidationMigrator will remove any "unowned" validation markers.
-					continue;
-				}
-
-				for (int j = 0; j < messageOwners.length; j++) {
-					String messageOwner = messageOwners[j];
-					if (((String) owner).equals(messageOwner)) {
-						temp[validCount++] = marker;
-						break;
-					}
-				}
-			} catch (CoreException exc) {
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("TaskListUtility.getValidationTasks(project, String[])"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-				return NO_MARKERS;
-			}
-		}
-
-		IMarker[] result = new IMarker[validCount];
-		System.arraycopy(temp, 0, result, 0, validCount);
-		return result;
-	}
-
-	/**
-	 * This method retrieves all validation tasks from the resource. If depth is INFINITE, child
-	 * tasks are returned as well. Only the tasks which are owned by the specified messageOwner, and
-	 * apply to the named IMessage's target object (objectName) will be returned.
-	 */
-	private static IMarker[] getValidationTasks(IResource resource, String[] messageOwner, String objectName, String groupName, int depth) throws CoreException {
-		if ((messageOwner == null) || (resource == null)) {
-			return NO_MARKERS;
-		}
-
-		int validCount = 0;
-		IMarker[] validList = null;
-		IMarker[] markers = getValidationTasks(resource, messageOwner, depth);
-		if (markers != null) {
-			validList = new IMarker[markers.length];
-			for (int i = 0; i < markers.length; i++) {
-				IMarker marker = markers[i];
-
-				// If more than one target object resolves to the same resource, removing one
-				// target's
-				// messages should not remove the other target object's messages.
-				if (objectName != null) {
-					Object targetObject = marker.getAttribute(VALIDATION_MARKER_TARGETOBJECT);
-					if ((targetObject == null) || !(targetObject instanceof String) || !(((String) targetObject).equals(objectName))) {
-						continue;
-					}
-				}
-
-				if (groupName != null) {
-					Object group = marker.getAttribute(VALIDATION_MARKER_GROUP);
-					if ((group == null) || !(group instanceof String) || !(((String) group).equals(groupName))) {
-						continue;
-					}
-				}
-
-				validList[validCount++] = marker;
-			}
-		}
-
-		if (validCount == 0) {
-			return NO_MARKERS;
-		}
-
-		IMarker[] result = new IMarker[validCount];
-		System.arraycopy(validList, 0, result, 0, validCount);
-		return result;
-	}
-
-	/**
-	 * Remove all validation messages from the resource and its children.
-	 */
-	public static void removeAllTasks(IResource resource) {
-		if (resource == null) {
-			return;
-		}
-
-		try {
-			IMarker[] markers = getValidationTasks(resource, IMessage.ALL_MESSAGES);
-			ResourcesPlugin.getWorkspace().deleteMarkers(markers);
-		} catch (CoreException exc) {
-			// Couldn't remove the task from the task list for some reason...
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchMonitor.removeAllMessages(String[], IResource, String)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-	}
-
-	/**
-	 * This method removes all tasks from the resource. If the resource is an IProject, all tasks
-	 * are also removed from the project's children.
-	 */
-	public static void removeAllTasks(IResource resource, String[] owners) throws CoreException {
-		removeAllTasks(resource, owners, null); // null means remove messages from all target
-		// objects
-	}
-
-	/**
-	 * This method removes all messages from a resource in the task list.
-	 */
-	public static void removeAllTasks(IResource resource, String owner, String objectName) throws CoreException {
-		removeAllTasks(resource, new String[]{owner}, objectName);
-	}
-
-	public static void removeAllTasks(IResource resource, String[] owners, String objectName) throws CoreException {
-		removeAllTasks(resource, owners, objectName, getDepth(resource));
-	}
-
-	protected static void removeAllTasks(IResource resource, String[] owners, String objectName, int depth) throws CoreException {
-		removeTaskSubset(resource, owners, objectName, null, depth); // null means no group name
-	}
-
-	/**
-	 * This method removes a subset of tasks from the project, including child tasks. Every task
-	 * which belongs to the group, identified by groupName, will be removed.
-	 */
-	public static void removeTaskSubset(IResource resource, String[] owners, String objectName, String groupName) throws CoreException {
-		removeTaskSubset(resource, owners, objectName, groupName, getDepth(resource));
-	}
-
-	/**
-	 * This method removes a subset of tasks from the project, including child tasks. Every task
-	 * which belongs to the group, identified by groupName, will be removed.
-	 */
-	protected static void removeTaskSubset(IResource resource, String[] owners, String objectName, String groupName, int depth) throws CoreException {
-		if ((owners == null) || (resource == null)) {
-			return;
-		}
-
-		IMarker[] allTasks = getValidationTasks(resource, owners, objectName, groupName, depth);
-		if (allTasks.length > 0) {
-			ResourcesPlugin.getWorkspace().deleteMarkers(allTasks);
-		}
-	}
-
-	/**
-	 * This method changes all validator markers which are owned by "from" to make their owner "to".
-	 */
-	public static void updateOwner(String from, String to) throws CoreException {
-		updateOwner(from, to, getRoot());
-	}
-
-	/**
-	 * This method changes all validator markers on the IResource and its children. All markers
-	 * owned by "from" have their owner reassigned to "to".
-	 */
-	public static void updateOwner(String from, String to, IResource resource) throws CoreException {
-		IMarker[] ownedMarkers = getValidationTasks(resource, from);
-		if (ownedMarkers == null) {
-			return;
-		}
-
-		for (int i = 0; i < ownedMarkers.length; i++) {
-			IMarker marker = ownedMarkers[i];
-			marker.setAttribute(VALIDATION_MARKER_OWNER, to);
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/TimeEntry.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/TimeEntry.java
deleted file mode 100644
index d63ed17..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/TimeEntry.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-import org.eclipse.jem.util.logger.LogEntry;
-
-
-/**
- * This class should be used when logging "elapsed time" information and nothing else. Instead of
- * creating a new instance of this class every time it is needed, for performance reasons, create an
- * instance and reuse it. The text in this class is never translated.
- */
-public class TimeEntry extends LogEntry {
-	private String _toolName = null;
-	private String _details = null;
-	private String _projectName = null;
-	private String _sourceId = null;
-	private int _executionMap = 0x0;
-
-	public TimeEntry() {
-		super();
-	}
-
-	/**
-	 * The name of the tool (e.g., a validator, a builder) whose time is measured.
-	 */
-	public String getToolName() {
-		return _toolName;
-	}
-
-	public void setToolName(String name) {
-		_toolName = name;
-	}
-
-
-	/**
-	 * If there are any details that need to be recorded about the tool, such as what input it runs
-	 * on, this field stores the value. This field is optional.
-	 */
-	public String getDetails() {
-		return _details;
-	}
-
-	public void setDetails(String d) {
-		_details = d;
-	}
-
-	/**
-	 * The name of the project on which the tool ran.
-	 */
-	public String getProjectName() {
-		return _projectName;
-	}
-
-	public void setProjectName(String name) {
-		_projectName = name;
-	}
-
-	/**
-	 * The id of the code that launched the tool.
-	 */
-	public String getSourceID() {
-		return _sourceId;
-	}
-
-	public void setSourceID(String id) {
-		_sourceId = id;
-	}
-
-	/**
-	 * If, in addition to elapsed time, the tool needs to track the execution path of a method, this
-	 * field stores the hexadecimal number that tracks the path. See ValidationBuilder::build for an
-	 * example that uses an execution path.
-	 */
-	public int getExcecutionMap() {
-		return _executionMap;
-	}
-
-	public void setExecutionMap(int map) {
-		_executionMap = map;
-	}
-
-	/**
-	 * Clear all of the fields back to their initial setting so that this TimeEntry instance can be
-	 * reused.
-	 */
-	public void reset() {
-		_toolName = null;
-		_details = null;
-		_projectName = null;
-		_sourceId = null;
-		_executionMap = 0;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/VThreadManager.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/VThreadManager.java
deleted file mode 100644
index 05b3891..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/VThreadManager.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-
-import java.util.Vector;
-import java.util.logging.Level;
-
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-
-/**
- * This class manages (queue, invoke, etc.) the Runnables that perform the validation for a
- * particular validator.
- */
-public class VThreadManager {
-	private static VThreadManager _manager = null;
-	private static final int MAX_NUM_OF_RESTART = 5; // the maximum number of times that the thread
-	// should attempt to ignore a Throwable and
-	// carry on
-
-	private Thread _validationThread = null; // This thread checks if the current Runnable is
-	// finished, and if so, loads the first Runnable off of
-	// the queue and starts it.
-	volatile int restart = 0; // how many times has the thread been restarted?
-	volatile Jobs _jobs = null;
-
-	private VThreadManager() {
-		_jobs = new Jobs();
-
-		// Start the validation thread to check for queued ValidationOperation
-		Runnable validationRunnable = new Runnable() {
-			public void run() {
-				while (true) {
-					try {
-						if (restart > MAX_NUM_OF_RESTART) {
-							// something has gone seriously, seriously wrong
-							Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-							if (logger.isLoggingLevel(Level.SEVERE)) {
-								LogEntry entry = ValidationPlugin.getLogEntry();
-								entry.setSourceID("VThreadManager::validationRunnable"); //$NON-NLS-1$
-								entry.setText("restart = " + restart); //$NON-NLS-1$
-								logger.write(Level.SEVERE, entry);
-							}
-							break;
-						}
-
-						Runnable job = getJobs().dequeue(); // If currentRunnable is null, there's
-						// nothing on the queue. Shouldn't
-						// happen with a semaphore.
-						if (job != null) {
-							getJobs().setActive(true);
-							job.run();
-							getJobs().setActive(false);
-						}
-					} catch (Throwable exc) {
-						// This exception is added as FINE instead of SEVERE because it's not
-						// improbable
-						// that an exception will be thrown
-						restart++;
-						getJobs().setActive(false);
-
-						Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-						if (logger.isLoggingLevel(Level.FINE)) {
-							LogEntry entry = ValidationPlugin.getLogEntry();
-							entry.setSourceID("VThreadManager::validationRunnable"); //$NON-NLS-1$
-							entry.setTargetException(exc);
-							logger.write(Level.FINE, entry);
-						}
-					} finally {
-						//do nothing
-					}
-				}
-			}
-		};
-
-		_validationThread = new Thread(validationRunnable, "ValidationThread"); //$NON-NLS-1$
-		_validationThread.start();
-	}
-
-	public static VThreadManager getManager() {
-		if (_manager == null) {
-			_manager = new VThreadManager();
-		}
-		return _manager;
-	}
-
-	Jobs getJobs() {
-		return _jobs;
-	}
-
-	public void queue(Runnable runnable) {
-		getJobs().queue(runnable);
-	}
-
-	/**
-	 * Return true if all of the Runnables have been run.
-	 */
-	public boolean isDone() {
-		return getJobs().isDone();
-	}
-
-	private class Jobs {
-		private Vector __jobs = null; // The queued Runnables that need to be run.
-		private boolean _isActive = false; // Is a job being run in the validation thread?
-
-		public Jobs() {
-			__jobs = new Vector();
-		}
-
-		public synchronized void queue(Runnable runnable) {
-			// If there is a thread running already, then it must finish before another validation
-			// thread is launched, or the validation messages could reflect the last thread
-			// finished,
-			// instead of the last state of changes.
-
-			// Have to wait for the current Runnable to finish, so add this to the end of the queue
-			__jobs.add(runnable);
-			notifyAll();
-		}
-
-		/**
-		 * Pop the Runnable off of the head of the queue.
-		 */
-		synchronized Runnable dequeue() {
-			while (__jobs.size() == 0) {
-				try {
-					wait();
-				} catch (InterruptedException exc) {
-					//Ignore
-				}
-			} // Block on the semaphore; break when a job has been added to the queue.
-
-			Runnable job = null;
-			if (__jobs.size() > 0) {
-				job = (Runnable) __jobs.get(0);
-				if (job != null) {
-					__jobs.remove(0);
-				}
-			}
-			return job;
-		}
-
-		public synchronized boolean isActive() {
-			return _isActive;
-		}
-
-		public synchronized void setActive(boolean active) {
-			_isActive = active;
-		}
-
-		/**
-		 * Return true if all of the Runnables have been run.
-		 */
-		public synchronized boolean isDone() {
-			return ((__jobs.size() == 0) && !isActive());
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationConfiguration.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationConfiguration.java
deleted file mode 100644
index a9b7847..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationConfiguration.java
+++ /dev/null
@@ -1,769 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-
-/**
- * This class represents the user's preference or project settings.
- * 
- * This class is populated from the multiple persistent properties, and is kept as a session
- * property while the resource is open.
- */
-public abstract class ValidationConfiguration {
-	private IResource _resource = null;
-	private boolean _autoValidate = getAutoValidateDefault();
-	private boolean _buildValidate = getBuildValidateDefault();
-	private int _maxMessages = getMaximumNumberOfMessagesDefault();
-	private String _version = null;
-	private Map _validators = null; // Map of all validators (ValidatorMetaData) configured on the
-	// project or installed globally. The value is a Boolean; TRUE
-	// means that the VMD is enabled, FALSE means that the VMD is
-	// disabled.
-	private boolean _runAsync = getAsyncDefault();
-
-	public static String getEnabledElementsAsString(Set elements) {
-		if (elements == null) {
-			return null;
-		}
-
-		StringBuffer buffer = new StringBuffer();
-		Iterator iterator = elements.iterator();
-		while (iterator.hasNext()) {
-			buffer.append(((ValidatorMetaData) iterator.next()).getValidatorUniqueName());
-			buffer.append(ConfigurationConstants.ELEMENT_SEPARATOR);
-		}
-		return buffer.toString();
-	}
-
-	public static String getEnabledElementsAsString(Object[] elements) {
-		StringBuffer buffer = new StringBuffer();
-		for (int i = 0; i < elements.length; i++) {
-			buffer.append(((ValidatorMetaData) elements[i]).getValidatorUniqueName());
-			buffer.append(ConfigurationConstants.ELEMENT_SEPARATOR);
-		}
-		return buffer.toString();
-	}
-
-	public static Set getStringAsEnabledElements(String elements) {
-		if (elements == null) {
-			return null;
-		}
-
-		HashSet result = new HashSet();
-		StringTokenizer tokenizer = new StringTokenizer(elements, ConfigurationConstants.ELEMENT_SEPARATOR);
-		while (tokenizer.hasMoreTokens()) {
-			String elem = tokenizer.nextToken();
-			ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(elem);
-			if (vmd != null) {
-				result.add(vmd);
-			}
-		}
-		return result;
-	}
-
-	public static ValidatorMetaData[] getStringAsEnabledElementsArray(String elements) {
-		if (elements == null) {
-			return null;
-		}
-
-		StringTokenizer tokenizer = new StringTokenizer(elements, ConfigurationConstants.ELEMENT_SEPARATOR);
-		ValidatorMetaData[] result = new ValidatorMetaData[tokenizer.countTokens()];
-		int count = 0;
-		while (tokenizer.hasMoreTokens()) {
-			String elem = tokenizer.nextToken();
-			ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(elem);
-			if (vmd != null) {
-				result[count++] = vmd;
-			}
-		}
-
-		if (count != result.length) {
-			ValidatorMetaData[] trimResult = new ValidatorMetaData[count];
-			System.arraycopy(result, 0, trimResult, 0, count);
-			return trimResult;
-		}
-
-		return result;
-	}
-
-	public static IWorkspaceRoot getRoot() {
-		return ResourcesPlugin.getWorkspace().getRoot();
-	}
-
-	protected ValidationConfiguration() throws InvocationTargetException {
-		_validators = new HashMap();
-	}
-
-	protected ValidationConfiguration(IResource resource, ValidatorMetaData[] validators) throws InvocationTargetException {
-		this();
-
-		if (resource == null) {
-			throw new InvocationTargetException(null, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_NULLCREATE));
-		}
-
-		setResource(resource);
-		setValidators(validators);
-	}
-
-	private void setResource(IResource resource) {
-		_resource = resource;
-	}
-
-	public boolean isAutoValidate() throws InvocationTargetException {
-		return _autoValidate;
-	}
-
-	public void setAutoValidate(boolean auto) {
-		_autoValidate = auto;
-	}
-
-	public boolean isBuildValidate() throws InvocationTargetException {
-		return _buildValidate;
-	}
-
-	public void setBuildValidate(boolean build) {
-		_buildValidate = build;
-	}
-
-	public boolean runAsync() throws InvocationTargetException {
-		return _runAsync;
-	}
-
-	public void setAsync(boolean doRunInBackgroundThread) throws InvocationTargetException {
-		_runAsync = doRunInBackgroundThread;
-	}
-
-	public ValidatorMetaData[] getEnabledValidators() throws InvocationTargetException {
-		return getValidators(true);
-	}
-
-	/**
-	 * If "incremental" is true, return the enabled incremental validators. If "incremental" is
-	 * false, return the enabled non-incremental validators.
-	 */
-	public ValidatorMetaData[] getEnabledIncrementalValidators(boolean incremental) throws InvocationTargetException {
-		ValidatorMetaData[] temp = new ValidatorMetaData[numberOfValidators()];
-		Iterator iterator = getValidatorMetaData().keySet().iterator();
-		int count = 0;
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-			Boolean bvalue = (Boolean) getValidatorMetaData().get(vmd);
-			if (bvalue.booleanValue() == true) {
-				// If the validator is enabled
-				if ((vmd.isIncremental() && incremental) || (!vmd.isIncremental() && !incremental)) {
-					temp[count++] = vmd;
-				}
-			}
-		}
-
-		ValidatorMetaData[] result = new ValidatorMetaData[count];
-		System.arraycopy(temp, 0, result, 0, count);
-		return result;
-	}
-
-	/**
-	 * If "fullBuild" is true, return the enabled validators that support full builds. If
-	 * "fullBuild" is false, return the enabled validators that do not support full builds.
-	 */
-	public ValidatorMetaData[] getEnabledFullBuildValidators(boolean fullBuild) throws InvocationTargetException {
-		return getEnabledFullBuildValidators(fullBuild, false);
-	}
-
-	public ValidatorMetaData[] getEnabledFullBuildValidators(boolean fullBuild, boolean onlyReferenced) throws InvocationTargetException {
-		ValidatorMetaData[] temp = new ValidatorMetaData[numberOfValidators()];
-		Iterator iterator = getValidatorMetaData().keySet().iterator();
-		int count = 0;
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-			Boolean bvalue = (Boolean) getValidatorMetaData().get(vmd);
-			if (bvalue.booleanValue() == true) {
-				// If the validator is enabled
-				if (vmd == null)
-					continue;
-				if ((vmd.isFullBuild() && fullBuild) || (!vmd.isFullBuild() && !fullBuild)) {
-					if (!onlyReferenced || vmd.isDependentValidator())
-						temp[count++] = vmd;
-				}
-			}
-		}
-
-		ValidatorMetaData[] result = new ValidatorMetaData[count];
-		System.arraycopy(temp, 0, result, 0, count);
-		return result;
-	}
-
-	public void setEnabledValidators(ValidatorMetaData[] vmds) {
-		// First, "disable" all validators
-		Map all = getValidatorMetaData();
-		Iterator iterator = all.keySet().iterator();
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-			all.put(vmd, Boolean.FALSE);
-		}
-
-		// Then enable only the validators in the array
-		if ((vmds == null) || (vmds.length == 0)) {
-			return;
-		}
-		for (int i = 0; i < vmds.length; i++) {
-			all.put(vmds[i], Boolean.TRUE);
-		}
-	}
-
-	private Map getValidatorMetaData() {
-		return _validators;
-	}
-
-	public ValidatorMetaData[] getDisabledValidators() throws InvocationTargetException {
-		return getValidators(false);
-	}
-
-	/**
-	 * Return an array of ValidatorMetaData - if value is false, return the disabled validators; if
-	 * value is true, return the enabled validators.
-	 */
-	private ValidatorMetaData[] getValidators(boolean value) throws InvocationTargetException {
-		ValidatorMetaData[] temp = new ValidatorMetaData[numberOfValidators()];
-		Iterator iterator = getValidatorMetaData().keySet().iterator();
-		int count = 0;
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-			Boolean bvalue = (Boolean) getValidatorMetaData().get(vmd);
-			if (bvalue.booleanValue() == value) {
-				temp[count++] = vmd;
-			}
-		}
-
-		ValidatorMetaData[] result = new ValidatorMetaData[count];
-		System.arraycopy(temp, 0, result, 0, count);
-		return result;
-	}
-
-	/**
-	 * Return all incremental validators for this preference; either every installed validator
-	 * (global) or every validator configured on the project (project).
-	 */
-	public ValidatorMetaData[] getIncrementalValidators() throws InvocationTargetException {
-		ValidatorMetaData[] temp = new ValidatorMetaData[numberOfValidators()];
-		Iterator iterator = getValidatorMetaData().keySet().iterator();
-		int count = 0;
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-			Boolean bvalue = (Boolean) getValidatorMetaData().get(vmd);
-			if (bvalue.booleanValue() == true) {
-				// If the validator is enabled
-				if (vmd.isIncremental()) {
-					temp[count++] = vmd;
-				}
-			}
-		}
-
-		ValidatorMetaData[] result = new ValidatorMetaData[count];
-		System.arraycopy(temp, 0, result, 0, count);
-		return result;
-	}
-
-	/**
-	 * Return all validators for this preference; either every installed validator (global) or every
-	 * validator configured on the project (project).
-	 */
-	public ValidatorMetaData[] getValidators() throws InvocationTargetException {
-		return convertToArray(_validators.keySet());
-	}
-
-	public void setValidators(ValidatorMetaData[] vmds) {
-		_validators.clear();
-		for (int i = 0; i < vmds.length; i++) {
-			if (vmds[i] == null)
-				continue;
-			_validators.put(vmds[i], (vmds[i].isEnabledByDefault() ? Boolean.TRUE : Boolean.FALSE));
-		}
-	}
-
-	/**
-	 * Returns the number of configured validators on the given project or installed validators in
-	 * the workspace.
-	 */
-	public int numberOfValidators() throws InvocationTargetException {
-		return _validators.size();
-	}
-
-	public int numberOfEnabledIncrementalValidators() throws InvocationTargetException {
-		return numberOfIncrementalValidators(getEnabledValidators());
-	}
-
-	public int numberOfIncrementalValidators() throws InvocationTargetException {
-		return numberOfIncrementalValidators(getValidators());
-	}
-
-	private static int numberOfIncrementalValidators(ValidatorMetaData[] vmds) {
-		int count = 0;
-		for (int i = 0; i < vmds.length; i++) {
-			ValidatorMetaData vmd = vmds[i];
-			if (vmd.isIncremental()) {
-				count++;
-			}
-		}
-		return count;
-	}
-
-	/**
-	 * Returns the number of enabled validators on the project or workspace.
-	 */
-	public int numberOfEnabledValidators() throws InvocationTargetException {
-		return getEnabledValidators().length;
-	}
-
-	/**
-	 * Returns the number of disabled validators on the project or workspace.
-	 */
-	public int numberOfDisabledValidators() throws InvocationTargetException {
-		return getDisabledValidators().length;
-	}
-
-	public int getMaximumNumberOfMessages() throws InvocationTargetException {
-		return _maxMessages;
-	}
-
-	public void setMaximumNumberOfMessages(int max) {
-		_maxMessages = max;
-	}
-
-	/**
-	 * The value returned from this method is guaranteed to be non-null.
-	 */
-	public final String getVersion() throws InvocationTargetException {
-		if (_version == null) {
-			loadVersion();
-		}
-		return _version;
-	}
-
-	private void setVersion(String version) {
-		_version = version;
-	}
-
-	/**
-	 * This preference has been migrated; change the version to the current version.
-	 */
-	public void markVersionCurrent() {
-		// The version should not be marked current until the migration is complete
-		// (i.e., ValidationMigrator has been invoked.) Migrating the user's configuration
-		// is only the first step of the migration.
-		setVersion(ConfigurationConstants.CURRENT_VERSION);
-	}
-
-	public boolean isVersionCurrent() throws InvocationTargetException {
-		return getVersion().equals(ConfigurationConstants.CURRENT_VERSION);
-	}
-
-	// IResource could be an IProject or an IWorkspaceRoot
-	public IResource getResource() {
-		return _resource;
-	}
-
-	/**
-	 * Return true if the validator is enabled on this preference.
-	 */
-	public boolean isEnabled(String validatorClassName) throws InvocationTargetException {
-		if (validatorClassName == null) {
-			return false;
-		}
-
-		ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validatorClassName);
-		return isEnabled(vmd);
-	}
-
-	/**
-	 * Return true if the validator is enabled on this preference.
-	 */
-	public boolean isEnabled(ValidatorMetaData vmd) throws InvocationTargetException {
-		if (vmd == null) {
-			return false;
-		}
-
-		Boolean value = (Boolean) getValidatorMetaData().get(vmd);
-		if (value == null) {
-			return false;
-		}
-
-		return value.booleanValue();
-	}
-
-	/**
-	 * Once all of the fields have been updated on this ValidationConfiguration instance, this
-	 * preference should be stored back on the IResource for later use. This method must be called
-	 * manually by the validation framework once the fields of this type have been updated.
-	 */
-	public final void passivate() throws InvocationTargetException {
-		try {
-			if (getResource() == null) {
-				throw new InvocationTargetException(null, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_NULLSAVE));
-			}
-
-			getResource().setSessionProperty(ConfigurationConstants.USER_PREFERENCE, this);
-		} catch (CoreException exc) {
-			throw new InvocationTargetException(exc, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_SAVE, new String[]{getResource().getName()}));
-		}
-	}
-
-	/**
-	 * Reset the values to the default values.
-	 */
-	public abstract void resetToDefault() throws InvocationTargetException;
-
-	protected Boolean convertToBoolean(boolean value) {
-		return (value == true ? Boolean.TRUE : Boolean.FALSE);
-	}
-
-	protected Integer convertToInteger(int value) {
-		return new Integer(value);
-	}
-
-	protected boolean convertToBoolean(String value) {
-		Boolean b = Boolean.valueOf(value);
-		return b.booleanValue();
-	}
-
-	protected int convertToInt(String value) {
-		Integer t = Integer.valueOf(value);
-		return t.intValue();
-	}
-
-	public static ValidatorMetaData[] convertToArray(Collection c) {
-		int length = (c == null) ? 0 : c.size();
-		ValidatorMetaData[] result = new ValidatorMetaData[length];
-		if (length == 0) {
-			return result;
-		}
-
-		Iterator iterator = c.iterator();
-		int count = 0;
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-			result[count++] = vmd;
-		}
-
-		return result;
-	}
-
-	public static ValidatorMetaData[] convertToArray(Object[] c) {
-		int length = (c == null) ? 0 : c.length;
-		ValidatorMetaData[] result = new ValidatorMetaData[length];
-		if (length == 0) {
-			return result;
-		}
-
-		System.arraycopy(c, 0, result, 0, length);
-		return result;
-	}
-
-	/**
-	 * Save the values of these fields before the project or workspace is closed.
-	 */
-	public void store() throws InvocationTargetException {
-		if (getResource() == null) {
-			throw new InvocationTargetException(null, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_NULLSAVE));
-		}
-
-		try {
-			getResource().setPersistentProperty(ConfigurationConstants.USER_PREFERENCE, serialize());
-		} catch (CoreException exc) {
-			throw new InvocationTargetException(exc, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_SAVE, new String[]{getResource().getName()}));
-		}
-	}
-
-	/**
-	 * Load and store the version number, but nothing else. The version isn't a preference, but it's
-	 * stored and loaded as if it is. Because the load mechanism is different between an IProject
-	 * and the IWorkspaceRoot, keep the load mechanism inside the ValidationConfiguration
-	 * implementation, but initialize only the minimum at first. After the project has been
-	 * migrated, load the other fields (loading the other fields before the migration may overwrite
-	 * the values of those fields).
-	 */
-	protected final void loadVersion() throws InvocationTargetException {
-		if (getResource() == null) {
-			throw new InvocationTargetException(null, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_NULLRETRIEVE));
-		}
-
-		IMarker[] marker = getMarker();
-		String version = null;
-		if (marker == null) {
-			// either a new workspace or already migrated; proceed as normal
-			version = loadVersion(getResource());
-		} else {
-			// migrate
-			version = loadVersion(marker);
-		}
-		setVersion(version);
-	}
-
-	protected final String loadVersion(IMarker[] marker) throws InvocationTargetException {
-		String version = (String) getValue(marker[0], ConfigurationConstants.VERSION);
-		if (version == null) {
-			return ConfigurationConstants.VERSION4_03;
-		}
-
-		return version;
-	}
-
-	protected final String loadVersion(IResource resource) throws InvocationTargetException {
-		try {
-			// This method will be called in one of two situations:
-			//    1. This is a new workspace and no preferences exist.
-			//    2. This is a migrated workspace and the old preferences have already been created as
-			// persistent properties.
-			String storedConfiguration = resource.getPersistentProperty(ConfigurationConstants.USER_PREFERENCE);
-			String version = null;
-			if (storedConfiguration == null) {
-				version = getVersionDefault();
-			} else {
-				int versionIndex = storedConfiguration.indexOf(ConfigurationConstants.VERSION);
-				if (versionIndex != -1)
-					version = storedConfiguration.substring(versionIndex + ConfigurationConstants.VERSION.length());
-			}
-
-			if (version == null) {
-				return getVersionDefault();
-			}
-
-			return version;
-		} catch (CoreException exc) {
-			throw new InvocationTargetException(exc, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_RETRIEVE, new String[]{getResource().getName()}));
-		}
-	}
-
-	/**
-	 * Load the values of these fields when the project or workspace is opened.
-	 */
-	protected final void load() throws InvocationTargetException {
-		try {
-			if (getResource() == null) {
-				throw new InvocationTargetException(null, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_NULLRETRIEVE));
-			}
-
-			IMarker[] marker = getMarker();
-			if (marker == null) {
-				// either a new workspace or already migrated; proceed as normal
-				load(getResource());
-			} else {
-				// migrate
-				load(marker);
-			}
-		} catch (InvocationTargetException exc) {
-			throw exc;
-		} catch (Throwable exc) {
-			String resourceName = (getResource() == null) ? "null" : getResource().getName(); //$NON-NLS-1$
-			throw new InvocationTargetException(exc, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_RETRIEVE, new String[]{resourceName}));
-		}
-	}
-
-	/**
-	 * Return the IMarker that used to store the preference information, if the marker exists. (If
-	 * it doesn't exist, then it's already been migrated.)
-	 */
-	protected abstract IMarker[] getMarker();
-
-	protected abstract void load(IMarker[] marker) throws InvocationTargetException;
-
-	protected Object getValue(IMarker marker, String attribName) {
-		if (marker == null) {
-			return null;
-		}
-
-		try {
-			return marker.getAttribute(attribName);
-		} catch (CoreException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidationConfiguration::getValue(" + attribName + ")"); //$NON-NLS-1$ //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-			return null;
-		}
-	}
-
-	protected boolean getValue(IMarker marker, String attribName, boolean defaultValue) {
-		Boolean bool = (Boolean) getValue(marker, attribName);
-		if (bool == null) {
-			return defaultValue;
-		}
-
-		return bool.booleanValue();
-	}
-
-	protected int getValue(IMarker marker, String attribName, int defaultValue) {
-		Integer integer = (Integer) getValue(marker, attribName);
-		if (integer == null) {
-			return defaultValue;
-		}
-
-		return integer.intValue();
-	}
-
-	protected String getValue(IMarker marker, String attribName, String defaultValue) {
-		String string = (String) getValue(marker, attribName);
-		if (string == null) {
-			return defaultValue;
-		}
-
-		return string;
-	}
-
-	protected final void load(IResource resource) throws InvocationTargetException {
-		// This method will be called in one of two situations:
-		//    1. This is a new workspace and no preferences exist.
-		//    2. This is a migrated workspace and the old preferences have already been created as
-		// persistent properties.
-		try {
-			String storedConfiguration = resource.getPersistentProperty(ConfigurationConstants.USER_PREFERENCE);
-			deserialize(storedConfiguration);
-		} catch (CoreException exc) {
-			throw new InvocationTargetException(exc, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_RETRIEVE, new String[]{getResource().getName()}));
-		}
-	}
-
-	protected void copyTo(ValidationConfiguration up) throws InvocationTargetException {
-		up.setVersion(getVersion());
-		up.setResource(getResource());
-		up.setValidators(getValidators());
-		up.setAutoValidate(isAutoValidate());
-		up.setBuildValidate(isBuildValidate());
-		up.setEnabledValidators(getEnabledValidators());
-		up.setMaximumNumberOfMessages(getMaximumNumberOfMessages());
-	}
-
-	/**
-	 * Return true if the enabled validators have not changed since this ValidationConfiguration was
-	 * constructed, false otherwise. (This method is needed for the Properties and Preference pages;
-	 * if the list of validators hasn't changed, then there is no need to update the task list;
-	 * updating the task list is a costly operation.)
-	 */
-	protected boolean hasEnabledValidatorsChanged(ValidatorMetaData[] oldEnabledVmd) throws InvocationTargetException {
-		// First check the obvious: is every enabled validator still enabled, and is
-		// the number of enabled validators the same as it was before? If not, return true.
-		if (oldEnabledVmd == null) {
-			// Something's gone wrong...
-			return true;
-		}
-
-		for (int i = 0; i < oldEnabledVmd.length; i++) {
-			ValidatorMetaData vmd = oldEnabledVmd[i];
-			if (!isEnabled(vmd)) {
-				return true;
-			}
-		}
-
-		// Everything that was enabled is still enabled; have any additional
-		// validators been enabled?
-		if (numberOfEnabledValidators() != oldEnabledVmd.length) {
-			return true;
-		}
-
-		return false;
-	}
-
-	protected String serialize() throws InvocationTargetException {
-		StringBuffer buffer = new StringBuffer();
-		buffer.append(ConfigurationConstants.AUTO_SETTING);
-		buffer.append(String.valueOf(isAutoValidate()));
-		buffer.append(ConfigurationConstants.BUILD_SETTING);
-		buffer.append(String.valueOf(isBuildValidate()));
-		buffer.append(ConfigurationConstants.MAXNUMMESSAGES);
-		buffer.append(String.valueOf(getMaximumNumberOfMessages()));
-		buffer.append(ConfigurationConstants.ASYNC_SETTING);
-		buffer.append(String.valueOf(runAsync()));
-		buffer.append(ConfigurationConstants.ENABLED_VALIDATORS);
-		buffer.append(getEnabledElementsAsString(getEnabledValidators()));
-		buffer.append(ConfigurationConstants.VERSION);
-		buffer.append(getVersion());
-		return buffer.toString();
-	}
-
-	/**
-	 * Deserialize everything except the version number; the version is deserialized first, in the
-	 * loadVersion() method.
-	 */
-	protected void deserialize(String storedConfiguration) throws InvocationTargetException {
-		if (storedConfiguration == null || storedConfiguration.length() == 0) {
-			// Assume that the configuration has never been set (new workspace).
-			resetToDefault();
-			return;
-		}
-
-		int autoIndex = storedConfiguration.indexOf(ConfigurationConstants.AUTO_SETTING);
-		int buildIndex = storedConfiguration.indexOf(ConfigurationConstants.BUILD_SETTING);
-		int maxIndex = storedConfiguration.indexOf(ConfigurationConstants.MAXNUMMESSAGES);
-		int asyncIndex = storedConfiguration.indexOf(ConfigurationConstants.ASYNC_SETTING);
-		int enabledIndex = storedConfiguration.indexOf(ConfigurationConstants.ENABLED_VALIDATORS);
-		int versionIndex = storedConfiguration.indexOf(ConfigurationConstants.VERSION);
-
-		String auto = storedConfiguration.substring(autoIndex + ConfigurationConstants.AUTO_SETTING.length(), buildIndex);
-		String build = storedConfiguration.substring(buildIndex + ConfigurationConstants.BUILD_SETTING.length(), maxIndex);
-		String max = storedConfiguration.substring(maxIndex + ConfigurationConstants.MAXNUMMESSAGES.length(), asyncIndex);
-		String async = storedConfiguration.substring(asyncIndex + ConfigurationConstants.ASYNC_SETTING.length(), enabledIndex);
-		String enabled = storedConfiguration.substring(enabledIndex + ConfigurationConstants.ENABLED_VALIDATORS.length(), versionIndex);
-
-		setAutoValidate(Boolean.valueOf(auto).booleanValue());
-		setBuildValidate(Boolean.valueOf(build).booleanValue());
-		setMaximumNumberOfMessages(Integer.valueOf(max).intValue());
-		setAsync(Boolean.valueOf(async).booleanValue());
-		setEnabledValidators(getStringAsEnabledElementsArray(enabled));
-	}
-
-	public static boolean getAutoValidateDefault() {
-		return ConfigurationConstants.DEFAULT_AUTO_SETTING;
-	}
-
-	public static boolean getBuildValidateDefault() {
-		return ConfigurationConstants.DEFAULT_BUILD_SETTING;
-	}
-
-	public static ValidatorMetaData[] getEnabledValidatorsDefault() {
-		return ConfigurationConstants.DEFAULT_ENABLED_VALIDATORS;
-	}
-
-	public static int getMaximumNumberOfMessagesDefault() {
-		return ConfigurationConstants.DEFAULT_MAXNUMMESSAGES;
-	}
-
-	public static String getVersionDefault() {
-		// If the version can't be retrieved, assume that it's a new workspace. (A null version
-		// could also mean a 4.03 workspace, but that's taken care of in the load(IMarker[])
-		// method.)
-		return ConfigurationConstants.CURRENT_VERSION;
-	}
-
-	public static boolean getAsyncDefault() {
-		return ConfigurationConstants.DEFAULT_ASYNC;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationFactoryImpl.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationFactoryImpl.java
deleted file mode 100644
index 058e8f8..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationFactoryImpl.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-import org.eclipse.wst.validation.internal.provisional.ValidationFactory;
-import org.eclipse.wst.validation.internal.provisional.core.IValidator;
-
-public class ValidationFactoryImpl implements ValidationFactory {
-	static ValidationFactory inst = null;
-	
-	public ValidationFactoryImpl() {
-		super();
-	}
-
-	public static ValidationFactory getInstance() {
-		if(inst == null)
-			inst = new ValidationFactoryImpl();
-		return inst;
-	}
-
-	public IValidator getValidator(String validatorUniqueId) throws InstantiationException {
-		ValidationRegistryReader reader = ValidationRegistryReader.getReader();
-		return reader.getValidator(validatorUniqueId);
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationRegistryReader.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationRegistryReader.java
deleted file mode 100644
index cbe0914..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationRegistryReader.java
+++ /dev/null
@@ -1,1394 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.operations.IRuleGroup;
-import org.eclipse.wst.validation.internal.operations.IWorkbenchContext;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-import org.eclipse.wst.validation.internal.provisional.core.IValidator;
-
-
-/**
- * ValidationRegistryReader is a singleton who reads the plugin registry for Validator extensions.
- * The read is done once (in the constructor), and the list of validators can be accessed by calling
- * "getValidatorMetaData(String)" on this class. The read is triggered by a call from
- * ValidatorManager's loadValidatorMetaData(IProject) method. ValidatorManager delegates the load
- * call to this class, and if this class is null, the singleton is new'ed up, and the registry is
- * read.
- * 
- * No Validator should need to know about this class. The only class which should call
- * ValidationRegistryReader is ValidatorManager.
- * 
- * The Validator itself is initialized in the "initializeValidator" method.
- * 
- * <extension point="org.eclipse.wst.validation.internal.provisional.core.core.validator" id="EJBValidator" name="EJB
- * Validator"> <validator><projectNature id="com.ibm.etools.j2ee.EJBNature" include="false"/>
- * <filter objectClass="org.eclipse.core.resources.IFile" nameFilter = "ejb-jar.xml"/> <filter
- * objectClass="org.eclipse.core.resources.IFile" nameFilter = "*.java"/> <helper
- * class="org.eclipse.wst.validation.internal.provisional.core.core.ejb.workbenchimpl.EJBHelper"/> <run
- * class="org.eclipse.wst.validation.internal.provisional.core.core.ejb.EJBValidator" incremental="false" enabled="false"
- * pass="fast,full" async="false"/> <aggregateValidator class="my.aggregate.ValidatorClass"/>
- * <migrate><validator from="old.class.name" to="new.class.name"/> </migrate> </validator>
- * </extension>
- */
-public final class ValidationRegistryReader implements RegistryConstants {
-	private static ValidationRegistryReader inst = null;
-	private HashMap _validators; // list of all validators registered, with their associated
-	// ValidatorMetaData, indexed by project nature id
-	private HashMap _indexedValidators; // list of all validators, indexed by validator class name,
-	// with the validator's ValidatorMetaData as the value.
-	// Needed by the WorkbenchReporter, because sometimes the
-	// IValidator is not enough to remove all messages from the
-	// task list.
-	private Set _defaultEnabledValidators;
-	// Since IProject's contents are all instances of IResource, every type filter for a validator
-	// must be an instance of IResource. This applies to both the rebuildCache pass and to the
-	// validation pass.
-	private static final String IRESOURCE = "org.eclipse.core.resources.IResource"; //$NON-NLS-1$
-
-	private static final String UNKNOWN_PROJECT = "UNKNOWN"; //$NON-NLS-1$ // This 'project nature id' is used as a key to get the validators which can run on a project type which hasn't been explicitly filtered in or out by any validator.
-	private static final String EXCLUDED_PROJECT = "EXCLUDED"; //$NON-NLS-1$ // This 'project nature id' is used as a key to get the validators which are excluded on certain projects.
-
-	private List _tempList = null; // list for temporary values. Retrieve and use via the
-	
-	public HashMap projectValidationMetaData = null;
-
-	/**
-	 * The registry is read once - when this class is instantiated.
-	 */
-	private ValidationRegistryReader() {
-		super();
-
-		try {
-			_validators = new HashMap();
-			_indexedValidators = new HashMap();
-			_defaultEnabledValidators = new HashSet();
-
-			// Read the registry and build a map of validators. The key into
-			// the map is the IValidator instance and the value is the ValidatorMetaData
-			// which describes the IValidator.
-			readRegistry();
-
-			// Once all of the validators have been read, the caches of the
-			// validators need to be updated.
-			buildCache();
-		} catch (Throwable exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader()"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-	}
-
-	/**
-	 * Traverse over the list of VMDs which have been added and create copies of it. The copies are
-	 * created to increase runtime performance.
-	 */
-	private void buildCache() {
-		Iterator iterator = _indexedValidators.values().iterator();
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-			buildProjectNatureCache(vmd);
-			buildDefaultEnabledCache(vmd);
-		}
-
-		// Now add the validators which are configured on all projects,
-		// and all projects but X.
-		addRemainder();
-
-		// this temporary list isn't needed any more. All of the excluded
-		// projects have been added to the project natures which they don't exlcude.
-		_validators.remove(EXCLUDED_PROJECT);
-
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-		if (logger.isLoggingLevel(Level.FINEST)) {
-			LogEntry entry = ValidationPlugin.getLogEntry();
-			entry.setSourceID("ValidationRegistryReader.buildCache()"); //$NON-NLS-1$
-			entry.setText(debug());
-			logger.write(Level.FINEST, entry);
-		}
-
-	}
-
-	/**
-	 * Build the cache of VMDs which is indexed by project nature ids. If the validator is
-	 * registered on all project types, the vmd's project nature filters will be null.
-	 */
-	private void buildProjectNatureCache(ValidatorMetaData vmd) {
-		// Build the cache with the identified project natures in validators'
-		// extensions.
-		ValidatorNameFilter[] projNatureIds = vmd.getProjectNatureFilters();
-		if (projNatureIds == null) {
-			// Can run on any project
-			add(UNKNOWN_PROJECT, vmd);
-		} else {
-			boolean noneIncluded = true; // assume that the validator does not include any project
-			// natures
-			for (int i = 0; i < projNatureIds.length; i++) {
-				ValidatorNameFilter pn = projNatureIds[i];
-				if (pn.isInclude()) {
-					noneIncluded = false;
-					add(pn.getNameFilter(), vmd);
-				}
-			}
-
-			if (noneIncluded) {
-				// add it to the list of EXCLUDED projects
-				// (that is, a validator which excludes project natures but doesn't
-				// explicitly include any. This type of validator runs on any unrecognized (UNKNOWN)
-				// projects, but the rest of the cache needs to be built before this is added
-				// to the UNKNOWN list. See addExcludedRemainder().
-				add(EXCLUDED_PROJECT, vmd);
-			}
-		}
-	}
-
-	/**
-	 * Build the list of validators which are enabled by default.
-	 */
-	private void buildDefaultEnabledCache(ValidatorMetaData vmd) {
-		if (vmd == null) {
-			return;
-		}
-
-		if (vmd.isEnabledByDefault()) {
-			_defaultEnabledValidators.add(vmd);
-		}
-	}
-
-	/**
-	 * Add vmd to the list of validators, indexed by validator class name
-	 */
-	private void add(ValidatorMetaData vmd) {
-		if (vmd == null) {
-			return;
-		}
-
-		_indexedValidators.put(vmd.getValidatorUniqueName(), vmd);
-	}
-
-	/*
-	 * Some validators can run on any type of project. In order to have a static list, add the "any
-	 * project" validators to each "project nature" validators' list. This avoids adding the "any
-	 * project" validators to the "project nature" validators at runtime, which results in
-	 * performance savings.
-	 * 
-	 * Some validators run on any type of project but X, where X is an excluded project nature.
-	 * Those validators should also be added via this method.
-	 */
-	private void addRemainder() {
-		// First, add all "can-run-on-any-project-type" to every registered project nature type in
-		// the cache.
-		addAnyRemainder();
-
-		// Then add the "can-run-on-any-project-type-but-X" to every non-X registered project nature
-		// type in the cache.
-		addExcludedRemainder();
-	}
-
-	private void addExcludedRemainder() {
-		Set excludedProjVmds = (Set) _validators.get(EXCLUDED_PROJECT);
-		if (excludedProjVmds == null) {
-			// no excluded project natures
-			return;
-		}
-
-		Iterator exIterator = excludedProjVmds.iterator();
-		while (exIterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) exIterator.next();
-
-			boolean noneIncluded = true; // assume that, by default, if someone explicitly excludes
-			// a project nature then they don't include any project
-			// natures
-			Set keys = _validators.keySet();
-			Iterator iterator = keys.iterator();
-			while (iterator.hasNext()) {
-				String projId = (String) iterator.next();
-				if (projId.equals(UNKNOWN_PROJECT) || projId.equals(EXCLUDED_PROJECT)) {
-					// Don't add list to a project nature which is excluded or applicable to all.
-					continue;
-				}
-
-				ValidatorNameFilter filter = vmd.findProjectNature(projId);
-				if (filter != null) {
-					// Don't add list to itself (filter.isIncluded() == true) or
-					// to a list from which it's excluded (filter.isIncluded() == false)
-					if (filter.isInclude()) {
-						noneIncluded = false;
-					}
-					continue;
-				}
-
-				add(projId, vmd);
-			}
-
-			if (noneIncluded) {
-				// At this point, the "can-run-on-any-project" becomes
-				// "not-excluded-on-these-projects". That is, if the project
-				// nature id isn't in the list of _validators, then it isn't
-				// included or excluded by any validators, so all validators
-				// which can run on any project AND all validators which can
-				// run on any but certain excluded projects can run on the
-				// given IProject.
-				add(UNKNOWN_PROJECT, vmd);
-			}
-		}
-	}
-
-	private void addAnyRemainder() {
-		Set anyProjVmds = (Set) _validators.get(UNKNOWN_PROJECT);
-		if (anyProjVmds == null) {
-			// no validators run on all projects
-			return;
-		}
-
-		Set keys = _validators.keySet();
-		Iterator iterator = keys.iterator();
-		while (iterator.hasNext()) {
-			String projId = (String) iterator.next();
-			if (projId.equals(UNKNOWN_PROJECT) || projId.equals(EXCLUDED_PROJECT)) {
-				// Don't add list to itself or to a project nature which is excluded.
-				continue;
-			}
-
-			add(projId, anyProjVmds);
-		}
-	}
-
-	private void add(String projectNatureId, Set vmdList) {
-		if ((vmdList == null) || (vmdList.size() == 0)) {
-			return;
-		}
-
-		Set pnVal = createSet(projectNatureId); // whether the validator includes or excludes this
-		// project nature id, make sure that an entry is
-		// created for it in the table
-		pnVal.addAll(vmdList);
-		_validators.put(projectNatureId, pnVal);
-	}
-
-	private void add(String projectNatureId, ValidatorMetaData vmd) {
-		if (vmd == null) {
-			return;
-		}
-
-		Set pnVal = createSet(projectNatureId); // whether the validator includes or excludes this
-		// project nature id, make sure that an entry is
-		// created for it in the table
-		pnVal.add(vmd);
-		_validators.put(projectNatureId, pnVal);
-	}
-
-	/**
-	 * When a validator's class or helper class cannot be loaded, the vmd calls this method to
-	 * disable the validator. The validator will be removed from the preference page, properties
-	 * page, and enabled list of any project thereafter validated.
-	 */
-	public void disableValidator(ValidatorMetaData vmd) {
-		_indexedValidators.remove(vmd.getValidatorUniqueName());
-		_defaultEnabledValidators.remove(vmd);
-
-		// The whole "on-any-project" and "exclude-this-project-nature" would take
-		// a lot of processing time... Instead, traverse the list of proj nature ids,
-		// and search the Set of that proj nature id, and remove the vmd if it's in the
-		// Set.
-		Object[] keys = _validators.keySet().toArray();
-		for (int i = 0; i < keys.length; i++) {
-			Object key = keys[i];
-			Set value = (Set) _validators.get(key);
-			if (value == null) {
-				continue;
-			}
-
-			if (value.contains(vmd)) {
-				value.remove(vmd);
-				_validators.put(key, value);
-			}
-		}
-	}
-
-	private Set createSet(String projNature) {
-		Set v = (Set) _validators.get(projNature);
-		if (v == null) {
-			v = new HashSet();
-		}
-		return v;
-	}
-
-	/**
-	 * Given an IConfigurationElement, if it has a project nature(s) specified, return the
-	 * ValidatorNameFilters which represent those natures. Otherwise return null.
-	 * 
-	 * A project nature can be specified in plugin.xml to indicate what types of IProjects a
-	 * validator can run on.
-	 */
-	private String[] getAggregateValidatorsNames(IConfigurationElement element) {
-		IConfigurationElement[] filters = element.getChildren(TAG_AGGREGATE_VALIDATORS);
-		if (filters.length == 0)
-			return null;
-
-		String[] names = new String[filters.length];
-		for (int i = 0; i < names.length; i++) {
-			// In order to speed up our String comparisons, load these
-			// names into Java's constants space. This way, we'll be able to
-			// use pointer comparison instead of the traditional
-			// character-by-character comparison. Since these names should
-			// never be set by anyone other than this class, and this class
-			// sets them only once, it is safe to declare these Strings
-			// constants.
-			//
-			// To load a String into the constants space, call intern() on the String.
-			//
-			String nameFilter = filters[i].getAttribute(ATT_CLASS);
-			if (nameFilter != null) {
-				nameFilter = nameFilter.intern();
-			}
-			names[i] = nameFilter;
-		}
-		return names;
-	}
-
-	/**
-	 * Given an IConfigurationElement from plugin.xml, if it has any filter tags, construct the
-	 * appropriate ValidatorFilters to represent those tags; else return null.
-	 * 
-	 * A filter can be specified in plugin.xml to filter out certain resources.
-	 */
-	private ValidatorFilter[] getFilters(IConfigurationElement element) {
-		IConfigurationElement[] filters = element.getChildren(TAG_FILTER);
-		if (filters.length == 0)
-			return null;
-
-		ValidatorFilter[] vf = new ValidatorFilter[filters.length];
-		for (int i = 0; i < filters.length; i++) {
-			vf[i] = new ValidatorFilter(IRESOURCE);
-
-			// In order to speed up our String comparisons, load these
-			// names into Java's constants space. This way, we'll be able to
-			// use pointer comparison instead of the traditional
-			// character-by-character comparison. Since these names should
-			// never be set by anyone other than this class, and this class
-			// sets them only once, it is safe to declare these Strings
-			// constants.
-			//
-			// To load a String into the constants space, call intern() on the String.
-			//
-			String nameFilter = filters[i].getAttribute(ATT_NAME_FILTER);
-			if (nameFilter != null) {
-				nameFilter = nameFilter.intern();
-			}
-			String isCaseSensitive = filters[i].getAttribute(ATT_CASE_SENSITIVE);
-			vf[i].setNameFilter(nameFilter, isCaseSensitive);
-
-			String objectClass = filters[i].getAttribute(ATT_OBJECT_CLASS);
-			if (objectClass != null) {
-				objectClass = objectClass.intern();
-			}
-			vf[i].setTypeFilter(objectClass);
-
-			String actionFilter = filters[i].getAttribute(ATT_ACTION_FILTER);
-			if (actionFilter != null) {
-				actionFilter = actionFilter.intern();
-			}
-			vf[i].setActionFilter(actionFilter);
-		}
-		return vf;
-	}
-
-	public boolean getDependentValidatorValue(IConfigurationElement element) {
-		IConfigurationElement[] depValidatorElement = element.getChildren(DEP_VALIDATOR);
-		if (depValidatorElement.length == 0)
-			return false;
-		String depValue = depValidatorElement[0].getAttribute(DEP_VAL_VALUE);
-		boolean depBoolValue = (new Boolean(depValue)).booleanValue();
-		return depBoolValue;
-	}
-
-	/**
-	 * Return the name of the marker ID associated with the IValidator.
-	 */
-	public String getMarkerIdValue(IConfigurationElement element) {
-		IConfigurationElement[] markerId = element.getChildren(MARKER_ID);
-		if (markerId.length == 0)
-			return null;
-		return markerId[0].getAttribute(MARKER_ID_VALUE);
-	}
-
-	/**
-	 * Return the name of the helper class associated with the IValidator.
-	 */
-	private String getHelperName(IConfigurationElement element) {
-		IConfigurationElement[] helpers = element.getChildren(TAG_HELPER_CLASS);
-		if (helpers.length == 0)
-			return null;
-
-		return helpers[0].getAttribute(ATT_CLASS);
-	}
-
-	/* package */static IWorkbenchContext createHelper(IConfigurationElement element, String helperClassName) {
-		IWorkbenchContext wh = null;
-		try {
-			wh = (IWorkbenchContext) element.createExecutableExtension(TAG_HELPER_CLASS);
-		} catch (Throwable exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.createHelper(IConfigurationElement, String)"); //$NON-NLS-1$
-				entry.setMessageTypeIdentifier(ResourceConstants.VBF_EXC_SYNTAX_NO_HELPER_THROWABLE);
-				entry.setTargetException(exc);
-				String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_SYNTAX_NO_HELPER_THROWABLE), new String[]{helperClassName});
-				entry.setText(result);				
-				//entry.setTokens(new String[]{helperClassName});
-				logger.write(Level.SEVERE, entry);
-			}
-			return null;
-		}
-		return wh;
-	}
-
-	/* package */static IValidator createValidator(IConfigurationElement element, String validatorClassName) {
-		IValidator validator = null;
-		try {
-			validator = (IValidator) element.createExecutableExtension(TAG_RUN_CLASS);
-		} catch (Throwable exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.createValidator(IConfigurationElement, String, String)"); //$NON-NLS-1$
-				entry.setMessageTypeID(ResourceConstants.VBF_EXC_SYNTAX_NO_VAL_THROWABLE);
-				//entry.setTokens(new String[]{validatorClassName});
-				String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_SYNTAX_NO_VAL_THROWABLE), new String[]{validatorClassName});
-				entry.setText(result);				
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-
-		if (validator == null) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.createValidator(IConfigurationElement, String)"); //$NON-NLS-1$
-				entry.setMessageTypeID(ResourceConstants.VBF_EXC_SYNTAX_NO_VAL_NULL);
-				entry.setTokens(new String[]{validatorClassName});
-				logger.write(Level.FINE, entry);
-			}
-			return null;
-		}
-
-		return validator;
-	}
-
-	/**
-	 * Given an IConfigurationElement from plugin.xml, return whether or not the validator is
-	 * enabled by default.
-	 * 
-	 * If no enabled attribute is specified, the default, true (i.e., enabled) is returned.
-	 */
-	private boolean getEnabledByDefault(IConfigurationElement element) {
-		IConfigurationElement[] runChildren = element.getChildren(TAG_RUN_CLASS);
-		// Don't need to check if runChildren is null or empty, because that was checked in the
-		// initializeValidator method.
-
-		String inc = runChildren[0].getAttribute(ATT_ENABLED);
-		if (inc == null) {
-			return RegistryConstants.ATT_ENABLED_DEFAULT;
-		}
-
-		return Boolean.valueOf(inc.trim().toLowerCase()).booleanValue(); // this will return true
-		// if, and only if, the
-		// attribute value is
-		// "true". For example,
-		// "yes" will be considered
-		// "false".
-	}
-
-	/**
-	 * Given an IConfigurationElement from plugin.xml, return whether or not the validator supports
-	 * incremental validation.
-	 * 
-	 * If no incremental attribute is specified, the default, true (i.e., incremental is supported)
-	 * is returned.
-	 */
-	private boolean getIncremental(IConfigurationElement element) {
-		IConfigurationElement[] runChildren = element.getChildren(TAG_RUN_CLASS);
-		// Don't need to check if runChildren is null or empty, because that was checked in the
-		// initializeValidator method.
-
-		String inc = runChildren[0].getAttribute(ATT_INCREMENTAL);
-		if (inc == null) {
-			return RegistryConstants.ATT_INCREMENTAL_DEFAULT;
-		}
-
-		return Boolean.valueOf(inc.trim().toLowerCase()).booleanValue(); // this will return true
-		// if, and only if, the
-		// attribute value is
-		// "true". For example,
-		// "yes" will be considered
-		// "false".
-	}
-
-	/**
-	 * Given an IConfigurationElement from plugin.xml, return whether or not the validator supports
-	 * full build validation.
-	 * 
-	 * If no incremental attribute is specified, the default, true (i.e., incremental is supported)
-	 * is returned.
-	 */
-	private boolean getFullBuild(IConfigurationElement element) {
-		IConfigurationElement[] runChildren = element.getChildren(TAG_RUN_CLASS);
-		// Don't need to check if runChildren is null or empty, because that was checked in the
-		// initializeValidator method.
-
-		String fb = runChildren[0].getAttribute(ATT_FULLBUILD);
-		if (fb == null) {
-			return RegistryConstants.ATT_FULLBUILD_DEFAULT;
-		}
-
-		return Boolean.valueOf(fb.trim().toLowerCase()).booleanValue(); // this will return true if,
-		// and only if, the
-		// attribute value is
-		// "true". For example,
-		// "yes" will be considered
-		// "false".
-	}
-
-	/**
-	 * Given an IConfigurationElement from plugin.xml, return whether or not the validator supports
-	 * asynchronous validation.
-	 * 
-	 * If no async attribute is specified, the default, true (i.e., the validator is thread-safe) is
-	 * returned.
-	 */
-	private boolean getAsync(IConfigurationElement element) {
-		IConfigurationElement[] runChildren = element.getChildren(TAG_RUN_CLASS);
-		// Don't need to check if runChildren is null or empty, because that was checked in the
-		// initializeValidator method.
-
-		String async = runChildren[0].getAttribute(ATT_ASYNC);
-		if (async == null) {
-			return RegistryConstants.ATT_ASYNC_DEFAULT;
-		}
-
-		return Boolean.valueOf(async.trim().toLowerCase()).booleanValue(); // this will return true
-		// if, and only if, the
-		// attribute value is
-		// "true". For example,
-		// "yes" will be
-		// considered "false".
-	}
-
-	/**
-	 * Given an IConfigurationElement from plugin.xml, return the types of validation passes, as
-	 * defined in IRuleGroup, that the validator performs.
-	 * 
-	 * If no pass attribute is specified, the default, IRuleGroup.PASS_FULL, is returned.
-	 */
-	private int getRuleGroup(IConfigurationElement element) {
-		IConfigurationElement[] runChildren = element.getChildren(TAG_RUN_CLASS);
-		// Don't need to check if runChildren is null or empty, because that was checked in the
-		// initializeValidator method.
-
-		String pass = runChildren[0].getAttribute(ATT_RULE_GROUP);
-		if (pass == null) {
-			return RegistryConstants.ATT_RULE_GROUP_DEFAULT;
-		}
-
-		final String COMMA = ","; //$NON-NLS-1$
-		StringTokenizer tokenizer = new StringTokenizer(pass, COMMA, false); // false means don't
-		// return the comma as
-		// part of the string
-		int result = 0; // no passes identified
-		while (tokenizer.hasMoreTokens()) {
-			String nextAction = tokenizer.nextToken().trim();
-			if (nextAction.equals(IRuleGroup.PASS_FAST_NAME)) {
-				result = result | IRuleGroup.PASS_FAST;
-			} else if (nextAction.equals(IRuleGroup.PASS_FULL_NAME)) {
-				result = result | IRuleGroup.PASS_FULL;
-			}
-		}
-
-		if (result == 0) {
-			// No recognized passes. Return the default.
-			return RegistryConstants.ATT_RULE_GROUP_DEFAULT;
-		}
-
-		return result;
-	}
-
-	private ValidatorMetaData.MigrationMetaData getMigrationMetaData(IConfigurationElement element, ValidatorMetaData vmd) {
-		IConfigurationElement[] runChildren = element.getChildren(TAG_MIGRATE);
-		if ((runChildren == null) || (runChildren.length == 0)) {
-			return null;
-		}
-
-		// Only supposed to be one "migrate" section in a validator, so ignore the rest
-		IConfigurationElement migrate = runChildren[0];
-
-		// Now look for the "validator" elements. Zero or more can be specified.
-		IConfigurationElement[] migrateChildren = migrate.getChildren(TAG_VALIDATOR);
-		if ((migrateChildren == null) || (migrateChildren.length == 0)) {
-			return null;
-		}
-
-		ValidatorMetaData.MigrationMetaData mmd = vmd.new MigrationMetaData();
-		for (int i = 0; i < migrateChildren.length; i++) {
-			IConfigurationElement migrateChild = migrateChildren[i];
-			String from = migrateChild.getAttribute(ATT_FROM);
-			if (from == null) {
-				continue;
-			}
-
-			String to = migrateChild.getAttribute(ATT_TO);
-			if (to == null) {
-				continue;
-			}
-			mmd.addId(from, to);
-		}
-		return mmd;
-	}
-
-	/**
-	 * Given an IConfigurationElement, if it has a project nature(s) specified, return the
-	 * ValidatorNameFilters which represent those natures. Otherwise return null.
-	 * 
-	 * A project nature can be specified in plugin.xml to indicate what types of IProjects a
-	 * validator can run on.
-	 */
-	private ValidatorNameFilter[] getProjectNatureFilters(IConfigurationElement element) {
-		IConfigurationElement[] filters = element.getChildren(TAG_PROJECT_NATURE);
-		if (filters.length == 0) {
-			return null;
-		}
-
-		ValidatorNameFilter[] vf = new ValidatorNameFilter[filters.length];
-		for (int i = 0; i < filters.length; i++) {
-			vf[i] = new ValidatorNameFilter();
-			// In order to speed up our String comparisons, load these
-			// names into Java's constants space. This way, we'll be able to
-			// use pointer comparison instead of the traditional
-			// character-by-character comparison. Since these names should
-			// never be set by anyone other than this class, and this class
-			// sets them only once, it is safe to declare these Strings
-			// constants.
-			//
-			// To load a String into the constants space, call intern() on the String.
-			//
-			String nameFilter = filters[i].getAttribute(ATT_ID);
-			if (nameFilter != null) {
-				nameFilter = nameFilter.intern();
-			}
-			vf[i].setNameFilter(nameFilter);
-
-			String include = filters[i].getAttribute(ATT_INCLUDE);
-			vf[i].setInclude(include);
-		}
-		return vf;
-	}
-
-	/**
-	 * Returns the singleton ValidationRegistryReader.
-	 */
-	public static ValidationRegistryReader getReader() {
-		if (inst == null) {
-			inst = new ValidationRegistryReader();
-
-			EventManager.getManager().setActive(true);
-		}
-		return inst;
-	}
-
-	public static boolean isActivated() {
-		// Whether the registry has been read or not is kept in the EventManager
-		// class instead of this class in order to work around a shutdown problem.
-		// See the comment in the isActive() method of the EventManager class
-		// for details.
-		return EventManager.getManager().isActive();
-	}
-
-	/**
-	 * Returns the Validator extension point
-	 */
-	private IExtensionPoint getValidatorExtensionPoint() {
-		IExtensionRegistry registry = Platform.getExtensionRegistry();
-		IExtensionPoint extensionPoint = registry.getExtensionPoint(PLUGIN_ID, VALIDATOR_EXT_PT_ID);
-		if (extensionPoint == null) {
-			// If this happens it means that someone removed the "validator" extension point
-			// declaration
-			// from our plugin.xml file.
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.getValidatorExtensionPoint()"); //$NON-NLS-1$
-				entry.setMessageTypeID(ResourceConstants.VBF_EXC_MISSING_VALIDATOR_EP);
-				//entry.setTokens(new String[]{ValidationPlugin.PLUGIN_ID + "." + VALIDATOR_EXT_PT_ID}); //$NON-NLS-1$
-				String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_MISSING_VALIDATOR_EP),
-						new String[]{ValidationPlugin.PLUGIN_ID + "." + VALIDATOR_EXT_PT_ID});
-				entry.setText(result);		
-				logger.write(Level.FINE, entry);
-			}
-		}
-		return extensionPoint;
-	}
-
-	/**
-	 * It's okay to return a handle to the ValidatorMetaData because the vmd can't be modified by
-	 * any code not in this package.
-	 */
-	public ValidatorMetaData getValidatorMetaData(IValidator validator) {
-		// retrieval will be in log(n) time
-		if (validator == null) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.getValidatorMetaData(IValidator)"); //$NON-NLS-1$
-				entry.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_ORPHAN_IVALIDATOR, new String[]{"null"})); //$NON-NLS-1$
-				logger.write(Level.SEVERE, entry);
-			}
-			return null;
-		}
-
-		String validatorClassName = validator.getClass().getName();
-		ValidatorMetaData vmd = getValidatorMetaData(validatorClassName);
-		if (vmd != null) {
-			return vmd;
-		}
-
-		// If we got here, then vmd is neither a root nor an aggregate validator,
-		// yet the IValidator exists. Internal error.
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-		if (logger.isLoggingLevel(Level.SEVERE)) {
-			LogEntry entry = ValidationPlugin.getLogEntry();
-			entry.setSourceID("ValidationRegistryReader.getValidatorMetaData(IValidator)"); //$NON-NLS-1$
-			entry.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_ORPHAN_IVALIDATOR, new String[]{validatorClassName}));
-			logger.write(Level.SEVERE, entry);
-		}
-		return null;
-	}
-
-	public Set getValidatorMetaData(IWorkspaceRoot root) {
-		// Every validator on the Preferences page must be returned
-		Set copy = new HashSet();
-		clone(_indexedValidators.values(), copy);
-		return copy;
-	}
-
-	/**
-	 * Return a collection of Validators configured on a certain type of IProject (e.g. EJB Project
-	 * vs. Web Project).
-	 * 
-	 * This is a long-running process. If you can, cache the result.
-	 */
-	public Set getValidatorMetaData(IProject project) {
-		Set copy = new HashSet();
-		getValidatorMetaData(project, copy);
-		return copy;
-	}
-
-	/**
-	 * Copy the set of configured validator metadata into the Set.
-	 */
-	public void getValidatorMetaData(IProject project, Set vmds) {
-		if (vmds == null) {
-			return;
-		}
-		vmds.clear();
-		int executionMap = 0x0;
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-		try {
-			if (logger.isLoggingLevel(Level.FINEST)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.getValidatorMetaData(IProject)"); //$NON-NLS-1$
-				entry.setText("IProject is " + String.valueOf(project)); //$NON-NLS-1$
-				logger.write(Level.FINEST, entry);
-			}
-
-			if (project == null) {
-				executionMap |= 0x1;
-				// vmds is already clear
-				return;
-			}
-
-			String[] projectNatures = null;
-			try {
-				projectNatures = project.getDescription().getNatureIds();
-			} catch (CoreException exc) {
-				executionMap |= 0x2;
-				// vmds is already clear
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationRegistryReader.getValidatorMetaData(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-					entry.setTargetException(exc);
-					entry.setExecutionMap(executionMap);
-					logger.write(Level.SEVERE, entry);
-				}
-				return;
-			}
-
-			// If there are no project natures on a particular project,
-			// or if this project nature has no validators configured
-			// on it, return the validators which are configured on all
-			// projects.
-			Set projVmds = null;
-			if ((projectNatures == null) || (projectNatures.length == 0)) {
-				executionMap |= 0x4;
-				clone(getValidatorMetaDataUnknownProject(), vmds);
-			} else {
-				executionMap |= 0x8;
-				if (logger.isLoggingLevel(Level.FINEST)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationRegistryReader.getValidatorMetaData(IProject)"); //$NON-NLS-1$
-					//entry.setTokens(projectNatures);
-					entry.setText(projectNatures.toString());
-					logger.write(Level.FINEST, entry);
-				}
-
-				for (int i = 0; i < projectNatures.length; i++) {
-					String projectNatureId = projectNatures[i];
-					projVmds = (Set) _validators.get(projectNatureId);
-
-					if (projVmds == null) {
-						// no validators registered for that type of project id
-						executionMap |= 0x10;
-						continue;
-					}
-
-					Iterator iterator = projVmds.iterator();
-					while (iterator.hasNext()) {
-						ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-						if (!vmds.contains(vmd)) {
-							vmds.add(vmd);
-						}
-					}
-				}
-
-				// Now filter out the validators which must not run on this project
-				removeExcludedProjects(project, vmds);
-
-				if (vmds.size() == 0) {
-					executionMap |= 0x20;
-					clone(getValidatorMetaDataUnknownProject(), vmds);
-				}
-			}
-		} finally {
-			if (logger.isLoggingLevel(Level.FINER)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.getValidatorMetaData(IProject)"); //$NON-NLS-1$
-				entry.setExecutionMap(executionMap);
-
-				StringBuffer buffer = new StringBuffer();
-				Iterator iterator = vmds.iterator();
-				while (iterator.hasNext()) {
-					ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-					buffer.append(vmd.getValidatorUniqueName());
-					buffer.append("\n"); //$NON-NLS-1$
-				}
-				entry.setText(buffer.toString());
-				logger.write(Level.FINER, entry);
-			}
-		}
-	}
-
-	/*
-	 * If one project nature on the project includes a particular validator, but another project
-	 * nature excludes that validator, then the validator needs to be removed from the vmd set.
-	 * 
-	 * For example, if AValidator can run on any java project but not on a J2EE project, which is an
-	 * instance of a java project, then the AValidator is included by the java nature and excluded
-	 * by the J2EE nature. The AValidator would have to be removed from the set.
-	 */
-	private void removeExcludedProjects(IProject project, Set vmds) {
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-		if (logger.isLoggingLevel(Level.FINEST)) {
-			LogEntry entry = ValidationPlugin.getLogEntry();
-			entry.setSourceID("ValidationRegistryReader.removeExcludedProjects"); //$NON-NLS-1$
-
-			StringBuffer buffer = new StringBuffer("\nBefore:\n"); //$NON-NLS-1$
-			Iterator viterator = vmds.iterator();
-			while (viterator.hasNext()) {
-				ValidatorMetaData vmd = (ValidatorMetaData) viterator.next();
-				buffer.append(vmd.getValidatorUniqueName());
-				buffer.append("\n"); //$NON-NLS-1$
-			}
-			entry.setText(buffer.toString());
-			logger.write(Level.FINEST, entry);
-		}
-
-		String[] projectNatures = null;
-		try {
-			projectNatures = project.getDescription().getNatureIds();
-		} catch (CoreException exc) {
-			// if there's no natures, there's no list.
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.getValidatorMetaData(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-			return;
-		}
-		if ((projectNatures == null) || (projectNatures.length == 0)) {
-			// nothing needs to be removed from the list
-			return;
-		}
-
-		// First of all, clone the Set because we need to remove entries
-		// from it, and we can't alter the set while we're iterating over
-		// it.
-		List tempList = getTempList();
-		clone(vmds, tempList);
-
-		for (int i = 0; i < projectNatures.length; i++) {
-			String nature = projectNatures[i];
-			Iterator iterator = tempList.iterator();
-			while (iterator.hasNext()) {
-				ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-				ValidatorNameFilter[] natureFilters = vmd.getProjectNatureFilters();
-				if (natureFilters == null) {
-					// Can run on any project
-					continue;
-				}
-
-				for (int j = 0; j < natureFilters.length; j++) {
-					ValidatorNameFilter pn = natureFilters[j];
-					if (nature.equals(pn.getNameFilter()) && !pn.isInclude()) {
-						vmds.remove(vmd);
-					}
-				}
-			}
-		}
-
-		if (logger.isLoggingLevel(Level.FINEST)) {
-			LogEntry entry = ValidationPlugin.getLogEntry();
-			entry.setSourceID("ValidationRegistryReader.removeExcludedProjects"); //$NON-NLS-1$
-
-			StringBuffer buffer = new StringBuffer("\nAfter:\n"); //$NON-NLS-1$
-			Iterator viterator = vmds.iterator();
-			while (viterator.hasNext()) {
-				ValidatorMetaData vmd = (ValidatorMetaData) viterator.next();
-				buffer.append(vmd.getValidatorUniqueName());
-				buffer.append("\n"); //$NON-NLS-1$
-			}
-			entry.setText(buffer.toString());
-			logger.write(Level.FINEST, entry);
-		}
-	}
-
-	private Collection clone(Collection input, Collection copy) {
-		if (input == null) {
-			return null;
-		}
-
-		if (copy == null) {
-			return null;
-		}
-		copy.clear();
-		copy.addAll(input);
-		return copy;
-	}
-
-	public String debug() {
-		StringBuffer buffer = new StringBuffer();
-		buffer.append("Project nature => validators configured"); //$NON-NLS-1$
-		buffer.append("\n"); //$NON-NLS-1$
-		Iterator viterator = _validators.keySet().iterator();
-		while (viterator.hasNext()) {
-			String projId = (String) viterator.next();
-			buffer.append("projId: "); //$NON-NLS-1$
-			buffer.append(projId);
-			buffer.append("\n"); //$NON-NLS-1$
-			Set validators = (Set) _validators.get(projId);
-			Iterator innerIterator = validators.iterator();
-			while (innerIterator.hasNext()) {
-				ValidatorMetaData vmd = (ValidatorMetaData) innerIterator.next();
-				buffer.append("\t"); //$NON-NLS-1$
-				buffer.append(vmd.getValidatorUniqueName());
-				buffer.append("\n"); //$NON-NLS-1$
-			}
-		}
-		buffer.append("\n"); //$NON-NLS-1$
-
-		buffer.append("Enable/disable validator by default"); //$NON-NLS-1$
-		buffer.append("\n"); //$NON-NLS-1$
-		viterator = _indexedValidators.values().iterator();
-		while (viterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) viterator.next();
-			buffer.append(vmd.getValidatorUniqueName());
-			buffer.append(" enabled? "); //$NON-NLS-1$
-			buffer.append(vmd.isEnabledByDefault());
-			buffer.append("\n"); //$NON-NLS-1$
-		}
-
-		return buffer.toString();
-	}
-
-	public boolean isConfiguredOnProject(ValidatorMetaData vmd, IProject project) {
-		if (projectValidationMetaData == null)
-			projectValidationMetaData = new HashMap();
-
-		Object vmds = projectValidationMetaData.get(project);
-		if (vmds != null) {
-			Set pvmds = (Set) vmds;
-			return pvmds.contains(vmd);
-		} else {
-			Set prjVmds = getValidatorMetaData(project);
-			if (prjVmds == null) {
-				return false;
-			}
-
-			if (prjVmds.size() == 0) {
-				return false;
-			}
-			projectValidationMetaData.put(project, prjVmds);
-			return prjVmds.contains(vmd);
-		}
-	}
-
-	/**
-	 * Return a set of ValidatorMetaData which are configured on all projects or which run on any
-	 * projects except certain project types.
-	 * 
-	 * Unlike other get methods, because this method is private it doesn't return a clone.
-	 * 
-	 * @see addExcludedRemainder()
-	 */
-	private Set getValidatorMetaDataUnknownProject() {
-		Set projVmds = (Set) _validators.get(UNKNOWN_PROJECT);
-		if (projVmds == null) {
-			projVmds = Collections.EMPTY_SET;
-		}
-		return projVmds;
-	}
-
-	/**
-	 * Return a set of ValidatorMetaData which are enabled by default.
-	 */
-	public Set getValidatorMetaDataEnabledByDefault() {
-		Set copy = new HashSet();
-		clone(_defaultEnabledValidators, copy);
-		return copy;
-	}
-
-	public ValidatorMetaData[] getValidatorMetaDataArrayEnabledByDefault() {
-		ValidatorMetaData[] result = new ValidatorMetaData[_defaultEnabledValidators.size()];
-		_defaultEnabledValidators.toArray(result);
-		return result;
-	}
-
-	/**
-	 * This method should be called ONLY by the validation framework, UI, or TVT plugin. In general,
-	 * only the validation framework and the validation TVT should handle ValidatorMetaData objects.
-	 * 
-	 * Given a string which identifies a fully-qualified class name of a validator, return the
-	 * ValidatorMetaData that uses a validator of that name, if it exists.
-	 * 
-	 * It's okay to return a handle to the ValidatorMetaData because the vmd can't be modified by
-	 * any code not in this package.
-	 */
-	public ValidatorMetaData getValidatorMetaData(String validatorClassName) {
-		if (validatorClassName == null) {
-			return null;
-		}
-
-		ValidatorMetaData vmd = (ValidatorMetaData) _indexedValidators.get(validatorClassName);
-		if (vmd != null) {
-			return vmd;
-		}
-
-		// Check for an aggregate validator
-		Iterator iterator = _indexedValidators.values().iterator();
-		while (iterator.hasNext()) {
-			vmd = (ValidatorMetaData) iterator.next();
-			if (vmd == null) {
-				continue;
-			}
-
-			if (vmd.getValidatorUniqueName().equals(validatorClassName)) {
-				return vmd;
-			}
-
-			String[] aggregateNames = vmd.getAggregatedValidatorNames();
-			if (aggregateNames != null) {
-				for (int i = 0; i < aggregateNames.length; i++) {
-					String aggregateName = aggregateNames[i];
-					if (validatorClassName.equals(aggregateName)) {
-						return vmd;
-					}
-				}
-			}
-
-			// Current name of validator doesn't match; has this validator been
-			// migrated from another package?
-			ValidatorMetaData.MigrationMetaData mmd = vmd.getMigrationMetaData();
-			if (mmd == null) {
-				// Validator class name hasn't been migrated
-				continue;
-			}
-
-			Set idList = mmd.getIds();
-			if (idList == null) {
-				// Invalid <migrate> element.
-				continue;
-			}
-
-			Iterator idIterator = idList.iterator();
-			while (idIterator.hasNext()) {
-				String[] ids = (String[]) idIterator.next();
-				if (ids.length != 2) {
-					// log
-					continue;
-				}
-
-				String from = ids[0];
-				if (from == null) {
-					// log
-					continue;
-				}
-
-				if (from.equals(validatorClassName)) {
-					return vmd;
-				}
-			}
-		}
-
-		// If we got to this point, no validator using that class name is loaded.
-		return null;
-	}
-
-	/**
-	 * Return true if the named validator is installed, otherwise false.
-	 */
-	public boolean isExistingValidator(String validatorClassName) {
-		return (getValidatorMetaData(validatorClassName) != null);
-	}
-
-	/**
-	 * Initialize the validator with the static metadata (runtime metadata is initialized in the
-	 * ValidationOperation class).
-	 */
-	private ValidatorMetaData initializeValidator(IConfigurationElement element, String validatorName, String pluginId) {
-		IConfigurationElement[] runChildren = element.getChildren(TAG_RUN_CLASS);
-		if ((runChildren == null) || (runChildren.length < 1)) {
-			// How can an IValidatorImpl be created when there no class name to
-			// instantiate?
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.initializeValidator(IConfigurationElement, String, String)"); //$NON-NLS-1$
-				entry.setMessageTypeID(ResourceConstants.VBF_EXC_SYNTAX_NO_VAL_RUN);
-				//entry.setTokens(new String[]{validatorName});
-				String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_SYNTAX_NO_VAL_RUN),
-						new String[]{validatorName});
-				entry.setText(result);
-				
-				logger.write(Level.FINE, entry);
-			}
-			return null;
-		}
-
-		//WTP Bugzilla defect: 82338
-		//Using the Unique Identifier give the flexibility of the same validator class used by other validator extentions without writing a new validation class
-		//Reverting the fix back as the class name defined in the ext is unique to this validator and has to be used for the unique id in the validation metadata
-		String validatorImplName = runChildren[0].getAttribute(ATT_CLASS);
-		
-		if (validatorImplName == null) {
-			// Same as before; how can we instantiate when...
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.initializeValidator(IConfigurationElement, String, String)"); //$NON-NLS-1$
-				entry.setMessageTypeID(ResourceConstants.VBF_EXC_SYNTAX_NO_VAL_CLASS);
-				entry.setTokens(new String[]{validatorName});
-				logger.write(Level.FINE, entry);
-			}
-			return null;
-		}
-
-		String helperImplName = getHelperName(element);
-		if (helperImplName == null) {
-			// Same as before; how can we instantiate when...
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.initializeValidator(IConfigurationElement, String, String)"); //$NON-NLS-1$
-				entry.setMessageTypeID(ResourceConstants.VBF_EXC_SYNTAX_NO_VAL_RUN);
-				entry.setTokens(new String[]{validatorImplName});
-				logger.write(Level.FINE, entry);
-			}
-			return null;
-		}
-
-		// In order to speed up our String comparisons, load these
-		// names into Java's constants space. This way, we'll be able to
-		// use pointer comparison instead of the traditional
-		// character-by-character comparison. Since these names should
-		// never be set by anyone other than this class, and this class
-		// sets them only once, it is safe to declare these Strings
-		// constants.
-		//
-		// To load a String into the constants space, call intern() on the String.
-		//
-		ValidatorMetaData vmd = new ValidatorMetaData();
-		vmd.addFilters(getFilters(element)); // validator may, or may not, have filters
-		vmd.addProjectNatureFilters(getProjectNatureFilters(element)); // validator may, or may not,
-		// specify a project nature
-		vmd.addAggregatedValidatorNames(getAggregateValidatorsNames(element)); // if a validator
-		// aggregated another
-		// validator, it
-		// should identify
-		// the
-		// sub-validator(s)'
-		// class name
-		vmd.setValidatorDisplayName(validatorName.intern()); // validator must have a display name.
-		vmd.setValidatorUniqueName(validatorImplName.intern());
-		vmd.setPluginId(pluginId);
-		vmd.setIncremental(getIncremental(element));
-		vmd.setFullBuild(getFullBuild(element));
-		vmd.setAsync(getAsync(element));
-		vmd.setRuleGroup(getRuleGroup(element));
-		vmd.setEnabledByDefault(getEnabledByDefault(element));
-		vmd.setMigrationMetaData(getMigrationMetaData(element, vmd));
-		vmd.setHelperClass(element, helperImplName);
-		vmd.setValidatorClass(element); // associate the above attributes with the validator
-		vmd.addDependentValidator(getDependentValidatorValue(element));
-		String customMarkerId = getMarkerIdValue(element);
-		if(customMarkerId != null)
-		    vmd.setMarkerId(pluginId+"."+customMarkerId); //$NON-NLS-1$
-
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-		if (logger.isLoggingLevel(Level.FINEST)) {
-			LogEntry entry = ValidationPlugin.getLogEntry();
-			entry.setSourceID("ValidationRegistryReader.initializeValidator(IConfigurationElement, String, String)"); //$NON-NLS-1$
-			entry.setText("validator loaded: " + validatorImplName); //$NON-NLS-1$
-			logger.write(Level.FINEST, entry);
-		}
-
-		return vmd;
-	}
-
-	private List getTempList() {
-		// Return a list for temporary use
-		if (_tempList == null) {
-			_tempList = new ArrayList();
-		} else {
-			// Prepare list for use
-			_tempList.clear();
-		}
-
-		return _tempList;
-	}
-
-	/**
-	 * This method should be called ONLY BY THE VALIDATION FRAMEWORK! The value from this method is
-	 * used to populate the validation preference page.
-	 */
-	public Collection getAllValidators() {
-		Set validators = new HashSet();
-		clone(_indexedValidators.values(), validators);
-		return validators;
-	}
-
-	public int numberOfValidators() {
-		return _indexedValidators.size();
-	}
-
-	/**
-	 * Reads one extension by looping through its configuration elements.
-	 */
-	private void readExtension(IExtension extension) {
-		IConfigurationElement[] elements = extension.getConfigurationElements();
-
-		for (int i = 0; i < elements.length; i++) {
-			IConfigurationElement element = elements[i];
-
-			String label = extension.getLabel();
-			if (label == null || label.equals("")) { //$NON-NLS-1$
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.FINE)) {
-					String[] msgParm = {extension.getUniqueIdentifier()};
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationRegistryReader.readExtension(IExtension)"); //$NON-NLS-1$
-					entry.setMessageTypeID(ResourceConstants.VBF_EXC_VALIDATORNAME_IS_NULL);
-					//entry.setTokens(msgParm);
-					String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_VALIDATORNAME_IS_NULL),
-							msgParm);
-					entry.setText(result);					
-					logger.write(Level.FINE, entry);
-				}
-			} else {
-				// If getLabel() returns an empty string, this is an illegal validator.
-				// The PropertyPage, and other status messages, need to have a displayable name for
-				// the validator.
-				String pluginId = extension.getNamespace();
-				ValidatorMetaData vmd = initializeValidator(element, label, pluginId);
-
-				if (vmd != null) {
-					// Add this validator to the list of validators; if vmd is null, the validator
-					// couldn't be created.
-					add(vmd);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Reads the registry to find the Validators which have been implemented.
-	 */
-	private void readRegistry() {
-		_validators.clear();
-
-		// Get the extensions that have been registered.
-		IExtensionPoint validatorEP = getValidatorExtensionPoint();
-		if (validatorEP == null) {
-			return;
-		}
-		IExtension[] extensions = validatorEP.getExtensions();
-
-		// find all runtime implementations
-		for (int i = 0; i < extensions.length; i++) {
-			readExtension(extensions[i]);
-		}
-	}
-
-	public IValidator getValidator(String validatorClassName) throws InstantiationException {
-		ValidatorMetaData vmd = (ValidatorMetaData) _indexedValidators.get(validatorClassName);
-		if(vmd != null)
-			return vmd.getValidator();
-		return null;
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationSelectionHandlerRegistryReader.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationSelectionHandlerRegistryReader.java
deleted file mode 100644
index 3876c4e..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationSelectionHandlerRegistryReader.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Created on Nov 23, 2004
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.eclipse.wst.validation.internal;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.RegistryReader;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-public class ValidationSelectionHandlerRegistryReader extends RegistryReader {
-
-	public static final String VALIDATION_SELECTION_HANDLER = "validationSelectionHandler"; //$NON-NLS-1$
-	static final String ATT_ID = "id"; //$NON-NLS-1$ 
-	static final String ATT_HANDLER_CLASS = "handlerClass"; //$NON-NLS-1$
-	static final String ATT_SELECTION_TYPE = "selectionType"; //$NON-NLS-1$
-	private static ValidationSelectionHandlerRegistryReader INSTANCE = null;
-	private List validationSelectionHandlers = null;
-	
-	/**
-	 * Default constructor
-	 */
-	public ValidationSelectionHandlerRegistryReader() {
-		super(ValidationPlugin.PLUGIN_ID, VALIDATION_SELECTION_HANDLER);
-	}
-	
-	public static ValidationSelectionHandlerRegistryReader getInstance() {
-		if (INSTANCE == null) {
-			INSTANCE = new ValidationSelectionHandlerRegistryReader();
-			INSTANCE.readRegistry();
-		}
-		return INSTANCE;
-	}
-
-	
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jem.util.RegistryReader#readElement(org.eclipse.core.runtime.IConfigurationElement)
-	 */
-	public boolean readElement(IConfigurationElement element) {
-		if (!element.getName().equals(VALIDATION_SELECTION_HANDLER))
-			return false;
-		
-//		String handlerClass = element.getAttribute(ATT_HANDLER_CLASS);
-		String selectionType = element.getAttribute(ATT_SELECTION_TYPE); 
-		
-		IValidationSelectionHandler handler = null;
-		try {
-			handler = (IValidationSelectionHandler) element.createExecutableExtension(ATT_HANDLER_CLASS);
-			handler.setValidationTypeString(selectionType);
-			getValidationSelectionHandlers().add(handler);
-			return true;
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-	   return false;
-	}
-	
-	private List getValidationSelectionHandlers() {
-		if (validationSelectionHandlers == null)
-			validationSelectionHandlers = new ArrayList();
-		return validationSelectionHandlers;
-	}
-	
-	public Object getExtendedType(Object selection) {
-		Object result = null;
-		for (int i=0; i<getValidationSelectionHandlers().size(); i++ ) {
-			IValidationSelectionHandler handler = (IValidationSelectionHandler) getValidationSelectionHandlers().get(i);
-			result = handler.getBaseValidationType(selection);
-			if (result != null)
-				break;
-		}
-		return result;
-	}
-}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorActionFilter.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorActionFilter.java
deleted file mode 100644
index ee241be..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorActionFilter.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-
-import java.util.StringTokenizer;
-
-import org.eclipse.core.resources.IResourceDelta;
-
-/**
- * This class stores the value of the "action" attribute in the validator's plugin.xml contribution.
- */
-public class ValidatorActionFilter {
-	public static final String ADD = "add"; //$NON-NLS-1$ // if the resource delta is an addition; this value is used in plugin.xml
-	public static final String CHANGE = "change"; //$NON-NLS-1$ // if the resource delta is a change; this value is used in plugin.xml
-	public static final String DELETE = "delete"; //$NON-NLS-1$ // if the resource delta is a removal; this value is used in plugin.xml
-	public static final int ALL_ACTIONS = (IResourceDelta.ADDED | IResourceDelta.CHANGED | IResourceDelta.REMOVED);
-
-	private int _actionType = 0; // Default to 0, so that if an invalid filter is specified, then no
-
-	// matter what the IResourceDelta is, the delta & _actionType will
-	// always == 0. (i.e., the resource will never be filtered in)
-
-	public ValidatorActionFilter() {
-		super();
-	}
-
-	/**
-	 * Return the hexadecimal number which represents the type(s) of actions which this filter
-	 * allows in.
-	 */
-	public int getActionType() {
-		// Since IResourceDelta's constants are hexadecimal numbers,
-		// it's nicer to return a corresponding hexadecimal, for bitwise OR,
-		// than it is to have three boolean methods on this class, i.e.,
-		// isAdd, isChange, isDelete.
-		return _actionType;
-	}
-
-	/**
-	 * <p>
-	 * Parse the incoming string, which is extracted from the plugin.xml file, to determine the
-	 * value of the actionType.
-	 * <p>
-	 * The string can contain one, two, or three constants. If there is more than one constant, the
-	 * constants should be separated by a comma.
-	 * <p>
-	 * These are the three constants: add, change, delete. The order that the constants are
-	 * specified in does not matter. The constants are case-sensitive; i.e., ADD is not considered
-	 * the same as add.
-	 * <p>
-	 * If the action attribute is not defined, the default behaviour is to filter in all types of
-	 * actions: add, change, delete. (i.e., the same behaviour can be achieved by specifying "add,
-	 * change, delete" as the action attribute's value.
-	 * <p>
-	 * If the action attribute is defined, and none of the constants are defined, then the filter is
-	 * invalid, and will be ignored by the Validation Framework. (If none of the actions should be
-	 * filtered in, then the filter itself should not exist.)
-	 * <p>
-	 * If the action attribute is defined, and one of the constants is defined, then the form of the
-	 * action should be like this: <br>
-	 * &nbsp;&nbsp;&nbsp;&lt;filter ... action="add"/>
-	 * <p>
-	 * If the action attribute is defined, and more than one constant is defined, then the form of
-	 * the action should be like this: <br>
-	 * &nbsp;&nbsp;&nbsp;&lt;filter ... action="add, delete"/>
-	 * <p>
-	 * If the action attribute is defined, and an unknown constant is defined, then the unknown
-	 * constant will be ignored. For example, <br>
-	 * &nbsp;&nbsp;&nbsp;&lt;filter ... action="ADD, delete"/> <br>
-	 * is the same as specifying <br>
-	 * &nbsp;&nbsp;&nbsp;&lt;filter ... action="delete"/> <br>
-	 * and if all of the constants are unknown, the filter is invalid, and will be ignored by the
-	 * Validation Framework. e.g., <br>
-	 * &nbsp;&nbsp;&nbsp;&lt;filter ... action="ADD, DELETE"/> <br>
-	 * is the same as not specifying a filter.
-	 * <p>
-	 * If the action attribute is defined, and a constant is defined more than once, the extra
-	 * constant is ignored. For example, <br>
-	 * &nbsp;&nbsp;&nbsp;&lt;filter ... action="add, change, add"/> <br>
-	 * is the same as specifying <br>
-	 * &nbsp;&nbsp;&nbsp;&lt;filter ... action="add, change"/>
-	 */
-	public void setActionTypes(String actions) {
-		if (actions == null) {
-			// user has not defined the "action" element, so default to everything
-			_actionType = ALL_ACTIONS;
-			return;
-		}
-
-		final String COMMA = ","; //$NON-NLS-1$
-		StringTokenizer tokenizer = new StringTokenizer(actions, COMMA, false); // false means don't
-		// return the comma
-		// as part of the
-		// string
-		int isAdd = 0;
-		int isChange = 0;
-		int isDelete = 0;
-		while (tokenizer.hasMoreTokens()) {
-			String nextAction = tokenizer.nextToken().trim();
-			if (nextAction.equals(ADD)) {
-				isAdd = IResourceDelta.ADDED;
-			} else if (nextAction.equals(CHANGE)) {
-				isChange = IResourceDelta.CHANGED;
-			} else if (nextAction.equals(DELETE)) {
-				isDelete = IResourceDelta.REMOVED;
-			}
-		}
-		_actionType = isAdd | isChange | isDelete;
-	}
-
-	public String toString() {
-		final String ON = "on"; //$NON-NLS-1$
-		final String OFF = "off"; //$NON-NLS-1$
-		StringBuffer buffer = new StringBuffer();
-		buffer.append("     ActionFilter:"); //$NON-NLS-1$
-		buffer.append("          add: " + (((getActionType() & IResourceDelta.ADDED) != 0) ? ON : OFF)); //$NON-NLS-1$
-		buffer.append("          change: " + (((getActionType() & IResourceDelta.CHANGED) != 0) ? ON : OFF)); //$NON-NLS-1$
-		buffer.append("          delete: " + (((getActionType() & IResourceDelta.REMOVED) != 0) ? ON : OFF)); //$NON-NLS-1$
-		return buffer.toString();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorFilter.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorFilter.java
deleted file mode 100644
index 8035a0c..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorFilter.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-import org.eclipse.core.resources.IResource;
-
-
-
-/**
- * This class represents the plugin.xml tags, for a validator, for both name filters and type
- * filters. i.e., if an object has name filter and type filter specified, the filter filters out
- * objects which are not both of that type and named like the filter.
- */
-public class ValidatorFilter {
-	private ValidatorNameFilter _nameFilter = null;
-	private ValidatorTypeFilter _typeFilter = null;
-	private ValidatorActionFilter _actionFilter = null;
-
-	/* package */ValidatorFilter() {
-		super();
-		_nameFilter = new ValidatorNameFilter();
-		_typeFilter = new ValidatorTypeFilter();
-		_actionFilter = new ValidatorActionFilter();
-	}
-
-	/* package */ValidatorFilter(String mustImplementClass) {
-		this();
-		_nameFilter = new ValidatorNameFilter();
-		_typeFilter.setMustImplementClass(mustImplementClass);
-		_actionFilter = new ValidatorActionFilter();
-	}
-
-	public boolean isApplicableAction(int resourceDelta) {
-		return ((resourceDelta & _actionFilter.getActionType()) != 0);
-	}
-
-	/**
-	 * Returns true if the given resource's name matches the name filter.
-	 * 
-	 * e.g. if the name filter is "*.java", and this resource is "readme.txt", this method will
-	 * return false. If the resource is named "readme.java", this method will return true.
-	 */
-	/* package */boolean isApplicableName(IResource resource) {
-		return _nameFilter.isApplicableName(resource);
-	}
-
-	/**
-	 * Returns true if the given resource's type matches the type filter.
-	 * 
-	 * e.g. if the type filter is "IFile", and this resource is "IProject", this method will return
-	 * false. If the resource is an IFile, this method will return true.
-	 */
-	/* package */boolean isApplicableType(IResource resource) {
-		return _typeFilter.isApplicableType(resource);
-	}
-
-	public void setActionFilter(String actions) {
-		_actionFilter.setActionTypes(actions);
-	}
-
-	/**
-	 * Sets the name filter.
-	 */
-	/* package */void setNameFilter(String filter, String isCaseSensitiveString) {
-		_nameFilter.setNameFilter(filter);
-		if(filter != null)
-			  _nameFilter.setNameFilterExtension(getFilterExt(filter));
-		_nameFilter.setCaseSensitive(isCaseSensitiveString);
-	}
-	
-	private String getFilterExt(String filter) {
-		return filter.substring(filter.indexOf(".") + 1);
-	}
-	
-
-	/**
-	 * Sets the type filter.
-	 */
-	/* package */void setTypeFilter(String filter) {
-		_typeFilter.setTypeFilter(filter);
-	}
-
-	public String toString() {
-		final String lineSep = System.getProperty("line.separator"); //$NON-NLS-1$
-		StringBuffer buffer = new StringBuffer();
-		buffer.append("ValidatorFilter:"); //$NON-NLS-1$
-		buffer.append(lineSep);
-		buffer.append("     nameFilter = " + _nameFilter); //$NON-NLS-1$
-		buffer.append(lineSep);
-		buffer.append("     typeFilter = " + _typeFilter); //$NON-NLS-1$
-		buffer.append(lineSep);
-		buffer.append("     actionFilter = " + _actionFilter); //$NON-NLS-1$
-		buffer.append(lineSep);
-		return buffer.toString();
-	}
-
-	/**
-	 * @return Returns the _nameFilter.
-	 */
-	public ValidatorNameFilter get_nameFilter() {
-		return _nameFilter;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorMetaData.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorMetaData.java
deleted file mode 100644
index 9c231ae..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorMetaData.java
+++ /dev/null
@@ -1,510 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.operations.IWorkbenchContext;
-import org.eclipse.wst.validation.internal.operations.WorkbenchContext;
-import org.eclipse.wst.validation.internal.plugin.ValidationHelperRegistryReader;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-import org.eclipse.wst.validation.internal.provisional.core.IValidator;
-import org.osgi.framework.Bundle;
-
-/**
- * This class stores information, as specified by a validator's plugin.xml tags. There is one
- * ValidatorMetaData for each Validator. No Validator should attempt to access its
- * ValidatorMetaData; it is for use by the base framework only.
- */
-public class ValidatorMetaData {
-	private ValidatorFilter[] _filters = null;
-	private ValidatorNameFilter[] _projectNatureFilters = null;
-	private IValidator _validator = null;
-	private IWorkbenchContext _helper = null;
-	private String _validatorDisplayName = null;
-	private String _validatorUniqueName = null;
-	private String[] _aggregatedValidators = null;
-	private String[] _validatorNames = null;
-	private String _pluginId = null;
-	private boolean _supportsIncremental = RegistryConstants.ATT_INCREMENTAL_DEFAULT;
-	private boolean _supportsFullBuild = RegistryConstants.ATT_FULLBUILD_DEFAULT;
-	private Logger _logger = null;
-	private boolean _isEnabledByDefault = RegistryConstants.ATT_ENABLED_DEFAULT;
-	private MigrationMetaData _migrationMetaData = null;
-	private int _ruleGroup = RegistryConstants.ATT_RULE_GROUP_DEFAULT;
-	private boolean _async = RegistryConstants.ATT_ASYNC_DEFAULT;
-	private boolean dependentValidator = RegistryConstants.DEP_VAL_VALUE_DEFAULT;
-	private String markerId = null;
-	private String _helperClassName = null;
-	private IConfigurationElement _helperClassElement = null;
-	private IConfigurationElement _validatorClassElement = null;
-	private boolean _cannotLoad = false;
-
-	/* package */ValidatorMetaData() {
-		//default
-	}
-
-	/**
-	 * Add to the list of class names of every validator which this validator aggregates. For
-	 * example, if the EJB Validator instantiated another validator, and started its validate
-	 * method, then that instantiated class' name should be in this list.
-	 */
-	/* package */void addAggregatedValidatorNames(String[] val) {
-		_aggregatedValidators = val;
-	}
-
-	/**
-	 * Add the name/type filter pair(s).
-	 */
-	/* package */void addFilters(ValidatorFilter[] filters) {
-		_filters = filters;
-	}
-
-	/**
-	 * Add the project nature filter(s).
-	 */
-	/* package */void addProjectNatureFilters(ValidatorNameFilter[] filters) {
-		_projectNatureFilters = filters;
-	}
-
-	public List getNameFilters() {
-		List nameFilters = new ArrayList();
-		if (_filters != null && _filters.length > 0) {
-			for (int i = 0; i < _filters.length; i++) {
-				ValidatorFilter filter = _filters[i];
-				ValidatorNameFilter nameFilter = filter.get_nameFilter();
-				if (nameFilter != null) {
-					nameFilters.add(nameFilter.getNameFilter());
-				}
-
-			}
-		}
-		return nameFilters;
-	}
-
-	/**
-	 * Return the list of class names of the primary validator and its aggregates.
-	 */
-	public String[] getValidatorNames() {
-		if (_validatorNames == null) {
-			int aLength = (_aggregatedValidators == null) ? 0 : _aggregatedValidators.length;
-			_validatorNames = new String[aLength + 1]; // add 1 for the primary validator name
-			_validatorNames[0] = getValidatorUniqueName();
-			if (_aggregatedValidators != null) {
-				System.arraycopy(_aggregatedValidators, 0, _validatorNames, 1, aLength);
-			}
-		}
-		return _validatorNames;
-	}
-
-	/**
-	 * Return the list of class names of every validator which this validator aggregates. For
-	 * example, if the EJB Validator instantiated another validator, and started its validate
-	 * method, then that instantiated class' name should be in this list.
-	 */
-	public String[] getAggregatedValidatorNames() {
-		return _aggregatedValidators;
-	}
-
-	/**
-	 * Return the name/type filter pairs.
-	 */
-	public ValidatorFilter[] getFilters() {
-		return _filters;
-	}
-
-	/**
-	 * Return true if this vmd's helper and validator have been instantiated, and also if this
-	 * validator's plugin is active.
-	 */
-	public boolean isActive() {
-		if (_helperClassElement != null) {
-			return false;
-		}
-
-		if (_validatorClassElement != null) {
-			return false;
-		}
-
-		Bundle bundle = Platform.getBundle(_pluginId);
-		if (bundle != null)
-			return bundle.getState() == Bundle.ACTIVE;
-
-		return false;
-	}
-
-	/**
-	 * This method will throw an InstantiationException if the helper cannot be instantiated, e.g.,
-	 * if the helper's plugin is disabled for some reason. Before the InstantiationException is
-	 * thrown, this validator will be disabled.
-	 * 
-	 * The IWorkbenchContext must ALWAYS have its project set before it is used; but it can't be
-	 * created with the IProject. So, before using the single instance, always initialize that
-	 * instance with the IProject.
-	 * 
-	 * If this validator supports asynchronous validation, then instead of maintaining a single the
-	 * helper instance, create a new IWorkbenchContext instance every time that the helper is needed.
-	 * This feature is provided because several validation Runnables may be queued to run, and if
-	 * those Runnables's project is different from the current validation's project, then the
-	 * current validation will suddenly start validating another project.
-	 */
-	//TODO just want to remember to figure out the many-temporary-objects problem if this method
-	// continues to new an IValidationContext every time - Ruth
-	public IWorkbenchContext getHelper(IProject project) throws InstantiationException {
-		if (isAsync()) {
-			IWorkbenchContext helper = ValidationRegistryReader.createHelper(_helperClassElement, _helperClassName);
-			if (helper == null) {
-				helper = new WorkbenchContext();
-				//setCannotLoad();
-				//throw new InstantiationException(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_DISABLEH, new String[]{_helperClassName, getValidatorUniqueName()}));
-			}
-			helper.setProject(project);
-			return helper;
-		}
-		if (_helper == null) {
-			_helper = ValidationRegistryReader.createHelper(_helperClassElement, _helperClassName);
-			if (_helper == null) {
-				_helper = new WorkbenchContext();
-				//setCannotLoad();
-				//throw new InstantiationException(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_DISABLEH, new String[]{_helperClassName, getValidatorUniqueName()}));
-			}
-			// Won't be using the element & name again, so clear them.
-			_helperClassElement = null;
-			_helperClassName = null;
-		}
-		if ((_helper.getProject() == null) || !(_helper.getProject().equals(project))) {
-			// Initialize helper with the new project
-			_helper.setProject(project);
-		}
-		return _helper;
-	}
-
-	/**
-	 * cannotLoad is false if both the IValidator and IWorkbenchContext instance can be instantiated.
-	 * This method should be called only by the validation framework, and only if an
-	 * InstantiationException was thrown.
-	 * 
-	 * @param can
-	 */
-	private void setCannotLoad() {
-		_cannotLoad = true;
-	}
-
-	/**
-	 * Return false if both the IValidator and IWorkbenchContext instance can be instantiated.
-	 * 
-	 * @return boolean
-	 */
-	public boolean cannotLoad() {
-		return _cannotLoad;
-	}
-
-	/**
-	 * This method must not be called until the unique id of the validator has been initialized.
-	 */
-	public Logger getMsgLogger() {
-		if (_logger == null) {
-			_logger = ValidationPlugin.getPlugin().getMsgLogger();
-			/*
-			 * // Decided against having a logger for each validator because each validator // would
-			 * need to contribute an extension in their plugins for it to be recognized // by the
-			 * logging preference page. For now, just use the validation framework's logger. _logger =
-			 * (MsgLogger)MsgLogger.getFactory().getLogger(getValidatorUniqueName());
-			 * _logger.write(Level.CONFIG, getValidatorDisplayName());
-			 */
-		}
-		return _logger;
-	}
-
-	public MigrationMetaData getMigrationMetaData() {
-		return _migrationMetaData;
-	}
-
-	/**
-	 * Return the IRuleGroup integer indicating which groups of rules this validator recognizes.
-	 */
-	public int getRuleGroup() {
-		return _ruleGroup;
-	}
-
-	/**
-	 * Return the filters which identify which project(s) this validator may run on.
-	 */
-	/* package */ValidatorNameFilter[] getProjectNatureFilters() {
-		return _projectNatureFilters;
-	}
-
-	/**
-	 * This method returns the validator if it can be loaded; if the validator cannot be loaded,
-	 * e.g., if its plugin is disabled for some reason, then this method throws an
-	 * InstantiationException. Before the CoreException is thrown, this validator is disabled.
-	 * 
-	 * @return IValidator
-	 * @throws InstantiationException
-	 */
-	public IValidator getValidator() throws InstantiationException {
-		if (_validator == null) {
-			_validator = ValidationRegistryReader.createValidator(_validatorClassElement, getValidatorUniqueName());
-
-			// Since the element won't be used any more, clear it.
-			_validatorClassElement = null;
-
-			if (_validator == null) {
-				setCannotLoad();
-				throw new InstantiationException(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_DISABLEV, new String[]{getValidatorUniqueName()}));
-			}
-		}
-		return _validator;
-	}
-
-	public String getValidatorDisplayName() {
-		return _validatorDisplayName;
-	}
-
-	public String getValidatorUniqueName() {
-		return _validatorUniqueName;
-	}
-
-	/**
-	 * If the resource is applicable to the Validator which this ValidatorMetaData is associated
-	 * with, return true; else return false.
-	 * 
-	 * A resource is applicable if it passes the name/type filters. This method is called if there
-	 * is no resource delta (i.e., a full validation).
-	 */
-	public boolean isApplicableTo(IResource resource) {
-		return isApplicableTo(resource, ValidatorActionFilter.ALL_ACTIONS);
-	}
-
-	/**
-	 * If the resource is applicable to the Validator which this ValidatorMetaData is associated
-	 * with, return true; else return false.
-	 * 
-	 * A resource is applicable if it passes the name/type filters.
-	 */
-	public boolean isApplicableTo(IResource resource, int resourceDelta) {
-		// If no filters are specified, then every type of resource should be validated/trigger a
-		// rebuild of the model cache
-		if (_filters == null)
-			return true;
-
-		return isApplicableTo(resource, resourceDelta, _filters);
-	}
-
-	/**
-	 * Return true if the resource passes the name/type filters for this validator.
-	 */
-	/* package */boolean isApplicableTo(IResource resource, int resourceDelta, ValidatorFilter[] filters) {
-		// Are any of the filters satisfied? (i.e., OR them, not AND them.)
-		for (int i = 0; i < filters.length; i++) {
-			ValidatorFilter filter = filters[i];
-			if (checkIfValidSourceFile(resource) && filter.isApplicableType(resource) && filter.isApplicableName(resource) && filter.isApplicableAction(resourceDelta)) {
-				return true;
-			}
-		}
-		return false;
-	}
-	
-	private boolean checkIfValidSourceFile(IResource file) {
-		if (file.getType() == IResource.FILE) {
-			IProjectValidationHelper helper = ValidationHelperRegistryReader.getInstance().getValidationHelper();
-			IProject project = file.getProject();
-			if (helper == null || project == null)
-				return true;
-			IContainer[] outputContainers = helper.getOutputContainers(project);
-			IContainer[] sourceContainers = helper.getSourceContainers(project);
-			for (int i=0; i<outputContainers.length; i++) {
-				String outputPath = outputContainers[i].getProjectRelativePath().makeAbsolute().toString();
-				for (int j=0; j<sourceContainers.length; j++) {
-					String sourceContainerPath = sourceContainers[j].getProjectRelativePath().makeAbsolute().toString();
-					if (outputPath.equals(sourceContainerPath))
-						continue;
-				}
-				String filePath = file.getProjectRelativePath().makeAbsolute().toString();
-				if (filePath.startsWith(outputPath))
-					return false;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * If this validator recognizes the project nature, whether included or excluded, return the
-	 * name filter which describes the nature. Otherwise return null.
-	 */
-	ValidatorNameFilter findProjectNature(String projId) {
-		if (projId == null) {
-			return null;
-		}
-
-		if (_projectNatureFilters == null) {
-			// If no tag is specified, this validator is configured on all IProjects
-			return null;
-		}
-
-		for (int i = 0; i < _projectNatureFilters.length; i++) {
-			ValidatorNameFilter filter = _projectNatureFilters[i];
-			// In this case, we're not checking if the project is an instance of the filter class,
-			// but if it has the Nature specified in the filter class.
-			String projectNatureID = filter.getNameFilter();
-			if (projId.equals(projectNatureID)) {
-				return filter;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Convenience method. Rather than store the is-this-vmd-configured-on-this-IProject algorithm
-	 * in two places, refer back to the reader's cache.
-	 */
-	public boolean isConfiguredOnProject(IProject project) {
-		return ValidationRegistryReader.getReader().isConfiguredOnProject(this, project);
-	}
-
-	public boolean isEnabledByDefault() {
-		return _isEnabledByDefault;
-	}
-
-	public boolean isIncremental() {
-		return _supportsIncremental;
-	}
-
-	public boolean isFullBuild() {
-		return _supportsFullBuild;
-	}
-
-	/**
-	 * Return true if the validator is thread-safe and can be run asynchronously.
-	 */
-	public boolean isAsync() {
-		return _async;
-	}
-
-	/* package */void setHelperClass(IConfigurationElement element, String helperClassName) {
-		_helperClassElement = element;
-		_helperClassName = helperClassName;
-	}
-
-	/* package */void setEnabledByDefault(boolean enabledByDefault) {
-		_isEnabledByDefault = enabledByDefault;
-	}
-
-	/* package */void setIncremental(boolean isIncremental) {
-		_supportsIncremental = isIncremental;
-	}
-
-	/* package */void setFullBuild(boolean fullBuild) {
-		_supportsFullBuild = fullBuild;
-	}
-
-	/* package */void setAsync(boolean isAsync) {
-		_async = isAsync;
-	}
-
-	/* package */void setMigrationMetaData(MigrationMetaData mmd) {
-		_migrationMetaData = mmd;
-	}
-
-	/* package */void setRuleGroup(int ruleGroup) {
-		_ruleGroup = ruleGroup;
-	}
-
-	/* package */void setValidatorClass(IConfigurationElement element) {
-		_validatorClassElement = element;
-		// validator class name == validatorUniqueName
-	}
-
-	/* package */void setValidatorDisplayName(String validatorName) {
-		_validatorDisplayName = validatorName;
-	}
-
-	/* package */void setValidatorUniqueName(String validatorUniqueName) {
-		_validatorUniqueName = validatorUniqueName;
-	}
-
-	/* package */void setPluginId(String validatorPluginId) {
-		_pluginId = validatorPluginId;
-	}
-
-	public String toString() {
-		return getValidatorUniqueName();
-	}
-
-	public class MigrationMetaData {
-		private Set _ids = null;
-
-		public MigrationMetaData() {
-			//default
-		}
-
-		public void addId(String oldId, String newId) {
-			if (oldId == null) {
-				// log
-				return;
-			}
-
-			if (newId == null) {
-				// log
-				return;
-			}
-
-			String[] ids = new String[]{oldId, newId};
-			getIds().add(ids);
-		}
-
-		public Set getIds() {
-			if (_ids == null) {
-				_ids = new HashSet();
-			}
-			return _ids;
-		}
-	}
-
-	/**
-	 * @param b
-	 */
-	public void addDependentValidator(boolean b) {
-		dependentValidator = b;
-	}
-
-	/**
-	 * @param b
-	 */
-	public boolean isDependentValidator() {
-		return dependentValidator;
-	}
-
-	/**
-	 * @return Returns the markerId.
-	 */
-	public String getMarkerId() {
-		return markerId;
-	}
-
-	/**
-	 * @param markerId
-	 *            The markerId to set.
-	 */
-	public void setMarkerId(String markerId) {
-		this.markerId = markerId;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorNameFilter.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorNameFilter.java
deleted file mode 100644
index 75d857a..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorNameFilter.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-
-import java.util.StringTokenizer;
-
-import org.eclipse.core.resources.IResource;
-
-/**
- * Represents a name filter tag in a validator's plugin.xml file. e.g. &lt;filter name="*.*"> Then
- * this class would store the "*.*", and provide the wildcard matching functionality.
- */
-public class ValidatorNameFilter {
-	private String _nameFilter = null;
-	private String nameFilterExtension = null;
-	private boolean _include = true; // by default, filter in the IFile specified
-	private final static String WILDCARD = "*"; //$NON-NLS-1$
-	private boolean _isCaseSensitive = true; // by default, the filter name is case-sensitive
-
-	/**
-	 * Insert the method's description here. Creation date: (12/4/00 11:08:41 AM)
-	 */
-	/* package */ValidatorNameFilter() {
-		//default
-	}
-
-	/**
-	 * Get the filter, as specified in plugin.xml
-	 */
-	/* package */String getNameFilter() {
-		return _nameFilter;
-	}
-
-	/* package */boolean isCaseSensitive() {
-		return _isCaseSensitive;
-	}
-
-	/* package */boolean isInclude() {
-		return _include;
-	}
-
-	/**
-	 * Return true if the given resource is both applicable and include="true".
-	 */
-	/* package */boolean isApplicableTo(IResource resource) {
-		return (isApplicableName(resource) && isInclude());
-	}
-	
-	protected void setNameFilterExtension(String filterExt) {
-		nameFilterExtension = filterExt;
-	}
-
-	/**
-	 * Returns true if the name of the resource matches the filter, or if there is no filter
-	 * specified.
-	 */
-	public boolean isApplicableName(IResource resource) {
-		// If name filter is null, means filter out no names.
-		// Otherwise, return true only if the given name matches
-		// the name filter.
-		if (_nameFilter == null)
-			return true;
-		
-		String name = resource.getName();
-//		return true if the file name is exact match of the _nameFilter
-		if (name.equalsIgnoreCase(_nameFilter))
-			return true;
-
-		int indexOfStarDot = _nameFilter.indexOf("*.");
-
-		//return value if the fileter name extension matches the extension
-		//of the resource 
-		if (indexOfStarDot != -1) {
-			String nameExtension = name.substring(name.indexOf(".") + 1);
-			return nameFilterExtension.equalsIgnoreCase(nameExtension);
-		}
-
-		if (!isCaseSensitive()) {
-			name = name.toLowerCase();
-		}
-
-		return verifyNameMatch(_nameFilter, name);
-	}
-
-	/* package */void setInclude(String includeValue) {
-		if (includeValue != null) {
-			setInclude(Boolean.valueOf(includeValue).booleanValue());
-		}
-	}
-
-	void setInclude(boolean includeBool) {
-		_include = includeBool;
-	}
-
-	/**
-	 * Set the filter, as specified in plugin.xml
-	 */
-	/* package */void setNameFilter(String filter) {
-		_nameFilter = filter;
-	}
-
-	/* package */void setCaseSensitive(String isCaseSensitiveString) {
-		if (isCaseSensitiveString != null) {
-			// only change the value from the default if the case-sensitive attribute is defined
-			_isCaseSensitive = Boolean.valueOf(isCaseSensitiveString).booleanValue();
-		}
-	}
-
-	public String toString() {
-		StringBuffer buffer = new StringBuffer();
-		buffer.append("NameFilter:\n\tnameFilter = "); //$NON-NLS-1$
-		buffer.append(_nameFilter);
-		return buffer.toString();
-	}
-
-	/**
-	 * Return true if the given name matches the given filter.
-	 * 
-	 * The only filter wildcard allowed is '*'.
-	 */
-	/* package */static boolean verifyNameMatch(final String filter, String name) {
-		/*
-		 * There are eight possible wildcard combinations, given that a wildcard may, if present, be
-		 * at the beginning, middle, or end of a name; or any combination of those positions. i.e.,
-		 * 
-		 * beginning middle end 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1
-		 *  
-		 */
-		StringTokenizer tokenizer = new StringTokenizer(filter, WILDCARD, true);
-		boolean wildcardFlag = false;
-		while (tokenizer.hasMoreTokens()) {
-			String token = tokenizer.nextToken();
-			if (token.equals(WILDCARD)) {
-				wildcardFlag = true;
-			} else {
-				if (wildcardFlag) {
-					int tokenIndex = name.indexOf(token);
-					if (tokenIndex >= 0) {
-						name = name.substring(tokenIndex + token.length());
-					} else {
-						return false;
-					}
-				} else {
-					if (name.startsWith(token)) {
-						int tokenIndex = token.length();
-						name = name.substring(tokenIndex);
-					} else {
-						return false;
-					}
-				}
-				wildcardFlag = false;
-			}
-		}
-		if (!name.equals("")) { //$NON-NLS-1$
-			if (!wildcardFlag) {
-				return false;
-			}
-		}
-		return true;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorTypeFilter.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorTypeFilter.java
deleted file mode 100644
index 0f00ce3..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorTypeFilter.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal;
-
-import java.text.MessageFormat;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-/**
- * Represents a type filter tag in a validator's plugin.xml file. e.g. &lt;filter
- * objectClass="com.ibm.foo.MyClass"> Then this class would store the "com.ibm.foo.MyClass", and
- * provide the "instanceof" matching functionality.
- */
-public class ValidatorTypeFilter {
-	private Class _typeFilterClass = null;
-	private String _mustImplementClass = null; // the type set in setTypeFilter must implement the
-
-	// class/interface identified by this fully-qualified
-	// Java string.
-
-	/* package */ValidatorTypeFilter() {
-		//default
-	}
-
-	/* package */ValidatorTypeFilter(String mustImplementClass) {
-		setMustImplementClass(mustImplementClass);
-	}
-
-	/**
-	 * Type filters are allowed only for certain types of classes. This method returns the name of
-	 * the class which this type must implement before it can be a filter.
-	 */
-	/* package */String getMustImplementClass() {
-		return _mustImplementClass;
-	}
-
-	/**
-	 * Return the type filter as a java.lang.Class object.
-	 */
-	/* package */Class getTypeFilterClass() {
-		return _typeFilterClass;
-	}
-
-	/**
-	 * Returns true if the resource passed in either an instance of the type filter class, or if
-	 * there is no type filter class defined in plugin.xml.
-	 */
-	public boolean isApplicableType(IResource resource) {
-		// If type filter is null, means filter out no types.
-		// Otherwise, return true only if the given type is an instance of
-		// the type filter.
-		if (_typeFilterClass == null)
-			return true;
-
-		// If the resource is an instance of the type filter class.
-		return isInstance(resource.getClass(), _typeFilterClass);
-	}
-
-	/**
-	 * Checks if filterClass is a parent (interface or superclass) of objectClass.
-	 */
-	/* package */boolean isInstance(Class objectClass, Class filterClass) {
-		// The java.lang.Class.isInstance call doesn't check interfaces fully.
-		// i.e., if I have two interfaces, A and B, and B extends A but
-		// doesn't implement A, then the isInstance call will return false.
-		//
-		// So, instead of using Class.isInstance, do the checking myself.
-		for (Class cl = objectClass; cl != null; cl = cl.getSuperclass()) {
-			if (cl.getName().equals(filterClass.getName())) {
-				return true;
-			}
-			Class[] clInterfaces = cl.getInterfaces();
-			for (int i = 0; i < clInterfaces.length; i++) {
-				if (clInterfaces[i].getName().equals(filterClass.getName())) {
-					return true;
-				}
-				return isInstance(clInterfaces[i], filterClass);
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Type filters are allowed only for certain types of classes. This method sets the name of the
-	 * class which this type must implement before it can be a filter.
-	 */
-	/* package */void setMustImplementClass(String className) {
-		_mustImplementClass = className;
-	}
-
-	/**
-	 * If the filter implements the mustImplementClass (in ValidatorFilter's case, IResource), then
-	 * this is a valid filter, and store the filter value.
-	 */
-	/* package */void setTypeFilter(String filter) {
-		Class filterClass = null;
-		Class mustImplementClass = null;
-
-		if (filter == null) {
-			_typeFilterClass = null;
-			return;
-		}
-
-		try {
-			filterClass = Class.forName(filter);
-			if (getMustImplementClass() != null) {
-				mustImplementClass = Class.forName(getMustImplementClass());
-
-				// If the filter class is not an instance of mustImplementClass
-				if (!isInstance(filterClass, mustImplementClass)) {
-					_typeFilterClass = null;
-					Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.FINE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setSourceID("ValidatorTypeFilter.setTypeFilter(String)"); //$NON-NLS-1$
-						entry.setMessageTypeID(ResourceConstants.VBF_EXC_INVALID_TYPE_FILTER);
-						String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INVALID_TYPE_FILTER), new String[]{filter, getMustImplementClass()});
-						entry.setText(result);						
-						//entry.setTokens(new String[]{filter, getMustImplementClass()});
-						logger.write(Level.FINE, entry);
-					}
-				}
-			}
-		} catch (ClassNotFoundException exc) {
-			_typeFilterClass = null;
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidatorTypeFilter.setTypeFilter(String)"); //$NON-NLS-1$
-				entry.setText("The class named " + filter + " cannot be instantiated because it does not exist. Check the spelling of the name, in the validator's plugin.xml contribution, and try restarting eclipse again."); //$NON-NLS-1$  //$NON-NLS-2$
-				logger.write(Level.FINE, entry);
-			}
-			return;
-		}
-		_typeFilterClass = filterClass;
-	}
-
-	public String toString() {
-		StringBuffer buffer = new StringBuffer();
-		buffer.append("TypeFilter:"); //$NON-NLS-1$
-		buffer.append("     _typeFilterClass = " + _typeFilterClass.getName()); //$NON-NLS-1$
-		buffer.append("     _mustImplementClass = " + _mustImplementClass); //$NON-NLS-1$
-		return buffer.toString();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/AllValidatorsOperation.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/AllValidatorsOperation.java
deleted file mode 100644
index f32ae59..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/AllValidatorsOperation.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.ConfigurationManager;
-import org.eclipse.wst.validation.internal.InternalValidatorManager;
-import org.eclipse.wst.validation.internal.ProjectConfiguration;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-/**
- * Implemented Validators must not be called directly by anyone other than instances of
- * ValidationOperation, because some initialization of the validator, and handling of error
- * conditions, is done in the operation. The initialization is separated because some of the
- * information needed to initialize the validator (i.e., the project) isn't known until runtime.
- * 
- * This operation runs all validators: enabled validators, disabled validators, incremental
- * validators, full validators.
- * 
- * This operation is not intended to be subclassed outside of the validation framework.
- */
-public class AllValidatorsOperation extends ValidatorSubsetOperation {
-	/**
-	 * @deprecated Will be removed in Milestone 3. Use AllValidatorsOperation(IProject, boolean)
-	 */
-	public AllValidatorsOperation(IProject project) {
-		this(project, DEFAULT_ASYNC);
-	}
-
-	/**
-	 * Run all configured validators on the project, regardless of whether the validator is enabled
-	 * or disabled by the user.
-	 * 
-	 * If async is true, the validation will run all thread-safe validators in a background thread.
-	 * If async is false, no validators will run in a background thread.
-	 */
-	public AllValidatorsOperation(IProject project, boolean async) {
-		super(project, true, async);// always force validation to run
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			setEnabledValidators(InternalValidatorManager.wrapInSet(prjp.getValidators()));
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("EventManager::closing(" + project.getName() + ")"); //$NON-NLS-1$ //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, exc);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, exc);
-				}
-			}
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/DefaultResourceUtil.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/DefaultResourceUtil.java
deleted file mode 100644
index 39231d4..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/DefaultResourceUtil.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-/**
- * The default line number calculator (always returns "0").
- */
-public class DefaultResourceUtil implements IResourceUtil {
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.operations.IResourceUtil#getLineNo(Object)
-	 */
-	public int getLineNo(Object obj) {
-		return 0;
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/EnabledIncrementalValidatorsOperation.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/EnabledIncrementalValidatorsOperation.java
deleted file mode 100644
index 7fcd3f4..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/EnabledIncrementalValidatorsOperation.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.Set;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.ConfigurationManager;
-import org.eclipse.wst.validation.internal.FilterUtil;
-import org.eclipse.wst.validation.internal.InternalValidatorManager;
-import org.eclipse.wst.validation.internal.ProjectConfiguration;
-import org.eclipse.wst.validation.internal.RegistryConstants;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-/**
- * Implemented Validators must not be called directly by anyone other than instances of
- * ValidationOperation, because some initialization of the validator, and handling of error
- * conditions, is done in the operation. The initialization is separated because some of the
- * information needed to initialize the validator (i.e., the project) isn't known until runtime.
- * 
- * Instances of this operation load the project's configured validators, and run the validators if
- * they are both enabled and incremental.
- * 
- * This operation is not intended to be subclassed outside of the validation framework.
- */
-public class EnabledIncrementalValidatorsOperation extends EnabledValidatorsOperation {
-	/**
-	 * @deprecated Will be removed in Milestone 3. Use
-	 *             EnabledIncrementalValidatorsOperation(IProject, IResourceDelta, boolean)
-	 */
-	public EnabledIncrementalValidatorsOperation(IProject project, IResourceDelta delta) {
-		this(project, delta, DEFAULT_ASYNC);
-	}
-
-	/**
-	 * @deprecated Will be removed in Milestone 3. Use
-	 *             EnabledIncrementalValidatorsOperation(IProject, IResourceDelta, int, boolean)
-	 */
-	public EnabledIncrementalValidatorsOperation(IProject project, IResourceDelta delta, int ruleGroup) {
-		this(project, delta, ruleGroup, DEFAULT_ASYNC);
-	}
-
-	/**
-	 * @deprecated Will be removed in Milestone 3. Use
-	 *             EnabledIncrementalValidatorsOperation(IProject, IResourceDelta, int, boolean)
-	 *             instead.
-	 */
-	public EnabledIncrementalValidatorsOperation(IProject project, Set validators, IResourceDelta delta, int ruleGroup) {
-		this(project, delta, ruleGroup, DEFAULT_ASYNC);
-		setEnabledValidators(validators);
-	}
-
-	/**
-	 * IProject must exist and be open.
-	 * 
-	 * If delta is null, a full validation of the project using only the incremental validators is
-	 * performed. If delta is not null, all enabled incremental validators that validate resources
-	 * in the delta will validate those resources.
-	 * 
-	 * If async is true, all thread-safe validators will run in the background validation thread,
-	 * and all other validators will run in the main thread. If async is false, all validators will
-	 * run in the main thread.
-	 */
-	public EnabledIncrementalValidatorsOperation(IProject project, IResourceDelta delta, boolean async) {
-		this(project, delta, RegistryConstants.ATT_RULE_GROUP_DEFAULT, async);
-	}
-	
-	/**
-	 * IProject must exist and be open.
-	 * 
-	 * If delta is null, a full validation of the project using only the incremental validators is
-	 * performed. If delta is not null, all enabled incremental validators that validate resources
-	 * in the delta will validate those resources.
-	 * 
-	 * If async is true, all thread-safe validators will run in the background validation thread,
-	 * and all other validators will run in the main thread. If async is false, all validators will
-	 * run in the main thread.
-	 */
-	public EnabledIncrementalValidatorsOperation(IProject project, IWorkbenchContext context, IResourceDelta delta, boolean async) {
-		this(project,context, delta, RegistryConstants.ATT_RULE_GROUP_DEFAULT, async);
-	}
-	
-	/**
-	 * IProject must exist and be open.
-	 * 
-	 * If delta is null, a full validation of the project using only the incremental validators is
-	 * performed. If delta is not null, all enabled incremental validators that validate resources
-	 * in the delta will validate those resources.
-	 * 
-	 * If async is true, all thread-safe validators will run in the background validation thread,
-	 * and all other validators will run in the main thread. If async is false, all validators will
-	 * run in the main thread.
-	 */
-	public EnabledIncrementalValidatorsOperation(IProject project,IWorkbenchContext context, IResourceDelta delta, int ruleGroup, boolean async) {
-		super(project, ruleGroup, shouldForce(delta), async);
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			setEnabledValidators(InternalValidatorManager.wrapInSet(prjp.getEnabledIncrementalValidators(true)));
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("EnabledIncrementalVAlidatorsOperation(IProject<" + project.getName() + ">, IResourceDelta, int, boolean)"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, exc);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, exc);
-				}
-			}
-		}
-		setDelta(delta);
-		setContext(context);
-	}
-
-	/**
-	 * IProject must exist and be open.
-	 * 
-	 * If delta is null, a full validation of the project using only the incremental validators is
-	 * performed. If delta is not null, all enabled incremental validators that validate resources
-	 * in the delta will validate those resources.
-	 * 
-	 * If async is true, all thread-safe validators will run in the background validation thread,
-	 * and all other validators will run in the main thread. If async is false, all validators will
-	 * run in the main thread.
-	 */
-	public EnabledIncrementalValidatorsOperation(IProject project, IResourceDelta delta, int ruleGroup, boolean async) {
-		super(project, ruleGroup, shouldForce(delta), async);
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			setEnabledValidators(InternalValidatorManager.wrapInSet(prjp.getEnabledIncrementalValidators(true)));
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("EnabledIncrementalVAlidatorsOperation(IProject<" + project.getName() + ">, IResourceDelta, int, boolean)"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, exc);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, exc);
-				}
-			}
-		}
-		setDelta(delta);
-	}
-
-	/**
-	 * IProject must exist, be open, and contain all of the resources in changedResources. If some
-	 * of the resources in changedResources belong to different projects, the result is undefined.
-	 * 
-	 * If changedResources is null, a full validation of the project using only the incremental
-	 * validators is performed. If changedResources is not null, all enabled incremental validators
-	 * that validate resources in the changedResources array will validate those resources.
-	 * 
-	 * If async is true, all thread-safe validators will run in the background validation thread,
-	 * and all other validators will run in the main thread. If async is false, all validators will
-	 * run in the main thread.
-	 */
-	public EnabledIncrementalValidatorsOperation(IResource[] changedResources,IWorkbenchContext aWorkbenchContext, IProject project, boolean async) {
-		super(project, RegistryConstants.ATT_RULE_GROUP_DEFAULT, shouldForce(changedResources), async);
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			setEnabledValidators(InternalValidatorManager.wrapInSet(prjp.getEnabledIncrementalValidators(true)));
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("EnabledIncrementalValidatorsOperation(IResource[], IProject<" + project.getName() + ">, boolean)"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, exc);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-		//construct an array of IFileDelta[] to wrap the Object[]; one IFileDelta for each Object in the array
-		setFileDeltas(FilterUtil.getFileDeltas(getEnabledValidators(), changedResources, false));
-		setContext(aWorkbenchContext);
-	}
-	
-	/**
-	 * IProject must exist, be open, and contain all of the resources in changedResources. If some
-	 * of the resources in changedResources belong to different projects, the result is undefined.
-	 * 
-	 * If changedResources is null, a full validation of the project using only the incremental
-	 * validators is performed. If changedResources is not null, all enabled incremental validators
-	 * that validate resources in the changedResources array will validate those resources.
-	 * 
-	 * If async is true, all thread-safe validators will run in the background validation thread,
-	 * and all other validators will run in the main thread. If async is false, all validators will
-	 * run in the main thread.
-	 */
-	public EnabledIncrementalValidatorsOperation(IResource[] changedResources,IProject project, boolean async) {
-		super(project, RegistryConstants.ATT_RULE_GROUP_DEFAULT, shouldForce(changedResources), async);
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			setEnabledValidators(InternalValidatorManager.wrapInSet(prjp.getEnabledIncrementalValidators(true)));
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("EnabledIncrementalValidatorsOperation(IResource[], IProject<" + project.getName() + ">, boolean)"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, exc);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-		//construct an array of IFileDelta[] to wrap the Object[]; one IFileDelta for each Object in the array
-		setFileDeltas(FilterUtil.getFileDeltas(getEnabledValidators(), changedResources, false));
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/EnabledValidatorsOperation.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/EnabledValidatorsOperation.java
deleted file mode 100644
index a4e3cfd..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/EnabledValidatorsOperation.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-
-import java.util.Set;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.wst.validation.internal.RegistryConstants;
-
-
-/**
- * Implemented Validators must not be called directly by anyone other than instances of
- * ValidationOperation, because some initialization of the validator, and handling of error
- * conditions, is done in the operation. The initialization is separated because some of the
- * information needed to initialize the validator (i.e., the project) isn't known until runtime.
- * 
- * Instances of this operation run every enabled validator (both full and incremental) on the
- * project.
- * 
- * This operation is not intended to be subclassed outside of the validation framework.
- */
-public class EnabledValidatorsOperation extends ValidatorSubsetOperation {
-	
-
-	/**
-	 * @deprecated Will be removed in Milestone 3. Use EnabledValidatorsOperation(IProject, boolean)
-	 */
-	public EnabledValidatorsOperation(IProject project) {
-		this(project, DEFAULT_ASYNC);
-	}
-
-	/**
-	 * @deprecated Will be removed in Milestone 3. Use EnabledValidatorsOperation(IProject, int,
-	 *             boolean, boolean)
-	 */
-	public EnabledValidatorsOperation(IProject project, int ruleGroup) {
-		this(project, ruleGroup, DEFAULT_FORCE, DEFAULT_ASYNC);
-	}
-
-	/**
-	 * @deprecated Will be removed in Milestone 3. Use EnabledValidatorsOperation(IProject, int,
-	 *             boolean, boolean)
-	 */
-	public EnabledValidatorsOperation(IProject project, int ruleGroup, boolean force) {
-		this(project, ruleGroup, force, DEFAULT_ASYNC);
-	}
-
-	/**
-	 * Run all enabled validators on the project.
-	 * 
-	 * IProject must exist and be open.
-	 * 
-	 * If async is true, the validation will run all thread-safe validators in the background
-	 * validation thread, and all other validators in the main thread. If async is false, all
-	 * validators will run in in the main thread.
-	 */
-	public EnabledValidatorsOperation(IProject project, boolean async) {
-		this(project, RegistryConstants.ATT_RULE_GROUP_DEFAULT, DEFAULT_FORCE, async);
-	}
-	
-	/**
-	 * Run all enabled validators on the project.
-	 * 
-	 * IProject must exist and be open.
-	 * 
-	 * If async is true, the validation will run all thread-safe validators in the background
-	 * validation thread, and all other validators in the main thread. If async is false, all
-	 * validators will run in in the main thread.
-	 */
-	public EnabledValidatorsOperation(IProject project, IWorkbenchContext aWorkbenchContext, boolean async) {
-		this(project, aWorkbenchContext, RegistryConstants.ATT_RULE_GROUP_DEFAULT, DEFAULT_FORCE, async);
-	}
-	
-	/**
-	 * Run all enabled validators on the project with the identified ruleGroup.
-	 * 
-	 * IProject must exist and be open.
-	 * 
-	 * If async is true, the validation will run all thread-safe validators in the background
-	 * validation thread, and all other validators in the main thread. If async is false, all
-	 * validators will run in in the main thread.
-	 */
-	public EnabledValidatorsOperation(IProject project, IWorkbenchContext aWorkbenchContext, int ruleGroup, boolean force, boolean async) {
-		this(project, aWorkbenchContext, ValidatorManager.getManager().getEnabledValidators(project), ruleGroup, force, async);
-	}
-	
-
-	/**
-	 * Run all enabled validators on the project with the identified ruleGroup.
-	 * 
-	 * IProject must exist and be open.
-	 * 
-	 * If async is true, the validation will run all thread-safe validators in the background
-	 * validation thread, and all other validators in the main thread. If async is false, all
-	 * validators will run in in the main thread.
-	 */
-	public EnabledValidatorsOperation(IProject project, int ruleGroup, boolean force, boolean async) {
-		this(project, ValidatorManager.getManager().getEnabledValidators(project), ruleGroup, force, async);
-	}
-
-	/**
-	 * Run the identified validators on the project.
-	 * 
-	 * IProject must exist and be open.
-	 * 
-	 * If async is true, the validation will run all thread-safe validators in the background
-	 * validation thread, and all other validators in the main thread. If async is false, all
-	 * validators will run in in the main thread.
-	 */
-	protected EnabledValidatorsOperation(IProject project, Set enabledValidators, boolean async) {
-		this(project, enabledValidators, RegistryConstants.ATT_RULE_GROUP_DEFAULT, DEFAULT_FORCE, async); 
-		// true = force validation to run whether or not auto-validate is on
-	}
-	
-	/**
-	 * Run the identified validators on the project.
-	 * 
-	 * IProject must exist and be open.
-	 * 
-	 * If async is true, the validation will run all thread-safe validators in the background
-	 * validation thread, and all other validators in the main thread. If async is false, all
-	 * validators will run in in the main thread.
-	 */
-	protected EnabledValidatorsOperation(IProject project,IWorkbenchContext aWorkbenchContext, Set enabledValidators, boolean async) {
-		this(project,aWorkbenchContext, enabledValidators, RegistryConstants.ATT_RULE_GROUP_DEFAULT, DEFAULT_FORCE, async); 
-		// true = force validation to run whether or not auto-validate is on
-	}
-
-	/**
-	 * Run the identified validators on the project with the ruleGroup.
-	 * 
-	 * IProject must exist and be open.
-	 * 
-	 * If async is true, the validation will run all thread-safe validators in the background
-	 * validation thread, and all other validators in the main thread. If async is false, all
-	 * validators will run in in the main thread.
-	 */
-	protected EnabledValidatorsOperation(IProject project, Set enabledValidators, int ruleGroup, boolean force, boolean async) {
-		super(project, force, ruleGroup, async);
-		setEnabledValidators(enabledValidators);
-	}
-	
-	/**
-	 * Run the identified validators on the project with the ruleGroup.
-	 * 
-	 * IProject must exist and be open.
-	 * 
-	 * If async is true, the validation will run all thread-safe validators in the background
-	 * validation thread, and all other validators in the main thread. If async is false, all
-	 * validators will run in in the main thread.
-	 */
-	protected EnabledValidatorsOperation(IProject project, IWorkbenchContext aWorkbenchContext, Set enabledValidators, int ruleGroup, boolean force, boolean async) {
-		super(project,aWorkbenchContext,force, ruleGroup, async);
-		setEnabledValidators(enabledValidators);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/IResourceUtil.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/IResourceUtil.java
deleted file mode 100644
index d0a34bf..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/IResourceUtil.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-
-/**
- * This type is not intended to be extended by clients.
- */
-public interface IResourceUtil {
-	/**
-	 * Return the line number where the Object is located.
-	 */
-	public int getLineNo(Object obj);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/IRuleGroup.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/IRuleGroup.java
deleted file mode 100644
index dabcee8..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/IRuleGroup.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-/**
- * This type represents a group of rules which a validator checks. For now, the only grouping is by
- * speed: if a set of rules can be checked quickly, it will be included in the PASS_FAST group,
- * otherwise, it is grouped in the PASS_FULL group.
- * 
- * In future, this could be extended to include severities. To be able to group by severity helps
- * with the MessageLimitException. A validator should report errors first, and then warnings, and
- * then infos, in order to avoid the message limit being reached before the most severe problems are
- * reported.
- */
-public interface IRuleGroup {
-	// The following filters are used to identify a group of validation checks.
-
-	// retrieves the type of pass, from the IValidationContext, which the validator should execute
-	public static final String PASS_LEVEL = "PASS_LEVEL"; //$NON-NLS-1$
-
-	// On the FAST_PASS, the validator should check the rules which do not
-	// take much time to check, and exclude the rules which are valid only
-	// before some action (e.g. exporting or deploying).
-	// 
-	// The severity of the messages is irrelevant.
-	public static final int PASS_FAST = 0x1;
-	public static final String PASS_FAST_NAME = "fast"; //$NON-NLS-1$ // In plugin.xml, identify this pass by this constant
-
-	// On the FULL_PASS, the validator should check everything. This is the default.
-	public static final int PASS_FULL = 0x2 | PASS_FAST;
-	public static final String PASS_FULL_NAME = "full"; //$NON-NLS-1$ // In plugin.xml, identify this pass by this constant
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/IWorkbenchContext.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/IWorkbenchContext.java
deleted file mode 100644
index 49d677f..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/IWorkbenchContext.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.wst.validation.internal.provisional.core.IValidationContext;
-
-
-
-
-/**
- * In the eclipse environment, not only does the IValidationContext need to be able to load the MOF model, it
- * also needs to load items from the eclipse workbench. This interface should be extended by
- * workbench IHelpers, so that items can be added to, and from, the task list.
- */
-public interface IWorkbenchContext extends IValidationContext {
-	/**
-	 * When the validation is complete, this method will be called so that the IWorkbenchContext can
-	 * clean up any resources it allocated during the validation.
-	 * 
-	 * If the cleanup is a long-running operation, subtask messages should be sent to the IReporter.
-	 */
-	public void cleanup(WorkbenchReporter reporter);
-
-	/**
-	 * When the IProject is closing, perform any cleanup that needs to be done. When this method is
-	 * called, if the helper has cached any resources from the IProject, it should release those
-	 * resources. If you do not allocate resources in your helper, then this method should be a
-	 * no-op.
-	 */
-	public void closing();
-
-	/**
-	 * When the IProject is being deleted, perform any cleanup that needs to be done. When this
-	 * method is called, if the helper has cached any resources from the IProject, it should release
-	 * those resources. If you do not allocate resources in your helper, then this method should be
-	 * a no-op.
-	 */
-	public void deleting();
-
-	/**
-	 * Given an Object, if the object has a corresponding IFile in the workbench, return the IFile.
-	 * Otherwise return null.
-	 * 
-	 * This method is used by the WorkbenchReporter. In eclipse, in order to add or remove a task
-	 * list entry, the IResource, to which the entry applies, must be identified. The IReporter
-	 * interface passes in an Object in these methods:
-	 * 
-	 * addValidationMessage(IValidator, IMessage) // Object is a part of IMessage
-	 * 
-	 * removeAllMessages(IValidator, Object),
-	 * 
-	 * Thus, the WorkbenchReporter needs to know how, given the Object, which IFile that the Object
-	 * represents in the workbench, in order to be able to add the task list entry.
-	 * 
-	 * If this method returns null, then the WorkbenchReporter will add the message to the IProject
-	 * instead of an IFile.
-	 * 
-	 * @deprecated Implement getResource(Object) instead.
-	 */
-	public IFile getFile(Object object);
-
-	/**
-	 * Given an Object, if the object has a corresponding IResource in the workbench, return the
-	 * IResourcee. Otherwise return null.
-	 * 
-	 * This method is used by the WorkbenchReporter. In eclipse, in order to add or remove a task
-	 * list entry, the IResource, to which the entry applies, must be identified. The IReporter
-	 * interface passes in an Object in these methods:
-	 * 
-	 * addValidationMessage(IValidator, IMessage) // Object is a part of IMessage
-	 * 
-	 * removeAllMessages(IValidator, Object),
-	 * 
-	 * Thus, the WorkbenchReporter needs to know how, given the Object, which IFile that the Object
-	 * represents in the workbench, in order to be able to add the task list entry.
-	 * 
-	 * If this method returns null, then the WorkbenchReporter will add the message to the IProject
-	 * instead of an IResource.
-	 */
-	public IResource getResource(Object object);
-
-	/**
-	 * Given an IMessage's target object, return the line number, of the IFile, which the target
-	 * object represents, if possible. If the object is null, or if access to line numbers is not
-	 * possible, return a text description of the location.
-	 * 
-	 * This method will be called whether or not the IResource is an IFile, IFolder, or IProject.
-	 * Line numbers are valid only for IFile types; if the resource is not an IFile, then a text
-	 * description of the location must be returned.
-	 */
-	public String getLocation(Object object);
-
-	/**
-	 * Return the name of the resource, without the project-specific information in front.
-	 * 
-	 * This method is used by ValidationOperation to calculate the non-environment specific names of
-	 * the files. Only the IWorkbenchContext implementation knows how much information to strip off
-	 * of the IResource name. For example, if there is an EJB Project named "MyEJBProject", and it
-	 * uses the default names for the source and output folders, "source" and "ejbModule",
-	 * respectively, then the current implementation of EJB Helper knows how much of that structure
-	 * is eclipse-specific.
-	 * 
-	 * Since the "source" folder contains Java source files, a portable name would be the
-	 * fully-qualified name of the Java class, without the eclipse-specific project and folder names
-	 * in front of the file name. The EJBHelper knows that everything up to the "source" folder, for
-	 * example, can be removed, because, according to the definition of the EJB Project, everything
-	 * contained in the source folder is java source code. So if there is an IResource in an EJB
-	 * Project named "/MyEJBProject/source/com/ibm/myclasses/MyJavaFile.java", this method would
-	 * make this name portable by stripping off the "/MyEJBProject/source", and returning
-	 * "com/ibm/myclasses/MyJavaFile.java".
-	 * 
-	 * The output of this method is used by the ValidationOperation, when it is calculating the list
-	 * of added/changed/deleted file names for incremental validation. If getPortableName(IResource)
-	 * returns null, that means that the IWorkbenchContext's implementation does not support that
-	 * particular type of resource, and the resource should not be included in the array of
-	 * IFileDelta objects in the IValidator's "validate" method.
-	 */
-	public String getPortableName(IResource resource);
-
-	/**
-	 * Return the IProject which is about to be validated. Each IWorkbenchContext knows how to
-	 * traverse a certain type of IProject, for example, an EJB project or a web project.
-	 */
-	public IProject getProject();
-
-	/**
-	 * When an IValidator associates a target object with an IMessage, the WorkbenchReporter
-	 * eventually resolves that target object with an IResource. Sometimes more than one target
-	 * object resolves to the same IResource (usually the IProject, which is the default IResource
-	 * when an IFile cannot be found). This method is called, by the WorkbenchReporter, so that the
-	 * WorkbenchReporter can distinguish between the IMessages which are on the same IResource, but
-	 * refer to different target objects. This is needed for the removeAllMessages(IValidator,
-	 * Object) method, so that when one target object removes all of its messages, that it doesn't
-	 * remove another target object's messages.
-	 * 
-	 * This method may return null only if object is null. Otherwise, an id which can uniquely
-	 * identify a particular object must be returned. The id needs to be unique only within one
-	 * particular IValidator.
-	 */
-	public String getTargetObjectName(Object object);
-
-	/**
-	 * Whether full or incremental validation is running, this method will be called, by the
-	 * Validation Framework, for every IResource which is filtered in by the IValidator, so that the
-	 * IValidationContext can receive notification that one of the resources, which validation will run on, is
-	 * being filtered in.
-	 */
-	public void registerResource(IResource resource);
-
-	/**
-	 * This method is called by the Validation Framework, to initialize the IWorkbenchContext so that
-	 * it can gather information from the current project.
-	 */
-	public void setProject(IProject project);
-
-	/**
-	 * Notifies this IWorkbenchContext that the Validation Framework is shutting down. There will be
-	 * calls to closing(IProject) and possibly deleting(IProject) following this call, but the
-	 * resources may already be closed by the time that those methods are called, so EVERYTHING
-	 * should be cleaned up in this method. The parameter passed in is the project which is about to
-	 * shut down. This method will be called once for every IProject in the workbench. The IProject
-	 * may, or may not, be closed.
-	 */
-	public void shutdown();
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/LocalizedMessage.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/LocalizedMessage.java
deleted file mode 100644
index 2472f76..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/LocalizedMessage.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-import java.util.Locale;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.wst.validation.internal.core.Message;
-
-
-/**
- * This class is provided for validators which run only in UI and whose messages, because they
- * come from another tool, are already localized. LocalizedMessage cannot be used by any validator
- * which needs to run in both WebSphere and WSAD.
- */
-public class LocalizedMessage extends Message {
-	private String _message = null;
-
-	public LocalizedMessage(int severity, String messageText) {
-		this(severity, messageText, null);
-	}
-
-	public LocalizedMessage(int severity, String messageText, IResource targetObject) {
-		this(severity, messageText, (Object) targetObject);
-	}
-
-	public LocalizedMessage(int severity, String messageText, Object targetObject) {
-		super(null, severity, null);
-		setLocalizedMessage(messageText);
-		setTargetObject(targetObject);
-	}
-
-	public void setLocalizedMessage(String message) {
-		_message = message;
-	}
-
-	public String getLocalizedMessage() {
-		return _message;
-	}
-
-	public String getText() {
-		return getLocalizedMessage();
-	}
-
-	public String getText(ClassLoader cl) {
-		return getLocalizedMessage();
-	}
-
-	public String getText(Locale l) {
-		return getLocalizedMessage();
-	}
-
-	public String getText(Locale l, ClassLoader cl) {
-		return getLocalizedMessage();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/OneValidatorOperation.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/OneValidatorOperation.java
deleted file mode 100644
index c11ec1d..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/OneValidatorOperation.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-
-import java.util.HashSet;
-import java.util.Set;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.wst.validation.internal.RegistryConstants;
-import org.eclipse.wst.validation.internal.ValidationRegistryReader;
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-
-
-/**
- * Implemented Validators must not be called directly by anyone other than instances of
- * ValidationOperation, because some initialization of the validator, and handling of error
- * conditions, is done in the operation. The initialization is separated because some of the
- * information needed to initialize the validator (i.e., the project) isn't known until runtime.
- * 
- * This operation runs a single validator on a project.
- * 
- * This operation is not intended to be subclassed outside of the validation framework.
- */
-public class OneValidatorOperation extends ValidatorSubsetOperation {
-	/**
-	 * @deprecated Will be removed in Milestone 3. Use OneValidatorOperation(project, validatorId,
-	 *             boolean, boolean)
-	 */
-	public OneValidatorOperation(IProject project, String validatorId) throws IllegalArgumentException {
-		this(project, validatorId, DEFAULT_FORCE, DEFAULT_ASYNC);
-	}
-
-	/**
-	 * @deprecated Will be removed in Milestone 3. Use OneValidatorOperation(project, validatorId,
-	 *             boolean, boolean)
-	 */
-	public OneValidatorOperation(IProject project, String validatorId, boolean force) throws IllegalArgumentException {
-		this(project, validatorId, force, DEFAULT_ASYNC);
-	}
-
-	/**
-	 * @deprecated Will be removed in Milestone 3. Use OneValidatorOperation(IProject, String,
-	 *             boolean, int, boolean)
-	 */
-	public OneValidatorOperation(IProject project, String validatorId, boolean force, int ruleGroup) throws IllegalArgumentException {
-		this(project, validatorId, force, ruleGroup, DEFAULT_ASYNC);
-	}
-
-	/**
-	 * @param validatorId
-	 *            The plugin id of the validator which you wish to run.
-	 * @param force
-	 *            If the value is "true", the validator should be run regardless of what the
-	 *            environment settings are; if the value is "false", this operation should be run
-	 *            only if the validation builder will not run the validator.
-	 * 
-	 * IllegalArgumentException will be thrown if the named validator is not configured on the
-	 * project.
-	 * 
-	 * IProject must exist and be open.
-	 * 
-	 * If async is true, the validation will run all thread-safe validators in the background
-	 * validation thread, and all other validators in the main thread. If async is false, all
-	 * validators will run in in the main thread.
-	 */
-	public OneValidatorOperation(IProject project, String validatorId, boolean force, boolean async) throws IllegalArgumentException {
-		this(project, validatorId, force, RegistryConstants.ATT_RULE_GROUP_DEFAULT, async);
-	}
-
-	/**
-	 * OneValidatorOperation constructor comment.
-	 * 
-	 * @param project
-	 *            org.eclipse.core.resources.IProject
-	 * @param validatorId
-	 *            The plugin id of the validator which you wish to run.
-	 * @param force
-	 *            If the value is "true", the validator should be run regardless of what the
-	 *            environment settings are; if the value is "false", this operation should be run
-	 *            only if the validation builder will not run the validator.
-	 * @param ruleGroup
-	 *            Whether a FULL or FAST pass should be invoked.
-	 * 
-	 * IllegalArgumentException will be thrown if the named validator is not configured on the
-	 * project.
-	 * 
-	 * IProject must exist and be open.
-	 * 
-	 * If async is true, the validation will run all thread-safe validators in the background
-	 * validation thread, and all other validators in the main thread. If async is false, all
-	 * validators will run in in the main thread.
-	 */
-	public OneValidatorOperation(IProject project, String validatorId, boolean force, int ruleGroup, boolean async) throws IllegalArgumentException {
-		super(project, force, ruleGroup, async);
-
-		ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validatorId);
-		if (vmd == null) {
-			// No validator, with that plugin id, can be run on that project.
-			// Either the validator isn't installed, or the IProject passed in
-			// doesn't have the necessary nature.
-			throw new IllegalArgumentException(validatorId);
-		}
-
-		if (!vmd.isConfiguredOnProject(project)) {
-			// No validator, with that plugin id, can be run on that project.
-			// Either the validator isn't installed, or the IProject passed in
-			// doesn't have the necessary nature.
-			throw new IllegalArgumentException(validatorId);
-		}
-
-		Set enabled = new HashSet();
-		enabled.add(vmd);
-		setEnabledValidators(enabled);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ReferencialFileValidator.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ReferencialFileValidator.java
deleted file mode 100644
index a2e1fcc..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ReferencialFileValidator.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on May 3, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.validation.internal.operations;
-
-import java.util.List;
-
-/**
- * @author vijayb
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-public interface ReferencialFileValidator {
-	public List getReferencedFile(List inputFiles);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ReferencialFileValidatorHelper.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ReferencialFileValidatorHelper.java
deleted file mode 100644
index 1dbe0bd..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ReferencialFileValidatorHelper.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
- * Created on May 4, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.validation.internal.operations;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-
-/**
- * @author vijayb
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-public class ReferencialFileValidatorHelper {
-	/**
-	 *  
-	 */
-	public ReferencialFileValidatorHelper() {
-		super();
-	}
-
-	/**
-	 * return a list of all files contained in project to infinite depth
-	 */
-	public static List getAllProjectFiles(IProject project) {
-		List result = new ArrayList();
-		if (project == null)
-			return result;
-		try {
-			result = collectFiles(project.members(), result);
-		} catch (CoreException e) {
-			//Ignore
-		}
-		return result;
-	}
-
-	private static List collectFiles(IResource[] members, List result) throws CoreException {
-		// recursively collect files for the given members
-		for (int i = 0; i < members.length; i++) {
-			IResource res = members[i];
-			if (res instanceof IFolder) {
-				collectFiles(((IFolder) res).members(), result);
-			} else if (res instanceof IFile) {
-				result.add(res);
-			}
-		}
-		return result;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ResourceHandler.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ResourceHandler.java
deleted file mode 100644
index fe47c03..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ResourceHandler.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-
-/**
- * @deprecated For use by the validation framework only. This class retrieves the Strings from the
- *             .properties file appropriate for the machine's Locale.
- */
-public final class ResourceHandler extends org.eclipse.wst.validation.internal.ResourceHandler {
-	//Default
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/TaskListHelper.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/TaskListHelper.java
deleted file mode 100644
index 8532dc1..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/TaskListHelper.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.wst.validation.internal.TaskListUtility;
-
-
-
-/**
- * @deprecated This class is intended to be used only by the validation framework. The
- *             TaskListHelper class will be removed in Milestone 4.
- */
-public class TaskListHelper {
-	private static TaskListHelper _taskListHelper = null;
-
-	public static TaskListHelper getTaskList() {
-		if (_taskListHelper == null) {
-			_taskListHelper = new TaskListHelper();
-		}
-		return _taskListHelper;
-	}
-
-	/**
-	 * This method adds a message to a resource in the task list.
-	 */
-	public void addTask(String pluginId, IResource resource, String location, String messageId, String message, int markerType, String targetObjectName, String groupName, int offset, int length) throws CoreException {
-		TaskListUtility.addTask(pluginId, resource, location, messageId, message, markerType, targetObjectName, groupName, offset, length);
-	}
-
-
-	public IMarker[] getValidationTasks(int severity, IProject project) {
-		return TaskListUtility.getValidationTasks(severity, project);
-	}
-
-	public IMarker[] getValidationTasks(IResource resource, int severity) {
-		return TaskListUtility.getValidationTasks(resource, severity);
-	}
-
-	public IMarker[] getValidationTasks(IResource resource, String messageOwner) {
-		return TaskListUtility.getValidationTasks(resource, messageOwner);
-	}
-
-	public IMarker[] getValidationTasks(IResource resource, String[] messageOwners) {
-		return TaskListUtility.getValidationTasks(resource, messageOwners);
-	}
-
-	/**
-	 * Remove all validation messages from the resource and its children.
-	 */
-	public void removeAllTasks(IResource resource) {
-		TaskListUtility.removeAllTasks(resource);
-	}
-
-	/**
-	 * This method removes all tasks from the resource. If the resource is an IProject, all tasks
-	 * are also removed from the project's children.
-	 */
-	public void removeAllTasks(IResource resource, String[] owners) throws CoreException {
-		TaskListUtility.removeAllTasks(resource, owners);
-	}
-
-	/**
-	 * This method removes all messages from a resource in the task list.
-	 */
-	public void removeAllTasks(IResource resource, String owner, String objectName) throws CoreException {
-		TaskListUtility.removeAllTasks(resource, owner, objectName);
-	}
-
-	public void removeAllTasks(IResource resource, String[] owners, String objectName) throws CoreException {
-		TaskListUtility.removeAllTasks(resource, owners, objectName);
-	}
-
-	/**
-	 * This method removes a subset of tasks from the project, including child tasks. Every task
-	 * which belongs to the group, identified by groupName, will be removed.
-	 */
-	public void removeTaskSubset(IResource resource, String[] owners, String objectName, String groupName) throws CoreException {
-		TaskListUtility.removeTaskSubset(resource, owners, objectName, groupName);
-	}
-
-	/**
-	 * This method changes all validator markers which are owned by "from" to make their owner "to".
-	 */
-	public void updateOwner(String from, String to) throws CoreException {
-		TaskListUtility.updateOwner(from, to);
-	}
-
-	/**
-	 * This method changes all validator markers on the IResource and its children. All markers
-	 * owned by "from" have their owner reassigned to "to".
-	 */
-	public void updateOwner(String from, String to, IResource resource) throws CoreException {
-		TaskListUtility.updateOwner(from, to, resource);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationBuilder.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationBuilder.java
deleted file mode 100644
index cf2ea0a..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationBuilder.java
+++ /dev/null
@@ -1,300 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IncrementalProjectBuilder;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.ConfigurationManager;
-import org.eclipse.wst.validation.internal.InternalValidatorManager;
-import org.eclipse.wst.validation.internal.ProjectConfiguration;
-import org.eclipse.wst.validation.internal.ResourceConstants;
-import org.eclipse.wst.validation.internal.ResourceHandler;
-import org.eclipse.wst.validation.internal.TimeEntry;
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-/**
- * Validation Framework Builder.
- * 
- * This builder is configured on J2EE IProjects automatically, can be added to other types of
- * projects through the Properties page, and launches validation on the project if the project has
- * build validation enabled.
- */
-public class ValidationBuilder extends IncrementalProjectBuilder {
-	public static final int NO_DELTA_CHANGE = -1; // Since IResourceConstants
-	protected List referencedProjects;
-	protected IWorkbenchContext workbenchContext = null;
-
-	// doesn't have a "no delta"
-	// flag, let this constant be
-	// the flag.
-	public ValidationBuilder() {
-		super();
-	}
-
-	private IProject[] getAllReferencedProjects(IProject project, Set visitedProjects) {
-		if (visitedProjects == null)
-			visitedProjects = new HashSet();
-		else if (visitedProjects.contains(project))
-			return getReferencedProjects();
-		else
-			visitedProjects.add(project);
-		if (referencedProjects == null)
-			referencedProjects = new ArrayList();
-		try {
-			if (project.isAccessible()) {
-				IProject[] refProjArray = project.getReferencedProjects();
-				collectReferecedProject(refProjArray);
-				for (int i = 0; i < refProjArray.length; i++) {
-					IProject refProject = refProjArray[i];
-					getAllReferencedProjects(refProject, visitedProjects);
-				}
-			}
-			return getReferencedProjects();
-		} catch (CoreException core) {
-			return null;
-		}
-	}
-	
-	public IWorkbenchContext getWorkbenchContext() {
-		if(workbenchContext == null) {
-			workbenchContext = new WorkbenchContext();
-			workbenchContext.setProject(getProject());
-		}
-		return workbenchContext;
-	}
-
-
-	/**
-	 * @param referencedProjects2
-	 * @param refProjArray
-	 */
-	private void collectReferecedProject(IProject[] refProjArray) {
-		for (int i = 0; i < refProjArray.length; i++) {
-			IProject project = refProjArray[i];
-			if (!referencedProjects.contains(project))
-				referencedProjects.add(project);
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.resources.IncrementalProjectBuilder#clean(org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	protected void clean(IProgressMonitor monitor) throws CoreException {
-		IProject currentProject = getProject();
-		if (currentProject == null || !currentProject.isAccessible())
-			return;
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(currentProject);
-			ValidatorMetaData[] vmds = prjp.getValidators();
-			for (int i = 0; i < vmds.length; i++) {
-				ValidatorMetaData vmd = vmds[i];
-				// For validators who aren't going to run, clear their messages from the task list.
-				// Don't need to check for duplicate entries because each Validator must be unique.
-				// The uniqueness of each Validator is checked by the plugin registry.
-				WorkbenchReporter.removeAllMessages(currentProject, vmd.getValidatorNames(), null);
-			}
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager.updateTaskList(" + currentProject.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-
-	}
-
-	/**
-	 * @param referencedProjects
-	 * @return
-	 */
-	private IProject[] getReferencedProjects() {
-		IProject[] refProjArray = new IProject[referencedProjects.size()];
-		for (int i = 0; i < referencedProjects.size(); i++) {
-			refProjArray[i] = (IProject) referencedProjects.get(i);
-		}
-		return refProjArray;
-	}
-
-	public IProject[] build(int kind, Map parameters, IProgressMonitor monitor) {
-		long start = System.currentTimeMillis();
-		int executionMap = 0x0;
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-		IResourceDelta delta = null;
-		IProject project = getProject();
-		IProject[] referenced = getAllReferencedProjects(project, null);
-		try {
-			if (ValidatorManager.getManager().isSuspended(project)) {
-				// Do not perform validation on this project
-				executionMap |= 0x1;
-				return referenced;
-			}
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			delta = getDelta(project);
-			boolean doFullBuild = (kind == FULL_BUILD);
-			boolean doAutoBuild = ((delta != null) && (kind == AUTO_BUILD));
-			boolean doIncrementalBuild = ((delta != null) && (kind == INCREMENTAL_BUILD));
-			if ((doFullBuild || doIncrementalBuild) && !prjp.isBuildValidate()) {
-				// Is a build validation about to be invoked? If so, does the
-				// user want build validation to run?
-				executionMap |= 0x2;
-				return referenced;
-			}
-			// It is possible for kind to == AUTO_BUILD while delta is null
-			// (saw this
-			// when creating a project by copying another project.)
-			// However, a "Rebuild Project" will invoke this builder with
-			// kind==FULL_BUILD
-			// and a null delta, and validation should run in that case.
-			if (!doFullBuild && delta == null) {
-				if (isReferencedProjectInDelta(referenced)) {
-					performFullBuildForReferencedProjectChanged(monitor, prjp);
-				} else {
-					String[] msgParms = new String[]{project.getName()};
-					monitor.subTask(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_NULL_DELTA, msgParms));
-					// A null delta means that a full build must be performed,
-					// but this builder was invoked with an incremental or
-					// automatic
-					// build kind. Return without doing anything so that the
-					// user
-					// doesn't have to wait forever.
-					executionMap |= 0x4;
-				}
-				return referenced;
-			}
-			if (doFullBuild) {
-				performFullBuild(monitor, prjp);
-			} else {
-				if (doAutoBuild && !prjp.isAutoValidate()) {
-					executionMap |= 0x8;
-					return referenced;
-				}
-				if (delta.getAffectedChildren().length == 0) {
-					if (isReferencedProjectInDelta(referenced))
-						performFullBuildForReferencedProjectChanged(monitor, prjp);
-					else
-						executionMap |= 0x10;
-					return referenced;
-				}
-				EnabledIncrementalValidatorsOperation operation = new EnabledIncrementalValidatorsOperation(project, delta, prjp.runAsync());
-				operation.run(monitor);
-			}
-			return referenced;
-		} catch (InvocationTargetException exc) {
-			logInvocationTargetException(logger, exc);
-			executionMap |= 0x20;
-			return referenced;
-		} catch (Throwable exc) {
-			logBuildError(logger, exc);
-			executionMap |= 0x40;
-			return referenced;
-		} finally {
-			referencedProjects = null;
-			// The builder's time needs to be FINE because the builder is
-			// called often.
-			if (logger.isLoggingLevel(Level.FINE)) {
-				logBuilderTimeEntry(start, executionMap, logger, delta);
-			}
-		}
-	}
-
-	/**
-	 * @param referenced
-	 * @return
-	 */
-	private boolean isReferencedProjectInDelta(IProject[] referenced) {
-		IProject p = null;
-		for (int i = 0; i < referenced.length; i++) {
-			p = referenced[i];
-			IResourceDelta delta = getDelta(p);
-			if (delta != null && delta.getAffectedChildren().length > 0)
-				return true;
-		}
-		return false;
-	}
-
-	/**
-	 * @param monitor
-	 * @param prjp
-	 */
-	private void performFullBuildForReferencedProjectChanged(IProgressMonitor monitor, ProjectConfiguration prjp) throws InvocationTargetException {
-		performFullBuild(monitor, prjp, true);
-	}
-
-	private void performFullBuild(IProgressMonitor monitor, ProjectConfiguration prjp) throws InvocationTargetException {
-		performFullBuild(monitor, prjp, false);
-	}
-
-	private void performFullBuild(IProgressMonitor monitor, ProjectConfiguration prjp, boolean onlyDependentValidators) throws InvocationTargetException {
-		ValidatorMetaData[] enabledValidators = prjp.getEnabledFullBuildValidators(true, onlyDependentValidators);
-		if ((enabledValidators != null) && (enabledValidators.length > 0)) {
-			Set enabledValidatorsSet = InternalValidatorManager.wrapInSet(enabledValidators);
-			EnabledValidatorsOperation op = new EnabledValidatorsOperation(getProject(), enabledValidatorsSet, prjp.runAsync());
-			op.run(monitor);
-		}
-	}
-
-	private void logInvocationTargetException(Logger logger, InvocationTargetException exc) {
-		if (logger.isLoggingLevel(Level.SEVERE)) {
-			LogEntry entry = ValidationPlugin.getLogEntry();
-			entry.setSourceID("ValidationBuilder::build"); //$NON-NLS-1$
-			entry.setTargetException(exc);
-			logger.write(Level.SEVERE, entry);
-			if (exc.getTargetException() != null) {
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-	}
-
-	private void logBuildError(Logger logger, Throwable exc) {
-		if (logger.isLoggingLevel(Level.SEVERE)) {
-			LogEntry entry = ValidationPlugin.getLogEntry();
-			entry.setSourceID("ValidationBuilder.build(int, Map, IProgressMonitor)"); //$NON-NLS-1$
-			entry.setTargetException(exc);
-			logger.write(Level.SEVERE, entry);
-		}
-	}
-
-	private void logBuilderTimeEntry(long start, int executionMap, Logger logger, IResourceDelta delta) {
-		TimeEntry entry = ValidationPlugin.getTimeEntry();
-		entry.setSourceID("ValidationBuilder.build(int, Map, IProgressMonitor)"); //$NON-NLS-1$
-		entry.setProjectName(getProject().getName()); //$NON-NLS-1$  //$NON-NLS-2$
-		entry.setExecutionMap(executionMap);
-		entry.setElapsedTime(System.currentTimeMillis() - start);
-		if (delta == null) {
-			entry.setDetails("delta == null"); //$NON-NLS-1$
-		}
-		entry.setToolName("ValidationBuilder"); //$NON-NLS-1$
-		logger.write(Level.FINE, entry);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationConstants.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationConstants.java
deleted file mode 100644
index 1e37524..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationConstants.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-
-import org.eclipse.wst.validation.internal.ResourceConstants;
-
-/**
- * @deprecated For use by the validation framework only.
- * 
- * Constants used to access the string resources associated with the plugin.
- * 
- * See the plugin.properties file, in the plugin's directory, for the contents of the strings.
- */
-public interface ValidationConstants extends ResourceConstants {
-	//Default
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationOperation.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationOperation.java
deleted file mode 100644
index 3e250be..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationOperation.java
+++ /dev/null
@@ -1,1475 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.internal.operations.IHeadlessRunnableWithProgress;
-import org.eclipse.wst.validation.internal.FilterUtil;
-import org.eclipse.wst.validation.internal.InternalValidatorManager;
-import org.eclipse.wst.validation.internal.ReferencialFileValidatorRegistryReader;
-import org.eclipse.wst.validation.internal.RegistryConstants;
-import org.eclipse.wst.validation.internal.ResourceConstants;
-import org.eclipse.wst.validation.internal.ResourceHandler;
-import org.eclipse.wst.validation.internal.TimeEntry;
-import org.eclipse.wst.validation.internal.VThreadManager;
-import org.eclipse.wst.validation.internal.ValidationRegistryReader;
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-import org.eclipse.wst.validation.internal.core.IFileDelta;
-import org.eclipse.wst.validation.internal.core.Message;
-import org.eclipse.wst.validation.internal.core.ValidationException;
-import org.eclipse.wst.validation.internal.core.ValidatorLauncher;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-import org.eclipse.wst.validation.internal.provisional.core.IMessage;
-import org.eclipse.wst.validation.internal.provisional.core.IReporter;
-import org.eclipse.wst.validation.internal.provisional.core.IValidationContext;
-import org.eclipse.wst.validation.internal.provisional.core.IValidator;
-import org.eclipse.wst.validation.internal.provisional.core.MessageLimitException;
-
-/**
- * Implemented Validators methods must not be called directly by anyone other than this class, since
- * some initialization of the validator is done here (via the getProject() method). The
- * initialization is separated because the IProject isn't known until runtime.
- * 
- * This operation is not intended to be subclassed outside of the validation framework.
- */
-public abstract class ValidationOperation implements IWorkspaceRunnable, IHeadlessRunnableWithProgress {
-	public static final int NO_DELTA_CHANGE = -1; // Since IResourceConstants
-	// doesn't have a "no delta"
-	// flag, let this constant be
-	// the flag.
-	private static final String DELTA_AS_STRING = "IFileDelta[{0}] '{'{1}'}'"; //$NON-NLS-1$
-	private static final String COMMA = ", "; //$NON-NLS-1$
-	protected static final boolean DEFAULT_ASYNC = false; // For the deprecated
-	// constructors, by
-	// default the
-	// operation will not
-	// fork.
-	protected static final boolean DEFAULT_FORCE = true; // By default, run the
-	// operation whether
-	// or not it needs to
-	/**
-	 * @deprecated Will be removed in Milestone 3. Use DEFAULT_ASYNC
-	 */
-	protected static final boolean DEFAULT_FORK = false; // @deprecated
-	private IProject _project = null; // project to be validated
-	private int _ruleGroup = RegistryConstants.ATT_RULE_GROUP_DEFAULT; // which
-	// pass
-	// should
-	// the
-	// validation
-	// invoke
-	private boolean _fork = DEFAULT_ASYNC; // do not fork the validation into a
-	// different thread by default
-	private Map _fileDeltas = null; // To reduce object creation,
-	private IResourceDelta _delta = null;
-	// the resource delta tree to be processed, or null if a full build/menu
-	// option was triggered. This value is cached so that validation can be run
-	// either from a builder, or from a menu item. (The Operation interface
-	// doesn't allow any parameter on execute except the IProgressMonitor.)
-	private Set _enabledValidators = null;
-	private boolean _force = DEFAULT_FORCE; // force this operation to run even
-	// if it doesn't need to?
-	private boolean _isFullValidate = false; // Run a full validation or an
-	// incremental? (true = full)
-	private Boolean _isAutoBuild = null; // Is the global auto-build preference
-	// enabled?
-	private Set _launchedValidators = null; // A list of the validators that
-	
-	protected IWorkbenchContext context;
-
-	// are enabled and were launched
-	// (i.e., that have input to
-	// validate). For internal
-	// validation framework use only;
-	// it's needed for the automatic
-	// tests.
-	/**
-	 * This method is used for FINEST logging, to report exactly what deltas were about to be
-	 * validated.
-	 */
-	private static final String getDeltaAsString(IFileDelta[] delta) {
-		String args = ""; //$NON-NLS-1$
-		int numArgs = 0;
-		if (delta != null) {
-			numArgs = delta.length;
-			StringBuffer buffer = new StringBuffer();
-			for (int i = 0; i < delta.length; i++) {
-				buffer.append(COMMA);
-				buffer.append(delta[i].toString());
-			}
-			buffer.replace(0, 1, ""); //$NON-NLS-1$ // magic numbers 0 and 1 => Remove first COMMA from the list (hence index 0); length of COMMA is 2, hence index 0, 1.
-			args = buffer.toString();
-		}
-		return MessageFormat.format(DELTA_AS_STRING, new String[]{String.valueOf(numArgs), args});
-	}
-
-	protected static void checkCanceled(WorkbenchReporter reporter) throws OperationCanceledException {
-		if (reporter == null) {
-			return;
-		} else if (reporter.getProgressMonitor().isCanceled()) {
-			throw new OperationCanceledException(""); //$NON-NLS-1$
-		}
-	}
-
-	protected static boolean shouldForce(IResourceDelta delta) {
-		return ((delta == null) ? DEFAULT_FORCE : false);
-	}
-
-	protected static boolean shouldForce(Object[] changedResources) {
-		return (((changedResources == null) || (changedResources.length == 0)) ? DEFAULT_FORCE : false);
-	}
-
-	/**
-	 * @deprecated. Will be removed in Milestone 3. Use ValidationOperation(project, boolean)
-	 */
-	public ValidationOperation(IProject project) {
-		this(project, DEFAULT_ASYNC, DEFAULT_FORCE);
-	}
-
-	/**
-	 * Internal.
-	 */
-	public ValidationOperation(IProject project, boolean force, boolean async) {
-		this(project, null, null, RegistryConstants.ATT_RULE_GROUP_DEFAULT, force, async);
-	}
-
-	/**
-	 * @deprecated. Will be removed in Milestone 3. Use ValidationOperation(project, int, boolean)
-	 */
-	public ValidationOperation(IProject project, int ruleGroup) {
-		this(project, null, null, ruleGroup, DEFAULT_FORCE, DEFAULT_ASYNC);
-	}
-
-	/**
-	 * @deprecated. Will be removed in Milestone 3. Use ValidationOperation(IProject,
-	 *              IResourceDelta, Boolean, int, boolean, boolean)
-	 */
-	public ValidationOperation(IProject project, IResourceDelta delta, boolean isAutoBuild, int ruleGroup, boolean force, boolean fork) {
-		this(project, delta, ((isAutoBuild) ? Boolean.TRUE : Boolean.FALSE), ruleGroup, fork, force);
-	}
-
-	/**
-	 * Internal.
-	 */
-	protected ValidationOperation(IProject project, IResourceDelta delta, Boolean isAutoBuild, int ruleGroup, boolean force, boolean fork) {
-		super();
-		_project = project;
-		_delta = delta;
-		_isAutoBuild = isAutoBuild;
-		_ruleGroup = ruleGroup;
-		_fork = fork;
-		_force = force;
-		_enabledValidators = new HashSet();
-	}
-	
-	/**
-	 * Internal.
-	 */
-	protected ValidationOperation(IProject project, IWorkbenchContext aContext, IResourceDelta delta, Boolean isAutoBuild, int ruleGroup, boolean force, boolean fork) {
-		super();
-		_project = project;
-		_delta = delta;
-		_isAutoBuild = isAutoBuild;
-		_ruleGroup = ruleGroup;
-		_fork = fork;
-		_force = force;
-		_enabledValidators = new HashSet();
-		context = aContext;
-	}
-
-	/**
-	 * @deprecated Will be removed in Milestone 3.
-	 */
-	protected void terminateCleanup(WorkbenchReporter reporter) {
-		Set enabledValidators = getEnabledValidators();
-		Iterator iterator = enabledValidators.iterator();
-		ValidatorMetaData vmd = null;
-		try {
-			while (iterator.hasNext()) {
-				vmd = (ValidatorMetaData) iterator.next();
-				reporter.displaySubtask(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_VALIDATOR_CLEANUP, new String[]{vmd.getValidatorDisplayName()}));
-				try {
-					reporter.removeAllMessages(vmd.getValidator());
-				} catch (InstantiationException exc) {
-					// Remove the vmd from the reader's list
-					ValidationRegistryReader.getReader().disableValidator(vmd);
-					// Log the reason for the disabled validator
-					final Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setSourceID("ValidationOperation::terminateCleanup"); //$NON-NLS-1$
-						entry.setTargetException(exc);
-						logger.write(Level.SEVERE, entry);
-					}
-					continue;
-				}
-				addCancelTask(vmd);
-				reporter.displaySubtask(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_VALIDATOR_TERMINATED, new String[]{getProject().getName(), vmd.getValidatorDisplayName()}));
-			}
-		} catch (MessageLimitException e) {
-			ValidatorManager.getManager().addMessageLimitExceeded(getProject());
-		}
-	}
-
-	/**
-	 * @param vmd
-	 * @param delta
-	 * @param logger
-	 * @param start
-	 */
-//	private void logValidationInfo(ValidatorMetaData vmd, IFileDelta[] delta, Logger logger, long start) {
-//		long finish = System.currentTimeMillis();
-//		TimeEntry entry = ValidationPlugin.getTimeEntry();
-//		entry.setSourceID("ValidationOperation.launchValidator"); //$NON-NLS-1$
-//		entry.setProjectName(getProject().getName());
-//		entry.setToolName(vmd.getValidatorUniqueName());
-//		entry.setElapsedTime(finish - start);
-//		if (logger.isLoggingLevel(Level.FINE)) {
-//			StringBuffer buffer = new StringBuffer();
-//			if (isFullValidate()) {
-//				buffer.append("EVERYTHING"); //$NON-NLS-1$
-//			} else {
-//				if (delta.length == 0) {
-//					buffer.append("NOTHING"); //$NON-NLS-1$
-//				} else {
-//					buffer.append(getDeltaAsString(delta));
-//				}
-//			}
-//			entry.setDetails(buffer.toString());
-//		}
-//		logger.write(Level.INFO, entry);
-//	}
-
-	/**
-	 * @param reporter
-	 * @param vmd
-	 * @param logger
-	 * @param exc
-	 */
-//	private void handleThrowables(WorkbenchReporter reporter, ValidatorMetaData vmd, Logger logger, Throwable exc) {
-//		// If a runtime exception has occured, e.g. NullPointer or ClassCast,
-//		// display it with the "A runtime exception has occurred " messsage.
-//		// This will provide more information to the user when he/she calls IBM
-//		// Service.
-//		if (logger.isLoggingLevel(Level.SEVERE)) {
-//			LogEntry entry = ValidationPlugin.getLogEntry();
-//			entry.setSourceID("ValidationOperation::launchValidator"); //$NON-NLS-1$
-//			entry.setTargetException(exc);
-//			logger.write(Level.SEVERE, entry);
-//		}
-//		String[] msgParm = {exc.getClass().getName(), vmd.getValidatorDisplayName(), (exc.getMessage() == null ? "" : exc.getMessage())}; //$NON-NLS-1$
-//		Message message = ValidationPlugin.getMessage();
-//		message.setSeverity(IMessage.NORMAL_SEVERITY);
-//		message.setId(ResourceConstants.VBF_EXC_RUNTIME);
-//		message.setParams(msgParm);
-//		try {
-//			reporter.addMessage(vmd.getValidator(), message);
-//		} catch (InstantiationException exc2) {
-//			handleInstantiationException(vmd, logger, exc2);
-//		} catch (MessageLimitException e) {
-//			throw e;
-//		}
-//		return;
-//	}
-
-	/**
-	 * @param vmd
-	 * @param logger
-	 * @param exc2
-	 */
-//	private void handleInstantiationException(ValidatorMetaData vmd, Logger logger, InstantiationException exc2) {
-//		// Remove the vmd from the reader's list
-//		ValidationRegistryReader.getReader().disableValidator(vmd);
-//		// Log the reason for the disabled validator
-//		if (logger.isLoggingLevel(Level.SEVERE)) {
-//			LogEntry entry = ValidationPlugin.getLogEntry();
-//			entry.setSourceID("ValidationOperation::launchValidator (deprecated)"); //$NON-NLS-1$
-//			entry.setTargetException(exc2);
-//			logger.write(Level.SEVERE, entry);
-//		}
-//	}
-
-	/**
-	 * @param reporter
-	 * @param vmd
-	 * @param logger
-	 * @param exc
-	 */
-//	private void handleValidationExceptions(WorkbenchReporter reporter, ValidatorMetaData vmd, Logger logger, ValidationException exc) {
-//		// First, see if a validator just caught all Throwables and
-//		// accidentally wrapped a MessageLimitException instead of propagating
-//		// it.
-//		if (exc.getAssociatedException() != null) {
-//			if (exc.getAssociatedException() instanceof MessageLimitException) {
-//				MessageLimitException mssgExc = (MessageLimitException) exc.getAssociatedException();
-//				throw mssgExc;
-//			} else if (exc.getAssociatedException() instanceof ValidationException) {
-//				try {
-//					ValidationException vexc = (ValidationException) exc.getAssociatedException();
-//					vexc.setClassLoader(vmd.getValidator().getClass().getClassLoader()); // first,
-//					// set the class loader,so that the exception's getMessage() method can retrieve
-//					// the resource bundle
-//				} catch (InstantiationException exc2) {
-//					handleInstantiationException(vmd, logger, exc2);
-//				}
-//			}
-//		}
-//		// If there is a problem with this particular validator, log the error
-//		// and continue
-//		// with the next validator.
-//		try {
-//			exc.setClassLoader(vmd.getValidator().getClass().getClassLoader()); // first,
-//			// set the class loader,so that the exception's getMessage() method can retrieve the
-//			// resource bundle
-//		} catch (InstantiationException exc2) {
-//			handleInstantiationException(vmd, logger, exc2);
-//		}
-//		if (logger.isLoggingLevel(Level.SEVERE)) {
-//			LogEntry entry = ValidationPlugin.getLogEntry();
-//			entry.setSourceID("ValidationOperation.validate(WorkbenchMonitor)"); //$NON-NLS-1$
-//			entry.setTargetException(exc);
-//			logger.write(Level.SEVERE, entry);
-//			if (exc.getAssociatedException() != null) {
-//				entry.setTargetException(exc.getAssociatedException());
-//				logger.write(Level.SEVERE, entry);
-//			}
-//		}
-//		String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
-//		reporter.displaySubtask(message);
-//		if (exc.getAssociatedMessage() != null) {
-//			try {
-//				reporter.addMessage(vmd.getValidator(), exc.getAssociatedMessage());
-//			} catch (InstantiationException exc2) {
-//				handleInstantiationException(vmd, logger, exc2);
-//			}
-//		}
-//	}
-
-	/**
-	 * @param reporter
-	 * @param vmd
-	 * @param logger
-	 * @param exc
-	 */
-//	private void handleHelperCleanupExceptions(WorkbenchReporter reporter, ValidatorMetaData vmd, Logger logger, Throwable exc) {
-//		// If a runtime exception has occured, e.g. NullPointer or ClassCast,
-//		// display it with the "A runtime exception has occurred " messsage.
-//		// This will provide more information to the user when he/she calls IBM
-//		// Service.
-//		if (logger.isLoggingLevel(Level.SEVERE)) {
-//			LogEntry entry = ValidationPlugin.getLogEntry();
-//			entry.setSourceID("ValidationOperation::launchValidator"); //$NON-NLS-1$
-//			entry.setTargetException(exc);
-//			logger.write(Level.SEVERE, entry);
-//		}
-//		String[] msgParm = {exc.getClass().getName(), vmd.getValidatorDisplayName(), (exc.getMessage() == null ? "" : exc.getMessage())}; //$NON-NLS-1$
-//		Message message = ValidationPlugin.getMessage();
-//		message.setSeverity(IMessage.NORMAL_SEVERITY);
-//		message.setId(ResourceConstants.VBF_EXC_RUNTIME);
-//		message.setParams(msgParm);
-//		try {
-//			reporter.addMessage(vmd.getValidator(), message);
-//		} catch (InstantiationException exc2) {
-//			handleInstantiationException(vmd, logger, exc2);
-//		} catch (MessageLimitException e) {
-//			throw e;
-//		}
-//		return;
-//	}
-
-	public boolean isFork() {
-		return _fork;
-	}
-
-	public boolean isForce() {
-		return _force;
-	}
-
-	public void setForce(boolean force) {
-		_force = force;
-	}
-
-	/**
-	 * If the code that invoked this operation suspended auto-build before invoking this operation,
-	 * the user's auto-build setting is stored in the following methods.
-	 */
-	public boolean isAutoBuild() {
-		if (_isAutoBuild == null) {
-			return ValidatorManager.getManager().isGlobalAutoBuildEnabled();
-		}
-		return _isAutoBuild.booleanValue();
-	}
-
-	protected void setAutoBuild(boolean autoOn) {
-		_isAutoBuild = ((autoOn) ? Boolean.TRUE : Boolean.FALSE);
-	}
-
-	protected boolean isFullValidate() {
-		return _isFullValidate;
-	}
-
-	private void setFullValidate(boolean b) {
-		_isFullValidate = b;
-	}
-
-	protected int getRuleGroup() {
-		return _ruleGroup;
-	}
-
-	/**
-	 * Return true if the given validator must run (i.e., it has changes to validate, and it was not
-	 * run automatically.)
-	 */
-	private boolean isValidationNecessary(ValidatorMetaData vmd, IFileDelta[] delta) {
-		// Validation is not necessary if:
-		//    1. auto-validation has run and the validator is incremental,
-		//    2. There are no files for the validator to validate.
-		// There are files to validate if this is a full validation or if the
-		// validator filtered in some of the deltas.
-		boolean autoValidateRan = false;
-		if (_isAutoBuild != null) {
-			// User set the autoBuild default, so check if validation is
-			// necessary or not.
-			autoValidateRan = ValidatorManager.getManager().isAutoValidate(getProject(), _isAutoBuild.booleanValue()) && vmd.isIncremental();
-		}
-		boolean hasFiles = (isFullValidate() || (delta.length > 0));
-		return (!autoValidateRan && hasFiles);
-	}
-
-	/**
-	 * Return true if, given the enabled validators and file deltas, there is work for this
-	 * operation to do.
-	 */
-	public boolean isNecessary(IProgressMonitor monitor) throws CoreException, OperationCanceledException {
-		Set enabledValidators = getEnabledValidators();
-		if ((enabledValidators == null) || (enabledValidators.size() == 0)) {
-			return false;
-		}
-		if (isFullValidate()) {
-			return true;
-		}
-		Iterator iterator = enabledValidators.iterator();
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-			if (isValidationNecessary(vmd, getFileDeltas(monitor, vmd))) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	private Map getFileDeltas(IProgressMonitor monitor) throws CoreException {
-		if (_fileDeltas == null) {
-			loadFileDeltas(monitor);
-		}
-		return _fileDeltas;
-	}
-
-	private IFileDelta[] getFileDeltas(IProgressMonitor monitor, ValidatorMetaData vmd) throws CoreException {
-		Set result = (Set) getFileDeltas(monitor).get(vmd);
-		if (result == null) {
-			return new IFileDelta[0];
-		}
-		IFileDelta[] temp = new IFileDelta[result.size()];
-		result.toArray(temp);
-		return temp;
-	}
-
-	/**
-	 * Store the file deltas (VMD <=>Set[IFileDelta]) if the file deltas haven't been loaded. If the
-	 * deltas have already been loaded, return without doing anything.
-	 */
-	private void loadFileDeltas(IProgressMonitor monitor) throws CoreException {
-		// Although, for a full build, we don't build up a list of changed
-		// files, we do need to notify each IWorkbenchContext that an
-		// IResource has been filtered in.
-		// It's a full validation if the IResourceDelta is null and the
-		// Object[] (or IResource[]) is also null.
-		// i.e., it's a full validation if no incremental input has been set.
-		setFullValidate((getDelta() == null) && (_fileDeltas == null));
-		if (isFullValidate()) {
-			_fileDeltas = FilterUtil.loadDeltas(monitor, getEnabledValidators(), getProject());
-		} else {
-			_fileDeltas = FilterUtil.loadDeltas(monitor, getEnabledValidators(), getDelta()); // traverse,
-			// and process, each resource in the delta tree
-		}
-	}
-
-	protected void setFileDeltas(Map deltas) {
-		_fileDeltas = deltas;
-	}
-
-	protected IResourceDelta getDelta() {
-		return _delta;
-	}
-
-	protected void setDelta(IResourceDelta delta) {
-		_delta = delta;
-	}
-
-	protected boolean areValidatorsEnabled() {
-		return (getEnabledValidators().size() != 0);
-	}
-
-	/**
-	 * Return the validators which are both configured on this type of project, (as stored in
-	 * getProject()), and enabled by the user on this project.
-	 */
-	public Set getEnabledValidators() {
-		return _enabledValidators;
-	}
-
-	/**
-	 * This is an internal method, subject to change without notice. It is provided only for the
-	 * automated validation framework tests.
-	 */
-	public Set getLaunchedValidators() {
-		if (_launchedValidators == null) {
-			_launchedValidators = new HashSet();
-		}
-		return _launchedValidators;
-	}
-
-	protected void setEnabledValidators(Set evmds) {
-		// Check that every VMD in the set is configured on this project.
-		// Necessary because the user can manually choose which validators
-		// to launch, and the validator may not be installed.
-		_enabledValidators.clear();
-		Iterator iterator = evmds.iterator();
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-			if (ValidationRegistryReader.getReader().isConfiguredOnProject(vmd, getProject())) {
-				_enabledValidators.add(vmd);
-			}
-		}
-	}
-
-	/**
-	 * This method returns the IProject that this ValidationOperation was created with.
-	 */
-	public IProject getProject() {
-		return _project;
-	}
-
-	protected int getUnitsOfWork() {
-		/*
-		 * // Let one unit of work equal one resource. number of enabled validators // i.e., each
-		 * enabled validator must process (at most) each resource in the project; count each process
-		 * as one unit of work // Note that this is a ceiling number, because if we're doing an
-		 * incremental validation, not all resources will // be validated.
-		 * setNumResources(countResources(getProject())); getEnabledValidators().size();
-		 */
-		// Until the validators can report units-of-work complete,
-		// initialize the monitor with an unknown amount of work.
-		// (So the user will see movement in the progress bar, even
-		// if the movement doesn't indicate the amount of work done.)
-		return IProgressMonitor.UNKNOWN;
-	}
-
-	/**
-	 * If the user is cancelling validation on the current project/resource, Add an information task
-	 * to the task list informing the user that validation has not been run on the current project.
-	 */
-	protected void addCancelTask(ValidatorMetaData vmd) {
-		InternalValidatorManager.getManager().addOperationTask(getProject(), vmd, ResourceConstants.VBF_STATUS_VALIDATOR_TERMINATED, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
-	}
-
-	/**
-	 * This method starts the validation of each configured enabled validator on the current
-	 * project.
-	 * 
-	 * The IProgressMonitor passed in must not be null.
-	 */
-	public void run(IProgressMonitor progressMonitor) throws OperationCanceledException {
-		long start = System.currentTimeMillis();
-		final Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-		try {
-			// In order to check whether or not the monitor has been cancelled,
-			// the monitor must not be null.
-			if (progressMonitor == null) {
-				return;
-			}
-			if (ValidatorManager.getManager().isSuspended(getProject())) {
-				return;
-			}
-			if (!areValidatorsEnabled()) {
-				// save some processing time...
-				return;
-			}
-			if (ValidatorManager.getManager().getMaximumMessagesAllowed(getProject()) == 0) {
-				// save some processing time
-				return;
-			}
-			final WorkbenchReporter reporter = new WorkbenchReporter(getProject(), progressMonitor);
-
-			try {
-				// Periodically check if the user has cancelled the operation
-				checkCanceled(reporter);
-				preValidate(reporter);
-				validate(reporter);
-				validateReferencialFiles(reporter);
-			} catch (CoreException exc) {
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationOperation.run"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		} finally {
-			if (logger.isLoggingLevel(Level.FINE)) {
-				long finish = System.currentTimeMillis();
-				TimeEntry entry = ValidationPlugin.getTimeEntry();
-				entry.setSourceID("ValidationOperation.run(WorkbenchMonitor)"); //$NON-NLS-1$
-				entry.setProjectName(getProject().getName());
-				entry.setToolName("ValidationOperation"); //$NON-NLS-1$
-				entry.setElapsedTime(finish - start);
-				logger.write(Level.FINE, entry);
-			}
-		}
-	}
-
-	/**
-	 * @param reporter
-	 */
-	private void validateReferencialFiles(WorkbenchReporter reporter) {
-		ReferencialFileValidatorRegistryReader reader = ReferencialFileValidatorRegistryReader.getInstance();
-		if (reader != null) {
-			reader.readRegistry();
-			ReferencialFileValidator refFileValidator = reader.getReferencialFileValidator();
-			if (refFileValidator != null) {
-				if (_delta != null) {
-					refFileValidateFileDelta(reporter, refFileValidator);
-				} else if (_project != null) {
-					postValidateProject(reporter, refFileValidator);
-				}
-			}
-		}
-	}
-
-	/**
-	 * @param reporter
-	 * @param referencialFileValidator
-	 */
-	private void refFileValidateFileDelta(WorkbenchReporter reporter, ReferencialFileValidator refFileValidator) {
-		IResourceDelta[] resourceDelta = _delta.getAffectedChildren(IResourceDelta.ADDED | IResourceDelta.CHANGED | IResourceDelta.REMOVED);
-		List inputFiles = new ArrayList();
-		List referencingFiles = new ArrayList();
-		if (resourceDelta != null && resourceDelta.length > 0) {
-			for (int i = 0; i < resourceDelta.length; i++) {
-				IResource resource = resourceDelta[i].getResource();
-				if (resource instanceof IFolder) {
-					getFileResourceDeltaInFolder(resourceDelta[i], inputFiles);
-				} else if (resource instanceof IFile)
-					inputFiles.add(resource);
-			}
-			List rFilesToValidate = refFileValidator.getReferencedFile(inputFiles);
-			if (rFilesToValidate != null && !rFilesToValidate.isEmpty())
-				referencingFiles.addAll(rFilesToValidate);
-			try {
-				if (!referencingFiles.isEmpty())
-					validateReferencingFiles(reporter, referencingFiles);
-			} catch (Exception e) {
-				Logger.getLogger().log(e);
-			}
-		}
-	}
-
-	/**
-	 * @param delta
-	 * @return
-	 */
-	private void getFileResourceDeltaInFolder(IResourceDelta delta, List inputFiles) {
-		IResourceDelta[] resourceDelta = delta.getAffectedChildren();
-		for (int i = 0; i < resourceDelta.length; i++) {
-			IResource resource = resourceDelta[i].getResource();
-			if (resource instanceof IFile) {
-				inputFiles.add(resource);
-			} else if (resource instanceof IFolder)
-				getFileResourceDeltaInFolder(resourceDelta[i], inputFiles);
-		}
-	}
-
-	/**
-	 * @param reporter
-	 * @param referencialFileValidator
-	 */
-	private void postValidateProject(WorkbenchReporter reporter, ReferencialFileValidator refFileValidator) {
-		Set set = ValidationRegistryReader.getReader().getValidatorMetaData(_project);
-		Iterator it = set.iterator();
-		while (it.hasNext()) {
-			ValidatorMetaData data = (ValidatorMetaData) it.next();
-			List filters = data.getNameFilters();
-			List files = getAllFilesForFilter(filters);
-			if (!files.isEmpty()) {
-				List fileForValidation = refFileValidator.getReferencedFile(files);
-				try {
-					validateReferencingFiles(reporter, fileForValidation);
-				} catch (Exception e) {
-					Logger.getLogger().log(e);
-				}
-			}
-		}
-	}
-
-	/**
-	 * @param filters
-	 * @return
-	 */
-	private List getAllFilesForFilter(List filters) {
-		if (!filters.isEmpty()) {
-			List allProjectFiles = ReferencialFileValidatorHelper.getAllProjectFiles(_project);
-			List filterFiles = new ArrayList();
-			for (int i = 0; i < filters.size(); i++) {
-				String fileName = (String) filters.get(i);
-				if (fileName == null)
-					continue;
-				for (int j = 0; j < allProjectFiles.size(); j++) {
-					IFile projectFile = (IFile) allProjectFiles.get(j);
-					if (fileName.charAt(0) == '*') {
-						String extName = fileName.substring(2, fileName.length());
-						String ext = projectFile.getFileExtension();
-						if (ext != null && ext.equals(extName))
-							filterFiles.add(projectFile);
-					} else if (fileName.equals(projectFile.getName()))
-						filterFiles.add(projectFile);
-				}
-
-			}
-			return filterFiles;
-		}
-		return Collections.EMPTY_LIST;
-	}
-
-	private void validateReferencingFiles(IReporter reporter, List referencingFiles) throws Exception {
-		HashSet validatedFiles = new HashSet();
-		for (int i = 0; i < referencingFiles.size(); i++) {
-			IFile refFile = (IFile) referencingFiles.get(i);
-			if (!validatedFiles.contains(refFile)) {
-				IResource resource = refFile.getParent();
-				IProject project = null;
-				if (resource != null && !(resource instanceof IProject))
-					project = getProjectContainer(resource);
-				else
-					project = (IProject) resource;
-				if (project != null) {
-					Set set = ValidationRegistryReader.getReader().getValidatorMetaData(project);
-//					IFileDelta[] changedfiles = new FileDelta[]{new WorkbenchFileDelta(refFile.getProjectRelativePath().toString(), IFileDelta.CHANGED, refFile)};
-					Iterator it = set.iterator();
-					while (it.hasNext()) {
-						ValidatorMetaData data = (ValidatorMetaData) it.next();
-						if (data.isApplicableTo(refFile)) {
-							IValidator validator = data.getValidator();
-							validator.validate(data.getHelper(project),reporter);
-							validatedFiles.add(refFile);
-						}
-					}
-				}
-			}
-		}
-	}
-
-	private IProject getProjectContainer(IResource resource) {
-		IResource pResource = resource.getParent();
-		if (!(pResource instanceof IProject))
-			return getProjectContainer(pResource);
-		return (IProject) pResource;
-	}
-
-	protected void preValidate(WorkbenchReporter reporter) throws CoreException, OperationCanceledException {
-		// Load the input.
-		getFileDeltas(reporter.getProgressMonitor());
-	}
-
-	/**
-	 * Iterate over all of the enabled validators and run the thread-safe validators in a background
-	 * thread, and the not-thread-safe validators in this thread.
-	 */
-	protected void validate(WorkbenchReporter reporter) throws OperationCanceledException {
-		if (reporter == null) {
-			return;
-		}
-		checkCanceled(reporter);
-		reporter.getProgressMonitor().beginTask(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_PROGRESSMONITOR_TITLE), getUnitsOfWork());
-		IValidator validator = null;
-		ValidatorMetaData vmd = null;
-		Iterator iterator = null;
-		WorkbenchReporter nullReporter = new WorkbenchReporter(getProject(), new NullProgressMonitor());
-		final Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-		IFileDelta[] delta = null;
-		try {
-			iterator = getEnabledValidators().iterator();
-			// In order to allow validators to run, must first check if there's
-			// space for new markers.
-			// But we don't want the old markers to prevent validation from
-			// running again, so delete all
-			// of the old markers first, and then run validation.
-			while (iterator.hasNext()) {
-				vmd = (ValidatorMetaData) iterator.next();
-				// Is validation about to be run on this validator?
-				// Validation will run either if this operation forces
-				// regardless
-				// of need, or if the validator was not run automatically.
-				// If validation is not about to be run, then don't activate
-				// the plugin
-				try {
-					delta = getFileDeltas(reporter.getProgressMonitor(), vmd);
-					boolean willRun = (isForce() || isValidationNecessary(vmd, delta));
-					if (logger.isLoggingLevel(Level.FINEST)) {
-						TimeEntry entry = ValidationPlugin.getTimeEntry();
-						entry.setSourceID("ValidationOperation.validate(WorkbenchReporter)"); //$NON-NLS-1$
-						entry.setProjectName(getProject().getName());
-						entry.setToolName(vmd.getValidatorUniqueName());
-						entry.setElapsedTime(0);
-						StringBuffer buffer = new StringBuffer();
-						buffer.append("will run? "); //$NON-NLS-1$
-						buffer.append(willRun);
-						buffer.append("  "); //$NON-NLS-1$
-						buffer.append("is force? "); //$NON-NLS-1$
-						buffer.append(isForce());
-						buffer.append("  "); //$NON-NLS-1$
-						buffer.append("isAutoBuild? "); //$NON-NLS-1$
-						buffer.append(_isAutoBuild);
-						buffer.append("  "); //$NON-NLS-1$
-						buffer.append("isAutoValidate? "); //$NON-NLS-1$
-						boolean autoBuild = (_isAutoBuild == null) ? ValidatorManager.getManager().isGlobalAutoBuildEnabled() : _isAutoBuild.booleanValue();
-						buffer.append(ValidatorManager.getManager().isAutoValidate(getProject(), autoBuild));
-						buffer.append("  "); //$NON-NLS-1$
-						buffer.append("isIncremental? "); //$NON-NLS-1$
-						buffer.append(vmd.isIncremental());
-						buffer.append("  "); //$NON-NLS-1$
-						if (isFullValidate()) {
-							buffer.append("EVERYTHING"); //$NON-NLS-1$
-						} else {
-							if (delta.length == 0) {
-								buffer.append("NOTHING"); //$NON-NLS-1$
-							} else {
-								buffer.append(getDeltaAsString(delta));
-							}
-						}
-						entry.setDetails(buffer.toString());
-						logger.write(Level.FINEST, entry);
-					}
-					if (!willRun) {
-						continue;
-					}
-				} catch (CoreException exc) {
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setSourceID("ValidationOperation.validate(WorkbenchReporter)"); //$NON-NLS-1$
-						entry.setTargetException(exc);
-						logger.write(Level.SEVERE, entry);
-					}
-					String mssg = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
-					reporter.displaySubtask(mssg);
-					String[] msgParm = {exc.getClass().getName(), vmd.getValidatorDisplayName(), (exc.getMessage() == null ? "" : exc.getMessage())}; //$NON-NLS-1$
-					Message message = ValidationPlugin.getMessage();
-					message.setSeverity(IMessage.NORMAL_SEVERITY);
-					message.setId(ResourceConstants.VBF_EXC_RUNTIME);
-					message.setParams(msgParm);
-					reporter.addMessage(validator, message);
-					continue;
-				}
-				try {
-					context = vmd.getHelper(getProject());
-					initValidateContext(delta);
-					validator = vmd.getValidator();
-				} catch (InstantiationException exc) {
-					// Remove the vmd from the reader's list
-					ValidationRegistryReader.getReader().disableValidator(vmd);
-					// Log the reason for the disabled validator
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setSourceID("ValidationOperation::validate(WorkbenchReporter)"); //$NON-NLS-1$
-						entry.setTargetException(exc);
-						logger.write(Level.SEVERE, entry);
-					}
-					continue;
-				}
-				
-				if (isFork() && vmd.isAsync()) {
-					// Don't appear to run in the foreground by sending
-					// progress to the IProgressMonitor in the
-					// WorkbenchMonitor. Suppress the status messages by
-					// changing the IProgressMonitor to a
-					// NullProgressMonitor.
-					VThreadManager.getManager().queue(wrapInRunnable(nullReporter, validator, vmd,(WorkbenchContext)getContext(),delta, iterator));
-				} else {
-					internalValidate(reporter, validator, vmd,context,delta);
-				}
-			}
-		} catch (OperationCanceledException exc) {
-			handleOperationCancelledValidateException(reporter, validator, vmd, iterator, logger, exc);
-		} finally {
-			releaseCachedMaps();
-		}
-	}
-
-	/**
-	 * 
-	 */
-	private void releaseCachedMaps() {
-		if(ValidatorManager.messageLimitProjectMap != null) {
-			ValidatorManager.messageLimitProjectMap.clear();
-			ValidatorManager.messageLimitProjectMap = null;
-		}
-		if(ValidatorManager.messageLimitMessageProjectMap != null) {
-			ValidatorManager.messageLimitMessageProjectMap.clear();
-			ValidatorManager.messageLimitMessageProjectMap = null;
-		}
-		if (ValidationRegistryReader.getReader().projectValidationMetaData != null) {
-			ValidationRegistryReader.getReader().projectValidationMetaData.clear();
-			ValidationRegistryReader.getReader().projectValidationMetaData = null;
-		}
-	}
-
-	private void initValidateContext(IFileDelta[] delta) {
-		 if (context instanceof WorkbenchContext) {
-			 ((WorkbenchContext)context).setValidationFileURIs(new ArrayList());
-			 for(int i = 0; i < delta.length; i++) {
-				 IFileDelta file = delta[i];
-				 if(file.getDeltaType() != IFileDelta.DELETED ) {
-					 ((WorkbenchContext)context).getValidationFileURIs().add(file.getFileName());
-				 }
-			 } 
-		}
-	}
-
-	/**
-	 * @param reporter
-	 * @param validator
-	 * @param vmd
-	 * @param iterator
-	 * @param logger
-	 * @param exc
-	 */
-	private void handleOperationCancelledValidateException(WorkbenchReporter reporter, IValidator validator, ValidatorMetaData vmd, Iterator iterator, final Logger logger, OperationCanceledException exc) {
-		/*
-		 * If the user terminates validation (i.e., presses "cancel" on the progress monitor) before
-		 * the validation completes, perform clean up on each configured enabled validator.
-		 * 
-		 * To clean up, several steps are performed: 1. call <code></code> on each configured
-		 * enabled validator, so that each validator can perform cleanup that it knows is necessary.
-		 * 2. remove all tasks that this validator has added to the task list 3. add another task to
-		 * the task list to say that validation, using this validator on this project, was
-		 * terminated.
-		 * 
-		 * Steps 2 and 3 are done so that it's clear what has, and has not, been validated. If these
-		 * steps weren't performed, validation could be done on some items in the project, but not
-		 * others; and the user could mistakenly believe that those are the only problems with the
-		 * project. Unless the user knows that a full verification needs to be done, he/she could
-		 * continue to rely on automatic verification, and never know that there are problems with a
-		 * resource which hasn't been validated.
-		 */
-		reporter.displaySubtask(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_VALIDATOR_CLEANUP, new String[]{vmd.getValidatorDisplayName()}));
-		reporter.removeAllMessages(validator);
-		addCancelTask(vmd);
-		reporter.displaySubtask(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_VALIDATOR_TERMINATED, new String[]{getProject().getName(), vmd.getValidatorDisplayName()}));
-		while (iterator.hasNext()) {
-			vmd = (ValidatorMetaData) iterator.next();
-			try {
-				validator = vmd.getValidator();
-			} catch (InstantiationException exc2) {
-				// Remove the vmd from the reader's list
-				ValidationRegistryReader.getReader().disableValidator(vmd);
-				// Log the reason for the disabled validator
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationOperation::validate(WorkbenchReporter)"); //$NON-NLS-1$
-					entry.setTargetException(exc2);
-					logger.write(Level.SEVERE, entry);
-				}
-				continue;
-			}
-			reporter.displaySubtask(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_VALIDATOR_CLEANUP, new String[]{vmd.getValidatorDisplayName()}));
-			reporter.removeAllMessages(validator);
-			addCancelTask(vmd);
-			reporter.displaySubtask(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_VALIDATOR_TERMINATED, new String[]{getProject().getName(), vmd.getValidatorDisplayName()}));
-		}
-		throw exc; // propagate the exception up to the framework so that
-		// the framework can display the correct "cancelled"
-		// message in the dialog
-
-	}
-
-	/* package */
-	void internalValidate(final WorkbenchReporter reporter, final IValidator validator, final ValidatorMetaData vmd,final IWorkbenchContext aContext, final IFileDelta[] delta) throws OperationCanceledException {
-		final Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-		try {
-			checkCanceled(reporter);
-			removeOldMessages(reporter, validator, vmd, delta);
-			// Do NOT check if the message limit is exceeded before launching
-			// the validator.
-			// Even if the limit is exceeded when the messages are removed from
-			// the delta
-			// files, it could be that the validator itself will remove
-			// messages before
-			// proceeding. Let the validator run so that it can remove messages
-			// if it
-			// needs to, and if it tries to add a message when the limit is
-			// exceeded, let
-			// the WorkbenchReporter take care of it.
-			launchValidator(reporter, validator, vmd,aContext,delta);
-		} catch (OperationCanceledException exc) {
-			// This is handled in the validate(WorkbenchReporter) method.
-			throw exc;
-		} catch (MessageLimitException exc) {
-			// Let the finally block handle this case.
-			// handleMessageLimit();
-		} catch (Throwable exc) {
-			// If there is a problem with this particular validator, log the
-			// error and continue
-			// with the next validator.
-			// If a runtime exception has occured, e.g. NullPointer or
-			// ClassCast, display it with the "A runtime exception has occurred
-			// " messsage.
-			// This will provide more information to the user when he/she calls
-			// IBM Service.
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationOperation.internalValidate"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-			String mssg = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
-			reporter.displaySubtask(mssg);
-			String[] msgParm = {exc.getClass().getName(), vmd.getValidatorDisplayName(), (exc.getMessage() == null ? "" : exc.getMessage())}; //$NON-NLS-1$
-			Message message = ValidationPlugin.getMessage();
-			message.setSeverity(IMessage.NORMAL_SEVERITY);
-			message.setId(ResourceConstants.VBF_EXC_RUNTIME);
-			message.setParams(msgParm);
-			reporter.addMessage(validator, message);
-		} finally {
-			// If user fixes problem, and limit exceeded, add "exceeded"
-			// message, or
-			// if limit not exceeded any more, remove "exceeded" message.
-			ValidatorManager.getManager().checkMessageLimit(getProject(), true);
-			reporter.getProgressMonitor().done();
-		}
-	}
-
-	/**
-	 * In order to allow validators to run, must first check if there's space for new markers. But
-	 * the old markers must not prevent validation from running again (limit exceeded), so delete
-	 * all of the old markers first, and then run validation.
-	 */
-	private final void removeOldMessages(WorkbenchReporter reporter, IValidator validator, ValidatorMetaData vmd, IFileDelta[] delta) {
-		if (reporter == null) {
-			return;
-		}
-		// If the validator has been enabled, remove the "cancel" task.
-		// If the validator, on the last run, threw a Throwable, remove the
-		// "internal error" task. (For the same reasons we remove the "cancel"
-		// task.
-		InternalValidatorManager.getManager().removeOperationTasks(getProject(), vmd);
-		checkCanceled(reporter);
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-		try {
-			// Check to see if a full build must be performed, or if a delta
-			// build is to be performed, if there are files to verify for that
-			// validator. (If it's delta, but there are no files, calling
-			// validate on that validator starts a full build, instead of just
-			// returning.)
-			if (isFullValidate()) {
-				String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_START_REMOVING_OLD_MESSAGES, new String[]{vmd.getValidatorDisplayName(), getProject().getName()});
-				reporter.displaySubtask(message);
-				reporter.removeAllMessages(validator);
-				message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_FINISH_REMOVING_OLD_MESSAGES, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
-				reporter.displaySubtask(message);
-			} else {
-				// Don't need to check that there are deltas to validate
-				// because that's already checked in isValidationNecessary
-				String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_START_REMOVING_OLD_MESSAGES, new String[]{vmd.getValidatorDisplayName(), getProject().getName()});
-				reporter.displaySubtask(message);
-				for (int i = 0; i < delta.length; i++) {
-					WorkbenchFileDelta fd = (WorkbenchFileDelta) delta[i];
-					if (fd.getDeltaType() != IFileDelta.DELETED) {
-						// If the file has been deleted, eclipse erases all
-						// markers on the file.
-						// Also, when a resource doesn't exist,
-						// WorkbenchReporter's getMessageResource()
-						// returns the IProject, which means that removing the
-						// messages from this
-						// file removes all of this validator's messages on
-						// this IProject (aix defect 206157)
-						IResource resource = reporter.getMessageResource(validator, fd);
-						if (fd.getObject().equals(fd.getResource())) {
-							WorkbenchReporter.removeAllMessages(resource, validator); // remove
-							// all
-							// messages
-							// from
-							// this
-							// resource
-						} else {
-							reporter.removeAllMessages(validator, fd.getObject());
-						}
-					}
-				}
-				message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_FINISH_REMOVING_OLD_MESSAGES, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
-				reporter.displaySubtask(message);
-			}
-		} catch (OperationCanceledException exc) {
-			throw exc;
-		} catch (Throwable exc) {
-			// If there is a problem with this particular validator, log the
-			// error and continue
-			// with the next validator.
-			// If a runtime exception has occured, e.g. NullPointer or
-			// ClassCast, display it with the "A runtime exception has occurred
-			// " messsage.
-			// This will provide more information to the user when he/she calls
-			// IBM Service.
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationOperation.validate(WorkbenchMonitor)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-			String mssg = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
-			reporter.displaySubtask(mssg);
-			String[] msgParm = {exc.getClass().getName(), vmd.getValidatorDisplayName(), (exc.getMessage() == null ? "" : exc.getMessage())}; //$NON-NLS-1$
-			Message message = ValidationPlugin.getMessage();
-			message.setSeverity(IMessage.NORMAL_SEVERITY);
-			message.setId(ResourceConstants.VBF_EXC_RUNTIME);
-			message.setParams(msgParm);
-			reporter.addMessage(validator, message);
-			return;
-		}
-	}
-
-	/**
-	 * Whether a full verification or a delta verification is in progress, both will call this
-	 * method to process the resource. This method calls the current Validator to filter the
-	 * resource (i.e., this method returns if the resource fails the filter test).
-	 * <code>process</code> also sends output to the <code>IProgressMonitor</code>, and calls
-	 * the current Validator to validate the resource.
-	 * 
-	 * To process a resource, there are several steps: 1. check if the resource is registered for
-	 * this validator (i.e., the validator has either specified it in a filter, or has not filtered
-	 * it out explicitly) 2. call <code>isValidationSource</code> on the current validator with
-	 * the current resource. This method performs further filtering by the Validator itself, in
-	 * addition to the static filtering done by the framework, based on the information in
-	 * plugin.xml. 3. If the resource passes both filters, call <code>validate</code> on the
-	 * validator, with the resource. 4. When complete (either by failing to pass a filter, or by the
-	 * completion of the <code>validate</code>), increment the IProgressMonitor's status by one
-	 * (i.e., one resource has been processed.)
-	 */
-	private final void launchValidator(WorkbenchReporter reporter, IValidator validator, ValidatorMetaData vmd, IWorkbenchContext helper, IFileDelta[] delta) {
-		if (reporter == null) {
-			return;
-		}
-		checkCanceled(reporter);
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-		// Check to see if a full build must be performed, or if a delta
-		// build is to be performed, if there are files to verify for that
-		// validator. (If it's delta, but there are no files, calling
-		// validate on that validator starts a full build, instead of just
-		// returning.)
-		try {
-			// Validate the resource; this step will add errors/warnings to the
-			// task list, and remove errors/warnings from the task list.
-			if (helper instanceof WorkbenchContext) {
-				// Initialize the "loadRuleGroup" method with the group of
-				// rules
-				// which the validator should validate.
-				((WorkbenchContext) helper).setRuleGroup(getRuleGroup());
-			}
-			long start = System.currentTimeMillis();
-			String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_STARTING_VALIDATION, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
-			reporter.displaySubtask(message);
-			if (logger.isLoggingLevel(Level.FINEST)) {
-				// This internal "launched validators" value is used only in
-				// tests.
-				getLaunchedValidators().add(vmd);
-			}
-			//initValidateContext(delta);
-			ValidatorLauncher.getLauncher().start(helper, validator, reporter);
-			long finish = System.currentTimeMillis();
-			if (logger.isLoggingLevel(Level.INFO)) {
-				TimeEntry entry = ValidationPlugin.getTimeEntry();
-				entry.setSourceID("ValidationOperation.launchValidator"); //$NON-NLS-1$
-				entry.setProjectName(getProject().getName());
-				entry.setToolName(vmd.getValidatorUniqueName());
-				entry.setElapsedTime(finish - start);
-				if (logger.isLoggingLevel(Level.FINE)) {
-					StringBuffer buffer = new StringBuffer();
-					if (isFullValidate()) {
-						buffer.append("EVERYTHING"); //$NON-NLS-1$
-					} else {
-						if (delta.length == 0) {
-							buffer.append("NOTHING"); //$NON-NLS-1$
-						} else {
-							buffer.append(getDeltaAsString(delta));
-						}
-					}
-					entry.setDetails(buffer.toString());
-				}
-				logger.write(Level.INFO, entry);
-			}
-			message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
-			reporter.displaySubtask(message);
-		} catch (MessageLimitException exc) {
-			throw exc;
-		} catch (OperationCanceledException exc) {
-			throw exc;
-		} catch (ValidationException exc) {
-			// First, see if a validator just caught all Throwables and
-			// accidentally wrapped a MessageLimitException instead of
-			// propagating it.
-			if (exc.getAssociatedException() != null) {
-				if (exc.getAssociatedException() instanceof MessageLimitException) {
-					MessageLimitException mssgExc = (MessageLimitException) exc.getAssociatedException();
-					throw mssgExc;
-				} else if (exc.getAssociatedException() instanceof ValidationException) {
-					ValidationException vexc = (ValidationException) exc.getAssociatedException();
-					vexc.setClassLoader(validator.getClass().getClassLoader()); // first,
-					// set
-					// the
-					// class
-					// loader,
-					// so
-					// that
-					// the
-					// exception's
-					// getMessage()
-					// method
-					// can
-					// retrieve
-					// the
-					// resource
-					// bundle
-				}
-			}
-			// If there is a problem with this particular validator, log the
-			// error and continue
-			// with the next validator.
-			exc.setClassLoader(validator.getClass().getClassLoader()); // first,
-			// set
-			// the
-			// class
-			// loader,
-			// so
-			// that
-			// the
-			// exception's
-			// getMessage()
-			// method
-			// can
-			// retrieve
-			// the
-			// resource
-			// bundle
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationOperation.validate(WorkbenchMonitor)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-				if (exc.getAssociatedException() != null) {
-					entry.setTargetException(exc.getAssociatedException());
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-			String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
-			reporter.displaySubtask(message);
-			if (exc.getAssociatedMessage() != null) {
-				reporter.addMessage(validator, exc.getAssociatedMessage());
-			}
-		} catch (Throwable exc) {
-			// If there is a problem with this particular validator, log the
-			// error and continue
-			// with the next validator.
-			// If a runtime exception has occured, e.g. NullPointer or
-			// ClassCast, display it with the "A runtime exception has occurred
-			// " messsage.
-			// This will provide more information to the user when he/she calls
-			// IBM Service.
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationOperation.validate(WorkbenchMonitor)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-			String mssg = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
-			reporter.displaySubtask(mssg);
-			String[] msgParm = {exc.getClass().getName(), vmd.getValidatorDisplayName(), (exc.getMessage() == null ? "" : exc.getMessage())}; //$NON-NLS-1$
-			Message message = ValidationPlugin.getMessage();
-			message.setSeverity(IMessage.NORMAL_SEVERITY);
-			message.setId(ResourceConstants.VBF_EXC_RUNTIME);
-			message.setParams(msgParm);
-			reporter.addMessage(validator, message);
-		} finally {
-			try {
-				validator.cleanup(reporter);
-			} catch (MessageLimitException e) {
-				throw e;
-			} catch (OperationCanceledException e) {
-				throw e;
-			} catch (Throwable exc) {
-				// If a runtime exception has occured, e.g. NullPointer or
-				// ClassCast, display it with the "A runtime exception has
-				// occurred " messsage.
-				// This will provide more information to the user when he/she
-				// calls IBM Service.
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationOperation::launchValidator"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-				String[] msgParm = {exc.getClass().getName(), vmd.getValidatorDisplayName(), (exc.getMessage() == null ? "" : exc.getMessage())}; //$NON-NLS-1$
-				Message message = ValidationPlugin.getMessage();
-				message.setSeverity(IMessage.NORMAL_SEVERITY);
-				message.setId(ResourceConstants.VBF_EXC_RUNTIME);
-				message.setParams(msgParm);
-				try {
-					reporter.addMessage(validator, message);
-				} catch (MessageLimitException e) {
-					throw e;
-				}
-				return;
-			}
-			try {
-				helper.cleanup(reporter);
-			} catch (MessageLimitException e) {
-				throw e;
-			} catch (OperationCanceledException e) {
-				throw e;
-			} catch (Throwable exc) {
-				// If a runtime exception has occured, e.g. NullPointer or
-				// ClassCast, display it with the "A runtime exception has
-				// occurred " messsage.
-				// This will provide more information to the user when he/she
-				// calls IBM Service.
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationOperation::launchValidator"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-				String[] msgParm = {exc.getClass().getName(), vmd.getValidatorDisplayName(), (exc.getMessage() == null ? "" : exc.getMessage())}; //$NON-NLS-1$
-				Message message = ValidationPlugin.getMessage();
-				message.setSeverity(IMessage.NORMAL_SEVERITY);
-				message.setId(ResourceConstants.VBF_EXC_RUNTIME);
-				message.setParams(msgParm);
-				try {
-					reporter.addMessage(validator, message);
-				} catch (MessageLimitException e) {
-					throw e;
-				}
-				return;
-			} finally {
-				// Now that cleanup has been called, set the project to null.
-				// This project's
-				// resources have been freed so this project should also be
-				// cleared on the helper.
-				// If it isn't set to null, then the next time that the helper
-				// is retrieved from
-				// the ValidatorMetaData, the resources allocated for this
-				// project, in the
-				// helper's initialize method, will not be reallocated if the
-				// project is the same.
-				helper.setProject(null);
-			}
-			// Tell the progress monitor that we've completed n units of work
-			// (i.e., n resources validated by one validator).
-			reporter.getProgressMonitor().worked(((delta == null) ? 1 : delta.length)); // One
-			// unit
-			// of
-			// work
-			// = 1
-			// (i.e.,
-			// 1
-			// resource)
-		}
-	}
-
-	private Runnable wrapInRunnable(final WorkbenchReporter reporter, final IValidator validator, final ValidatorMetaData vmd, final IWorkbenchContext helper, final IFileDelta[] delta, final Iterator iterator) {
-		// Need to create a new Runnable each time because several Runnable
-		// instances may exist at the same time.
-		Runnable runnable = new ProjectRunnable(reporter, validator, vmd, helper, delta, iterator);
-		return runnable;
-	}
-
-	/*
-	 * // For convenience, keep this method in the class but commented out. // When async needs to
-	 * be tested, this method may be needed again. private static void debug(String prefix,
-	 * IWorkbenchContext helper) { IProject hProject = helper.getProject(); System.err.println(prefix +
-	 * "Start ValidationOperation "+Thread.currentThread().getName() + "::" + hProject.getName());
-	 * if( Thread.currentThread().getName().equals("ValidationThread") &&
-	 * (hProject.getName().indexOf("noFork") > -1)) { Thread.dumpStack(); } else
-	 * if((!Thread.currentThread().getName().equals("ValidationThread")) &&
-	 * (hProject.getName().indexOf("fork") > -1)) { Thread.dumpStack(); } System.err.println(prefix +
-	 * "End ValidationOperation"); }
-	 */
-	public class ProjectRunnable implements Runnable {
-		private WorkbenchReporter _reporter = null;
-		private IValidator _validator = null;
-		private ValidatorMetaData _vmd = null;
-//		private IValidationContext _helper = null;
-		private IFileDelta[] __delta = null;
-
-		public ProjectRunnable(WorkbenchReporter reporter, IValidator validator, ValidatorMetaData vmd, IWorkbenchContext helper, IFileDelta[] delta, Iterator iterator) {
-			_reporter = reporter;
-			_validator = validator;
-			_vmd = vmd;
-//			_helper = helper;
-			__delta = delta;
-		}
-
-		public void run() {
-			try {
-				internalValidate(_reporter, _validator, _vmd, context,__delta);
-			} catch (OperationCanceledException exc) {
-				// User can't cancel a job in a background thread, so ignore
-				// this exception.
-			}
-		}
-
-		public IProject getProject() {
-			return _reporter.getProject();
-		}
-	}
-
-	/**
-	 * @return Returns the context.
-	 */
-	public IValidationContext getContext() {
-		return context;
-	}
-
-	/**
-	 * @param context The context to set.
-	 */
-	public void setContext(IWorkbenchContext context) {
-		this.context = context;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationUtility.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationUtility.java
deleted file mode 100644
index 0a29729..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationUtility.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.ConfigurationConstants;
-import org.eclipse.wst.validation.internal.ConfigurationManager;
-import org.eclipse.wst.validation.internal.ProjectConfiguration;
-import org.eclipse.wst.validation.internal.TaskListUtility;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-/**
- * This class contains utility methods that are intended to be used by validators and code outside
- * of the validation framework.
- */
-public final class ValidationUtility {
-	//TODO Make the ValidationUtility constructor private in Milestone 4.
-
-	/**
-	 * Given an IResource and one of the org.eclipse.wst.validation.internal.core.core.SevertyEnum constants,
-	 * return an array containing the fully-qualified class names of the validators which have
-	 * reported messages, of the given severity, against the resource and the resource's children.
-	 */
-	public static String[] listValidatorClasses(IResource resource, int severity) {
-		IMarker[] markers = TaskListUtility.getValidationTasks(resource, severity);
-		if ((markers == null) || (markers.length == 0)) {
-			return new String[0];
-		}
-
-		Set tempSet = new HashSet();
-		for (int i = 0; i < markers.length; i++) {
-			IMarker marker = markers[i];
-			try {
-				Object owner = marker.getAttribute(ConfigurationConstants.VALIDATION_MARKER_OWNER);
-				if ((owner == null) || !(owner instanceof String)) {
-					// The ValidationMigrator will remove any "unowned" validation markers.
-					continue;
-				}
-				tempSet.add(owner);
-			} catch (CoreException exc) {
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationUtility.listValidatorClasses(" + resource.getName() + ", " + severity); //$NON-NLS-1$  //$NON-NLS-2$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-
-
-		if (tempSet.size() > 0) {
-			String[] result = new String[tempSet.size()];
-			tempSet.toArray(result);
-			tempSet.clear();
-			return result;
-		}
-		return new String[0];
-	}
-
-	/**
-	 * @deprecated This instance method will be made static in Milestone 4.
-	 */
-	public boolean isEnabled(IProject project, String validatorClassName) {
-		return isEnabled(project, new String[]{validatorClassName});
-	}
-
-	/**
-	 * Return true if all of the validators, identified by their fully-qualified class names, are
-	 * enabled on the project. If a validator isn't enabled, or if there's an internal error while
-	 * retrieving the user's configuration, return false.
-	 */
-	public static boolean isEnabled(IProject project, String[] validatorClassNames) {
-		if ((validatorClassNames == null) || (validatorClassNames.length == 0)) {
-			return false;
-		}
-
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			for (int i = 0; i < validatorClassNames.length; i++) {
-				if (!prjp.isEnabled(validatorClassNames[i])) {
-					return false;
-				}
-			}
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationUtility::isEnabled(" + project.getName() + ", String[])"); //$NON-NLS-1$  //$NON-NLS-2$  //$NON-NLS-3$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-			return false;
-		}
-
-		return true;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorManager.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorManager.java
deleted file mode 100644
index 2b6ca75..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorManager.java
+++ /dev/null
@@ -1,1363 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.ICommand;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.ConfigurationManager;
-import org.eclipse.wst.validation.internal.InternalValidatorManager;
-import org.eclipse.wst.validation.internal.ProjectConfiguration;
-import org.eclipse.wst.validation.internal.ResourceConstants;
-import org.eclipse.wst.validation.internal.TaskListUtility;
-import org.eclipse.wst.validation.internal.ValidationConfiguration;
-import org.eclipse.wst.validation.internal.ValidationRegistryReader;
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-import org.eclipse.wst.validation.internal.core.Message;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-import org.eclipse.wst.validation.internal.provisional.core.IMessage;
-import org.eclipse.wst.validation.internal.provisional.core.IValidator;
-
-/**
- * A centralised class for accessing validation metadata.
- * 
- * This class is not intended to be subclassed outside of the validation framework.
- */
-public final class ValidatorManager {
-	private static ValidatorManager inst = null;
-	private static IResourceUtil _resourceUtil = null; // a common utility, different whether or not
-	// WSAD is running in headless or UI mode,
-	// which can retrieve the line number of some
-	// MOF objects.
-	private static final Class RESOURCEUTIL_DEFAULTCLASS = org.eclipse.wst.validation.internal.operations.DefaultResourceUtil.class;
-	private static Class _resourceUtilClass = RESOURCEUTIL_DEFAULTCLASS;
-	private static final Set EMPTY_SET = Collections.EMPTY_SET; // an empty set, provided for
-	// convenience, so that we only
-	// construct one empty set once.
-	private Set _suspendedProjects = null;
-	private boolean _suspendAllValidation = false;
-	private static Class _messageLimitOwner = null;
-	private String[] _internalOwners = null;
-
-	public static HashMap messageLimitProjectMap = null;
-	public static HashMap messageLimitMessageProjectMap = null;
-	
-	/**
-	 * ValidatorManager constructor comment.
-	 */
-	private ValidatorManager() {
-		super();
-		_suspendedProjects = new HashSet();
-		_internalOwners = new String[0];
-
-		addInternalOwner(getMessageLimitOwner());
-	}
-
-	/**
-	 * Disable all validators for the current project, and does not touch the auto-validate setting.
-	 */
-	public void disableAllValidators(IProject currentProject, IProgressMonitor monitor) {
-		// Disable the individual validators
-		setEnabledValidators(currentProject, EMPTY_SET, monitor);
-	}
-
-	/**
-	 * Given an IProject, if the IProject does not support build validation, add the validation
-	 * builder to the project description so that the project can support bulid validation.
-	 */
-	public static void addProjectBuildValidationSupport(IProject project) {
-		if (project == null) {
-			return;
-		}
-
-		boolean isBuilderAdded = false;
-		try {
-			IProjectDescription description = project.getDescription();
-			ICommand[] commands = description.getBuildSpec(); // don't need to check if description
-			// is null, because it's never null
-			if (commands != null) {
-				for (int i = 0; i < commands.length; i++) {
-					String builderName = commands[i].getBuilderName();
-					if (builderName == null) {
-						// builder name will be null if it has not been set
-						continue;
-					}
-
-					if (builderName.equals(ValidationPlugin.VALIDATION_BUILDER_ID)) {
-						isBuilderAdded = true;
-						break;
-					}
-				}
-			}
-
-			if (!isBuilderAdded) {
-				ICommand newCommand = description.newCommand();
-				newCommand.setBuilderName(ValidationPlugin.VALIDATION_BUILDER_ID);
-
-				ICommand[] newCommands = null;
-				if (commands != null) {
-					newCommands = new ICommand[commands.length + 1];
-					System.arraycopy(commands, 0, newCommands, 0, commands.length);
-					newCommands[commands.length] = newCommand;
-				} else {
-					newCommands = new ICommand[1];
-					newCommands[0] = newCommand;
-				}
-				description.setBuildSpec(newCommands);
-
-				project.setDescription(description, null);
-			}
-		} catch (CoreException exc) {
-			// if we can't read the information, the project isn't open, so it can't run
-			// auto-validate
-			return;
-		}
-	}
-
-
-	/**
-	 * Given an IProject, this method returns true if the project can run build validation (i.e.,
-	 * incremental validation), and false otherwise. The test, to find out if the project supports
-	 * build validation or not, is to see if the ValidationBuilder is configured on that type of
-	 * project.
-	 * 
-	 * This is a long-running process - is there any way that I can shorten the amount of time this
-	 * takes?
-	 */
-	public static boolean doesProjectSupportBuildValidation(IProject project) {
-		boolean canRunAV = false;
-		if (project == null) {
-			return canRunAV;
-		}
-
-		try {
-			IProjectDescription description = project.getDescription();
-			ICommand[] commands = description.getBuildSpec(); // don't need to check if description
-			// is null, because it's never null
-			if (commands == null) {
-				return canRunAV;
-			}
-
-			for (int i = 0; i < commands.length; i++) {
-				String builderName = commands[i].getBuilderName();
-				if (builderName == null) {
-					// builder name will be null if it has not been set
-					continue;
-				}
-
-				if (builderName.equals(ValidationPlugin.VALIDATION_BUILDER_ID)) {
-					canRunAV = true;
-					break;
-				}
-			}
-		} catch (CoreException exc) {
-			// if we can't read the information, the project isn't open, so it can't run
-			// auto-validate
-			return false;
-		}
-
-		return canRunAV;
-	}
-
-	/**
-	 * Enable all validators for the current project, and does not touch the auto-validate setting.
-	 */
-	public void enableAllValidators(IProject project, IProgressMonitor monitor) {
-		// Turn auto-validate off
-		//	setAutoValidate(currentProject, false);
-
-		// Enable the individual validators
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			prjp.setEnabledValidators(prjp.getValidators());
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidatorManager::enableAllValidators(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-	}
-
-	/**
-	 * @deprecated For use by the validation framework only.
-	 * 
-	 * Return a collection of incremental ValidatorMetaData configured on a certain type of IProject
-	 * (e.g. EJB Project vs. Web Project).
-	 */
-	public Set getProjectConfiguredIncrementalValidators(IProject project) {
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			return InternalValidatorManager.wrapInSet(prjp.getIncrementalValidators());
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidatorManager::getProjectConfiguredIncrementalValidators(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-			return Collections.EMPTY_SET;
-		}
-	}
-
-	/**
-	 * @deprecated For use by the validation framework only.
-	 * 
-	 * Return a collection of ValidatorMetaData configured on a certain type of IProject (e.g. EJB
-	 * Project vs. Web Project).
-	 * 
-	 * If the collection has not been calculated before, calculate it now, and cache the result.
-	 */
-	public Set getProjectConfiguredValidatorMetaData(IProject project) {
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			return InternalValidatorManager.wrapInSet(prjp.getValidators());
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidatorManager::getProjectConfiguredValidatorMetaData(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-			return Collections.EMPTY_SET;
-		}
-	}
-
-	/**
-	 * @deprecated For use by the validation framework only.
-	 * 
-	 * Return a collection of ValidatorMetaData enabled on a certain type of IProject (e.g. EJB
-	 * Project vs. Web Project). The second parameter, isIncremental, identifies whether it's the
-	 * incremental, or non-incremental, validators which should be returned. If the parameter is
-	 * true, return incremental validators. If the parameter is false, return nonincremental
-	 * validators.
-	 */
-	public Set getProjectEnabledIncrementalValidators(IProject project) {
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			return InternalValidatorManager.wrapInSet(prjp.getEnabledIncrementalValidators(true));
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager::getProjectEnabledIncrementalValidators" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-			return Collections.EMPTY_SET;
-		}
-	}
-
-	/**
-	 * @deprecated For use by the validation framework only.
-	 * 
-	 * Return a collection of ValidatorMetaData enabled on a certain type of IProject (e.g. EJB
-	 * Project vs. Web Project). The second parameter, isIncremental, identifies whether it's the
-	 * incremental, or non-incremental, validators which should be returned. If the parameter is
-	 * true, return incremental validators. If the parameter is false, return nonincremental
-	 * validators.
-	 */
-	public Collection getProjectEnabledNonIncrementalValidators(IProject project) {
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			return InternalValidatorManager.wrapInSet(prjp.getEnabledIncrementalValidators(false));
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager::getProjectEnabledNonIncrementalValidators" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-			return Collections.EMPTY_SET;
-		}
-	}
-
-	/**
-	 * @deprecated For use by the validation framework only.
-	 * 
-	 * Returns a Vector of all ValidatorMetaData who are both configured on this type of project,
-	 * and who are also enabled by this project. If the list of enabled validators hasn't been
-	 * loaded into the cache, load it now. Otherwise, just return it.
-	 */
-	public Set getProjectEnabledValidators(IProject project) {
-		return getEnabledValidators(project);
-	}
-
-	public static ValidatorManager getManager() {
-		if (inst == null) {
-			inst = new ValidatorManager();
-		}
-		return inst;
-	}
-
-	public static IResourceUtil getResourceUtil() {
-		if (_resourceUtil == null) {
-			if (_resourceUtilClass == null) {
-				// Since the value returned from this method must never be null,
-				// default the resource util to the headless resource util.
-				_resourceUtilClass = RESOURCEUTIL_DEFAULTCLASS;
-			}
-
-			try {
-				_resourceUtil = (IResourceUtil) _resourceUtilClass.newInstance();
-			} catch (ClassCastException e) {
-				_resourceUtil = null;
-			} catch (InstantiationException e) {
-				_resourceUtil = null;
-			} catch (IllegalAccessException e) {
-				_resourceUtil = null;
-			}
-		}
-		return _resourceUtil;
-	}
-
-	/**
-	 * @deprecated This method is intended for use only by the validation framework. It will be
-	 *             moved to a class in the "internal" package at some time.
-	 */
-	public IMarker[] getValidationTasks(int severity, IProject project) {
-		return getValidationTasks(project, severity);
-	}
-
-	/**
-	 * @deprecated This method is intended for use only by the validation framework. It will be
-	 *             moved to a class in the "internal" package at some time.
-	 */
-	public IMarker[] getValidationTasks(IResource resource, int severity) {
-		return TaskListUtility.getValidationTasks(resource, severity);
-	}
-
-	/**
-	 * @deprecated This method is intended for use only by the validation framework. It will be
-	 *             moved to a class in the "internal" package at some time.
-	 */
-	public IMarker[] getValidationTasks(IResource resource, String[] validatorNames) {
-		return TaskListUtility.getValidationTasks(resource, validatorNames);
-	}
-
-	public int getMaximumMessagesAllowed(IProject project) {
-		try {
-			return ConfigurationManager.getManager().getProjectConfiguration(project).getMaximumNumberOfMessages();
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager.getMaximumMessagesAllowed(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-
-			return ValidationConfiguration.getMaximumNumberOfMessagesDefault();
-		}
-	}
-
-	/**
-	 * @deprecated For use by the validation framework only.
-	 */
-	public ValidatorMetaData getValidatorMetaData(IValidator validator) {
-		return ValidationRegistryReader.getReader().getValidatorMetaData(validator);
-	}
-
-	/**
-	 * @deprecated For use by the validation framework only.
-	 */
-	public Set getIncrementalValidators(Collection vmds) {
-		if (vmds == null) {
-			return Collections.EMPTY_SET;
-		}
-
-		Set result = new HashSet();
-		Iterator iterator = vmds.iterator();
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-			if (vmd.isIncremental()) {
-				result.add(vmd);
-			}
-		}
-		return result;
-	}
-
-
-	/**
-	 * Return true if the validator identified by validatorId will validate the given resource. If
-	 * either parameter is null, false is returned. If the validator is not registered with the
-	 * validation framework (i.e., either no validator in the activated plugins is identified by
-	 * that plugin id, or the given IResource's project does not run that particular validator),
-	 * then this method will return false.
-	 */
-	public boolean isApplicableTo(String validatorId, IResource res) {
-		if ((validatorId == null) || (res == null)) {
-			return false;
-		}
-
-		ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validatorId);
-		if (vmd == null) {
-			// validator not registered with the framework
-			return false;
-		}
-
-		if (!ValidationRegistryReader.getReader().isConfiguredOnProject(vmd, res.getProject())) {
-			return false;
-		}
-
-		return vmd.isApplicableTo(res);
-	}
-
-
-	public boolean isAutoValidate(IProject project) {
-		return isAutoValidate(project, isGlobalAutoBuildEnabled());
-	}
-
-	/**
-	 * Keeping this API around so as not to break existing code.
-	 * 
-	 * @deprecated use isAutoValidate
-	 */
-	public boolean isAutoValidateChecked(IProject project) {
-		return isAutoValidate(project);
-	}
-
-	/**
-	 * Keeping this API around so as not to break existing code.
-	 * 
-	 * @deprecated use isAutoValidate
-	 */
-	public boolean isAutoValidateChecked(IProject project, boolean isGlobalAutoBuildOn) {
-		return isAutoValidate(project, isGlobalAutoBuildOn);
-	}
-
-	/**
-	 * This method returns true if validate will run when there is a resource change. The following
-	 * attributes are checked: 1. does this project have auto-validate on or off? 2. if this project
-	 * does not have an auto-validate value set, is the global auto-validate preference on? 3. if 1
-	 * or 2 is true, does the project support auto-validate? 4. if 1/2, & 3, is auto-build on? 5. if
-	 * 1/2, 3, and 4, is there at least one incremental validator enabled on the project?
-	 */
-	public boolean isAutoValidate(IProject project, boolean isGlobalAutoBuildOn) {
-		try {
-			// 1. does the project have auto-validate on or off?
-			boolean isAutoValidate = ConfigurationManager.getManager().getProjectConfiguration(project).isAutoValidate();
-			if (!isAutoValidate) {
-				return false;
-			}
-
-			// 3. does the project support auto-validate?
-			// 4. is auto-build on?
-			// 5. is there at least one incremental validator enabled on the project?
-			/*
-			 * Auto-validation, on the properties page, can be enabled under these conditions: 1.
-			 * the project supports auto-validation, AND 2. fhe platform's global "automatically
-			 * build" is selected, AND 3. at least one of the project's validators supports
-			 * incremental validation. Without #1, the ValidationBuilder is never called because
-			 * it's not configured on the project. Without #2, the ValidationBuilder will not be
-			 * called because auto-building is turned off. Without #3, the ValidationBuilder will be
-			 * called, but there's no point because no validators can run.
-			 */
-			return canAutoValidateButtonBeEnabled(project, isGlobalAutoBuildOn);
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager.canAutoValidateButtonBeEnabled(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-
-			// If the user's setting can't be retrieved, return the default
-			return ValidationConfiguration.getAutoValidateDefault();
-		}
-	}
-
-	public boolean canAutoValidateButtonBeEnabled(IProject project) {
-		return canAutoValidateButtonBeEnabled(project, isGlobalAutoBuildEnabled());
-	}
-
-	/**
-	 * @deprecated For use by the validation framework only.
-	 */
-	public Set getEnabledIncrementalValidators(IProject project) {
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			ValidatorMetaData[] vmds = prjp.getEnabledIncrementalValidators(true);
-			return InternalValidatorManager.wrapInSet(vmds);
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager::getEnabledIncrementalValidators" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-			return Collections.EMPTY_SET;
-		}
-	}
-
-	/**
-	 * @deprecated For use by the validation framework only.
-	 * 
-	 * Given a checked list of enabled validators, return a set of the ones which are configured on
-	 * the project and, if getIncremental is true, which also run incrementally.
-	 */
-	public Set getProjectConfiguredValidators(IProject project, Object[] enabledVal, boolean getIncremental) {
-		if ((project == null) || (enabledVal == null) || (enabledVal.length == 0)) {
-			return Collections.EMPTY_SET;
-		}
-
-		Set val = new HashSet();
-		for (int i = 0; i < enabledVal.length; i++) {
-			ValidatorMetaData vmd = (ValidatorMetaData) enabledVal[i];
-			if (!vmd.isConfiguredOnProject(project)) {
-				continue;
-			}
-
-			if (!getIncremental || vmd.isIncremental()) {
-				val.add(vmd);
-			}
-		}
-		return val;
-	}
-
-	public boolean containsIncrementalValidators(Object[] enabledVal) {
-		if ((enabledVal == null) || (enabledVal.length == 0)) {
-			return false;
-		}
-
-		for (int i = 0; i < enabledVal.length; i++) {
-			ValidatorMetaData vmd = (ValidatorMetaData) enabledVal[i];
-
-			if (vmd.isIncremental()) {
-				return true;
-			}
-		}
-
-		return false;
-	}
-
-	/**
-	 * For use by the validation framework only.
-	 */
-	protected Set getEnabledValidators(IProject project) {
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			ValidatorMetaData[] vmds = prjp.getEnabledValidators();
-			return InternalValidatorManager.wrapInSet(vmds);
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager::getEnabledValidators" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-			return Collections.EMPTY_SET;
-		}
-	}
-
-	/**
-	 * This method is for use only by the validation framework. Update the task list based on which
-	 * validators are enabled or disabled. This method should be called only by the validation
-	 * framework UI classes. Remove the messages belonging to disabled validators.
-	 */
-	public void updateTaskList(IProject project) {
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			ValidatorMetaData[] vmds = prjp.getDisabledValidators();
-			for (int i = 0; i < vmds.length; i++) {
-				ValidatorMetaData vmd = vmds[i];
-				// For validators who aren't going to run, clear their messages from the task list.
-				// Don't need to check for duplicate entries because each Validator must be unique.
-				// The uniqueness of each Validator is checked by the plugin registry.
-				WorkbenchReporter.removeAllMessages(project, vmd.getValidatorNames(), null);
-			}
-
-			if (prjp.numberOfEnabledValidators() > 0) {
-				ValidatorManager.getManager().checkMessageLimit(project, false); // Do not remove
-				// the exceeded
-				// message; only
-				// ValidationOperation
-				// should do that
-				// because it's
-				// about to run
-				// validation. If
-				// the limit is
-				// increased,
-				// messages may
-				// still be
-				// missing, so
-				// don't remove the
-				// "messages may be
-				// missing"
-				// message.
-			} else {
-				// Can't run validation, so remove the "exceeded" message
-				ValidatorManager.getManager().removeMessageLimitExceeded(project);
-			}
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager.updateTaskList(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-	}
-
-
-	public boolean canAutoValidateButtonBeEnabled(IProject project, boolean isGlobalAutoBuildOn) {
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			boolean incrementalValEnabled = (prjp.numberOfEnabledIncrementalValidators() > 0);
-			return canAutoValidateButtonBeEnabled(project, isGlobalAutoBuildOn, incrementalValEnabled);
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager::canAutoValidateButtonBeEnabled" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-			return false;
-		}
-	}
-
-	public boolean canAutoValidateButtonBeEnabled(IProject project, boolean isGlobalAutoBuildOn, boolean incrementalValEnabled) {
-		boolean doesProjectSupportAutoValidate = doesProjectSupportBuildValidation(project);
-		return (doesProjectSupportAutoValidate && isGlobalAutoBuildOn && incrementalValEnabled);
-	}
-
-	/**
-	 * Return true if the validator identified by the String is configured on the IProject and
-	 * enabled on the IProject. Otherwise return false;
-	 */
-	public boolean isEnabled(IProject project, String validatorName) {
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			return prjp.isEnabled(validatorName);
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager.isEnabled(" + project.getName() + ", " + validatorName + ")"); //$NON-NLS-1$  //$NON-NLS-2$ //$NON-NLS-3$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-			return false;
-		}
-	}
-
-	/**
-	 * @deprecated For use by the validation framework only. Return true if the ValidatorMetaData is
-	 *             enabled for the given project
-	 */
-	public boolean isEnabled(IProject project, ValidatorMetaData vmd) {
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			return prjp.isEnabled(vmd);
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager::isEnabled" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-			return false;
-		}
-	}
-
-	/**
-	 * @deprecated For use by the validation framework only.
-	 */
-	public boolean isConfigured(IProject project, ValidatorMetaData vmd) {
-		return ValidationRegistryReader.getReader().isConfiguredOnProject(vmd, project);
-	}
-
-	/**
-	 * This method returns true if the global auto-build setting is turned on.
-	 */
-	public boolean isGlobalAutoBuildEnabled() {
-		return ResourcesPlugin.getWorkspace().isAutoBuilding();
-	}
-
-	/**
-	 * Returns the number of enabled validators on the given project.
-	 */
-	public int numberProjectEnabledValidators(IProject project) {
-		if (project == null) {
-			return 0;
-		}
-
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			return prjp.numberOfEnabledValidators();
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager::numberProjectEnabledValidators" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-			return 0;
-		}
-	}
-
-	/**
-	 * @deprecated
-	 * 
-	 * Use the suspendValidation(IProject, boolean) or suspendAllValidation(boolean) method instead.
-	 * This method does not guarantee that validation will be suspended. If the project is
-	 * overriding the preferences then validation will be suspended; otherwise validation will be
-	 * performed.
-	 * 
-	 * Programmatically changing the value of the project's preferences may be done only by the
-	 * validation framework.
-	 */
-	public void setAutoValidate(IProject project, boolean auto) {
-		try {
-			ConfigurationManager.getManager().getProjectConfiguration(project).setAutoValidate(auto);
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager.setAutoValidate(" + project.getName() + ", " + auto + ")"); //$NON-NLS-1$  //$NON-NLS-2$ //$NON-NLS-3$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Suspends, or undoes the suspension of, validation on the current project. If "suspend" is
-	 * true then validation is suspended and if it's "false" then validation will run on the
-	 * project. The value of this variable is not persisted.
-	 * 
-	 * Be VERY CAREFUL when you use this method! Turn validation back on in a finally block because
-	 * if the code which suspended validation crashes, the user has no way to unsuspend validation.
-	 * The user will have to shut down & restart WSAD to get validation to work again.
-	 * 
-	 * If an operation is used to make changes that should not be validated, then use the technique
-	 * documented in the "Preventing Validation" topic of the "Validation Guide" (in the
-	 * org.eclipse.wst.validation.internal.provisional.core.core.prop plugin). If you don't, validation may not be suspended.
-	 */
-	public void suspendValidation(IProject project, boolean suspend) {
-		if (project == null) {
-			return;
-		}
-
-		if (!project.exists()) {
-			return;
-		}
-
-		// Ignore whether or not the project is closed. If it's closed then it will not be built
-		// and the "Run Validation" option will not be available.
-		if (suspend) {
-			_suspendedProjects.add(project);
-		} else {
-			_suspendedProjects.remove(project);
-		}
-	}
-
-	/**
-	 * Suspends, or undoes the suspension of, validation on all projects in the workbench. If
-	 * "suspend" is true then validation is suspended and if it's "false" then validation will run.
-	 * The value of this variable is not persisted.
-	 * 
-	 * Be VERY CAREFUL when you use this method! Turn validation back on in a finally block because
-	 * if the code which suspended validation crashes, the user has no way to unsuspend validation.
-	 * The user will have to shut down & restart WSAD to get validation to work again.
-	 * 
-	 * If an operation is used to make changes that should not be validated, then use the technique
-	 * documented in the "Preventing Validation" topic of the "Validation Guide" (in the
-	 * org.eclipse.wst.validation.internal.provisional.core.core.prop plugin). If you don't, validation may not be suspended.
-	 */
-	public void suspendAllValidation(boolean suspend) {
-		_suspendAllValidation = suspend;
-	}
-
-	/**
-	 * Return true if "suspend all" is enabled, false otherwise.
-	 */
-	public boolean isSuspended() {
-		return _suspendAllValidation;
-	}
-
-	/**
-	 * Returns true if validation will not run on the project because it's been suspended. This
-	 * method checks only the suspension status; if validation cannot run for some other reason (for
-	 * example, there are no enabled validators), yet the IProject is not suspended, this method
-	 * will return true even though validation will not run.
-	 */
-	public boolean isSuspended(IProject project) {
-		if (project == null) {
-			return false;
-		}
-
-		if (_suspendAllValidation) {
-			return true;
-		}
-
-		return _suspendedProjects.contains(project);
-	}
-
-	/**
-	 * This method should be called by any code that is preparing to suspend validation on a
-	 * project. Rather than calling isSuspsend(IProject), which will return true if all validation
-	 * has been suspended, this method returns the state of the project itself. See the
-	 * ValidationMigrator::migrateProject for an example.
-	 * 
-	 * @param project
-	 * @return boolean
-	 */
-	public boolean isProjectSuspended(IProject project) {
-		if (project == null) {
-			return false;
-		}
-
-		return _suspendedProjects.contains(project);
-	}
-
-	/**
-	 * @deprecated For use by the validation framework only.
-	 * 
-	 * Given a list of validators' plugin ids, make those validators enabled for this project. All
-	 * others, disable for this project.
-	 */
-	public void setEnabledValidators(IProject project, Set vmdsSet, IProgressMonitor monitor) {
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			ValidatorMetaData[] vmds = null;
-			if (vmdsSet == null) {
-				vmds = new ValidatorMetaData[0];
-			} else {
-				vmds = new ValidatorMetaData[vmdsSet.size()];
-				vmdsSet.toArray(vmds);
-			}
-
-			prjp.setEnabledValidators(vmds);
-
-			updateTaskList(project);
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager.setEnabledValidators(" + project.getName() + ", Set, IProgressMonitor)"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-	}
-
-	public static void setResourceUtilClass(Class clazz) {
-		_resourceUtilClass = clazz;
-	}
-
-	public boolean isMessageLimitExceeded(IResource resource) {
-		if(resource == null) {
-			return false;
-		}
-		if(!resource.exists()) {
-			return false;
-		}
-		IProject project = resource.getProject();
-		if(isNoMessageLimit(project)) {
-			return false;
-		}
-		try {
-			//IMarker[] valTasks = getValidationTasks(project,SeverityEnum.ALL_MESSAGES);
-			initializeMessageLimitProjectMap(project);
-			Object messagesAddedForProject = messageLimitProjectMap.get(project);
-			int valTasks = ((Integer) messagesAddedForProject).intValue();
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			int max = prjp.getMaximumNumberOfMessages();
-			initializeMessageLimitMessageProjectMap();
-			Object messageLimitMessageAdded = messageLimitMessageProjectMap.get(project);
-			boolean isMessageLimitMessageAdded = false;
-			if(messageLimitMessageAdded != null) {
-				isMessageLimitMessageAdded = ((Boolean)messageLimitMessageAdded).booleanValue();
-			}
-			if (valTasks >= max || isMessageLimitMessageAdded) {
-				IMarker[] exceededTasks = getLimitMessage(project);
-				int numExceeded = (exceededTasks == null) ? 0 : exceededTasks.length;
-				// Excluding the "max messages were reported" messages, do the
-				// number of validation messages exceed the limit?
-				int numValTasks = valTasks - numExceeded;
-				if (numValTasks > max) {
-					return true;
-				}
-				// If the "max were reported" exists, does the number of
-				// messages equal the limit?
-				if ((numExceeded > 0) && (numValTasks == max)) {
-					return true;
-				}
-			}
-		}
-		catch(InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager.setEnabledValidators(" + project.getName() + ", Set, IProgressMonitor)"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-				
-				if(exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-		return false;
-	}
-	
-	public static void initializeMessageLimitProjectMap(IProject project) {
-		if(messageLimitProjectMap == null) 
-			messageLimitProjectMap = new HashMap();
-		if(messageLimitProjectMap.get(project) == null)
-			messageLimitProjectMap.put(project,new Integer(0));
-	}
-	
-	public static void setMessageLimitMessageForProject(IProject project) {
-		initializeMessageLimitMessageProjectMap();
-		messageLimitMessageProjectMap.put(project, Boolean.TRUE);
-	}
-
-	private static void initializeMessageLimitMessageProjectMap() {
-		if(messageLimitMessageProjectMap == null) 
-			messageLimitMessageProjectMap = new HashMap();
-	}
-
-	/**
-	 * This method is for use by batch EJB deploy only. Only in batch mode is an infinitie number of
-	 * messages allowed.
-	 * 
-	 * Enable a project to have an infinite number of messages.
-	 */
-	public void setNoMessageLimit(IProject project) {
-		setMessageLimit(project, WorkbenchReporter.NO_MESSAGE_LIMIT);
-	}
-
-	/**
-	 * This method is for use by batch EJB deploy only. Only in batch mode is an infinitie number of
-	 * messages allowed.
-	 * 
-	 * Return true if the given project is allowed an infinite number of validation messages.
-	 */
-	public boolean isNoMessageLimit(IProject project) {
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			int max = prjp.getMaximumNumberOfMessages();
-			if (max == WorkbenchReporter.NO_MESSAGE_LIMIT) {
-				return true;
-			}
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager.setEnabledValidators(" + project.getName() + ", Set, IProgressMonitor)"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * This method is for use by the validation framework only.
-	 */
-	public void setMessageLimit(IProject project, int limit) {
-		try {
-			if ((limit == WorkbenchReporter.NO_MESSAGE_LIMIT) || (limit >= 0)) {
-				ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-				if (!prjp.doesProjectOverride()) {
-					prjp.setDoesProjectOverride(true);
-				}
-				prjp.setMaximumNumberOfMessages(limit);
-			}
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager.setMessageLimit(" + project.getName() + ", " + limit + ")"); //$NON-NLS-1$  //$NON-NLS-2$ //$NON-NLS-3$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-	}
-
-	/**
-	 * @deprecated This method should be used only by the validation framework. If a validator
-	 *             validates more than one project, then a try-catch block should wrap the
-	 *             validation of each project, and the MessageLimitException should be caught. In
-	 *             the catch(MessageLimitException) block, this method should be called so that the
-	 *             appropriate message can be added to the task list: "validation was terminated
-	 *             because the maximum number of messages was reported"
-	 */
-	public boolean checkMessageLimit(IProject project) {
-		return checkMessageLimit(project, true);
-	}
-
-	/**
-	 * @deprecated This method should be used only by the validation framework.
-	 */
-	public boolean checkMessageLimit(IProject project, Iterator iterator) {
-		return checkMessageLimit(project, false);
-	}
-
-	/**
-	 * This method is intended to be used only by the validation framework. This method should be
-	 * used by the validation operation to add/remove the "exceeded" message. Return true if the
-	 * project is under the limit of messages, false otherwise.
-	 */
-	public boolean checkMessageLimit(IProject project, boolean removeExceededMessage) {
-		if (project == null) {
-			return true;
-		}
-
-		if (!isMessageLimitExceeded(project)) {
-			if (removeExceededMessage) {
-				// If the max was exceeded before, but isn't exceeded now,
-				// remove the "exceeded" message.
-				removeMessageLimitExceeded(project);
-			}
-			return true;
-		}
-
-		// This method is called under two conditions:
-		//    1. The UI's message limit has changed, and some messages may need to be removed. The
-		// "exceeded" message is never removed.
-		//    2. The ValidationOperation has run, and the exceeded message may need to be added or
-		// removed.
-		boolean result = true;
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			int max = prjp.getMaximumNumberOfMessages();
-			IMarker[] markers = getValidationTasksWithoutLimitMessage(project);
-			int numExceededMarkers = markers.length - max; // Excluding the "limit was exceeded"
-			// message, this is the number of extra
-			// markers.
-			if (numExceededMarkers >= 0) { // Will be == max if last time val run, maximum reported.
-				// Remove some markers; these markers are chosen arbitrarily.
-				int index = (max >= 0) ? (max) : 0;
-				IMarker[] removeMarkers = new IMarker[numExceededMarkers];
-				System.arraycopy(markers, index, removeMarkers, 0, numExceededMarkers);
-				try {
-					ResourcesPlugin.getWorkspace().deleteMarkers(removeMarkers);
-				} catch (CoreException exc) {
-					Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setSourceID("ValidatorManager.checkMessageLimit(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-						entry.setTargetException(exc);
-						logger.write(Level.SEVERE, entry);
-					}
-				}
-				result = false;
-
-				if (max > 0) {
-					// If max <= 0, user doesn't want to see anything
-					// If exceeded message doesn't exist, add it.
-					addMessageLimitExceeded(project);
-				}
-			} else if (removeExceededMessage) {
-				removeMessageLimitExceeded(project);
-			}
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager.checkMessageLimit(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-			return true;
-		}
-
-		return result;
-	}
-
-	/**
-	 * @deprecated This method should be used by the validation operation to add/remove the
-	 *             "exceeded" message.
-	 */
-	public boolean checkMessageLimit(IProject project, Iterator iterator, boolean removeExceededMessage) {
-		return checkMessageLimit(project, removeExceededMessage);
-	}
-
-	/**
-	 * This message is for use only by the validation framework. If the "max messages were reported"
-	 * IMarker exists, return it. Otherwise return null.
-	 */
-	private IMarker[] getLimitMessage(IProject project) {
-		IMarker[] exceededMessage = TaskListUtility.getValidationTasks(project, WorkbenchReporter.getUniqueId(getMessageLimitOwner()));
-		if ((exceededMessage != null) && (exceededMessage.length != 0)) {
-			return exceededMessage;
-		}
-
-		return null;
-	}
-
-	/**
-	 * Return true if the given IMarker is a "limit was exceeded" message, false otherwise.
-	 */
-	private boolean isLimitMessage(IMarker marker) {
-		if (marker == null) {
-			return false;
-		}
-
-		return TaskListUtility.isOwner(marker, WorkbenchReporter.getUniqueId(getMessageLimitOwner()));
-	}
-
-	/**
-	 * Return all of the IMarkers on the IProject excluding the "limit was exceeded" message. If
-	 * there are no markers, return null.
-	 */
-	private IMarker[] getValidationTasksWithoutLimitMessage(IProject project) {
-		IMarker[] allTasks = TaskListUtility.getValidationTasks(project, IMessage.ALL_MESSAGES);
-		if ((allTasks == null) || (allTasks.length == 0)) {
-			return null;
-		}
-
-		// Don't check if the limit message exists because
-		// any interaction with markers is costly. Since the
-		// interaction has to be done at least once, make that
-		// single occasion in the for loop below.
-		IMarker[] validatorMessages = new IMarker[allTasks.length];
-		int count = 0; // how many markers have been added to the result array?
-		for (int i = 0; i < allTasks.length; i++) {
-			IMarker marker = allTasks[i];
-			if (isLimitMessage(marker)) {
-				continue;
-			}
-			validatorMessages[count++] = marker;
-		}
-
-		IMarker[] result = new IMarker[count];
-		System.arraycopy(validatorMessages, 0, result, 0, count);
-		return result;
-	}
-
-	/**
-	 * This method should be called only by the validation framework. Return true if the message was
-	 * removed, false if the message didn't exist.
-	 */
-	public boolean removeMessageLimitExceeded(IProject project) {
-		IMarker[] exceededMessage = getLimitMessage(project);
-		if (exceededMessage != null) {
-			try {
-				ResourcesPlugin.getWorkspace().deleteMarkers(exceededMessage);
-				return true;
-			} catch (CoreException exc) {
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidatorManager.removeMessageLimitExceeded(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Return true if the last validation operation terminated due to the maximum number of messages
-	 * having already been reported.
-	 */
-	public boolean wasValidationTerminated(IProject project) {
-		IMarker[] exceededMessage = getLimitMessage(project);
-		return (exceededMessage != null); // Validation was terminated if the message exists.
-	}
-
-	private Class getMessageLimitOwner() {
-		if (_messageLimitOwner == null) {
-			_messageLimitOwner = getClass();
-		}
-		return _messageLimitOwner;
-	}
-
-	/**
-	 * Return true if owner is the name of the class which owns validation framework status
-	 * messages.
-	 * 
-	 * ONLY the validation framework should use this method.
-	 */
-	public boolean isInternalOwner(String owner) {
-		if (owner == null) {
-			return false;
-		}
-
-		for (int i = 0; i < _internalOwners.length; i++) {
-			String internalOwner = _internalOwners[i];
-			if (owner.equals(internalOwner)) {
-				return true;
-			}
-		}
-
-		return false;
-	}
-
-	/**
-	 * Add a class to the list of owners of validation messages. ONLY by the validation framework
-	 * should use this method (it is used for messages owned by framework classes or classes used by
-	 * the TVT plugin.)
-	 */
-	public void addInternalOwner(Class clazz) {
-		if (clazz == null) {
-			return;
-		}
-
-		String[] tempInternalOwners = new String[_internalOwners.length + 1];
-		if (_internalOwners.length > 0) {
-			System.arraycopy(_internalOwners, 0, tempInternalOwners, 0, _internalOwners.length);
-		}
-		tempInternalOwners[_internalOwners.length] = WorkbenchReporter.getUniqueId(clazz);
-
-		_internalOwners = tempInternalOwners;
-	}
-
-
-	/**
-	 * @deprecated This method should be used only by the validation framework.
-	 */
-	public void addMessageLimitExceeded(IProject project, Iterator iterator) {
-		addMessageLimitExceeded(project);
-	}
-
-	/**
-	 * This method should be used only by the validation framework.
-	 */
-	public void addMessageLimitExceeded(IProject project) {
-		// if the message exists already, don't add it again.
-		IMarker[] exceededMessage = getLimitMessage(project);
-		if (exceededMessage == null) {
-			IMessage message = new Message(ValidationPlugin.VALIDATION_PROP_FILE_NAME, IMessage.LOW_SEVERITY, ResourceConstants.VBF_TASK_WARN_MESSAGE_LIMIT_VAL);
-			WorkbenchReporter.addMessage(project, getMessageLimitOwner(), message);
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorSubsetOperation.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorSubsetOperation.java
deleted file mode 100644
index f5aee2d..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorSubsetOperation.java
+++ /dev/null
@@ -1,317 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.wst.validation.internal.FilterUtil;
-import org.eclipse.wst.validation.internal.InternalValidatorManager;
-import org.eclipse.wst.validation.internal.RegistryConstants;
-import org.eclipse.wst.validation.internal.ResourceConstants;
-import org.eclipse.wst.validation.internal.ResourceHandler;
-import org.eclipse.wst.validation.internal.ValidationRegistryReader;
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-
-
-/**
- * Run some validators on a given IProject. Any validators which cannot be loaded or which are not
- * registered against this type of project will be ignored.
- * 
- * This operation is not intended to be subclassed outside of the validation framework.
- */
-public class ValidatorSubsetOperation extends ValidationOperation {
-	protected static final String DEFAULT_DEFAULTEXTENSION = null; // By default, assume that there
-
-	// is no default fallback
-	// extension
-
-	/**
-	 * Create an operation that runs a full validation on the named validators either if validation
-	 * needs to (@see ValidatorSubsetOperation(IProject)) or if <code>force</code> is true.
-	 * 
-	 * IProject must exist and be open.
-	 * 
-	 * If async is true, the validation will run all thread-safe validators in the background
-	 * validation thread, and all other validators in the main thread. If async is false, all
-	 * validators will run in in the main thread.
-	 */
-	public ValidatorSubsetOperation(IProject project, boolean force, boolean async) {
-		this(project, force, RegistryConstants.ATT_RULE_GROUP_DEFAULT, async);
-	}
-
-	/**
-	 * Create an operation that runs a full validation on the named validators using the
-	 * <code>ruleGroup</code> pass. Use this constructor only if you want to run a validator that
-	 * supports the two passes: FAST and FULL.
-	 * 
-	 * If force is true, validation is run whether or not it needs to.
-	 * 
-	 * IProject must exist and be open.
-	 * 
-	 * If async is true, the validation will run all thread-safe validators in the background
-	 * validation thread, and all other validators in the main thread. If async is false, all
-	 * validators will run in in the main thread.
-	 */
-	public ValidatorSubsetOperation(IProject project, IWorkbenchContext aWorkenchContext, boolean force, int ruleGroup, boolean async) {
-		super(project, aWorkenchContext, null, null, ruleGroup, force, async);
-	}
-	
-
-	/**
-	 * Create an operation that runs a full validation on the named validators using the
-	 * <code>ruleGroup</code> pass. Use this constructor only if you want to run a validator that
-	 * supports the two passes: FAST and FULL.
-	 * 
-	 * If force is true, validation is run whether or not it needs to.
-	 * 
-	 * IProject must exist and be open.
-	 * 
-	 * If async is true, the validation will run all thread-safe validators in the background
-	 * validation thread, and all other validators in the main thread. If async is false, all
-	 * validators will run in in the main thread.
-	 */
-	public ValidatorSubsetOperation(IProject project, boolean force, int ruleGroup, boolean async) {
-		super(project, null, null, ruleGroup, force, async);
-	}
-
-	/**
-	 * The fileExtension parameter must be ".X", where X is the extension. Do not type "*.X" or "X"
-	 * (i.e., without the dot). The parameter could also be the file name, e.g. "foo.X".
-	 * 
-	 * This constructor should be used when the invoker wishes to force validation on certain
-	 * resources, without waiting for the user to save their changes.
-	 * 
-	 * An IllegalArgumentException is thrown if there are no validators registered for the
-	 * fileExtension on the given IProject.
-	 * 
-	 * IProject must exist and be open.
-	 * 
-	 * If async is true, the validation will run all thread-safe validators in the background
-	 * validation thread, and all other validators in the main thread. If async is false, all
-	 * validators will run in in the main thread.
-	 */
-	public ValidatorSubsetOperation(IProject project, String fileExtension, Object[] changedResources, boolean async) throws IllegalArgumentException {
-		this(project, fileExtension, DEFAULT_DEFAULTEXTENSION, changedResources, async);
-	}
-
-	/**
-	 * The fileExtension parameter must be ".X", where X is the extension. Do not type "*.X" or "X"
-	 * (i.e., without the dot). The parameter could also be the file name, e.g. "foo.X".
-	 * 
-	 * This constructor should be used when the invoker wishes to force validation on certain
-	 * resources, without waiting for the user to save their changes.
-	 * 
-	 * If there are no validators configured on files named ".X", then use the validators configured
-	 * on validators named ".Y", where defaultExtension identifies the fallback extension to use.
-	 * defaultExtension follows the same syntax as fileExtension.
-	 * 
-	 * An IllegalArgumentException is thrown if there are no validators registered for the
-	 * fileExtension or defaultExtension on the given IProject.
-	 * 
-	 * IProject must exist and be open.
-	 * 
-	 * If async is true, the validation will run all thread-safe validators in the background
-	 * validation thread, and all other validators in the main thread. If async is false, all
-	 * validators will run in in the main thread.
-	 */
-	public ValidatorSubsetOperation(IProject project, String fileExtension, String defaultExtension, Object[] changedResources, boolean async) throws IllegalArgumentException {
-		super(project, shouldForce(changedResources), async);
-
-		boolean filterIn = false; // force the resources to be filtered in even if the validator
-		// doesn't normally take them?
-		ValidatorMetaData[] vmds = InternalValidatorManager.getManager().getValidatorsForExtension(project, fileExtension); // return
-		// a
-		// list
-		// of
-		// validators
-		// which
-		// are
-		// configured
-		// to
-		// run
-		// on
-		// files
-		// with
-		// that
-		// extension.
-		// A
-		// validator
-		// will
-		// be
-		// in
-		// the
-		// list
-		// whether
-		// it
-		// has
-		// been
-		// enabled
-		// or
-		// disabled
-		// by
-		// the
-		// user.
-		if ((defaultExtension != null) && ((vmds == null) || (vmds.length == 0))) {
-			filterIn = true;
-			vmds = InternalValidatorManager.getManager().getValidatorsForExtension(project, defaultExtension);
-		}
-
-		if ((vmds == null) || (vmds.length == 0)) {
-			throw new IllegalArgumentException();
-		}
-
-		setEnabledValidators(InternalValidatorManager.wrapInSet(vmds));
-
-		setFileDeltas(FilterUtil.getFileDeltas(getEnabledValidators(), changedResources, filterIn)); // construct
-		// an
-		// array
-		// of
-		// IFileDelta[]
-		// to
-		// wrap
-		// the
-		// Object[];
-		// one
-		// IFileDelta
-		// for
-		// each
-		// Object
-		// in
-		// the
-		// array
-	}
-
-	/**
-	 * This constructor is provided for the validation async testing, and is not intended to be
-	 * called outside the validation framework.
-	 * 
-	 * Run validation on the changed resources with the given validators. All resources must be from
-	 * the same project; if they're not, an IllegalArgumentException will be thrown. All validators
-	 * must be able to run on the resources' project; if not, an IllegalArgumentException will be
-	 * thrown. If the vmds are either empty or null, an IllegalArgumentExeption will be thrown. If
-	 * the project is closed or doesn't exist then an IllegalArgumentException will be thrown.
-	 * 
-	 * The ifileDeltaType is one of the IFileDelta constants: ADDED, CHANGED, or DELETED.
-	 * 
-	 * IProject must exist and be open.
-	 * 
-	 * If async is true, the validation will run all thread-safe validators in the background
-	 * validation thread, and all other validators in the main thread. If async is false, all
-	 * validators will run in in the main thread.
-	 */
-	public ValidatorSubsetOperation(IProject project, ValidatorMetaData[] vmds, IResource[] changedResources, int ifileDeltaType, boolean force, boolean async) throws IllegalArgumentException {
-		// Have to have the IProject as a parameter because ValidationOperation needs the IProject,
-		// and the super(..)
-		// must be called before anything else in this constructor is called.
-		super(project, force, async);
-
-		if ((vmds == null) || (vmds.length == 0)) {
-			throw new IllegalArgumentException(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_BADVMD));
-		}
-
-		if (!project.isOpen()) {
-			throw new IllegalArgumentException(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_OPENPRJ, new String[]{project.getName()}));
-		}
-		if (!project.exists()) {
-			throw new IllegalArgumentException(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_EXISTPRJ, new String[]{project.getName()}));
-		}
-
-		if ((changedResources != null) && (changedResources.length > 0)) {
-			Set tempSet = new HashSet();
-			for (int i = 0; i < changedResources.length; i++) {
-				IProject p = changedResources[i].getProject();
-				if (!p.isOpen()) {
-					throw new IllegalArgumentException(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_OPENPRJ, new String[]{p.getName()}));
-				}
-				if (!p.exists()) {
-					throw new IllegalArgumentException(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_EXISTPRJ, new String[]{p.getName()}));
-				}
-				tempSet.add(project);
-			}
-
-			if (!tempSet.contains(project)) {
-				throw new IllegalArgumentException(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_BADPRJ, new String[]{project.getName()}));
-			}
-			if (tempSet.size() != 1) {
-				StringBuffer buffer = new StringBuffer("\n"); //$NON-NLS-1$
-				Iterator iterator = tempSet.iterator();
-				while (iterator.hasNext()) {
-					IProject p = (IProject) iterator.next();
-					buffer.append("\t"); //$NON-NLS-1$
-					buffer.append(p.getName());
-					if (iterator.hasNext()) {
-						buffer.append(", "); //$NON-NLS-1$
-					}
-				}
-				throw new IllegalArgumentException(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_MULTIPRJ, new String[]{buffer.toString()}));
-			}
-		}
-
-		for (int i = 0; i < vmds.length; i++) {
-			ValidatorMetaData vmd = vmds[i];
-			if (!ValidationRegistryReader.getReader().isConfiguredOnProject(vmd, project)) {
-				throw new IllegalArgumentException(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_BADVAL, new String[]{vmd.getValidatorDisplayName(), project.getName()}));
-			}
-		}
-
-		setEnabledValidators(InternalValidatorManager.wrapInSet(vmds));
-		setFileDeltas(FilterUtil.getFileDeltas(getEnabledValidators(), changedResources, ifileDeltaType)); // construct
-		// an
-		// array
-		// of
-		// IFileDelta[]
-		// to
-		// wrap
-		// the
-		// IResource[];
-		// one
-		// IFileDelta
-		// for
-		// each
-		// IResource
-		// in
-		// the
-		// array
-	}
-
-	/**
-	 * Given an array of fully-qualified class names of validators, create the list of validators to
-	 * be run. The array is not checked for duplicates or for invalid validators (i.e., a validator
-	 * of that class type is not loaded, or the validator is loaded but cannot run against this type
-	 * of IProject.)
-	 */
-	public void setValidators(String[] validatorNames) throws IllegalArgumentException {
-		Set enabled = new HashSet();
-		for (int i = 0; i < validatorNames.length; i++) {
-			ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validatorNames[i]);
-			if (vmd == null) {
-				// No validator, with that plugin id, can be run on that project.
-				// Either the validator isn't installed, or the IProject passed in
-				// doesn't have the necessary nature.
-				throw new IllegalArgumentException(validatorNames[i]);
-			}
-			enabled.add(vmd);
-		}
-		setEnabledValidators(enabled);
-	}
-
-	/**
-	 * @deprecated Will be removed in Milestone 3. Use setForce(boolean)
-	 */
-	public void setAlwaysRun(boolean force) {
-		setForce(force);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchContext.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchContext.java
deleted file mode 100644
index 58b281f..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchContext.java
+++ /dev/null
@@ -1,790 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.RegistryConstants;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-import org.eclipse.wst.validation.internal.provisional.core.IMessage;
-
-/**
- * Abstract base class for registration of symbolic model names, and also provides the mechanism for
- * registering the load model method which loads a specific type of MOF model, as identified by the
- * symbolic model name.
- */
-public class WorkbenchContext implements IWorkbenchContext {
-	private IProject _project = null;
-	private Hashtable _modelRegistry = null;
-//	private static final IContainer[] NO_CONTAINERS = new IContainer[0];
-	private int _ruleGroup = RegistryConstants.ATT_RULE_GROUP_DEFAULT;
-	public List validationFileURIs = null; 
-	public static final String GET_PROJECT_FILES = "getAllFiles"; //$NON-NLS-1$
-	public static final String GET_FILE = "getFile"; //$NON-NLS-1$
-//	private static final IContainer[] NO_CONTAINERS = new IContainer[0];
-	public static final String VALIDATION_MARKER = "com.ibm.etools.validation.problemmarker"; //$NON-NLS-1$
-	public static final String VALIDATION_MARKER_OWNER = "owner";  //$NON-NLS-1$
-
-	public WorkbenchContext() {
-		super();
-		_modelRegistry = new Hashtable();
-
-		registerModel(IRuleGroup.PASS_LEVEL, "loadRuleGroup"); //$NON-NLS-1$
-		
-		//the following will register the helper's symbolic methods
-	    Class [] args = new Class[1] ;
-	    args[0] = String.class ;  // a string argument denoting a specific JSP.
-		registerModel(GET_FILE, "getFile", args);//$NON-NLS-1$
-		registerModel(GET_PROJECT_FILES, "getFiles", args);//$NON-NLS-1$
-	}
-
-	/**
-	 * When the validation is complete, this method will be called so that the IWorkbenchContext can
-	 * clean up any resources it allocated during the validation.
-	 * 
-	 * If the cleanup is a long-running operation, subtask messages should be sent to the IReporter.
-	 */
-	public void cleanup(WorkbenchReporter reporter) {
-		// Default: nothing to clean up
-	}
-
-	/**
-	 * When the IProject is closing, perform any cleanup that needs to be done. When this method is
-	 * called, if the helper has cached any resources from the IProject, it should release those
-	 * resources. If you do not allocate resources in your helper, then this method should be a
-	 * no-op.
-	 */
-	public void closing() {
-		closing(getProject());
-	}
-
-	/**
-	 * When the IProject is closing, perform any cleanup that needs to be done. When this method is
-	 * called, if the helper has cached any resources from the IProject, it should release those
-	 * resources. If you do not allocate resources in your helper, then this method should be a
-	 * no-op.
-	 * 
-	 * @deprecated Override closing() instead, and use getProject()
-	 */
-	public void closing(IProject project) {
-		//do nothing
-	}
-
-	/**
-	 * When the IProject is being deleted, perform any cleanup that needs to be done. When this
-	 * method is called, if the helper has cached any resources from the IProject, it should release
-	 * those resources. If you do not allocate resources in your helper, then this method should be
-	 * a no-op.
-	 */
-	public void deleting() {
-		deleting(getProject());
-	}
-
-	/**
-	 * When the IProject is being deleted, perform any cleanup that needs to be done. When this
-	 * method is called, if the helper has cached any resources from the IProject, it should release
-	 * those resources. If you do not allocate resources in your helper, then this method should be
-	 * a no-op.
-	 * 
-	 * @deprecated Override deleting() instead, and use getProject()
-	 */
-	public void deleting(IProject project) {
-		//do nothing
-	}
-
-	/**
-	 * Returns the IPath of a resource, relative to the container. If the IResource is not a member
-	 * of the container, return null. This method should be useful for implementors of this class;
-	 * specifically, in their getPortableName method.
-	 */
-	public static String getContainerRelativePath(String fullPath, IContainer container) {
-		if ((fullPath == null) || (container == null))
-			return null;
-		IPath relPath = getContainerRelativePath(new Path(fullPath), container);
-		if (relPath != null)
-			return relPath.toString();
-		return null;
-	}
-
-	/**
-	 * Returns the IPath of a resource, relative to the container. If the IResource is not a member
-	 * of the container, return null. This method should be useful for implementors of this class;
-	 * specifically, in their getPortableName method.
-	 */
-	public static IPath getContainerRelativePath(IResource resource, IContainer container) {
-		if ((resource == null) || (container == null)) {
-			return null;
-		}
-
-		IResource foundResource = null;
-		IPath relPath = getContainerRelativePath(resource.getFullPath(), container);
-		if (relPath != null) {
-			// if relPath is null, the resource is not a direct member of the container
-			try {
-				if (!resource.exists()) { // findMember won't work
-					if (resource instanceof IFile) {
-						foundResource = container.getFile(relPath);
-					} else if (resource instanceof IFolder) {
-						foundResource = container.getFolder(relPath);
-					}
-				} else {
-					foundResource = container.findMember(relPath, true); // true means include
-					// phantom resources
-					if ((foundResource != null) && !foundResource.exists()) {
-						foundResource = null;
-					}
-				}
-			} catch (IllegalArgumentException exc) {
-				foundResource = null;
-
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("WorkbenchContext::getContainerRelativePath(IResource, IContainer)"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-
-		if (foundResource == null) {
-			return null;
-		}
-
-		// file has been found
-		int matchingFirstSegments = container.getProjectRelativePath().matchingFirstSegments(resource.getProjectRelativePath());
-		return resource.getProjectRelativePath().removeFirstSegments(matchingFirstSegments);
-	}
-
-	/**
-	 * Given an IPath, if the IPath is absolute, and is a part of the IContainer, return an IPath
-	 * which is relative to the container. If the IPath is not part of the IContainer, return null.
-	 */
-	public static IPath getContainerRelativePath(IPath path, IContainer container) {
-		if ((path == null) || (container == null)) {
-			return null;
-		}
-
-		if (path.isAbsolute()) {
-			// Is the path part of the IContainer?
-			int matchingFirstSegments = path.matchingFirstSegments(container.getFullPath());
-			if ((matchingFirstSegments > 0) && (matchingFirstSegments == container.getFullPath().segmentCount())) {
-				// part of the IContainer
-				return path.removeFirstSegments(matchingFirstSegments);
-			}
-			// not part of the IContainer
-			return null;
-		}
-		// path is relative
-		// Is the path part of the IContainer?
-		//TODO don't have time to implement this now, but should in future. - Ruth
-		return null;
-	}
-
-	/**
-	 * Given an IMessage's target object, return a string which identifies the object, so that the
-	 * user can locate it.
-	 */
-	public String getDescription(Object object) {
-		if (object == null) {
-			return ""; //$NON-NLS-1$
-		}
-
-		if (object instanceof WorkbenchFileDelta) {
-			WorkbenchFileDelta wfd = (WorkbenchFileDelta) object;
-			if (wfd.getResource() != null) {
-				// resource will be null if WorkbenchFileDelta was constructed from an Object
-				// instead of an IResource
-				return wfd.getResource().getFullPath().toString();
-			}
-		}
-
-		return object.toString();
-	}
-
-	/**
-	 * Given an Object, if the object has a corresponding IFile in the workbench, return the IFile.
-	 * Otherwise return null.
-	 * 
-	 * This method is used by the WorkbenchReporter. In eclipse, in order to add or remove a task
-	 * list entry, the IResource, to which the entry applies, must be identified. The IReporter
-	 * interface passes in an Object in these methods:
-	 * 
-	 * addValidationMessage(IValidator, IMessage) // Object is a part of IMessage
-	 * 
-	 * removeAllMessages(IValidator, Object),
-	 * 
-	 * Thus, the WorkbenchReporter needs to know how, given the Object, which IFile that the Object
-	 * represents in the workbench, in order to be able to add the task list entry.
-	 * 
-	 * If this method returns null, then the WorkbenchReporter will add the message to the IProject
-	 * instead of an IFile.
-	 *  
-	 */
-	public IFile getFile(Object obj) {
-		return null;
-	}
-
-	public IResource getResource(Object obj) {
-		if (obj == null) {
-			return null;
-		}
-
-		IResource res = null;
-		if (obj instanceof WorkbenchFileDelta) {
-			// resource may be null if WorkbenchFileDelta was constructed from an Object instead of
-			// an IResource
-			res = ((WorkbenchFileDelta) obj).getResource();
-		} else if (obj instanceof IResource) {
-			res = (IResource) obj;
-		}
-
-		if ((res == null) || (!res.exists())) {
-			return getFile(obj);
-		}
-
-		return res;
-	}
-
-	/**
-	 * If the IProject is associated with an EJBNatureRuntime, return the IJavaProject which
-	 * represents it.
-	 */
-//	public static IJavaProject getJavaProject(IProject project) {
-//		if (project == null) {
-//			return null;
-//		}
-//		return JavaCore.create(project);
-//	}
-
-	/**
-	 * Given an IMessage's target object, return the line number, of the IFile, which the target
-	 * object represents. If the object is null, or if access to line numbers is not possible,
-	 * return "0".
-	 */
-	public int getLineNo(Object object) {
-		IResourceUtil util = ValidatorManager.getResourceUtil();
-		if (util == null) {
-			return IMessage.LINENO_UNSET;
-		}
-		try {
-			return util.getLineNo(object);
-		} catch (Throwable exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchContext.getLineNo(Object)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-			return IMessage.LINENO_UNSET;
-		}
-
-	}
-	
-	/**
-	 * Given an IMessage's target object, return the line number, of the IFile, which the target
-	 * object represents, if possible. If the object is null, or if access to line numbers is not
-	 * possible, return a text description of the location.
-	 * 
-	 * This method will be called whether or not the IResource is an IFile, IFolder, or IProject.
-	 * Line numbers are valid only for IFile types; if the resource is not an IFile, then a text
-	 * description of the location must be returned.
-	 */
-	public String getLocation(Object object) {
-		IResource res = getResource(object);
-		if ((res == null) || !(res instanceof IFile))
-			// return a text description
-			return getDescription(object);
-		// default to a line number, if it's available. Else, use a text description.
-		int lineNumber = getLineNo(object);
-		if (lineNumber == IMessage.LINENO_UNSET) {
-			return getDescription(object);
-		}
-		// return the line number
-		return String.valueOf(lineNumber);
-	}
-
-	/**
-	 * Given a name of a load method, and the types of parameters it takes (this method is always
-	 * called with null as the second parameter), return the java.lang.reflect.Method which
-	 * represents the load method.
-	 */
-	private final Method getMethod(String methodName, Class[] parmTypes) {
-		Method m = null;
-		try {
-			m = getClass().getMethod(methodName, parmTypes);
-		} catch (NoSuchMethodException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchContext::getMethod(String, Class[])"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-			return null;
-		}
-
-		return m;
-	}
-
-	/**
-	 * @see IWorkbenchContext.getPortableName(IResource)
-	 */
-	public String getPortableName(IResource resource) {
-		return resource.getFullPath().toString();
-	}
-
-	/**
-	 * Return the IProject which is about to be validated. Each IWorkbenchContext knows how to
-	 * traverse a certain type of IProject, for example, an EJB project or a web project.
-	 */
-	public final IProject getProject() {
-		return _project;
-	}
-	
-	  /**
-	   * Get the IFile for the given filename.
-	   * 
-	   * @param filename The name of the file to retrieve.
-	   * @return An IFile representing the file specified or null if it can't be resolved.
-	   */
-	  public IFile getFile(String filename)
-	  {
-	    //    System.out.println("file name = " + filename);
-	    IResource res = getProject().findMember(filename, true); // true means include phantom resources
-	    if (res instanceof IFile) 
-	    {
-	      return (IFile) res;
-	    }
-	    return null;
-	  }
-	  
-	  /**
-	   * Get the collection of files from the project that are relevant for the
-	   * validator with the given class name.
-	   * 
-	   * @param validatorClassName The name of the validator class.
-	   * @return The collection of files relevant for the validator class specified.
-	   */
-	  public Collection getFiles(String validatorClassName)
-	  {
-	    IProject project = getProject();
-	    List files = new ArrayList();
-	    getFiles(files, project, validatorClassName);
-	    return files;
-	  }
-
-	  /**
-	   * Get the collection of files from the project that are relevant for the
-	   * validator with the given class name.
-	   * 
-	   * @param files The files relevant for the class name.
-	   * @param resource The resource to look for files in.
-	   * @param validatorClassName The name of the validator class.
-	   */
-	  protected void getFiles(Collection files, IContainer resource, String validatorClassName)
-	  {
-	    try
-	    {
-	      IResource [] resourceArray = resource.members(false);
-	      for (int i=0; i<resourceArray.length; i++)
-	      {       
-	        if (ValidatorManager.getManager().isApplicableTo(validatorClassName, resourceArray[i])) 
-	        {
-	          if (resourceArray[i] instanceof IFile) 
-				  files.add(resourceArray[i]);
-	        }
-	        if (resourceArray[i].getType() == IResource.FOLDER)
-	         getFiles(files,(IContainer)resourceArray[i], validatorClassName) ;
-	      }
-	    }
-	    catch (Exception e) {}
-	  }
-	  
-
-//	/**
-//	 * Return the folders (or project) which contain the .java source files.
-//	 */
-//	public static IContainer[] getProjectSourceContainers(IProject project) {
-//		if (project == null) {
-//			return NO_CONTAINERS;
-//		}
-//
-//		IJavaProject jp = getJavaProject(project);
-//		if (jp == null) {
-//			return NO_CONTAINERS;
-//		}
-//
-//		return getProjectSourceContainers(jp);
-//	}
-
-	/**
-	 * Return the folders (or project) which contain the .java source files.
-	 */
-//	public static IContainer[] getProjectSourceContainers(IJavaProject javaProject) {
-//		if (javaProject == null) {
-//			return NO_CONTAINERS;
-//		}
-//		IProject project = javaProject.getProject();
-//
-//		IClasspathEntry[] classpath = null;
-//		try {
-//			classpath = javaProject.getResolvedClasspath(true); // true means ignore unresolved
-//			// (missing) variables, instead of
-//			// throwing an exception
-//		} catch (JavaModelException exc) {
-//			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-//			if (logger.isLoggingLevel(Level.SEVERE)) {
-//				LogEntry entry = ValidationPlugin.getLogEntry();
-//				entry.setSourceID("WorkbenchContext::getProjectSourceContainers(IJavaProject)"); //$NON-NLS-1$
-//				entry.setTargetException(exc);
-//				logger.write(Level.SEVERE, entry);
-//			}
-//			return NO_CONTAINERS;
-//		}
-//
-//		if (classpath == null) {
-//			return NO_CONTAINERS;
-//		}
-//
-//		// Traverse the classpath, and calculate a list of just the
-//		// IFolders and IProjects (i.e., IContainers) which contain source
-//		IContainer[] icontainers = new IContainer[classpath.length];
-//		int validCount = 0;
-//		for (int i = 0; i < classpath.length; i++) {
-//			IClasspathEntry entry = classpath[i];
-//			if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
-//				IPath entryPath = entry.getPath();
-//				IPath relEntryPath = getContainerRelativePath(entryPath, project);
-//				if (relEntryPath == null) {
-//					// classpath entry refers to something which doesn't exist
-//					continue;
-//				}
-//
-//				IResource outputResource = project.findMember(relEntryPath);
-//				if (outputResource == null) {
-//					// classpath entry refers to something which doesn't exist
-//					continue;
-//				}
-//
-//				if (outputResource instanceof IContainer) {
-//					icontainers[validCount++] = (IContainer) outputResource;
-//				}
-//			}
-//		}
-//
-//		//  following line causes a ClassCastException, so construct an array of IContainers
-//		// explicitly
-//		//	return (IContainer[])icontainers.toArray();
-//		IContainer[] containers = new IContainer[validCount];
-//		System.arraycopy(icontainers, 0, containers, 0, validCount);
-//		return containers;
-//	}
-
-	public int getRuleGroup() {
-		return _ruleGroup;
-	}
-
-	/**
-	 * This method can be overriden by AWorkbenchHelpers, if they wish to perform some
-	 * initialization once the IProject is set. Default is to do nothing.
-	 * 
-	 * For example, if this IWorkbenchContext delegates to another IWorkbenchContext, then that
-	 * IWorkbenchContext's setProject() method should be called here.
-	 */
-	public void initialize() {
-		//do nothing
-	}
-
-	/**
-	 * Return true if the given resource is in an IJavaProject, and if it is in one of the source
-	 * folders in the IJavaProject. If the project's source folder happens to be the project's
-	 * output folder too, this method will return true. If res is null, or is not found in one of
-	 * the source containers, this method will return false.
-	 */
-//	public boolean isInJavaSourcePath(IResource res) {
-//		if (res == null) {
-//			return false;
-//		}
-//
-//		IContainer[] containers = getProjectSourceContainers(res.getProject());
-//		for (int c = 0; c < containers.length; c++) {
-//			IPath resourcePath = getContainerRelativePath(res, containers[c]);
-//			if (resourcePath != null) {
-//				// file has been found
-//				return true;
-//			}
-//		}
-//
-//		return false;
-//	}
-
-	/**
-	 * Return true if the given symbolic name is registered, and can be loaded by WorkbenchContext's
-	 * "loadModel" method. For further information, see the comment above WorkbenchContext's
-	 * "registerModel" method.
-	 */
-	public final boolean isRegistered(String symbolicName) {
-		if (symbolicName == null) {
-			return false;
-		}
-		return _modelRegistry.containsKey(symbolicName);
-	}
-
-	/**
-	 * Given a symbolic name, load the MOF model which is identified by that name.
-	 * 
-	 * For support of dynamic symbolic names, such as file names, read the comment above the
-	 * registerModel method.
-	 * 
-	 * @see registerModel
-	 */
-	public Object loadModel(String symbolicName) {
-		return loadModel(symbolicName, null);
-	}
-
-	/**
-	 * Given a symbolic name, load the MOF model which is identified by that name.
-	 * 
-	 * For support of dynamic symbolic names, such as file names, read the comment above the
-	 * registerModel method.
-	 * 
-	 * @see registerModel
-	 */
-	public Object loadModel(String symbolicName, Object[] parms) {
-		try {
-			Method loader = (Method) _modelRegistry.get(symbolicName);
-			if (loader == null) {
-				return null;
-			}
-
-			return loader.invoke(this, parms);
-		} catch (IllegalAccessException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchContext::loadModel(String, Object[])"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-			return null;
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchContext::loadModel(String, Object[])"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc.getTargetException());
-					logger.write(Level.SEVERE, exc);
-				}
-			}
-			return null;
-		} catch (NullPointerException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchContext::loadModel(String, Object[])"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-			return null;
-		} catch (ExceptionInInitializerError exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchContext::loadModel(String, Object[])"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-			return null;
-		}
-	}
-
-	public Object loadRuleGroup() {
-		return new Integer(getRuleGroup()); // have to wrap the int in an Integer because can't cast
-		// an int to an Object
-	}
-
-	/**
-	 * This method should be used only by the validation framework. This method will be called by
-	 * ValidationOperation, before the IValidator's validate method is called, to set the group of
-	 * rules which the IValidator should check.
-	 */
-	public void setRuleGroup(int rg) {
-		_ruleGroup = rg;
-	}
-
-	/**
-	 * Register a load method for a symbolic name. A load method is defined as a method which takes
-	 * no parameters and returns a RefObject.
-	 * 
-	 * Every subclass of WorkbenchContext, for every static type of symbolic name which it supports,
-	 * should call registerModel. For IWorkbenchHelpers which support dynamic symbolic names, such
-	 * as file names, each IWorkbenchContext should override the "loadModel" method. Their
-	 * "loadModel" should first call this class' "isRegistered" method to see if they're dealing
-	 * with a static symbolic name, or a dynamic one. If the symbolic name is registered, the
-	 * child's "loadModel" method should just return the result of WorkbenchContext's "loadModel"
-	 * method. Otherwise, it should return the result based on its own processing.
-	 * 
-	 * When this method is called, the load method identified by loadMethodName is located & stored
-	 * for future retrieval by the "loadModel" method. When the IValidator calls "loadModel" with a
-	 * symbolic name, the java.lang.reflect.Method which was loaded by this method is invoked, and
-	 * the result (RefObject) returned by that method is returned by "loadModel".
-	 * 
-	 * symbolicName must not be null or the empty string. loadMethodName must not be null or the
-	 * empty string.
-	 */
-	protected final void registerModel(String symbolicName, String loadMethodName) {
-		registerModel(symbolicName, loadMethodName, null);
-	}
-
-	/**
-	 * Register a load method for a symbolic name. A load method is defined as a method which takes
-	 * no parameters and returns a RefObject.
-	 * 
-	 * Every subclass of WorkbenchContext, for every static type of symbolic name which it supports,
-	 * should call registerModel. For IWorkbenchHelpers which support dynamic symbolic names, such
-	 * as file names, each IWorkbenchContext should override the "loadModel" method. Their
-	 * "loadModel" should first call this class' "isRegistered" method to see if they're dealing
-	 * with a static symbolic name, or a dynamic one. If the symbolic name is registered, the
-	 * child's "loadModel" method should just return the result of WorkbenchContext's "loadModel"
-	 * method. Otherwise, it should return the result based on its own processing.
-	 * 
-	 * When this method is called, the load method identified by loadMethodName is located & stored
-	 * for future retrieval by the "loadModel" method. When the IValidator calls "loadModel" with a
-	 * symbolic name, the java.lang.reflect.Method which was loaded by this method is invoked, and
-	 * the result (RefObject) returned by that method is returned by "loadModel".
-	 * 
-	 * symbolicName must not be null or the empty string. loadMethodName must not be null or the
-	 * empty string.
-	 */
-	protected final void registerModel(String symbolicName, String loadMethodName, Class[] parms) {
-		Method method = getMethod(loadMethodName, parms);
-		if (method == null) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				StringBuffer buffer = new StringBuffer("Load method "); //$NON-NLS-1$
-				buffer.append(loadMethodName);
-				buffer.append("("); //$NON-NLS-1$
-				for (int i = 0; (parms != null) && (i < parms.length); i++) {
-					buffer.append(parms[i]);
-				}
-				buffer.append(") must exist. " + getClass().getName() + " cannot support model " + symbolicName); //$NON-NLS-1$ //$NON-NLS-2$
-
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.readExtension(IExtension)"); //$NON-NLS-1$
-				entry.setText(buffer.toString());
-				logger.write(Level.FINE, entry);
-			}
-		} else {
-			_modelRegistry.put(symbolicName, method);
-		}
-	}
-
-	/**
-	 * Whether full or incremental validation is running, this method will be called, for every
-	 * IResource which is filtered in by the IValidator, so that the IValidationContext can receive
-	 * notification that one of the resources, which validation will run on, is being filtered in.
-	 */
-	public void registerResource(IResource resource) {
-		// default: do nothing
-	}
-
-	/**
-	 * This method is called by the Validation Framework, to initialize the IWorkbenchContext so that
-	 * it can gather information from the current project.
-	 * 
-	 * If an IWorkbenchContext delegates some model loading to another IWorkbenchContext, this method
-	 * should be overriden so that the delegatee IWorkbenchContext is initialized with the IProject.
-	 */
-	public final void setProject(IProject project) {
-		_project = project;
-
-		if (project != null) {
-			// Project will be set back to null once the validation of the project is complete.
-			initialize();
-		}
-	}
-
-	/**
-	 * Notifies this IWorkbenchContext that the Validation Framework is shutting down. There will be
-	 * calls to closing(IProject) and possibly deleting(IProject) following this call, but the
-	 * resources may already be closed by the time that those methods are called, so EVERYTHING
-	 * should be cleaned up in this method. The parameter passed in is the project which is about to
-	 * shut down. This method will be called once for every IProject in the workbench. The IProject
-	 * may, or may not, be closed.
-	 */
-	public void shutdown() {
-		// Default is to assume that no resources were allocated; therefore,
-		// no cleanup needs to be done.
-		shutdown(getProject());
-	}
-
-	/**
-	 * Notifies this IWorkbenchContext that the Validation Framework is shutting down. There will be
-	 * calls to closing(IProject) and possibly deleting(IProject) following this call, but the
-	 * resources may already be closed by the time that those methods are called, so EVERYTHING
-	 * should be cleaned up in this method. The parameter passed in is the project which is about to
-	 * shut down. This method will be called once for every IProject in the workbench. The IProject
-	 * may, or may not, be closed.
-	 * 
-	 * @deprecated Override shutdown() instead, and use getProject()
-	 */
-	public void shutdown(IProject project) {
-		// Default is to assume that no resources were allocated; therefore,
-		// no cleanup needs to be done.
-	}
-
-	public String getTargetObjectName(Object object) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	public String[] getURIs() {
-		String[] uris = new String[validationFileURIs.size()];
-		for(int i = 0; i < validationFileURIs.size(); i++) 
-			uris[i] = (String) validationFileURIs.get(i);
-		return uris;
-	}
-
-	/**
-	 * @return Returns the validationFileURIs.
-	 */
-	public List getValidationFileURIs() {
-		return validationFileURIs;
-	}
-
-	/**
-	 * @param validationFileURIs The validationFileURIs to set.
-	 */
-	public void setValidationFileURIs(List validationFileURIs) {
-		this.validationFileURIs = validationFileURIs;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchFileDelta.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchFileDelta.java
deleted file mode 100644
index 2871aff..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchFileDelta.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.wst.validation.internal.core.FileDelta;
-import org.eclipse.wst.validation.internal.core.IFileDelta;
-
-
-/**
- * Eclipse-specific implementation of FileDelta which also caches the IResource which is associated
- * with the FileDelta.
- */
-public class WorkbenchFileDelta extends FileDelta {
-	private IResource _resource = null;
-	private Object _changedResource = null;
-
-	private static final String FILE_NAME = "FILE NAME:"; //$NON-NLS-1$
-	private static final String DELTA = "  DELTA: "; //$NON-NLS-1$
-	private static final String RESOURCE = "  RESOURCE: "; //$NON-NLS-1$
-	private static final String OBJECT = "  OBJECT: "; //$NON-NLS-1$
-
-	public WorkbenchFileDelta(String aFileName, int aFileDelta, IResource resource) {
-		super(aFileName, aFileDelta);
-		setResource(resource);
-		setObject(resource);
-	}
-
-	public WorkbenchFileDelta(Object changedResource) {
-		super(null, IFileDelta.CHANGED);
-		setObject(changedResource);
-	}
-
-	public IResource getResource() {
-		return _resource;
-	}
-
-	public void setResource(IResource resource) {
-		_resource = resource;
-	}
-
-	/**
-	 * If the changed resource is not an IResource (e.g., a RefObject), then the getFileName method
-	 * will return null, getResource will return null, and this method will return the object. If
-	 * the changedResource is an IResource, then both this method and the getResource method will
-	 * return the resource.
-	 */
-	public Object getObject() {
-		return _changedResource;
-	}
-
-	/**
-	 * @see getObject()
-	 */
-	public void setObject(Object o) {
-		_changedResource = o;
-	}
-
-	public String toString() {
-		StringBuffer buffer = new StringBuffer(FILE_NAME);
-		buffer.append(String.valueOf(getFileName()));
-		buffer.append(DELTA);
-		buffer.append(getDeltaType());
-		buffer.append(RESOURCE);
-		buffer.append(String.valueOf(getResource()));
-		buffer.append(OBJECT);
-		buffer.append(String.valueOf(getObject()));
-		return buffer.toString();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchReporter.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchReporter.java
deleted file mode 100644
index 75007c8..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchReporter.java
+++ /dev/null
@@ -1,733 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.operations;
-
-import java.text.MessageFormat;
-import java.util.List;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.ResourceConstants;
-import org.eclipse.wst.validation.internal.TaskListUtility;
-import org.eclipse.wst.validation.internal.ValidationRegistryReader;
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-import org.eclipse.wst.validation.internal.provisional.core.IMessage;
-import org.eclipse.wst.validation.internal.provisional.core.IReporter;
-import org.eclipse.wst.validation.internal.provisional.core.IValidator;
-import org.eclipse.wst.validation.internal.provisional.core.MessageLimitException;
-import org.eclipse.wst.validation.internal.ResourceHandler;
-
-/**
- * IValidator instances will interact with an instance of this class, but should never cast that
- * IReporter instance to WorkbenchReporter. The WorkbenchReporter class will be moved in Milestone
- * 4.
- * 
- * This class handles interaction between the user and the IValidator in the eclipse workbench
- * environment.
- * 
- * This class must not be called outside of an IWorkspaceRunnable or IRunnableWithProgress. Many
- * resource deltas can be generated by the methods in this class.
- * 
- * Only the validation framework may instantiate or alter instances of this class.
- */
-
-public final class WorkbenchReporter implements IReporter {
-	public static final String DEFAULT_LOCATION = ""; //$NON-NLS-1$
-	public static final int NO_MESSAGE_LIMIT = -1;
-
-	private IProject _project = null;
-	private IProgressMonitor _monitor = null;
-
-	public static void addMessage(IResource resource, Class messageOwner, IMessage message) {
-		addMessage(resource, messageOwner, null, message); // null ClassLoader = use the default
-		// (clazz.getClassLoader());
-	}
-	
-	public static void addMessage(IResource resource, Class messageOwner, ClassLoader cl, IMessage message) {
-		addMessage(resource, messageOwner, cl, message, null, ""); //$NON-NLS-1$
-	}
-	
-	public static void addMessage(IResource resource, Class clazz, IMessage message, String targetObjectName, String location) {
-		addMessage(resource, clazz, null, message, targetObjectName, location); // null = use the
-		// default
-		// ClassLoader
-		// (class.getClassLoader())
-	}
-	
-	public static void addMessage(IResource resource, Class clazz, IMessage message, String targetObjectName, String location,String markerId) {
-		addMessage(resource, clazz, null, message, targetObjectName, location,markerId); // null = use the
-		// default
-		// ClassLoader
-		// (class.getClassLoader())
-	}
-	
-	
-
-	public static void addMessage(IResource resource, Class clazz, ClassLoader cl, IMessage message, String targetObjectName, String location) {
-		if ((clazz == null) || (message == null) || (resource == null)) {
-			return;
-		}
-
-		if (cl == null) {
-			cl = clazz.getClassLoader();
-		}
-
-		addMessage(resource, getUniqueId(clazz), cl, message, targetObjectName, location);
-	}
-	
-	public static void addMessage(IResource resource, Class clazz, ClassLoader cl, IMessage message, String targetObjectName, String location, String markerId) {
-		if ((clazz == null) || (message == null) || (resource == null)) {
-			return;
-		}
-
-		if (cl == null) {
-			cl = clazz.getClassLoader();
-		}
-
-		addMessage(resource, getUniqueId(clazz), cl, message, targetObjectName, location, markerId);
-	}
-
-	public static void addMessage(IResource resource, String messageOwnerId, ClassLoader cl, IMessage message) {
-		addMessage(resource, messageOwnerId, cl, message, null, ""); //$NON-NLS-1$
-	}
-
-	public static void addMessage(IResource resource, String messageOwnerId, ClassLoader cl, IMessage message, String targetObjectName, String location) {
-		int severity = message.getSeverity();
-		try {
-			TaskListUtility.addTask(messageOwnerId, resource, location, message.getId(), message.getText(cl), severity,targetObjectName, message.getGroupName(), message.getOffset(), message.getLength());
-		} catch (CoreException exc) {
-			// Couldn't add the task to the task list for some reason...
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter.addMessage(Class,, IResource, IMessage, String, String"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-	}
-	
-	public static void addMessage(IResource resource, String messageOwnerId, ClassLoader cl, IMessage message, String targetObjectName, String location, String markerId) {
-		int severity = message.getSeverity();
-		try {
-			TaskListUtility.addTask(messageOwnerId, resource, location, message.getId(), message.getText(cl), severity,markerId,targetObjectName, message.getGroupName(), message.getOffset(), message.getLength());
-			increaseMessageCountForProject(resource.getProject());;
-		} catch (CoreException exc) {
-			// Couldn't add the task to the task list for some reason...
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter.addMessage(Class,, IResource, IMessage, String, String"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-	}
-	
-	private static void increaseMessageCountForProject(IProject project) {
-		ValidatorManager.initializeMessageLimitProjectMap(project);
-		Object integer = ValidatorManager.messageLimitProjectMap.get(project);
-		int newVal = ((Integer) integer).intValue() + 1;
-		ValidatorManager.messageLimitProjectMap.put(project,new Integer(newVal));
-	}
-
-	public static void removeAllMessages(IResource resource, IValidator validator) {
-		if (resource == null) {
-			return;
-		}
-
-		ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validator);
-		if (vmd == null) {
-			// log
-			return;
-		}
-
-		String[] validatorNames = vmd.getValidatorNames();
-		try {
-			TaskListUtility.removeAllTasks(resource, validatorNames);
-		} catch (CoreException exc) {
-			// Couldn't remove the task from the task list for some reason...
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter.removeAllMessages(String[], IResource, String)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-	}
-
-	/**
-	 * @deprecated Will be removed in Milestone 3. Should not be called outside of the validation
-	 *             framework.
-	 */
-	public static void removeAllMessages(IResource resource, IValidator validator, Object object) {
-		if (resource == null) {
-			return;
-		}
-
-		ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validator);
-		if (vmd == null) {
-			// log
-			return;
-		}
-
-		String[] validatorNames = vmd.getValidatorNames();
-		try {
-			String targetObjectName = getTargetObjectName(vmd.getHelper(resource.getProject()), object);
-			removeAllMessages(resource, validatorNames, targetObjectName);
-		} catch (InstantiationException exc) {
-			// Remove the vmd from the reader's list
-			ValidationRegistryReader.getReader().disableValidator(vmd);
-
-			// Log the reason for the disabled validator
-			final Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter::removeAllMessages(IResource, IValidator, Object)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-	}
-
-	public static void removeAllMessages(IResource resource, String[] validatorNames, String targetObjectName) {
-		try {
-			TaskListUtility.removeAllTasks(resource, validatorNames, targetObjectName);
-		} catch (CoreException exc) {
-			// Couldn't remove the task from the task list for some reason...
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter.removeAllMessages(String[], IResource, String)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-	}
-
-	public static void removeMessageSubset(IResource resource, Class messageOwner, String groupName) {
-		// Since the addMessage(Class, IMessage) is defaulted to the IProject,
-		// remove the message subsets from the IProject
-		removeMessageSubset(resource, new String[]{getUniqueId(messageOwner)}, null, groupName);
-	}
-
-	public static void removeMessageSubset(IResource resource, String messageOwnerId, String groupName) {
-		// Since the addMessage(Class, IMessage) is defaulted to the IProject,
-		// remove the message subsets from the IProject
-		removeMessageSubset(resource, new String[]{messageOwnerId}, null, groupName);
-	}
-
-	public static void removeMessageSubset(IResource resource, String[] ownerId, String targetObjectName, String groupName) {
-		try {
-			TaskListUtility.removeTaskSubset(resource, ownerId, targetObjectName, groupName);
-		} catch (CoreException exc) {
-			// Couldn't remove the task to the task list for some reason...
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter.removeMessageSubset(String[], IResource, String, String)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-	}
-
-	/**
-	 * Given a Class instance, return the id that uniquely identifies this instance. (Used as the
-	 * value for the message owner.)
-	 */
-	public static String getUniqueId(Class clazz) {
-		if (clazz == null) {
-			return ""; //$NON-NLS-1$
-		}
-
-		// It is safe to load this String into the constants space because
-		// the Class name will not change during WSAD's session.
-		return clazz.getName().intern();
-	}
-
-	public static String getUniqueId(IValidator validator) {
-		if (validator == null) {
-			return ""; //$NON-NLS-1$
-		}
-		return getUniqueId(validator.getClass());
-	}
-
-	public static Logger getMsgLogger(IValidator validator) {
-		ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validator);
-		if (vmd == null) {
-			return ValidationPlugin.getPlugin().getMsgLogger();
-		}
-
-		return vmd.getMsgLogger();
-	}
-
-	public static String getLocation(IWorkbenchContext helper, IMessage message) {
-		if (message == null) {
-			return getLocationText(helper, null);
-		}
-		int lineNo = message.getLineNumber();
-		if (lineNo == IMessage.LINENO_UNSET) {
-			return getLocationText(helper, message.getTargetObject());
-		}
-		return String.valueOf(lineNo);
-	}
-
-	public static String getLocationText(IWorkbenchContext helper, Object targetObject) {
-		String location = null;
-		try {
-			location = helper.getLocation(targetObject);
-		} catch (Throwable exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter.getLocationText(Object)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-		if ((location == null) || (location.trim().equals(""))) { //$NON-NLS-1$
-			location = DEFAULT_LOCATION;
-		}
-		return location;
-	}
-
-	/**
-	 * If the user is cancelling validation on the current project/resource, Add an information task
-	 * to the task list informing the user that validation has not been run on the current project.
-	 */
-	// TODO This method was made protected for the SaberReporter. Make this method private again
-	// once the framework supports IMarker.PRIORITY.
-	protected static void addTerminatedTask(IProject project, IValidator validator) throws IllegalArgumentException {
-		if ((project == null) || (validator == null)) {
-			return;
-		}
-		ValidatorManager.getManager().addMessageLimitExceeded(project);
-		ValidatorManager.setMessageLimitMessageForProject(project);
-	}
-
-	// TODO This method was made protected for the SaberReporter. Make this method private again
-	// once the framework supports IMarker.PRIORITY.
-	protected static String getTargetObjectName(IWorkbenchContext helper, IMessage message) {
-		if (message == null) {
-			return getTargetObjectName(helper, null);
-		}
-		return getTargetObjectName(helper, message.getTargetObject());
-	}
-
-	private static String getTargetObjectName(IWorkbenchContext helper, Object targetObject) {
-		String targetObjectName = null;
-		try {
-			targetObjectName = helper.getTargetObjectName(targetObject);
-		} catch (Throwable exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter.getTargetObjectName(Object)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-		return targetObjectName;
-	}
-
-	// TODO This method was made "protected" for the SaberReporter. Do not call this method! This
-	// method will be made private once support for marker PRIORITY attributes is in the framework.
-	protected static ValidatorMetaData getVMD(IValidator validator) throws IllegalArgumentException {
-		ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validator);
-		if (vmd == null) {
-			throw new IllegalArgumentException(); // already logged in the ValidationRegistryReader
-		}
-		return vmd;
-	}
-
-	/**
-	 * @deprecated. The IValidationContext will be ignored.
-	 */
-	public WorkbenchReporter(IWorkbenchContext helper, IProgressMonitor monitor, IProject project) {
-		this(project, monitor);
-	}
-
-	/**
-	 * An IReporter instance must exist for each Runnable in order for the validator to report
-	 * status messages. IProject and IProgressMonitor must not be null.
-	 */
-	public WorkbenchReporter(IProject project, IProgressMonitor monitor) {
-		super();
-		_project = project;
-		_monitor = monitor;
-	}
-
-	// TODO This method was made protected for the SaberReporter. Make it private again once the
-	// framework support IMarker.PRIORITY.
-	protected IWorkbenchContext getHelper(IValidator validator) throws InstantiationException, IllegalArgumentException {
-		ValidatorMetaData vmd = getVMD(validator);
-		IWorkbenchContext helper = vmd.getHelper(getProject());
-		return helper;
-	}
-	
-
-	public IProject getProject() {
-		return _project;
-	}
-
-	public IProgressMonitor getProgressMonitor() {
-		return _monitor;
-	}
-
-	/**
-	 * This method will never return null.
-	 */
-	private IResource getDefaultResource() {
-		IResource prj = getProject();
-		if (prj != null) {
-			return prj;
-		}
-		// return the workspace root
-		return ResourcesPlugin.getWorkspace().getRoot();
-	}
-
-	/**
-	 * When an IMessage is created, the user has the option of creating it with a target object.
-	 * That target object is used to identify which object has the problem identified by the
-	 * IMessage. This method, given the target object, returns the IResource which represents that
-	 * object in the workbench.
-	 */
-	public IResource getMessageResource(IValidator validator, Object object) {
-		if (validator == null) {
-			return null;
-		}
-
-		IResource resource = null;
-		if (object != null) {
-			if (object instanceof IResource) {
-				resource = (IResource) object;
-			} else if (object instanceof WorkbenchFileDelta) {
-				// resource may be null if the WorkbenchFileDelta was constructed from an Object
-				// instead of an IResource
-				resource = ((WorkbenchFileDelta) object).getResource();
-			}
-
-			if (resource == null) {
-				try {
-					IWorkbenchContext helper = getHelper(validator);
-					resource = helper.getResource(object);
-				} catch (InstantiationException exc) {
-					try {
-						// Unlikely that an exception will be thrown, because this method is
-						// invoked by the validator, and if the validator is invoked, it's likely
-						// that the helper has been loaded too.
-						ValidatorMetaData vmd = getVMD(validator);
-
-						// Remove the vmd from the reader's list
-						ValidationRegistryReader.getReader().disableValidator(vmd);
-
-						// Log the reason for the disabled validator
-						Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-						if (logger.isLoggingLevel(Level.SEVERE)) {
-							LogEntry entry = ValidationPlugin.getLogEntry();
-							entry.setSourceID("WorkbenchReporter::getMessageResource(IValidator, Object)"); //$NON-NLS-1$
-							entry.setTargetException(exc);
-							logger.write(Level.SEVERE, entry);
-						}
-					} catch (IllegalArgumentException exc2) {
-						// Even the IValidator is invalid. Unfortunately, can't disable the
-						// validator because it can't be found by the registry reader.
-						// Log the reason for the disabled validator
-						Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-						if (logger.isLoggingLevel(Level.SEVERE)) {
-							LogEntry entry = ValidationPlugin.getLogEntry();
-							entry.setSourceID("WorkbenchReporter::getMessageResource(IValidator, Object)"); //$NON-NLS-1$
-							entry.setTargetException(exc2);
-							logger.write(Level.SEVERE, entry);
-						}
-					}
-				} catch (IllegalArgumentException exc) {
-					// Even the IValidator is invalid. Unfortunately, can't disable the
-					// validator because it can't be found by the registry reader.
-					// Log the reason for the disabled validator
-					Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setSourceID("WorkbenchReporter::getMessageResource(IValidator, Object)"); //$NON-NLS-1$
-						entry.setTargetException(exc);
-						logger.write(Level.SEVERE, entry);
-					}
-				} catch (Throwable exc) {
-					Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setSourceID("WorkbenchReporter.getMessageResource(IValidator, Object)"); //$NON-NLS-1$
-						entry.setTargetException(exc);
-						logger.write(Level.SEVERE, entry);
-					}
-				}
-			}
-		}
-
-		if (resource == null) {
-			resource = getDefaultResource();
-		}
-
-		if (!resource.exists()) {
-			resource = getDefaultResource();
-		}
-
-		return resource;
-	}
-
-	/**
-	 * Show a message to the user indicating which subtask is currently being processed. <br>
-	 * <br>
-	 * <code>message</code> may not be null or the empty string (""). <br>
-	 */
-	public void displaySubtask(String message) {
-		if ((message == null) || (message.equals(""))) { //$NON-NLS-1$
-			return;
-		}
-
-		if (getProgressMonitor() != null) {
-			getProgressMonitor().subTask(message);
-		} else {
-			System.out.println(message);
-		}
-	}
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.provisional.core.core.IReporter#getMessages()
-	 */
-	public List getMessages() {
-		return null;
-	}
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.provisional.core.core.IReporter#isCancelled()
-	 */
-	public boolean isCancelled() {
-		if (getProgressMonitor() != null) {
-			return getProgressMonitor().isCanceled();
-		}
-		return false;
-	}
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.provisional.core.core.IReporter#addMessage(IValidator, IMessage)
-	 */
-	public void addMessage(IValidator validator, IMessage message) throws MessageLimitException {
-		IResource resource = getMessageResource(validator, message.getTargetObject());
-		IWorkbenchContext helper = null;
-		ValidatorMetaData vmd = getVMD(validator);
-		try {
-			helper = getHelper(validator);
-		} catch (InstantiationException exc) {
-			try {
-				// Unlikely that an exception will be thrown, because this method is
-				// invoked by the validator, and if the validator is invoked, it's likely
-				// that the helper has been loaded too
-				
-				
-				// Remove the vmd from the reader's list
-				ValidationRegistryReader.getReader().disableValidator(vmd);
-
-				// Log the reason for the disabled validator
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("WorkbenchReporter::addMessage(IValidator, IMessage)"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-				return;
-			} catch (IllegalArgumentException exc2) {
-				logDisabledValidator(exc2);
-				return;
-			}
-		} catch (IllegalArgumentException exc) {
-			logDisabledValidator(exc);
-			return;
-		}
-
-		if (resource == null) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter.addMessage(IValidator, Message)"); //$NON-NLS-1$
-				entry.setMessageTypeIdentifier(ResourceConstants.VBF_EXC_INVALID_RESOURCE);
-				String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INVALID_RESOURCE), new String[]{message.getText(), getTargetObjectName(helper, message)});
-				entry.setText(result);				
-				//entry.setTokens(new String[]{message.getText(), getTargetObjectName(helper, message)});
-				logger.write(Level.FINE, entry);
-			}
-			return;
-		}
-
-		ValidatorManager mgr = ValidatorManager.getManager();
-		if (mgr.isMessageLimitExceeded(resource.getProject())) {
-			validateMessageLimitExceeded(validator, resource);
-		}
-
-		addMessage(resource, validator.getClass(), message, getTargetObjectName(helper, message), getLocation(helper, message),vmd.getMarkerId());
-	}
-
-	/**
-	 * @param exc
-	 */
-	private void logDisabledValidator(IllegalArgumentException exc) {
-		// Even the IValidator is invalid. Unfortunately, can't disable the
-		// validator because it can't be found by the registry reader.
-		// Log the reason for the disabled validator
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-		if (logger.isLoggingLevel(Level.SEVERE)) {
-			LogEntry entry = ValidationPlugin.getLogEntry();
-			entry.setSourceID("WorkbenchReporter::addMessage(IValidator, IMessage)"); //$NON-NLS-1$
-			entry.setTargetException(exc);
-			logger.write(Level.SEVERE, entry);
-		}
-		return;
-	}
-
-	/**
-	 * @param validator
-	 * @param resource
-	 */
-	private void validateMessageLimitExceeded(IValidator validator, IResource resource) {
-		try {
-			addTerminatedTask(resource.getProject(), validator);
-		} catch (IllegalArgumentException exc) {
-			// Even the IValidator is invalid. Unfortunately, can't disable the
-			// validator because it can't be found by the registry reader.
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter::addMessage(IValidator, IMessage)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-		throw new MessageLimitException();
-	}
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.provisional.core.core.IReporter#displaySubtask(IValidator, IMessage)
-	 */
-	public void displaySubtask(IValidator validator, IMessage message) {
-		if ((message == null) || (message.equals(""))) { //$NON-NLS-1$
-			return;
-		}
-
-		displaySubtask(message.getText(validator.getClass().getClassLoader()));
-	}
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.provisional.core.core.IReporter#removeAllMessages(IValidator)
-	 */
-	public void removeAllMessages(IValidator validator) {
-		if (validator == null) { // getHelper could be null if the user cancelled before something
-			// was fully initialized
-			return;
-		}
-
-		removeAllMessages(validator, null);
-	}
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.provisional.core.core.IReporter#removeAllMessages(IValidator, Object)
-	 */
-	public void removeAllMessages(IValidator validator, Object object) {
-		IResource resource = getMessageResource(validator, object);
-		if (resource == null) {
-			return;
-		}
-
-		ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validator);
-		if (vmd == null) {
-			return;
-		}
-
-		IWorkbenchContext helper = null;
-		try {
-			helper = vmd.getHelper(resource.getProject());
-		} catch (InstantiationException exc) {
-			// Unlikely that an exception will be thrown, because this method is
-			// invoked by the validator, and if the validator is invoked, it's likely
-			// that the helper has been loaded too.
-
-			// Remove the vmd from the reader's list
-			ValidationRegistryReader.getReader().disableValidator(vmd);
-
-			// Log the reason for the disabled validator
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter::removeAllMessages(IResource, IValidator, Object)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-
-			return;
-		}
-
-		String[] validatorNames = vmd.getValidatorNames();
-		String targetObjectName = getTargetObjectName(helper, object);
-		removeAllMessages(resource, validatorNames, targetObjectName);
-	}
-
-	/**
-	 * @see org.eclipse.wst.validation.internal.provisional.core.core.IReporter#removeMessageSubset(IValidator, Object, String)
-	 */
-	public void removeMessageSubset(IValidator validator, Object obj, String groupName) {
-		IResource resource = getMessageResource(validator, obj);
-		if (resource == null) {
-			return;
-		}
-
-		ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validator);
-		if (vmd == null) {
-			return;
-		}
-
-
-		IWorkbenchContext helper = null;
-		try {
-			helper = vmd.getHelper(resource.getProject());
-		} catch (InstantiationException exc) {
-			// Unlikely that an exception will be thrown, because this method is
-			// invoked by the validator, and if the validator is invoked, it's likely
-			// that the helper has been loaded too.
-
-			// Remove the vmd from the reader's list
-			ValidationRegistryReader.getReader().disableValidator(vmd);
-
-			// Log the reason for the disabled validator
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter::removeAllMessages(IResource, IValidator, Object)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-
-			return;
-		}
-
-		String[] validatorNames = vmd.getValidatorNames();
-		String targetObjectName = getTargetObjectName(helper, obj);
-		removeMessageSubset(resource, validatorNames, targetObjectName, groupName);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/plugin/ValidationHelperRegistryReader.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/plugin/ValidationHelperRegistryReader.java
deleted file mode 100644
index eef9e53..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/plugin/ValidationHelperRegistryReader.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.plugin;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.RegistryReader;
-import org.eclipse.wst.validation.internal.IProjectValidationHelper;
-
-public class ValidationHelperRegistryReader extends RegistryReader {
-
-	public static final String VALIDATION_HELPER = "validationHelper"; //$NON-NLS-1$
-	static final String ATT_ID = "id"; //$NON-NLS-1$ 
-	static final String ATT_HELPER_CLASS = "helperClass"; //$NON-NLS-1$
-	private static ValidationHelperRegistryReader INSTANCE = null;
-	private List validationHelpers = null;
-	
-	/**
-	 * Default constructor
-	 */
-	public ValidationHelperRegistryReader() {
-		super(ValidationPlugin.PLUGIN_ID, VALIDATION_HELPER);
-	}
-	
-	public static ValidationHelperRegistryReader getInstance() {
-		if (INSTANCE == null) {
-			INSTANCE = new ValidationHelperRegistryReader();
-			INSTANCE.readRegistry();
-		}
-		return INSTANCE;
-	}
-	
-	private List getValidationHelpers() {
-		if (validationHelpers == null)
-			validationHelpers = new ArrayList();
-		return validationHelpers;
-	}
-
-	public boolean readElement(IConfigurationElement element) {
-		if (!element.getName().equals(VALIDATION_HELPER))
-			return false;
-		IProjectValidationHelper helper = null;
-		try {
-			helper = (IProjectValidationHelper) element.createExecutableExtension(ATT_HELPER_CLASS);
-			getValidationHelpers().add(helper);
-			return true;
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return false;
-	}
-	
-	public IProjectValidationHelper getValidationHelper() {
-		if (getValidationHelpers().isEmpty())
-			return null;
-		return (IProjectValidationHelper) getValidationHelpers().get(0);
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/plugin/ValidationPlugin.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/plugin/ValidationPlugin.java
deleted file mode 100644
index 12170c2..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/plugin/ValidationPlugin.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others. 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: IBM Corporation - initial API and implementation
- **************************************************************************************************/
-package org.eclipse.wst.validation.internal.plugin;
-
-import java.util.Locale;
-
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.wst.common.frameworks.internal.WTPPlugin;
-import org.eclipse.wst.validation.internal.EventManager;
-import org.eclipse.wst.validation.internal.TimeEntry;
-import org.eclipse.wst.validation.internal.core.Message;
-import org.eclipse.wst.validation.internal.provisional.core.IMessage;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-
-public class ValidationPlugin extends WTPPlugin {
-	public static final String VALIDATION_PROP_FILE_NAME = "validate_base"; //$NON-NLS-1$
-	public static final String PLUGIN_ID = "org.eclipse.wst.validation"; //$NON-NLS-1$
-	private static ValidationPlugin _plugin = null;
-	private static TimeEntry _tEntry = null;
-	private static LogEntry _entry = null;
-	private static Message _message = null;
-	public static final String VALIDATION_BUILDER_ID = PLUGIN_ID + ".validationbuilder"; //$NON-NLS-1$// plugin id of the validation builder
-	public static final String VALIDATOR_EXT_PT_ID = "validator"; //$NON-NLS-1$// extension point declaration of the validator 
-
-	/**
-	 * ValidationPlugin constructor comment.
-	 * 
-	 * @param descriptor
-	 *            org.eclipse.core.runtime.IPluginDescriptor
-	 */
-	public ValidationPlugin() {
-		super();
-		if (_plugin == null) {
-			_plugin = this;
-			//Commenting off the following lines the Plugin is not activated and the
-			//getMsgLogger tries to access the Plugin and the plugin is in a active pending state.
-			//getMsgLogger();
-			//logger.log(Level.CONFIG, null);
-
-		}
-	}
-
-	public static String getBundleName() {
-		return VALIDATION_PROP_FILE_NAME;
-	}
-
-	public static LogEntry getLogEntry() {
-		if (_entry == null) {
-			_entry = new LogEntry(VALIDATION_PROP_FILE_NAME);
-		} else {
-			_entry.reset();
-		}
-		// Always set the log entry's Locale before you use it
-		// because the user can reset it on the fly.
-		_entry.setLocaleOfOrigin(Locale.getDefault().toString());
-		return _entry;
-	}
-
-	public static TimeEntry getTimeEntry() {
-		if (_tEntry == null) {
-			_tEntry = new TimeEntry();
-		}
-		_tEntry.reset();
-		return _tEntry;
-	}
-
-	public static Message getMessage() {
-		if (_message == null) {
-			_message = new Message();
-			_message.setBundleName(getBundleName());
-		}
-		// clear the message for reuse
-		_message.setId(null);
-		_message.setParams(null);
-		_message.setTargetObject(null);
-		_message.setGroupName(null);
-		_message.setSeverity(IMessage.LOW_SEVERITY);
-		return _message;
-	}
-
-	/**
-	 * Retrieves a hashtable of a logger's preferences initially from the
-	 * com.ibm.etools.logging.util.loggingDefaults extension point if specified in the
-	 * com.ibm.etools.logging.util plugin.xml file. If specified, the
-	 * com.ibm.etools.logging.util.loggingOptions extension point preferences in the parameter
-	 * plugin's plugin.xml file are returned.
-	 * 
-	 * The logger's preferences are stored in the return hashtable using the static instance
-	 * variables in LoggerStateHashKeys as keys.
-	 * 
-	 * @param plugin
-	 *            the Plugin polled for their logger's preferences in the plugin.xml file
-	 * @return hashtable of a logger's preferences
-	 */
-	/*
-	 * public Hashtable getMsgLoggerConfig(Plugin plugin) { return (new
-	 * PluginHelperImpl().getMsgLoggerConfig(plugin));
-	 */
-	public static ValidationPlugin getPlugin() {
-		return _plugin;
-	}
-
-	/**
-	 * Sets the logger's preferences based on values in the parameter hashtable.
-	 * 
-	 * The logger's preferences are stored in the parameter hashtable using the static instance
-	 * variables in LoggerStateHashKeys as keys.
-	 * 
-	 * @param msgLoggerConfig
-	 *            hashtable of the logger's preferences
-	 */
-	/*
-	 * public void setMsgLoggerConfig(Hashtable msgLoggerConfig) {
-	 * getMsgLogger().setMsgLoggerConfig(msgLoggerConfig); }
-	 */
-	public static boolean isActivated() {
-		Bundle bundle = Platform.getBundle(PLUGIN_ID);
-		if (bundle != null)
-			return bundle.getState() == Bundle.ACTIVE;
-		return false;
-	}
-
-	/**
-	 * @see Plugin#startup()
-	 */
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-		ResourcesPlugin.getWorkspace().addResourceChangeListener(EventManager.getManager(), IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_DELETE | IResourceChangeEvent.POST_BUILD | IResourceChangeEvent.PRE_BUILD | IResourceChangeEvent.POST_CHANGE);
-	}
-
-	/**
-	 * @see org.eclipse.core.runtime.Plugin#stop(BundleContext context)
-	 */
-	public void stop(BundleContext context) throws Exception {
-		super.stop(context);
-		EventManager.getManager().shutdown();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.WTPPlugin#getPluginID()
-	 */
-	public String getPluginID() {
-		return PLUGIN_ID;
-	}
-	
-	
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/provisional/ValidationFactory.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/provisional/ValidationFactory.java
deleted file mode 100644
index caa4614..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/provisional/ValidationFactory.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.provisional;
-
-import org.eclipse.wst.validation.internal.ValidationFactoryImpl;
-import org.eclipse.wst.validation.internal.provisional.core.IValidator;
-
-/**
- * This interface provides a way to access an instance of the ValidationFactoryImpl
- * instance, an internal implementation that provides access to some of the internal state
- * of validators.
- * 
- * @plannedfor 1.0
- * 
- * [issue: LM - 2 issues.
- *  1. I don't think the name 'factory' provides a good description of 
- *     this interface. Unless I'm mistaken the ValidationFactory doesn't
- *     actually create validators but simply returns existing validators.
- *     Looking at the implementation this is currently the case. I suggest
- *     renaming this to ValidatorRegistry or something similar.
- *  2. I think the common way for creating a factory is to create a class
- *     with a static method such as getFactory. If this is to be a factory
- *     it should probably be structured as per the convention.]
- */
-public interface ValidationFactory {
-	
-	ValidationFactory instance = ValidationFactoryImpl.getInstance();
-	/**
-	 * This api returns the IValidator given the validatorUniqueName id. The unique
-	 * id name is the class name that is defined in the class name element in the 
-	 * plugin extension of the validator.
-	 * @param validatorUniqueId
-	 * @return IValidator
-	 * @plannedfor WTP 1.0
-	 */
-	public IValidator getValidator(String validatorUniqueId) throws InstantiationException;
-
-}
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/FileDelta.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/FileDelta.java
deleted file mode 100644
index a0229a5..0000000
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/FileDelta.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.core;
-
-
-
-/**
- * <p>
- * Default implementation of the IFileDelta
- * </p>
- * 
- * @see org.eclipse.wst.validation.internal.core.IFileDelta
- * 
- *  [issue: CS - is there a reason that we need to expose this impl class as an API?
- *   It would seem better to only expose IFileDelta.  I can't think of a reason where 
- *   a typical client would need to create one of these.]
- */
-public class FileDelta implements IFileDelta {
-	private int fileDelta = 0;
-	private String fileName = null;
-
-	/**
-	 * <p>
-	 * Creates a default instance of the FileDelta
-	 * </p>
-	 */
-	public FileDelta() {
-		super();
-	}
-	
-	/**
-	 * <p>
-	 * Constructor is used to initialize the fields. 
-	 * </p>
-	 * 
-	 * @param aFileName specifies the file name
-	 * @param aFileDelta specifies the 
-	 */
-	public FileDelta(String aFileName, int aFileDelta) {
-		fileName = aFileName;
-		fileDelta = aFileDelta;
-	}
-
-	/**
-	 * @see IFileDelta#getDeltaType()
-	 */
-	public int getDeltaType() {
-		return fileDelta;
-	}
-
-	/**
-	 * @see IFileDelta#getFileName()
-	 */
-	public String getFileName() {
-		return fileName;
-	}
-
-	/**
-	 * <p>
-	 * Set the flag which indicates the type of change that the file 
-	 * has undergone.
-	 * </p>
-	 */
-	public void setDeltaType(int deltaType) {
-		fileDelta = deltaType;
-	}
-
-	/**
-	 * <p>
-	 * Set the name of the file which has changed.
-	 * </p>
-	 */
-	public void setFileName(String aFileName) {
-		fileName = aFileName;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/IFileDelta.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/IFileDelta.java
deleted file mode 100644
index 170a74b..0000000
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/IFileDelta.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.core;
-
-/**
- * <p>
- * This interface is used, for incremental validation, to encapsulate the change 
- * status of a resource. IFileDelta contains the name of the file which has 
- * changed, and a flag which indicates the type of change which has occurred.
- * 
- * @plannedfor 1.0
- * </p>
- * [issue: LM - From speaking with Vijay the name IFileDelta doesn't really capture
- *  what this interface is for. Validation may occur of files, it may occur on resources,
- *  or it may occur on something more abstract simply known as an artifact. The delta part
- *  of the name also seems misleading as this interface doesn't provide the delta but
- *  rather provides the type of change. I suggest renaming this interface to IModifiedArtifact
- *  or something along those lines to better capture its use. ]
- */
-public interface IFileDelta {
-	public static final int ADDED = 1;   // the file has been added
-	public static final int CHANGED = 2; // the file has been changed
-	public static final int DELETED = 3; // the file has been deleted
-
-	/**
-	 * <p>
-	 * Returns the flag which indicates the type of change which has occurred:
-	 * IFileDelta.ADDED, IFileDelta.CHANGED, or IFileDelta.DELETED.
-	 * </p>
-	 * @return returns the delta type.
-	 * @plannedfor WTP 1.0
-	 * 
-	 * [issue: LM - From my experience a validator simply needs to know what artifact needs
-	 *  to be validated. Can you provide a use case where the type of change is needed for
-	 *  validation? ]
-	 */
-	public int getDeltaType();
-
-	/**
-	 * <p>
-	 * Returns the name of the eclipse resource file which has changed. The return value must not be 
-	 * null or the empty string ("").
-	 * </p>
-	 * @return returns the file name.
-	 * @plannedfor WTP 1.0
-	 * 
-	 * [issue: LM - Following my comments above this method should be renamed to getArtifactName or
-	 *  something that follows along with the interface rename. ]
-	 */
-	public String getFileName();
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/IMessageAccess.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/IMessageAccess.java
deleted file mode 100644
index 88d6eca..0000000
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/IMessageAccess.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.core;
-
-
-import java.util.List;
-import java.util.Locale;
-
-
-/**
- * <p>
- * Interface which can be used to access messages which are stored within a reporter which retains
- * its message history.
- * </p>
- * 
- * [issue: CS - This interface seems like overkill.  I'd think that an IReport should simply have a getMessages() method.
- * I think MessageFiltering should take place at the 'display' level and not at this level of the API.]
- */
-public interface IMessageAccess {
-	/**
-	 * @param filter
-	 *            A filter which specifies a subset of messages to retrieve. null specifies, "all
-	 *            messages".
-	 * @return List list of messages related to the target object
-	 */
-	public abstract List getMessages(MessageFilter filter);
-
-	/**
-	 * @param filter
-	 *            A filter which specifies a subset of messages to retrieve. null specifies, "all
-	 *            messages".
-	 * @param locale
-	 *            The target local to translate the messages into. null specifies, "use default
-	 *            locale".
-	 * @return List a list of messages related to the target object, translated into the specified
-	 * locale.
-	 */
-	public abstract List getMessagesAsText(MessageFilter filter, Locale targetLocale);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/Message.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/Message.java
deleted file mode 100644
index f54b8db..0000000
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/Message.java
+++ /dev/null
@@ -1,373 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.core;
-
-
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-import org.eclipse.wst.validation.internal.provisional.core.IMessage;
-
-/**
- * <p>
- * Default implementation of the IMessage interface, provided for the convenience of the
- * IValidators. If an IValidator needs to run in both AAT and WSAD then this IMessage implementation
- * should be used; if the IValidator runs in WSAD alone, the WSAD LocalizedMessage may be used in
- * place of this implementation.
- * <p>
- * @see org.eclipse.wst.validation.internal.provisional.core.IMessage
- * 
- * [issue: CS - I'd suggest splitting this class into Message and BundleMessage (where the latter inherits
- * from the former.  We have many messages that come (from xerces) pretranslated and don't require 'bundle'
- * related fields and methods. Splitting this class would make it easier to understand where bundle related
- * function is coming into play. Below I've listed out what would go into BundleMessage to demonstrate how 
- * we can simplify the 'Message' class by factoring out the bundle related details.
- * 
- * Message
- *	private Object targetObject = null;
- *	private String groupName = null;
- *	private int lineNumber = IMessage.LINENO_UNSET;
- *	private int length = IMessage.OFFSET_UNSET;
- *	private int offset = IMessage.OFFSET_UNSET;
- *
- *    
- * BundleMessage
- *	private String id = null;
- *	private String[] params = null;
- *	private String bundleName = null;
- *   
- *   - getId()
- *   - getBundle(...)
- *   - getBundleName()
- *   - getParams()
- *   - getText(Locale)
- *   - getText(ClassLoader)
- *   - getText(Locale, ClassLoader)
- *   - setId(String)
- *   - setBundleName(String)
- *   - setParams(String[])
- * ]
- */
-public class Message implements IMessage {
-	private String id = null;
-	private String[] params = null;
-	private int severity = MessageFilter.ANY_SEVERITY;
-	private Object targetObject = null;
-	private String bundleName = null;
-	private String groupName = null;
-	private int lineNumber = IMessage.LINENO_UNSET;
-	private int length = IMessage.OFFSET_UNSET;
-	private int offset = IMessage.OFFSET_UNSET;
-	private HashMap messageAttributes;
-
-	/**
-	 * <p>
-	 * Creates a default instance of the Message
-	 * </p>
-	 */
-	public Message() {
-		super();
-	}
-
-	/**
-	 * <p>
-	 * Creates a Message object with bundle name, severity and a unique id
-	 * </p>
-	 * 
-	 * @param aBundleName 
-	 * 			Must not be null or the empty string (""). 
-	 * @param aSeverity 
-	 * 			Must be one of the severities specified in IMessage. 
-	 * @param anId 
-	 * 			Must not be null or the empty string ("").
-	 */
-	public Message(String aBundleName, int aSeverity, String anId) {
-		this(aBundleName, aSeverity, anId, null, null);
-	}
-
-	/**
-	 * <p>
-	 * Creates a Message object with bundle name, severity, a unique id, and 
-	 * a list of parameters. 
-	 * </p>
-	 * 
-	 * @param aBundleName 
-	 * 			Must not be null or the empty string (""). 
-	 * @param aSeverity 
-	 * 			Must be one of the severities specified in IMessage.
-	 * @param anId 
-	 * 			Must not be null or the empty string ("").
-	 * @param aParams 
-	 * 			May be null, if there are no parameters in the message.
-	 */
-	public Message(String aBundleName, int aSeverity, String anId, String[] aParams) {
-		this(aBundleName, aSeverity, anId, aParams, null);
-	}
-	
-	/**
-	 * <p>
-	 * Creates a Message object with bundle name, severity, a unique id, and 
-	 * a list of parameters and the target object.
-	 * </p>
-	 * 
-	 * @param aBundleName 
-	 * 			Must not be null or the empty string (""). 
-	 * @param aSeverity 
-	 * 			Must be one of the severities specified in IMessage.
-	 * @param anId 
-	 * 			Must not be null or the empty string ("").
-	 * @param aParams 
-	 * 			May be null, if there are no parameters in the message.
-	 * @param targetObject 
-	 * 			May be null, if the message does not pertain to a particular 
-	 * 			object.
-	 */
-	public Message(String aBundleName, int aSeverity, String anId, String[] aParams, Object aTargetObject) {
-		bundleName = aBundleName;
-		severity = aSeverity;
-		id = anId;
-		params = aParams;
-		targetObject = aTargetObject;
-	}
-	
-	public Message(String aBundleName, int aSeverity, String anId, String[] aParams, Object aTargetObject, String aGroupName) {
-		bundleName = aBundleName;
-		severity = aSeverity;
-		id = anId;
-		params = aParams;
-		targetObject = aTargetObject;
-		groupName = aGroupName;
-	}
-
-	/**
-	 * @return the resource bundle which contains the messages, as identified by
-	 * 
-	 * @link #getBundleName()
-	 */
-	public ResourceBundle getBundle(Locale locale, ClassLoader classLoader) {
-		ResourceBundle bundle = null;
-		try {
-			if (classLoader == null) {
-				bundle = ResourceBundle.getBundle(getBundleName(), locale);
-			} else {
-				bundle = ResourceBundle.getBundle(getBundleName(), locale, classLoader);
-			}
-		} catch (MissingResourceException e) {
-			e.printStackTrace();
-		}
-		return bundle;
-	}
-
-	/**
-	 * @see IMessage#getBundleName()
-	 */
-	public String getBundleName() {
-		return bundleName;
-	}
-
-	/**
-	 * @see IMessage#getGroupName()
-	 */
-	public String getGroupName() {
-		return groupName;
-	}
-
-	/**
-	 * @see IMessage#getId()
-	 */
-	public String getId() {
-		return id;
-	}
-
-	/**
-	 * @see IMessage#getLength()
-	 */
-	public int getLength() {
-		return length;
-	}
-
-	/**
-	 * @see IMessage#getLineNumber()
-	 */
-	public int getLineNumber() {
-		return lineNumber;
-	}
-
-	/**
-	 * @see IMessage#getOffset()
-	 */
-	public int getOffset() {
-		return offset;
-	}
-
-	/**
-	 * @see IMessage#getParams()
-	 */
-	public String[] getParams() {
-		return params;
-	}
-
-	/**
-	 * @see IMessage#getSeverity()
-	 */
-	public int getSeverity() {
-		return severity;
-	}
-
-	/**
-	 * @see IMessage#getTargetObject()
-	 */
-	public Object getTargetObject() {
-		return targetObject;
-	}
-
-	/**
-	 * @see IMessage#getText()
-	 */
-	public String getText() {
-		return getText(Locale.getDefault(), null);
-	}
-
-	/**
-	 * @see IMessage#getText(ClassLoader)
-	 */
-	public String getText(ClassLoader classLoader) {
-		return getText(Locale.getDefault(), classLoader);
-	}
-
-	/**
-	 * @see IMessage#getText(Locale)
-	 */
-	public String getText(Locale locale) {
-		return getText(locale, null);
-	}
-
-	/**
-	 * @see IMessage#getText(Locale, ClassLoader)
-	 */
-	public java.lang.String getText(Locale locale, ClassLoader classLoader) {
-		String message = ""; //$NON-NLS-1$
-
-		if (locale == null) {
-			return message;
-		}
-
-		ResourceBundle bundle = getBundle(locale, classLoader);
-		if (bundle == null) {
-			return message;
-		}
-
-		try {
-			message = bundle.getString(getId());
-
-			if (getParams() != null) {
-				message = java.text.MessageFormat.format(message, getParams());
-			}
-		} catch (MissingResourceException exc) {
-			System.err.println(exc.getMessage());
-			System.err.println(getId());
-		} catch (NullPointerException exc) {
-			System.err.println(exc.getMessage());
-			System.err.println(getId());
-		}
-
-		return message;
-	}
-
-	/**
-	 * @see IMessage#setBundleName(String)
-	 */
-	public void setBundleName(String aBundleName) {
-		bundleName = aBundleName;
-	}
-
-	/**
-	 * @see IMessage#setGroupName(String)
-	 */
-	public void setGroupName(String name) {
-		groupName = name;
-	}
-
-	/**
-	 * @see IMessage#setId(String)
-	 */
-	public void setId(String newId) {
-		id = newId;
-	}
-
-	/**
-	 * @see IMessage#setLength(int)
-	 */
-	public void setLength(int length) {
-		if (length < 0) {
-			length = IMessage.OFFSET_UNSET;
-		}
-		this.length = length;
-	}
-
-	/**
-	 * @see IMessage#setLineNo(int)
-	 */
-	public void setLineNo(int lineNumber) {
-		if (lineNumber < 0) {
-			this.lineNumber = IMessage.LINENO_UNSET;
-		} else {
-			this.lineNumber = lineNumber;
-		}
-	}
-
-	/**
-	 * @see IMessage#setOffset(int)
-	 */
-	public void setOffset(int offset) {
-		if (offset < 0) {
-			offset = IMessage.OFFSET_UNSET;
-		}
-		this.offset = offset;
-	}
-
-	/**
-	 * @see IMessage#setParams(String[])
-	 */
-	public void setParams(String[] newParams) {
-		params = newParams;
-	}
-
-	/**
-	 * @see IMessage#setSeverity(int)
-	 */
-	public void setSeverity(int newSeverity) {
-		severity = newSeverity;
-	}
-
-	/**
-	 * @see IMessage#setTargetObject(Object)
-	 */
-	public void setTargetObject(Object obj) {
-		targetObject = obj;
-	}
-
-	public Object getAttribute(String attributeName) {
-		if(messageAttributes != null) {
-			return messageAttributes.get(attributeName);
-		}
-		return null;
-	}
-
-	public void setAttribute(String attributeName, Object value) {
-		if(messageAttributes == null) {
-			messageAttributes = new HashMap();
-		}
-		messageAttributes.put(attributeName,value);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/MessageFilter.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/MessageFilter.java
deleted file mode 100644
index a380061..0000000
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/MessageFilter.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.core;
-
-import org.eclipse.wst.validation.internal.provisional.core.IValidator;
-
-
-/**
- * <p>
- * Encapsulates common message filtering parameters. Message Filters are used when retrieving
- * messages via an IMessageAccess. The filter encapsulates a simple set of typical filter criteria
- * which is used to select a subset of messages to retrieve. If multiple attributes of the message
- * filter are specified, they should be logically AND'd together by the MessageAccess
- * implementation.
- * </p>
- */
-public class MessageFilter {
-	public static final int ANY_SEVERITY = -1;
-
-	/**
-	 * <p>
-	 * Messages matching this severity(s) will be retrieved. One of SeverityEnum XXX_severity
-	 * constants, or ANY_SEVERITY to specify that messages of any severity will be returned. This
-	 * field can be combined with other filter attributes to narrow the selection set further.
-	 * </p>
-	 */
-	private int severity = ANY_SEVERITY;
-
-	/**
-	 * <p>
-	 * The validator which reported the messages that should be returned. All messages which were
-	 * reported using validator matching this validator will be returned. This field can be combined
-	 * with other filter attributes to narrow the selection set further.
-	 * </p>
-	 */
-	private IValidator validator;
-
-	/**
-	 * <p>
-	 * The target object of the messages that should be returned, or null to specify to retrieve
-	 * messages of any target. All messages having a target object matching this object will be
-	 * returned. This field can be combined with other filter attributes to narrow the selection set
-	 * further.
-	 * </p>
-	 */
-	private Object targetObject;
-
-	/**
-	 * @deprecated
-	 */
-	public MessageFilter() {
-		super();
-	}
-
-	/**
-	 * 
-	 * @param aSeverity
-	 * 			Severity of the message
-	 * @param validator
-	 * 			IValidator which reported the message
-	 * @param aTargetObject
-	 * 			Target object of the message
-	 */
-	public MessageFilter(int aSeverity, IValidator validator, Object aTargetObject) {
-		super();
-		severity = aSeverity;
-		this.validator = validator;
-		targetObject = aTargetObject;
-	}
-
-	/**
-	 * @return the severity filter constraint.
-	 */
-	public int getSeverity() {
-		return severity;
-	}
-
-	/**
-	 * @return the target object filter constraint.
-	 */
-	public java.lang.Object getTargetObject() {
-		return targetObject;
-	}
-
-	/**
-	 * @return the validator to filter on.
-	 */
-	public IValidator getValidator() {
-		return validator;
-	}
-
-	/**
-	 * Set the severity filter constraint.
-	 * 
-	 * @param newSeverity
-	 *            severity filter constraint
-	 */
-	public void setSeverity(int newSeverity) {
-		severity = newSeverity;
-	}
-
-	/**
-	 * Set the target object filter constraint.
-	 * 
-	 * @param newTargetObject
-	 *             target object filter constraint
-	 */
-	public void setTargetObject(java.lang.Object newTargetObject) {
-		targetObject = newTargetObject;
-	}
-
-	/**
-	 * Set the validator to return messages for.
-	 * 
-	 * @param validator
-	 *            validator to return messages for
-	 */
-	public void setValidator(IValidator validator) {
-		this.validator = validator;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/ValidationException.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/ValidationException.java
deleted file mode 100644
index c4c6c76..0000000
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/ValidationException.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.core;
-
-
-import java.util.Locale;
-
-import org.eclipse.wst.validation.internal.provisional.core.IMessage;
-
-/**
- * <p>
- * This exception is the only exception which should be thrown by IValidators. The message in this
- * exception must be suitable for showing to the user. All ValidationExceptions will have their
- * message extracted when they're caught, and the message will be shown to the user.
- * 
- * @plannedfor 1.0
- * </p>
- */
-public class ValidationException extends Exception {
-	private Throwable _lowLevelException = null;
-	private IMessage _message = null;
-	private ClassLoader _loader = null;
-	private final static long serialVersionUID = -3387516993124229949L;
-
-	/**
-	 * Constructs a new exception with a given message string. <br>
-	 * <br>
-	 * 
-	 * @param message
-	 *            IMessage, which is Locale-independent, which contains the message to be shown to
-	 *            be shown to the user.
-	 */
-	public ValidationException(IMessage message) {
-		this(message, null);
-	}
-
-	/**
-	 * Constructs a new exception with a given message string, and low-level exception. <br>
-	 * <br>
-	 * 
-	 * @param message
-	 *            IMessage Locale-independent message to be shown to the user.
-	 * @param exception
-	 *            relevant low-level exception, or <code>null</code> if none. <br>
-	 *            &nbsp;&nbsp;&nbsp For example, when a method fails because of a network
-	 *            communications &nbsp;&nbsp;&nbsp problem, this would be the
-	 *            <code>java.io.IOException</code> &nbsp;&nbsp;&nbsp describing the exact nature
-	 *            of the problem.
-	 */
-	public ValidationException(IMessage message, Throwable exception) {
-		super();
-		_message = message;
-		_lowLevelException = exception;
-	}
-
-	/**
-	 * @return the low-level exception associated with this ValidationException.
-	 */
-	public Throwable getAssociatedException() {
-		return _lowLevelException;
-	}
-
-	/**
-	 * @return the IMessage to be shown to the user, or null if this exception should be handled
-	 * internally.
-	 */
-	public IMessage getAssociatedMessage() {
-		return _message;
-	}
-
-	/**
-	 * @return if the IValidator which threw this exception was loaded by a different ClassLoader than the
-	 * framework, this method returns the ClassLoader of the IValidator.
-	 */
-	public ClassLoader getClassLoader() {
-		return _loader;
-	}
-
-	/**
-	 * @return the error message string of this <code>Throwable</code> object if it was
-	 *         {@link java.lang.Throwable#Throwable(String) created}with an error message string;
-	 *         or <code>null</code> if it was {@link java.lang.Throwable#Throwable() created}with
-	 *         no error message.
-	 *  
-	 */
-	public String getMessage() {
-		return _message.getText(getClassLoader());
-	}
-
-	/**
-	 * @param locale
-	 * 			The locale of which to get the message.
-	 * @return the error message string of this <code>Throwable</code> object if it was
-	 *         {@link java.lang.Throwable#Throwable(String) created}with an error message string;
-	 *         or <code>null</code> if it was {@link java.lang.Throwable#Throwable() created}with
-	 *         no error message.
-	 */
-	public String getMessage(Locale locale) {
-		return _message.getText(locale, getClassLoader());
-	}
-
-	/**
-	 * <p>
-	 * If the IValidator which threw this exception was loaded by a different ClassLoader than the
-	 * framework, this method should set the ClassLoader to be the ClassLoader of the IValidator.
-	 * </p>
-	 * @param loader
-	 *  		ClassLoader of the validator
-	 */
-	public void setClassLoader(ClassLoader loader) {
-		_loader = loader;
-	}
-
-	/**
-	 * <p>
-	 * Returns a short description of this throwable object. If this <code>Throwable</code> object
-	 * was {@link java.lang.Throwable#Throwable(String) created}with an error message string, then
-	 * the result is the concatenation of three strings:
-	 * <ul>
-	 * <li>The name of the actual class of this object
-	 * <li>": " (a colon and a space)
-	 * <li>The result of the {@link #getMessage}method for this object
-	 * </ul>
-	 * If this <code>Throwable</code> object was {@link java.lang.Throwable#Throwable() created}
-	 * with no error message string, then the name of the actual class of this object is returned.
-	 * </p>
-	 * 
-	 * @return a string representation of this <code>Throwable</code>.
-	 */
-	public String toString() {
-		return toString(Locale.getDefault());
-	}
-
-	/**
-	 * <p>
-	 * Returns a short description of this throwable object. If this <code>Throwable</code> object
-	 * was {@link java.lang.Throwable#Throwable(String) created}with an error message string, then
-	 * the result is the concatenation of three strings:
-	 * <ul>
-	 * <li>The name of the actual class of this object
-	 * <li>": " (a colon and a space)
-	 * <li>The result of the {@link #getMessage}method for this object
-	 * </ul>
-	 * If this <code>Throwable</code> object was {@link java.lang.Throwable#Throwable() created}
-	 * with no error message string, then the name of the actual class of this object is returned.
-	 * </p>
-	 * 
-	 * @return a string representation of this <code>Throwable</code>.
-	 */
-	public String toString(Locale locale) {
-		String s = getClass().getName();
-		String message = getMessage(locale);
-		return (message != null) ? (s + ": " + message) : s; //$NON-NLS-1$
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/ValidatorLauncher.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/ValidatorLauncher.java
deleted file mode 100644
index 8325e92..0000000
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/ValidatorLauncher.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.core;
-
-import org.eclipse.wst.validation.internal.provisional.core.IReporter;
-import org.eclipse.wst.validation.internal.provisional.core.IValidationContext;
-import org.eclipse.wst.validation.internal.provisional.core.IValidator;
-
-
-
-/**
- * <p>
- * This singleton launches the validation on a single validator. Clients should call this class's
- * <code>start</code> method to begin the validation.
- * </p>
- */
-public class ValidatorLauncher {
-	private static ValidatorLauncher _launcher = null;
-
-	
-	/**
-	 * Default constructor 
-	 */
-	private ValidatorLauncher() {
-		//Default constructor
-	}
-
-	/**
-	 * @return the singleton launcher.
-	 */
-	public static ValidatorLauncher getLauncher() {
-		if (_launcher == null) {
-			_launcher = new ValidatorLauncher();
-		}
-		return _launcher;
-	}
-
-	/**
-	 * <p>
-	 * This method is the launch point of the validation. It runs validation on the validator
-	 * accessed by the IValidationContext. When the validation is complete, each validator may perform resource
-	 * cleanup, if necessary.
-	 * 
-	 * <br>
-	 * <br>
-	 * If <code>helper</code>,<code>validator</code>, or <code>reporter</code> are null,
-	 * validation is not performed. <code>changedFiles</code> may be null, or empty, if a full
-	 * build should be done.
-	 * </p>
-	 * 
-	 * @param helper 
-	 * 			loads an object. 
-	 * @param validator
-	 * 			validator object to launch validation.
-	 * @param reporter
-	 * 			Is an instance of an IReporter interface, which is used for
-	 * interaction with the user.
-	 * @param changedFiles
-	 * 			Is an array of files which have been added, changed, or deleted
-	 * since the last validation. If <code>changedFiles</code> is null, or if it is an empty
-	 * array, then a full validation should be performed. Otherwise, validation on just the files
-	 * listed in the array should performed if the validator supports incremental validation.
-	 */
-	public void start(IValidationContext helper, IValidator validator, IReporter reporter) throws ValidationException {
-		if ((helper == null) || (validator == null) || (reporter == null)) {
-			return;
-		}
-
-		// Can't force each validator to check if it's cancelled or not,
-		// so check for cancellation here. Hopefully the user won't wait
-		// too long.
-		if (reporter.isCancelled()) {
-			return;
-		}
-
-		// If the validator is about to perform a full build, remove all of its previous validation
-		// messages.
-		if ((helper.getURIs() == null) || (helper.getURIs().length == 0)) {
-			reporter.removeAllMessages(validator);
-		}
-
-		validator.validate(helper, reporter);
-		validator.cleanup(reporter);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IMessage.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IMessage.java
deleted file mode 100644
index b53b851..0000000
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IMessage.java
+++ /dev/null
@@ -1,330 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.provisional.core;
-
-
-import java.util.Locale;
-
-/**
- * <p>
- * This interface represents a locale-independent validation message.
- * </p>
- * <p>
- * Given these three values as input, this interface can be queried for the final message string.
- * (i.e., the message with the parameters already substituted in.) Either the default Locale can be
- * used, or the caller can specify a Locale.
- * 
- * @plannedfor 1.0
- * </p>
- * 
- * [issue: CS - The 'IMessage' interface would be simpler without the bundle related details.  I'd like to understand
- * why we can 'precompute' the translated message. Is there some benefit to perform 'late computation' of these messages?
- * How does this compare to the eclipse Marker (as far as I know the Marker's text() is preLocalized).
- * Here's a list of the methods that are related to 'bundle specific' aspects and could be separate out (or designed away)?
- *    
- *   - getId()
- *   - getBundle(...)
- *   - getBundleName()
- *   - getParams()
- *   - getText(Locale)
- *   - getText(ClassLoader)
- *   - getText(Locale, ClassLoader)
- *   - setId(String)
- *   - setBundleName(String)
- *   - setParams(String[])
- * ]
- * 
- *   - void setAttribute(String attributeName, Object value)
- *   - Object getAttribute(String attributeName);
- * ]
- */
-public interface IMessage {
-	public static final int OFFSET_UNSET = -1; // see getLength(), getOffset()
-	public static final int LINENO_UNSET = 0;
-	/**
-	 * Typically used to specify error messages.
-	 */
-	public static final int HIGH_SEVERITY = 0x0001;
-	/**
-	 * Typically used to specify warning messages.
-	 */
-	public static final int NORMAL_SEVERITY = 0x0002;
-	/**
-	 * Typically used to specify information messages.
-	 */
-	public static final int LOW_SEVERITY = 0x0004;
-	/**
-	 * Specify high (error) and normal (warning) messages. Typically used with a MessageFilter, to
-	 * filter out information messages.
-	 */
-	public static final int ERROR_AND_WARNING = HIGH_SEVERITY | NORMAL_SEVERITY;
-	/**
-	 * Specify all types of messages. Typically used with a MessageFilter.
-	 */
-	public static final int ALL_MESSAGES = ERROR_AND_WARNING | LOW_SEVERITY;
-
-	/**
-	 * @return the name of the bundle which this message is contained in.
-	 */
-	public String getBundleName();
-
-	/**
-	 * <p>
-	 * To support removal of a subset of validation messages, an IValidator may assign group names
-	 * to IMessages. An IMessage subset will be identified by the name of its group. Default (null)
-	 * means no group.
-	 * </p>
-	 * @return the name of the group to which the message belongs.
-	 */
-	public String getGroupName();
-
-	/**
-	 * <p>
-	 * Returns the id of the message. Message ids are used as the constants in property bundles
-	 * which localize the description of the message in a locale-independent fashion. The id is the
-	 * key, in the resource bundle, which identifies the string to be loaded. The id may not be null
-	 * or the empty string.
-	 * </p>
-	 * @return the id of the message
-	 */
-	public java.lang.String getId();
-
-	/**
-	 * @return the length of the problem area, starting from the offset. If unset, value =
-	 * IMessage.OFFSET_UNSET.
-	 * 
-	 * @see #getOffset()
-	 */
-	public int getLength();
-
-	/**
-	 * <p>
-	 * If there is a target object associated with this IMessage, and that target object is a file,
-	 * then an optional line number may be set. The line number identifies the location of the
-	 * problem identified by this message. If no line number has been set, #LINENO_UNSET will be
-	 * returned.
-	 * </p>
-	 * @return line number of the location of the problem.
-	 * 
-	 */
-	public int getLineNumber();
-
-	/**
-	 * <p>
-	 * Returns the offset of the message. If unset, value = IMessage.OFFSET_UNSET. For example, if
-	 * the java compiler were a validator, and it reported that a variable name was unknown, offset
-	 * would identify the position of the first character of the unknown variable. (The position is
-	 * identified by the number of characters from the start of the file.)
-	 * </p>
-	 * 
-	 * @return offset of the message
-	 */
-	public int getOffset();
-
-	/**
-	 * <p>
-	 * Returns the parameters of the message. Message parameters are the values which are
-	 * substituted into parameter slots in localized message text ddscriptions.
-	 * </p>
-	 * 
-	 * @return parameters of the message
-	 */
-	public java.lang.String[] getParams();
-
-	/**
-	 * <p>
-	 * Returns the severity level of the message. One of SeverityEnum constants.
-	 * 
-	 * @see IMessage#HIGH_SEVERITY
-	 * @see IMessage#NORMAL_SEVERITY
-	 * @see IMessage#LOW_SEVERITY
-	 * </p>
-	 * 
-	 * @return the severity level of the message
-	 */
-	public int getSeverity();
-
-	/**
-	 * <p>
-	 * Return the object that this IMessage is reporting the problem against, if any. null will be
-	 * returned if this is a general message which does not apply to a particular object; for
-	 * example, "internal error".
-	 * </p>
-	 * 
-	 * @return the target object for the message
-	 */
-	public Object getTargetObject();
-
-	/**
-	 * @return a text representation of this message formatted in the default Locale, with the
-	 * bundle loaded by the default ClassLoader.
-	 */
-	public java.lang.String getText();
-
-	/**
-	 * @param classLoader 
-	 * 				The ClassLoader which will be used to load the ResourceBundle.
-	 *            
-	 * @return a text representation of this message formatted in the default locale, with the
-	 * bundle loaded by the specified ClassLoader.
-	 */
-	public java.lang.String getText(ClassLoader classLoader);
-
-	/**
-	 * @param locale
-	 *            The locale to translate the message text into.
-	 *            
-	 * @return a text representation of this message formatted in the specified locale, with the
-	 * bundle loaded by the default ClassLoader.
-	 */
-	public java.lang.String getText(Locale locale);
-
-	/**
-	 * @param locale
-	 *            The locale to translate the message text into.
-	 * @param classLoader
-	 *            The ClassLoader which will be used to load the ResourceBundle.
-	 *            
-	 * @return a text representation of this message formatted in the specified locale, with the
-	 * bundle loaded by the specified ClassLoader.
-	 */
-	public java.lang.String getText(Locale locale, ClassLoader classLoader);
-	
-	/**
-	 * Provides a way to store some additional attributes that a message would like to store
-	 * that can used by some other parties that are interested in those attribute values. Basically
-	 * a convienince to pass object values around that can consumed by other Objects it they need it
-	 * @param attributeName
-	 * @return an Object basically the value associated with the object name.
-	 */
-	
-	public Object getAttribute(String attributeName);
-	
-	/**
-	 * Set the attributeName and value as key value pair
-	 * @see getAttribute(String attributeName).
-	 * @param attributeName
-	 */
-	
-	void setAttribute(String attributeName, Object value);
-	   
-
-	/**
-	 * Set the name of the bundle which this message is contained in.
-	 * 
-	 * @param bundleName 
-	 * 			Name of the bundle which contains the message.
-	 */
-	public void setBundleName(String bundleName);
-
-	/**
-	 * <p>
-	 * To support removal of a subset of validation messages, an IValidator may assign group names
-	 * to IMessages. An IMessage subset will be identified by the name of its group. Default (null)
-	 * means no group.
-	 * </p>
-	 * 
-	 * @param name
-	 * 			Name of the group.
-	 */
-	public void setGroupName(String name);
-
-	/**
-	 * <p>
-	 * Set the id of the message. Message ids are used as the constants in property bundles which
-	 * localize the description of the message in a locale-independent fashion. The id is the key,
-	 * in the resource bundle, which identifies the string to be loaded. The id may not be null or
-	 * the empty string.
-	 * </p>
-	 * 
-	 * @param newId
-	 *            Id of the message.
-	 */
-	public void setId(java.lang.String newId);
-
-	/**
-	 * <p>
-	 * Sets the length of the problem, starting from the offset. If unset, value =
-	 * IMessage.OFFSET_UNSET.
-	 * 
-	 * @see #setOffset(int)
-	 * </p>
-	 * 
-	 * @param length 
-	 *			sets the length 		
-	 */
-	public void setLength(int length);
-
-	/**
-	 * <p>
-	 * If there is a target object associated with this IMessage, and that target object is a file,
-	 * then an optional line number may be set. The line number identifies the location of the
-	 * problem identified by this message. To indicate no line number, use #LINENO_UNSET.
-	 * </p>
-	 * @param lineNumber 
-	 *			sets the line no. 	
-	 */
-	public void setLineNo(int lineNumber);
-
-	/**
-	 * <p>
-	 * Sets the offset of the message. If unset, value = IMessage.OFFSET_UNSET. For example, if the
-	 * java compiler were a validator, and it reported that a variable name was unknown, offset
-	 * would identify the position of the first character of the unknown variable. (The position is
-	 * identified by the number of characters from the start of the file.)
-	 * </p>
-	 * @param offset 
-	 *			sets the offset of the message.
-	 */
-	public void setOffset(int offset);
-
-	/**
-	 * <p>
-	 * Sets the parameters of the message. Message parameters are the values which are substituted
-	 * into parameter slots in localized message text descriptions.
-	 * </p>
-	 * <p>
-	 * For example, if getId() returns "MY_ID", then the ResourceBundle identified by
-	 * getBundleName() is searched for the message named "MY_ID", and if found,
-	 * </p>
-	 * 
-	 * @see java.text.MessageFormat#format(String, Object[]) is invoked on the message, with
-	 *      <code>newParams</code> passed in as the Object[].
-	 * @param newParams
-	 *            parameters of the message.
-	 */
-	public void setParams(java.lang.String[] newParams);
-
-	/**
-	 * Sets the severity level of the message. One of SeverityEnum constants.
-	 * 
-	 * @see IMessage#HIGH_SEVERITY
-	 * @see IMessage#NORMAL_SEVERITY
-	 * @see IMessage#LOW_SEVERITY
-	 * 
-	 * @param newSeverity
-	 *            severity level of the message
-	 */
-	public void setSeverity(int newSeverity);
-
-	/**
-	 * <p>
-	 * Associate this IMessage with the object that has the problem. A null value is permitted. If a
-	 * message is applicable to one object, then this value should be set. Otherwise, the default
-	 * value (null) should be kept. Given this target object, it should be possible to calculate the
-	 * exact location of the problem.
-	 * </p>
-	 * 
-	 * @param obj
-	 *         The object that has the problem.
-	 */
-	public void setTargetObject(Object obj);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IReporter.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IReporter.java
deleted file mode 100644
index 95f29a1..0000000
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IReporter.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.provisional.core;
-
-import java.util.List;
-
-
-
-
-/*
- * CCM - Reporter is now passed locale-independent messages.
- *       Messages should only be translated to a locale upon access.
- *       Or in special locale-dependent reporter implementations (console logger).
- */
-
-/**
- * The interface used by IValidator's to report messages. The implementation of the IReporter could
- * simply log the messages to stdout, a file, or retain them in a buffer for later access by a user
- * interface.
- * 
- * Reporter implementations should keep non-localized versions of their messages
- * 
- * Any messages which need to be displayed to the user are done through this class, and if the user
- * cancels the current function, this class is the one which registers the cancellation.
- * 
- * The IReporter instance is created at the time validation begins and ends when validation is complete.
- * There is only one IReporter instance created for all validators that are run on a IResource. The IResource
- * provides a way to get messages put out each validator and add and delete messages for one validator
- * at a time. 
- * ] 
- */
-public interface IReporter  {
-	/**
-	 * <p>
-	 * Add a locale-independent validation message. It will be displayed later, with all of the
-	 * other validation messages.
-	 * </p>
-	 * <p>
-	 * The IValidator passed in is needed for incremental validation (when a message needs to be
-	 * removed, one validator should not remove messages entered by another validator.) The
-	 * validator is also queried for information about its resource bundle, to enable support for
-	 * localization of messages in a client-server environment.
-	 * </p>
-	 * <p>
-	 * Both parameters must not be null.
-	 * </p>
-	 * @param origin
-	 *            The validator which is the source of the message.
-	 * @param message
-	 *            A message to be reported
-	 * @exception MessageLimitException
-	 *                is thrown when the total number of messages reported exceeds the maximum
-	 *                allowed.
-	 * [issue: LM - This exception seems questionable to me. Why do validators need to know how
-	 *  to handle a MessageLimitException? Seems to me that this is a validation framework
-	 *  specific issue and that client validators shouldn't know about this at all. ]
-	 */
-	public abstract void addMessage(IValidator origin, IMessage message) throws MessageLimitException;
-
-	/**
-	 * <p>
-	 * Show a text representation of this message, formatted in the default Locale, to the user
-	 * immediately. This message indicates which subtask is currently being processed. The message
-	 * is not stored. The subtask message in this context is the subtask in a IProgressMontior 
-	 * 
-	 * @see subTask(String name) in IProgressMonitor
-	 * </p>
-	 * <p>
-	 * Both parameters must not be null. 
-	 * </p>
-	 * 
-	 * @param IValidator
-	 *            validator The validator issuing the subtask message.
-	 * @param IMessage
-	 *            message The message to be displayed to the user.
-	 *                       
-	 */
-	public abstract void displaySubtask(IValidator validator, IMessage message);
-
-	/**
-	 * @return the message access interface to this reporter, or null if message access is not
-	 * supported.
-	 *     
-	 */
-	public List getMessages();
-
-	/**
-	 * <p>
-	 * Return true if the user cancelled validation, and false otherwise. This method should be
-	 * called by IValidators periodically, because no event is fired to notify IValidators that the
-	 * user cancelled validation. If a validator does not check this method, a cancellation request
-	 * is ignored.
-	 * </p>
-	 * 
-	 * @return true if the user cancelled validation, and false otherwise.
-	 *  
-	 */
-	public abstract boolean isCancelled();
-
-	/**
-	 * <p>
-	 * Remove all validation messages entered by the identified validator. This method is provided
-	 * for incremental validation. 
-	 * </p>
-	 * <p>
-	 * The IValidator parameter must not be null.
-	 * </p>
-	 * @param origin
-	 * 			originator validator of the message.  
-	 */
-	public abstract void removeAllMessages(IValidator origin);
-
-	/**
-	 * Remove all validation messages, entered by the identified validator, pertaining to the Object
-	 * provided. This method is provided for incremental validation. <br>
-	 * <br>
-	 * If <code>object</code> is null, then this method should remove all messages owned by the
-	 * validator. (i.e., the same behaviour as the removeAllMessages(IValidator) method.) <br>
-	 * <br>
-	 * <p>
-	 * The IValidator parameter must not be null.
-	 * </p>
-	 * @param origin
-	 * 			originator validator of the message.
-	 * @param object
-	 * 			Object to which the message belongs. Object is the target object that was set on the IMessage
-	 * when adding the message as problem marker.
-	 * 
- 	 */
-	public abstract void removeAllMessages(IValidator origin, Object object);
-
-	/**
-	 * To support removal of a subset of validation messages, an IValidator may assign group names
-	 * to IMessages. An IMessage subset will be identified by the name of its group. This method
-	 * will remove only the IMessage's that are in the group identified by groupName. <br>
-	 * <br>
-	 * <br>
-	 * 
-	 * The IValidator parameter must not be null. <br>
-	 * <br>
-	 * 
-	 * If <code>object</code> is null, then this method should remove all messages owned by the
-	 * validator. (i.e., the same behaviour as the removeAllMessages(IValidator) method.)
-	 * 
-	 * If groupName is null, that's the same as no group (i.e., the same behaviour as the
-	 * <code>removeAllMessages(IValidator, Object)</code> method.) <br>
-	 * 
-	 * @param origin
-	 * 			originator validator of the message.
-	 * @param object
-	 * 			Object to which the message belongs. 
-	 * @param groupName
-	 * 			name of the group to which the message belongs. 
-	 */
-	public void removeMessageSubset(IValidator validator, Object obj, String groupName);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidationContext.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidationContext.java
deleted file mode 100644
index 135a80f..0000000
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidationContext.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.provisional.core;
-
-
-
-/**
- * <p>
- * This class is used to to separate the IValidator from the model loading. A model 
- * is a group of object(s) that must follow some rules.
- * </p>
- * <p>
- * The model is loaded differently depending on whether the validator is running in 
- * UI or headless context. If the <code>loadModel</code> method was a method on the IValidator, 
- * then there would need to be two versions of validators, one for headless and one for 
- * UI. Because <code>loadModel</code> is separate from the IValidator, we provide 
- * two different IHelpers instead, and ship the one specific to the environment.
- * </p>
- * <p>
- * Each IValidationContext implementation loads a specific model as identified by a String
- * <code>symbolicName</code>. The symbolicName can be any value except null or the 
- * empty string. Each validator identifies the symbolic names which it needs, and the
- * type of model which needs to be returned when that symbolic name is loaded via a 
- * <code>loadModel</code> method. An IValidationContext can support more than one IValidator; 
- * the helper needs to support every model that each validator needs.
- * </p>
- */
-public interface IValidationContext {
-	/**
-	 * <p>
-	 * Load the model identified by <code>symbolicName</code>.<code>symbolicName</code> 
-	 * must not be null or the empty string if the validator needs to be run in both 
-	 * Headless and UI.
-	 * 
-	 * The symbolicName is a string name that is registered in the implementation of the
-	 * IValidatorContext. For an example our internal implementation of the loadModel use
-	 * method names for symbolicNames to load the model object to be validated. Users can
-	 * use their own model load mechanism.
-	 * @see <code>WorkbenchContext</code>
-	 * 
-	 * </p>
-	 * @plannedfor 1.0
-	 */
-	public Object loadModel(String symbolicName);
-
-	/**
-	 * <p>
-	 * Load the model identified by <code>symbolicName</code> and <code>parms</code>.
-	 * <code>symbolicName</code> must not be null or the empty string if the validator 
-	 * needs to be run in both Headless and UI. If <code>parms</code> is null then this
-	 * method behaves the same as
-	 * 
-	 * @link #loadModel(String).
-	 * 
-	 * This method differs from
-	 * @link #loadModel(String) because it takes parameters, from the IValidator, which 
-	 * 		 are available only at runtime. If you need to pass a live object to the IValidationContext, 
-	 * 		 this is the loadModel method to use.
-	 * </p>
-	 * @param symbolicName String identifier for model
-	 * @param parms 	   parms list of parameters that the model takes for invocation
-	 * 
-	 * [issue : CS - It's not at all clear how these parameters would get passed into a helper.  I'd suggest
-	 * providing getProperty() and setProperty() methods on the class to allow contextual information to be 
-	 * supplied and queried in a generic manner.]
-	 */
-	public Object loadModel(String symbolicName, Object[] parms);
-	
-	/**
-	 * @return a string array with the list of URI's that need to be validated in the
-	 * case of Incremental build
-	 */
-	
-	public String[] getURIs();
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidator.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidator.java
deleted file mode 100644
index 37f740e..0000000
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidator.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.provisional.core;
-
-import org.eclipse.wst.validation.internal.core.ValidationException;
-
-/**
- * This is the base interface for all Validators. A Validator is a class which verifies that objects
- * follow some rules. For example, in a MOF model which represents an EJB jar, the EJB specification
- * determines the rules. <br>
- * <br>
- * A validator can perform full validation or incremental validation. All validators must implement
- * full validation but incremental validation is optional. <br>
- * <br>
- * Each validator must not be tied to any particular workbench implementation. <br>
- * <br>
- * A validator's verification starts when the ValidatorLauncher singleton calls
- * <code>validate</code>.
- * 
- * [issue: LM - This interface will be implemented by clients. This should be considered a candidate for
- *  an abstract class. ]   
- */
-public interface IValidator {
-	/**
-	 * <p>
-	 * Perform any resource cleanup once validation is complete. If cleanup will take some time, the
-	 * IValidator should report subtask information to the user through the IReporter parameter. The
-	 * IReporter parameter will not be null.
-	 * </p>
-	 * @param reporter used for the interaction with the user
-	 * @plannedfor WTP 1.0
-	 * 
-	 * [issue : CS - Perhaps the IValidator should be required to provide a 'name' that can be used describe 
-	 * the running validation 'Job'.  Then the framework could automatically say something like 'XYZ validator : cleanup'.
-	 * Relying on the IValidator to provide subtask information seems error prone.]
-	 * [issue: LM - Is the cleanup method necessary? Can the framework put a requirement that client validators 'clean up'
-	 *  before returning from the validate method? ] 
-	 */
-	public void cleanup(IReporter reporter);
-
-	/**
-	 * This is the method which performs the validation on the objects. <br>
-	 * <br>
-	 * <code>helper</code> and <code>reporter</code> may not be null. <code>changedFiles</code>
-	 * may be null, if a full build is desired. <br>
-	 * <br>
-	 * @param helper 
-	 * 			loads an object. 
-	 * @param reporter
-	 * 			Is an instance of an IReporter interface, which is used for
-	 * interaction with the user.
-	 * @param changedFiles
-	 * 			Is an array of files which have been added, changed, or deleted
-	 * since the last validation. If <code>changedFiles</code> is null, or if it is an empty
-	 * array, then a full validation should be performed. Otherwise, validation on just the files
-	 * listed in the array should performed if the validator supports incremental validation.
-	 * 
-	 * [issue : CS - I'm curious to understand why the validator is not invoked directly on a file.  It seems it should be the
-	 * domain of another API to manage manage incremental file changes and triggering validations accordingly. 
-	 * Do we have a current use case in WTP where the validator does anything more validate a file from the changedFiles list?]
-	 */
-	public void validate(IValidationContext helper, IReporter reporter) throws ValidationException;
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/MessageLimitException.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/MessageLimitException.java
deleted file mode 100644
index 47f61fc..0000000
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/MessageLimitException.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.provisional.core;
-
-
-/**
- * This exception is thrown by
- * 
- * @see IReporter#addMessage(IValidator, IMessage) method if no more messages can be reported
- *      because the maximum number of messages has been reported.
- * [issue: LM - Going along with my comment on the addMessage method in IReporter I 
- *  think this class should be internal to the validation framework.
- *  I don't think there's a need for this class to be exposed to clients. If too many
- *  messages are added the framework should handle this without notifying the client
- *  validator. ]
- */
-public class MessageLimitException extends RuntimeException {
-	private final static long serialVersionUID = -7034897190745766940L;
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/xsds/referencialFileExtSchema.exsd b/plugins/org.eclipse.wst.validation/xsds/referencialFileExtSchema.exsd
deleted file mode 100644
index a30b719..0000000
--- a/plugins/org.eclipse.wst.validation/xsds/referencialFileExtSchema.exsd
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.wst.validation">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.wst.validation" id="referencialFileValidator" name="Referencial File Validator"/>
-      </appInfo>
-      <documentation>
-         This extension point is used for referential file validation. This extension point should be extended if you have files that reference other files and would like the validation on referenced files to run when the validation on the referencing file is run. The Post Validator operation that is used by this extension point expects a flat list of files to run validation on referenced files.
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <sequence>
-            <element ref="referencialFileValidator"/>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  a fully qualified identifier of the target extension point
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  an optional identifier of the extension instance
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  an optional name of the extension instance
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="referencialFileValidator">
-      <complexType>
-         <sequence>
-            <element ref="run"/>
-         </sequence>
-         <attribute name="id" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="run">
-      <complexType>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         &lt;b&gt;This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.&lt;/b&gt;
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;
-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 &lt;a
-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
-      </documentation>
-   </annotation>
-
-</schema>
diff --git a/plugins/org.eclipse.wst.validation/xsds/validationSelectionHandler.exsd b/plugins/org.eclipse.wst.validation/xsds/validationSelectionHandler.exsd
deleted file mode 100644
index 9e20f4a..0000000
--- a/plugins/org.eclipse.wst.validation/xsds/validationSelectionHandler.exsd
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.wst.validation">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.wst.validation" id="validationSelectionHandler" name="Validation Selection Handler"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <sequence>
-            <element ref="validationSelectionHandler" minOccurs="1" maxOccurs="unbounded"/>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  a fully qualified identifier of the target extension point
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  an optional identifier of the extension instance
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  an optional name of the extension instance
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="validationSelectionHandler">
-      <complexType>
-         <attribute name="id" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="handlerClass" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="selectionType" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         &lt;b&gt;This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.&lt;/b&gt;
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;
-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 &lt;a
-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
-      </documentation>
-   </annotation>
-
-</schema>
diff --git a/plugins/org.eclipse.wst.validation/xsds/validatorExtSchema.exsd b/plugins/org.eclipse.wst.validation/xsds/validatorExtSchema.exsd
deleted file mode 100644
index 0451696..0000000
--- a/plugins/org.eclipse.wst.validation/xsds/validatorExtSchema.exsd
+++ /dev/null
@@ -1,284 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>

-<!-- Schema file written by PDE -->

-<schema targetNamespace="org.eclipse.wst.validation">

-<annotation>

-      <appInfo>

-         <meta.schema plugin="org.eclipse.wst.validation" id="validator" name="Validator"/>

-      </appInfo>

-      <documentation>

-         This extension point give the ability to create a new validator that can validate resources in a Java Project. The validator needs to registered for a given nature of the project for it to run on that project. The user can specifiy file filters to filter out files that need to be validated. The new validator registered by the project nature on the project can be run manually or incrementally if  Auto Build is turned on, during incremental builds the changed delta of files are only validated if those files are part of the validation filters specified.

-      </documentation>

-   </annotation>

-

-   <element name="extension">

-      <complexType>

-         <sequence>

-            <element ref="validator"/>

-         </sequence>

-         <attribute name="point" type="string" use="required">

-            <annotation>

-               <documentation>

-                  a fully qualified identifier of the target extension point

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="id" type="string" use="required">

-            <annotation>

-               <documentation>

-                  an optional identifier of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string" use="required">

-            <annotation>

-               <documentation>

-                  an optional name of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="validator">

-      <complexType>

-         <sequence>

-            <element ref="projectNature" minOccurs="1" maxOccurs="unbounded"/>

-            <element ref="filter" minOccurs="1" maxOccurs="unbounded"/>

-            <element ref="helper"/>

-            <element ref="dependentValidator" minOccurs="0" maxOccurs="1"/>

-            <element ref="run"/>

-            <element ref="markerId" minOccurs="0" maxOccurs="1"/>

-         </sequence>

-         <attribute name="to" type="string">

-            <annotation>

-               <documentation>

-                  Optional migration tag

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="from" type="string">

-            <annotation>

-               <documentation>

-                  Optional migration tag

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="projectNature">

-      <complexType>

-         <sequence>

-         </sequence>

-         <attribute name="id" type="string" use="required">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="include" type="boolean">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="filter">

-      <complexType>

-         <attribute name="objectClass" type="string" use="required">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="nameFilter" type="string" use="required">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="caseSensitive" type="boolean">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="action" type="string">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="helper">

-      <complexType>

-         <attribute name="class" type="string" use="required">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="dependentValidator">

-      <complexType>

-         <attribute name="depValValue" type="boolean">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="run">

-      <complexType>

-         <attribute name="class" type="string" use="required">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="incremental" type="boolean">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="enabled" type="boolean">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="fullBuild" type="boolean">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="async" type="boolean">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="markerId">

-      <annotation>

-         <documentation>

-            The markerId element is is used to get a custom problem marker for the custom validator implemented using this extension point

-

-This markerId element also needs a corresponding problemMarker extension to be defined bythis validator with the same Id as the makerIdValue for the validator to have its own marker type. Here is an example of the a problemMarker extension defined for a markerIdValue &quot;FooMarker&quot;

-

- &lt;extension

-         id=&quot;FooMarker&quot;

-         name=&quot;%EJB_VALIDATION_PROBLEMMARKER_NAME&quot;

-         point=&quot;org.eclipse.core.resources.markers&quot;&gt;

-      &lt;super

-            type=&quot;org.eclipse.wst.validation.problemmarker&quot;&gt;

-      &lt;/super&gt;

-      &lt;persistent

-            value=&quot;true&quot;&gt;

-      &lt;/persistent&gt;

-      &lt;attribute

-            name=&quot;owner&quot;&gt;

-      &lt;/attribute&gt;

-      &lt;attribute

-            name=&quot;validationSeverity&quot;&gt;

-      &lt;/attribute&gt;

-      &lt;attribute

-            name=&quot;targetObject&quot;&gt;

-      &lt;/attribute&gt;

-      &lt;attribute

-            name=&quot;groupName&quot;&gt;

-      &lt;/attribute&gt;

-      &lt;attribute

-            name=&quot;messageId&quot;&gt;

-      &lt;/attribute&gt;

-   &lt;/extension&gt;

-   

-   Without a problemMarker extension defined, the customer validator will use the base Validation Message problemMarker type.

-         </documentation>

-      </annotation>

-      <complexType>

-         <attribute name="markerIdValue" type="string">

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="since"/>

-      </appInfo>

-      <documentation>

-         &lt;b&gt;This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.&lt;/b&gt;

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="examples"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="apiInfo"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="implementation"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="copyright"/>

-      </appInfo>

-      <documentation>

-         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;

-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 &lt;a

-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

-      </documentation>

-   </annotation>

-

-</schema>