This commit was manufactured by cvs2svn to create branch 'R3_0_4_patches'.
diff --git a/features/org.eclipse.wst.common_core.feature.patch/buildnotes_org.eclipse.wst.common_core.feature.patch.html b/features/org.eclipse.wst.common_core.feature.patch/buildnotes_org.eclipse.wst.common_core.feature.patch.html
index c1c0b85..0995446 100644
--- a/features/org.eclipse.wst.common_core.feature.patch/buildnotes_org.eclipse.wst.common_core.feature.patch.html
+++ b/features/org.eclipse.wst.common_core.feature.patch/buildnotes_org.eclipse.wst.common_core.feature.patch.html
@@ -2,26 +2,32 @@
 <html>
 
 <head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Build" content="Build">
-   <title>WTP 1.5.5 Patches</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="Build" content="Build">
+<title>WTP 3.0.1 Patches</title>
 </head>
 
 <body>
 
-<h1>WTP 1.5.5 Patches</h1>
+<h1>WTP 3.0.1 Patches</h1>
 
 <h2>org.eclipse.wst.common_core.feature</h2>
 
-<p>Bug <a href='https://bugs.eclipse.org/bugs/show_bug.cgi?id=203155'>203155</a>. ISynchronizerExtenders not invoked if ResourceDelta contains changes from more than 1 project</p>
-<p>Bug <a href='https://bugs.eclipse.org/bugs/show_bug.cgi?id=206463'>206463</a>. Threading issues with WebServicesNode Job</p>
-<p>Bug <a href='https://bugs.eclipse.org/bugs/show_bug.cgi?id=211115'>211115</a>. J2EE FlexProjDeployable getURI(IModule module) returns an incorrect URI</p>
-<p>Bug <a href='https://bugs.eclipse.org/bugs/show_bug.cgi?id=209562'>209562</a>. J2EE DependencyGraphManager.metadataChanged() causing long delays</p>
-<p>Bug <a href='https://bugs.eclipse.org/bugs/show_bug.cgi?id=215538'>215538</a>. Several problems with J2EE and Web Dependencies properties pages</p>
-<p>Bug <a href='https://bugs.eclipse.org/bugs/show_bug.cgi?id=229110'>229110</a>. ComponentUtilities.findFile() may cause ClassCastException</p>
-<p>Bug <a href='https://bugs.eclipse.org/bugs/show_bug.cgi?id=229478'>229478</a>. ComponentSaveStrategyImpl needs to respect deploy paths</p>
-<p>Bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=239309">239309</a>. Deadlock</p>
-<p>Bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=246872">246872</a>. Duplicated warnings from validation</p>
-<p>Bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=237092">237092</a>. ModuleCoreValidator deadlock</p>
-<p>Bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=246776">246776</a>. WebLibs with spaces fail</p>
-</body></html>
\ No newline at end of file
+<p>Bug <a
+	href='https://bugs.eclipse.org/bugs/show_bug.cgi?id=243679'>243679</a>.
+NPE in ValidationRegistryReade</p>
+<p>Bug <a
+	href='https://bugs.eclipse.org/bugs/show_bug.cgi?id=244086'>244086</a>.
+Build path errors after restart</p>
+<p>Bug <a
+	href='https://bugs.eclipse.org/bugs/show_bug.cgi?id=243377'>243377</a>.
+validationStarting/Finishing not called properly during clean/auto build</p>
+<p>Bug <a
+	href='https://bugs.eclipse.org/bugs/show_bug.cgi?id=245745'>245745</a>.
+NullPointerException in
+FacetedProjectWorkingCopy.isFacetAvailable(IProjectFacetVersion)</p>
+<p>Bug <a
+	href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=246287">246287</a>
+memory leak in DependencyIndex</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.wst.common_core.feature.patch/feature.properties b/features/org.eclipse.wst.common_core.feature.patch/feature.properties
index e5aaee9..fb0d11b 100644
--- a/features/org.eclipse.wst.common_core.feature.patch/feature.properties
+++ b/features/org.eclipse.wst.common_core.feature.patch/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2008 IBM Corporation and others.
 # All rights reserved. This program and 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,7 +15,7 @@
 # This file should be translated.
 
 # "featureName" property - name of the feature
-featureName=WTP Patch for org.eclipse.wst.common_core.feature
+featureName=WTP Patches for org.eclipse.wst.common_core.feature
 
 # "providerName" property - name of the company that provides the feature
 providerName=Eclipse.org
@@ -25,27 +25,17 @@
 
 # "description" property - description of the feature
 description=\
-Contains fixes for the following plugin(s):\n\
-        org.eclipse.wst.common.emfworkbench.integration\n\
+Contains fixes described in the following bugillia(s):\n\
 \n\
-The fixes are described in the following bugzilla entries:\n\
+Bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=243679 NPE in ValidationRegistryReade\n\
+Bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=244086 Build path errors after restart\n\
+Bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=243377 validationStarting/Finishing not called properly during clean/auto build\n\
+Bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=245745 NullPointerException in FacetedProjectWorkingCopy.isFacetAvailable(IProjectFacetVersion)\n\
+Bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=246287 memory leak in DependencyIndex\n\
 \n\
-Bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=203155 ISynchronizerExtenders not invoked if ResourceDelta contains changes from more than 1 project  \n\
-Bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=206463 Threading issues with WebServicesNode Job\n\
-Bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=211115 J2EE FlexProjDeployable getURI(IModule module) returns an incorrect URI\n\
-Bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=209562 DependencyGraphManager.metadataChanged() causing long delays\n\
-Bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=215538 Several problems with J2EE and Web Dependencies properties pages\n\
-Bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=229110 ComponentUtilities.findFile() may cause ClassCastException\n\
-Bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=229478 ComponentSaveStrategyImpl needs to respect deploy paths\n\
-Bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=239309 Deadlock\n\
-Bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=246872 Duplicated warnings from validation\n\
-Bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=237092 ModuleCoreValidator deadlock\n\
-Bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=246776 WebLibs with spaces fail\n\
-\n\
-
 # "copyright" property - text of the "Feature Update Copyright"
 copyright=\
-Copyright (c) 2007 IBM Corporation and others.\n\
+Copyright (c) 2008 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\
@@ -63,7 +53,7 @@
 # should be plain text version of license agreement pointed to be "licenseURL"
 license=\
 ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
-September 27, 2007\n\
+September, 2008\n\
 \n\
 Usage Of Content\n\
 \n\
diff --git a/features/org.eclipse.wst.common_core.feature.patch/feature.xml b/features/org.eclipse.wst.common_core.feature.patch/feature.xml
index a2318dd..ca95854 100644
--- a/features/org.eclipse.wst.common_core.feature.patch/feature.xml
+++ b/features/org.eclipse.wst.common_core.feature.patch/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.common_core.feature.patch"
       label="%featureName"
-      version="1.5.5.qualifier"
+      version="3.0.1.qualifier"
       provider-name="%providerName">
 
    <description>
@@ -18,18 +18,19 @@
    </license>
 
    <requires>
-      <import feature="org.eclipse.wst.common_core.feature" version="1.5.5.v200708010505--AXrVWgWbmEdPjw" patch="true"/>
+      <import feature="org.eclipse.wst.common_core.feature" version="3.0.1.v200807220139-7C7_EV6E_EkMNrNZWGV9bi" patch="true"/>
    </requires>
 
+
    <plugin
-         id="org.eclipse.wst.validation"
+         id="org.eclipse.wst.common.project.facet.core"
          download-size="0"
          install-size="0"
          version="0.0.0"
          unpack="false"/>
 
    <plugin
-         id="org.eclipse.wst.common.emfworkbench.integration"
+         id="org.eclipse.wst.validation"
          download-size="0"
          install-size="0"
          version="0.0.0"
@@ -40,6 +41,6 @@
          download-size="0"
          install-size="0"
          version="0.0.0"
-         unpack="false"/>         
-
+         unpack="false"/>
+         
 </feature>
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/.classpath b/plugins/org.eclipse.wst.common.emfworkbench.integration/.classpath
deleted file mode 100644
index 377edbf..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/.classpath
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<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="output" path="bin"/>
-</classpath>
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/.cvsignore b/plugins/org.eclipse.wst.common.emfworkbench.integration/.cvsignore
deleted file mode 100644
index 47e4670..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/.cvsignore
+++ /dev/null
@@ -1,7 +0,0 @@
-bin
-temp.folder
-build.xml
-emfworkbenchedit.jar
-@dot
-src.zip
-javaCompiler...args
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/.project b/plugins/org.eclipse.wst.common.emfworkbench.integration/.project
deleted file mode 100644
index afef01a..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.wst.common.emfworkbench.integration</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.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
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
deleted file mode 100644
index ced1791..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,24 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.wst.common.emfworkbench.integration; singleton:=true
-Bundle-Version: 1.1.7.qualifier
-Bundle-Activator: org.eclipse.wst.common.internal.emfworkbench.integration.EMFWorkbenchEditPlugin
-Bundle-Vendor: %pluginVendor
-Bundle-Localization: plugin
-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.0,1.2.0)",
- org.eclipse.jem.util;bundle-version="[1.2.0,1.3.0)",
- org.eclipse.emf.edit;bundle-version="[2.2.0,2.3.0)",
- org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,2.3.0)",
- org.eclipse.wst.common.emf;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.xsd;bundle-version="[2.2.0,2.3.0)",
- org.eclipse.wst.validation;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.wst.common.project.facet.core;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.core.expressions;bundle-version="[3.2.0,4.0.0)"
-Eclipse-AutoStart: true
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/about.html b/plugins/org.eclipse.wst.common.emfworkbench.integration/about.html
deleted file mode 100644
index 4ec5989..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/about.html
+++ /dev/null
@@ -1,34 +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">
-
-<H3>About This Content</H3>
-
-<P>May 2, 2006</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/build.properties b/plugins/org.eclipse.wst.common.emfworkbench.integration/build.properties
deleted file mode 100644
index a288ad7..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/build.properties
+++ /dev/null
@@ -1,19 +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
-###############################################################################
-source.. = src/,\
-                              property_file/
-output.. = bin/
-bin.includes = plugin.xml,\
-               .,\
-               META-INF/,\
-               about.html,\
-               plugin.properties
-src.includes = schema/
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.properties b/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.properties
deleted file mode 100644
index 3a6ba45..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.properties
+++ /dev/null
@@ -1,16 +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
-###############################################################################
-EMF_Resource_Edit_Model=EMF Resource Edit Model
-Edit_Model_Extensions=Edit Model Extensions
-Adapter_Factory_Extension=Adapter Factory Extension
-ModifierHelperFactory=ModifierHelperFactory
-pluginName=EMF Workbench Edit Plug-in
-pluginVendor=Eclipse.org
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.xml b/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.xml
deleted file mode 100644
index 5673b57..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-
-     <extension-point id="editModel" name="%EMF_Resource_Edit_Model" schema="schema/editModel.exsd"/>
-   <extension-point id="editModelExtension" name="%Edit_Model_Extensions" schema="schema/editModelExtension.exsd"/>
-   <extension-point id="adapterFactory" name="%Adapter_Factory_Extension" schema="schema/adapterFactory.exsd"/>
-   <extension-point id="ModifierHelperFactory" name="%ModifierHelperFactory" schema="schema/modifierHelperFactory.exsd"/>
-
-   <extension
-         point="org.eclipse.jem.util.internalWorkbenchContextFactory">
-      <factoryClass
-            name="org.eclipse.wst.common.internal.emfworkbench.edit.EMFWorkbenchEditContextFactory">
-      </factoryClass>
-   </extension>
-   
-   <extension
-        id="emfValidationHandler"
-        name="emfValidationHandler"
-        point="org.eclipse.wst.validation.validationSelectionHandler">
-      <validationSelectionHandler
-        id="emfValidationHandler"
-        handlerClass="org.eclipse.wst.common.internal.emfworkbench.EmfValidationHandler"
-        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/prepareforpii.xml b/plugins/org.eclipse.wst.common.emfworkbench.integration/prepareforpii.xml
deleted file mode 100644
index 26d1d46..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/prepareforpii.xml
+++ /dev/null
@@ -1,37 +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.emf.workbench.edit"/>
-		<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_file" >
-			 <fileset dir="${plugindir}/property_file">
-           	  <include name="**/*.properties"/>
-  			 </fileset>
-  		</copy>
-
-  		
-	</target>
-</project>
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/property_file/emftosed.properties b/plugins/org.eclipse.wst.common.emfworkbench.integration/property_file/emftosed.properties
deleted file mode 100644
index 77d84df..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/property_file/emftosed.properties
+++ /dev/null
@@ -1,13 +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
-###############################################################################
-Unexpected_IO_exception_occurred_creating_xml_document_1_EXC_=IWAE0017E Unexpected IO exception occurred creating xml document
-EMF2DOMSedRenderer_UI_0={0} should not use an OutputStream for loading
-EMF2DOMSedRenderer_UI_1={0} should not use an InputStream for loading
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/property_file/emfworkbenchedit.properties b/plugins/org.eclipse.wst.common.emfworkbench.integration/property_file/emfworkbenchedit.properties
deleted file mode 100644
index 631d1c3..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/property_file/emfworkbenchedit.properties
+++ /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
-###############################################################################
-DynamicAdapterFactory_ERROR_0=IWAE0010E A null EPackage will not be tied to any Adapter Factory.
-ClientAccessRegistryException_UI_0=There are at least {0} improperly released edit models.
-ClientAccessRegistryException_UI_1=This exception was generated to indicate an invalid usage of reference counts.\n Typically, this occurs on attempts to open an already open artifact edit.\n Make sure the dispose method is called when done accessing.\n Please examine the stack trace.\n Client Access Exception of type {0} \n
-ClientAccessRegistry_ERROR_0=IWAE0011E Key already used to access Resource
-ClientAccessRegistry_ERROR_1=IWAE0012E Key has not properly accessed Resource.
-EditModelRegistry_ERROR_0=IWAE0013E The inheritance hierarchy for the Edit Model \"{0}\" contains a cycle. Please correct the entries in your plugin.xml files.
-EditModelRegistry_ERROR_1=IWAE0014E Could not create factory because IConfigurationElement is null.
-EditModelRegistry_ERROR_2=IWAE0015E No EditModelFactory for key \"{0}\"
-Snapshot_ERROR_0=IWAE0016E Locking Insurance Stack Trace
-AdapterFactoryDescriptor_ERROR_0=IWAE0017E A packageURI is required for all Adapter Factories
-AdapterFactoryDescriptor_ERROR_1=IWAE0018E An id is required for all Adapter Factories. Check all adapter factories defined in \"{0}\".
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/rose/ModuleCore.genmodel b/plugins/org.eclipse.wst.common.emfworkbench.integration/rose/ModuleCore.genmodel
deleted file mode 100644
index 5d6bddd..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/rose/ModuleCore.genmodel
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<genmodel:GenModel xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
-    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.wst.common.emfworkbench.integration/src"
-    editDirectory="/org.eclipse.wst.common.emfworkbench.integration.edit/src" editorDirectory="/org.eclipse.wst.common.emfworkbench.integration.editor/src"
-    modelPluginID="org.eclipse.wst.common.emfworkbench.integration" runtimeJar="true"
-    modelName="ProjectModule" editPluginClass="org.eclipse.wst.projectmodule.provider.ModuleCoreEditPlugin"
-    editorPluginClass="org.eclipse.wst.projectmodule.presentation.ModuleCoreEditorPlugin"
-    runtimeCompatibility="false">
-  <foreignModel>moduleCore.mdl</foreignModel>
-  <foreignModel>WORKSPACE_ROOT</foreignModel>
-  <foreignModel>D:\work\WTP</foreignModel>
-  <genPackages prefix="ModuleCore" basePackage="org.eclipse.wst.common" disposableProviderFactory="true"
-      ecorePackage="moduleCore.ecore#/">
-    <genEnums ecoreEnum="moduleCore.ecore#//DependencyType">
-      <genEnumLiterals ecoreEnumLiteral="moduleCore.ecore#//DependencyType/uses"/>
-      <genEnumLiterals ecoreEnumLiteral="moduleCore.ecore#//DependencyType/consumes"/>
-    </genEnums>
-    <genDataTypes ecoreDataType="moduleCore.ecore#//URI"/>
-    <genClasses ecoreClass="moduleCore.ecore#//WorkbenchModule">
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute moduleCore.ecore#//WorkbenchModule/handle"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute moduleCore.ecore#//WorkbenchModule/deployedName"/>
-      <genFeatures notify="false" createChild="false" ecoreFeature="ecore:EReference moduleCore.ecore#//WorkbenchModule/resources"/>
-      <genFeatures notify="false" createChild="false" ecoreFeature="ecore:EReference moduleCore.ecore#//WorkbenchModule/moduleType"/>
-      <genFeatures notify="false" createChild="false" ecoreFeature="ecore:EReference moduleCore.ecore#//WorkbenchModule/modules"/>
-    </genClasses>
-    <genClasses ecoreClass="moduleCore.ecore#//WorkbenchModuleResource">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute moduleCore.ecore#//WorkbenchModuleResource/sourcePath"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute moduleCore.ecore#//WorkbenchModuleResource/deployedPath"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute moduleCore.ecore#//WorkbenchModuleResource/exclusions"/>
-      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference moduleCore.ecore#//WorkbenchModuleResource/module"/>
-    </genClasses>
-    <genClasses ecoreClass="moduleCore.ecore#//ModuleType">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute moduleCore.ecore#//ModuleType/metadataResources"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute moduleCore.ecore#//ModuleType/moduleTypeId"/>
-    </genClasses>
-    <genClasses ecoreClass="moduleCore.ecore#//ProjectModules">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute moduleCore.ecore#//ProjectModules/projectName"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference moduleCore.ecore#//ProjectModules/workbenchModules"/>
-    </genClasses>
-    <genClasses ecoreClass="moduleCore.ecore#//DependentModule">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute moduleCore.ecore#//DependentModule/handle"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute moduleCore.ecore#//DependentModule/deployedPath"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute moduleCore.ecore#//DependentModule/dependencyType"/>
-    </genClasses>
-  </genPackages>
-</genmodel:GenModel>
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/rose/moduleCore.cat b/plugins/org.eclipse.wst.common.emfworkbench.integration/rose/moduleCore.cat
deleted file mode 100644
index 330f5b8..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/rose/moduleCore.cat
+++ /dev/null
@@ -1,1065 +0,0 @@
-

-(object Petal

-    version    	50

-    _written   	"Rose 8.3.0407.2800"

-    charSet    	0)

-

-(object Class_Category "moduleCore"

-    is_unit    	TRUE

-    is_loaded  	TRUE

-    attributes 	(list Attribute_Set

-	(object Attribute

-	    tool       	"Ecore"

-	    name       	"basePackage"

-	    value      	(value Text "org.eclipse.wst.common"))

-	(object Attribute

-	    tool       	"Ecore"

-	    name       	"prefix"

-	    value      	(value Text "ModuleCore"))

-	(object Attribute

-	    tool       	"Ecore"

-	    name       	"nsURI"

-	    value      	(value Text "modulecore.xmi")))

-    quid       	"3A0DB68B0046"

-    visible_categories 	(list visibility_relationship_list

-	(object Visibility_Relationship

-	    quid       	"3F2E8236025A"

-	    supplier   	"Logical View::ejbext"

-	    quidu      	"39AA86660190")

-	(object Visibility_Relationship

-	    quid       	"3F2E8236025B"

-	    supplier   	"Logical View::webappext"

-	    quidu      	"39B534FD024C")

-	(object Visibility_Relationship

-	    quid       	"3F2E8236025C"

-	    supplier   	"Logical View::ejbbnd"

-	    quidu      	"39B960FC03CA")

-	(object Visibility_Relationship

-	    quid       	"3F2E82360264"

-	    supplier   	"Logical View::webappbnd"

-	    quidu      	"39B961060107")

-	(object Visibility_Relationship

-	    quid       	"3F2E82360265"

-	    supplier   	"Logical View::clientbnd"

-	    quidu      	"39B9614F031F")

-	(object Visibility_Relationship

-	    quid       	"3F2E82360266"

-	    supplier   	"Logical View::applicationext"

-	    quidu      	"3A22E6080303")

-	(object Visibility_Relationship

-	    quid       	"3F2E82360267"

-	    supplier   	"Logical View::applicationbnd"

-	    quidu      	"39B9611502A4")

-	(object Visibility_Relationship

-	    quid       	"3F2E82360268"

-	    supplier   	"Logical View::j2cbnd"

-	    quidu      	"39B9632E038C"))

-    exportControl 	"Public"

-    logical_models 	(list unit_reference_list

-	(object Class "WorkbenchModule"

-	    quid       	"41E3DF5801FA"

-	    class_attributes 	(list class_attribute_list

-		(object ClassAttribute "handle"

-		    quid       	"41EC1D71015D"

-		    type       	"URI"

-		    quidu      	"41EC26DA027A"

-		    exportControl 	"Public")

-		(object ClassAttribute "deployedName"

-		    quid       	"4201471D0208"

-		    type       	"String"

-		    exportControl 	"Public")))

-	(object Class "WorkbenchModuleResource"

-	    quid       	"41E3DF670039"

-	    class_attributes 	(list class_attribute_list

-		(object ClassAttribute "sourcePath"

-		    quid       	"41E3DF970128"

-		    type       	"URI"

-		    quidu      	"41EC26DA027A"

-		    exportControl 	"Public")

-		(object ClassAttribute "deployedPath"

-		    quid       	"41EEC640025B"

-		    type       	"URI"

-		    quidu      	"41EC26DA027A"

-		    exportControl 	"Public")

-		(object ClassAttribute "exclusions"

-		    quid       	"41E3DF9E011E"

-		    stereotype 	"0..*"

-		    type       	"URI"

-		    quidu      	"41EC26DA027A"

-		    exportControl 	"Public")))

-	(object Class "ModuleType"

-	    quid       	"41EC1D5103E2"

-	    class_attributes 	(list class_attribute_list

-		(object ClassAttribute "metadataResources"

-		    quid       	"41EC1DF0021E"

-		    stereotype 	"0..*"

-		    type       	"URI"

-		    quidu      	"41EC26DA027A"

-		    exportControl 	"Public")

-		(object ClassAttribute "moduleTypeId"

-		    quid       	"41EC21340357"

-		    type       	"String"

-		    exportControl 	"Public")))

-	(object Class "URI"

-	    quid       	"41EC26DA027A"

-	    stereotype 	"datatype"

-	    class_attributes 	(list class_attribute_list

-		(object ClassAttribute "org.eclipse.emf.common.util.URI"

-		    quid       	"41EC270803AC"

-		    stereotype 	"javaclass"

-		    exportControl 	"Public")))

-	(object Class "ProjectModules"

-	    quid       	"41F566DB0251"

-	    class_attributes 	(list class_attribute_list

-		(object ClassAttribute "projectName"

-		    quid       	"41F567FD023A"

-		    type       	"String"

-		    exportControl 	"Public")))

-	(object Class "DependentModule"

-	    quid       	"41F6C24B023D"

-	    class_attributes 	(list class_attribute_list

-		(object ClassAttribute "handle"

-		    quid       	"420145F001C9"

-		    type       	"URI"

-		    quidu      	"41EC26DA027A"

-		    exportControl 	"Public")

-		(object ClassAttribute "deployedPath"

-		    quid       	"420145FA0015"

-		    type       	"URI"

-		    quidu      	"41EC26DA027A"

-		    exportControl 	"Public")

-		(object ClassAttribute "dependencyType"

-		    quid       	"42039243016E"

-		    type       	"DependencyType"

-		    quidu      	"420394F50185"

-		    exportControl 	"Public")))

-	(object Class "DependencyType"

-	    quid       	"420394F50185"

-	    documentation 	

-|uses=0

-|consumes=1

-	    

-	    stereotype 	"enumeration"

-	    class_attributes 	(list class_attribute_list

-		(object ClassAttribute "uses"

-		    quid       	"42039938018D"

-		    exportControl 	"Public")

-		(object ClassAttribute "consumes"

-		    quid       	"42039A6E0139"

-		    exportControl 	"Public")))

-	(object Association "$UNNAMED$0"

-	    quid       	"41E3E14B01E3"

-	    roles      	(list role_list

-		(object Role "resources"

-		    quid       	"41E3E14D031D"

-		    label      	"resources"

-		    supplier   	"Logical View::moduleCore::WorkbenchModuleResource"

-		    quidu      	"41E3DF670039"

-		    client_cardinality 	(value cardinality "0..*")

-		    Containment 	"By Value"

-		    is_navigable 	TRUE)

-		(object Role "module"

-		    quid       	"41E3E14D031F"

-		    label      	"module"

-		    supplier   	"Logical View::moduleCore::WorkbenchModule"

-		    quidu      	"41E3DF5801FA"

-		    client_cardinality 	(value cardinality "1")

-		    is_navigable 	TRUE

-		    is_aggregate 	TRUE)))

-	(object Association "$UNNAMED$1"

-	    quid       	"41EC1D9802C2"

-	    roles      	(list role_list

-		(object Role "moduleType"

-		    quid       	"41EC1D990241"

-		    label      	"moduleType"

-		    supplier   	"Logical View::moduleCore::ModuleType"

-		    quidu      	"41EC1D5103E2"

-		    client_cardinality 	(value cardinality "1")

-		    is_navigable 	TRUE)

-		(object Role "$UNNAMED$2"

-		    quid       	"41EC1D990243"

-		    supplier   	"Logical View::moduleCore::WorkbenchModule"

-		    quidu      	"41E3DF5801FA")))

-	(object Association "$UNNAMED$3"

-	    quid       	"41F5672000E8"

-	    roles      	(list role_list

-		(object Role "workbenchModules"

-		    quid       	"41F567210111"

-		    label      	"workbenchModules"

-		    supplier   	"Logical View::moduleCore::WorkbenchModule"

-		    quidu      	"41E3DF5801FA"

-		    client_cardinality 	(value cardinality "0..*")

-		    Containment 	"By Value"

-		    is_navigable 	TRUE)

-		(object Role "$UNNAMED$4"

-		    quid       	"41F567210113"

-		    supplier   	"Logical View::moduleCore::ProjectModules"

-		    quidu      	"41F566DB0251"

-		    Containment 	"By Reference"

-		    is_aggregate 	TRUE)))

-	(object Association "$UNNAMED$5"

-	    quid       	"420146A502E2"

-	    roles      	(list role_list

-		(object Role "modules"

-		    quid       	"420146A6027F"

-		    label      	"modules"

-		    supplier   	"Logical View::moduleCore::DependentModule"

-		    quidu      	"41F6C24B023D"

-		    client_cardinality 	(value cardinality "0..*")

-		    is_navigable 	TRUE)

-		(object Role "$UNNAMED$6"

-		    quid       	"420146A60281"

-		    supplier   	"Logical View::moduleCore::WorkbenchModule"

-		    quidu      	"41E3DF5801FA"))))

-    logical_presentations 	(list unit_reference_list

-	(object ClassDiagram "Main"

-	    quid       	"41E3DF060210"

-	    title      	"Main"

-	    zoom       	100

-	    max_height 	28350

-	    max_width  	21600

-	    origin_x   	100

-	    origin_y   	0

-	    items      	(list diagram_item_list

-		(object ClassView "Class" "Logical View::moduleCore::URI" @1

-		    ShowCompartmentStereotypes 	TRUE

-		    IncludeAttribute 	TRUE

-		    IncludeOperation 	TRUE

-		    location   	(1920, 1648)

-		    font       	(object Font

-			size       	10

-			face       	"Arial"

-			bold       	FALSE

-			italics    	FALSE

-			underline  	FALSE

-			strike     	FALSE

-			color      	0

-			default_color 	TRUE)

-		    label      	(object ItemLabel

-			Parent_View 	@1

-			location   	(1460, 1589)

-			fill_color 	13434879

-			nlines     	1

-			max_width  	920

-			justify    	0

-			label      	"URI")

-		    stereotype 	(object ItemLabel

-			Parent_View 	@1

-			location   	(1460, 1539)

-			fill_color 	13434879

-			anchor     	10

-			nlines     	1

-			max_width  	920

-			justify    	0

-			label      	"<<datatype>>")

-		    icon_style 	"Icon"

-		    line_color 	3342489

-		    fill_color 	13434879

-		    quidu      	"41EC26DA027A"

-		    compartment 	(object Compartment

-			Parent_View 	@1

-			location   	(1460, 1650)

-			font       	(object Font

-			    size       	10

-			    face       	"Arial"

-			    bold       	FALSE

-			    italics    	FALSE

-			    underline  	FALSE

-			    strike     	FALSE

-			    color      	0

-			    default_color 	TRUE)

-			icon_style 	"Icon"

-			fill_color 	16777215

-			anchor     	2

-			nlines     	2

-			max_width  	925)

-		    width      	938

-		    height     	242

-		    annotation 	8

-		    autoResize 	TRUE)

-		(object NoteView @2

-		    location   	(448, 1264)

-		    font       	(object Font

-			size       	10

-			face       	"Arial"

-			bold       	FALSE

-			italics    	FALSE

-			underline  	FALSE

-			strike     	FALSE

-			color      	0

-			default_color 	TRUE)

-		    label      	(object ItemLabel

-			Parent_View 	@2

-			location   	(176, 1055)

-			fill_color 	13434879

-			nlines     	8

-			max_width  	508

-			label      	

-|The module "handle" URI will contain the special Module protocol, project name, and module identifier, and will be fully resolved to a full platform URI

-			)

-		    line_color 	3342489

-		    fill_color 	13434879

-		    width      	568

-		    height     	431)

-		(object ClassView "Class" "Logical View::moduleCore::WorkbenchModuleResource" @3

-		    ShowCompartmentStereotypes 	TRUE

-		    IncludeAttribute 	TRUE

-		    IncludeOperation 	TRUE

-		    location   	(992, 1744)

-		    font       	(object Font

-			size       	10

-			face       	"Arial"

-			bold       	FALSE

-			italics    	FALSE

-			underline  	FALSE

-			strike     	FALSE

-			color      	0

-			default_color 	TRUE)

-		    label      	(object ItemLabel

-			Parent_View 	@3

-			location   	(714, 1613)

-			fill_color 	13434879

-			nlines     	1

-			max_width  	556

-			justify    	0

-			label      	"WorkbenchModuleResource")

-		    icon_style 	"Icon"

-		    line_color 	3342489

-		    fill_color 	13434879

-		    quidu      	"41E3DF670039"

-		    compartment 	(object Compartment

-			Parent_View 	@3

-			location   	(714, 1674)

-			font       	(object Font

-			    size       	10

-			    face       	"Arial"

-			    bold       	FALSE

-			    italics    	FALSE

-			    underline  	FALSE

-			    strike     	FALSE

-			    color      	0

-			    default_color 	TRUE)

-			icon_style 	"Icon"

-			fill_color 	16777215

-			anchor     	2

-			nlines     	4

-			max_width  	531)

-		    width      	574

-		    height     	286

-		    annotation 	8

-		    autoResize 	TRUE)

-		(object ClassView "Class" "Logical View::moduleCore::ModuleType" @4

-		    ShowCompartmentStereotypes 	TRUE

-		    IncludeAttribute 	TRUE

-		    IncludeOperation 	TRUE

-		    location   	(1856, 1136)

-		    font       	(object Font

-			size       	10

-			face       	"Arial"

-			bold       	FALSE

-			italics    	FALSE

-			underline  	FALSE

-			strike     	FALSE

-			color      	0

-			default_color 	TRUE)

-		    label      	(object ItemLabel

-			Parent_View 	@4

-			location   	(1509, 1030)

-			fill_color 	13434879

-			nlines     	1

-			max_width  	694

-			justify    	0

-			label      	"ModuleType")

-		    icon_style 	"Icon"

-		    line_color 	3342489

-		    fill_color 	13434879

-		    quidu      	"41EC1D5103E2"

-		    compartment 	(object Compartment

-			Parent_View 	@4

-			location   	(1509, 1091)

-			font       	(object Font

-			    size       	10

-			    face       	"Arial"

-			    bold       	FALSE

-			    italics    	FALSE

-			    underline  	FALSE

-			    strike     	FALSE

-			    color      	0

-			    default_color 	TRUE)

-			icon_style 	"Icon"

-			fill_color 	16777215

-			anchor     	2

-			nlines     	3

-			max_width  	700)

-		    width      	712

-		    height     	236

-		    annotation 	8

-		    autoResize 	TRUE)

-		(object ClassView "Class" "Logical View::moduleCore::ProjectModules" @5

-		    ShowCompartmentStereotypes 	TRUE

-		    IncludeAttribute 	TRUE

-		    IncludeOperation 	TRUE

-		    location   	(416, 368)

-		    font       	(object Font

-			size       	10

-			face       	"Arial"

-			bold       	FALSE

-			italics    	FALSE

-			underline  	FALSE

-			strike     	FALSE

-			color      	0

-			default_color 	TRUE)

-		    label      	(object ItemLabel

-			Parent_View 	@5

-			location   	(204, 287)

-			fill_color 	13434879

-			nlines     	1

-			max_width  	424

-			justify    	0

-			label      	"ProjectModules")

-		    icon_style 	"Icon"

-		    line_color 	3342489

-		    fill_color 	13434879

-		    quidu      	"41F566DB0251"

-		    compartment 	(object Compartment

-			Parent_View 	@5

-			location   	(204, 348)

-			font       	(object Font

-			    size       	10

-			    face       	"Arial"

-			    bold       	FALSE

-			    italics    	FALSE

-			    underline  	FALSE

-			    strike     	FALSE

-			    color      	0

-			    default_color 	TRUE)

-			icon_style 	"Icon"

-			fill_color 	16777215

-			anchor     	2

-			nlines     	2

-			max_width  	431)

-		    width      	442

-		    height     	186

-		    annotation 	8

-		    autoResize 	TRUE)

-		(object ClassView "Class" "Logical View::moduleCore::DependentModule" @6

-		    ShowCompartmentStereotypes 	TRUE

-		    IncludeAttribute 	TRUE

-		    IncludeOperation 	TRUE

-		    location   	(1824, 480)

-		    font       	(object Font

-			size       	10

-			face       	"Arial"

-			bold       	FALSE

-			italics    	FALSE

-			underline  	FALSE

-			strike     	FALSE

-			color      	0

-			default_color 	TRUE)

-		    label      	(object ItemLabel

-			Parent_View 	@6

-			location   	(1470, 349)

-			fill_color 	13434879

-			nlines     	1

-			max_width  	708

-			justify    	0

-			label      	"DependentModule")

-		    icon_style 	"Icon"

-		    line_color 	3342489

-		    fill_color 	13434879

-		    quidu      	"41F6C24B023D"

-		    compartment 	(object Compartment

-			Parent_View 	@6

-			location   	(1470, 410)

-			font       	(object Font

-			    size       	10

-			    face       	"Arial"

-			    bold       	FALSE

-			    italics    	FALSE

-			    underline  	FALSE

-			    strike     	FALSE

-			    color      	0

-			    default_color 	TRUE)

-			icon_style 	"Icon"

-			fill_color 	13434879

-			anchor     	2

-			nlines     	4

-			max_width  	715)

-		    width      	726

-		    height     	286

-		    annotation 	8

-		    autoResize 	TRUE)

-		(object ClassView "Class" "Logical View::moduleCore::WorkbenchModule" @7

-		    ShowCompartmentStereotypes 	TRUE

-		    IncludeAttribute 	TRUE

-		    IncludeOperation 	TRUE

-		    location   	(944, 752)

-		    font       	(object Font

-			size       	10

-			face       	"Arial"

-			bold       	FALSE

-			italics    	FALSE

-			underline  	FALSE

-			strike     	FALSE

-			color      	0

-			default_color 	TRUE)

-		    label      	(object ItemLabel

-			Parent_View 	@7

-			location   	(712, 646)

-			fill_color 	13434879

-			nlines     	1

-			max_width  	464

-			justify    	0

-			label      	"WorkbenchModule")

-		    icon_style 	"Icon"

-		    line_color 	3342489

-		    fill_color 	13434879

-		    quidu      	"41E3DF5801FA"

-		    compartment 	(object Compartment

-			Parent_View 	@7

-			location   	(712, 707)

-			font       	(object Font

-			    size       	10

-			    face       	"Arial"

-			    bold       	FALSE

-			    italics    	FALSE

-			    underline  	FALSE

-			    strike     	FALSE

-			    color      	0

-			    default_color 	TRUE)

-			icon_style 	"Icon"

-			fill_color 	16777215

-			anchor     	2

-			nlines     	3

-			max_width  	471)

-		    width      	482

-		    height     	236

-		    annotation 	8

-		    autoResize 	TRUE)

-		(object AssociationViewNew "$UNNAMED$0" @8

-		    location   	(940, 1235)

-		    font       	(object Font

-			size       	10

-			face       	"Arial"

-			bold       	FALSE

-			italics    	FALSE

-			underline  	FALSE

-			strike     	FALSE

-			color      	0

-			default_color 	TRUE)

-		    stereotype 	TRUE

-		    line_color 	3342489

-		    quidu      	"41E3E14B01E3"

-		    roleview_list 	(list RoleViews

-			(object RoleView "resources" @9

-			    Parent_View 	@8

-			    location   	(460, 355)

-			    font       	(object Font

-				size       	10

-				face       	"Arial"

-				bold       	FALSE

-				italics    	FALSE

-				underline  	FALSE

-				strike     	FALSE

-				color      	0

-				default_color 	TRUE)

-			    label      	(object SegLabel @10

-				Parent_View 	@9

-				location   	(1075, 1501)

-				font       	(object Font

-				    size       	10

-				    face       	"Arial"

-				    bold       	FALSE

-				    italics    	FALSE

-				    underline  	FALSE

-				    strike     	FALSE

-				    color      	0

-				    default_color 	TRUE)

-				anchor     	1

-				anchor_loc 	1

-				nlines     	1

-				max_width  	216

-				justify    	0

-				label      	"+resources"

-				pctDist    	0.726776

-				height     	135

-				orientation 	0)

-			    stereotype 	TRUE

-			    line_color 	3342489

-			    quidu      	"41E3E14D031D"

-			    client     	@8

-			    supplier   	@3

-			    vertices   	(list Points

-				(940, 1235)

-				(940, 1601))

-			    line_style 	3

-			    origin_attachment 	(940, 1235)

-			    terminal_attachment 	(940, 1601)

-			    label      	(object SegLabel @11

-				Parent_View 	@9

-				location   	(861, 1495)

-				font       	(object Font

-				    size       	10

-				    face       	"Arial"

-				    bold       	FALSE

-				    italics    	FALSE

-				    underline  	FALSE

-				    strike     	FALSE

-				    color      	0

-				    default_color 	TRUE)

-				anchor     	2

-				anchor_loc 	1

-				nlines     	1

-				max_width  	15

-				justify    	0

-				label      	"0..*"

-				pctDist    	0.710383

-				height     	79

-				orientation 	1))

-			(object RoleView "module" @12

-			    Parent_View 	@8

-			    location   	(460, 355)

-			    font       	(object Font

-				size       	10

-				face       	"Arial"

-				bold       	FALSE

-				italics    	FALSE

-				underline  	FALSE

-				strike     	FALSE

-				color      	0

-				default_color 	TRUE)

-			    label      	(object SegLabel @13

-				Parent_View 	@12

-				location   	(1043, 972)

-				font       	(object Font

-				    size       	10

-				    face       	"Arial"

-				    bold       	FALSE

-				    italics    	FALSE

-				    underline  	FALSE

-				    strike     	FALSE

-				    color      	0

-				    default_color 	TRUE)

-				anchor     	1

-				anchor_loc 	1

-				nlines     	1

-				max_width  	172

-				justify    	0

-				label      	"+module"

-				pctDist    	0.720824

-				height     	103

-				orientation 	1)

-			    stereotype 	TRUE

-			    line_color 	3342489

-			    quidu      	"41E3E14D031F"

-			    client     	@8

-			    supplier   	@7

-			    vertices   	(list Points

-				(940, 1235)

-				(940, 870))

-			    line_style 	3

-			    origin_attachment 	(940, 1235)

-			    terminal_attachment 	(940, 870)

-			    label      	(object SegLabel @14

-				Parent_View 	@12

-				location   	(868, 976)

-				font       	(object Font

-				    size       	10

-				    face       	"Arial"

-				    bold       	FALSE

-				    italics    	FALSE

-				    underline  	FALSE

-				    strike     	FALSE

-				    color      	0

-				    default_color 	TRUE)

-				anchor     	2

-				anchor_loc 	1

-				nlines     	1

-				max_width  	15

-				justify    	0

-				label      	"1"

-				pctDist    	0.709382

-				height     	73

-				orientation 	0))))

-		(object AssociationViewNew "$UNNAMED$1" @15

-		    location   	(1634, 791)

-		    font       	(object Font

-			size       	10

-			face       	"Arial"

-			bold       	FALSE

-			italics    	FALSE

-			underline  	FALSE

-			strike     	FALSE

-			color      	0

-			default_color 	TRUE)

-		    stereotype 	TRUE

-		    line_color 	3342489

-		    quidu      	"41EC1D9802C2"

-		    roleview_list 	(list RoleViews

-			(object RoleView "moduleType" @16

-			    Parent_View 	@15

-			    location   	(1298, -137)

-			    font       	(object Font

-				size       	10

-				face       	"Arial"

-				bold       	FALSE

-				italics    	FALSE

-				underline  	FALSE

-				strike     	FALSE

-				color      	0

-				default_color 	TRUE)

-			    label      	(object SegLabel @17

-				Parent_View 	@16

-				location   	(2010, 977)

-				font       	(object Font

-				    size       	10

-				    face       	"Arial"

-				    bold       	FALSE

-				    italics    	FALSE

-				    underline  	FALSE

-				    strike     	FALSE

-				    color      	0

-				    default_color 	TRUE)

-				anchor     	1

-				anchor_loc 	1

-				nlines     	1

-				max_width  	260

-				justify    	0

-				label      	"+moduleType"

-				pctDist    	0.911573

-				height     	153

-				orientation 	0)

-			    stereotype 	TRUE

-			    line_color 	3342489

-			    quidu      	"41EC1D990241"

-			    client     	@15

-			    supplier   	@4

-			    vertices   	(list Points

-				(1634, 791)

-				(1857, 791)

-				(1857, 1018))

-			    line_style 	3

-			    origin_attachment 	(1634, 791)

-			    terminal_attachment 	(1857, 1018)

-			    label      	(object SegLabel @18

-				Parent_View 	@16

-				location   	(1804, 972)

-				font       	(object Font

-				    size       	10

-				    face       	"Arial"

-				    bold       	FALSE

-				    italics    	FALSE

-				    underline  	FALSE

-				    strike     	FALSE

-				    color      	0

-				    default_color 	TRUE)

-				anchor     	2

-				anchor_loc 	1

-				nlines     	1

-				max_width  	15

-				justify    	0

-				label      	"1"

-				pctDist    	0.900000

-				height     	54

-				orientation 	1))

-			(object RoleView "$UNNAMED$2" @19

-			    Parent_View 	@15

-			    location   	(1298, -137)

-			    stereotype 	TRUE

-			    line_color 	3342489

-			    quidu      	"41EC1D990243"

-			    client     	@15

-			    supplier   	@7

-			    vertices   	(list Points

-				(1634, 791)

-				(1185, 791))

-			    line_style 	3

-			    origin_attachment 	(1634, 791)

-			    terminal_attachment 	(1185, 791))))

-		(object AttachView "" @20

-		    stereotype 	TRUE

-		    line_color 	3342489

-		    client     	@2

-		    supplier   	@7

-		    vertices   	(list Points

-			(657, 1048)

-			(829, 870))

-		    line_style 	0)

-		(object AssociationViewNew "$UNNAMED$3" @21

-		    location   	(399, 691)

-		    font       	(object Font

-			size       	10

-			face       	"Arial"

-			bold       	FALSE

-			italics    	FALSE

-			underline  	FALSE

-			strike     	FALSE

-			color      	0

-			default_color 	TRUE)

-		    stereotype 	TRUE

-		    line_color 	3342489

-		    quidu      	"41F5672000E8"

-		    roleview_list 	(list RoleViews

-			(object RoleView "workbenchModules" @22

-			    Parent_View 	@21

-			    location   	(-33, 403)

-			    font       	(object Font

-				size       	10

-				face       	"Arial"

-				bold       	FALSE

-				italics    	FALSE

-				underline  	FALSE

-				strike     	FALSE

-				color      	0

-				default_color 	TRUE)

-			    label      	(object SegLabel @23

-				Parent_View 	@22

-				location   	(476, 747)

-				font       	(object Font

-				    size       	10

-				    face       	"Arial"

-				    bold       	FALSE

-				    italics    	FALSE

-				    underline  	FALSE

-				    strike     	FALSE

-				    color      	0

-				    default_color 	TRUE)

-				anchor     	1

-				anchor_loc 	1

-				nlines     	1

-				max_width  	373

-				justify    	0

-				label      	"+workbenchModules"

-				pctDist    	0.253289

-				height     	56

-				orientation 	1)

-			    stereotype 	TRUE

-			    line_color 	3342489

-			    quidu      	"41F567210111"

-			    client     	@21

-			    supplier   	@7

-			    vertices   	(list Points

-				(399, 691)

-				(703, 691))

-			    line_style 	3

-			    origin_attachment 	(399, 691)

-			    terminal_attachment 	(703, 691)

-			    label      	(object SegLabel @24

-				Parent_View 	@22

-				location   	(640, 632)

-				font       	(object Font

-				    size       	10

-				    face       	"Arial"

-				    bold       	FALSE

-				    italics    	FALSE

-				    underline  	FALSE

-				    strike     	FALSE

-				    color      	0

-				    default_color 	TRUE)

-				anchor     	2

-				anchor_loc 	1

-				nlines     	1

-				max_width  	15

-				justify    	0

-				label      	"0..*"

-				pctDist    	0.792763

-				height     	59

-				orientation 	0))

-			(object RoleView "$UNNAMED$4" @25

-			    Parent_View 	@21

-			    location   	(-33, 403)

-			    stereotype 	TRUE

-			    line_color 	3342489

-			    quidu      	"41F567210113"

-			    client     	@21

-			    supplier   	@5

-			    vertices   	(list Points

-				(399, 691)

-				(325, 691)

-				(325, 461))

-			    line_style 	3

-			    origin_attachment 	(399, 691)

-			    terminal_attachment 	(325, 461))))

-		(object AssociationViewNew "$UNNAMED$5" @26

-		    location   	(1322, 633)

-		    font       	(object Font

-			size       	10

-			face       	"Arial"

-			bold       	FALSE

-			italics    	FALSE

-			underline  	FALSE

-			strike     	FALSE

-			color      	0

-			default_color 	TRUE)

-		    stereotype 	TRUE

-		    line_color 	3342489

-		    quidu      	"420146A502E2"

-		    roleview_list 	(list RoleViews

-			(object RoleView "modules" @27

-			    Parent_View 	@26

-			    location   	(490, -711)

-			    font       	(object Font

-				size       	10

-				face       	"Arial"

-				bold       	FALSE

-				italics    	FALSE

-				underline  	FALSE

-				strike     	FALSE

-				color      	0

-				default_color 	TRUE)

-			    label      	(object SegLabel @28

-				Parent_View 	@27

-				location   	(1367, 545)

-				font       	(object Font

-				    size       	10

-				    face       	"Arial"

-				    bold       	FALSE

-				    italics    	FALSE

-				    underline  	FALSE

-				    strike     	FALSE

-				    color      	0

-				    default_color 	TRUE)

-				anchor     	1

-				anchor_loc 	1

-				nlines     	1

-				max_width  	180

-				justify    	0

-				label      	"+modules"

-				pctDist    	0.475736

-				height     	72

-				orientation 	0)

-			    stereotype 	TRUE

-			    line_color 	3342489

-			    quidu      	"420146A6027F"

-			    client     	@26

-			    supplier   	@6

-			    vertices   	(list Points

-				(1322, 633)

-				(1460, 589))

-			    line_style 	0

-			    label      	(object SegLabel @29

-				Parent_View 	@27

-				location   	(1427, 662)

-				font       	(object Font

-				    size       	10

-				    face       	"Arial"

-				    bold       	FALSE

-				    italics    	FALSE

-				    underline  	FALSE

-				    strike     	FALSE

-				    color      	0

-				    default_color 	TRUE)

-				anchor     	2

-				anchor_loc 	1

-				nlines     	1

-				max_width  	15

-				justify    	0

-				label      	"0..*"

-				pctDist    	0.636077

-				height     	59

-				orientation 	1))

-			(object RoleView "$UNNAMED$6" @30

-			    Parent_View 	@26

-			    location   	(490, -711)

-			    stereotype 	TRUE

-			    line_color 	3342489

-			    quidu      	"420146A60281"

-			    client     	@26

-			    supplier   	@7

-			    vertices   	(list Points

-				(1322, 633)

-				(1185, 675))

-			    line_style 	0)))

-		(object NoteView @31

-		    location   	(2784, 416)

-		    font       	(object Font

-			size       	10

-			face       	"Arial"

-			bold       	FALSE

-			italics    	FALSE

-			underline  	FALSE

-			strike     	FALSE

-			color      	0

-			default_color 	TRUE)

-		    label      	(object ItemLabel

-			Parent_View 	@31

-			location   	(2387, 166)

-			fill_color 	13434879

-			nlines     	10

-			max_width  	759

-			label      	

-|The dependent module "handle" must be resolvable to a WorkbenchModule.

-|

-|The DeployedPath specifies the location of the referenced module in this deployment structure.

-|

-|The dependencyType specifies how the dependent module is assembled.

-			)

-		    line_color 	3342489

-		    fill_color 	13434879

-		    width      	819

-		    height     	513)

-		(object ClassView "Class" "Logical View::moduleCore::DependencyType" @32

-		    ShowCompartmentStereotypes 	TRUE

-		    IncludeAttribute 	TRUE

-		    IncludeOperation 	TRUE

-		    location   	(2560, 944)

-		    font       	(object Font

-			size       	10

-			face       	"Arial"

-			bold       	FALSE

-			italics    	FALSE

-			underline  	FALSE

-			strike     	FALSE

-			color      	0

-			default_color 	TRUE)

-		    label      	(object ItemLabel

-			Parent_View 	@32

-			location   	(2387, 860)

-			fill_color 	13434879

-			nlines     	1

-			max_width  	346

-			justify    	0

-			label      	"DependencyType")

-		    stereotype 	(object ItemLabel

-			Parent_View 	@32

-			location   	(2387, 810)

-			fill_color 	13434879

-			anchor     	10

-			nlines     	1

-			max_width  	346

-			justify    	0

-			label      	"<<enumeration>>")

-		    icon_style 	"Icon"

-		    line_color 	3342489

-		    fill_color 	13434879

-		    quidu      	"420394F50185"

-		    compartment 	(object Compartment

-			Parent_View 	@32

-			location   	(2387, 921)

-			font       	(object Font

-			    size       	10

-			    face       	"Arial"

-			    bold       	FALSE

-			    italics    	FALSE

-			    underline  	FALSE

-			    strike     	FALSE

-			    color      	0

-			    default_color 	TRUE)

-			icon_style 	"Icon"

-			fill_color 	13434879

-			anchor     	2

-			nlines     	3

-			max_width  	237)

-		    width      	364

-		    height     	292

-		    annotation 	8

-		    autoResize 	TRUE)

-		(object AttachView "" @33

-		    stereotype 	TRUE

-		    line_color 	3342489

-		    client     	@6

-		    supplier   	@31

-		    vertices   	(list Points

-			(2187, 455)

-			(2374, 443))

-		    line_style 	0)))))

diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/rose/moduleCore.ecore b/plugins/org.eclipse.wst.common.emfworkbench.integration/rose/moduleCore.ecore
deleted file mode 100644
index 00723f2..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/rose/moduleCore.ecore
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ecore:EPackage xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="modulecore"
-    nsURI="modulecore.xmi" nsPrefix="org.eclipse.wst.common.modulecore">
-  <eClassifiers xsi:type="ecore:EClass" name="WorkbenchModule">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="handle" eType="#//URI"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="deployedName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="resources" upperBound="-1"
-        eType="#//WorkbenchModuleResource" containment="true" eOpposite="#//WorkbenchModuleResource/module"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="moduleType" lowerBound="1"
-        eType="#//ModuleType"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="modules" upperBound="-1"
-        eType="#//DependentModule"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="WorkbenchModuleResource">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sourcePath" eType="#//URI"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="deployedPath" eType="#//URI"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="exclusions" upperBound="-1"
-        eType="#//URI"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="module" lowerBound="1"
-        eType="#//WorkbenchModule" transient="true" eOpposite="#//WorkbenchModule/resources"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="ModuleType">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="metadataResources" upperBound="-1"
-        eType="#//URI"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="moduleTypeId" 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"/>
-  <eClassifiers xsi:type="ecore:EClass" name="ProjectModules">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="projectName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="workbenchModules" upperBound="-1"
-        eType="#//WorkbenchModule" containment="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="DependentModule">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="handle" eType="#//URI"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="deployedPath" eType="#//URI"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dependencyType" eType="#//DependencyType"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EEnum" name="DependencyType">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="uses=0&#xD;&#xA;consumes=1"/>
-    </eAnnotations>
-    <eLiterals name="uses"/>
-    <eLiterals name="consumes" value="1"/>
-  </eClassifiers>
-</ecore:EPackage>
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/rose/moduleCore.mdl b/plugins/org.eclipse.wst.common.emfworkbench.integration/rose/moduleCore.mdl
deleted file mode 100644
index 7e9b4c5..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/rose/moduleCore.mdl
+++ /dev/null
@@ -1,8839 +0,0 @@
-

-(object Petal

-    version    	50

-    _written   	"Rose 8.3.0407.2800"

-    charSet    	0)

-

-(object Design "Logical View"

-    is_unit    	TRUE

-    is_loaded  	TRUE

-    attributes 	(list Attribute_Set

-	(object Attribute

-	    tool       	"Java"

-	    name       	"IDE"

-	    value      	"Internal Editor")

-	(object Attribute

-	    tool       	"Java"

-	    name       	"UserDefineTagName1"

-	    value      	"")

-	(object Attribute

-	    tool       	"Java"

-	    name       	"UserDefineTagText1"

-	    value      	"")

-	(object Attribute

-	    tool       	"Java"

-	    name       	"UserDefineTagApply1"

-	    value      	"")

-	(object Attribute

-	    tool       	"Java"

-	    name       	"UserDefineTagName2"

-	    value      	"")

-	(object Attribute

-	    tool       	"Java"

-	    name       	"UserDefineTagText2"

-	    value      	"")

-	(object Attribute

-	    tool       	"Java"

-	    name       	"UserDefineTagApply2"

-	    value      	"")

-	(object Attribute

-	    tool       	"Java"

-	    name       	"UserDefineTagName3"

-	    value      	"")

-	(object Attribute

-	    tool       	"Java"

-	    name       	"UserDefineTagText3"

-	    value      	"")

-	(object Attribute

-	    tool       	"Java"

-	    name       	"UserDefineTagApply3"

-	    value      	""))

-    quid       	"3A0B2474025F"

-    enforceClosureAutoLoad 	FALSE

-    defaults   	(object defaults

-	rightMargin 	0.250000

-	leftMargin 	0.250000

-	topMargin  	0.250000

-	bottomMargin 	0.500000

-	pageOverlap 	0.250000

-	clipIconLabels 	TRUE

-	autoResize 	TRUE

-	snapToGrid 	TRUE

-	gridX      	16

-	gridY      	16

-	defaultFont 	(object Font

-	    size       	10

-	    face       	"Arial"

-	    bold       	FALSE

-	    italics    	FALSE

-	    underline  	FALSE

-	    strike     	FALSE

-	    color      	0

-	    default_color 	TRUE)

-	showMessageNum 	1

-	showClassOfObject 	TRUE

-	notation   	"Unified")

-    root_usecase_package 	(object Class_Category "Use Case View"

-	quid       	"3A0B2474026A"

-	exportControl 	"Public"

-	global     	TRUE

-	logical_models 	(list unit_reference_list)

-	logical_presentations 	(list unit_reference_list

-	    (object UseCaseDiagram "Main"

-		quid       	"3A0B24790339"

-		title      	"Main"

-		zoom       	100

-		max_height 	28350

-		max_width  	21600

-		origin_x   	0

-		origin_y   	0

-		items      	(list diagram_item_list))))

-    root_category 	(object Class_Category "Logical View"

-	quid       	"3A0B24740269"

-	exportControl 	"Public"

-	global     	TRUE

-	subsystem  	"Component View"

-	quidu      	"3A0B2474027D"

-	logical_models 	(list unit_reference_list

-	    (object Class_Category "moduleCore"

-		is_unit    	TRUE

-		is_loaded  	FALSE

-		file_name  	"$WORKSPACE_ROOT\\org.eclipse.wst.common.emfworkbench.integration\\rose\\moduleCore.cat"

-		quid       	"3A0DB68B0046"))

-	logical_presentations 	(list unit_reference_list

-	    (object ClassDiagram "PackageView"

-		quid       	"3A0B24790360"

-		title      	"PackageView"

-		zoom       	100

-		max_height 	28350

-		max_width  	21600

-		origin_x   	650

-		origin_y   	0

-		items      	(list diagram_item_list

-		    (object CategoryView "Logical View::moduleCore" @1

-			location   	(352, 320)

-			font       	(object Font

-			    size       	10

-			    face       	"Arial"

-			    bold       	FALSE

-			    italics    	FALSE

-			    underline  	FALSE

-			    strike     	FALSE

-			    color      	0

-			    default_color 	TRUE)

-			label      	(object ItemLabel

-			    Parent_View 	@1

-			    location   	(208, 236)

-			    fill_color 	13434879

-			    nlines     	2

-			    max_width  	288

-			    justify    	0

-			    label      	"moduleCore")

-			icon_style 	"Label"

-			line_color 	3342489

-			fill_color 	13434879

-			quidu      	"3A0DB68B0046"

-			width      	300

-			height     	180)))))

-    root_subsystem 	(object SubSystem "Component View"

-	quid       	"3A0B2474027D"

-	physical_models 	(list unit_reference_list)

-	physical_presentations 	(list unit_reference_list

-	    (object Module_Diagram "Main"

-		quid       	"3A0B24790338"

-		title      	"Main"

-		zoom       	100

-		max_height 	28350

-		max_width  	21600

-		origin_x   	0

-		origin_y   	0

-		items      	(list diagram_item_list)))

-	category   	"Logical View"

-	quidu      	"41EC1C3B00A4")

-    process_structure 	(object Processes

-	quid       	"3A0B2474027E"

-	ProcsNDevs 	(list

-	    (object Process_Diagram "Deployment View"

-		quid       	"3A0B24740291"

-		title      	"Deployment View"

-		zoom       	100

-		max_height 	28350

-		max_width  	21600

-		origin_x   	0

-		origin_y   	0

-		items      	(list diagram_item_list))))

-    properties 	(object Properties

-	attributes 	(list Attribute_Set

-	    (object Attribute

-		tool       	"Ecore"

-		name       	"roseId"

-		value      	"753117540")

-	    (object Attribute

-		tool       	"Ecore"

-		name       	"propertyId"

-		value      	"809135966")

-	    (object Attribute

-		tool       	"Ecore"

-		name       	"default__Category"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"prefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"packageName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"basePackage"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"nsName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"nsURI"

-			value      	"")))

-	    (object Attribute

-		tool       	"Ecore"

-		name       	"default__Category"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"packageName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"prefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"basePackage"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"nsName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"nsURI"

-			value      	"")))

-	    (object Attribute

-		tool       	"Ecore"

-		name       	"default__Category"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"basePackage"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"prefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"packageName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"nsName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"nsURI"

-			value      	"")))

-	    (object Attribute

-		tool       	"Ecore"

-		name       	"default__Category"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"nsName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"prefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"packageName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"basePackage"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"nsURI"

-			value      	"")))

-	    (object Attribute

-		tool       	"Ecore"

-		name       	"default__Category"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"nsURI"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"prefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"packageName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"basePackage"

-			value      	"")

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"nsName"

-			value      	"")))

-	    (object Attribute

-		tool       	"Ecore"

-		name       	"default__Attribute"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"isTransient"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"isVolatile"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"isChangeable"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"isUnsettable"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"isUnique"

-			value      	TRUE)))

-	    (object Attribute

-		tool       	"Ecore"

-		name       	"default__Role"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"isTransient"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"isVolatile"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"isChangeable"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"isUnsettable"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ecore"

-			name       	"isResolveProxies"

-			value      	TRUE)))

-	    (object Attribute

-		tool       	"Cplusplus"

-		name       	"propertyId"

-		value      	"809135966")

-	    (object Attribute

-		tool       	"Cplusplus"

-		name       	"default__Role"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"Synchronize"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"Const"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"InitialValue"

-			value      	"")))

-	    (object Attribute

-		tool       	"Cplusplus"

-		name       	"default__Inherit"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"Synchronize"

-			value      	TRUE)))

-	    (object Attribute

-		tool       	"Cplusplus"

-		name       	"default__Module-Spec"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"Synchronize"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"Copyright"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"RootPackage"

-			value      	"C++ Reverse Engineered")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"InitialHeaderIncludes"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"InitialBodyIncludes"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"RevEngRootDirectory"

-			value      	"")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"RevEngDirectoriesAsPackages"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"HeaderFileExtension"

-			value      	".h")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"ImplementationFileExtension"

-			value      	".cpp")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"NewHeaderFileDirectory"

-			value      	"")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"NewImplementationFileDirectory"

-			value      	"")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"FileCapitalization"

-			value      	("FileCapitalizationSet" 0))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"CodeGenExtraDirectories"

-			value      	("CodeGenExtraDirectoriesSet" 0))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"StripClassPrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"UseTabs"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"TabWidth"

-			value      	8)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"IndentWidth"

-			value      	4)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"AccessIndentation"

-			value      	-2)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"ModelIdCommentRules"

-			value      	("ModelIdCommentRulesSet" 1))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"PageWidth"

-			value      	80)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"ClassMemberOrder"

-			value      	("MemberOrderSet" 1))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"OneParameterPerLine"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"NamespaceBraceStyle"

-			value      	("BraceStyleSet" 2))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"ClassBraceStyle"

-			value      	("BraceStyleSet" 2))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"FunctionBraceStyle"

-			value      	("BraceStyleSet" 2))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"CodeGenExtraDirectoriesSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"None"

-				value      	0)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Namespaces"

-				value      	1)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Packages"

-				value      	2)))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"FileCapitalizationSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Same as model"

-				value      	0)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Lower case"

-				value      	1)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Upper case"

-				value      	2)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Lower case with underscores"

-				value      	3)))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"BraceStyleSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"B1"

-				value      	1)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"B2"

-				value      	2)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"B3"

-				value      	3)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"B4"

-				value      	4)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"B5"

-				value      	5)))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"MemberOrderSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Public First"

-				value      	1)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Private First"

-				value      	2)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Order by kind"

-				value      	3)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Unordered"

-				value      	4)))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"ModelIdCommentRulesSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Code generation only"

-				value      	1)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Code generation and reverse engineering"

-				value      	2)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Never generate model IDs"

-				value      	3)))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"CreateBackupFiles"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"CommentRules"

-			value      	("CommentRulesSet" 1))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"CommentRulesSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Always synchronize"

-				value      	1)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Code generation only"

-				value      	2)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Reverse engineering only"

-				value      	3)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Never synchronize"

-				value      	4)))))

-	    (object Attribute

-		tool       	"Cplusplus"

-		name       	"default__Param"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"CodeName"

-			value      	"")))

-	    (object Attribute

-		tool       	"Cplusplus"

-		name       	"default__Attribute"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"Synchronize"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"CodeName"

-			value      	"")))

-	    (object Attribute

-		tool       	"Cplusplus"

-		name       	"default__Operation"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"Synchronize"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"InitialCodeBody"

-			value      	"")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"Inline"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"GenerateFunctionBody"

-			value      	("GenerateFunctionBodySet" 2))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"GenerateFunctionBodySet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Default"

-				value      	2)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"True"

-				value      	1)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"False"

-				value      	0)))))

-	    (object Attribute

-		tool       	"Cplusplus"

-		name       	"default__Class"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"Synchronize"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"ImplementationType"

-			value      	"")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"HeaderSourceFile"

-			value      	"")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"BodySourceFile"

-			value      	"")))

-	    (object Attribute

-		tool       	"Cplusplus"

-		name       	"default__Category"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"IsNamespace"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Cplusplus"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"ANSI C++ Event Watcher"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"ANSIConvert"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"Ada83"

-		name       	"propertyId"

-		value      	"838326200")

-	    (object Attribute

-		tool       	"Ada83"

-		name       	"default__Project"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"SpecFileExtension"

-			value      	"1.ada")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"SpecFileBackupExtension"

-			value      	"1.ad~")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"SpecFileTemporaryExtension"

-			value      	"1.ad#")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"BodyFileExtension"

-			value      	"2.ada")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"BodyFileBackupExtension"

-			value      	"2.ad~")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"BodyFileTemporaryExtension"

-			value      	"2.ad#")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"CreateMissingDirectories"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"GenerateBodies"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"GenerateAccessorOperations"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"GenerateStandardOperations"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ImplicitParameter"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"CommentWidth"

-			value      	60)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"StopOnError"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ErrorLimit"

-			value      	30)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"UseFileName"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"Directory"

-			value      	"$ROSEADA83_SOURCE")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"DefaultCodeBody"

-			value      	"[statement]")))

-	    (object Attribute

-		tool       	"Ada83"

-		name       	"default__Class"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ClassName"

-			value      	"Object")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ClassAccess"

-			value      	("ImplementationSet" 43))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ImplementationType"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"IsSubtype"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"PolymorphicUnit"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"HandleName"

-			value      	"Handle")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"HandleAccess"

-			value      	("ImplementationSet" 45))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"Discriminant"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"Variant"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"EnumerationLiteralPrefix"

-			value      	"A_")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"RecordFieldPrefix"

-			value      	"The_")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"GenerateAccessorOperations"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"GenerateStandardOperations"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ImplicitParameter"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ClassParameterName"

-			value      	"This")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"DefaultConstructorKind"

-			value      	("ConstructorKindSet" 199))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"DefaultConstructorName"

-			value      	"Create")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"InlineDefaultConstructor"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"CopyConstructorKind"

-			value      	("ConstructorKindSet" 199))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"CopyConstructorName"

-			value      	"Copy")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"InlineCopyConstructor"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"DestructorName"

-			value      	"Free")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"InlineDestructor"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ClassEqualityOperation"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"HandleEqualityOperation"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"InlineEquality"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"IsTask"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"Representation"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ImplementationSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"Public"

-				value      	45)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"Private"

-				value      	43)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"LimitedPrivate"

-				value      	200)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"DoNotCreate"

-				value      	201)))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ConstructorKindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"Procedure"

-				value      	202)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"Function"

-				value      	199)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"DoNotCreate"

-				value      	201)))))

-	    (object Attribute

-		tool       	"Ada83"

-		name       	"default__Module-Spec"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"Generate"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"CopyrightNotice"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"FileName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ReturnType"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"GenericFormalParameters"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"AdditionalWiths"

-			value      	(value Text ""))))

-	    (object Attribute

-		tool       	"Ada83"

-		name       	"default__Module-Body"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"Generate"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"CopyrightNotice"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"FileName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ReturnType"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"AdditionalWiths"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"IsSubunit"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Ada83"

-		name       	"default__Operation"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"SubprogramImplementation"

-			value      	("SubprogramImplementationSet" 2))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ClassParameterMode"

-			value      	("ParameterModeSet" 203))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"Inline"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"EntryCode"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ExitCode"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"Representation"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"SubprogramImplementationSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"Spec"

-				value      	1)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"Body"

-				value      	2)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"Renaming"

-				value      	3)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"Separate"

-				value      	4)))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ParameterModeSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"In"

-				value      	204)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"Out"

-				value      	205)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"InOut"

-				value      	203)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"FunctionReturn"

-				value      	206)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"DoNotCreate"

-				value      	201)))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"Renames"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"InitialCodeBody"

-			value      	"${default}")))

-	    (object Attribute

-		tool       	"Ada83"

-		name       	"default__Has"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"NameIfUnlabeled"

-			value      	"The_${supplier}")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"DataMemberName"

-			value      	"${relationship}")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"GetName"

-			value      	"Get_${relationship}")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"InlineGet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"SetName"

-			value      	"Set_${relationship}")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"InlineSet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"IsConstant"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"InitialValue"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"Variant"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ContainerGeneric"

-			value      	"List")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ContainerType"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ContainerDeclarations"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"SelectorName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"SelectorType"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"Declare"

-			value      	("DeclareSet" 234))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"DeclareSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"Before"

-				value      	233)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"After"

-				value      	234)))))

-	    (object Attribute

-		tool       	"Ada83"

-		name       	"default__Attribute"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"DataMemberName"

-			value      	"${attribute}")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"GetName"

-			value      	"Get_${attribute}")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"InlineGet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"SetName"

-			value      	"Set_${attribute}")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"InlineSet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"IsConstant"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"InitialValue"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"Variant"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"Representation"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"Declare"

-			value      	("DeclareSet" 234))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"DeclareSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"Before"

-				value      	233)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"After"

-				value      	234)))))

-	    (object Attribute

-		tool       	"Ada83"

-		name       	"default__Association"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"NameIfUnlabeled"

-			value      	"The_${targetClass}")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"GetName"

-			value      	"Get_${association}")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"InlineGet"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"SetName"

-			value      	"Set_${association}")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"InlineSet"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"GenerateAssociate"

-			value      	("ProcedureKindSet" 202))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"AssociateName"

-			value      	"Associate")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"InlineAssociate"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"GenerateDissociate"

-			value      	("ProcedureKindSet" 202))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"DissociateName"

-			value      	"Dissociate")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"InlineDissociate"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ProcedureKindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"Procedure"

-				value      	202)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"DoNotCreate"

-				value      	201)))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"FunctionKindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"Function"

-				value      	199)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"DoNotCreate"

-				value      	201)))))

-	    (object Attribute

-		tool       	"Ada83"

-		name       	"default__Role"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"NameIfUnlabeled"

-			value      	"The_${targetClass}")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"DataMemberName"

-			value      	"${target}")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"GetName"

-			value      	"Get_${target}")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"InlineGet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"SetName"

-			value      	"Set_${target}")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"InlineSet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"IsConstant"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"InitialValue"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ContainerGeneric"

-			value      	"List")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ContainerType"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ContainerDeclarations"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"SelectorName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"SelectorType"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ProcedureKindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"Procedure"

-				value      	202)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"DoNotCreate"

-				value      	201)))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"Declare"

-			value      	("DeclareSet" 234))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"DeclareSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"Before"

-				value      	233)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"After"

-				value      	234)))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"Representation"

-			value      	(value Text ""))))

-	    (object Attribute

-		tool       	"Ada83"

-		name       	"default__Subsystem"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"Directory"

-			value      	"AUTO GENERATE")))

-	    (object Attribute

-		tool       	"Ada83"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"Ada95"

-		name       	"propertyId"

-		value      	"838326200")

-	    (object Attribute

-		tool       	"Ada95"

-		name       	"default__Project"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"SpecFileExtension"

-			value      	"1.ada")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"SpecFileBackupExtension"

-			value      	"1.ad~")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"SpecFileTemporaryExtension"

-			value      	"1.ad#")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"BodyFileExtension"

-			value      	"2.ada")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"BodyFileBackupExtension"

-			value      	"2.ad~")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"BodyFileTemporaryExtension"

-			value      	"2.ad#")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"CreateMissingDirectories"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"UseColonNotation"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateBodies"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateAccessorOperations"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateStandardOperations"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ImplicitParameter"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"CommentWidth"

-			value      	60)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"StopOnError"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ErrorLimit"

-			value      	30)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"UseFileName"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"Directory"

-			value      	"$ROSEADA95_SOURCE")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"DefaultCodeBody"

-			value      	"[statement]")))

-	    (object Attribute

-		tool       	"Ada95"

-		name       	"default__Class"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"TypeName"

-			value      	"Object")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"TypeVisibility"

-			value      	("TypeVisibilitySet" 43))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"TypeImplementation"

-			value      	("TypeImplementationSet" 208))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"TypeControl"

-			value      	("TypeControlSet" 225))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"TypeControlName"

-			value      	"Controlled_${type}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"TypeDefinition"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"RecordImplementation"

-			value      	("RecordImplementationSet" 209))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"RecordKindPackageName"

-			value      	"${class}_Record_Kinds")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"IsLimited"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"IsSubtype"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateAccessType"

-			value      	("GenerateAccessTypeSet" 230))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"AccessTypeName"

-			value      	"Handle")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"AccessTypeVisibility"

-			value      	("TypeVisibilitySet" 45))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"AccessTypeDefinition"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"AccessClassWide"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"MaybeAliased"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ParameterizedImplementation"

-			value      	("ParameterizedImplementationSet" 11))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ParentClassName"

-			value      	"Superclass")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"EnumerationLiteralPrefix"

-			value      	"A_")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"RecordFieldPrefix"

-			value      	"The_")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ArrayOfTypeName"

-			value      	"Array_Of_${type}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"AccessArrayOfTypeName"

-			value      	"Access_Array_Of_${type}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ArrayOfAccessTypeName"

-			value      	"Array_Of_${access_type}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"AccessArrayOfAccessTypeName"

-			value      	"Access_Array_Of_${access_type}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ArrayIndexDefinition"

-			value      	"Positive range <>")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateAccessorOperations"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateStandardOperations"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ImplicitParameter"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ImplicitParameterName"

-			value      	"This")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateDefaultConstructor"

-			value      	("SubprogramKindSet" 199))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"DefaultConstructorName"

-			value      	"Create")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"InlineDefaultConstructor"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateCopyConstructor"

-			value      	("SubprogramKindSet" 199))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"CopyConstructorName"

-			value      	"Copy")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"InlineCopyConstructor"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateDestructor"

-			value      	("ProcedureKindSet" 202))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"DestructorName"

-			value      	"Free")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"InlineDestructor"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateTypeEquality"

-			value      	("FunctionKindSet" 201))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"TypeEqualityName"

-			value      	"${quote}=${quote}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"InlineEquality"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"Representation"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"TypeImplementationSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Tagged"

-				value      	208)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Record"

-				value      	210)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Mixin"

-				value      	211)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Protected"

-				value      	44)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Task"

-				value      	212)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"RecordImplementationSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"SingleType"

-				value      	209)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"MultipleTypes"

-				value      	213)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ParameterizedImplementationSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Generic"

-				value      	11)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Unconstrained"

-				value      	214)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"TypeVisibilitySet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Public"

-				value      	45)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Private"

-				value      	43)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"SubprogramKindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Procedure"

-				value      	202)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Function"

-				value      	199)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"DoNotCreate"

-				value      	201)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ProcedureKindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Procedure"

-				value      	202)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"DoNotCreate"

-				value      	201)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"FunctionKindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Function"

-				value      	199)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"DoNotCreate"

-				value      	201)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"TypeControlSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"None"

-				value      	225)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"InitializationOnly"

-				value      	226)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"AssignmentFinalizationOnly"

-				value      	227)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"All"

-				value      	228)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateAccessTypeSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Always"

-				value      	229)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Auto"

-				value      	230)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"IncompleteType"

-			value      	("IncompleteTypeSet" 1))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"TypeControlVisibility"

-			value      	("TypeVisibilitySet" 43))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"IncompleteTypeSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"DoNotDeclare"

-				value      	1)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"NoDiscriminantPart"

-				value      	2)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"UnknownDiscriminantPart"

-				value      	3)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"KnownDiscriminantPart"

-				value      	4)))))

-	    (object Attribute

-		tool       	"Ada95"

-		name       	"default__Module-Spec"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"Generate"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"CopyrightNotice"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"FileName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ReturnType"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenericFormalParameters"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"AdditionalWiths"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"IsPrivate"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Ada95"

-		name       	"default__Module-Body"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"Generate"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"CopyrightNotice"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"FileName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ReturnType"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"AdditionalWiths"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"IsSubunit"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Ada95"

-		name       	"default__Operation"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"SubprogramImplementation"

-			value      	("SubprogramImplementationSet" 2))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"Renames"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateOverriding"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ImplicitParameterMode"

-			value      	("ParameterModeSet" 203))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ImplicitParameterClassWide"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateAccessOperation"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"Inline"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"EntryCode"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ExitCode"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"EntryBarrierCondition"

-			value      	"True")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"Representation"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"SubprogramImplementationSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Spec"

-				value      	1)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Body"

-				value      	2)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Abstract"

-				value      	3)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Renaming"

-				value      	4)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"RenamingAsBody"

-				value      	5)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Separate"

-				value      	6)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ParameterModeSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"In"

-				value      	204)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Out"

-				value      	205)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"InOut"

-				value      	203)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Access"

-				value      	220)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"DoNotCreate"

-				value      	201)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"InitialCodeBody"

-			value      	"${default}")))

-	    (object Attribute

-		tool       	"Ada95"

-		name       	"default__Has"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"NameIfUnlabeled"

-			value      	"The_${supplier}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"RecordFieldImplementation"

-			value      	("RecordFieldImplementationSet" 216))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"RecordFieldName"

-			value      	"${relationship}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateGet"

-			value      	("FunctionKindSet" 199))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateAccessGet"

-			value      	("FunctionKindSet" 201))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GetName"

-			value      	"Get_${relationship}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"InlineGet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateSet"

-			value      	("ProcedureKindSet" 202))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateAccessSet"

-			value      	("ProcedureKindSet" 201))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"SetName"

-			value      	"Set_${relationship}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"InlineSet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"IsAliased"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"IsConstant"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"InitialValue"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ContainerImplementation"

-			value      	("ContainerImplementationSet" 217))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ContainerGeneric"

-			value      	"List")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ContainerType"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ContainerDeclarations"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"SelectorName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"SelectorType"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"RecordFieldImplementationSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Component"

-				value      	216)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Discriminant"

-				value      	218)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"AccessDiscriminant"

-				value      	219)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ContainerImplementationSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Array"

-				value      	217)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Generic"

-				value      	11)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ProcedureKindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Procedure"

-				value      	202)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"DoNotCreate"

-				value      	201)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"FunctionKindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Function"

-				value      	199)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"DoNotCreate"

-				value      	201)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"Declare"

-			value      	("DeclareSet" 234))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"DeclareSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Before"

-				value      	233)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"After"

-				value      	234)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"AccessDiscriminantClassWide"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Ada95"

-		name       	"default__Attribute"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"RecordFieldImplementation"

-			value      	("RecordFieldImplementationSet" 216))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"RecordFieldName"

-			value      	"${attribute}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateGet"

-			value      	("FunctionKindSet" 199))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateAccessGet"

-			value      	("FunctionKindSet" 201))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GetName"

-			value      	"Get_${attribute}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"InlineGet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateSet"

-			value      	("ProcedureKindSet" 202))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateAccessSet"

-			value      	("ProcedureKindSet" 201))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"SetName"

-			value      	"Set_${attribute}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"InlineSet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"IsAliased"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"IsConstant"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"InitialValue"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"Representation"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"RecordFieldImplementationSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Component"

-				value      	216)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Discriminant"

-				value      	218)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"AccessDiscriminant"

-				value      	219)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ProcedureKindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Procedure"

-				value      	202)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"DoNotCreate"

-				value      	201)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"FunctionKindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Function"

-				value      	199)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"DoNotCreate"

-				value      	201)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"Declare"

-			value      	("DeclareSet" 234))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"DeclareSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Before"

-				value      	233)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"After"

-				value      	234)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"AccessDiscriminantClassWide"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Ada95"

-		name       	"default__Association"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"NameIfUnlabeled"

-			value      	"The_${targetClass}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateGet"

-			value      	("FunctionKindSet" 199))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GetName"

-			value      	"Get_${association}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"InlineGet"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateSet"

-			value      	("ProcedureKindSet" 202))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"SetName"

-			value      	"Set_${association}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"InlineSet"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateAssociate"

-			value      	("ProcedureKindSet" 202))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"AssociateName"

-			value      	"Associate")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"InlineAssociate"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateDissociate"

-			value      	("ProcedureKindSet" 202))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"DissociateName"

-			value      	"Dissociate")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"InlineDissociate"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ProcedureKindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Procedure"

-				value      	202)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"DoNotCreate"

-				value      	201)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"FunctionKindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Function"

-				value      	199)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"DoNotCreate"

-				value      	201)))))

-	    (object Attribute

-		tool       	"Ada95"

-		name       	"default__Role"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"NameIfUnlabeled"

-			value      	"The_${targetClass}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"RecordFieldImplementation"

-			value      	("RecordFieldImplementationSet" 216))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"RecordFieldName"

-			value      	"${target}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateGet"

-			value      	("FunctionKindSet" 199))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateAccessGet"

-			value      	("FunctionKindSet" 201))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GetName"

-			value      	"Get_${target}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"InlineGet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateSet"

-			value      	("ProcedureKindSet" 202))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"GenerateAccessSet"

-			value      	("ProcedureKindSet" 201))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"SetName"

-			value      	"Set_${target}")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"InlineSet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"IsAliased"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"IsConstant"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"InitialValue"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ContainerImplementation"

-			value      	("ContainerImplementationSet" 217))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ContainerGeneric"

-			value      	"List")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ContainerType"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ContainerDeclarations"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"SelectorName"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"SelectorType"

-			value      	"")

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ProcedureKindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Procedure"

-				value      	202)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"DoNotCreate"

-				value      	201)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"RecordFieldImplementationSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Component"

-				value      	216)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Discriminant"

-				value      	218)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"AccessDiscriminant"

-				value      	219)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ContainerImplementationSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Array"

-				value      	217)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Generic"

-				value      	11)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"FunctionKindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Function"

-				value      	199)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"DoNotCreate"

-				value      	201)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"Declare"

-			value      	("DeclareSet" 234))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"DeclareSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Before"

-				value      	233)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"After"

-				value      	234)))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"AccessDiscriminantClassWide"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"Representation"

-			value      	(value Text ""))))

-	    (object Attribute

-		tool       	"Ada95"

-		name       	"default__Subsystem"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"Directory"

-			value      	"AUTO GENERATE")))

-	    (object Attribute

-		tool       	"Ada95"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"CORBA"

-		name       	"propertyId"

-		value      	"809135966")

-	    (object Attribute

-		tool       	"CORBA"

-		name       	"default__Project"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"CreateMissingDirectories"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"Editor"

-			value      	("EditorType" 100))

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"IncludePath"

-			value      	"")

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"StopOnError"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"EditorType"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"CORBA"

-				name       	"BuiltIn"

-				value      	100)

-			    (object Attribute

-				tool       	"CORBA"

-				name       	"WindowsShell"

-				value      	101)))

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"PathSeparator"

-			value      	"")))

-	    (object Attribute

-		tool       	"CORBA"

-		name       	"default__Class"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"ArrayDimensions"

-			value      	"")

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"ConstValue"

-			value      	"")

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"ImplementationType"

-			value      	"")))

-	    (object Attribute

-		tool       	"CORBA"

-		name       	"default__Module-Spec"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"AdditionalIncludes"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"CmIdentification"

-			value      	(value Text "  %X% %Q% %Z% %W%"))

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"CopyrightNotice"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"InclusionProtectionSymbol"

-			value      	"AUTO GENERATE")))

-	    (object Attribute

-		tool       	"CORBA"

-		name       	"default__Module-Body"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"AdditionalIncludes"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"CmIdentification"

-			value      	(value Text "  %X% %Q% %Z% %W%"))

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"CopyrightNotice"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"InclusionProtectionSymbol"

-			value      	"AUTO GENERATE")))

-	    (object Attribute

-		tool       	"CORBA"

-		name       	"default__Operation"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"Context"

-			value      	"")

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"OperationIsOneWay"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"CORBA"

-		name       	"default__Attribute"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"ArrayDimensions"

-			value      	"")

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"CaseSpecifier"

-			value      	"")

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"IsReadOnly"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"Order"

-			value      	"")))

-	    (object Attribute

-		tool       	"CORBA"

-		name       	"default__Role"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"ArrayDimensions"

-			value      	"")

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"CaseSpecifier"

-			value      	"")

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"GenerateForwardReference"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"IsReadOnly"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"Order"

-			value      	"")

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"BoundedRoleType"

-			value      	("AssocTypeSet" 47))

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"AssocTypeSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"CORBA"

-				name       	"Array"

-				value      	24)

-			    (object Attribute

-				tool       	"CORBA"

-				name       	"Sequence"

-				value      	47)))))

-	    (object Attribute

-		tool       	"CORBA"

-		name       	"default__Uses"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"GenerateForwardReference"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"CORBA"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"Data Modeler"

-		name       	"propertyId"

-		value      	"809135966")

-	    (object Attribute

-		tool       	"Data Modeler"

-		name       	"default__Project"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"project"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"TableCounter"

-			value      	0)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"DomainCounter"

-			value      	0)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"SPPackageCounter"

-			value      	0)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"TriggerCounter"

-			value      	0)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IndexCounter"

-			value      	0)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ConstraintCounter"

-			value      	0)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"StoreProcedureCounter"

-			value      	0)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"PrimaryKeyCounter"

-			value      	0)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ForeignKeyCounter"

-			value      	0)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"TablePrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"DomainPrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"TriggerPrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IndexPrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ConstraintPrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"StoreProcedurePrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"PrimaryKeyPrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ForeignKeyPrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ViewCounter"

-			value      	0)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"JoinCounter"

-			value      	0)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"TableSpaceCounter"

-			value      	0)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"cONTAINERCounter"

-			value      	0)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ViewPrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"TableSpacePrefix"

-			value      	"")))

-	    (object Attribute

-		tool       	"Data Modeler"

-		name       	"default__Module-Spec"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"dmItem"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"DMName"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsDatabase"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"TargetDatabase"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"Location"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsTableSpace"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"TableSpaceType"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsDeault"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"BufferPool"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ExtentSize"

-			value      	1)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"PrefetchSize"

-			value      	1)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"PageSize"

-			value      	4)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ManagedBy"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ContainerList"

-			value      	"")))

-	    (object Attribute

-		tool       	"Data Modeler"

-		name       	"default__Category"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"dmItem"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"DMName"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"dmSchema"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"dmDomainPackage"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsSchema"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsDomainPackage"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsRootSchema"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsRootDomainPackage"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsSchemaPackage"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"DatabaseID"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"DBMS"

-			value      	"")))

-	    (object Attribute

-		tool       	"Data Modeler"

-		name       	"default__Class"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"dmItem"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"DMName"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsTable"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsView"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsDomain"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsSPPackage"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"Synonymns"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"TableSpace"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"SourceId"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"SourceType"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"SelectClause"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsUpdatable"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"CheckOption"

-			value      	0)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"PersistToServer"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"TableSpaceID"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"CorrelationName"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsUpdateable"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsSnapShot"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsDistinct"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsPackage"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Data Modeler"

-		name       	"default__Attribute"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"dmItem"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"DMName"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"Ordinal"

-			value      	0)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsIdentity"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsUnique"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"NullsAllowed"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"Length"

-			value      	0)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"Scale"

-			value      	0)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ColumnType"

-			value      	"Native")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ForBitData"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"DefaultValueType"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"DefaultValue"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"SourceId"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"SourceType"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"OID"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Data Modeler"

-		name       	"default__Association"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"dmItem"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"DMName"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsRelationship"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"SourceId"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"SourceType"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"RIMethod"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ParentUpdateRule"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ParentUpdateRuleName"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ParentDeleteRule"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ParentDeleteRuleName"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ChildInsertRestrict"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ChildInsertRestrictName"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ChildMultiplicity"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ChildMultiplicityName"

-			value      	"")))

-	    (object Attribute

-		tool       	"Data Modeler"

-		name       	"default__Role"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"dmItem"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"DMName"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ConstraintName"

-			value      	"")))

-	    (object Attribute

-		tool       	"Data Modeler"

-		name       	"default__Operation"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"dmItem"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"DMName"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsConstraint"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ConstraintType"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsIndex"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsTrigger"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsStoredProcedure"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsCluster"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"TableSpace"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"FillFactor"

-			value      	0)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"KeyList"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"CheckPredicate"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsUnique"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"DeferalMode"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"InitialCheckTime"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"TriggerType"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsInsertEvent"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsUpdateEvent"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsDeleteEvent"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"RefOldTable"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"RefNewTable"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"RefOldRow"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"RefNewRow"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsRow"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"WhenClause"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"Language"

-			value      	"SQL")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ProcType"

-			value      	"Procedure")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsDeterministic"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ParameterStyle"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ReturnedNull"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ExternalName"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"Length"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"Scale"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ForBitData"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"DefaultValue"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"DefaultValueType"

-			value      	"")))

-	    (object Attribute

-		tool       	"Data Modeler"

-		name       	"default__Parameter"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"dmItem"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"DMName"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsInParameter"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"IsOutParameter"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"Ordinal"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"Length"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"Scale"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"ForBitData"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"DefaultValueType"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"DefaultValue"

-			value      	"")

-		    (object Attribute

-			tool       	"Data Modeler"

-			name       	"OperationID"

-			value      	"")))

-	    (object Attribute

-		tool       	"Data Modeler"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"Data Modeler Communicator"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"framework"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"Java"

-		name       	"propertyId"

-		value      	"809135966")

-	    (object Attribute

-		tool       	"Java"

-		name       	"default__Project"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Java"

-			name       	"RootDir"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"CreateMissingDirectories"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"StopOnError"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"UsePrefixes"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"AutoSync"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ShowCodegenDlg"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"JavadocDefaultAuthor"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"JavadocDefaultVersion"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"JavadocDefaultSince"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"JavadocNumAsterisks"

-			value      	0)

-		    (object Attribute

-			tool       	"Java"

-			name       	"MaxNumChars"

-			value      	80)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Editor"

-			value      	("EditorType" 100))

-		    (object Attribute

-			tool       	"Java"

-			name       	"VM"

-			value      	("VMType" 200))

-		    (object Attribute

-			tool       	"Java"

-			name       	"ClassPath"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EditorType"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	"BuiltIn"

-				value      	100)

-			    (object Attribute

-				tool       	"Java"

-				name       	"WindowsShell"

-				value      	101)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"VMType"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	"Sun"

-				value      	200)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Microsoft"

-				value      	201)

-			    (object Attribute

-				tool       	"Java"

-				name       	"IBM"

-				value      	202)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"InstanceVariablePrefix"

-			value      	"m_")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ClassVariablePrefix"

-			value      	"s_")

-		    (object Attribute

-			tool       	"Java"

-			name       	"DefaultAttributeDataType"

-			value      	"int")

-		    (object Attribute

-			tool       	"Java"

-			name       	"DefaultOperationReturnType"

-			value      	"void")

-		    (object Attribute

-			tool       	"Java"

-			name       	"NoClassCustomDlg"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GlobalImports"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Java"

-			name       	"OpenBraceClassStyle"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"OpenBraceMethodStyle"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"UseTabs"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"UseSpaces"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"SpacingItems"

-			value      	3)

-		    (object Attribute

-			tool       	"Java"

-			name       	"RoseDefaultCommentStyle"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"AsteriskCommentStyle"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"JavaCommentStyle"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"JavadocAuthor"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"JavadocSince"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"JavadocVersion"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"NotShowRoseIDDlg"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateRoseID"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateDefaultReturnLine"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"UserDefineTagName1"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"UserDefineTagApply1"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"UserDefineTagText1"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"UserDefineTagName2"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"UserDefineTagApply2"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"UserDefineTagText2"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"UserDefineTagName3"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"UserDefineTagApply3"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"UserDefineTagText3"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ReferenceClasspath"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"VAJavaWorkingFolder"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"BeanPrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"BeanSuffix"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"RemotePrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"RemoteSuffix"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"HomePrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"HomeSuffix"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"PrimaryKeyPrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"PrimaryKeySuffix"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBDTDLocation"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletDTDLocation"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"DefaultEJBVersion"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"DefaultServletVersion"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateDefaultJ2EEJavadoc"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"UserDefineJavaDocTags"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"LocalPrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"LocalSuffix"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"LocalHomePrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"LocalHomeSuffix"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"SourceControl"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"SCCSelected"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"SCCProjectSourceRoot"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"SCCProjectName"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"SCCComment"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Java"

-		name       	"default__Class"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Java"

-			name       	"Final"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Static"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateDefaultConstructor"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ConstructorIs"

-			value      	("Ctor_Set" 62))

-		    (object Attribute

-			tool       	"Java"

-			name       	"Ctor_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	"public"

-				value      	62)

-			    (object Attribute

-				tool       	"Java"

-				name       	"protected"

-				value      	63)

-			    (object Attribute

-				tool       	"Java"

-				name       	"private"

-				value      	64)

-			    (object Attribute

-				tool       	"Java"

-				name       	"package"

-				value      	65)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateFinalizer"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateStaticInitializer"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateInstanceInitializer"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateCode"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"DisableAutoSync"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ReadOnly"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletName"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletContextRef"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"IsSingleThread"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletInitParameter"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletInitParameterNames"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletIsSecure"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestDispatcher"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestDispatcherPath"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"DispatcherInclude"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"DispatcherForward"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletSecurityRoles"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletgetInfo"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletXMLFilePath"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestAttribute"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestAttributesNames"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"MethodForRequestAttributes"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestParameter"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestParameterNames"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"MethodForRequestParameters"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletHeader"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletHeaderNames"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"MethodForHeaders"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletIntHeader"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletDateHeader"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletCookie"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"MethodForCookie"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletContentType"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateHTML"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Generate_XML_DD"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBCmpField"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBEnvironmentProperties"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBCnxFactory"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBReferences"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBSecurityRoles"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBNameInJAR"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBSessionType"

-			value      	("EJBSessionType_Set" 200))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBSessionType_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	""

-				value      	200)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Stateless"

-				value      	201)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Stateful"

-				value      	202)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBTransactionType"

-			value      	("EJBTransactionType_Set" 211))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBTransactionType_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	"Container"

-				value      	211)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Bean"

-				value      	212)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBPersistenceType"

-			value      	("EJBPersistenceType_Set" 220))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBPersistenceType_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	""

-				value      	220)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Bean"

-				value      	221)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Container"

-				value      	222)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBReentrant"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBSessionSync"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBVersion"

-			value      	("EJBVersion_Set" 230))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBVersion_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	"2.0"

-				value      	230)

-			    (object Attribute

-				tool       	"Java"

-				name       	"1.x"

-				value      	231)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBXMLFilePath"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"BMP_Extend_CMP"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Strictfp"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Java"

-		name       	"Default_Servlet__Class"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletName"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletContextRef"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"IsSingleThread"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletInitParameter"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletInitParameterNames"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletIsSecure"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestDispatcher"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestDispatcherPath"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"DispatcherInclude"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"DispatcherForward"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletSecurityRoles"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletgetInfo"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"Final"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Static"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateDefaultConstructor"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ConstructorIs"

-			value      	("Ctor_Set" 62))

-		    (object Attribute

-			tool       	"Java"

-			name       	"Ctor_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	"public"

-				value      	62)

-			    (object Attribute

-				tool       	"Java"

-				name       	"protected"

-				value      	63)

-			    (object Attribute

-				tool       	"Java"

-				name       	"private"

-				value      	64)

-			    (object Attribute

-				tool       	"Java"

-				name       	"package"

-				value      	65)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateFinalizer"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateStaticInitializer"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateInstanceInitializer"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateCode"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"DisableAutoSync"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ReadOnly"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletXMLFilePath"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestAttribute"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestAttributesNames"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"MethodForRequestAttributes"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestParameter"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestParameterNames"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"MethodForRequestParameters"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletHeader"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletHeaderNames"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"MethodForHeaders"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletIntHeader"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletDateHeader"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletCookie"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"MethodForCookie"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletContentType"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateHTML"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Generate_XML_DD"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBCmpField"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBEnvironmentProperties"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBCnxFactory"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBReferences"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBSecurityRoles"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBNameInJAR"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBSessionType"

-			value      	("EJBSessionType_Set" 200))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBSessionType_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	""

-				value      	200)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Stateless"

-				value      	201)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Stateful"

-				value      	202)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBTransactionType"

-			value      	("EJBTransactionType_Set" 211))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBTransactionType_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	"Container"

-				value      	211)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Bean"

-				value      	212)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBPersistenceType"

-			value      	("EJBPersistenceType_Set" 220))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBPersistenceType_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	""

-				value      	220)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Bean"

-				value      	221)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Container"

-				value      	222)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBReentrant"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBSessionSync"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBVersion"

-			value      	("EJBVersion_Set" 230))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBVersion_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	"2.0"

-				value      	230)

-			    (object Attribute

-				tool       	"Java"

-				name       	"1.x"

-				value      	231)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBXMLFilePath"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"BMP_Extend_CMP"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Strictfp"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Java"

-		name       	"Http_Servlet__Class"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestAttribute"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestAttributesNames"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"MethodForRequestAttributes"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestParameter"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestParameterNames"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"MethodForRequestParameters"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletHeader"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletHeaderNames"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"MethodForHeaders"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletIntHeader"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletDateHeader"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletCookie"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"MethodForCookie"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletContentType"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateHTML"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Final"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Static"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateDefaultConstructor"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ConstructorIs"

-			value      	("Ctor_Set" 62))

-		    (object Attribute

-			tool       	"Java"

-			name       	"Ctor_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	"public"

-				value      	62)

-			    (object Attribute

-				tool       	"Java"

-				name       	"protected"

-				value      	63)

-			    (object Attribute

-				tool       	"Java"

-				name       	"private"

-				value      	64)

-			    (object Attribute

-				tool       	"Java"

-				name       	"package"

-				value      	65)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateFinalizer"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateStaticInitializer"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateInstanceInitializer"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateCode"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"DisableAutoSync"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ReadOnly"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletName"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletContextRef"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"IsSingleThread"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletInitParameter"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletInitParameterNames"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletIsSecure"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestDispatcher"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestDispatcherPath"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"DispatcherInclude"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"DispatcherForward"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletSecurityRoles"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletgetInfo"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletXMLFilePath"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"Generate_XML_DD"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBCmpField"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBEnvironmentProperties"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBCnxFactory"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBReferences"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBSecurityRoles"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBNameInJAR"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBSessionType"

-			value      	("EJBSessionType_Set" 200))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBSessionType_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	""

-				value      	200)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Stateless"

-				value      	201)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Stateful"

-				value      	202)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBTransactionType"

-			value      	("EJBTransactionType_Set" 211))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBTransactionType_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	"Container"

-				value      	211)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Bean"

-				value      	212)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBPersistenceType"

-			value      	("EJBPersistenceType_Set" 220))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBPersistenceType_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	""

-				value      	220)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Bean"

-				value      	221)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Container"

-				value      	222)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBReentrant"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBSessionSync"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBVersion"

-			value      	("EJBVersion_Set" 230))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBVersion_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	"2.0"

-				value      	230)

-			    (object Attribute

-				tool       	"Java"

-				name       	"1.x"

-				value      	231)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBXMLFilePath"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"BMP_Extend_CMP"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Strictfp"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Java"

-		name       	"Default_EJB__Class"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Java"

-			name       	"Generate_XML_DD"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBCmpField"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBEnvironmentProperties"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBCnxFactory"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBReferences"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBSecurityRoles"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBNameInJAR"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBSessionType"

-			value      	("EJBSessionType_Set" 200))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBSessionType_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	""

-				value      	200)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Stateless"

-				value      	201)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Stateful"

-				value      	202)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBTransactionType"

-			value      	("EJBTransactionType_Set" 211))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBTransactionType_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	"Container"

-				value      	211)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Bean"

-				value      	212)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBPersistenceType"

-			value      	("EJBPersistenceType_Set" 220))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBPersistenceType_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	""

-				value      	220)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Bean"

-				value      	221)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Container"

-				value      	222)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBReentrant"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"BMP_Extend_CMP"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Final"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Static"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateDefaultConstructor"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ConstructorIs"

-			value      	("Ctor_Set" 62))

-		    (object Attribute

-			tool       	"Java"

-			name       	"Ctor_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	"public"

-				value      	62)

-			    (object Attribute

-				tool       	"Java"

-				name       	"protected"

-				value      	63)

-			    (object Attribute

-				tool       	"Java"

-				name       	"private"

-				value      	64)

-			    (object Attribute

-				tool       	"Java"

-				name       	"package"

-				value      	65)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateFinalizer"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateStaticInitializer"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateInstanceInitializer"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateCode"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"DisableAutoSync"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ReadOnly"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletName"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletContextRef"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"IsSingleThread"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletInitParameter"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletInitParameterNames"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletIsSecure"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestDispatcher"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestDispatcherPath"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"DispatcherInclude"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"DispatcherForward"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletSecurityRoles"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletgetInfo"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletXMLFilePath"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestAttribute"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestAttributesNames"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"MethodForRequestAttributes"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestParameter"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletRequestParameterNames"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"MethodForRequestParameters"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletHeader"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletHeaderNames"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"MethodForHeaders"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletIntHeader"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletDateHeader"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletCookie"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"MethodForCookie"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"ServletContentType"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateHTML"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBSessionSync"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBVersion"

-			value      	("EJBVersion_Set" 230))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBVersion_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	"2.0"

-				value      	230)

-			    (object Attribute

-				tool       	"Java"

-				name       	"1.x"

-				value      	231)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"EJBXMLFilePath"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"Strictfp"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Java"

-		name       	"default__Module-Spec"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Java"

-			name       	"CmIdentification"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Java"

-			name       	"CopyrightNotice"

-			value      	(value Text ""))))

-	    (object Attribute

-		tool       	"Java"

-		name       	"default__Module-Body"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Java"

-			name       	"CmIdentification"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Java"

-			name       	"CopyrightNotice"

-			value      	(value Text ""))))

-	    (object Attribute

-		tool       	"Java"

-		name       	"default__Operation"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Java"

-			name       	"Abstract"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Static"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Final"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Native"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Synchronized"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateFullyQualifiedReturn"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"ReplaceExistingCode"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Strictfp"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Java"

-		name       	"default__Attribute"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Java"

-			name       	"Final"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Transient"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Volatile"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"PropertyType"

-			value      	("BeanProperty_Set" 71))

-		    (object Attribute

-			tool       	"Java"

-			name       	"BeanProperty_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	"Not A Property"

-				value      	71)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Simple"

-				value      	72)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Bound"

-				value      	73)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Constrained"

-				value      	74)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"IndividualChangeMgt"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Read/Write"

-			value      	("Read/Write_Set" 81))

-		    (object Attribute

-			tool       	"Java"

-			name       	"Read/Write_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	"Read & Write"

-				value      	81)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Read Only"

-				value      	82)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Write Only"

-				value      	83)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateFullyQualifiedTypes"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Java"

-		name       	"default__Role"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Java"

-			name       	"ContainerClass"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"InitialValue"

-			value      	"")

-		    (object Attribute

-			tool       	"Java"

-			name       	"Final"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Transient"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Volatile"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"PropertyType"

-			value      	("BeanProperty_Set" 71))

-		    (object Attribute

-			tool       	"Java"

-			name       	"BeanProperty_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	"Not A Property"

-				value      	71)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Simple"

-				value      	72)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Bound"

-				value      	73)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Constrained"

-				value      	74)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"IndividualChangeMgt"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"Read/Write"

-			value      	("Read/Write_Set" 81))

-		    (object Attribute

-			tool       	"Java"

-			name       	"Read/Write_Set"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Java"

-				name       	"Read & Write"

-				value      	81)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Read Only"

-				value      	82)

-			    (object Attribute

-				tool       	"Java"

-				name       	"Write Only"

-				value      	83)))

-		    (object Attribute

-			tool       	"Java"

-			name       	"GenerateFullyQualifiedTypes"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Java"

-			name       	"IsNavigable"

-			value      	TRUE)))

-	    (object Attribute

-		tool       	"Java"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"Oracle8"

-		name       	"propertyId"

-		value      	"360000002")

-	    (object Attribute

-		tool       	"Oracle8"

-		name       	"default__Project"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"DDLScriptFilename"

-			value      	"DDL1.SQL")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"DropClause"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"PrimaryKeyColumnName"

-			value      	"_ID")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"PrimaryKeyColumnType"

-			value      	"NUMBER(5,0)")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"SchemaNamePrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"SchemaNameSuffix"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"TableNamePrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"TableNameSuffix"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"TypeNamePrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"TypeNameSuffix"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"ViewNamePrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"ViewNameSuffix"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"VarrayNamePrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"VarrayNameSuffix"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"NestedTableNamePrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"NestedTableNameSuffix"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"ObjectTableNamePrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"ObjectTableNameSuffix"

-			value      	"")))

-	    (object Attribute

-		tool       	"Oracle8"

-		name       	"default__Module-Spec"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"IsSchema"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Oracle8"

-		name       	"default__Class"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"OID"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"WhereClause"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"CheckConstraint"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"CollectionTypeLength"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"CollectionTypePrecision"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"CollectionTypeScale"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"CollectionOfREFS"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Oracle8"

-		name       	"default__Operation"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"MethodKind"

-			value      	("MethodKindSet" 1903))

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"OverloadID"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"OrderNumber"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"IsReadNoDataState"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"IsReadNoProcessState"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"IsWriteNoDataState"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"IsWriteNoProcessState"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"IsSelfish"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"TriggerType"

-			value      	("TriggerTypeSet" 1801))

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"TriggerEvent"

-			value      	("TriggerEventSet" 1601))

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"TriggerText"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"TriggerReferencingNames"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"TriggerForEach"

-			value      	("TriggerForEachSet" 1701))

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"TriggerWhenClause"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"MethodKindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"MapMethod"

-				value      	1901)

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"OrderMethod"

-				value      	1902)

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"Function"

-				value      	1903)

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"Procedure"

-				value      	1904)

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"Operator"

-				value      	1905)

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"Constructor"

-				value      	1906)

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"Destructor"

-				value      	1907)

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"Trigger"

-				value      	1908)

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"Calculated"

-				value      	1909)))

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"TriggerTypeSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"AFTER"

-				value      	1801)

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"BEFORE"

-				value      	1802)

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"INSTEAD OF"

-				value      	1803)))

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"TriggerForEachSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"ROW"

-				value      	1701)

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"STATEMENT"

-				value      	1702)))

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"TriggerEventSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"INSERT"

-				value      	1601)

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"UPDATE"

-				value      	1602)

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"DELETE"

-				value      	1603)

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"INSERT OR UPDATE"

-				value      	1604)

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"INSERT OR DELETE"

-				value      	1605)

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"UPDATE OR DELETE"

-				value      	1606)

-			    (object Attribute

-				tool       	"Oracle8"

-				name       	"INSERT OR UPDATE OR DELETE"

-				value      	1607)))))

-	    (object Attribute

-		tool       	"Oracle8"

-		name       	"default__Role"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"OrderNumber"

-			value      	"")))

-	    (object Attribute

-		tool       	"Oracle8"

-		name       	"default__Attribute"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"OrderNumber"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"IsUnique"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"NullsAllowed"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"Length"

-			value      	"")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"Precision"

-			value      	"2")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"Scale"

-			value      	"6")

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"IsIndex"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"IsPrimaryKey"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"CompositeUnique"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Oracle8"

-			name       	"CheckConstraint"

-			value      	"")))

-	    (object Attribute

-		tool       	"Oracle8"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"R2Editor"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"ComponentTest"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"cg"

-		name       	"propertyId"

-		value      	"809135966")

-	    (object Attribute

-		tool       	"cg"

-		name       	"default__Project"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"cg"

-			name       	"AllowGenerateOverNewerAnnotations"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"AllowGenerateOverNewerVersion"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"UseMSVC"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"HeaderFileExtension"

-			value      	"h")

-		    (object Attribute

-			tool       	"cg"

-			name       	"HeaderFileBackupExtension"

-			value      	"h~")

-		    (object Attribute

-			tool       	"cg"

-			name       	"HeaderFileTemporaryExtension"

-			value      	"h#")

-		    (object Attribute

-			tool       	"cg"

-			name       	"CodeFileExtension"

-			value      	"cpp")

-		    (object Attribute

-			tool       	"cg"

-			name       	"CodeFileBackupExtension"

-			value      	"cp~")

-		    (object Attribute

-			tool       	"cg"

-			name       	"CodeFileTemporaryExtension"

-			value      	"cp#")

-		    (object Attribute

-			tool       	"cg"

-			name       	"CreateMissingDirectories"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"StopOnError"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"ErrorLimit"

-			value      	30)

-		    (object Attribute

-			tool       	"cg"

-			name       	"Directory"

-			value      	"$ROSECPP_SOURCE")

-		    (object Attribute

-			tool       	"cg"

-			name       	"PathSeparator"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"FileNameFormat"

-			value      	"128vx_b")

-		    (object Attribute

-			tool       	"cg"

-			name       	"BooleanType"

-			value      	"int")

-		    (object Attribute

-			tool       	"cg"

-			name       	"AllowTemplates"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"AllowExplicitInstantiations"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"AllowProtectedInheritance"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"CommentWidth"

-			value      	60)

-		    (object Attribute

-			tool       	"cg"

-			name       	"OneByValueContainer"

-			value      	"$targetClass")

-		    (object Attribute

-			tool       	"cg"

-			name       	"OneByReferenceContainer"

-			value      	"$targetClass *")

-		    (object Attribute

-			tool       	"cg"

-			name       	"OptionalByValueContainer"

-			value      	"OptionalByValue<$targetClass>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"OptionalByReferenceContainer"

-			value      	"$targetClass *")

-		    (object Attribute

-			tool       	"cg"

-			name       	"FixedByValueContainer"

-			value      	"$targetClass[$limit]")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedFixedByValueContainer"

-			value      	"$targetClass[$limit]")

-		    (object Attribute

-			tool       	"cg"

-			name       	"FixedByReferenceContainer"

-			value      	"$targetClass *[$limit]")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedFixedByReferenceContainer"

-			value      	"$targetClass *[$limit]")

-		    (object Attribute

-			tool       	"cg"

-			name       	"BoundedByValueContainer"

-			value      	"BoundedListByValue<$targetClass,$limit>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedBoundedByValueContainer"

-			value      	"BoundedSetByValue<$targetClass,$limit>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"BoundedByReferenceContainer"

-			value      	"BoundedListByReference<$targetClass,$limit>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedBoundedByReferenceContainer"

-			value      	"BoundedSetByReference<$targetClass,$limit>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnboundedByValueContainer"

-			value      	"UnboundedListByValue<$targetClass>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedUnboundedByValueContainer"

-			value      	"UnboundedSetByValue<$targetClass>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnboundedByReferenceContainer"

-			value      	"UnboundedListByReference<$targetClass>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedUnboundedByReferenceContainer"

-			value      	"UnboundedSetByReference<$targetClass>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"QualifiedByValueContainer"

-			value      	"AssociationByValue<$qualtype, $qualcont>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedQualifiedByValueContainer"

-			value      	"DictionaryByValue<$qualtype, $qualcont>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"QualifiedByReferenceContainer"

-			value      	"AssociationByReference<$qualtype, $qualcont>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedQualifiedByReferenceContainer"

-			value      	"DictionaryByReference<$qualtype, $qualcont>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"AlwaysKeepOrphanedCode"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"cg"

-		name       	"compiler2.1__Project"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"cg"

-			name       	"AllowGenerateOverNewerAnnotations"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"AllowGenerateOverNewerVersion"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"HeaderFileExtension"

-			value      	"h")

-		    (object Attribute

-			tool       	"cg"

-			name       	"HeaderFileBackupExtension"

-			value      	"h~")

-		    (object Attribute

-			tool       	"cg"

-			name       	"HeaderFileTemporaryExtension"

-			value      	"h#")

-		    (object Attribute

-			tool       	"cg"

-			name       	"CodeFileExtension"

-			value      	"cpp")

-		    (object Attribute

-			tool       	"cg"

-			name       	"CodeFileBackupExtension"

-			value      	"cp~")

-		    (object Attribute

-			tool       	"cg"

-			name       	"CodeFileTemporaryExtension"

-			value      	"cp#")

-		    (object Attribute

-			tool       	"cg"

-			name       	"CreateMissingDirectories"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"StopOnError"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"ErrorLimit"

-			value      	30)

-		    (object Attribute

-			tool       	"cg"

-			name       	"Directory"

-			value      	"$ROSECPP_SOURCE")

-		    (object Attribute

-			tool       	"cg"

-			name       	"BooleanType"

-			value      	"int")

-		    (object Attribute

-			tool       	"cg"

-			name       	"AllowTemplates"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"AllowExplicitInstantiations"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"AllowProtectedInheritance"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"OneByValueContainer"

-			value      	"$targetClass")

-		    (object Attribute

-			tool       	"cg"

-			name       	"OneByReferenceContainer"

-			value      	"$targetClass *")

-		    (object Attribute

-			tool       	"cg"

-			name       	"OptionalByValueContainer"

-			value      	"OptionalByValue<$targetClass>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"OptionalByReferenceContainer"

-			value      	"$targetClass *")

-		    (object Attribute

-			tool       	"cg"

-			name       	"FixedByValueContainer"

-			value      	"$targetClass[$limit]")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedFixedByValueContainer"

-			value      	"$targetClass[$limit]")

-		    (object Attribute

-			tool       	"cg"

-			name       	"FixedByReferenceContainer"

-			value      	"$targetClass *[$limit]")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedFixedByReferenceContainer"

-			value      	"$targetClass *[$limit]")

-		    (object Attribute

-			tool       	"cg"

-			name       	"BoundedByValueContainer"

-			value      	"BoundedListByValue<$targetClass,$limit>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedBoundedByValueContainer"

-			value      	"BoundedSetByValue<$targetClass,$limit>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"BoundedByReferenceContainer"

-			value      	"BoundedListByReference<$targetClass,$limit>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedBoundedByReferenceContainer"

-			value      	"BoundedSetByReference<$targetClass,$limit>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnboundedByValueContainer"

-			value      	"UnboundedListByValue<$targetClass>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedUnboundedByValueContainer"

-			value      	"UnboundedSetByValue<$targetClass>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnboundedByReferenceContainer"

-			value      	"UnboundedListByReference<$targetClass>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedUnboundedByReferenceContainer"

-			value      	"UnboundedSetByReference<$targetClass>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"QualifiedByValueContainer"

-			value      	"AssociationByValue<$qualtype, $qualcont>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedQualifiedByValueContainer"

-			value      	"DictionaryByValue<$qualtype, $qualcont>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"QualifiedByReferenceContainer"

-			value      	"AssociationByReference<$qualtype, $qualcont>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedQualifiedByReferenceContainer"

-			value      	"DictionaryByReference<$qualtype, $qualcont>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"PathSeparator"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"FileNameFormat"

-			value      	"128vx_b")

-		    (object Attribute

-			tool       	"cg"

-			name       	"AlwaysKeepOrphanedCode"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"UseMSVC"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"CommentWidth"

-			value      	60)))

-	    (object Attribute

-		tool       	"cg"

-		name       	"compiler3.0__Project"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"cg"

-			name       	"AllowGenerateOverNewerAnnotations"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"AllowGenerateOverNewerVersion"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"HeaderFileExtension"

-			value      	"h")

-		    (object Attribute

-			tool       	"cg"

-			name       	"HeaderFileBackupExtension"

-			value      	"h~")

-		    (object Attribute

-			tool       	"cg"

-			name       	"HeaderFileTemporaryExtension"

-			value      	"h#")

-		    (object Attribute

-			tool       	"cg"

-			name       	"CodeFileExtension"

-			value      	"cpp")

-		    (object Attribute

-			tool       	"cg"

-			name       	"CodeFileBackupExtension"

-			value      	"cp~")

-		    (object Attribute

-			tool       	"cg"

-			name       	"CodeFileTemporaryExtension"

-			value      	"cp#")

-		    (object Attribute

-			tool       	"cg"

-			name       	"CreateMissingDirectories"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"StopOnError"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"ErrorLimit"

-			value      	30)

-		    (object Attribute

-			tool       	"cg"

-			name       	"Directory"

-			value      	"$ROSECPP_SOURCE")

-		    (object Attribute

-			tool       	"cg"

-			name       	"BooleanType"

-			value      	"int")

-		    (object Attribute

-			tool       	"cg"

-			name       	"AllowTemplates"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"AllowExplicitInstantiations"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"AllowProtectedInheritance"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"OneByValueContainer"

-			value      	"$targetClass")

-		    (object Attribute

-			tool       	"cg"

-			name       	"OneByReferenceContainer"

-			value      	"$targetClass *")

-		    (object Attribute

-			tool       	"cg"

-			name       	"OptionalByValueContainer"

-			value      	"OptionalByValue<$targetClass>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"OptionalByReferenceContainer"

-			value      	"$targetClass *")

-		    (object Attribute

-			tool       	"cg"

-			name       	"FixedByValueContainer"

-			value      	"$targetClass[$limit]")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedFixedByValueContainer"

-			value      	"$targetClass[$limit]")

-		    (object Attribute

-			tool       	"cg"

-			name       	"FixedByReferenceContainer"

-			value      	"$targetClass *[$limit]")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedFixedByReferenceContainer"

-			value      	"$targetClass *[$limit]")

-		    (object Attribute

-			tool       	"cg"

-			name       	"BoundedByValueContainer"

-			value      	"BoundedListByValue<$targetClass,$limit>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedBoundedByValueContainer"

-			value      	"BoundedSetByValue<$targetClass,$limit>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"BoundedByReferenceContainer"

-			value      	"BoundedListByReference<$targetClass,$limit>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedBoundedByReferenceContainer"

-			value      	"BoundedSetByReference<$targetClass,$limit>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnboundedByValueContainer"

-			value      	"UnboundedListByValue<$targetClass>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedUnboundedByValueContainer"

-			value      	"UnboundedSetByValue<$targetClass>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnboundedByReferenceContainer"

-			value      	"UnboundedListByReference<$targetClass>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedUnboundedByReferenceContainer"

-			value      	"UnboundedSetByReference<$targetClass>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"QualifiedByValueContainer"

-			value      	"AssociationByValue<$qualtype, $qualcont>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedQualifiedByValueContainer"

-			value      	"DictionaryByValue<$qualtype, $qualcont>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"QualifiedByReferenceContainer"

-			value      	"AssociationByReference<$qualtype, $qualcont>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"UnorderedQualifiedByReferenceContainer"

-			value      	"DictionaryByReference<$qualtype, $qualcont>")

-		    (object Attribute

-			tool       	"cg"

-			name       	"PathSeparator"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"FileNameFormat"

-			value      	"128vx_b")

-		    (object Attribute

-			tool       	"cg"

-			name       	"AlwaysKeepOrphanedCode"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"UseMSVC"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"CommentWidth"

-			value      	60)))

-	    (object Attribute

-		tool       	"cg"

-		name       	"default__Class"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"cg"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"ImplementationType"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"ClassKey"

-			value      	"class")

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateEmptyRegions"

-			value      	("GenerateEmptyRegionSet" 3))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateEmptyRegionSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"None"

-				value      	0)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Preserved"

-				value      	1)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Unpreserved"

-				value      	2)

-			    (object Attribute

-				tool       	"cg"

-				name       	"All"

-				value      	3)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"PutBodiesInSpec"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateDefaultConstructor"

-			value      	("GenerateSet" 199))

-		    (object Attribute

-			tool       	"cg"

-			name       	"DefaultConstructorVisibility"

-			value      	("VisibilitySet" 45))

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineDefaultConstructor"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"ExplicitDefaultConstructor"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateCopyConstructor"

-			value      	("GenerateSet" 199))

-		    (object Attribute

-			tool       	"cg"

-			name       	"CopyConstructorVisibility"

-			value      	("VisibilitySet" 45))

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineCopyConstructor"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"ExplicitCopyConstructor"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateDestructor"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"DestructorVisibility"

-			value      	("VisibilitySet" 45))

-		    (object Attribute

-			tool       	"cg"

-			name       	"DestructorKind"

-			value      	("ThreeKindSet" 200))

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineDestructor"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateAssignmentOperation"

-			value      	("GenerateSet" 199))

-		    (object Attribute

-			tool       	"cg"

-			name       	"AssignmentVisibility"

-			value      	("VisibilitySet" 45))

-		    (object Attribute

-			tool       	"cg"

-			name       	"AssignmentKind"

-			value      	("ThreeKindSet" 200))

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineAssignmentOperation"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateEqualityOperations"

-			value      	("GenerateSet" 199))

-		    (object Attribute

-			tool       	"cg"

-			name       	"EqualityVisibility"

-			value      	("VisibilitySet" 45))

-		    (object Attribute

-			tool       	"cg"

-			name       	"EqualityKind"

-			value      	("FriendKindSet" 200))

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineEqualityOperations"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateRelationalOperations"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"RelationalVisibility"

-			value      	("VisibilitySet" 45))

-		    (object Attribute

-			tool       	"cg"

-			name       	"RelationalKind"

-			value      	("FriendKindSet" 200))

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineRelationalOperations"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateStorageMgmtOperations"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"StorageMgmtVisibility"

-			value      	("VisibilitySet" 45))

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineStorageMgmtOperations"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateSubscriptOperation"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"SubscriptVisibility"

-			value      	("VisibilitySet" 45))

-		    (object Attribute

-			tool       	"cg"

-			name       	"SubscriptKind"

-			value      	("ThreeKindSet" 200))

-		    (object Attribute

-			tool       	"cg"

-			name       	"SubscriptResultType"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineSubscriptOperation"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateDereferenceOperation"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"DereferenceVisibility"

-			value      	("VisibilitySet" 45))

-		    (object Attribute

-			tool       	"cg"

-			name       	"DereferenceKind"

-			value      	("ThreeKindSet" 200))

-		    (object Attribute

-			tool       	"cg"

-			name       	"DereferenceResultType"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineDereferenceOperation"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateIndirectionOperation"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"IndirectionVisibility"

-			value      	("VisibilitySet" 45))

-		    (object Attribute

-			tool       	"cg"

-			name       	"IndirectionKind"

-			value      	("ThreeKindSet" 200))

-		    (object Attribute

-			tool       	"cg"

-			name       	"IndirectionResultType"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineIndirectionOperation"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateStreamOperations"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"StreamVisibility"

-			value      	("VisibilitySet" 45))

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineStreamOperations"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"ThreeKindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"Common"

-				value      	200)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Virtual"

-				value      	201)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Abstract"

-				value      	202)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"KindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"Common"

-				value      	200)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Virtual"

-				value      	201)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Abstract"

-				value      	202)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Static"

-				value      	203)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"FriendKindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"Common"

-				value      	200)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Virtual"

-				value      	201)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Abstract"

-				value      	202)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Friend"

-				value      	204)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"DeclareAndDefine"

-				value      	199)

-			    (object Attribute

-				tool       	"cg"

-				name       	"DeclareOnly"

-				value      	205)

-			    (object Attribute

-				tool       	"cg"

-				name       	"DoNotDeclare"

-				value      	206)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"VisibilitySet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"Public"

-				value      	45)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Protected"

-				value      	44)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Private"

-				value      	43)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Implementation"

-				value      	14)))))

-	    (object Attribute

-		tool       	"cg"

-		name       	"default__Module-Spec"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"cg"

-			name       	"Generate"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateEmptyRegions"

-			value      	("GenerateEmptyRegionSet" 3))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateEmptyRegionSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"None"

-				value      	0)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Preserved"

-				value      	1)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Unpreserved"

-				value      	2)

-			    (object Attribute

-				tool       	"cg"

-				name       	"All"

-				value      	3)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"CmIdentification"

-			value      	(value Text "  %X% %Q% %Z% %W%"))

-		    (object Attribute

-			tool       	"cg"

-			name       	"CopyrightNotice"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"cg"

-			name       	"FileName"

-			value      	"AUTO GENERATE")

-		    (object Attribute

-			tool       	"cg"

-			name       	"AllowExtensionlessFileName"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"InclusionProtectionSymbol"

-			value      	"AUTO GENERATE")

-		    (object Attribute

-			tool       	"cg"

-			name       	"IncludeFormat"

-			value      	(value Text 

-|// $package

-|#include "$file"

-|

-			))

-		    (object Attribute

-			tool       	"cg"

-			name       	"IncludeBySimpleName"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"IncludePrecompiledHeader"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"IncludeOrder"

-			value      	"AMIR")

-		    (object Attribute

-			tool       	"cg"

-			name       	"AdditionalIncludes"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"cg"

-			name       	"InliningStyle"

-			value      	("InliningStyleSet" 207))

-		    (object Attribute

-			tool       	"cg"

-			name       	"InliningStyleSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"InClassDeclaration"

-				value      	208)

-			    (object Attribute

-				tool       	"cg"

-				name       	"FollowingClassDeclaration"

-				value      	207)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"TypesDefined"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"cg"

-			name       	"IncludeClosure"

-			value      	(value Text ""))))

-	    (object Attribute

-		tool       	"cg"

-		name       	"default__Module-Body"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"cg"

-			name       	"Generate"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateEmptyRegions"

-			value      	("GenerateEmptyRegionSet" 3))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateEmptyRegionSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"None"

-				value      	0)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Preserved"

-				value      	1)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Unpreserved"

-				value      	2)

-			    (object Attribute

-				tool       	"cg"

-				name       	"All"

-				value      	3)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"CmIdentification"

-			value      	(value Text "  %X% %Q% %Z% %W%"))

-		    (object Attribute

-			tool       	"cg"

-			name       	"CopyrightNotice"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"cg"

-			name       	"FileName"

-			value      	"AUTO GENERATE")

-		    (object Attribute

-			tool       	"cg"

-			name       	"AllowExtensionlessFileName"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"IncludeFormat"

-			value      	(value Text 

-|// $package

-|#include "$file"

-|

-			))

-		    (object Attribute

-			tool       	"cg"

-			name       	"IncludeBySimpleName"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"IncludePrecompiledHeader"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"IncludeOrder"

-			value      	"AMIR")

-		    (object Attribute

-			tool       	"cg"

-			name       	"AdditionalIncludes"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"cg"

-			name       	"InliningStyle"

-			value      	("InliningStyleSet" 207))

-		    (object Attribute

-			tool       	"cg"

-			name       	"InliningStyleSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"InClassDeclaration"

-				value      	208)

-			    (object Attribute

-				tool       	"cg"

-				name       	"FollowingClassDeclaration"

-				value      	207)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"TypesDefined"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"cg"

-			name       	"IncludeClosure"

-			value      	(value Text ""))))

-	    (object Attribute

-		tool       	"cg"

-		name       	"default__Operation"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"cg"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"OperationKind"

-			value      	("OperationKindSet" 200))

-		    (object Attribute

-			tool       	"cg"

-			name       	"OperationKindSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"Common"

-				value      	200)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Virtual"

-				value      	201)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Abstract"

-				value      	202)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Static"

-				value      	203)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Friend"

-				value      	204)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateAbstractBody"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"SpecialDeclReturnType"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"OperationIsConst"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"OperationIsExplicit"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"Inline"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"EntryCode"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"cg"

-			name       	"ExitCode"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"cg"

-			name       	"CCRegion"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateEmptyRegions"

-			value      	("GenerateEmptyRegionSet" 3))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateEmptyRegionSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"None"

-				value      	0)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Preserved"

-				value      	1)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Unpreserved"

-				value      	2)

-			    (object Attribute

-				tool       	"cg"

-				name       	"All"

-				value      	3)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"BodyAnnotations"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateFriendBody"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateFriendDecl"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"cg"

-		name       	"default__Has"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"cg"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"Ordered"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"NameIfUnlabeled"

-			value      	"the_$supplier")

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateDataMember"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberName"

-			value      	"$relationship")

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberVisibility"

-			value      	("DataMemberVisibilitySet" 14))

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberVisibilitySet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"Public"

-				value      	45)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Protected"

-				value      	44)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Private"

-				value      	43)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Implementation"

-				value      	14)

-			    (object Attribute

-				tool       	"cg"

-				name       	"AtRelationshipVisibility"

-				value      	210)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberMutability"

-			value      	("DataMemberMutabilitySet" 0))

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberMutabilitySet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"Unrestricted"

-				value      	0)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Mutable"

-				value      	1)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Const"

-				value      	2)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberIsVolatile"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberFieldSize"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"InitialValue"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateGetOperation"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateSetOperation"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetName"

-			value      	"get_$relationship")

-		    (object Attribute

-			tool       	"cg"

-			name       	"SetName"

-			value      	"set_$relationship")

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetSetKinds"

-			value      	("GetSetKindsSet" 200))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetSetKindsSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"Common"

-				value      	200)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Virtual"

-				value      	201)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Abstract"

-				value      	202)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Static"

-				value      	203)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Friend"

-				value      	204)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"ContainerClass"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"SelectorName"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"SelectorType"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetIsConst"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetResultIsConst"

-			value      	("GetResultIsConstSet" 2))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetResultIsConstSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"False"

-				value      	0)

-			    (object Attribute

-				tool       	"cg"

-				name       	"True"

-				value      	1)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Same_As_Function"

-				value      	2)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetSetByReference"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineGet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"SetReturnsValue"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineSet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"ForwardReferenceOnly"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"HasRelTypeSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"Array"

-				value      	24)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Sequence"

-				value      	47)))))

-	    (object Attribute

-		tool       	"cg"

-		name       	"default__Association"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"cg"

-			name       	"NameIfUnlabeled"

-			value      	"the_$targetClass")))

-	    (object Attribute

-		tool       	"cg"

-		name       	"default__Inherit"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"cg"

-			name       	"InstanceArguments"

-			value      	"")))

-	    (object Attribute

-		tool       	"cg"

-		name       	"default__Role"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"cg"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"ForwardReferenceOnly"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"NameIfUnlabeled"

-			value      	"the_$targetClass")

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateDataMember"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberName"

-			value      	"$target")

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberVisibility"

-			value      	("DataMemberVisibilitySet" 14))

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberVisibilitySet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"Public"

-				value      	45)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Protected"

-				value      	44)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Private"

-				value      	43)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Implementation"

-				value      	14)

-			    (object Attribute

-				tool       	"cg"

-				name       	"AtRelationshipVisibility"

-				value      	210)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberMutability"

-			value      	("DataMemberMutabilitySet" 0))

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberMutabilitySet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"Unrestricted"

-				value      	0)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Mutable"

-				value      	1)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Const"

-				value      	2)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberIsVolatile"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberFieldSize"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"InitialValue"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"cg"

-			name       	"ContainerClass"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"ContainerGet"

-			value      	"$data.get($keys)")

-		    (object Attribute

-			tool       	"cg"

-			name       	"ContainerSet"

-			value      	"$data.set($keys,$value)")

-		    (object Attribute

-			tool       	"cg"

-			name       	"QualifiedContainer"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"AssocClassContainer"

-			value      	"$supplier *")

-		    (object Attribute

-			tool       	"cg"

-			name       	"AssocClassInitialValue"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetSetKinds"

-			value      	("GetSetKindsSet" 200))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetSetKindsSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"Common"

-				value      	200)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Virtual"

-				value      	201)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Abstract"

-				value      	202)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Static"

-				value      	203)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Friend"

-				value      	204)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetSetByReference"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateGetOperation"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetName"

-			value      	"get_$target")

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetIsConst"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetResultIsConst"

-			value      	("GetResultIsConstSet" 2))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetResultIsConstSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"False"

-				value      	0)

-			    (object Attribute

-				tool       	"cg"

-				name       	"True"

-				value      	1)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Same_As_Function"

-				value      	2)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineGet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateSetOperation"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"SetName"

-			value      	"set_$target")

-		    (object Attribute

-			tool       	"cg"

-			name       	"SetReturnsValue"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineSet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"QualifiedGetSetByReference"

-			value      	("QualifiedGetSetByReferenceSet" 2))

-		    (object Attribute

-			tool       	"cg"

-			name       	"QualifiedGetSetByReferenceSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"False"

-				value      	0)

-			    (object Attribute

-				tool       	"cg"

-				name       	"True"

-				value      	1)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Same_As_GetSetByReference"

-				value      	2)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateQualifiedGetOperation"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"QualifiedGetName"

-			value      	"get_$target")

-		    (object Attribute

-			tool       	"cg"

-			name       	"QualifiedGetIsConst"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"QualifiedGetResultIsConst"

-			value      	("GetResultIsConstSet" 2))

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineQualifiedGet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateQualifiedSetOperation"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"QualifiedSetName"

-			value      	"set_$target")

-		    (object Attribute

-			tool       	"cg"

-			name       	"QualifiedSetReturnsValue"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineQualifiedSet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateAssocClassDataMember"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"AssocClassDataMemberName"

-			value      	"$target")

-		    (object Attribute

-			tool       	"cg"

-			name       	"AssocClassDataMemberVisibility"

-			value      	("DataMemberVisibilitySet" 14))

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberVisibilitySet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"Public"

-				value      	45)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Protected"

-				value      	44)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Private"

-				value      	43)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Implementation"

-				value      	14)

-			    (object Attribute

-				tool       	"cg"

-				name       	"AtRelationshipVisibility"

-				value      	210)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"AssocClassDataMemberMutability"

-			value      	("DataMemberMutabilitySet" 0))

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberMutabilitySet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"Unrestricted"

-				value      	0)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Mutable"

-				value      	1)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Const"

-				value      	2)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"AssocClassDataMemberIsVolatile"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"AssocClassGetSetKinds"

-			value      	("GetSetKindsSet" 200))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateAssocClassGetOperation"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"AssocClassGetName"

-			value      	"get_$target")

-		    (object Attribute

-			tool       	"cg"

-			name       	"AssocClassGetIsConst"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"AssocClassGetResultIsConst"

-			value      	("GetResultIsConstSet" 2))

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineAssocClassGet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateAssocClassSetOperation"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"AssocClassSetName"

-			value      	"set_$target")

-		    (object Attribute

-			tool       	"cg"

-			name       	"AssocClassSetReturnsValue"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineAssocClassSet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"AssocClassForwardReferenceOnly"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"AssocTypeSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"Array"

-				value      	24)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Sequence"

-				value      	47)))))

-	    (object Attribute

-		tool       	"cg"

-		name       	"default__Attribute"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"cg"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateDataMember"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberName"

-			value      	"$attribute")

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberVisibility"

-			value      	("DataMemberVisibilitySet" 14))

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberVisibilitySet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"Public"

-				value      	45)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Protected"

-				value      	44)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Private"

-				value      	43)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Implementation"

-				value      	14)

-			    (object Attribute

-				tool       	"cg"

-				name       	"AtAttributeVisibility"

-				value      	211)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberMutability"

-			value      	("DataMemberMutabilitySet" 0))

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberMutabilitySet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"Unrestricted"

-				value      	0)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Mutable"

-				value      	1)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Const"

-				value      	2)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberIsVolatile"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"DataMemberFieldSize"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateGetOperation"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateSetOperation"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetName"

-			value      	"get_$attribute")

-		    (object Attribute

-			tool       	"cg"

-			name       	"SetName"

-			value      	"set_$attribute")

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetSetKinds"

-			value      	("GetSetKindsSet" 200))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetSetKindsSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"Common"

-				value      	200)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Virtual"

-				value      	201)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Abstract"

-				value      	202)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Static"

-				value      	203)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Friend"

-				value      	204)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetIsConst"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetResultIsConst"

-			value      	("GetResultIsConstSet" 2))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetResultIsConstSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"False"

-				value      	0)

-			    (object Attribute

-				tool       	"cg"

-				name       	"True"

-				value      	1)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Same_As_Function"

-				value      	2)))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GetSetByReference"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineGet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"SetReturnsValue"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"InlineSet"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"CCRegion"

-			value      	"")))

-	    (object Attribute

-		tool       	"cg"

-		name       	"default__Uses"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"cg"

-			name       	"ForwardReferenceOnly"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"BodyReferenceOnly"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"cg"

-		name       	"default__Subsystem"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"cg"

-			name       	"Directory"

-			value      	"AUTO GENERATE")

-		    (object Attribute

-			tool       	"cg"

-			name       	"DirectoryIsOnSearchList"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"PrecompiledHeader"

-			value      	"")))

-	    (object Attribute

-		tool       	"cg"

-		name       	"default__Category"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"cg"

-			name       	"IsNamespace"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"cg"

-			name       	"Indent"

-			value      	2)

-		    (object Attribute

-			tool       	"cg"

-			name       	"CodeName"

-			value      	"")

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateEmptyRegions"

-			value      	("GenerateEmptyRegionSet" 3))

-		    (object Attribute

-			tool       	"cg"

-			name       	"GenerateEmptyRegionSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"cg"

-				name       	"None"

-				value      	0)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Preserved"

-				value      	1)

-			    (object Attribute

-				tool       	"cg"

-				name       	"Unpreserved"

-				value      	2)

-			    (object Attribute

-				tool       	"cg"

-				name       	"All"

-				value      	3)))))

-	    (object Attribute

-		tool       	"MSVC"

-		name       	"propertyId"

-		value      	"809135966")

-	    (object Attribute

-		tool       	"MSVC"

-		name       	"default__Project"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"Version"

-			value      	"5.0")))

-	    (object Attribute

-		tool       	"MSVC"

-		name       	"default__Class"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"Type"

-			value      	("MSVCClassTypeSet" 0))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"MSVCClassTypeSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Normal"

-				value      	0)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Interface_Part"

-				value      	1)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Connection_Part"

-				value      	2)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Class_Factory"

-				value      	3)))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"CObjectFunctionality"

-			value      	("CObjectFunctionalitySet" 0))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"CObjectFunctionalitySet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"None"

-				value      	0)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Dynamic"

-				value      	1)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Dyncreate"

-				value      	2)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Serial"

-				value      	3)))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateOverrideGroup"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateDataGroup"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"AFX_DATA_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateFieldGroup"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"AFX_FIELD_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateMessageGroup"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateMessageMap"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"AFX_MSG_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"MESSAGE_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"OLEFactory"

-			value      	("OLEFactorySet" 0))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"OLEFactorySet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"None"

-				value      	0)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Built_in"

-				value      	1)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Simple"

-				value      	2)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Licensed"

-				value      	3)))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"OLEName"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"OLEClassID"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateOLECtlType"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"OLECtlType"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateOLETypeLib"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"OLETypeLibID"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"OLETypeLibMajor"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"OLETypeLibMinor"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GeneratePropPageIDs"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"OLEPropPageIDs"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateDispatchMap"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"AFX_DISPATCH_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"AFX_DISPATCH_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"DISPATCH_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"StockProperties"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"StockFunctions"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"DispatchDefValue"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateDispIdEnum"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"AFX_DISP_ID_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateInterfaceMap"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"INTERFACE_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"InitInterface"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateEventMap"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"AFX_EVENT_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"AFX_EVENT_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"EVENT_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"StockEvents"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateEventSinkMap"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"AFX_EVENTSINK_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"AFX_EVENTSINK_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"EVENTSINK_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"PropNotifySinks"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateConnectionMap"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"CONNECTION_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"ConnectionPointIID"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"InheritanceType"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"DeclSpec"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"OLECommands"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"MFCDeclares"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"MFCImplements"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"ATL_Declares"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateCOMMap"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"COM_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateConnectionPointMap"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"CONNECTION_POINT_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateMsgMap"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"MSG_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GeneratePropertyMap"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"PROPERTY_MAP_Entries"

-			value      	(value Text ""))))

-	    (object Attribute

-		tool       	"MSVC"

-		name       	"default__Operation"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"Type"

-			value      	("MSVCOperationTypeSet" 0))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"MSVCOperationTypeSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Normal"

-				value      	0)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Virtual_Override"

-				value      	1)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Message_Handler"

-				value      	2)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Dispatch_Handler"

-				value      	3)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Event_Firing_Function"

-				value      	4)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Event_Sink_Handler"

-				value      	5)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Std_OLE_Method"

-				value      	6)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Command_Parser"

-				value      	7)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Property_Get_Function"

-				value      	8)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Property_Set_Function"

-				value      	9)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Property_Notify_Function"

-				value      	10)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Macro_Generated_Function"

-				value      	11)))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"AFX_MSG_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"MESSAGE_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"AFX_DISPATCH_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"DISPATCH_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"AFX_EVENT_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"EVENT_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"AFX_EVENTSINK_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"EVENTSINK_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"CallType"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"DeclSpec"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"BodyImage"

-			value      	(value Text ""))))

-	    (object Attribute

-		tool       	"MSVC"

-		name       	"default__Role"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"Type"

-			value      	("MSVCAttributeTypeSet" 0))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"MSVCAttributeTypeSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Normal"

-				value      	0)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Member_Property"

-				value      	1)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Get_Set_Property"

-				value      	2)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Dialog_Data"

-				value      	3)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Field_Data"

-				value      	4)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Stock_Property"

-				value      	5)))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"AFX_DISPATCH_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"DISPATCH_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"DeclSpec"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"PointerBase"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"CallType"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"StockPropertyImplementation"

-			value      	"")))

-	    (object Attribute

-		tool       	"MSVC"

-		name       	"default__Has"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"Type"

-			value      	("MSVCAttributeTypeSet" 0))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"MSVCAttributeTypeSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Normal"

-				value      	0)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Member_Property"

-				value      	1)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Get_Set_Property"

-				value      	2)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Dialog_Data"

-				value      	3)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Field_Data"

-				value      	4)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Stock_Property"

-				value      	5)))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"AFX_DISPATCH_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"DISPATCH_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"DeclSpec"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"PointerBase"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"CallType"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"StockPropertyImplementation"

-			value      	"")))

-	    (object Attribute

-		tool       	"MSVC"

-		name       	"default__Attribute"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"Type"

-			value      	("MSVCAttributeTypeSet" 0))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"MSVCAttributeTypeSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Normal"

-				value      	0)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Member_Property"

-				value      	1)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Get_Set_Property"

-				value      	2)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Dialog_Data"

-				value      	3)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Field_Data"

-				value      	4)

-			    (object Attribute

-				tool       	"MSVC"

-				name       	"Stock_Property"

-				value      	5)))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"AFX_DISPATCH_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"DISPATCH_MAP_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"DeclSpec"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"PointerBase"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"CallType"

-			value      	"")

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"StockPropertyImplementation"

-			value      	"")))

-	    (object Attribute

-		tool       	"MSVC"

-		name       	"default__Module-Spec"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateIncludesGroup"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"AFX_INCLUDES_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateInsertLocation"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"MSVC"

-		name       	"default__Module-Body"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateIncludesGroup"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"AFX_INCLUDES_Entries"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"MSVC"

-			name       	"GenerateInsertLocation"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"cg"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"Rose Model Integrator"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"Rose Web Publisher"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"COM"

-		name       	"propertyId"

-		value      	"783606378")

-	    (object Attribute

-		tool       	"COM"

-		name       	"default__Class"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"COM"

-			name       	"TypeKinds"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"COM"

-				name       	"enum"

-				value      	100)

-			    (object Attribute

-				tool       	"COM"

-				name       	"record"

-				value      	101)

-			    (object Attribute

-				tool       	"COM"

-				name       	"module"

-				value      	102)

-			    (object Attribute

-				tool       	"COM"

-				name       	"interface"

-				value      	103)

-			    (object Attribute

-				tool       	"COM"

-				name       	"dispinterface"

-				value      	104)

-			    (object Attribute

-				tool       	"COM"

-				name       	"coclass"

-				value      	105)

-			    (object Attribute

-				tool       	"COM"

-				name       	"alias"

-				value      	106)

-			    (object Attribute

-				tool       	"COM"

-				name       	"union"

-				value      	107)

-			    (object Attribute

-				tool       	"COM"

-				name       	"max"

-				value      	108)

-			    (object Attribute

-				tool       	"COM"

-				name       	"(none)"

-				value      	109)))

-		    (object Attribute

-			tool       	"COM"

-			name       	"Generate"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"COM"

-			name       	"kind"

-			value      	("TypeKinds" 109))

-		    (object Attribute

-			tool       	"COM"

-			name       	"uuid"

-			value      	"")

-		    (object Attribute

-			tool       	"COM"

-			name       	"version"

-			value      	"")

-		    (object Attribute

-			tool       	"COM"

-			name       	"helpstring"

-			value      	"")

-		    (object Attribute

-			tool       	"COM"

-			name       	"helpcontext"

-			value      	"")

-		    (object Attribute

-			tool       	"COM"

-			name       	"attributes"

-			value      	"")

-		    (object Attribute

-			tool       	"COM"

-			name       	"dllname"

-			value      	"")

-		    (object Attribute

-			tool       	"COM"

-			name       	"alias"

-			value      	"")))

-	    (object Attribute

-		tool       	"COM"

-		name       	"default__Operation"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"COM"

-			name       	"Generate"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"COM"

-			name       	"id"

-			value      	"")

-		    (object Attribute

-			tool       	"COM"

-			name       	"helpstring"

-			value      	"")

-		    (object Attribute

-			tool       	"COM"

-			name       	"attributes"

-			value      	"")))

-	    (object Attribute

-		tool       	"COM"

-		name       	"default__Attribute"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"COM"

-			name       	"Generate"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"COM"

-			name       	"id"

-			value      	"")

-		    (object Attribute

-			tool       	"COM"

-			name       	"helpstring"

-			value      	"")

-		    (object Attribute

-			tool       	"COM"

-			name       	"attributes"

-			value      	"")))

-	    (object Attribute

-		tool       	"COM"

-		name       	"default__Module-Spec"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"COM"

-			name       	"Generate"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"COM"

-			name       	"filename"

-			value      	"")

-		    (object Attribute

-			tool       	"COM"

-			name       	"library"

-			value      	"")

-		    (object Attribute

-			tool       	"COM"

-			name       	"uuid"

-			value      	"")

-		    (object Attribute

-			tool       	"COM"

-			name       	"version"

-			value      	"")

-		    (object Attribute

-			tool       	"COM"

-			name       	"helpstring"

-			value      	"")

-		    (object Attribute

-			tool       	"COM"

-			name       	"helpfile"

-			value      	"")

-		    (object Attribute

-			tool       	"COM"

-			name       	"helpcontext"

-			value      	"")

-		    (object Attribute

-			tool       	"COM"

-			name       	"lcid"

-			value      	"")

-		    (object Attribute

-			tool       	"COM"

-			name       	"attributes"

-			value      	"")))

-	    (object Attribute

-		tool       	"COM"

-		name       	"default__Param"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"COM"

-			name       	"attributes"

-			value      	"")))

-	    (object Attribute

-		tool       	"COM"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"Version Control"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"Visual Basic"

-		name       	"propertyId"

-		value      	"783606378")

-	    (object Attribute

-		tool       	"Visual Basic"

-		name       	"default__Class"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"UpdateCode"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"UpdateModel"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"InstancingSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Visual Basic"

-				name       	"Private"

-				value      	221)

-			    (object Attribute

-				tool       	"Visual Basic"

-				name       	"PublicNotCreatable"

-				value      	213)

-			    (object Attribute

-				tool       	"Visual Basic"

-				name       	"SingleUse"

-				value      	214)

-			    (object Attribute

-				tool       	"Visual Basic"

-				name       	"GlobalSingleUse"

-				value      	215)

-			    (object Attribute

-				tool       	"Visual Basic"

-				name       	"MultiUse"

-				value      	219)

-			    (object Attribute

-				tool       	"Visual Basic"

-				name       	"GlobalMultiUse"

-				value      	220)))

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"BaseSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Visual Basic"

-				name       	"(none)"

-				value      	222)

-			    (object Attribute

-				tool       	"Visual Basic"

-				name       	"0"

-				value      	223)

-			    (object Attribute

-				tool       	"Visual Basic"

-				name       	"1"

-				value      	224)))

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"OptionBase"

-			value      	("BaseSet" 222))

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"OptionExplicit"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"OptionCompare"

-			value      	("CompareSet" 202))

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"Instancing"

-			value      	("InstancingSet" 219))

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"CompareSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Visual Basic"

-				name       	"(none)"

-				value      	202)

-			    (object Attribute

-				tool       	"Visual Basic"

-				name       	"Binary"

-				value      	203)

-			    (object Attribute

-				tool       	"Visual Basic"

-				name       	"Text"

-				value      	204)))))

-	    (object Attribute

-		tool       	"Visual Basic"

-		name       	"default__Operation"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"LibraryName"

-			value      	"")

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"AliasName"

-			value      	"")

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"IsStatic"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"ProcedureID"

-			value      	"")

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"ReplaceExistingBody"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"DefaultBody"

-			value      	(value Text ""))))

-	    (object Attribute

-		tool       	"Visual Basic"

-		name       	"default__Attribute"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"New"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"WithEvents"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"ProcedureID"

-			value      	"")

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"PropertyName"

-			value      	"")

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"Subscript"

-			value      	"")))

-	    (object Attribute

-		tool       	"Visual Basic"

-		name       	"default__Role"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"UpdateCode"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"New"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"WithEvents"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"FullName"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"ProcedureID"

-			value      	"")

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"PropertyName"

-			value      	"")

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"Subscript"

-			value      	"")))

-	    (object Attribute

-		tool       	"Visual Basic"

-		name       	"default__Inherit"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"ImplementsDelegation"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"FullName"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Visual Basic"

-		name       	"default__Param"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"ByVal"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"ByRef"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"Optional"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"ParamArray"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Visual Basic"

-		name       	"default__Module-Spec"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"ProjectFile"

-			value      	"")

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"UpdateCode"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"UpdateModel"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"ImportReferences"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"QuickImport"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Visual Basic"

-			name       	"ImportBinary"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"Visual Basic"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"VisualStudio"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"Web Modeler"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"XML_DTD"

-		name       	"propertyId"

-		value      	"809135966")

-	    (object Attribute

-		tool       	"XML_DTD"

-		name       	"default__Project"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"XML_DTD"

-			name       	"CreateMissingDirectories"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"XML_DTD"

-			name       	"Editor"

-			value      	("EditorType" 100))

-		    (object Attribute

-			tool       	"XML_DTD"

-			name       	"StopOnError"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"XML_DTD"

-			name       	"EditorType"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"XML_DTD"

-				name       	"BuiltIn"

-				value      	100)

-			    (object Attribute

-				tool       	"XML_DTD"

-				name       	"WindowsShell"

-				value      	101)))))

-	    (object Attribute

-		tool       	"XML_DTD"

-		name       	"default__Class"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"XML_DTD"

-			name       	"Entity_SystemID"

-			value      	"")

-		    (object Attribute

-			tool       	"XML_DTD"

-			name       	"Entity_PublicID"

-			value      	"")

-		    (object Attribute

-			tool       	"XML_DTD"

-			name       	"NotationValue"

-			value      	"")

-		    (object Attribute

-			tool       	"XML_DTD"

-			name       	"InternalValue"

-			value      	"")

-		    (object Attribute

-			tool       	"XML_DTD"

-			name       	"ParameterEntity"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"XML_DTD"

-			name       	"ExternalEntity"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"XML_DTD"

-			name       	"Notation_SystemID"

-			value      	"")

-		    (object Attribute

-			tool       	"XML_DTD"

-			name       	"Notation_PublicID"

-			value      	"")))

-	    (object Attribute

-		tool       	"XML_DTD"

-		name       	"default__Attribute"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"XML_DTD"

-			name       	"DefaultDeclType"

-			value      	"")))

-	    (object Attribute

-		tool       	"XML_DTD"

-		name       	"default__Module-Spec"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"XML_DTD"

-			name       	"Assign All"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"XML_DTD"

-			name       	"ComponentPath"

-			value      	"")))

-	    (object Attribute

-		tool       	"XML_DTD"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"ClearCase"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"RequisitePro"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"SoDA"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"TopLink"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"Cplusplus"

-		name       	"default__Module-Body"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"Synchronize"

-			value      	TRUE)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"RevEngRootDirectory"

-			value      	"")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"RootPackage"

-			value      	"C++ Reverse Engineered")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"RevEngDirectoriesAsPackages"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"HeaderFileExtension"

-			value      	".h")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"ImplementationFileExtension"

-			value      	".cpp")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"NewHeaderFileDirectory"

-			value      	"")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"NewImplementationFileDirectory"

-			value      	"")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"FileCapitalization"

-			value      	("FileCapitalizationSet" 0))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"CodeGenExtraDirectories"

-			value      	("CodeGenExtraDirectoriesSet" 0))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"StripClassPrefix"

-			value      	"")

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"UseTabs"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"TabWidth"

-			value      	8)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"IndentWidth"

-			value      	4)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"AccessIndentation"

-			value      	-2)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"ModelIdCommentRules"

-			value      	("ModelIdCommentRulesSet" 1))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"PageWidth"

-			value      	80)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"ClassMemberOrder"

-			value      	("MemberOrderSet" 1))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"OneParameterPerLine"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"NamespaceBraceStyle"

-			value      	("BraceStyleSet" 2))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"ClassBraceStyle"

-			value      	("BraceStyleSet" 2))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"FunctionBraceStyle"

-			value      	("BraceStyleSet" 2))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"Copyright"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"InitialHeaderIncludes"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"InitialBodyIncludes"

-			value      	(value Text ""))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"CodeGenExtraDirectoriesSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"None"

-				value      	0)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Namespaces"

-				value      	1)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Packages"

-				value      	2)))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"FileCapitalizationSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Same as model"

-				value      	0)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Lower case"

-				value      	1)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Upper case"

-				value      	2)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Lower case with underscores"

-				value      	3)))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"BraceStyleSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"B1"

-				value      	1)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"B2"

-				value      	2)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"B3"

-				value      	3)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"B4"

-				value      	4)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"B5"

-				value      	5)))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"MemberOrderSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Public First"

-				value      	1)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Private First"

-				value      	2)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Order by kind"

-				value      	3)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Unordered"

-				value      	4)))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"ModelIdCommentRulesSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Code generation only"

-				value      	1)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Code generation and reverse engineering"

-				value      	2)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Never generate model IDs"

-				value      	3)))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"CreateBackupFiles"

-			value      	FALSE)

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"CommentRules"

-			value      	("CommentRulesSet" 1))

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"CommentRulesSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Always synchronize"

-				value      	1)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Code generation only"

-				value      	2)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Reverse engineering only"

-				value      	3)

-			    (object Attribute

-				tool       	"Cplusplus"

-				name       	"Never synchronize"

-				value      	4)))))

-	    (object Attribute

-		tool       	"Ada83"

-		name       	"default__Param"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"Mode"

-			value      	("ParameterModeSet" 232))

-		    (object Attribute

-			tool       	"Ada83"

-			name       	"ParameterModeSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"Default"

-				value      	232)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"In"

-				value      	204)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"Out"

-				value      	205)

-			    (object Attribute

-				tool       	"Ada83"

-				name       	"InOut"

-				value      	203)))))

-	    (object Attribute

-		tool       	"Ada95"

-		name       	"default__Param"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"Mode"

-			value      	("ParameterModeSet" 232))

-		    (object Attribute

-			tool       	"Ada95"

-			name       	"ParameterModeSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Default"

-				value      	232)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"In"

-				value      	204)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Out"

-				value      	205)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"InOut"

-				value      	203)

-			    (object Attribute

-				tool       	"Ada95"

-				name       	"Access"

-				value      	220)))))

-	    (object Attribute

-		tool       	"Deploy"

-		name       	"HiddenTool"

-		value      	FALSE)

-	    (object Attribute

-		tool       	"Cplusplus"

-		name       	"default__Uses"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"Cplusplus"

-			name       	"BodyReferenceOnly"

-			value      	FALSE)))

-	    (object Attribute

-		tool       	"CORBA"

-		name       	"default__Param"

-		value      	(list Attribute_Set

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"Direction"

-			value      	("ParamDirectionTypeSet" 102))

-		    (object Attribute

-			tool       	"CORBA"

-			name       	"ParamDirectionTypeSet"

-			value      	(list Attribute_Set

-			    (object Attribute

-				tool       	"CORBA"

-				name       	"in"

-				value      	102)

-			    (object Attribute

-				tool       	"CORBA"

-				name       	"inout"

-				value      	103)

-			    (object Attribute

-				tool       	"CORBA"

-				name       	"out"

-				value      	104))))))

-	quid       	"3A0B2474027F"))

diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/schema/adapterFactory.exsd b/plugins/org.eclipse.wst.common.emfworkbench.integration/schema/adapterFactory.exsd
deleted file mode 100644
index d0100dc..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/schema/adapterFactory.exsd
+++ /dev/null
@@ -1,144 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>

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

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

-<annotation>

-      <appInfo>

-         <meta.schema plugin="org.eclipse.wst.common.emfworkbench.integration" id="adapterFactory" name="Adapter Factory Extension"/>

-      </appInfo>

-      <documentation>

-         This is used to register an adapter factory with the dynamic adapter factory.

-      </documentation>

-   </annotation>

-

-   <element name="extension">

-      <complexType>

-         <sequence>

-            <element ref="adapterFactory" 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="adapterFactory">

-      <annotation>

-         <documentation>

-            Defines the Adapter Factory being added. All added Adapter Factories are queriable whenever their Function Group and optional Viewer Id are specified.

-         </documentation>

-      </annotation>

-      <complexType>

-         <sequence>

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

-         </sequence>

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

-            <annotation>

-               <documentation>

-                  The package URI that you are extending (for example &quot;ejb.xmi&quot;)

-               </documentation>

-            </annotation>

-         </attribute>

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

-            <annotation>

-               <documentation>

-                  The fully qualified name of the class which implements org.eclipse.emf.common.notify.AdapterFactory.

-               </documentation>

-            </annotation>

-         </attribute>

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

-            <annotation>

-               <documentation>

-                  The Unique identifier of the Adapter Factory extension.  This will associate it with one or more function groups based on the function group patterns.  Function Groups allow Content and Actions to be enabled or disabled based on project-specific information. Generally, they are used by vendors who wish to add functionality specific to their products, e.g. J2EE Application Servers.

-               </documentation>

-            </annotation>

-         </attribute>

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

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="view">

-      <complexType>

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

-            <annotation>

-               <documentation>

-                  An optional viewer Id which will limit the invocation of the defined Adapter Factory to the given viewer id.

-               </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.emfworkbench.integration/schema/editModel.exsd b/plugins/org.eclipse.wst.common.emfworkbench.integration/schema/editModel.exsd
deleted file mode 100644
index 14743b2..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/schema/editModel.exsd
+++ /dev/null
@@ -1,198 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>

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

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

-<annotation>

-      <appInfo>

-         <meta.schema plugin="org.eclipse.wst.common.emfworkbench.integration" id="editModel" name="EMF Resource Edit Model"/>

-      </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.

-      </documentation>

-   </annotation>

-

-   <element name="extension">

-      <complexType>

-         <sequence>

-            <element ref="editModel" 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="editModel">

-      <annotation>

-         <documentation>

-            The declaration for an edit model to be used in the workspace.

-         </documentation>

-      </annotation>

-      <complexType>

-         <sequence>

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

-         </sequence>

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

-            <annotation>

-               <documentation>

-                  A unique identifier for the edit model.

-               </documentation>

-            </annotation>

-         </attribute>

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

-            <annotation>

-               <documentation>

-                  An optional factory class that is used for this edit model.  The class must implement the interface &lt;code&gt;org.eclipse.wst.common.internal.emfworkbench.integration.EditModelFactory&lt;/code&gt;. If none is specified, then a generic &lt;code&gt;EditModel&lt;/code&gt; is created.

-               </documentation>

-            </annotation>

-         </attribute>

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

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

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

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="editModelResource">

-      <annotation>

-         <documentation>

-            This is an individual contribution of a resource to the edit model.  If more than one instance of the same URI is registered against an edit model id, the resource is still only loaded once.

-         </documentation>

-      </annotation>

-      <complexType>

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

-            <annotation>

-               <documentation>

-                  The URI of the resource relative to the root container from which EMF resources are loaded.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="autoload" type="boolean" use="default" value="false">

-            <annotation>

-               <documentation>

-                  Indicator which determines whether this resource should be autoloaded when the edit model is created, or when an IFile corresponding to this resource is added.

-               </documentation>

-            </annotation>

-         </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>

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

-      </appInfo>

-      <documentation>

-         1.0

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

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

-      </appInfo>

-      <documentation>

-         &lt;pre&gt;

-   &lt;extension

-         id=&quot;editModel.acme.parent&quot;

-         name=&quot;Acme Parent Edit Model&quot;

-         point=&quot;org.eclipse.wst.common.emfworkbench.integration.editModel&quot;&gt;

-      &lt;editModel

-            editModelID=&quot;com.acme.acmepro.parent.editModel&quot;

-            factoryClass=&quot;org.eclipse.wst.common.internal.emfworkbench.integration.EditModelFactory&quot;&gt;

-        &lt;editModelResource URI=&quot;DIR/resource0.xml&quot;/&gt;

-        &lt;editModelResource URI=&quot;DIR/resource1.xml&quot;/&gt;

-      &lt;/editModel&gt;

-   &lt;/extension&gt;

-

-   &lt;extension

-         id=&quot;editModel.acme.child&quot;

-         name=&quot;Acme Child Edit Model&quot;

-         point=&quot;org.eclipse.wst.common.emfworkbench.integration.editModel&quot;&gt;

-      &lt;editModel

-            editModelID=&quot;com.acme.acmepro.child.editModel&quot;

-            factoryClass=&quot;org.eclipse.wst.common.internal.emfworkbench.integration.EditModelFactory&quot;

-            parentModelID=&quot;com.acme.acmepro.parent.editModel&quot;&gt;

-        &lt;editModelResource URI=&quot;DIR/resource2.xml&quot;/&gt;

-        &lt;editModelResource URI=&quot;DIR/resource3.xml&quot;/&gt;

-      &lt;/editModel&gt;

-   &lt;/extension&gt;

-&lt;/pre&gt;

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

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

-      </appInfo>

-      <documentation>

-         Edit Models can be accessed through the &lt;code&gt;org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext&lt;/code&gt;.

-      </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.emfworkbench.integration/schema/editModelExtension.exsd b/plugins/org.eclipse.wst.common.emfworkbench.integration/schema/editModelExtension.exsd
deleted file mode 100644
index 006d2ae..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/schema/editModelExtension.exsd
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>

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

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

-<annotation>

-      <appInfo>

-         <meta.schema plugin="org.eclipse.wst.common.emfworkbench.integration" id="editModelExtension" name="Edit Model Extensions"/>

-      </appInfo>

-      <documentation>

-         The Edit Model Extension allows third parties to contribute expected resources to Edit Models. The functionGroupID allows users to select which extensions they choose to have enabled.

-      </documentation>

-   </annotation>

-

-   <include schemaLocation="editModel.exsd"/>

-

-   <element name="extension">

-      <complexType>

-         <sequence>

-            <element ref="editModelExtension" 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="editModelExtension">

-      <annotation>

-         <documentation>

-            Edit model extensions allow components to contribute known resource URIs to an edit model.  Whenever an edit model is loaded, the resources will automatically be loaded and managed by the edit model.  Changes to the resources will be tracked and saved during operations or editor saves.

-         </documentation>

-      </annotation>

-      <complexType>

-         <sequence>

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

-         </sequence>

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

-            <annotation>

-               <documentation>

-                  The unique id of the edit model being extended.

-               </documentation>

-            </annotation>

-         </attribute>

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

-            <annotation>

-               <documentation>

-                  The unique identifier for this extension.  This will be used to associate it with a function group pattern binding.

-               </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;pre&gt;

-   &lt;extension

-         point=&quot;org.eclipse.wst.common.emfworkbench.integration.editModelExtension&quot;&gt;

-      &lt;editModelExtension

-            editModelID=&quot;org.sample.inheritance.parent.editModel&quot;

-            functionGroupID=&quot;org.sample.group&quot;&gt;

-         &lt;editModelResource URI=&quot;DIR/extension0.xml&quot;/&gt;

-         &lt;editModelResource URI=&quot;DIR/extension1.xml&quot;/&gt;

-      &lt;/editModelExtension&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.emfworkbench.integration/schema/modifierHelperFactory.exsd b/plugins/org.eclipse.wst.common.emfworkbench.integration/schema/modifierHelperFactory.exsd
deleted file mode 100644
index 9cc07db..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/schema/modifierHelperFactory.exsd
+++ /dev/null
@@ -1,160 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>

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

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

-<annotation>

-      <appInfo>

-         <meta.schema plugin="org.eclipse.wst.common.emfworkbench.integration" id="ModifierHelperFactory" name="Modifier Helper Factory"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <element name="extension">

-      <annotation>

-         <documentation>

-            This is used to register for the model modifiers.

-         </documentation>

-      </annotation>

-      <complexType>

-         <sequence>

-            <element ref="factory" 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="factory">

-      <complexType>

-         <sequence>

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

-         </sequence>

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

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="package">

-      <complexType>

-         <sequence>

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

-         </sequence>

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

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="type">

-      <complexType>

-         <sequence>

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

-         </sequence>

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

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="feature">

-      <complexType>

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

-            <annotation>

-               <documentation>

-                  

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="action" 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.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/CompatibilityWorkbenchURIConverterImpl.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/CompatibilityWorkbenchURIConverterImpl.java
deleted file mode 100644
index 8ae0cd1..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/CompatibilityWorkbenchURIConverterImpl.java
+++ /dev/null
@@ -1,90 +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 Mar 4, 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.internal.emfworkbench;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.jem.util.emf.workbench.ResourceSetWorkbenchSynchronizer;
-import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
-import org.eclipse.jem.util.emf.workbench.WorkbenchURIConverterImpl;
-import org.eclipse.wst.common.internal.emf.resource.CompatibilityURIConverter;
-
-/**
- * @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 CompatibilityWorkbenchURIConverterImpl extends WorkbenchURIConverterImpl implements CompatibilityURIConverter {
-	/**
-	 *  
-	 */
-	public CompatibilityWorkbenchURIConverterImpl() {
-		super();
-	}
-
-	/**
-	 * @param anInputContainer
-	 */
-	public CompatibilityWorkbenchURIConverterImpl(IContainer anInputContainer) {
-		super(anInputContainer);
-	}
-
-	/**
-	 * @param aContainer
-	 * @param aSynchronizer
-	 */
-	public CompatibilityWorkbenchURIConverterImpl(IContainer aContainer, ResourceSetWorkbenchSynchronizer aSynchronizer) {
-		super(aContainer, aSynchronizer);
-	}
-
-	/**
-	 * @param anInputContainer
-	 * @param anOutputContainer
-	 */
-	public CompatibilityWorkbenchURIConverterImpl(IContainer anInputContainer, IContainer anOutputContainer) {
-		super(anInputContainer, anOutputContainer);
-	}
-
-	/**
-	 * @param anInputContainer
-	 * @param anOutputContainer
-	 * @param aSynchronizer
-	 */
-	public CompatibilityWorkbenchURIConverterImpl(IContainer anInputContainer, IContainer anOutputContainer, ResourceSetWorkbenchSynchronizer aSynchronizer) {
-		super(anInputContainer, anOutputContainer, aSynchronizer);
-	}
-
-	/**
-	 * @see com.ibm.etools.xmi.helpers.CompatibilityURIConverter#deNormalize(URI)
-	 */
-	public URI deNormalize(URI uri) {
-		if (WorkbenchResourceHelperBase.isPlatformResourceURI(uri)) {
-			IFile aFile = WorkbenchResourceHelper.getPlatformFile(uri);
-			if (aFile != 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 getContainerRelativeURI(aFile);
-			}
-		}
-		return uri;
-	}
-
-}
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
deleted file mode 100644
index 8aed2ee..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/DynamicGrowthModel.java
+++ /dev/null
@@ -1,88 +0,0 @@
-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/EMFWorkbenchContext.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFWorkbenchContext.java
deleted file mode 100644
index 378788b..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFWorkbenchContext.java
+++ /dev/null
@@ -1,422 +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 Mar 3, 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.internal.emfworkbench;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.runtime.CoreException;
-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.resource.ResourceSet;
-import org.eclipse.jem.util.emf.workbench.EMFWorkbenchContextBase;
-import org.eclipse.jem.util.emf.workbench.ISynchronizerExtender;
-import org.eclipse.jem.util.emf.workbench.ProjectResourceSet;
-import org.eclipse.jem.util.emf.workbench.WorkbenchURIConverter;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.internal.emf.resource.CompatibilityXMIResource;
-import org.eclipse.wst.common.internal.emf.resource.ReferencedXMIFactoryImpl;
-import org.eclipse.wst.common.internal.emf.utilities.DefaultOverridableResourceFactoryRegistry;
-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.EditModelEvent;
-import org.eclipse.wst.common.internal.emfworkbench.integration.ProjectResourceSetEditImpl;
-
-/**
- * @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 EMFWorkbenchContext extends EMFWorkbenchContextBase implements ISynchronizerExtender {
-
-	private Map readOnlyModels = new HashMap();
-	private Map editableModels = new HashMap();
-
-	protected Adapter resourceSetListener;
-
-	protected boolean defaultToMOF5Compatibility = false;
-
-
-	/**
-	 * @param aProject
-	 */
-	public EMFWorkbenchContext(IProject aProject) {
-		super(aProject);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext#initializeResourceSet(org.eclipse.wst.common.internal.emfworkbench.ProjectResourceSet)
-	 */
-	protected void initializeResourceSet(ProjectResourceSet aResourceSet) {
-		super.initializeResourceSet(aResourceSet);
-		Resource.Factory.Registry reg = new DefaultOverridableResourceFactoryRegistry();
-		Resource.Factory factory = new ReferencedXMIFactoryImpl();
-		reg.getExtensionToFactoryMap().put(Resource.Factory.Registry.DEFAULT_EXTENSION, factory);
-		// add xmi because other plugins are registering it globally
-		reg.getExtensionToFactoryMap().put("xmi", factory); //$NON-NLS-1$
-		aResourceSet.setResourceFactoryRegistry(reg);
-		aResourceSet.getSynchronizer().addExtender(this); // added so we can be informed of closes
-		// to the project.
-		startListeningToResourceSet();
-	}
-
-	public static String getCacheID(String editModelID, Map params) {
-		return EditModelRegistry.getInstance().getCacheID(editModelID, params);
-	}
-
-	/**
-	 * This is the API that clients should use when they have an intent to modify a particular
-	 * resource. You should only access the resources through the J2EEEditModel that is returned by
-	 * this method if you have the intent to modify.
-	 * 
-	 * @see J2EEEditModel
-	 */
-	public final EditModel getEditModelForWrite(String editModelID, Object accessorKey, Map params) {
-		EditModel editModel = getExistingEditModel(editModelID, params, false);
-		if (null == editModel) {
-			editModel = createEditModelForWrite(editModelID, params);
-			synchronized (editModel) {
-				cacheEditModel(editModel, params);
-				editModel.access(accessorKey);
-			}
-		} else {
-			synchronized (editModel) {
-				if (editModel.isDisposed() || editModel.isDisposing()) {
-					editModel = createEditModelForWrite(editModelID, params);
-					cacheEditModel(editModel, params);
-				}
-				editModel.access(accessorKey);
-			}
-		}
-		return editModel;
-	}
-
-	/**
-	 * This is the API that clients should use when they want to read a group of resources that are
-	 * normally managed by the edit model with
-	 * 
-	 * @aKey. You should only access the resources through the J2EEEditModel that is returned by
-	 *        this method. You must call releaseEditModel(...) when you are finished with the edit
-	 *        model.
-	 * @see J2EEEditModel
-	 */
-	public final EditModel getEditModelForRead(String editModelID, Object accessorKey, Map params) {
-		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 {
-				synchronized (editModel) {
-					if (editModel.isDisposed() || editModel.isDisposing()) {
-						editModel = createEditModelForRead(editModelID, params);
-						cacheEditModel(editModel, params);
-					}
-					EditModelLeastUsedCache.getInstance().access(editModel);
-					editModel.access(accessorKey);
-				}
-			}
-			return editModel;
-		} finally {
-			EditModelLeastUsedCache.getInstance().optimizeLRUSizeIfNecessary();
-		}
-	}
-
-	/**
-	 * This is the API that clients should use when they have an intent to modify a particular
-	 * resource. You should only access the resources through the J2EEEditModel that is returned by
-	 * this method if you have the intent to modify.
-	 * 
-	 * @see J2EEEditModel
-	 */
-	public final EditModel getEditModelForWrite(String editModelID, Object accessorKey) {
-		return getEditModelForWrite(editModelID, accessorKey, null);
-	}
-
-	/**
-	 * This is the API that clients should use when they want to read a group of resources that are
-	 * normally managed by the edit model with
-	 * 
-	 * @aKey. You should only access the resources through the J2EEEditModel that is returned by
-	 *        this method. You must call releaseEditModel(...) when you are finished with the edit
-	 *        model.
-	 * @see J2EEEditModel
-	 */
-	public final EditModel getEditModelForRead(String editModelID, Object accessorKey) {
-		return getEditModelForRead(editModelID, accessorKey, null);
-	}
-
-
-
-	public EditModel getExistingEditModel(String editModelID, Map params, boolean isReadOnly) {
-		EditModel editModel = null;
-		synchronized (readOnlyModels) {
-			if (isReadOnly) {
-				editModel = (EditModel) readOnlyModels.get(getCacheID(editModelID, params));
-			} else {
-				synchronized (editableModels) {
-					editModel = (EditModel) editableModels.get(getCacheID(editModelID, params));
-				}
-			}
-		}
-		return editModel;
-	}
-
-	/**
-	 * Subclasses may override to return the appropriate read-only J2EEEditModel.
-	 */
-	protected EditModel createEditModelForRead(String editModelID, Map params) {
-		return EditModelRegistry.getInstance().createEditModelForRead(editModelID, this, params);
-	}
-
-	/**
-	 * Subclasses may override to return the appropriate J2EEEditModel.
-	 */
-	protected EditModel createEditModelForWrite(String editModelID, Map params) {
-		return EditModelRegistry.getInstance().createEditModelForWrite(editModelID, this, params);
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/16/2001 12:25:39 PM)
-	 * 
-	 * @return java.util.List
-	 */
-	public void cacheEditModel(EditModel editModel, Map params) {
-		editModel.setParams(params);
-		synchronized (readOnlyModels) {
-			if (editModel.isReadOnly())
-				readOnlyModels.put(getCacheID(editModel.getEditModelID(), params), editModel);
-			else
-				synchronized (editableModels) {
-					editableModels.put(getCacheID(editModel.getEditModelID(), params), editModel);
-				}
-		}
-	}
-
-	protected void discardAllEditModels() {
-		synchronized (readOnlyModels) {
-			synchronized (editableModels) {
-				Collection readOnly = readOnlyModels.values();
-				EditModelLeastUsedCache.getInstance().removeAllCached(readOnly);
-				discardModels(readOnly);
-				discardModels(editableModels.values());
-			}
-		}
-
-	}
-
-	private void discardModels(Collection editModels) {
-		if (editModels != null && !editModels.isEmpty()) {
-			// Make a copy for safety against concurrent modification
-			Iterator it = new ArrayList(editModels).iterator();
-			while (it.hasNext()) {
-				((EditModel) it.next()).dispose();
-			}
-		}
-	}
-
-	public void removeEditModel(EditModel editModel, boolean readOnly) {
-		// The best way would be to recompute the cache id, but we don't care
-		// because the edit model should only be cached once anyway
-		synchronized (readOnlyModels) {
-			if (readOnly)
-				readOnlyModels.values().remove(editModel);
-			else
-				synchronized (editableModels) {
-					editableModels.values().remove(editModel);
-				}
-		}
-	}
-
-	/**
-	 * Notify all editModels of the change.
-	 */
-	protected void notifyEditModels(EditModelEvent anEvent) {
-		if (anEvent == null)
-			return;
-		List aList = new ArrayList();
-		synchronized (readOnlyModels) {
-			synchronized (editableModels) {
-				aList.addAll(readOnlyModels.values());
-				aList.addAll(editableModels.values());
-			}
-		}
-		EditModel editModel;
-		for (int i = 0; i < aList.size(); i++) {
-			editModel = (EditModel) aList.get(i);
-			try {
-				editModel.resourceChanged(anEvent);
-			} catch (Exception e) {
-				Logger.getLogger().logError(e);
-			}
-		}
-	}
-
-	protected boolean shouldNotifyEditModels() {
-		synchronized (readOnlyModels) {
-			synchronized (editableModels) {
-				return !this.readOnlyModels.isEmpty() || !this.editableModels.isEmpty();
-			}
-		}
-	}
-
-	protected Adapter getResourceSetListener() {
-		if (resourceSetListener == null)
-			resourceSetListener = new ResourceSetListener();
-		return resourceSetListener;
-	}
-
-
-	protected class ResourceSetListener extends AdapterImpl {
-		/*
-		 * @see Adapter#notifyChanged(new ENotificationImpl((InternalEObject)Notifier,
-		 *      int,(EStructuralFeature) EObject, Object, Object, int))
-		 */
-		public void notifyChanged(Notification notification) {
-			switch (notification.getEventType()) {
-				case Notification.ADD :
-					addedResource((Resource) notification.getNewValue());
-					break;
-				case Notification.REMOVE :
-					removedResource((Resource) notification.getOldValue());
-					break;
-				case Notification.REMOVE_MANY :
-					removedResources((List) notification.getOldValue());
-					break;
-			}
-		}
-	}
-
-	/**
-	 * Notify all editModels of the change.
-	 */
-	public void addedResource(Resource addedResource) {
-		if (defaultToMOF5Compatibility && (addedResource != null) && (addedResource instanceof CompatibilityXMIResource))
-			((CompatibilityXMIResource) addedResource).setFormat(CompatibilityXMIResource.FORMAT_MOF5);
-		if (shouldNotifyEditModels()) {
-			EditModelEvent event = new EditModelEvent(EditModelEvent.ADDED_RESOURCE, null);
-			event.addResource(addedResource);
-			notifyEditModels(event);
-		}
-	}
-
-	/**
-	 * Notify all editModels of the change.
-	 */
-	public void removedResource(Resource removedResource) {
-		if (shouldNotifyEditModels()) {
-			EditModelEvent event = new EditModelEvent(EditModelEvent.REMOVED_RESOURCE, null);
-			event.addResource(removedResource);
-			notifyEditModels(event);
-		}
-	}
-
-	/**
-	 * Notify all editModels of the change.
-	 */
-	public void removedResources(List removedResources) {
-		if (shouldNotifyEditModels()) {
-			EditModelEvent event = new EditModelEvent(EditModelEvent.REMOVED_RESOURCE, null);
-			event.addResources(removedResources);
-			notifyEditModels(event);
-		}
-	}
-
-	protected void startListeningToResourceSet() {
-		ResourceSet set = getResourceSet();
-		if (set != null)
-			set.eAdapters().add(getResourceSetListener());
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.internal.emfworkbench.ISynchronizerExtender#projectChanged(org.eclipse.core.resources.IResourceDelta)
-	 */
-	public void projectChanged(IResourceDelta delta) {
-		// default nothing
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.internal.emfworkbench.ISynchronizerExtender#projectClosed()
-	 */
-	public void projectClosed() {
-		discardAllEditModels();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContextBase#createURIConverter(org.eclipse.wst.common.internal.emfworkbench.ProjectResourceSet)
-	 */
-	protected WorkbenchURIConverter createURIConverter(ProjectResourceSet aResourceSet) {
-		return new CompatibilityWorkbenchURIConverterImpl(getProject(), aResourceSet.getSynchronizer());
-	}
-
-	protected ProjectResourceSet createResourceSet() {
-		if (project == null)
-			throw new IllegalStateException("Attempt to create resource set with null project"); //$NON-NLS-1$
-		return new ProjectResourceSetEditImpl(project);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContextBase#deleteFile(org.eclipse.emf.ecore.resource.Resource)
-	 */
-	public void deleteFile(Resource resource) {
-		try {
-			WorkbenchResourceHelper.deleteResource(resource);
-		} catch (CoreException ex) {
-			Logger.getLogger().logError(ex);
-		}
-
-	}
-
-	/**
-	 * @return Returns the defaultToMOF5Compatibility.
-	 */
-	public boolean isDefaultToMOF5Compatibility() {
-		return defaultToMOF5Compatibility;
-	}
-
-	/**
-	 * @param defaultToMOF5Compatibility
-	 *            The defaultToMOF5Compatibility to set.
-	 */
-	public void setDefaultToMOF5Compatibility(boolean defaultToMOF5Compatibility) {
-		this.defaultToMOF5Compatibility = defaultToMOF5Compatibility;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFWorkbenchEditResourceHandler.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFWorkbenchEditResourceHandler.java
deleted file mode 100644
index 8bd1073..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFWorkbenchEditResourceHandler.java
+++ /dev/null
@@ -1,53 +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 25, 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.emfworkbench;
-
-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 EMFWorkbenchEditResourceHandler extends NLS {
-	private static final String BUNDLE_NAME = "emfworkbenchedit";//$NON-NLS-1$
-
-	private EMFWorkbenchEditResourceHandler() {
-		// Do not instantiate
-	}
-
-	public static String ClientAccessRegistryException_UI_1;
-	public static String ClientAccessRegistryException_UI_0;
-	public static String Snapshot_ERROR_0;
-	public static String EditModelRegistry_ERROR_2;
-	public static String EditModelRegistry_ERROR_1;
-	public static String EditModelRegistry_ERROR_0;
-	public static String AdapterFactoryDescriptor_ERROR_1;
-	public static String AdapterFactoryDescriptor_ERROR_0;
-	public static String DynamicAdapterFactory_ERROR_0;
-	public static String ClientAccessRegistry_ERROR_1;
-	public static String ClientAccessRegistry_ERROR_0;
-
-	static {
-		NLS.initializeMessages(BUNDLE_NAME, EMFWorkbenchEditResourceHandler.class);
-	}
-
-	public static String getString(String key, Object[] args) {
-		return NLS.bind(key, args);
-	}
-}
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
deleted file mode 100644
index d9a126b..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EditModelLeastUsedCache.java
+++ /dev/null
@@ -1,114 +0,0 @@
-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) {
-			editModel.access(this);
-			synchronized (lru) {
-				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
deleted file mode 100644
index c685199..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EmfPackagePropertyTester.java
+++ /dev/null
@@ -1,17 +0,0 @@
-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/EmfValidationHandler.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EmfValidationHandler.java
deleted file mode 100644
index 29f42c7..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EmfValidationHandler.java
+++ /dev/null
@@ -1,61 +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.internal.emfworkbench;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
-import org.eclipse.wst.validation.internal.IValidationSelectionHandler;
-
-
-/**
- * Emf validation extension for valaditemenuaction
- */
-public class EmfValidationHandler implements IValidationSelectionHandler {
-
-	private String validationType = null;
-	
-	/**
-	 * Default constructor
-	 */
-	public EmfValidationHandler() {
-		super();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.common.frameworks.internal.IValidationSelectionHandler#getBaseValidationType(java.lang.Object)
-	 */
-	public IResource getBaseValidationType(Object selection) {
-		if (selection instanceof EObject) {
-			EObject eObject = (EObject) selection;
-			Resource resource = eObject.eResource();
-			IProject project = ProjectUtilities.getProject(resource);
-			return project;
-		}
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.common.frameworks.internal.IValidationSelectionHandler#getValidationTypeString()
-	 */
-	public String getValidationTypeString() {
-		return validationType;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.common.frameworks.internal.IValidationSelectionHandler#setValidationTypeString(java.lang.String)
-	 */
-	public void setValidationTypeString(String validationType) {
-		this.validationType = validationType;
-	}
-}
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
deleted file mode 100644
index 863e0dd..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/PassthruResourceSet.java
+++ /dev/null
@@ -1,144 +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.internal.emfworkbench;
-
-
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.eclipse.core.resources.IProject;
-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.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.jem.internal.util.emf.workbench.ProjectResourceSetImpl;
-import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
-
-/**
- * This ResourceSet is to be used by plugins that are currently loading to a cached ResourceSet that
- * always loads relative to the Workbench. This ResourceSet will direct the loads to the appropriate
- * Project ResourceSet. It will only load in this ResourceSet if it was unable to load via the
- * Workspace.
- * 
- * If you set want to used this ResourceSet so that the loaded resources are isolated from everyone
- * else, you should use the
- * 
- * @link PassthruResourceSet(IProject) constructor. This will load all resources locally and it will
- *       not delegate to another ProjectResourceSet. This would be equivalent to creating a
- *       ProjectResourceSet without setting any handlers.
- *  
- */
-public class PassthruResourceSet extends ProjectResourceSetImpl {
-	protected boolean isIsolated = false;
-
-	public class PassthruResourcesEList extends ResourceSetImpl.ResourcesEList {
-		public boolean add(Object object) {
-			if (object == null)
-				return false;
-			ResourceSet set = WorkbenchResourceHelperBase.getResourceSet(((Resource) object).getURI());
-			if (set != null)
-				return set.getResources().add(object);
-
-			return super.add(object);
-		}
-
-
-		public boolean addAll(Collection collection) {
-			if (collection.isEmpty())
-				return false;
-			Iterator it = collection.iterator();
-			Resource res;
-			while (it.hasNext()) {
-				res = (Resource) it.next();
-				if (!WorkbenchResourceHelperBase.cacheResource(res))
-					super.add(res);
-			}
-			return true;
-		}
-	}
-
-	public PassthruResourceSet() {
-		isIsolated = false;
-	}
-
-	/**
-	 * This constructor should only be used if you want to use this ResourceSet isolated from the
-	 * actual cached ProjectResourcSet for the passed IProject.
-	 */
-	public PassthruResourceSet(IProject project) {
-		setProject(project);
-		isIsolated = true;
-	}
-
-	public boolean isIsolated() {
-		return isIsolated;
-	}
-
-	public Resource createResource(URI uri) {
-		Resource result = WorkbenchResourceHelperBase.getExistingOrCreateResource(uri);
-		if (result == null)
-			return super.createResource(uri);
-		return result;
-	}
-
-	/**
-	 * @see org.eclipse.emf.ecore.resource.impl.ResourceSetImpl#demandCreateResource(URI)
-	 */
-	protected Resource demandCreateResource(URI uri) {
-		Resource result = WorkbenchResourceHelperBase.createResource(uri);
-		if (result == null)
-			return super.createResource(uri); //We do want to call super.createResource and not
-		// demandCreateResource
-		return result;
-	}
-
-	/*
-	 * Javadoc copied from interface.
-	 */
-	public EList getResources() {
-		if (isIsolated)
-			return super.getResources();
-		if (resources == null) {
-			resources = new PassthruResourcesEList();
-		}
-		return resources;
-	}
-
-	/**
-	 * @see org.eclipse.jem.internal.util.emf.workbench.ProjectResourceSetImpl#createResourceFromHandlers(URI)
-	 */
-	protected Resource createResourceFromHandlers(URI uri) {
-		if (!isIsolated)
-			return super.createResourceFromHandlers(uri);
-		return null;
-	}
-
-	/**
-	 * @see org.eclipse.jem.internal.util.emf.workbench.ProjectResourceSetImpl#getResourceFromHandlers(URI)
-	 */
-	protected Resource getResourceFromHandlers(URI uri) {
-		if (!isIsolated)
-			return super.getResourceFromHandlers(uri);
-		return null;
-	}
-
-	/**
-	 * @see com.ibm.etools.emf.workbench.ProjectResourceSetImpl#getEObjectFromHandlers(URI, boolean)
-	 */
-	protected EObject getEObjectFromHandlers(URI uri, boolean loadOnDemand) {
-		if (!isIsolated)
-			return super.getEObjectFromHandlers(uri, loadOnDemand);
-		return null;
-	}
-
-}
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
deleted file mode 100644
index fd8d587..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/WorkbenchResourceHelper.java
+++ /dev/null
@@ -1,531 +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 Mar 3, 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.internal.emfworkbench;
-
-import java.io.OutputStream;
-import java.util.Map;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-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;
-import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.common.util.WrappedException;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.URIConverter;
-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;
-import org.eclipse.wst.common.internal.emf.utilities.ExtendedEcoreUtil;
-
-/**
- * @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 WorkbenchResourceHelper extends WorkbenchResourceHelperBase {
-	protected static Class REFERENCED_RES_CLASS = ReferencedResource.class;
-	private static boolean fileAdapterFactoryInitialized = false;
-
-	private static class FileAdapterFactory extends AdapterFactoryImpl {
-
-		public Adapter adaptNew(Notifier target, Object type) {
-			FileAdapter adapter = new FileAdapter();
-			adapter.setTarget(target);
-			return adapter;
-		}
-
-	}
-
-	/**
-	 * This class is internal and is used to store state on the resource, specifically, a cached
-	 * reference to the IFile
-	 */
-	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);
-		}
-
-		/*
-		 * Update the synchronization stamp where appropriate
-		 */
-		public void notifyChanged(Notification msg) {
-			switch (msg.getFeatureID(null)) {
-				case Resource.RESOURCE__IS_LOADED :
-					if (getResource().isLoaded())
-						handleLoaded();
-					else
-						handleUnloaded();
-					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 = 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 = FILE_NOT_LOADED;
-			}
-			if (file == null) {
-				if (isPlatformResourceURI(getURI())) {
-					file = getPlatformFile(getURI());
-				} else {
-					//we should not be here anymore.
-					file = internalGetFile(getResource());
-				}
-				if(null!= file && !file.isAccessible()){
-					synchronizationStamp = FILE_INACCESSIBLE;
-				}
-				previousResourceSet = getResourceSet();
-			}
-			return file;
-		}
-
-		/**
-		 * @return
-		 */
-		public long getSynchronizationStamp() {
-			return synchronizationStamp;
-		}
-
-		/**
-		 * @param file
-		 */
-		public void setFile(IFile file) {
-			this.file = file;
-		}
-
-		/**
-		 * @param l
-		 */
-		public void setSynchronizationStamp(long l) {
-			synchronizationStamp = l;
-		}
-
-		/**
-		 * @see ReferencedResource#isConsistent()
-		 */
-		public boolean isConsistent() {
-			//This checks for the case where the resource hasn't finished saving fo the first time
-			if(!getResource().isLoaded())
-				return true;
-            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()));
-		}
-
-		public ReferencedResource getResource() {
-			return (ReferencedResource) target;
-		}
-
-		public URI getURI() {
-			return target == null ? null : getResource().getURI();
-		}
-
-		public ResourceSet getResourceSet() {
-			return target == null ? null : getResource().getResourceSet();
-		}
-
-		public void handleUnloaded() {
-			file = null;
-			synchronizationStamp = FILE_NOT_LOADED;
-		}
-
-		public void handleLoaded() {
-			cacheSynchronizationStamp();
-		}
-
-		public void handleSaved() {
-			cacheSynchronizationStamp();
-			releaseSaveLock();
-		}
-	}
-
-	/**
-	 * This is an internal method to be used by the plugin only
-	 */
-	public static synchronized void initializeFileAdapterFactory() {
-		if (!fileAdapterFactoryInitialized) {
-			ReferencedXMIFactoryImpl.addGlobalAdapterFactory(new FileAdapterFactory());
-			fileAdapterFactoryInitialized = true;
-		}
-	}
-
-
-	private static FileAdapter getFileAdapter(ReferencedResource res) {
-		FileAdapter adapter = (FileAdapter) EcoreUtil.getExistingAdapter(res, FileAdapter.ADAPTER_KEY);
-		return adapter == null ? createFileAdapter(res) : adapter;
-	}
-
-	private static FileAdapter createFileAdapter(ReferencedResource res) {
-		FileAdapter adapter = new FileAdapter();
-		adapter.setTarget(res);
-		res.eAdapters().add(adapter);
-		return adapter;
-	}
-
-	/**
-	 * Return the underlying IFile for the resource if one exists. This may return null if the
-	 * resource does not belong to a ProjectResourceSet.
-	 */
-	public static IFile getFile(ReferencedResource res) {
-		FileAdapter adapter = getFileAdapter(res);
-		return adapter == null ? null : adapter.getFile();
-	}
-
-	public static long getSynchronizationStamp(ReferencedResource res) {
-		FileAdapter adapter = getFileAdapter(res);
-		return adapter == null ? FileAdapter.FILE_NOT_LOADED : adapter.getSynchronizationStamp();
-	}
-
-	public static void setSynhronizationStamp(ReferencedResource res, long stamp) {
-		FileAdapter adapter = getFileAdapter(res);
-		if (adapter != null)
-			adapter.setSynchronizationStamp(stamp);
-	}
-
-	public static boolean isConsistent(ReferencedResource res) {
-		FileAdapter adapter = getFileAdapter(res);
-		return adapter != null && adapter.isConsistent();
-	}
-
-	/**
-	 * Method cacheSynchronizationStamp.
-	 * 
-	 * @param r
-	 */
-	public static void cacheSynchronizationStamp(ReferencedResource refResource) {
-		if (refResource != null) {
-			FileAdapter adapter = getFileAdapter(refResource);
-			if (adapter != null && adapter.getSynchronizationStamp() <= FileAdapter.FILE_NOT_LOADED)
-				adapter.setSynchronizationStamp(computeModificationStamp(refResource));
-		}
-	}
-
-	public static boolean isReferencedResource(Resource aResource) {
-		return REFERENCED_RES_CLASS.isInstance(aResource);
-	}
-
-	public static long computeModificationStamp(ReferencedResource resource) {
-		FileAdapter adapter = getFileAdapter(resource);
-		return adapter == null ? FileAdapter.FILE_NOT_LOADED : computeModificationStamp(adapter.getFile());
-	}
-
-	public static long computeModificationStamp(IFile file) {
-		if (file == null)
-			return FileAdapter.FILE_NOT_LOADED;
-		if(!file.isAccessible()){
-			return FileAdapter.FILE_INACCESSIBLE;
-		}
-		long currentStamp = file.getModificationStamp();
-		IPath path = file.getLocation();
-		if (path != null)
-			return path.toFile().lastModified();
-		return currentStamp;
-	}
-
-	/**
-	 * Return the IFile that currently corresponds to <code>aResource</code>.
-	 */
-	public static IFile getFile(Resource aResource) {
-		if (aResource != null) {
-			if (isReferencedResource(aResource))
-				return getFile((ReferencedResource) aResource);
-			return internalGetFile(aResource);
-		}
-		return null;
-	}
-
-	public static IFile getFile(EObject obj) {
-		if (obj == null)
-			return null;
-
-		Resource mofResource = obj.eResource();
-		if (mofResource == null)
-			return null;
-		return getFile(mofResource);
-	}
-
-	/**
-	 * Get or load a cached Resource or create one if it is not found. A WrappedException will only
-	 * be thrown if the corresponding file exists but it failed to load.
-	 */
-	public static Resource getOrCreateResource(URI uri, ResourceSet set) throws WrappedException {
-		try {
-			return set.getResource(uri, true); //this will create the resource no matter what
-		} catch (WrappedException e) {
-			if (ExtendedEcoreUtil.getFileNotFoundDetector().isFileNotFound(e))
-				return set.getResource(uri, false);
-			throw e;
-		}
-	}
-
-	protected static boolean isSameProject(Resource resourceA, Resource resourceB) {
-		IProject pA, pB;
-		pA = getProject(resourceA);
-		pB = getProject(resourceB);
-		if (pA != null && pB != null)
-			return pA.equals(pB);
-		//otherwise we do not have enough info to determine false so we must return true
-		return true;
-	}
-
-	public static IProject getProject(Resource res) {
-		IProject proj = getProject(res.getResourceSet());
-		if (proj == null) {
-			IFile file = getFile(res);
-			if (file != null)
-				proj = file.getProject();
-		}
-		return proj;
-	}
-
-	/*
-	 * This method should not be called by clients. It is used internally by clients that also call
-	 * getFile(...). This is to avoid endless loops.
-	 * 
-	 * @see getFile(Resource)
-	 */
-	protected static IFile internalGetFile(Resource aResource) {
-		if (aResource != null)
-			return getFile(aResource.getResourceSet(), aResource.getURI());
-
-		return null;
-	}
-
-	protected static IFile getFile(ResourceSet set, URI uri) {
-		IFile file = getPlatformFile(uri);
-		if (file == null) {
-			if (set != null) {
-				URIConverter converter = set.getURIConverter();
-				URI convertedUri = converter.normalize(uri);
-				if (!uri.equals(convertedUri))
-					return getPlatformFile(convertedUri);
-			}
-		}
-		return file;
-	}
-
-	/**
-	 * Return the IFile for the <code>uri</code> within the Workspace. This URI is assumed to be
-	 * absolute in the following format: platform:/resource/....
-	 */
-	public static IFile getPlatformFile(URI uri) {
-		if (isPlatformResourceURI(uri)) {
-			String fileString = URI.decode(uri.path());
-			fileString = fileString.substring(JEMUtilPlugin.PLATFORM_RESOURCE.length() + 1);
-			return getWorkspace().getRoot().getFile(new Path(fileString));
-		}
-		return null;
-	}
-
-
-
-	public static IFile getFile(IProject project, URI uri) {
-		ResourceSet set = getResourceSet(project);
-		return getFile(set, uri);
-	}
-
-	/**
-	 * This should only be used if you want to save <code>aResource</code> within the IProject
-	 * that it is currently residing but you do not want to save it in the default output location.
-	 * You should not use this api to save a Resource to an existing file.
-	 * 
-	 * @deprecated This api is no longer required. You should create a resource with the absolute
-	 *             path (platform:/resource/...). Upon save, the file will be saved to this
-	 *             location.
-	 */
-	public static boolean saveResourceToFile(Resource aResource, IFile aFile) throws Exception {
-		return saveResourceToFile(aResource, aFile, null);
-	}
-
-	/**
-	 * This should only be used if you want to save <code>aResource</code> within the IProject
-	 * that it is currently residing but you do not want to save it in the default output location.
-	 * You should not use this api to save a Resource to an existing file.
-	 * 
-	 * @deprecated This api is no longer required. You should create a resource with the absolute
-	 *             path (platform:/resource/...). Upon save, the file will be saved to this
-	 *             location.
-	 */
-	public static boolean saveResourceToFile(Resource aResource, IFile aFile, Map saveOptions) throws Exception {
-		if (aResource != null && aFile != null && !aFile.exists()) {
-			ResourceSet set = aResource.getResourceSet();
-			if (set != null) {
-				URIConverter conv = set.getURIConverter();
-				if (conv != null && conv instanceof WorkbenchURIConverter) {
-					WorkbenchURIConverter wbConv = (WorkbenchURIConverter) conv;
-					String uri = aResource.getURI().toString();
-					IPath resPath, filePath;
-					resPath = new Path(uri);
-					filePath = aFile.getProjectRelativePath();
-					int resCount, fileCount;
-					resCount = resPath.segmentCount();
-					fileCount = filePath.segmentCount();
-					if (resCount <= fileCount) {
-						filePath = filePath.removeFirstSegments(fileCount - resCount);
-						if (resPath.equals(filePath)) {
-							OutputStream os = wbConv.createOutputStream(URI.createPlatformResourceURI(aFile.toString()));
-							if (os != null) {
-								try {
-									aResource.save(os, saveOptions);
-								} finally {
-									os.close();
-								}
-								return true;
-							}
-						}
-					}
-				}
-			}
-		}
-		return false;
-	}
-
-	protected static void deleteFile(IFile aFile) throws CoreException {
-		if (aFile != null && aFile.exists())
-			aFile.delete(true, null);
-	}
-
-	/**
-	 * Delete
-	 * 
-	 * @aResource in the Workbench.
-	 */
-	public static void deleteResource(Resource aResource) throws CoreException {
-		if (aResource != null)
-			deleteFile(getFile(aResource));
-	}
-
-
-
-}
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
deleted file mode 100644
index bf2c38c..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/AdapterFactoryDescriptor.java
+++ /dev/null
@@ -1,162 +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 26, 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.internal.emfworkbench.edit;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.jem.util.plugin.JEMUtilPlugin;
-import org.eclipse.wst.common.frameworks.internal.AbstractRegistryDescriptor;
-import org.eclipse.wst.common.internal.emf.utilities.Assert;
-import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchEditResourceHandler;
-
-
-public class AdapterFactoryDescriptor extends AbstractRegistryDescriptor implements Comparable {
-
-	private String packageURI = null;
-	private String id = null;
-	private Set viewIDs = null;
-	private final int loadOrder;
-	private static int loadOrderCounter = 0;
-
-	public AdapterFactoryDescriptor(IConfigurationElement element) {
-		super(element);
-
-		packageURI = element.getAttribute(AdapterFactoryRegistry.PACKAGE_URI);
-		id = element.getAttribute(AdapterFactoryRegistry.ID);
-		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++;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Object#toString()
-	 */
-	public String toString() {
-		StringBuffer sb = new StringBuffer();
-		sb.append("AdapterFactoryDescriptor"); //$NON-NLS-1$
-		sb.append('[');
-		sb.append(packageURI);
-		sb.append(",p"); //$NON-NLS-1$
-		sb.append(getPriority());
-		if (viewIDs != null && !viewIDs.isEmpty()) {
-			sb.append(':');
-			boolean first = true;
-			Iterator iter = viewIDs.iterator();
-			while (iter.hasNext()) {
-				if (!first)
-					sb.append(',');
-				first = false;
-				sb.append(iter.next());
-			}
-		}
-		sb.append(']');
-		return sb.toString();
-	}
-
-	private void readViewIDs() {
-		viewIDs = new HashSet(3);
-		IConfigurationElement[] children = element.getChildren(AdapterFactoryRegistry.VIEW);
-		if (children == null || children.length == 0)
-			return;
-
-		String viewID = null;
-		for (int i = 0; i < children.length; i++) {
-			viewID = children[i].getAttribute(AdapterFactoryRegistry.ID);
-			if (viewID != null)
-				viewIDs.add(viewID);
-		}
-	}
-
-	public AdapterFactory createInstance() {
-		if (element == null)
-			return null;
-
-		AdapterFactory factory = null;
-		try {
-			factory = (AdapterFactory) element.createExecutableExtension(AdapterFactoryRegistry.CLASS_NAME);
-		} catch (CoreException e) {
-			JEMUtilPlugin.getLogger().logError(e);
-			factory = null;
-		}
-		return factory;
-	}
-
-
-	public String getPackageURI() {
-		return packageURI;
-	}
-
-	public Set getViewIDs() {
-		return viewIDs;
-	}
-
-	public boolean appliesTo(String viewID) {
-		return viewIDs.isEmpty() || viewIDs.contains(viewID);
-	}
-
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Comparable#compareTo(java.lang.Object)
-	 */
-	public int compareTo(Object o) {
-		if (this == o)
-			return 0;
-		if (!(o instanceof AdapterFactoryDescriptor))
-			return 1;
-		AdapterFactoryDescriptor desc = (AdapterFactoryDescriptor) o;
-
-		int pCompare = getPriority() - desc.getPriority();
-		if (pCompare != 0)
-			//We have reverse the sorting of the priority for the adapter factories
-			return -pCompare;
-
-		//The group is the same - in this case the one for a specific view has precedence over
-		//a generic one
-		else if (viewIDs != null && !viewIDs.isEmpty())
-			return -1;
-		else
-			return 1;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.AbstractRegistryDescriptor#getID()
-	 */
-	public String getID() {
-		return id;
-	}
-
-
-	/**
-	 * @return Returns the loadOrder.
-	 */
-	public int getLoadOrder() {
-		return loadOrder;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/AdapterFactoryRegistry.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/AdapterFactoryRegistry.java
deleted file mode 100644
index e986962..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/AdapterFactoryRegistry.java
+++ /dev/null
@@ -1,116 +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.internal.emfworkbench.edit;
-
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeSet;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.jem.util.RegistryReader;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.internal.emfworkbench.integration.EMFWorkbenchEditPlugin;
-
-/**
- * @author mdelder
- */
-public class AdapterFactoryRegistry extends RegistryReader {
-
-	public static final String ADAPTER_FACTORY = "adapterFactory"; //$NON-NLS-1$
-
-	public static final String PACKAGE_URI = "packageURI"; //$NON-NLS-1$
-
-	public static final String CLASS_NAME = "className"; //$NON-NLS-1$
-
-	public static final String VIEW = "view"; //$NON-NLS-1$
-
-	public static final String ID = "id"; //$NON-NLS-1$
-
-	private Map descriptorMap = null;
-
-	private static AdapterFactoryRegistry instance;
-
-	private AdapterFactoryRegistry() {
-		super(EMFWorkbenchEditPlugin.ID, EMFWorkbenchEditPlugin.ADAPTER_FACTORY_REGISTRY_EXTENSION_POINT);
-	}
-
-	public List getDescriptors(EPackage pkg, String viewID) {
-		Collection all = getDescriptors(pkg);
-		if (all == null)
-			return null;
-
-		Iterator iter = all.iterator();
-		AdapterFactoryDescriptor desc = null;
-		List result = new ArrayList(all.size());
-		while (iter.hasNext()) {
-			desc = (AdapterFactoryDescriptor) iter.next();
-			if (desc.appliesTo(viewID))
-				result.add(desc);
-		}
-		return result;
-	}
-
-	public Collection getDescriptors(EPackage registeredPackage) {
-		return (Collection) getDescriptorMap().get(registeredPackage.getNsURI());
-	}
-
-	private Map getDescriptorMap() {
-		if (descriptorMap == null)
-			descriptorMap = new HashMap();
-		return descriptorMap;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.RegistryReader#readElement(org.eclipse.core.runtime.IConfigurationElement)
-	 */
-	public boolean readElement(IConfigurationElement element) {
-		try {
-			if (element.getName().equals(ADAPTER_FACTORY)) {
-				AdapterFactoryDescriptor descriptor = new AdapterFactoryDescriptor(element);
-				mapDescriptor(descriptor);
-				return true;
-			}
-		} catch (RuntimeException re) {
-			Logger.getLogger().logError(re);
-		}
-		return false;
-	}
-
-	private void mapDescriptor(AdapterFactoryDescriptor descriptor) {
-		String uri = descriptor.getPackageURI();
-		Collection descriptors = (Collection) getDescriptorMap().get(uri);
-		if (descriptors == null) {
-			descriptors = new TreeSet();
-			getDescriptorMap().put(uri, descriptors);
-		}
-		descriptors.add(descriptor);
-	}
-
-	/**
-	 * @return Returns the instance.
-	 */
-	public static AdapterFactoryRegistry instance() {
-		if (instance == null) {
-			instance = new AdapterFactoryRegistry();
-			instance.readRegistry();
-		}
-		return instance;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ChildCommand.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ChildCommand.java
deleted file mode 100644
index 6dec40e..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ChildCommand.java
+++ /dev/null
@@ -1,103 +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.internal.emfworkbench.edit;
-
-
-
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.wst.common.internal.emfworkbench.integration.AbstractEditModelCommand;
-import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
-import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelCommand;
-
-/**
- * Insert the type's description here. Creation date: (05/22/01 8:57:56 AM)
- * 
- * @author: Administrator
- */
-public class ChildCommand extends EditModelCommand {
-	private ParentCommand parent;
-	private EditModelRetriever modelRetriever;
-
-	public ChildCommand(ParentCommand parentCmd, Command targetCmd, EditModelRetriever retriever) {
-		super(targetCmd);
-		parent = parentCmd;
-		modelRetriever = retriever;
-	}
-
-	public boolean canExecute() {
-		return true;
-	}
-
-	/**
-	 * Does nothing
-	 */
-	public void execute() {
-		//does nothing
-	}
-
-	protected void executeInModel(AbstractEditModelCommand cmd) {
-		EditModel model = modelRetriever.getEditModelForWrite(this);
-		try {
-			model.getCommandStack().execute(cmd);
-			model.saveIfNecessary(this);
-		} finally {
-			model.releaseAccess(this);
-		}
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (05/22/01 9:35:36 AM)
-	 * 
-	 * @return java.lang.Object
-	 */
-	public java.lang.Object getEditModelKey() {
-		return modelRetriever.getEditModelID();
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (05/22/01 9:35:36 AM)
-	 * 
-	 * @return com.ibm.etools.j2ee.workbench.ParentCommand
-	 */
-	public ParentCommand getParent() {
-		return parent;
-	}
-
-	public void redo() {
-		redoInModel();
-		getParent().redoFrom(this);
-	}
-
-	protected void redoInModel() {
-		EditModel model = modelRetriever.getEditModelForWrite(this);
-		try {
-			getTarget().redo();
-			model.saveIfNecessary(this);
-		} finally {
-			model.releaseAccess(this);
-		}
-	}
-
-	public void undo() {
-		undoInModel();
-		getParent().undoFrom(this);
-	}
-
-	protected void undoInModel() {
-		EditModel model = modelRetriever.getEditModelForWrite(this);
-		try {
-			getTarget().undo();
-			model.saveIfNecessary(this);
-		} finally {
-			model.releaseAccess(this);
-		}
-	}
-}
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
deleted file mode 100644
index 9fae464..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ClientAccessRegistry.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
- *******************************************************************************/
-/*
- * Created on Oct 6, 2003
- */
-package org.eclipse.wst.common.internal.emfworkbench.edit;
-
-import java.util.HashSet;
-import java.util.Set;
-import java.util.WeakHashMap;
-
-import org.eclipse.jem.internal.util.emf.workbench.nls.EMFWorkbenchResourceHandler;
-import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchEditResourceHandler;
-
-/**
- * @author mdelder
- */
-public class ClientAccessRegistry {
-
-	protected final WeakHashMap registry = new WeakHashMap();
-	protected final Set baseSet = new HashSet();
-
-	public synchronized void access(Object accessorKey) {
-		if (isStable()) {
-			if (!registry.containsKey(accessorKey)) {
-				Snapshot snapshot = new Snapshot();
-				this.registry.put(accessorKey, snapshot);
-				this.baseSet.add(snapshot);
-
-			} else
-				throw new ClientAccessRegistryException(EMFWorkbenchEditResourceHandler.ClientAccessRegistry_ERROR_0, accessorKey);
-
-		} else
-			complain();
-	}
-
-	public synchronized void release(Object accessorKey) {
-
-		/*
-		 * Error condition: Some one has been naughty and not released the resource
-		 */
-		if (this.registry.containsKey(accessorKey) && isStable()) {
-			Snapshot snapshot = (Snapshot) this.registry.remove(accessorKey);
-			this.baseSet.remove(snapshot);
-		} else
-			complain(accessorKey);
-	}
-
-	public synchronized void assertAccess(Object accessorKey) {
-		if (!isClientAccessing(accessorKey))
-			throw new ClientAccessRegistryException(EMFWorkbenchResourceHandler.getString("ClientAccessRegistry_ERROR_1"), accessorKey); //$NON-NLS-1$
-	}
-
-	public synchronized boolean isClientAccessing(Object client) {
-		boolean result = this.registry.containsKey(client);
-		if (!isStable())
-			complain();
-		return result;
-	}
-
-	public synchronized boolean isAnyClientAccessing() {
-		boolean result = this.registry.size() > 0;
-		if (!isStable())
-			complain();
-		return result;
-	}
-
-	public synchronized boolean isStable() {
-		return this.baseSet.size() == this.registry.size();
-	}
-
-	public void complain() {
-		complain(null);
-	}
-
-	public void complain(Object accessorKey) {
-		if (!isStable())
-			throw new ClientAccessRegistryException(this.registry, this.baseSet);
-		throw new ClientAccessRegistryException(EMFWorkbenchResourceHandler.getString("ClientAccessRegistry_ERROR_1"), accessorKey); //$NON-NLS-1$
-	}
-
-	public String toString() {
-		StringBuffer result = new StringBuffer("ClientAccessRegistry: ["); //$NON-NLS-1$
-		result.append((isStable()) ? "STABLE" : "OUT OF SYNC"); //$NON-NLS-1$ //$NON-NLS-2$
-		result.append("]: Reference Count = "); //$NON-NLS-1$
-		result.append(this.size());
-		return result.toString();
-	}
-
-	public synchronized int size() {
-		return this.registry.size();
-	}
-
-}
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
deleted file mode 100644
index a49c8a0..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ClientAccessRegistryException.java
+++ /dev/null
@@ -1,152 +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 2, 2003
- *  
- */
-package org.eclipse.wst.common.internal.emfworkbench.edit;
-
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.WeakHashMap;
-
-import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchEditResourceHandler;
-
-
-/**
- * The ClientAccessRegistryException accepts a WeakHashSet registry and a Set of all Snapshots that
- * should be contained in the registry. It will perform the necessary set difference in order to
- * determine which Snapshots exist in the baseSet but not in the registry.
- * 
- * @author mdelder
- */
-public class ClientAccessRegistryException extends RuntimeException {
-
-	public static final int UNKNOWN = 0;
-	public static final int DANGLING_REFERENCE = 1;
-	public static final int INVALID_ACCESS_KEY = 2;
-	private WeakHashMap registry = null;
-	private Set baseSet = null;
-	private boolean processed = false;
-	private int type = UNKNOWN;
-
-	public ClientAccessRegistryException(WeakHashMap registry, Set baseSet) {
-		this.registry = registry;
-		this.baseSet = new HashSet();
-		this.baseSet.addAll(baseSet);
-		this.type = DANGLING_REFERENCE;
-	}
-
-	public ClientAccessRegistryException(String msg, Object key) {
-		super(msg + " : " + key); //$NON-NLS-1$
-		this.type = INVALID_ACCESS_KEY;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Throwable#printStackTrace(java.io.PrintStream)
-	 */
-	public void printStackTrace(PrintStream s) {
-
-		s.println(toString());
-		super.printStackTrace(s);
-
-		if (this.registry != null) {
-			Snapshot snapshot = null;
-			if (!processed) {
-				Object key = null;
-				Iterator keyIterator = this.registry.keySet().iterator();
-				while (keyIterator.hasNext()) {
-					key = keyIterator.next();
-					snapshot = (Snapshot) this.registry.get(key);
-					this.baseSet.remove(snapshot);
-				}
-				processed = true;
-			}
-			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();
-				snapshot.printStackTrace(s);
-			}
-
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Throwable#printStackTrace(java.io.PrintWriter)
-	 */
-	public void printStackTrace(PrintWriter s) {
-
-		s.println(toString());
-		super.printStackTrace(s);
-		if (this.registry != null) {
-			Snapshot snapshot = null;
-			if (!processed) {
-				Object key = null;
-				Iterator keyIterator = this.registry.keySet().iterator();
-				while (keyIterator.hasNext()) {
-					key = keyIterator.next();
-					snapshot = (Snapshot) this.registry.get(key);
-					this.baseSet.remove(snapshot);
-				}
-				processed = true;
-			}
-			s.println(EMFWorkbenchEditResourceHandler.getString("", new Object[]{new Integer(baseSet.size()).toString()})); //$NON-NLS-1$
-
-			for (Iterator possibleCulpritsItr = baseSet.iterator(); possibleCulpritsItr.hasNext();) {
-				snapshot = (Snapshot) possibleCulpritsItr.next();
-				snapshot.printStackTrace(s);
-			}
-
-		}
-	}
-
-	public String getType() {
-		switch (type) {
-			case DANGLING_REFERENCE :
-				return "DANGLING_REFERENCE"; //$NON-NLS-1$
-			case INVALID_ACCESS_KEY :
-				return "INVALID_ACCESS_KEY"; //$NON-NLS-1$
-			default :
-				return "UNKNOWN"; //$NON-NLS-1$
-		}
-	}
-
-	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()}));
-		//		if (this.badReferenceLocation != null) {
-		//			result.append("The invalid access occurred somewhere in the following stack
-		// trace.").append("\n");
-		//			result.append(this.badReferenceLocation.getStackTraceString());
-		//		}
-		return result.toString();
-	}
-
-	public static void main(String[] args) {
-		System.out.println(new ClientAccessRegistryException("test message", "-somekeyobj-").toString()); //$NON-NLS-1$ //$NON-NLS-2$
-		System.out.println("LINEBREAK"); //$NON-NLS-1$
-		System.out.println(new ClientAccessRegistryException(new WeakHashMap(), new HashSet()).toString());
-		System.out.println("LINEBREAK"); //$NON-NLS-1$
-		new ClientAccessRegistryException("test message", "-somekeyobj-").printStackTrace(); //$NON-NLS-1$ //$NON-NLS-2$
-		System.out.println("LINEBREAK"); //$NON-NLS-1$
-		new ClientAccessRegistryException(new WeakHashMap(), new HashSet()).printStackTrace();
-
-	}
-
-}
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
deleted file mode 100644
index 4110873..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EMFWorkbenchEditContextFactory.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
- *******************************************************************************/
-/*
- * Created on Mar 3, 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.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;
-
-/**
- * @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 EMFWorkbenchEditContextFactory extends EMFWorkbenchContextFactory {
-	
-	
-	/**
-	 *  
-	 */
-	public EMFWorkbenchEditContextFactory() {
-		super();
-	}
-
-	protected EMFWorkbenchContextBase primCreateEMFContext(IProject aProject) {
-		return new EMFWorkbenchContext(aProject);
-	}
-
-	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/EditModelExtension.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelExtension.java
deleted file mode 100644
index 6041def..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelExtension.java
+++ /dev/null
@@ -1,69 +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 18, 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.internal.emfworkbench.edit;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.internal.ConfigurationElementWrapper;
-
-
-public class EditModelExtension extends ConfigurationElementWrapper {
-	public static final String ID_ATTR = "id"; //$NON-NLS-1$
-
-	private String editModelID = null;
-	private Collection resources = null;
-	private String id = null;
-
-
-	public EditModelExtension(IConfigurationElement element) {
-		super(element);
-		init();
-	}
-
-	private void init() {
-		id = element.getAttribute(ID_ATTR);
-		if (id == null) {
-			Logger.getLogger().logError("Incorrect usage of editModelExtension extension point.  Element must contain id attribute.  Plugin: " + getPluginId()); //$NON-NLS-1$
-			return;
-		}
-
-		editModelID = element.getAttribute(EditModelExtensionRegistry.EDIT_MODEL_ID_ATTR);
-		resources = new ArrayList();
-		IConfigurationElement[] editModelResources = element.getChildren(EditModelResource.EDIT_MODEL_RESOURCE_ELEMENT);
-		for (int j = 0; j < editModelResources.length; j++)
-			resources.add(new EditModelResource(editModelResources[j], id));
-	}
-
-	/**
-	 * @return
-	 */
-	public String getEditModelID() {
-		return editModelID;
-	}
-
-
-	/**
-	 * @return
-	 */
-	public Collection getResources() {
-		return resources;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelExtensionRegistry.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelExtensionRegistry.java
deleted file mode 100644
index 47bc51b..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelExtensionRegistry.java
+++ /dev/null
@@ -1,98 +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.internal.emfworkbench.edit;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.RegistryReader;
-import org.eclipse.wst.common.internal.emfworkbench.integration.EMFWorkbenchEditPlugin;
-
-
-/**
- * @author mdelder
- */
-class EditModelExtensionRegistry extends RegistryReader {
-
-	private static EditModelExtensionRegistry INSTANCE = null;
-
-	public static final String EDIT_MODEL_EXT_ELEMENT = "editModelExtension"; //$NON-NLS-1$
-	public static final String EDIT_MODEL_ID_ATTR = "editModelID"; //$NON-NLS-1$
-	public static final String GROUP_ID_ATTR = "functionGroupID"; //$NON-NLS-1$
-
-
-	private Map extensions = null;
-
-	protected EditModelExtensionRegistry() {
-		super(EMFWorkbenchEditPlugin.ID, EMFWorkbenchEditPlugin.EDIT_MODEL_EXTENSION_REGISTRY_EXTENSION_POINT);
-	}
-
-	public static EditModelExtensionRegistry getInstance() {
-		if (INSTANCE == null) {
-			INSTANCE = new EditModelExtensionRegistry();
-			INSTANCE.readRegistry();
-		}
-		return INSTANCE;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.RegistryReader#readElement(org.eclipse.core.runtime.IConfigurationElement)
-	 */
-	public boolean readElement(IConfigurationElement element) {
-
-		boolean result = false;
-		Collection extensionsByID = null;
-		EditModelExtension editModelExtension = null;
-		if (element.getName().equals(EDIT_MODEL_EXT_ELEMENT)) {
-			editModelExtension = new EditModelExtension(element);
-			extensionsByID = (Collection) getExtensions().get(editModelExtension.getEditModelID());
-			if (extensionsByID == null) {
-				extensionsByID = new ArrayList();
-				getExtensions().put(editModelExtension.getEditModelID(), extensionsByID);
-			}
-			extensionsByID.add(editModelExtension);
-			result = true;
-		}
-		return result;
-	}
-
-	protected Map getExtensions() {
-		if (extensions == null)
-			extensions = new HashMap();
-		return extensions;
-	}
-
-	/**
-	 * @return
-	 */
-	public Collection getEditModelResources(Object editModelID) {
-		//TODO - Cache the resources
-		Collection editModelResources = new ArrayList();
-		Collection editModelExtensions = (Collection) getExtensions().get(editModelID);
-
-		if (editModelExtensions == null || editModelExtensions.size() == 0)
-			return Collections.EMPTY_LIST;
-		Iterator itr = editModelExtensions.iterator();
-		while (itr.hasNext()) {
-			EditModelExtension ext = (EditModelExtension) itr.next();
-			editModelResources.addAll(ext.getResources());
-		}
-		return (!editModelExtensions.isEmpty()) ? editModelResources : Collections.EMPTY_LIST;
-	}
-
-}
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
deleted file mode 100644
index dcfa367..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelRegistry.java
+++ /dev/null
@@ -1,371 +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.internal.emfworkbench.edit;
-
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeSet;
-
-import org.eclipse.core.resources.IProject;
-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.emfworkbench.EMFWorkbenchContext;
-import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchEditResourceHandler;
-import org.eclipse.wst.common.internal.emfworkbench.integration.EMFWorkbenchEditPlugin;
-import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
-import org.eclipse.wst.common.internal.emfworkbench.integration.IEditModelFactory;
-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;
-
-/**
- * @author mdelder
- */
-public class EditModelRegistry extends RegistryReader {
-
-	private final static EditModelRegistry INSTANCE =  new EditModelRegistry();
-
-	private final Map factoryConfigurations = new HashMap();
-	private static boolean initialized = false;
-	
-
-	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$
-
-
-
-	public static final String LOAD_UNKNOWN_RESOURCES_ATTR = "loadUnknownResourcesAsReadOnly"; //$NON-NLS-1$
-
-	protected EditModelRegistry() {
-		super(EMFWorkbenchEditPlugin.ID, EMFWorkbenchEditPlugin.EDIT_MODEL_FACTORIES_EXTENSION_POINT);
-	}
-
-	public static EditModelRegistry getInstance() {
-		if(isInitialized()) 
-			return INSTANCE;
-		synchronized(INSTANCE) {
-			if(!isInitialized()) {
-				INSTANCE.readRegistry();
-				initialized = true;
-			}
-		} 
-		return INSTANCE;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.RegistryReader#readElement(org.eclipse.core.runtime.IConfigurationElement)
-	 */
-	public boolean readElement(IConfigurationElement element) {
-		/*
-		 * The EditModel Extension Point defines Configuration elements named "editModel" with
-		 * attributes "editModelID" and "factoryClass"
-		 */
-		boolean result = false;
-		if (element.getName().equals(EDIT_MODEL_ELEMENT)) {
-			String editModelID = element.getAttribute(EDIT_MODEL_ID_ATTR);
-			if (editModelID != null) {
-				this.factoryConfigurations.put(editModelID, new EditModelInfo(editModelID, element));
-				result = true;
-			}
-		}
-		return result;
-	}
-
-	public String getCacheID(String editModelID, Map params) {
-		IEditModelFactory factory = getEditModelFactoryByKey(editModelID);
-		return factory.getCacheID(editModelID, params);
-	}
-
-	public EditModel createEditModelForRead(String editModelID, EMFWorkbenchContext context, Map params) {
-		return getEditModelFactoryByKey(editModelID).createEditModelForRead(editModelID, context, params);
-	}
-
-	public EditModel createEditModelForWrite(String editModelID, EMFWorkbenchContext context, Map params) {
-		return getEditModelFactoryByKey(editModelID).createEditModelForWrite(editModelID, context, params);
-	}
-
-	public Collection getEditModelResources(String editModelID) {
-		Collection resources = 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}));
-			visitedEditModels.put(parentModelID, null);
-			resources.addAll(getAllEditModelResources(parentModelID));
-			nextEditModelInfo = getEditModelInfoById(parentModelID);
-		}
-
-		/* Get the resources for the actual edit model id */
-		resources.addAll(getAllEditModelResources(editModelID));
-
-		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);
-		if (editMdlInfo != null)
-			factory = editMdlInfo.getEditModelFactory();
-		return factory; 
-	}
-	
-	public IEditModelFactory findEditModelFactoryByProject(IProject project) {
-		IFacetedProject facetedProject = null;
-		try {
-			facetedProject = ProjectFacetsManager.create(project);
-		} catch (Exception e) {
-			return null;
-		}
-		if (facetedProject == null) return null;
-		Iterator keys = factoryConfigurations.keySet().iterator();
-		while (keys.hasNext()) {
-			Object key = keys.next();
-			if (key instanceof String) {
-				try {
-					IProjectFacet projectFacet = ProjectFacetsManager.getProjectFacet((String)key);
-					if (projectFacet != null && facetedProject.hasProjectFacet(projectFacet))
-						return findEditModelFactoryByKey(key);
-				} catch (Exception e) {
-					continue;
-				}
-				
-			}
-		}
-		
-		return null;
-	}
-
-	protected Collection getAllEditModelResources(String editModelID) {
-		Collection resources = new ArrayList();
-		resources.addAll(getLocalEditModelResources(editModelID));
-		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 = 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) {
-		return EditModelExtensionRegistry.getInstance().getEditModelResources(editModelID);
-	}
-
-	/**
-	 * @param editModelKey
-	 *            the editModelID of a given EditModelFactory defined in the Extension Point
-	 * @throws IllegalArgumentException
-	 *             if a IEditModelFactory cannot be found for the given ID.
-	 * @return the EditModelFactory associated with a given EditModelID
-	 */
-	protected IEditModelFactory getEditModelFactoryByKey(Object editModelID) {
-		IEditModelFactory factory = null;
-		EditModelInfo editMdlInfo = getEditModelInfoById(editModelID);
-		if (editMdlInfo != null)
-			factory = editMdlInfo.getEditModelFactory();
-		else
-			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 {
-
-		private String editModelID = null;
-		private IConfigurationElement configurationElement = null;
-
-		private IEditModelFactory factory = null;
-		private List editModelResources = null;
-		private List editModelExtensions = null;
-
-		private String parentModelID = null;
-
-		private String tostringCache = null;
-
-		public EditModelInfo(String editModelID, IConfigurationElement configurationElement) {
-
-			this.configurationElement = configurationElement;
-			this.editModelID = editModelID;
-			this.parentModelID = this.configurationElement.getAttribute(PARENT_MODEL_ATTR);
-		}
-
-
-		public List getEditModelResources() {
-			/* this method is guarded */
-			initializeResources();
-			return editModelResources;
-		}
-
-		public IEditModelFactory getEditModelFactory() {
-//			 Do not block if the factory is not null
-			if (this.factory == null) {
-			  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);
-					}
-			      }
-			    }
-			}
-			return this.factory;
-		}
-
-		private synchronized void initializeResources() {
-
-			if (editModelResources == null) {
-				if (configurationElement != null) {
-
-					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);
-					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);
-						}
-					}
-					discardConfigurationElementIfNecessary();
-				} else {
-					editModelResources = Collections.EMPTY_LIST;
-					editModelExtensions = Collections.EMPTY_LIST;
-				}
-			}
-		}
-
-		private void discardConfigurationElementIfNecessary() {
-			if (this.editModelResources != null && this.factory != null)
-				this.configurationElement = null;
-		}
-
-		public String toString() {
-			if (tostringCache == null)
-				tostringCache = "EditModelID: {" + this.editModelID + "}, Parent Model ID {" + this.parentModelID + "}, Configuration Element: [" + this.configurationElement + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$//$NON-NLS-4$
-			return tostringCache;
-		}
-
-		/**
-		 * @return Returns the parentModelID.
-		 */
-		public String getParentModelID() {
-			return parentModelID;
-		}
-		
-		public List getEditModelExtensions() {
-			/* this method is guarded */
-			initializeResources();
-			return editModelExtensions;
-		}
-
-	}
-	/**
-	 * @return Returns the initialized.
-	 */
-	protected static boolean isInitialized() {
-		return initialized;
-	}
-	
-	public String[] getRegisteredEditModelIDs() {
-		return (String[]) factoryConfigurations.keySet().toArray(new String[factoryConfigurations.keySet().size()]);
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelResource.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelResource.java
deleted file mode 100644
index b5543ac..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelResource.java
+++ /dev/null
@@ -1,115 +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 Feb 5, 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.internal.emfworkbench.edit;
-
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.wst.common.frameworks.internal.AbstractRegistryDescriptor;
-
-
-
-public class EditModelResource extends AbstractRegistryDescriptor implements Comparable {
-	public static final String EDIT_MODEL_URI_ATTR = "URI"; //$NON-NLS-1$
-	public static final String AUTO_LOAD_ATTR = "autoload"; //$NON-NLS-1$
-	public static final String EDIT_MODEL_RESOURCE_ELEMENT = "editModelResource"; //$NON-NLS-1$
-
-	private static int loadOrderCounter = 1;
-	private URI uri;
-	private boolean autoload = false;
-	//Indicates if this was defined as part of the edit model,
-	//as opposed to an extension
-	private boolean isCore = true;
-
-	private String extensionID;
-
-	private int loadOrder;
-
-	public EditModelResource(IConfigurationElement element) {
-		super(element);
-		String strUri = element.getAttribute(EDIT_MODEL_URI_ATTR);
-		if (strUri != null)
-			EditModelResource.this.uri = URI.createURI(strUri);
-
-		String strLoad = element.getAttribute(AUTO_LOAD_ATTR);
-		if (strLoad != null)
-			autoload = Boolean.valueOf(strLoad).booleanValue();
-		loadOrder = loadOrderCounter++;
-	}
-
-	public EditModelResource(IConfigurationElement element, String extensionID) {
-		this(element);
-		this.extensionID = extensionID;
-		isCore = false;
-	}
-
-	public URI getURI() {
-		return uri;
-	}
-
-	public boolean isAutoLoad() {
-		return autoload;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.AbstractRegistryDescriptor#getID()
-	 */
-	public String getID() {
-		return extensionID;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.AbstractRegistryDescriptor#getPriority()
-	 */
-	public int getPriority() {
-		if (isCore)
-			return 0;
-		return super.getPriority();
-	}
-
-	/**
-	 * return whether this resource is defined as part of the edit model definition as opposed to an
-	 * extension
-	 */
-	public boolean isCore() {
-		return isCore;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Comparable#compareTo(java.lang.Object)
-	 */
-	public int compareTo(Object o) {
-		if (!(o instanceof EditModelResource))
-			return 1;
-		EditModelResource res = (EditModelResource) o;
-		int value = getPriority() - res.getPriority();
-		if (value == 0)
-			return loadOrder - res.loadOrder;
-		return value;
-	}
-
-	/**
-	 * @return Returns the loadOrder.
-	 */
-	public int getLoadOrder() {
-		return loadOrder;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelRetriever.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelRetriever.java
deleted file mode 100644
index 8efb8c1..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelRetriever.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
- **************************************************************************************************/
-package org.eclipse.wst.common.internal.emfworkbench.edit;
-
-import java.util.Map;
-
-import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext;
-import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
-
-
-
-public class EditModelRetriever {
-	private EMFWorkbenchContext context;
-	private String editModelID;
-	private Map editModelParms;
-
-	/**
-	 * EditModelRetriever constructor comment.
-	 */
-	public EditModelRetriever(EMFWorkbenchContext context, String editModelKey, Map parms) {
-		super();
-		this.context = context;
-		editModelID = editModelKey;
-		editModelParms = parms;
-	}
-
-	public EditModel getEditModelForRead(Object accessorKey) {
-		return context.getEditModelForRead(getEditModelID(), accessorKey, editModelParms);
-	}
-
-	public EditModel getEditModelForWrite(Object accessorKey) {
-		return context.getEditModelForWrite(getEditModelID(), accessorKey, editModelParms);
-	}
-
-	public String getEditModelID() {
-		return editModelID;
-	}
-
-	public EMFWorkbenchContext context() {
-		return context;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ExtendedComposedAdapterFactory.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ExtendedComposedAdapterFactory.java
deleted file mode 100644
index 8f26cf3..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ExtendedComposedAdapterFactory.java
+++ /dev/null
@@ -1,103 +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 3, 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.internal.emfworkbench.edit;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notifier;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
-import org.eclipse.jem.util.logger.proxy.Logger;
-
-/**
- * @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 ExtendedComposedAdapterFactory extends ComposedAdapterFactory {
-
-	/**
-	 * @param adapterFactory
-	 */
-	public ExtendedComposedAdapterFactory(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * @param adapterFactories
-	 */
-	public ExtendedComposedAdapterFactory(AdapterFactory[] adapterFactories) {
-		super(adapterFactories);
-	}
-
-	/**
-	 * @param adapterFactories
-	 */
-	public ExtendedComposedAdapterFactory(Collection adapterFactories) {
-		super(adapterFactories);
-	}
-
-	/*
-	 * overrode from the super class, changed not to check supertypes of the EObject, because that
-	 * will be handled by the DynamicAdapterFactory
-	 * 
-	 * @see org.eclipse.emf.common.notify.AdapterFactory#adapt(org.eclipse.emf.common.notify.Notifier,
-	 *      java.lang.Object)
-	 */
-	public Adapter adapt(Notifier target, Object type) {
-		Adapter result = null;
-
-		if (target instanceof EObject) {
-			EObject eObject = (EObject) target;
-			EClass eClass = eObject.eClass();
-			if (eClass != null) {
-				EPackage ePackage = eClass.getEPackage();
-				Collection types = new ArrayList();
-				types.add(ePackage);
-				if (type != null) {
-					types.add(type);
-				}
-				/* when an error occurs, remove the delegate and try again */
-				boolean attemptAdaptAgain = true;
-				while (result == null && attemptAdaptAgain) {
-					attemptAdaptAgain = false;
-					AdapterFactory delegateAdapterFactory = getFactoryForTypes(types);
-					if (delegateAdapterFactory != null) {
-						try {
-							result = delegateAdapterFactory.adapt(target, type);
-						} catch (RuntimeException re) {
-							Logger.getLogger().logError(re);
-							adapterFactories.remove(delegateAdapterFactory);
-							attemptAdaptAgain = true;
-						}
-					}
-				}
-			}
-		} else {
-			result = adapt(target, type, new HashSet(), target.getClass());
-		}
-
-		return result;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/InvertedCommand.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/InvertedCommand.java
deleted file mode 100644
index 2bbcb11..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/InvertedCommand.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
- *******************************************************************************/
-package org.eclipse.wst.common.internal.emfworkbench.edit;
-
-
-
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.wst.common.internal.emfworkbench.integration.AbstractEditModelCommand;
-import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelCommand;
-
-/**
- * Insert the type's description here. Creation date: (05/22/01 8:58:24 AM)
- * 
- * @author: Administrator
- */
-public class InvertedCommand extends AbstractEditModelCommand {
-	public InvertedCommand(Command targetCommand) {
-		super(targetCommand);
-	}
-
-	public boolean canExecute() {
-		return getTarget().canUndo();
-	}
-
-	public boolean canUndo() {
-		return getTarget().canExecute();
-	}
-
-	/**
-	 * Does nothing
-	 */
-	public void execute() {
-		//does nothing
-	}
-
-	/**
-	 * getEditModelCommand method comment.
-	 */
-	public EditModelCommand getEditModelCommand() {
-		return ((AbstractEditModelCommand) getTarget()).getEditModelCommand();
-	}
-
-	protected int inversionDepth() {
-		if (getEditModelCommand() == getTarget())
-			return 1;
-		return ((InvertedCommand) getTarget()).inversionDepth() + 1;
-	}
-
-	protected String labelPrefix() {
-		return inversionDepth() % 2 == 1 ? "Undo " : "Redo ";//$NON-NLS-2$//$NON-NLS-1$
-	}
-
-	public void redo() {
-		getTarget().undo();
-	}
-
-	public void undo() {
-		getTarget().redo();
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ParentCommand.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ParentCommand.java
deleted file mode 100644
index 9c7dc90..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ParentCommand.java
+++ /dev/null
@@ -1,156 +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
- *******************************************************************************/
-package org.eclipse.wst.common.internal.emfworkbench.edit;
-
-
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.wst.common.internal.emfworkbench.integration.AbstractEditModelCommand;
-import org.eclipse.wst.common.internal.emfworkbench.integration.ComposedEditModel;
-import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
-import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelCommand;
-
-/**
- * Insert the type's description here. Creation date: (05/22/01 8:57:38 AM)
- * 
- * @author: Administrator
- */
-public class ParentCommand extends EditModelCommand {
-	private List children;
-	private ComposedEditModel editModel;
-	private List affectedModels;
-
-	public ParentCommand(Command targetCommand, ComposedEditModel anEditModel) {
-		super(targetCommand);
-		editModel = anEditModel;
-		children = new ArrayList(1);
-	}
-
-	public boolean canExecute() {
-		return getTarget().canExecute();
-	}
-
-	protected void computeAffectedModels() {
-		ResourceSet set = null;
-		List editModels = getEditModel().getChildren();
-		Iterator it = computeAffectedResourceSets().iterator();
-		while (it.hasNext()) {
-			set = (ResourceSet) it.next();
-			for (int i = 0; i < editModels.size(); i++) {
-				EditModel model = (EditModel) editModels.get(i);
-				if (model.getResourceSet() == set) {
-					getAffectedModels().add(new EditModelRetriever(model.getEmfContext(), model.getEditModelID(), model.getParams()));
-					continue;
-				}
-			}
-		}
-	}
-
-	protected Set computeAffectedResourceSets() {
-		Iterator objects = getTarget().getAffectedObjects().iterator();
-		Set resourceSets = new HashSet();
-		Object o = null;
-		EObject ref = null;
-		ResourceSet set = null;
-		while (objects.hasNext()) {
-			o = objects.next();
-			if (!(o instanceof EObject))
-				continue;
-			ref = (EObject) o;
-			if (ref.eResource() != null) {
-				set = ref.eResource().getResourceSet();
-				if (set != null)
-					resourceSets.add(set);
-			}
-		}
-		return resourceSets;
-	}
-
-	protected ChildCommand createChildCommand(EditModelRetriever retriever) {
-		return new ChildCommand(this, getTarget(), retriever);
-	}
-
-	public void execute() {
-		getTarget().execute();
-		computeAffectedModels();
-		pushChildrenForExecute();
-	}
-
-	protected void executeInModel(AbstractEditModelCommand cmd) {
-		getEditModel().getCommandStack().execute(cmd);
-	}
-
-	protected List getAffectedModels() {
-		if (affectedModels == null)
-			affectedModels = new ArrayList(1);
-		return affectedModels;
-	}
-
-	protected List getChildren() {
-		return children;
-	}
-
-	protected ComposedEditModel getEditModel() {
-		return editModel;
-	}
-
-	protected void invertChildren() {
-		invertChildrenExcept((ChildCommand) null);
-	}
-
-	protected void invertChildrenExcept(ChildCommand caller) {
-		for (int i = 0; i < children.size(); i++) {
-			ChildCommand childCmd = (ChildCommand) children.get(i);
-			if (caller == null || childCmd != caller)
-				childCmd.invertAndPush();
-		}
-	}
-
-	protected void invertFrom(ChildCommand caller) {
-		invertAndPush();
-		invertChildrenExcept(caller);
-	}
-
-	protected void pushChildrenForExecute() {
-		for (int i = 0; i < getAffectedModels().size(); i++) {
-			EditModelRetriever retriever = (EditModelRetriever) getAffectedModels().get(i);
-			ChildCommand command = createChildCommand(retriever);
-			getChildren().add(command);
-			command.executeInModel(command);
-		}
-	}
-
-	public void redo() {
-		getTarget().redo();
-		invertChildren();
-	}
-
-	public void redoFrom(ChildCommand child) {
-		invertFrom(child);
-	}
-
-	public void undo() {
-		getTarget().undo();
-		invertChildren();
-	}
-
-	public void undoFrom(ChildCommand child) {
-		invertFrom(child);
-	}
-}
\ No newline at end of file
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
deleted file mode 100644
index dc8f9c8..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ReadOnlyClientAccessRegistry.java
+++ /dev/null
@@ -1,51 +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.internal.emfworkbench.edit;
-
-import org.eclipse.jem.internal.util.emf.workbench.nls.EMFWorkbenchResourceHandler;
-import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchEditResourceHandler;
-
-/**
- * This is a readonly version of the editmodel access registry, only uses a weak hash dictionary,
- * and because the access is read only, is less concerned with timing of access/release, and will be
- * cleaned up on garbage collection if needed.
- * 
- */
-public class ReadOnlyClientAccessRegistry extends ClientAccessRegistry {
-
-	public ReadOnlyClientAccessRegistry() {
-		super();
-	}
-
-	public synchronized void access(Object accessorKey) {
-		if (!registry.containsKey(accessorKey)) {
-			this.registry.put(accessorKey, null);
-		} else
-			throw new ClientAccessRegistryException(EMFWorkbenchEditResourceHandler.ClientAccessRegistry_ERROR_0, accessorKey);
-	}
-
-	public synchronized void release(Object accessorKey) {
-
-		/*
-		 * Error condition: Some one has been naughty and not released the resource
-		 */
-		if (this.registry.containsKey(accessorKey)) {
-			this.registry.remove(accessorKey);
-		} else
-			complain(accessorKey);
-	}
-
-	public void complain(Object accessorKey) {
-
-		throw new ClientAccessRegistryException(EMFWorkbenchResourceHandler.getString("ClientAccessRegistry_ERROR_1"), accessorKey); //$NON-NLS-1$
-	}
-
-}
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
deleted file mode 100644
index 91e6f2d..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/Snapshot.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
- *******************************************************************************/
-/*
- * Created on Oct 3, 2003
- *
- */
-package org.eclipse.wst.common.internal.emfworkbench.edit;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchEditResourceHandler;
-
-
-/**
- * The Snapshot is used to remember the call stack trace of any method that accesses a Resource.
- * 
- * @author mdelder
- */
-public class Snapshot extends RuntimeException {
-
-	public Snapshot() {
-		super(EMFWorkbenchEditResourceHandler.Snapshot_ERROR_0);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Throwable#printStackTrace()
-	 */
-	public String getStackTraceString() {
-		StringWriter writer = new StringWriter();
-		PrintWriter printWriter = new PrintWriter(writer);
-		super.printStackTrace(printWriter);
-		return writer.toString();
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/WrappingCommandStack.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/WrappingCommandStack.java
deleted file mode 100644
index bf15371..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/WrappingCommandStack.java
+++ /dev/null
@@ -1,39 +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
- *******************************************************************************/
-package org.eclipse.wst.common.internal.emfworkbench.edit;
-
-
-
-import org.eclipse.emf.common.command.BasicCommandStack;
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.wst.common.internal.emfworkbench.integration.ComposedEditModel;
-
-/**
- * Insert the type's description here. Creation date: (05/21/01 9:31:02 PM)
- * 
- * @author: Administrator
- */
-public class WrappingCommandStack extends BasicCommandStack {
-	private ComposedEditModel editModel;
-
-	/**
-	 * WrappingCommandStack constructor comment.
-	 */
-	public WrappingCommandStack(ComposedEditModel anEditModel) {
-		super();
-		editModel = anEditModel;
-	}
-
-	public void execute(Command command) {
-		ParentCommand parent = new ParentCommand(command, editModel);
-		super.execute(parent);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/AbstractEditModelCommand.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/AbstractEditModelCommand.java
deleted file mode 100644
index 7061e7d..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/AbstractEditModelCommand.java
+++ /dev/null
@@ -1,58 +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
- **************************************************************************************************/
-package org.eclipse.wst.common.internal.emfworkbench.integration;
-
-
-
-import org.eclipse.emf.common.command.AbstractCommand;
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.wst.common.internal.emfworkbench.edit.InvertedCommand;
-
-
-public abstract class AbstractEditModelCommand extends AbstractCommand {
-	private Command target;
-	private AbstractEditModelCommand owner;
-
-	protected AbstractEditModelCommand() {
-		super();
-	}
-
-	public AbstractEditModelCommand(Command targetCommand) {
-		super();
-		target = targetCommand;
-	}
-
-	public abstract EditModelCommand getEditModelCommand();
-
-	protected AbstractEditModelCommand getOutermostCommand() {
-		return owner == null ? this : owner.getOutermostCommand();
-	}
-
-	protected Command getOwner() {
-		return owner;
-	}
-
-	public Command getTarget() {
-		return target;
-	}
-
-	/**
-	 * Creates a new inverted command on the outermost command
-	 */
-	public InvertedCommand inverted() {
-		AbstractEditModelCommand outer = getOutermostCommand();
-		InvertedCommand cmd = new InvertedCommand(outer);
-		outer.setOwner(cmd);
-		return cmd;
-	}
-
-	protected void setOwner(AbstractEditModelCommand ownerCommand) {
-		owner = ownerCommand;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ComposedAccessorKey.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ComposedAccessorKey.java
deleted file mode 100644
index 70cac1e..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ComposedAccessorKey.java
+++ /dev/null
@@ -1,56 +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
- *******************************************************************************/
-package org.eclipse.wst.common.internal.emfworkbench.integration;
-
-
-
-/**
- * @author Administrator
- * 
- *  
- */
-public class ComposedAccessorKey {
-
-	private Object accessorKey = null;
-	private Object addonKey = null;
-
-
-	public static ComposedAccessorKey getComposedAccessorKey(Object accessorKey, ComposedEditModel editModel) {
-		ComposedAccessorKey newKey = new ComposedAccessorKey(accessorKey, editModel);
-		editModel.cacheAccessorKey(newKey);
-		return newKey;
-	}
-
-
-	private ComposedAccessorKey(Object accessorKey, Object addonKey) {
-		this.accessorKey = accessorKey;
-		this.addonKey = addonKey;
-	}
-
-	public boolean equals(Object other) {
-		if (other == null || !(other instanceof ComposedAccessorKey))
-			return false;
-		ComposedAccessorKey otherKey = (ComposedAccessorKey) other;
-
-		return accessorKey.equals(otherKey.accessorKey) && addonKey.equals(otherKey.addonKey);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Object#hashCode()
-	 */
-	public int hashCode() {
-		return accessorKey.hashCode() ^ addonKey.hashCode();
-	}
-
-
-}
\ No newline at end of file
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
deleted file mode 100644
index b17f88c..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ComposedEditModel.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.internal.emfworkbench.integration;
-
-
-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;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.emf.common.command.BasicCommandStack;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.wst.common.frameworks.internal.operations.IOperationHandler;
-import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext;
-import org.eclipse.wst.common.internal.emfworkbench.edit.WrappingCommandStack;
-
-/**
- * Insert the type's description here. Creation date: (05/21/01 8:26:32 PM)
- * 
- * @author: Administrator
- */
-public class ComposedEditModel extends EditModel implements EditModelListener {
-
-	private List children = null;
-	private Map childrenMap = null;
-	private List cachedKeys = new ArrayList();
-
-	/**
-	 * ComposedEditModel constructor comment.
-	 */
-	public ComposedEditModel(String editModelID, EMFWorkbenchContext context) {
-		super(editModelID, context, false);
-	}
-
-
-	public void createChildrenIfNecessary(ComposedAccessorKey composedAccessorKey) {
-		//do nothing
-	}
-
-	/**
-	 * @param newKey
-	 */
-	public void cacheAccessorKey(ComposedAccessorKey newKey) {
-		if (!cachedKeys.contains(newKey))
-			cachedKeys.add(newKey);
-	}
-
-	// 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));
-	}
-
-	public EditModel.Reference addChild(String editModelID, Map params, ComposedAccessorKey composedAccessorKey) {
-
-		EditModel editModel = getEmfContext().getEditModelForWrite(editModelID, composedAccessorKey, params);
-		editModel.addListener(this);
-
-		getChildrenMap().put(editModel.getReference(), editModel);
-		getChildren().add(editModel);
-
-		return editModel.getReference();
-	}
-
-	public void removeChild(EditModel.Reference reference, Object accessorKey) {
-		ComposedAccessorKey composedAccessorKey = ComposedAccessorKey.getComposedAccessorKey(accessorKey, this);
-		EditModel editModel = (EditModel) getChildrenMap().remove(reference);
-		if (editModel != null) {
-			editModel.releaseAccess(composedAccessorKey);
-			editModel.removeListener(this);
-			getChildren().remove(editModel);
-		}
-	}
-
-	public Iterator getContainedReferences() {
-		return getChildrenMap().keySet().iterator();
-	}
-
-	public EditModel getContainedEditModel(EditModel.Reference reference) {
-		return (EditModel) getChildrenMap().get(reference);
-	}
-
-	/**
-	 * Return the CommandStack.
-	 */
-	protected BasicCommandStack createCommandStack() {
-		return new WrappingCommandStack(this);
-	}
-
-	/**
-	 * Forward all events to the listeners for this model
-	 */
-	public void editModelChanged(EditModelEvent anEvent) {
-		if (hasListeners())
-			notifyListeners(anEvent);
-	}
-
-	public Set getAffectedFiles() {
-		Set aSet = new HashSet();
-		List models = getChildren();
-		for (int i = 0; i < models.size(); i++) {
-			EditModel child = (EditModel) models.get(i);
-			aSet.addAll(child.getAffectedFiles());
-		}
-		return aSet;
-	}
-
-	public List getChildren() {
-		if (children == null)
-			children = new ArrayList();
-		return children;
-	}
-
-	protected Map getChildrenMap() {
-		if (childrenMap == null)
-			childrenMap = new HashMap();
-		return childrenMap;
-	}
-
-	/**
-	 * Pass along to children.
-	 */
-	protected void handleSaveIfNecessaryDidNotSave(IProgressMonitor monitor) {
-		List list = getChildren();
-		EditModel editModel;
-		for (int i = 0; i < list.size(); i++) {
-			editModel = (EditModel) list.get(i);
-			editModel.handleSaveIfNecessaryDidNotSave(monitor);
-		}
-	}
-
-	/**
-	 * Return whether a save is needed on the CommandStack
-	 */
-	public boolean isDirty() {
-		Iterator editModels = getChildren().iterator();
-		while (editModels.hasNext()) {
-			EditModel editModel = (EditModel) editModels.next();
-			if (editModel.isDirty())
-				return true;
-		}
-		return false;
-	}
-
-	public boolean isReadOnly() {
-		return false;
-	}
-
-	/**
-	 * Return whether a save is needed on the CommandStack
-	 */
-	public boolean isInterrestedInResource(Resource aResource) {
-		Iterator editModels = getChildren().iterator();
-		while (editModels.hasNext()) {
-			EditModel editModel = (EditModel) editModels.next();
-			if (editModel.isInterrestedInResource(aResource))
-				return true;
-		}
-		return false;
-	}
-
-	public void primSave(IProgressMonitor monitor) {
-		List list = getChildren();
-		for (int i = 0; i < list.size(); i++)
-			((EditModel) list.get(i)).primSave(monitor);
-	}
-
-	/**
-	 * This only increments the reference count of the children and should only be called if you
-	 * know what you are doing.
-	 */
-	public void access(Object accessorKey) {
-		ComposedAccessorKey composedAccessorKey = ComposedAccessorKey.getComposedAccessorKey(accessorKey, this);
-		if (getChildren().size() == 0) {
-			createChildrenIfNecessary(composedAccessorKey);
-		} else {
-
-			List tempchildren = getChildren();
-			for (int i = 0; i < tempchildren.size(); i++) {
-				EditModel model = (EditModel) tempchildren.get(i);
-				model.access(composedAccessorKey);
-			}
-		}
-		// removing for defect 1978, children should do all the accessing
-		super.access(accessorKey);
-
-	}
-
-	/**
-	 * This method should be called from each client when they are finished working with the
-	 * EditModel.
-	 */
-	public void releaseAccess(Object accessorKey) {
-		List tempchildren = getChildren();
-		ComposedAccessorKey composedAccessorKey = ComposedAccessorKey.getComposedAccessorKey(accessorKey, this);
-		for (int i = 0; i < tempchildren.size(); i++) {
-			EditModel model = (EditModel) tempchildren.get(i);
-			model.releaseAccess(composedAccessorKey);
-		}
-		removeKeyFromCache(composedAccessorKey);
-		// Removing this call... Children should be able to handle all releasing defect 1978
-		super.releaseAccess(accessorKey);
-	}
-
-	public void removeKeyFromCache(ComposedAccessorKey key) {
-		cachedKeys.remove(key);
-	}
-
-	/**
-	 * If one should save, they all should save.
-	 */
-	protected boolean shouldSave() {
-		List list = getChildren();
-		EditModel editModel;
-		for (int i = 0; i < list.size(); i++) {
-			editModel = (EditModel) list.get(i);
-			if (editModel.shouldSave())
-				return true;
-		}
-		return false;
-	}
-
-	/**
-	 * If one should save, they all should save.
-	 */
-	protected boolean shouldSave(IOperationHandler operationHandler) {
-		List list = getChildren();
-		EditModel editModel;
-		for (int i = 0; i < list.size(); i++) {
-			editModel = (EditModel) list.get(i);
-			if (editModel.shouldSave(operationHandler))
-				return true;
-		}
-		return false;
-	}
-
-	/**
-	 * @see com.ibm.etools.j2ee.workbench.EditModel#getNonResourceFiles()
-	 */
-	public List getNonResourceFiles() {
-		List list = getChildren();
-		List result = new ArrayList();
-		EditModel editModel;
-		for (int i = 0; i < list.size(); i++) {
-			editModel = (EditModel) list.get(i);
-			List files = editModel.getNonResourceFiles();
-			if (files != null && !files.isEmpty())
-				result.addAll(files);
-		}
-		return result;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/CompoundingCommandStack.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/CompoundingCommandStack.java
deleted file mode 100644
index 188a889..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/CompoundingCommandStack.java
+++ /dev/null
@@ -1,152 +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 Nov 26, 2003
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.wst.common.internal.emfworkbench.integration;
-
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.command.CommandStackListener;
-
-
-/**
- * @author DABERG
- * 
- * This class does not actually execute any commands. It merely gathers the commands to be executed
- * and compounds them so that they can be executed against the actualCommandStack.
- */
-public class CompoundingCommandStack implements CommandStack {
-	private CommandStack actualCommandStack;
-	private Command compoundCommand;
-
-	/**
-	 *  
-	 */
-	public CompoundingCommandStack(CommandStack actualCommandStack) {
-		this.actualCommandStack = actualCommandStack;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.command.CommandStack#execute(org.eclipse.emf.common.command.Command)
-	 */
-	public void execute(Command command) {
-		if (compoundCommand == null)
-			compoundCommand = command;
-		else
-			compoundCommand = compoundCommand.chain(command);
-	}
-
-	public void performExecution() {
-		if (compoundCommand != null) {
-			try {
-				actualCommandStack.execute(compoundCommand);
-			} finally {
-				compoundCommand = null;
-			}
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.command.CommandStack#canUndo()
-	 */
-	public boolean canUndo() {
-		return false;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.command.CommandStack#undo()
-	 */
-	public void undo() {
-		//default
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.command.CommandStack#canRedo()
-	 */
-	public boolean canRedo() {
-		return false;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.command.CommandStack#getUndoCommand()
-	 */
-	public Command getUndoCommand() {
-		return null;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.command.CommandStack#getRedoCommand()
-	 */
-	public Command getRedoCommand() {
-		return null;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.command.CommandStack#getMostRecentCommand()
-	 */
-	public Command getMostRecentCommand() {
-		return null;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.command.CommandStack#redo()
-	 */
-	public void redo() {
-		//redo
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.command.CommandStack#flush()
-	 */
-	public void flush() {
-		//flush
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.command.CommandStack#addCommandStackListener(org.eclipse.emf.common.command.CommandStackListener)
-	 */
-	public void addCommandStackListener(CommandStackListener listener) {
-		//default
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.common.command.CommandStack#removeCommandStackListener(org.eclipse.emf.common.command.CommandStackListener)
-	 */
-	public void removeCommandStackListener(CommandStackListener listener) {
-		//default
-	}
-}
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
deleted file mode 100644
index 5e40cb9..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/DynamicAdapterFactory.java
+++ /dev/null
@@ -1,642 +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 1, 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.internal.emfworkbench.integration;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.Notifier;
-import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
-import org.eclipse.emf.common.notify.impl.NotificationImpl;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.edit.provider.ChangeNotifier;
-import org.eclipse.emf.edit.provider.IChangeNotifier;
-import org.eclipse.emf.edit.provider.IDisposable;
-import org.eclipse.emf.edit.provider.INotifyChangedListener;
-import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
-import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
-import org.eclipse.jem.util.logger.proxy.Logger;
-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.EnablementManager;
-import org.eclipse.wst.common.frameworks.internal.enablement.IEnablementIdentifier;
-import org.eclipse.wst.common.frameworks.internal.enablement.IEnablementIdentifierListener;
-import org.eclipse.wst.common.frameworks.internal.enablement.IEnablementManager;
-import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchEditResourceHandler;
-import org.eclipse.wst.common.internal.emfworkbench.edit.AdapterFactoryDescriptor;
-import org.eclipse.wst.common.internal.emfworkbench.edit.AdapterFactoryRegistry;
-import org.eclipse.wst.common.internal.emfworkbench.edit.ExtendedComposedAdapterFactory;
-
-/**
- * @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 DynamicAdapterFactory implements AdapterFactory, IChangeNotifier, IDisposable, INotifyChangedListener, IEnablementIdentifierListener {
-
-	private static final AdapterFactory NULL_FACTORY = new AdapterFactoryImpl();
-
-	private ResourceItemProviderAdapterFactory resourceItemProviderAdapterFactory = null;
-
-	private String viewID;
-
-	//Each of the two maps below are keyed by the project
-	private Map adapterFactoriesByPackage;
-
-	private Map adapterFactoriesByType;
-
-	private Set allFactories;
-
-	/**
-	 * This is used to implement {@link IChangeNotifier}
-	 */
-	protected ChangeNotifier changeNotifier = new ChangeNotifier();
-
-	private boolean respectingActivities = false;
-
-	protected static final Object NO_PROJECT = "NO_PROJECT"; //$NON-NLS-1$
-
-	/**
-	 */
-	public DynamicAdapterFactory(String viewID, boolean respectActivies) {
-		this.viewID = viewID;
-		this.respectingActivities = respectActivies;
-		initialize();
-	}
-
-	/**
-	 */
-	public DynamicAdapterFactory(String viewID) {
-		this.viewID = viewID;
-		initialize();
-	}
-
-	private void initialize() {
-		adapterFactoriesByPackage = new HashMap();
-		adapterFactoriesByType = new HashMap();
-		allFactories = new HashSet();
-	}
-
-	public boolean isFactoryForType(Object type) {
-		return getFactoryForType(type) != null;
-	}
-
-	private AdapterFactory getFactoryForType(Object type) {
-
-		if (type == null)
-			return null;
-
-		if (type instanceof EObject)
-			return getFactoryForType((EObject) type);
-
-		Object aProject = ProjectUtilities.getProject(type);
-		if (aProject == null)
-			aProject = NO_PROJECT;
-		AdapterFactory factory = getExistingFactoryForType(aProject, type);
-		if (factory == NULL_FACTORY)
-			return null;
-		else if (factory == null) {
-			factory = findFactoryForType(aProject, type);
-
-			if (factory == null)
-				addAdapterFactory(aProject, type, NULL_FACTORY);
-			else
-				addAdapterFactory(aProject, type, factory);
-		}
-		return factory;
-	}
-
-	private AdapterFactory getExistingFactoryForType(Object p, Object type) {
-		if (p == null)
-			return null;
-		Map aMap = (Map) adapterFactoriesByType.get(p);
-		if (aMap == null)
-			return null;
-		return (AdapterFactory) adapterFactoriesByType.get(type);
-	}
-
-	/*
-	 * The factory was not cached by type, so we will search the cache of factories for the project
-	 * and see if it can be found there
-	 */
-	private AdapterFactory findFactoryForType(Object project, Object type) {
-		if (project == null)
-			return null;
-		Map aMap = (Map) adapterFactoriesByPackage.get(project);
-		if (aMap == null)
-			return null;
-		Iterator iter = aMap.values().iterator();
-		AdapterFactory factory = null;
-		while (iter.hasNext()) {
-			factory = (AdapterFactory) iter.next();
-			if (factory.isFactoryForType(type))
-				return factory;
-		}
-
-		// adapt the resource to its contents
-		if (getResourceItemProviderAdapterFactory().isFactoryForType(type))
-			return getResourceItemProviderAdapterFactory();
-		return null;
-	}
-
-	private AdapterFactory getFactoryForType(EObject obj) {
-		EClass eClass = obj.eClass();
-		if (eClass == null)
-			return null;
-
-		EPackage ePackage = eClass.getEPackage();
-		Object aProject = ProjectUtilities.getProject(obj);
-		if (aProject == null)
-			aProject = NO_PROJECT;
-		AdapterFactory result = getFactoryForPackage(aProject, ePackage);
-
-		if (result == null) {
-			Set failedPackageSet = new HashSet();
-			failedPackageSet.add(ePackage);
-			Iterator supertypes = eClass.getEAllSuperTypes().iterator();
-			while (supertypes.hasNext()) {
-				eClass = (EClass) supertypes.next();
-				if (eClass != null) {
-					ePackage = eClass.getEPackage();
-					if (failedPackageSet.add(ePackage)) {
-						result = getFactoryForPackage(aProject, ePackage);
-						if (result != null)
-							break;
-					}
-				}
-			}
-		}
-		return result;
-	}
-
-	private AdapterFactory getFactoryForPackage(Object aProject, EPackage aPackage) {
-		if (aProject == null || aPackage == null)
-			return null;
-		AdapterFactory factory = getExistingFactoryForPackage(aProject, aPackage);
-		if (factory == NULL_FACTORY)
-			return null;
-		else if (factory == null) {
-			try {
-				factory = createAdapterFactory(aProject, aPackage);
-
-				if (factory == null)
-					addAdapterFactory(aProject, aPackage, NULL_FACTORY);
-				else
-					addAdapterFactory(aProject, aPackage, factory);
-			} catch (RuntimeException re) {
-				Logger.getLogger().logError(re);
-			}
-		}
-		return factory;
-	}
-
-	private AdapterFactory getFactoryForTypes(Object p, List types) {
-		Map aMap = (Map) adapterFactoriesByPackage.get(p);
-		if (aMap == null)
-			return adaptResourceTypes(types);
-
-		Iterator factories = aMap.values().iterator();
-		AdapterFactory factory = null;
-		while (factories.hasNext()) {
-			factory = (AdapterFactory) factories.next();
-			if (isFactoryForAllTypes(factory, types)) {
-				return factory;
-			}
-		}
-
-
-		return null;
-	}
-
-	private AdapterFactory adaptResourceTypes(List types) {
-		//      adapt the resource to its contents
-		if (isFactoryForAllTypes(getResourceItemProviderAdapterFactory(), types))
-			return getResourceItemProviderAdapterFactory();
-		return null;
-	}
-
-	private void removeFactoryForTypes(Object p, List types) {
-		Map aMap = (Map) adapterFactoriesByPackage.get(p);
-		if (aMap == null)
-			return;
-		Iterator factories = aMap.values().iterator();
-		AdapterFactory factory = null;
-		while (factories.hasNext()) {
-			factory = (AdapterFactory) factories.next();
-			if (isFactoryForAllTypes(factory, types)) {
-				aMap.remove(factory);
-			}
-		}
-
-	}
-
-	private boolean isFactoryForAllTypes(AdapterFactory factory, List types) {
-		for (int i = 0; i < types.size(); i++) {
-			if (!factory.isFactoryForType(types.get(i))) {
-				return false;
-			}
-		}
-		return true;
-
-	}
-
-	private AdapterFactory getExistingFactoryForPackage(Object p, EPackage aPackage) {
-		if (p == null)
-			return null;
-		Map aMap = (Map) adapterFactoriesByPackage.get(p);
-		if (aMap == null)
-			return null;
-		return (AdapterFactory) aMap.get(aPackage);
-	}
-
-	private void addAdapterFactory(Object p, EPackage aPackage, AdapterFactory adapterFactory) {
-		Map aMap = getOrCreateMap(p, adapterFactoriesByPackage);
-
-		aMap.put(aPackage, adapterFactory);
-
-		if (adapterFactory == NULL_FACTORY)
-			return;
-
-		if (adapterFactory instanceof IChangeNotifier) {
-			((IChangeNotifier) adapterFactory).addListener(this);
-		}
-		allFactories.add(adapterFactory);
-	}
-
-	private Map getOrCreateMap(Object p, Map container) {
-		Map aMap = (Map) container.get(p);
-		if (aMap == null) {
-			aMap = new HashMap(10);
-			container.put(p, aMap);
-		}
-		return aMap;
-	}
-
-	private void addAdapterFactory(Object p, Object type, AdapterFactory adapterFactory) {
-		Map aMap = getOrCreateMap(p, adapterFactoriesByType);
-		aMap.put(type, adapterFactory);
-
-		if (adapterFactory == NULL_FACTORY)
-			return;
-
-		if (adapterFactory instanceof IChangeNotifier) {
-			((IChangeNotifier) adapterFactory).addListener(this);
-		}
-		allFactories.add(adapterFactory);
-	}
-
-	public Object adapt(Object target, Object type) {
-		Object adapter = target;
-		if (target instanceof Notifier) {
-			adapter = adapt((Notifier) target, type);
-		}
-
-		if (!(type instanceof Class) || (((Class) type).isInstance(adapter))) {
-			return adapter;
-		}
-
-		return null;
-	}
-
-	public Adapter adapt(Notifier target, Object type) {
-		Adapter result = null;
-
-		if (target instanceof EObject)
-			result = adapt((EObject) target, type);
-		else {
-			Object p = ProjectUtilities.getProject(target);
-			if (p == null)
-				p = NO_PROJECT;
-			result = adapt(p, target, type, new HashSet(), target.getClass());
-
-		}
-
-		return result;
-	}
-
-	public Adapter adapt(EObject target, Object type) {
-
-		EClass eClass = target.eClass();
-		if (eClass == null)
-			return null;
-
-		EPackage ePackage = eClass.getEPackage();
-		Adapter result = adapt(target, ePackage, type);
-
-		if (result == null) {
-			Set failedPackageSet = new HashSet();
-			failedPackageSet.add(ePackage);
-			Iterator supertypes = eClass.getEAllSuperTypes().iterator();
-			while (supertypes.hasNext()) {
-				eClass = (EClass) supertypes.next();
-				if (eClass != null) {
-					ePackage = eClass.getEPackage();
-					if (failedPackageSet.add(ePackage)) {
-						result = adapt(target, ePackage, type);
-						if (result != null)
-							break;
-					}
-				}
-			}
-		}
-		return result;
-	}
-
-	private Adapter adapt(EObject target, EPackage ePackage, Object type) {
-		Object aProject = ProjectUtilities.getProject(target);
-		if (aProject == null)
-			aProject = NO_PROJECT;
-		AdapterFactory delegate = getFactoryForPackage(aProject, ePackage);
-		if (delegate != null && delegate.isFactoryForType(type)) {
-			return delegate.adapt(target, type);
-		}
-
-		return null;
-	}
-
-	/*
-	 * Code borrowed from {@link ComposedAdapterFactory}
-	 *  
-	 */
-	private Adapter adapt(Object p, Notifier target, Object type, Collection failedPackages, Class javaClass) {
-		if (p == null)
-			return null;
-
-		Adapter result = null;
-
-		Package javaPackage = javaClass.getPackage();
-		if (failedPackages.add(javaPackage)) {
-			List types = new ArrayList(2);
-			types.add(javaPackage);
-			if (type != null) {
-				types.add(type);
-			}
-
-			/* when an error occurs, remove the delegate and try again */
-			boolean attemptAdaptAgain = true;
-			while (result == null && attemptAdaptAgain) {
-				attemptAdaptAgain = false;
-
-				AdapterFactory delegateAdapterFactory = getFactoryForTypes(p, types);
-				if (delegateAdapterFactory != null) {
-					try {
-						result = delegateAdapterFactory.adapt(target, type);
-					} catch (RuntimeException re) {
-						Logger.getLogger().logError(re);
-						removeFactoryForTypes(p, types);
-						attemptAdaptAgain = true;
-					}
-				}
-			}
-		}
-
-		if (result == null) {
-			Class superclass = javaClass.getSuperclass();
-			if (superclass != null) {
-				result = adapt(p, target, type, failedPackages, javaClass.getSuperclass());
-			}
-			if (result == null) {
-				Class[] interfaces = javaClass.getInterfaces();
-				for (int i = 0; i < interfaces.length; ++i) {
-					result = adapt(p, target, type, failedPackages, interfaces[i]);
-					if (result != null) {
-						break;
-					}
-				}
-			}
-		}
-
-		return result;
-	}
-
-	public Adapter adaptNew(Notifier target, Object type) {
-
-		AdapterFactory factory = getFactoryForType(target);
-
-		if (factory != null)
-			return factory.adaptNew(target, type);
-		return null;
-	}
-
-	public void adaptAllNew(Notifier target) {
-
-		AdapterFactory factory = getFactoryForType(target);
-
-		if (factory != null)
-			factory.adaptAllNew(target);
-
-	}
-
-	public void addListener(INotifyChangedListener notifyChangedListener) {
-		changeNotifier.add(notifyChangedListener);
-	}
-
-	public void removeListener(INotifyChangedListener notifyChangedListener) {
-		changeNotifier.remove(notifyChangedListener);
-	}
-
-	public void fireNotifyChanged(Notification notification) {
-		if (changeNotifier == null || changeNotifier.isEmpty() || changeNotifier.get(0) == null)
-			return;
-		changeNotifier.fireNotifyChanged(notification);
-	}
-
-	public void dispose() {
-		Iterator iter = allFactories.iterator();
-		Object factory = null;
-		while (iter.hasNext()) {
-			factory = iter.next();
-			disposeFactory(factory);
-		}
-		for (Iterator itr = getEnablementIdentifiers().iterator(); itr.hasNext();) {
-			((IEnablementIdentifier) itr.next()).removeIdentifierListener(this);
-		}
-		if (resourceItemProviderAdapterFactory != null)
-			resourceItemProviderAdapterFactory.removeListener(this);
-	}
-
-	private void disposeFactory(Object factory) {
-		if (factory instanceof IDisposable) {
-			((IDisposable) factory).dispose();
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.edit.provider.INotifyChangedListener#notifyChanged(org.eclipse.emf.common.notify.Notification)
-	 */
-	public void notifyChanged(Notification notification) {
-		//Foward the notification on to all my listeners
-		fireNotifyChanged(notification);
-	}
-
-	/**
-	 * @param project
-	 */
-	private void removeAdapterFactories(Object project) {
-		adapterFactoriesByType.remove(project);
-		Map aMap = (Map) adapterFactoriesByPackage.remove(project);
-		if (aMap == null)
-			return;
-
-		Iterator factories = aMap.values().iterator();
-		Object adapterFactory;
-		while (factories.hasNext()) {
-			adapterFactory = factories.next();
-			allFactories.remove(adapterFactory);
-			disposeFactory(adapterFactory);
-		}
-	}
-
-	private AdapterFactory createAdapterFactory(Object project, EPackage ePackage) {
-		if (ePackage == null)
-			throw new IllegalArgumentException(EMFWorkbenchEditResourceHandler.DynamicAdapterFactory_ERROR_0);
-
-		return createAdapterFactory(project, AdapterFactoryRegistry.instance().getDescriptors(ePackage, viewID));
-
-	}
-
-	private AdapterFactory createAdapterFactory(Object project, List descriptors) {
-		if (descriptors == null || descriptors.isEmpty())
-			return null;
-
-		AdapterFactory fact = null;
-		IEnablementIdentifier identifier = null;
-		AdapterFactoryDescriptor desc = null;
-		if (descriptors.size() == 1) {
-			desc = (AdapterFactoryDescriptor) descriptors.get(0);
-			identifier = getIdentifier(project, desc);
-			addListenerIfNecessary(identifier);
-			if (project.equals(NO_PROJECT) || (identifier != null && identifier.isEnabled()))
-				return desc.createInstance();
-			return null;
-		}
-		List factories = new ArrayList(descriptors.size());
-		for (int i = 0; i < descriptors.size(); i++) {
-			desc = (AdapterFactoryDescriptor) descriptors.get(i);
-			identifier = getIdentifier(project, desc);
-			addListenerIfNecessary(identifier);
-			if (project.equals(NO_PROJECT) || (identifier != null && identifier.isEnabled())) {
-				fact = desc.createInstance();
-				if (fact != null)
-					factories.add(fact);
-			}
-		}
-		if (factories.isEmpty())
-			return null;
-
-		return new ExtendedComposedAdapterFactory(factories);
-	}
-
-	/**
-	 * @param project
-	 * @param desc
-	 * @return
-	 */
-	private IEnablementIdentifier getIdentifier(Object project, AdapterFactoryDescriptor desc) {
-		IEnablementIdentifier identifier = null;
-		if (isRespectingActivities() && project instanceof IProject)
-			identifier = IEnablementManager.INSTANCE.getIdentifier(desc.getID(), (IProject) project);
-		else if (project instanceof IProject)
-			identifier = EnablementManager.INSTANCE.getIdentifier(desc.getID(), (IProject) project);
-		return identifier;
-	}
-
-	/**
-	 * @return
-	 */
-	private boolean isRespectingActivities() {
-		return respectingActivities;
-	}
-
-	protected void addListenerIfNecessary(IEnablementIdentifier identifier) {
-		if (identifier == null)
-			return;
-		identifier.addIdentifierListener(this);
-		getEnablementIdentifiers().add(identifier);
-	}
-
-	protected boolean isListeningTo(IEnablementIdentifier identifier) {
-		return getEnablementIdentifiers().contains(identifier);
-	}
-
-	/**
-	 * @return Returns the enablementIdentifiers.
-	 */
-	protected Set getEnablementIdentifiers() {
-		if (enablementIdentifiers == null)
-			enablementIdentifiers = new HashSet();
-		return enablementIdentifiers;
-	}
-
-	private Set enablementIdentifiers;
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.enablement.IEnablementIdentifierListener#identifierChanged(org.eclipse.wst.common.frameworks.internal.enablement.EnablementIdentifierEvent)
-	 */
-	public void identifierChanged(EnablementIdentifierEvent identifierEvent) {
-		if (identifierEvent.hasEnabledChanged() || identifierEvent.hasFunctionGroupIdsChanged()) {
-			Object project = ((EnablementIdentifier) identifierEvent.getIdentifier()).getProject();
-			if (project != null) {
-				removeAdapterFactories(project);
-				/*
-				 * final Notifier notifier = (Notifier) getCachedRoots().get(project);
-				 */
-				/* force a viewer refresh */
-				notifyChanged(new NotificationImpl(Notification.ADD, null, null) {
-
-					/*
-					 * (non-Javadoc)
-					 * 
-					 * @see org.eclipse.emf.common.notify.impl.NotificationImpl#getNotifier()
-					 */
-					public Object getNotifier() {
-						return null; // notifier;
-					}
-				});
-			}
-			/* else replace entire structure */
-		}
-	}
-
-	/**
-	 * @return Returns the resourceItemProviderAdapterFactory.
-	 */
-	public ResourceItemProviderAdapterFactory getResourceItemProviderAdapterFactory() {
-		if (resourceItemProviderAdapterFactory == null) {
-			resourceItemProviderAdapterFactory = new ResourceItemProviderAdapterFactory();
-			resourceItemProviderAdapterFactory.addListener(this);
-		}
-		return resourceItemProviderAdapterFactory;
-	}
-}
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
deleted file mode 100644
index 234fe1d..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EMFWorkbenchEditPlugin.java
+++ /dev/null
@@ -1,78 +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.internal.emfworkbench.integration;
-
-import java.io.FileNotFoundException;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.Plugin;
-import org.eclipse.emf.common.util.WrappedException;
-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.PassthruResourceSet;
-import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper;
-import org.osgi.framework.BundleContext;
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class EMFWorkbenchEditPlugin extends Plugin {
-	public static final String ID = "org.eclipse.wst.common.emfworkbench.integration"; //$NON-NLS-1$
-
-	public static final String EDIT_MODEL_FACTORIES_EXTENSION_POINT = "editModel"; //$NON-NLS-1$
-	public static final String EDIT_MODEL_EXTENSION_REGISTRY_EXTENSION_POINT = "editModelExtension"; //$NON-NLS-1$
-	public static final String ADAPTER_FACTORY_REGISTRY_EXTENSION_POINT = "adapterFactory"; //$NON-NLS-1$
-
-
-	//The shared instance.
-	private static EMFWorkbenchEditPlugin plugin; 
-
-	/**
-	 * The constructor.
-	 */
-	public EMFWorkbenchEditPlugin() {
-		super();
-		plugin = this; 
-	}
-
-	/**
-	 * Returns the shared instance.
-	 */
-	public static EMFWorkbenchEditPlugin getDefault() {
-		return plugin;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.runtime.Plugin#startup()
-	 */
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-		ExtendedEcoreUtil.setFileNotFoundDetector(new ExtendedEcoreUtil.FileNotFoundDetector() {
-			public boolean isFileNotFound(WrappedException wrappedEx) {
-				return WorkbenchResourceHelperBase.isResourceNotFound(wrappedEx) || wrappedEx.exception() instanceof FileNotFoundException;
-			}
-		});
-		WorkbenchResourceHelper.initializeFileAdapterFactory();
-	}
-
-	public static ResourceSet createIsolatedResourceSet(IProject project) {
-		return new PassthruResourceSet(project);
-	}
-
-	public static ResourceSet createWorkspacePassthruResourceSet() {
-		return new PassthruResourceSet();
-	}
-
-
-}
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
deleted file mode 100644
index 2d077f9..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModel.java
+++ /dev/null
@@ -1,1611 +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.internal.emfworkbench.integration;
-
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-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.Map;
-import java.util.Set;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-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;
-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.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-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;
-import org.eclipse.wst.common.frameworks.internal.SaveHandlerRegister;
-import org.eclipse.wst.common.frameworks.internal.enablement.EnablementIdentifierEvent;
-import org.eclipse.wst.common.frameworks.internal.enablement.IEnablementIdentifier;
-import org.eclipse.wst.common.frameworks.internal.enablement.IEnablementIdentifierListener;
-import org.eclipse.wst.common.frameworks.internal.enablement.nonui.IWFTWrappedException;
-import org.eclipse.wst.common.frameworks.internal.operations.IOperationHandler;
-import org.eclipse.wst.common.internal.emf.resource.CompatibilityXMIResource;
-import org.eclipse.wst.common.internal.emf.resource.ReferencedResource;
-import org.eclipse.wst.common.internal.emf.resource.TranslatorResource;
-import org.eclipse.wst.common.internal.emf.utilities.ExtendedEcoreUtil;
-import org.eclipse.wst.common.internal.emf.utilities.PleaseMigrateYourCodeError;
-import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext;
-import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper;
-import org.eclipse.wst.common.internal.emfworkbench.edit.ClientAccessRegistry;
-import org.eclipse.wst.common.internal.emfworkbench.edit.EditModelRegistry;
-import org.eclipse.wst.common.internal.emfworkbench.edit.EditModelResource;
-import org.eclipse.wst.common.internal.emfworkbench.edit.ReadOnlyClientAccessRegistry;
-import org.eclipse.wst.common.internal.emfworkbench.validateedit.ResourceStateInputProvider;
-import org.eclipse.wst.common.internal.emfworkbench.validateedit.ResourceStateValidator;
-import org.eclipse.wst.common.internal.emfworkbench.validateedit.ResourceStateValidatorImpl;
-import org.eclipse.wst.common.internal.emfworkbench.validateedit.ResourceStateValidatorPresenter;
-
-
-public class EditModel implements CommandStackListener, ResourceStateInputProvider, ResourceStateValidator, IEnablementIdentifierListener {
-
-	protected BasicCommandStack commandStack;
-	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
-	// updates to the edit model resources
-	protected Map resourceIdentifiers;
-
-	protected EditModelEvent dirtyModelEvent;
-	protected boolean isNotifing = false;
-	protected boolean disposing = false;
-	private boolean disposed = false;
-	protected ResourceStateValidator stateValidator;
-	protected boolean accessAsReadForUnKnownURIs;
-	protected ResourceAdapter resourceAdapter = new ResourceAdapter();
-	protected boolean isReverting = false;
-	protected List resources;
-	private ClientAccessRegistry registry;
-	protected EMFWorkbenchContext emfContext = null;
-	protected IProject project = null;
-
-	private Reference reference;
-	private List resourcesTargetedForTermination;
-
-	protected class ResourceAdapter extends AdapterImpl {
-		public void notifyChanged(Notification notification) {
-			if (!isDisposing() && notification.getEventType() == Notification.SET && notification.getFeatureID(null) == Resource.RESOURCE__IS_LOADED) {
-				resourceIsLoadedChanged((Resource) notification.getNotifier(), notification.getOldBooleanValue(), notification.getNewBooleanValue());
-			}
-		}
-	}
-
-	public EditModel(String editModelID, EMFWorkbenchContext context, boolean readOnly) {
-		if (context == null)
-			throw new IllegalStateException("EMF context can't be null"); //$NON-NLS-1$
-		this.editModelID = editModelID;
-		this.readOnly = readOnly;
-		if (readOnly)
-			this.registry = new ReadOnlyClientAccessRegistry();
-		else
-			this.registry = new ClientAccessRegistry();
-		this.emfContext = context;
-		this.project = context.getProject();
-		initializeKnownResourceUris();
-		processLoadedResources();
-		processPreloadResources();
-	}
-
-	public EditModel(String editModelID, EMFWorkbenchContext context, boolean readOnly, boolean accessUnknownResourcesAsReadOnly) {
-		this(editModelID, context, readOnly);
-		this.accessAsReadForUnKnownURIs = accessUnknownResourcesAsReadOnly;
-	}
-
-	/**
-	 * @return editModelID
-	 */
-	public String getEditModelID() {
-		return editModelID;
-	}
-
-	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() {
-		try {
-			if (disposing || disposed)
-				return;
-			disposing = true;
-		
-			if (hasListeners())
-				notifyListeners(new EditModelEvent(EditModelEvent.PRE_DISPOSE, this));
-			
-			releaseResources();
-
-			if (commandStack != null)
-				commandStack.removeCommandStackListener(this);
-			if (getEmfContext() != null)
-				getEmfContext().removeEditModel(this, isReadOnly());
-			releasePreloadResources();
-			releaseIdentifiers();
-			doDispose();
-		} catch (RuntimeException re) {
-			Logger.getLogger().logError(re);
-		} finally {
-			emfContext = null;
-			resources = null;
-			project = null;
-			disposed = true;
-			disposing = false;
-		}
-	}
-
-	/**
-	 * Subclasses should override as necessary
-	 */
-	protected void doDispose() {
-	}
-
-	protected void releaseIdentifiers() {
-		if (resourceIdentifiers == null)
-			return;
-		Iterator iter = resourceIdentifiers.keySet().iterator();
-		IEnablementIdentifier identifier = null;
-		while (iter.hasNext()) {
-			identifier = (IEnablementIdentifier) iter.next();
-			identifier.removeIdentifierListener(this);
-		}
-	}
-
-	private ResourceSetWorkbenchSynchronizer getResourceSetSynchronizer() {
-		if (emfContext == null || !emfContext.hasResourceSet())
-			return null;
-		return getEmfContext().getResourceSet().getSynchronizer();
-	}
-
-	protected void releasePreloadResources() {
-		ResourceSetWorkbenchEditSynchronizer sync = (ResourceSetWorkbenchEditSynchronizer) getResourceSetSynchronizer();
-		if (sync != null) {
-			for (int i = 0; i < preloadResourceUris.size(); i++) {
-				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);
-			}
-		}
-	}
-
-
-	/** ** BEGIN Command Stack Manipulation *** */
-
-	/**
-	 * Return the CommandStack.
-	 */
-	protected BasicCommandStack createCommandStack() {
-		BasicCommandStack stack = new BasicCommandStack();
-		return stack;
-	}
-
-	/**
-	 * This is called with the {@link CommandStack}'s state has changed.
-	 */
-	public void commandStackChanged(java.util.EventObject event) {
-		if (dirtyModelEvent == null)
-			dirtyModelEvent = new EditModelEvent(EditModelEvent.DIRTY, this);
-		if (hasListeners())
-			notifyListeners(dirtyModelEvent);
-	}
-
-	/**
-	 * Flush the Commands from the CommandStack.
-	 */
-	protected void flushCommandStack() {
-		getCommandStack().flush();
-		getCommandStack().saveIsDone();
-	}
-
-	/**
-	 * Return the CommandStack.
-	 */
-	public BasicCommandStack getCommandStack() {
-		if (commandStack == null) {
-			commandStack = createCommandStack();
-			commandStack.addCommandStackListener(this);
-		}
-		return commandStack;
-	}
-
-	/**
-	 * Returns true if there are any listeners
-	 */
-	public boolean hasListeners() {
-		return !listeners.isEmpty();
-	}
-
-	/** ** END Command Stack Manipulation *** */
-
-	/** ** BEGIN Listeners *** */
-
-	/**
-	 * Add
-	 * 
-	 * @aListener to the list of listeners.
-	 */
-	public void addListener(EditModelListener aListener) {
-		if (aListener != null)
-			listeners.add(aListener);
-	}
-
-	/**
-	 * Notify listeners of
-	 * 
-	 * @anEvent.
-	 */
-	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);
-		}
-	}
-
-	/**
-	 * Remove
-	 * 
-	 * @aListener from the list of listeners.
-	 */
-	public boolean removeListener(EditModelListener aListener) {
-		listeners.remove(aListener);
-		return true;
-	}
-
-	/** ** END Listeners *** */
-
-	protected void makeFileEditable(IFile aFile) {
-		if (aFile == null)
-			return;
-		aFile.getResourceAttributes().setReadOnly(false);
-	}
-
-	/**
-	 * @return java.util.List of IFile; any read-only files that will be touched if this edit model
-	 *         saves
-	 */
-	public List getReadOnlyAffectedFiles() {
-		Iterator affected = getAffectedFiles().iterator();
-		List result = new ArrayList();
-		while (affected.hasNext()) {
-			IFile aFile = (IFile) affected.next();
-			if (aFile.isReadOnly())
-				result.add(aFile);
-		}
-		return result;
-	}
-
-	/** ** BEGIN Save Handlers *** */
-
-	protected ISaveHandler getSaveHandler() {
-		return SaveHandlerRegister.getSaveHandler();
-	}
-
-	/**
-	 * Default is to do nothing. This method is called if a saveIfNecessary or
-	 * saveIfNecessaryWithPrompt determines not to save. This provides subclasses with an
-	 * opportunity to do some other action.
-	 */
-	protected void handleSaveIfNecessaryDidNotSave(IProgressMonitor monitor) {
-		// do nothing
-	}
-
-	/**
-	 * This will force all of the referenced Resources to be saved.
-	 */
-	public void save(Object accessorKey) {
-		save(null, accessorKey);
-	}
-
-	/**
-	 * This will force all of the referenced Resources to be saved.
-	 */
-	public void save(IProgressMonitor monitor) throws PleaseMigrateYourCodeError {
-		// save
-	}
-
-	/**
-	 * Subclasses may override {@link #primSave}
-	 */
-	public final void save(IProgressMonitor monitor, Object accessorKey) {
-		assertPermissionToSave(accessorKey);
-		getSaveHandler().access();
-		try {
-			IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
-				public void run(IProgressMonitor aMonitor) {
-					primSave(aMonitor);
-				}
-			};
-			runSaveOperation(runnable, monitor);
-		} catch (SaveFailedException ex) {
-			getSaveHandler().handleSaveFailed(ex, monitor);
-		} catch (Exception ex) {
-			ex.printStackTrace();
-		} finally {
-			getSaveHandler().release();
-		}
-	}
-
-	/**
-	 * Save only resources that need to be saved (i.e., no other references).
-	 */
-	public void saveIfNecessary(Object accessorKey) {
-		saveIfNecessary(null, accessorKey);
-	}
-
-	/**
-	 * Save only resources that need to be saved (i.e., no other references).
-	 */
-	public void saveIfNecessary(IProgressMonitor monitor, Object accessorKey) {
-		if (shouldSave())
-			save(monitor, accessorKey);
-		else
-			handleSaveIfNecessaryDidNotSave(monitor);
-	}
-
-	/**
-	 * 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.
-	 */
-	public void saveIfNecessaryWithPrompt(IOperationHandler operationHandler, Object accessorKey) {
-		saveIfNecessaryWithPrompt(null, operationHandler, accessorKey);
-	}
-
-	/**
-	 * 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()}
-	 */
-	public void saveIfNecessaryWithPrompt(IOperationHandler operationHandler, boolean wasDirty, Object accessorKey) {
-		saveIfNecessaryWithPrompt(null, operationHandler, wasDirty, accessorKey);
-	}
-
-	/**
-	 * 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.
-	 */
-	public void saveIfNecessaryWithPrompt(IProgressMonitor monitor, IOperationHandler operationHandler, Object accessorKey) {
-		saveIfNecessaryWithPrompt(monitor, operationHandler, true, accessorKey);
-	}
-
-	/**
-	 * 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()}
-	 */
-	public void saveIfNecessaryWithPrompt(IProgressMonitor monitor, IOperationHandler operationHandler, boolean wasDirty, Object accessorKey) {
-
-		if (shouldSave(operationHandler, wasDirty))
-			save(monitor, accessorKey);
-		else
-			handleSaveIfNecessaryDidNotSave(monitor);
-	}
-
-	protected void assertPermissionToSave(Object accessorKey) {
-		if (registry != null)
-			registry.assertAccess(accessorKey);
-	}
-
-	protected void runSaveOperation(IWorkspaceRunnable runnable, IProgressMonitor monitor) throws SaveFailedException {
-		try {
-			ResourcesPlugin.getWorkspace().run(runnable, ResourcesPlugin.getWorkspace().getRoot(), IWorkspace.AVOID_UPDATE, monitor);
-		} catch (CoreException e) {
-			throw new SaveFailedException(e);
-		}
-	}
-
-	/**
-	 * Should the resources be saved.
-	 */
-	protected boolean shouldSave(IOperationHandler operationHandler, boolean wasDirty) {
-		return !wasDirty ? shouldSave() : shouldSave(operationHandler);
-	}
-
-	/**
-	 * Return true if the uri for
-	 * 
-	 * @aResource is one of the known resource uris.
-	 */
-	public boolean isInterrestedInResource(Resource aResource) {
-		return isInterrestedInResourceUri(aResource.getURI());
-	}
-
-	protected boolean isInterrestedInResourceUri(URI resURI) {
-		URI uri;
-		List uriStrings = getKnownResourceUris();
-		for (int i = 0; i < uriStrings.size(); i++) {
-			uri = (URI) uriStrings.get(i);
-			if (ExtendedEcoreUtil.endsWith(resURI, uri))
-				return true;
-		}
-		return false;
-	}
-
-
-	/**
-	 * Subclasses should override and add URIs (type URI) of known resources. You must add resources
-	 * that have references to other known resources first so they will be released first.
-	 */
-	protected void initializeKnownResourceUris() {
-		knownResourceUris = new ArrayList();
-		preloadResourceUris = new ArrayList();
-		EditModelResource res = null;
-		Collection editModelResources = EditModelRegistry.getInstance().getEditModelResources(getEditModelID());
-		Iterator iter = editModelResources.iterator();
-		while (iter.hasNext()) {
-			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;
-		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();
-			knownResourceUris.add(uri);
-			if (res.isAutoLoad()) {
-				ResourceSetWorkbenchEditSynchronizer sync = (ResourceSetWorkbenchEditSynchronizer) getEmfContext().getResourceSet().getSynchronizer();
-				sync.enableAutoload(uri);
-				preloadResourceUris.add(uri);
-			}
-		}
-	}
-
-	/**
-	 * @param res
-	 */
-	private void registerInterest(IEnablementIdentifier identifier, EditModelResource res) {
-		getEditModelResources(identifier).add(res);
-	}
-
-	private List getEditModelResources(IEnablementIdentifier identifier) {
-		if (resourceIdentifiers == null)
-			resourceIdentifiers = new HashMap();
-		List tResources = (List) resourceIdentifiers.get(identifier);
-		if (tResources == null) {
-			tResources = new ArrayList(3);
-			resourceIdentifiers.put(identifier, tResources);
-			identifier.addIdentifierListener(this);
-		}
-		return tResources;
-	}
-
-
-
-	public java.util.List getKnownResourceUris() {
-		if (knownResourceUris == null)
-			initializeKnownResourceUris();
-
-		return knownResourceUris;
-	}
-
-	public boolean isShared() {
-		return registry.size() > 1;
-	}
-
-	/**
-	 * @see ResourceStateInputProvider#cacheNonResourceValidateState(List)
-	 */
-	public void cacheNonResourceValidateState(List roNonResourceFiles) {
-		// do nothing
-	}
-
-	/**
-	 * @see ResourceStateInputProvider#getNonResourceFiles()
-	 */
-	public List getNonResourceFiles() {
-		return null;
-	}
-
-	/**
-	 * @see ResourceStateInputProvider#getNonResourceInconsistentFiles()
-	 */
-	public List getNonResourceInconsistentFiles() {
-		return null;
-	}
-
-	/**
-	 * Gets the stateValidator.
-	 * 
-	 * @return Returns a ResourceStateValidator
-	 */
-	public ResourceStateValidator getStateValidator() {
-		if (stateValidator == null)
-			stateValidator = createStateValidator();
-		return stateValidator;
-	}
-
-	/**
-	 * Method createStateValidator.
-	 * 
-	 * @return ResourceStateValidator
-	 */
-	private ResourceStateValidator createStateValidator() {
-		return new ResourceStateValidatorImpl(this);
-	}
-
-	/**
-	 * @see ResourceStateValidator#checkActivation(ResourceStateValidatorPresenter)
-	 */
-	public void checkActivation(ResourceStateValidatorPresenter presenter) throws CoreException {
-		getStateValidator().checkActivation(presenter);
-	}
-
-	/**
-	 * @see ResourceStateValidator#lostActivation(ResourceStateValidatorPresenter)
-	 */
-	public void lostActivation(ResourceStateValidatorPresenter presenter) throws CoreException {
-		getStateValidator().lostActivation(presenter);
-	}
-
-	/**
-	 * @see ResourceStateValidator#validateState(ResourceStateValidatorPresenter)
-	 */
-	public IStatus validateState(ResourceStateValidatorPresenter presenter) throws CoreException {
-		if (presenter == null)
-			return Status.OK_STATUS;
-		return getStateValidator().validateState(presenter);
-	}
-
-	/**
-	 * @see ResourceStateValidator#checkSave(ResourceStateValidatorPresenter)
-	 */
-	public boolean checkSave(ResourceStateValidatorPresenter presenter) throws CoreException {
-		return getStateValidator().checkSave(presenter);
-	}
-
-	/**
-	 * @see ResourceStateValidator#checkReadOnly()
-	 */
-	public boolean checkReadOnly() {
-		return getStateValidator().checkReadOnly();
-	}
-
-	/**
-	 * Return the ResourceSet from the Nature.
-	 * 
-	 * @return org.eclipse.emf.ecore.resource.ResourceSet
-	 */
-	public ResourceSet getResourceSet() {
-		ResourceSet resourceSet = null;
-		if (getEmfContext() != null)
-			resourceSet = getEmfContext().getResourceSet();
-		return resourceSet;
-	}
-
-	protected void resourceIsLoadedChanged(Resource aResource, boolean oldValue, boolean newValue) {
-		if (!isReverting && !disposing && hasListeners()) {
-			int eventCode = newValue ? EditModelEvent.LOADED_RESOURCE : EditModelEvent.UNLOADED_RESOURCE;
-			EditModelEvent evt = new EditModelEvent(eventCode, this);
-			evt.addResource(aResource);
-			notifyListeners(evt);
-		}
-	}
-
-	public Resource getResource(URI aUri) {
-		Resource res = getAndLoadLocalResource(aUri);
-		if (res == null)
-			res = WorkbenchResourceHelper.getOrCreateResource(aUri, getResourceSet());
-		if (res != null)
-			processResource(res);
-		return res;
-	}
-
-	protected void processResource(Resource aResource) {
-		if (aResource != null && !getResources().contains(aResource)) {
-			if (aResource instanceof ReferencedResource) {
-				access((ReferencedResource) aResource);
-				// We need a better way to pass this through the save options instead.
-				// We also need to make this dynamic based on the project target
-				((ReferencedResource) aResource).setFormat(CompatibilityXMIResource.FORMAT_MOF5);
-			} else if (aResource instanceof CompatibilityXMIResource) {
-				((CompatibilityXMIResource) aResource).setFormat(CompatibilityXMIResource.FORMAT_MOF5);
-			}
-
-			addResource(aResource);
-		}
-	}
-
-	protected void addResource(Resource aResource) {
-		getResources().add(aResource);
-		aResource.eAdapters().add(resourceAdapter);
-	}
-
-	/**
-	 * Return a Resource for
-	 * 
-	 * @aUri.
-	 */
-	// TODO The following method will only use the last segment when looking for a resource.
-	protected Resource getResource(List tResources, URI aUri) {
-		Resource resource;
-		for (int i = 0; i < tResources.size(); i++) {
-			resource = (Resource) tResources.get(i);
-			if (ExtendedEcoreUtil.endsWith(resource.getURI(), aUri))
-				return resource;
-		}
-		return null;
-	}
-
-	public Resource createResource(URI uri) {
-		Resource resource = getExistingOrCreateResource(uri);
-		processResource(resource);
-		return resource;
-	}
-
-	/**
-	 * Get a cached Resource, either local or in the ResourceSet, before creating a Resource. This
-	 * api handles the case that the Resource may be created during a demand load that failed.
-	 */
-	public Resource getExistingOrCreateResource(URI uri) {
-		Resource res = getAndLoadLocalResource(uri);
-		if (res == null)
-			res = WorkbenchResourceHelperBase.getExistingOrCreateResource(uri, getResourceSet());
-		return res;
-	}
-
-	/**
-	 * Return a Resource for
-	 * 
-	 * @aUri.
-	 */
-	protected Resource getAndLoadLocalResource(URI aUri) {
-		Resource resource = getLocalResource(aUri);
-		if (null != resource && !resource.isLoaded()) {
-			try {
-				resource.load(Collections.EMPTY_MAP); // reload it
-			} catch (IOException e) {
-				// Ignore
-			}
-		}
-		return resource;
-	}
-
-	/**
-	 * Return a Resource for
-	 * 
-	 * @aUri.
-	 */
-	protected Resource getLocalResource(URI aUri) {
-		return getResource(getResources(), aUri);
-	}
-
-	/*
-	 * Return true if this is a ReadOnly EditModel or if we should only access unknown URIs as
-	 * ReadOnly.
-	 */
-	protected boolean shouldAccessForRead(ReferencedResource aResource) {
-		return isReadOnly() || (accessAsReadForUnKnownURIs && !isInterrestedInResource(aResource));
-	}
-
-	/**
-	 * Save only resources that need to be saved (i.e., no other references).
-	 */
-	public void resourceChanged(EditModelEvent anEvent) {
-		int code = anEvent.getEventCode();
-		switch (code) {
-			case EditModelEvent.REMOVED_RESOURCE : {
-				if (!isReverting && hasResourceReference(anEvent.getChangedResources()))
-					removeResources(anEvent.getChangedResources());
-				else
-					return;
-				break;
-			}
-			case EditModelEvent.ADDED_RESOURCE :
-				if (!processResourcesIfInterrested(anEvent.getChangedResources()))
-					return;
-		}
-		if (hasListeners()) {
-			anEvent.setEditModel(this);
-			notifyListeners(anEvent);
-		}
-	}
-
-	/**
-	 * Return true if aResource is referenced by me.
-	 */
-	protected boolean hasResourceReference(Resource aResource) {
-		if (aResource != null)
-			return getResources().contains(aResource);
-		return false;
-	}
-
-	/**
-	 * Return true if any Resource in the list of
-	 * 
-	 * @resources is referenced by me.
-	 */
-	protected boolean hasResourceReference(List tResources) {
-		for (int i = 0; i < tResources.size(); i++) {
-			if (hasResourceReference((Resource) tResources.get(i)))
-				return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Remove reference to the Resource objects in
-	 * 
-	 * @aList. This should be called when one or more Resource objects are removed from the
-	 *         ResourceSet without the reference count going to zero.
-	 */
-	protected void removeResources(List aList) {
-		Resource res;
-		for (int i = 0; i < aList.size(); i++) {
-			res = (Resource) aList.get(i);
-			if (removeResource(res) && res instanceof ReferencedResource)
-				removedResource((ReferencedResource) res);
-		}
-	}
-
-	private final void removedResource(ReferencedResource referencedResource) {
-		if (!isReadOnly() && referencedResource.wasReverted()) {
-			isReverting = true;
-			try {
-				reverted(referencedResource);
-			} finally {
-				isReverting = false;
-			}
-		}
-	}
-
-	protected boolean removeResource(URI uri) {
-		Resource res = getLocalResource(uri);
-		return removeResource(res);
-	}
-
-	/**
-	 * Remove reference to the aResource.
-	 */
-	protected boolean removeResource(Resource aResource) {
-		if (aResource != null) {
-			aResource.eAdapters().remove(resourceAdapter);
-			return getResources().remove(aResource);
-		}
-		return false;
-	}
-
-	/**
-	 * Subclasses should override to post process a removed ReferencedResource.
-	 * 
-	 * @see J2EEEditModel#revertAllResources()
-	 */
-	protected void reverted(ReferencedResource revertedResource) {
-		revertAllResources();
-	}
-
-	protected void revertAllResources() {
-		List someResources = getSortedResources();
-		for (int i = 0; i < someResources.size(); i++)
-			((Resource) someResources.get(i)).unload();
-		getResources().removeAll(someResources);
-		for (int i = 0; i < someResources.size(); i++)
-			((Resource) someResources.get(i)).eAdapters().remove(resourceAdapter);
-	}
-
-	/**
-	 * group the resources by XMI first, then XML
-	 */
-	protected List getSortedResources() {
-
-		List theResources = getResources();
-		int size = theResources.size();
-		if (size == 0)
-			return Collections.EMPTY_LIST;
-		Resource[] sorted = new Resource[size];
-		int xmlInsertPos = size - 1;
-		int xmiInsertPos = 0;
-		Resource res = null;
-		for (int i = 0; i < size; i++) {
-			res = (Resource) theResources.get(i);
-			if (res instanceof TranslatorResource)
-				sorted[xmlInsertPos--] = res;
-			else
-				sorted[xmiInsertPos++] = res;
-		}
-
-		return Arrays.asList(sorted);
-	}
-
-	/**
-	 * Process Resources that we are interrested in.
-	 */
-	protected boolean processResourcesIfInterrested(List someResources) {
-		int size = someResources.size();
-		Resource res;
-		boolean processed = false;
-		for (int i = 0; i < size; i++) {
-			res = (Resource) someResources.get(i);
-			if ((res != null) && (isInterrestedInResource(res))) {
-				processResource(res);
-				processed = true;
-			}
-		}
-		return processed;
-	}
-
-	public EMFWorkbenchContext getEmfContext() {
-		if (isDisposed())
-			throw new IllegalStateException("Edit Model already disposed"); //$NON-NLS-1$
-		if (emfContext == null)
-			throw new IllegalStateException("EMF context is null"); //$NON-NLS-1$
-		return emfContext;
-	}
-
-	public boolean isDisposed() {
-		return disposed;
-	}
-
-
-
-	public IProject getProject() {
-		return project;
-	}
-
-	/**
-	 * This method should only be called by the EMFWorkbenchContext.
-	 */
-	public void access(Object accessorKey) {
-		registry.access(accessorKey);
-	}
-
-	/**
-	 * Access
-	 * 
-	 * @aResource for read or write.
-	 */
-	protected void access(ReferencedResource aResource) {
-		if (shouldAccessForRead(aResource))
-			aResource.accessForRead();
-		else
-			aResource.accessForWrite();
-	}
-
-	/**
-	 * This method should be called from each client when they are finished working with the
-	 * EditModel.
-	 */
-	public void releaseAccess(Object accessorKey) {
-
-		registry.release(accessorKey);
-
-		if (!isDisposing()) {
-			boolean shouldDispose = false;
-			shouldDispose = registry.size() == 0;
-			if (shouldDispose) {
-				dispose();
-			}
-		}
-	}
-
-	/**
-	 * Release each of the referenced resources.
-	 */
-	protected void release(Resource aResource) {
-
-		removeResource(aResource);
-		if (aResource != null && aResource instanceof ReferencedResource)
-			release((ReferencedResource) aResource);
-	}
-
-	/**
-	 * Release each of the referenced resources.
-	 */
-	protected void release(ReferencedResource aResource) {
-		if (isReadOnly())
-			aResource.releaseFromRead();
-		else
-			aResource.releaseFromWrite();
-
-	}
-
-	/**
-	 * Release each of the referenced resources.
-	 */
-	protected void releaseResources() {
-		List tResources = getSortedResources();
-		Resource resource;
-		for (int i = 0; i < tResources.size(); i++) {
-			resource = (Resource) tResources.get(i);
-			release(resource);
-		}
-	}
-
-	public void deleteResource(Resource aResource) {
-		if (aResource == null || resources == null || !getResources().contains(aResource))
-			return;
-		getResourcesTargetedForTermination().add(aResource);
-
-	}
-
-	/**
-	 * @return
-	 */
-	protected List getResourcesTargetedForTermination() {
-		if (resourcesTargetedForTermination == null)
-			resourcesTargetedForTermination = new ArrayList(5);
-		return resourcesTargetedForTermination;
-	}
-
-
-
-	/**
-	 * Remove my reference to aResource, remove it from the ResourceSet, and delete its file from
-	 * the Workbench. This only happens if there is currently a reference to
-	 * 
-	 * @aResource.
-	 */
-	public void primDeleteResource(Resource aResource) {
-		if (primFlushResource(aResource)) {
-			try {
-				getEmfContext().deleteResource(aResource);
-			} catch (CoreException e) {
-				// what should we do here?
-			}
-			if (hasListeners()) {
-				EditModelEvent event = new EditModelEvent(EditModelEvent.REMOVED_RESOURCE, this);
-				event.addResource(aResource);
-				notifyListeners(event);
-			}
-		}
-	}
-
-	/**
-	 * Remove my reference to aResource and remove it from the ResourceSet.
-	 */
-	public void flushResource(Resource aResource) {
-		if (primFlushResource(aResource)) {
-			if (hasListeners()) {
-				EditModelEvent event = new EditModelEvent(EditModelEvent.REMOVED_RESOURCE, this);
-				event.addResource(aResource);
-				notifyListeners(event);
-			}
-		}
-	}
-
-	public Set getAffectedFiles() {
-		Set aSet = new HashSet();
-		List mofResources = getResources();
-		for (int i = 0; i < mofResources.size(); i++) {
-			Resource aResource = (Resource) mofResources.get(i);
-			IFile output = WorkbenchResourceHelper.getFile(aResource);
-			if (output != null)
-				aSet.add(output);
-		}
-		return aSet;
-	}
-
-	protected List resetKnownResourceUris() {
-
-		initializeKnownResourceUris();
-
-		return knownResourceUris;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/11/2001 4:14:26 PM)
-	 * 
-	 * @return java.util.List
-	 */
-	public List getResources() {
-		if (resources == null)
-			resources = new ArrayList(5);
-		return resources;
-	}
-
-	public String[] getResourceURIs() {
-		return getResourceURIs(false);
-	}
-
-	public String[] getResourceURIs(boolean onlyDirty) {
-		List list = getResources();
-		int dirtyCount = 0;
-		String[] uris = new String[list.size()];
-		Resource res;
-		for (int i = 0; i < list.size(); i++) {
-			res = (Resource) list.get(i);
-			if (!onlyDirty)
-				uris[i] = res.getURI().toString();
-			else if (res.isModified()) {
-				uris[i] = res.getURI().toString();
-				dirtyCount++;
-			}
-		}
-		if (onlyDirty && dirtyCount > 0) {
-			String[] dirty = new String[dirtyCount];
-			int j = 0;
-			for (int i = 0; i < uris.length; i++) {
-				if (uris[i] != null) {
-					dirty[j] = uris[i];
-					j++;
-				}
-			}
-			uris = dirty;
-		}
-		return uris;
-	}
-
-	/**
-	 * Returns the first element in the extent of the resource; logs an error and returns null if
-	 * the extent is empty
-	 */
-	public static EObject getRoot(Resource aResource) {
-		EList extent = aResource.getContents();
-		if (extent.size() < 1)
-			return null;
-		return (EObject) extent.get(0);
-	}
-
-	/**
-	 * Handle the failure of
-	 * 
-	 * @aResource.
-	 */
-	protected void handleSaveFailed(Resource aResource, Exception e) {
-		aResource.setModified(true);
-		if (isFailedWriteFileFailure(e) && shouldSaveReadOnly(aResource))
-			saveResource(aResource);
-		else
-			primHandleSaveFailed(aResource, e);
-	}
-
-	/**
-	 * Return whether any of my resources has been modified.
-	 */
-	protected boolean isAnyResourceDirty() {
-		List list = getResources();
-		for (int i = 0; i < list.size(); i++) {
-			if (((Resource) list.get(i)).isModified())
-				return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Return whether a save is needed on the CommandStack
-	 */
-	public boolean isDirty() {
-		return isAnyResourceDirty();
-	}
-
-	protected boolean isFailedWriteFileFailure(Exception ex) {
-		return SaveHandlerHeadless.isFailedWriteFileFailure(ex);
-	}
-
-	/**
-	 * Return true if you can only read the resources and not write.
-	 */
-	public boolean isReadOnly() {
-		return readOnly;
-	}
-
-	protected boolean isReadOnlyFailure(Exception ex) {
-		return false;
-	}
-
-	public boolean hasReadOnlyResource() {
-		try {
-			List list = getResources();
-			int size = list.size();
-			Resource res = null;
-			IFile file;
-			for (int i = 0; i < size; i++) {
-				res = (Resource) list.get(i);
-				file = WorkbenchResourceHelper.getFile(res);
-				if (file != null && file.isReadOnly())
-					return true;
-			}
-		} catch (NullPointerException e) {
-			System.out.println(e);
-		}
-		return false;
-	}
-
-	/**
-	 * @deprecated use createResource(URI) instead
-	 */
-	public Resource makeResource(String aUri) {
-		return createResource(URI.createURI(aUri));
-	}
-
-	/**
-	 * Return whether any of my resources has a reference count of one and it has been modified.
-	 */
-	public boolean needsToSave() {
-		return !isShared() && isDirty();
-	}
-
-	/**
-	 * Remove my reference to aResource and remove it from the ResourceSet. Return true if aResource
-	 * was removed.
-	 */
-	protected boolean primFlushResource(Resource aResource) {
-		if (aResource != null && hasResourceReference(aResource)) {
-			removeResource(aResource);
-			removeResourceSetResource(aResource);
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Handle the failure of
-	 * 
-	 * @aResource.
-	 */
-	protected void primHandleSaveFailed(Resource aResource, Exception e) {
-		org.eclipse.jem.util.logger.proxy.Logger.getLogger().logError(e);
-		Exception nested = null;
-		if (e instanceof IWFTWrappedException)
-			nested = ((IWFTWrappedException) e).getNestedException();
-		else
-			nested = e;
-
-		throw new SaveFailedException(EMFWorkbenchResourceHandler.getString("An_error_occurred_while_sa_ERROR_"), nested); //$NON-NLS-1$ = "An error occurred while saving."
-	}
-
-	/**
-	 * Prompt for a save.
-	 */
-	protected boolean promptToSave(IOperationHandler operationHandler) {
-		if (operationHandler == null)
-			return false;
-		return operationHandler.canContinue(EMFWorkbenchResourceHandler.getString("The_following_resources_ne_UI_"), getResourceURIs(true)); //$NON-NLS-1$ = "The following resources need to be saved but are currently shared, do you want to save now?"
-	}
-
-	/**
-	 * This will force all of the referenced Resources to be saved.
-	 */
-	public void primSave(IProgressMonitor monitor) {
-		if (isReadOnly())
-			return; // do nothing
-		deleteResourcesIfNecessary();
-		Resource resource;
-		if (getResources().isEmpty())
-			return; // nothing to save
-		List localResources = getSortedResources();
-		for (int i = 0; i < localResources.size(); i++) {
-			resource = (Resource) localResources.get(i);
-			saveResource(resource);
-		}
-		getCommandStack().saveIsDone();
-		if (hasListeners()) {
-			EditModelEvent event = new EditModelEvent(EditModelEvent.SAVE, this);
-			notifyListeners(event);
-		}
-	}
-
-	/**
-	 * 
-	 */
-	protected void deleteResourcesIfNecessary() {
-		if (resourcesTargetedForTermination == null || resourcesTargetedForTermination.size() == 0)
-			return;
-		Resource deadres = null;
-		for (int i = 0; i < getResourcesTargetedForTermination().size(); i++) {
-			deadres = (Resource) getResourcesTargetedForTermination().get(i);
-			primDeleteResource(deadres);
-
-			getResources().remove(deadres);
-			getResourcesTargetedForTermination().remove(deadres);
-		}
-	}
-
-
-
-	/**
-	 * Save
-	 * 
-	 * @aResource.
-	 */
-	protected void primSaveResource(Resource aResource) throws Exception {
-		if (aResource.isModified())
-			aResource.save(Collections.EMPTY_MAP);
-	}
-
-	/**
-	 * Process resources that have already been loaded.
-	 */
-	protected void processLoadedResources() {
-		List loaded = getResourceSet().getResources();
-		if (!loaded.isEmpty())
-			processResourcesIfInterrested(loaded);
-	}
-
-	private void processPreloadResources() {
-		for (int i = 0; i < preloadResourceUris.size(); i++) {
-			URI uri = (URI) preloadResourceUris.get(i);
-			getResource(uri);
-		}
-	}
-
-	/**
-	 * Remove aResource from my ResourceSet. Return true if aResource was removed.
-	 */
-	protected boolean removeResourceSetResource(Resource aResource) {
-		aResource.eSetDeliver(false);
-		aResource.unload();
-		aResource.eSetDeliver(true);
-		return getResourceSet().getResources().remove(aResource);
-	}
-
-	protected void saveResource(Resource resource) {
-		try {
-			primSaveResource(resource);
-		} catch (Exception e) {
-			handleSaveFailed(resource, e);
-		}
-	}
-
-	/**
-	 * Should the resources be saved.
-	 */
-	protected boolean shouldSave() {
-		return !isReadOnly() && !isShared();
-	}
-
-	/**
-	 * Should the resources be saved.
-	 */
-	protected boolean shouldSave(IOperationHandler operationHandler) {
-		return shouldSave() || promptToSave(operationHandler);
-	}
-
-	protected boolean shouldSaveReadOnly(Resource aResource) {
-		IFile aFile = WorkbenchResourceHelper.getFile(aResource);
-		if (aFile == null || !aFile.isReadOnly())
-			return false;
-
-		return getSaveHandler().shouldContinueAndMakeFileEditable(aFile);
-	}
-
-	/**
-	 * Force all of the known resource URIs to be loaded if they are not already.
-	 */
-	public void forceLoadKnownResources() {
-		List uris = getKnownResourceUris();
-		URI uri = null;
-		for (int i = 0; i < uris.size(); i++) {
-			uri = (URI) uris.get(i);
-			getResource(uri);
-		}
-	}
-
-	/**
-	 * This method should be called when you want to extend this edit model to handle a resource
-	 * with a URI equal to <code>aRelativeURI</code>.
-	 */
-	public void manageExtensionResourceURI(String aRelativeURI) {
-		if (aRelativeURI != null && aRelativeURI.length() > 0) {
-			URI uri = URI.createURI(aRelativeURI);
-			if (!isInterrestedInResourceUri(uri)) {
-				getKnownResourceUris().add(uri);
-				// Process the resource if it is already loaded.
-				try {
-					Resource res = getEmfContext().getResource(uri);
-					if (res != null)
-						processResource(res);
-				} catch (Exception e) {
-					// Ignore
-				}
-			}
-		}
-	}
-
-	/**
-	 * Get a cached Resource or try to load the Resource prior to creating a Resource. This api
-	 * handles the case that the Resource may be created during the load.
-	 */
-	public Resource getOrCreateResource(URI uri) {
-		return getResource(uri);
-	}
-
-	/**
-	 * @return boolean
-	 */
-	public boolean isAccessAsReadForUnKnownURIs() {
-		return accessAsReadForUnKnownURIs;
-	}
-
-	/**
-	 * Use this api to indicate that you want all unknown Resources to be accessed for ReadOnly.
-	 * 
-	 * @param b
-	 */
-	public void setAccessAsReadForUnKnownURIs(boolean b) {
-		accessAsReadForUnKnownURIs = b;
-	}
-
-	public String toString() {
-		StringBuffer buffer = new StringBuffer(getClass().getName());
-		buffer.append(": "); //$NON-NLS-1$
-		if (isReadOnly())
-			buffer.append(" R = "); //$NON-NLS-1$
-		else
-			buffer.append(" W = "); //$NON-NLS-1$
-		buffer.append(getRegistry().size());
-		buffer.append("[ID: \""); //$NON-NLS-1$
-		buffer.append(getEditModelID());
-		buffer.append("\" Known Resources: ["); //$NON-NLS-1$
-		List uris = getKnownResourceUris();
-		if (uris != null) {
-			int i = 0;
-			for (i = 0; i < (uris.size() - 1); i++)
-				buffer.append(uris.get(i) + ", "); //$NON-NLS-1$
-			buffer.append(uris.get(i));
-			buffer.append("]"); //$NON-NLS-1$
-		} else
-			buffer.append("none"); //$NON-NLS-1$
-
-
-		buffer.append("]"); //$NON-NLS-1$
-		return buffer.toString();
-	}
-
-	public Reference getReference() {
-		if (reference == null)
-			reference = new Reference();
-		return reference;
-	}
-
-	/**
-	 * @return
-	 */
-	protected ClientAccessRegistry getRegistry() {
-		return registry;
-	}
-
-	public class Reference {
-
-		protected String tostring = null;
-
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see java.lang.Object#toString()
-		 */
-		public String toString() {
-			if (tostring == null) {
-				StringBuffer result = new StringBuffer("EditModel.Reference ["); //$NON-NLS-1$
-				result.append("{"); //$NON-NLS-1$
-				result.append(getEditModelID());
-				result.append("} {"); //$NON-NLS-1$
-				result.append(getProject().getName());
-				result.append("}]"); //$NON-NLS-1$
-				tostring = result.toString();
-			}
-			return tostring;
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see java.lang.Object#hashCode()
-		 */
-		public int hashCode() {
-			return toString().hashCode();
-		}
-	}
-
-	/**
-	 * Subclasses can override - by default this will return the first root object from the first
-	 * resource referenced by the known resource URIs for this EditModel
-	 * 
-	 * @return an EObject or Null
-	 */
-	public EObject getPrimaryRootObject() {
-		Resource res = getPrimaryResource();
-		if (res == null || res.getContents().isEmpty())
-			return null;
-		return (EObject) res.getContents().get(0);
-	}
-
-	/**
-	 * Subclasses can override - by default this will return the first resource referenced by the
-	 * known resource URIs for this EditModel
-	 * 
-	 * @return
-	 */
-	public Resource getPrimaryResource() {
-		if (knownResourceUris == null)
-			getKnownResourceUris();
-		if (knownResourceUris == null || knownResourceUris.isEmpty())
-			return null;
-
-		URI uri = (URI) knownResourceUris.get(0);
-		return getResource(uri);
-	}
-
-
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.enablement.IEnablementIdentifierListener#identifierChanged(org.eclipse.wst.common.frameworks.internal.enablement.EnablementIdentifierEvent)
-	 */
-	public void identifierChanged(EnablementIdentifierEvent evt) {
-		if (evt.hasEnabledChanged()) {
-			EditModelEvent editModelEvent = new EditModelEvent(EditModelEvent.KNOWN_RESOURCES_ABOUT_TO_CHANGE, this);
-			notifyListeners(editModelEvent);
-			IEnablementIdentifier id = evt.getIdentifier();
-			if (id.isEnabled())
-				addKnownResources(id);
-			else
-				removeKnownResources(id);
-			editModelEvent = new EditModelEvent(EditModelEvent.KNOWN_RESOURCES_CHANGED, this);
-			notifyListeners(editModelEvent);
-		}
-	}
-
-	private void removeKnownResources(IEnablementIdentifier id) {
-		List editModelResources = getEditModelResources(id);
-		EditModelResource editModelResource = null;
-		ResourceSetWorkbenchEditSynchronizer sync = (ResourceSetWorkbenchEditSynchronizer) getResourceSetSynchronizer();
-		for (int i = 0; i < editModelResources.size(); i++) {
-			editModelResource = (EditModelResource) editModelResources.get(i);
-			if (editModelResource.isAutoLoad() && sync != null) {
-				sync.disableAutoload(editModelResource.getURI());
-				preloadResourceUris.remove(editModelResource.getURI());
-			}
-			knownResourceUris.remove(editModelResource.getURI());
-			removeResource(editModelResource.getURI());
-		}
-
-	}
-
-
-
-	private void addKnownResources(IEnablementIdentifier id) {
-		List editModelResources = getEditModelResources(id);
-		EditModelResource editModelResource = null;
-		ResourceSetWorkbenchEditSynchronizer sync = (ResourceSetWorkbenchEditSynchronizer) getResourceSetSynchronizer();
-		for (int i = 0; i < editModelResources.size(); i++) {
-			editModelResource = (EditModelResource) editModelResources.get(i);
-			if (editModelResource.isAutoLoad() && sync != null) {
-				sync.enableAutoload(editModelResource.getURI());
-				preloadResourceUris.add(editModelResource.getURI());
-				getResource(editModelResource.getURI());
-			}
-			knownResourceUris.add(editModelResource.getURI());
-
-		}
-	}
-
-
-	/**
-	 * @return Returns the params.
-	 */
-	public Map getParams() {
-		return params;
-	}
-
-	/**
-	 * @param params
-	 *            The params to set.
-	 */
-	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/EditModelCommand.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModelCommand.java
deleted file mode 100644
index 00eed90..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModelCommand.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
- *******************************************************************************/
-package org.eclipse.wst.common.internal.emfworkbench.integration;
-
-import org.eclipse.emf.common.command.Command;
-
-
-
-/**
- * Insert the type's description here. Creation date: (05/22/01 8:57:00 AM)
- * 
- * @author: Administrator
- */
-public abstract class EditModelCommand extends AbstractEditModelCommand {
-	protected EditModelCommand() {
-		super();
-	}
-
-	public EditModelCommand(Command targetCommand) {
-		super(targetCommand);
-	}
-
-	public boolean canUndo() {
-		return getTarget().canUndo();
-	}
-
-	protected abstract void executeInModel(AbstractEditModelCommand cmd);
-
-	public EditModelCommand getEditModelCommand() {
-		return this;
-	}
-
-	public String getLabel() {
-		return getTarget().getLabel();
-	}
-
-	public void invertAndPush() {
-		executeInModel(this.inverted());
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModelEvent.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModelEvent.java
deleted file mode 100644
index 460a84a..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModelEvent.java
+++ /dev/null
@@ -1,122 +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
- **************************************************************************************************/
-package org.eclipse.wst.common.internal.emfworkbench.integration;
-
-
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.ecore.resource.Resource;
-
-public class EditModelEvent {
-	//These are the event codes.
-
-	// Used when the edit model is saved.
-	public static final int SAVE = 1;
-	// Used when the command stack becomes dirty.
-	public static final int DIRTY = 2;
-	// Used when a referenced resource is removed from the ResourceSet.
-	public static final int REMOVED_RESOURCE = 3;
-	// Used when a referenced resource is added to the ResourceSet.
-	public static final int ADDED_RESOURCE = 4;
-	// Used when the edit model is disposed
-	public static final int PRE_DISPOSE = 5;
-	// Used when a Resource is loaded or the first object
-	// is added to the contents when created.
-	public static final int LOADED_RESOURCE = 6;
-	// Used when a Resource is unloaded.
-	public static final int UNLOADED_RESOURCE = 7;
-	// Indicates that the list of known resources managed by the edit model is about to change
-	public static final int KNOWN_RESOURCES_ABOUT_TO_CHANGE = 8;
-	// Indicates that the list of known resources managed by the edit model has changed
-	public static final int KNOWN_RESOURCES_CHANGED = 9;
-
-	private int eventCode;
-	private EditModel editModel;
-	private List changedResources;
-
-	/**
-	 * Insert the method's description here. Creation date: (4/12/2001 2:46:59 PM)
-	 */
-	public EditModelEvent(int anEventCode, EditModel model) {
-		setEventCode(anEventCode);
-		setEditModel(model);
-	}
-
-	public void addResource(Resource aResource) {
-		if (aResource != null)
-			getChangedResources().add(aResource);
-	}
-
-	public void addResources(Collection someResources) {
-		if (someResources != null)
-			getChangedResources().addAll(someResources);
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/12/2001 2:46:43 PM)
-	 * 
-	 * @return java.util.List
-	 */
-	public java.util.List getChangedResources() {
-		if (changedResources == null)
-			changedResources = new ArrayList();
-		return changedResources;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (05/21/01 9:01:08 PM)
-	 * 
-	 * @return com.ibm.etools.j2ee.workbench.EditModel
-	 */
-	public EditModel getEditModel() {
-		return editModel;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/12/2001 2:46:43 PM)
-	 * 
-	 * @return int
-	 */
-	public int getEventCode() {
-		return eventCode;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/12/2001 2:46:43 PM)
-	 * 
-	 * @param newChangedResources
-	 *            java.util.List
-	 */
-	public void setChangedResources(java.util.List newChangedResources) {
-		changedResources = newChangedResources;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (05/21/01 9:01:08 PM)
-	 * 
-	 * @param newEditModel
-	 *            com.ibm.etools.j2ee.workbench.EditModel
-	 */
-	public void setEditModel(EditModel newEditModel) {
-		editModel = newEditModel;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/12/2001 2:46:43 PM)
-	 * 
-	 * @param newEventCode
-	 *            int
-	 */
-	public void setEventCode(int newEventCode) {
-		eventCode = newEventCode;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModelFactory.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModelFactory.java
deleted file mode 100644
index d97bbe4..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModelFactory.java
+++ /dev/null
@@ -1,62 +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.internal.emfworkbench.integration;
-
-
-import java.util.Map;
-
-import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext;
-
- 
-public class EditModelFactory implements IEditModelFactory {
-	protected boolean loadKnownResourcesAsReadOnly = true;
-
-	public EditModel createEditModelForRead(String editModelID, EMFWorkbenchContext context) {
-		return createEditModelForRead(editModelID, context, null);
-	}
-
-	public EditModel createEditModelForWrite(String editModelID, EMFWorkbenchContext context) {
-		return createEditModelForWrite(editModelID, context, null);
-	}
-
-	public EditModel createEditModelForRead(String editModelID, EMFWorkbenchContext context, Map params) {
-		EditModel editModel = new EditModel(editModelID, context, true);
-		editModel.setAccessAsReadForUnKnownURIs(loadKnownResourcesAsReadOnly);
-		return editModel;
-	}
-
-	public EditModel createEditModelForWrite(String editModelID, EMFWorkbenchContext context, Map params) {
-		EditModel editModel = new EditModel(editModelID, context, false);
-		editModel.setAccessAsReadForUnKnownURIs(loadKnownResourcesAsReadOnly);
-		return editModel;
-	}
-
-	public String getCacheID(String editModelID, Map params) {
-		return editModelID;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.internal.emfworkbench.integration.IEditModelFactory#setLoadKnownResourcesAsReadOnly(boolean)
-	 */
-	public void setLoadKnownResourcesAsReadOnly(boolean value) {
-		this.loadKnownResourcesAsReadOnly = value;
-	}
-
-	/**
-	 * @return Returns the loadKnownResourcesAsReadOnly.
-	 */
-	protected boolean isLoadKnownResourcesAsReadOnly() {
-		return loadKnownResourcesAsReadOnly;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModelListener.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModelListener.java
deleted file mode 100644
index aefe9e4..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModelListener.java
+++ /dev/null
@@ -1,24 +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
- *******************************************************************************/
-package org.eclipse.wst.common.internal.emfworkbench.integration;
-
-
-/**
- * Insert the type's description here. Creation date: (4/11/2001 4:45:13 PM)
- * 
- * @author: Administrator
- */
-public interface EditModelListener {
-	/**
-	 * An event ocurred on the J2EEEditModel.
-	 */
-	void editModelChanged(EditModelEvent anEvent);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModelNature.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModelNature.java
deleted file mode 100644
index f80a886..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModelNature.java
+++ /dev/null
@@ -1,64 +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 Mar 4, 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.internal.emfworkbench.integration;
-
-import java.util.Map;
-
-import org.eclipse.jem.util.emf.workbench.nature.EMFNature;
-import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext;
-
-/**
- * @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 abstract class EditModelNature extends EMFNature {
-	/**
-	 *  
-	 */
-	public EditModelNature() {
-		super();
-	}
-
-	public EditModel getEditModelForRead(String editModelKey, Object accessorKey) {
-		return getEditModelForRead(editModelKey, accessorKey, null);
-	}
-
-	public EditModel getEditModelForWrite(String editModelKey, Object accessorKey) {
-		return getEditModelForWrite(editModelKey, accessorKey, null);
-	}
-
-	public EditModel getEditModelForRead(String editModelKey, Object accessorKey, Map params) {
-		EditModel result = null;
-		if (getEmfContext() != null)
-			result = getEmfContext().getEditModelForRead(editModelKey, accessorKey, params);
-		return result;
-	}
-
-	public EditModel getEditModelForWrite(String editModelKey, Object accessorKey, Map params) {
-		EditModel result = null;
-		if (getEmfContext() != null)
-			result = getEmfContext().getEditModelForWrite(editModelKey, accessorKey, params);
-		return result;
-	}
-
-	protected EMFWorkbenchContext getEmfContext() {
-		return (EMFWorkbenchContext) getEmfContextBase();
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/IEditModelFactory.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/IEditModelFactory.java
deleted file mode 100644
index 873209f..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/IEditModelFactory.java
+++ /dev/null
@@ -1,31 +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.internal.emfworkbench.integration;
-
-import java.util.Map;
-
-import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext;
-
-
-public interface IEditModelFactory {
-
-	public abstract EditModel createEditModelForRead(String editModelID, EMFWorkbenchContext context);
-
-	public abstract EditModel createEditModelForRead(String editModelID, EMFWorkbenchContext context, Map params);
-
-	public abstract EditModel createEditModelForWrite(String editModelID, EMFWorkbenchContext context);
-
-	public abstract EditModel createEditModelForWrite(String editModelID, EMFWorkbenchContext context, Map params);
-
-	public String getCacheID(String editModelID, Map params);
-
-	public void setLoadKnownResourcesAsReadOnly(boolean value);
-}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/LooseComposedEditModel.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/LooseComposedEditModel.java
deleted file mode 100644
index f9a5f82..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/LooseComposedEditModel.java
+++ /dev/null
@@ -1,37 +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
- *******************************************************************************/
-package org.eclipse.wst.common.internal.emfworkbench.integration;
-
-import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext;
-
-
-/**
- * @author Administrator
- */
-public class LooseComposedEditModel extends ComposedEditModel {
-
-	public LooseComposedEditModel(String editModelID, EMFWorkbenchContext context) {
-		super(editModelID, context);
-
-	}
-
-	public EditModel.Reference addChild(EditModel editModel) {
-		getChildren().add(editModel);
-		Reference ref = editModel.getReference();
-		getChildrenMap().put(ref, editModel);
-		return ref;
-	}
-
-	public void removeChild(EditModel editModel) {
-		getChildren().remove(editModel);
-		getChildrenMap().remove(editModel.getReference());
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModelModifier.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModelModifier.java
deleted file mode 100644
index 53d88ec..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModelModifier.java
+++ /dev/null
@@ -1,615 +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.internal.emfworkbench.integration;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.emf.common.command.AbstractCommand;
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.util.Enumerator;
-import org.eclipse.emf.ecore.EEnum;
-import org.eclipse.emf.ecore.EEnumLiteral;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.edit.command.AddCommand;
-import org.eclipse.emf.edit.command.RemoveCommand;
-import org.eclipse.emf.edit.command.SetCommand;
-import org.eclipse.emf.edit.domain.EditingDomain;
-import org.eclipse.wst.common.internal.emf.utilities.ExtendedEcoreUtil;
-
-/**
- * Insert the type's description here. Creation date: (4/6/2001 3:40:35 PM)
- * 
- * @author: Administrator
- */
-public class ModelModifier {
-	private static final String SET_PATTERN = "Set {0}"; //$NON-NLS-1$
-	private static final String ADD_PATTERN = "Add {0}"; //$NON-NLS-1$
-	private static final String REMOVE_PATTERN = "Remove {0}"; //$NON-NLS-1$
-	private static final String DEFAULT_COMMAND_LABEL = "Command"; //$NON-NLS-1$
-	private EditingDomain editingDomain;
-	private List helpers;
-	private List extendedHelpers;
-	protected List additionalCommands;
-	protected int status;
-	public static final int NO_VALUE_CHANGE = 0;
-	public static final int VALUE_CHANGE = 1;
-	public static final int ERROR = 2;
-
-	/**
-	 * J2EEModelModifier constructor comment.
-	 */
-	public ModelModifier() {
-		super();
-	}
-
-	/**
-	 * J2EEModelModifier constructor comment.
-	 * 
-	 * @param aDomain
-	 *            EditingDomain
-	 */
-	public ModelModifier(EditingDomain aDomain) {
-		setEditingDomain(aDomain);
-	}
-
-	/**
-	 * Add
-	 * 
-	 * @aHelper to the list of helper that will be executed.
-	 */
-	public void addHelper(ModifierHelper aHelper) {
-		if (aHelper != null && !getHelpers().contains(aHelper))
-			getHelpers().add(aHelper);
-	}
-
-	public void addAdditionalCommand(Command aCommand) {
-		if (aCommand != null && !getAdditionalCommands().contains(aCommand))
-			additionalCommands.add(aCommand);
-	}
-
-	/**
-	 * Return true if this modifier can create a command that will perform the necessary operation.
-	 */
-	public boolean canExecuteCommand() {
-		return getEditingDomain() != null;
-	}
-
-	public int executeWithStatus() {
-		try {
-			execute();
-			return status;
-		} finally {
-			status = -1;
-		}
-	}
-
-	/**
-	 * Execute this modifier using the recording mechanism of the StructedTextUndoManager. If this
-	 * modifier cannot record, try to execute using the CommandStack (if it can execute commands).
-	 * Return true if the execution was attempted.
-	 * 
-	 * @see canExecuteCommand()
-	 * @see canRecord()
-	 * @see run()
-	 */
-	public boolean execute(ModifierHelper aHelper) {
-		addHelper(aHelper);
-		return execute();
-	}
-
-	/**
-	 * Execute this modifier using the recording mechanism of the StructedTextUndoManager. If this
-	 * modifier cannot record, try to execute using the CommandStack (if it can execute commands).
-	 * Return true if the execution was attempted.
-	 * 
-	 * @see canExecuteCommand()
-	 * @see canRecord()
-	 * @see run()
-	 */
-	public boolean execute(List someHelpers) {
-		setHelpers(someHelpers);
-		return execute();
-	}
-
-	/**
-	 * Execute this modifier by creating a Command that is executed on the CommandStack. If this
-	 * modifier cannot execute commands, the execution will not take place. Return true if the
-	 * execution was attempted.
-	 * 
-	 * @see canExecuteCommand()
-	 */
-	public boolean execute() {
-		boolean result = false;
-		if (canExecuteCommand()) {
-			try {
-				Command command = createCommand();
-				result = command != null;
-				if (result) {
-					getCommandStack().execute(command);
-				}
-			} finally {
-				release();
-			}
-		} else {
-			setStatus(ERROR);
-		}
-		return result;
-	}
-
-	protected CommandStack getCommandStack() {
-		if (getEditingDomain() != null)
-			return getEditingDomain().getCommandStack();
-		return null;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/6/2001 2:53:17 PM)
-	 * 
-	 * @return EditingDomain
-	 */
-	public EditingDomain getEditingDomain() {
-		return editingDomain;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/10/2001 8:46:35 AM)
-	 * 
-	 * @return J2EEModifierHelper
-	 */
-	public ModifierHelper getFirstHelper() {
-		if (helpers != null && getHelpers().size() > 0)
-			return (ModifierHelper) getHelpers().get(0);
-		return null;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/10/2001 8:46:35 AM)
-	 * 
-	 * @return java.util.List
-	 */
-	public java.util.List getHelpers() {
-		if (helpers == null)
-			helpers = new ArrayList();
-		return helpers;
-	}
-
-	public java.util.List getAdditionalCommands() {
-		if (additionalCommands == null)
-			additionalCommands = new ArrayList();
-		return additionalCommands;
-	}
-
-	/**
-	 * Release all model artifacts.
-	 */
-	protected void release() {
-		setEditingDomain(null);
-		setHelpers(null);
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/6/2001 2:53:17 PM)
-	 * 
-	 * @param newEditingDomain
-	 *            EditingDomain
-	 */
-	public void setEditingDomain(EditingDomain newEditingDomain) {
-		editingDomain = newEditingDomain;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/10/2001 8:46:35 AM)
-	 * 
-	 * @param newHelpers
-	 *            java.util.List
-	 */
-	public void setHelpers(java.util.List newHelpers) {
-		helpers = newHelpers;
-	}
-
-	protected void setStatus(int statusCode) {
-		if (statusCode > status)
-			status = statusCode;
-	}
-
-	/**
-	 * Return an AddCommand that will be executed by a CommandStack.
-	 */
-	protected Command createAddCommand(ModifierHelper aHelper) {
-		Object value = getValue(aHelper);
-		Command command = null;
-		if (valueChanged(aHelper.getOwner(), aHelper.getFeature(), value, false)) {
-			command = AddCommand.create(getEditingDomain(), aHelper.getOwner(), aHelper.getFeature(), value);
-			((AbstractCommand) command).setLabel(createCommandLabel(ADD_PATTERN, aHelper.getFeature()));
-			setStatus(VALUE_CHANGE);
-		} else {
-			setStatus(NO_VALUE_CHANGE);
-		}
-		return command;
-	}
-
-	/**
-	 * Return a Command that will be executed by a CommandStack. The default is to return null.
-	 * Subclasses should override this method.
-	 */
-	public Command createCommand() {
-		Command chainedCommand = createCommand(null, getHelpers());
-		if (null == chainedCommand && additionalCommands != null && additionalCommands.isEmpty()) {
-			setStatus(ERROR);
-			return null;
-		}
-		chainedCommand = appendAdditionalCommands(chainedCommand);
-		return chainedCommand;
-	}
-
-	protected Command createCommand(Command chainedCommand, List helpersArg) {
-		if (null == extendedHelpers) {
-			extendedHelpers = new ArrayList();
-		}
-
-		if (!helpersArg.isEmpty()) {
-			Iterator it = helpersArg.iterator();
-			Command nextCommand = null;
-			while (it.hasNext()) {
-				nextCommand = createCommand((ModifierHelper) it.next());
-				if (chainedCommand == null)
-					chainedCommand = nextCommand;
-				else if (nextCommand != null)
-					chainedCommand = chainedCommand.chain(nextCommand);
-			}
-		}
-		if (!extendedHelpers.isEmpty()) {
-			List copy = new ArrayList();
-			copy.addAll(extendedHelpers);
-			extendedHelpers.clear();
-			chainedCommand = createCommand(chainedCommand, copy);
-		}
-		return chainedCommand;
-	}
-
-	protected Command appendAdditionalCommands(Command chainedCommand) {
-		if (additionalCommands != null && !additionalCommands.isEmpty()) {
-			Command command;
-			for (int i = 0; i < additionalCommands.size(); i++) {
-				command = (Command) additionalCommands.get(i);
-				if (chainedCommand == null)
-					chainedCommand = command;
-				else
-					chainedCommand = chainedCommand.chain(command);
-			}
-		}
-		return chainedCommand;
-	}
-
-	/**
-	 * Return a Command that will be executed by a CommandStack.
-	 */
-	protected Command createCommand(ModifierHelper aHelper) {
-		if (aHelper == null)
-			return null;
-		Command command1, command2;
-		ModifierHelper ownerHelper = aHelper.getOwnerHelper();
-		if (aHelper.shouldUnsetValue() && ownerHelper != null)
-			return null; //we are unsetting a value on an owner that does not exist so do not
-		// create the owner
-		command1 = createCommand(ownerHelper);
-		command2 = primCreateCommand(aHelper);
-
-		if (command1 != null) {
-			if (command2 == null)
-				command2 = command1;
-			else
-				command2 = command2.chain(command1);
-		}
-		return command2;
-	}
-
-	protected String createCommandLabel(String aPattern, EStructuralFeature feature) {
-		String replacement = feature == null ? DEFAULT_COMMAND_LABEL : feature.getName();
-		return java.text.MessageFormat.format(aPattern, new String[]{replacement});
-	}
-
-	/**
-	 * Return a Command that will be executed by a CommandStack. The default is to return null.
-	 * Subclasses should override this method.
-	 */
-	protected Command createManyCommand(ModifierHelper aHelper) {
-		if (aHelper.shouldUnsetValue())
-			return createRemoveCommand(aHelper);
-		return createAddCommand(aHelper);
-	}
-
-	protected EObject createObjectFromHelper(ModifierHelper aHelper) {
-		return aHelper.createNewObjectFromFeature();
-	}
-
-	public class ProxyWrappingCommand extends AbstractCommand {
-		protected Command baseCommand = null;
-		protected EObject eObject = null;
-		protected Resource resource = null;
-
-		public ProxyWrappingCommand(Command baseCommand, EObject eObject) {
-			this.baseCommand = baseCommand;
-			this.eObject = eObject;
-			this.resource = eObject.eResource();
-		}
-
-		public boolean canExecute() {
-			return baseCommand.canExecute();
-		}
-
-		public void execute() {
-			ExtendedEcoreUtil.becomeProxy(eObject, resource);
-			baseCommand.execute();
-		}
-
-		public boolean canUndo() {
-			return baseCommand.canUndo();
-		}
-
-		public void undo() {
-			baseCommand.undo();
-			ExtendedEcoreUtil.removeProxy(eObject, resource);
-		}
-
-		public void redo() {
-			baseCommand.redo();
-		}
-
-		public Collection getResult() {
-			return baseCommand.getResult();
-		}
-
-		public Collection getAffectedObjects() {
-			return baseCommand.getAffectedObjects();
-		}
-
-		public String getLabel() {
-			return baseCommand.getLabel();
-		}
-
-		public String getDescription() {
-			return baseCommand.getDescription();
-		}
-
-		public void dispose() {
-			super.dispose();
-			baseCommand.dispose();
-		}
-	}
-
-	/**
-	 * Return a Remove Command that will be executed by a CommandStack.
-	 */
-	protected Command createRemoveCommand(ModifierHelper aHelper) {
-		Object value = getValue(aHelper);
-		Command command = null;
-		EStructuralFeature feature = aHelper.getFeature();
-		if (valueChanged(aHelper.getOwner(), feature, value, true)) {
-			if (isValueEqual(aHelper, value)) {
-				command = RemoveCommand.create(getEditingDomain(), aHelper.getOwner(), feature, (Collection) value);
-			} else {
-				command = RemoveCommand.create(getEditingDomain(), aHelper.getOwner(), feature, value);
-			}
-			((AbstractCommand) command).setLabel(createCommandLabel(REMOVE_PATTERN, feature));
-			setStatus(VALUE_CHANGE);
-		} else {
-			setStatus(NO_VALUE_CHANGE);
-		}
-		return command;
-	}
-
-	private boolean isValueEqual(ModifierHelper aHelper, Object value) {
-		return aHelper.getOwner().eGet(aHelper.getFeature()) == value;
-	}
-
-	/**
-	 * Return a SetCommand that will be executed by a CommandStack.
-	 */
-	protected Command createSingleCommand(ModifierHelper aHelper) {
-		Object value = getValue(aHelper);
-		Command command = null;
-		if (valueChanged(aHelper.getOwner(), aHelper.getFeature(), value, aHelper.shouldUnsetValue())) {
-			command = SetCommand.create(getEditingDomain(), aHelper.getOwner(), aHelper.getFeature(), value);
-			((AbstractCommand) command).setLabel(createCommandLabel(SET_PATTERN, aHelper.getFeature()));
-			setStatus(VALUE_CHANGE);
-		} else {
-			setStatus(NO_VALUE_CHANGE);
-		}
-		return command;
-	}
-
-	protected Object createValueFromHelper(ModifierHelper aHelper) {
-		EObject newObject = createObjectFromHelper(aHelper);
-		setNewObjectAttributes(newObject, aHelper);
-		return newObject;
-	}
-
-	protected boolean enumValueChanged(EObject anObject, EStructuralFeature aFeature, Object aValue) {
-		if (!anObject.eIsSet(aFeature))
-			return true;
-		Enumerator existingEnumerator = (Enumerator) anObject.eGet(aFeature);
-		Enumerator newEnumerator = getEnumerator(aFeature, aValue);
-		return existingEnumerator != newEnumerator;
-	}
-
-	private Enumerator getEnumerator(EStructuralFeature aFeature, Object aValue) {
-		if (aValue instanceof Enumerator)
-			return (Enumerator) aValue;
-		EEnum anEnum = (EEnum) aFeature.getEType();
-		EEnumLiteral literal = null;
-		if (aValue instanceof String)
-			literal = anEnum.getEEnumLiteral((String) aValue);
-		else if (aValue instanceof Integer)
-			literal = anEnum.getEEnumLiteral(((Integer) aValue).intValue());
-		if (literal != null)
-			return literal.getInstance();
-		return null;
-	}
-
-	protected Object getValue(ModifierHelper aHelper) {
-		if (aHelper.mustCreateValue()) {
-			Object value = createValueFromHelper(aHelper);
-			aHelper.setValue(value);
-		}
-		return aHelper.getValue();
-	}
-
-	protected boolean manyValueChanged(EObject anObject, EStructuralFeature aFeature, Object aValue, boolean isUnset) {
-		List list = (List) anObject.eGet(aFeature);
-		if (isUnset)
-			return list.contains(aValue) || (list == aValue && !list.isEmpty());
-		return !list.contains(aValue);
-	}
-
-	/**
-	 * Return a Command that will be executed by a CommandStack. The default is to return null.
-	 * Subclasses should override this method.
-	 */
-	protected Command primCreateCommand(ModifierHelper aHelper) {
-		Command command = doCreateCommand(aHelper);
-		if (aHelper.shouldUnsetValue()) {
-			Object value = aHelper.getValue();
-			if (value instanceof EObject && !((EObject) value).eIsProxy()) {
-				command = new ProxyWrappingCommand(command, (EObject) value);
-			}
-		}
-		return command;
-	}
-
-	protected Command doCreateCommand(ModifierHelper aHelper) {
-		if (!aHelper.isComplete()) {
-			setStatus(ERROR);
-			return null;
-		}
-		Command command = null;
-		if (aHelper.getFeature().isMany())
-			command = createManyCommand(aHelper);
-		else
-			command = createSingleCommand(aHelper);
-
-		if (null != command) {
-			List localHelpers = ModifierHelperRegistry.getInstance().getHelpers(aHelper);
-			if (null != localHelpers) {
-				extendedHelpers.addAll(localHelpers);
-			}
-		}
-		return command;
-
-	}
-
-	/**
-	 * Run using
-	 * 
-	 * @aHelper. This will set a MOF attibute value to the owner of the helper.
-	 */
-	protected void primRun(ModifierHelper aHelper) {
-		if (aHelper.isComplete()) {
-			Object value = getValue(aHelper);
-			if (valueChanged(aHelper.getOwner(), aHelper.getFeature(), value, aHelper.shouldUnsetValue()))
-				setObjectAttribute(aHelper.getOwner(), aHelper.getFeature(), value, aHelper.shouldUnsetValue());
-		}
-	}
-
-	/**
-	 * The default is to do nothing. Subclasses should override this method if they are using
-	 * recordable commands. The implementation of this method should update the MOF model directly.
-	 * Any modification will be recorded.
-	 */
-	public void run() {
-		if (!getHelpers().isEmpty()) {
-			Iterator it = getHelpers().iterator();
-			while (it.hasNext())
-				run((ModifierHelper) it.next());
-		}
-	}
-
-	/**
-	 * Run using
-	 * 
-	 * @aHelper's ownerHelper first before running with
-	 * @aHelper.
-	 */
-	protected void run(ModifierHelper aHelper) {
-		if (aHelper != null) {
-			run(aHelper.getOwnerHelper());
-			primRun(aHelper);
-		}
-	}
-
-	protected void setNewObjectAttributes(EObject anObject, ModifierHelper aHelper) {
-		HashMap attributes = aHelper.getAttributes();
-		Iterator it = attributes.keySet().iterator();
-		EStructuralFeature feature;
-		Object value = null;
-		while (it.hasNext()) {
-			feature = (EStructuralFeature) it.next();
-			value = attributes.get(feature);
-			setObjectAttribute(anObject, feature, value, false);
-		}
-	}
-
-	protected void setObjectAttribute(EObject anObject, EStructuralFeature aFeature, Object aValue, boolean shouldUnsetValue) {
-		if (aFeature.isMany())
-			setObjectManyAttribute(anObject, aFeature, aValue, shouldUnsetValue);
-		else
-			setObjectSingleAttribute(anObject, aFeature, aValue, shouldUnsetValue);
-	}
-
-	protected void setObjectEnumAttribute(EObject anObject, EStructuralFeature aFeature, Object aValue) {
-		Enumerator enumerator = getEnumerator(aFeature, aValue);
-		anObject.eSet(aFeature, enumerator);
-	}
-
-	protected void setObjectManyAttribute(EObject anObject, EStructuralFeature aFeature, Object aValue, boolean shouldUnsetValue) {
-		List list = (List) anObject.eGet(aFeature);
-		if (shouldUnsetValue)
-			list.remove(aValue);
-		else
-			list.add(aValue);
-	}
-
-	protected void setObjectSingleAttribute(EObject anObject, EStructuralFeature aFeature, Object aValue, boolean shouldUnsetValue) {
-		if (shouldUnsetValue)
-			anObject.eUnset(aFeature);
-		else if (aFeature.getEType() instanceof EEnum)
-			setObjectEnumAttribute(anObject, aFeature, aValue);
-		else
-			anObject.eSet(aFeature, aValue);
-	}
-
-	protected boolean singleValueChanged(EObject anObject, EStructuralFeature aFeature, Object aValue, boolean isUnset) {
-		if (aFeature.getEType() instanceof EEnum)
-			return enumValueChanged(anObject, aFeature, aValue);
-
-		Object existingValue = anObject.eGet(aFeature);
-		if (existingValue == null && aValue == null)
-			return false;
-		if (existingValue != null && !existingValue.equals(aValue))
-			return true;
-		if (aValue != null && !aValue.equals(existingValue))
-			return true;
-		return false;
-	}
-
-	protected boolean valueChanged(EObject anObject, EStructuralFeature aFeature, Object aValue, boolean isUnset) {
-		if (aFeature.isMany())
-			return manyValueChanged(anObject, aFeature, aValue, isUnset);
-		return singleValueChanged(anObject, aFeature, aValue, isUnset);
-	}
-}
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
deleted file mode 100644
index 1936a2c..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModifierHelper.java
+++ /dev/null
@@ -1,363 +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.internal.emfworkbench.integration;
-
-
-import java.util.HashMap;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-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;
-
-/**
- * Insert the type's description here. Creation date: (4/6/2001 3:23:36 PM)
- * 
- * @author: Administrator
- */
-public class ModifierHelper {
-
-	private EObject owner;
-	private ModifierHelper ownerHelper;
-	private OwnerProvider ownerProvider;
-	private Object value;
-	private EStructuralFeature feature;
-	private HashMap attributes;
-	private boolean shouldUnsetValue = false;
-	private String valueXSITypeName;
-	private FeatureValueConverter featureValueConverter;
-
-	public static final int ACTION_SET = 0;
-	public static final int ACTION_UNSET = 1;
-	public static final int ACTION_BOTH = 2;
-
-	/**
-	 * J2EEModifierHelper constructor comment.
-	 */
-	public ModifierHelper() {
-		super();
-	}
-
-	/**
-	 * J2EEModifierHelper constructor comment.
-	 */
-	public ModifierHelper(EObject anOwner, EStructuralFeature aFeature, Object aValue) {
-		setOwner(anOwner);
-		setFeature(aFeature);
-		setValue(aValue);
-	}
-
-	/**
-	 * J2EEModifierHelper constructor comment.
-	 */
-	public ModifierHelper(ModifierHelper anOwnerHelper, EStructuralFeature aFeature, Object aValue) {
-		setOwnerHelper(anOwnerHelper);
-		setFeature(aFeature);
-		setValue(aValue);
-	}
-
-	/**
-	 * J2EEModifierHelper constructor comment.
-	 */
-	public ModifierHelper(OwnerProvider anOwnerProvider, EStructuralFeature aFeature, Object aValue) {
-		setOwnerProvider(anOwnerProvider);
-		setFeature(aFeature);
-		setValue(aValue);
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
-	 * 
-	 * @return java.util.HashMap
-	 */
-	public void addAttribute(EStructuralFeature aFeature, Object aValue) {
-		if (aFeature != null && aValue != null)
-			getAttributes().put(aFeature, aValue);
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
-	 * 
-	 * @param newValue
-	 *            java.lang.Object
-	 */
-	protected Object convertValue(java.lang.Object newValue) {
-		return getFeatureValueConverter().convertValue(newValue, getFeature());
-	}
-
-	//Calling this will cause the value to be removed or unset from the owner.
-	public void doUnsetValue() {
-		shouldUnsetValue = true;
-		if (value != SetCommand.UNSET_VALUE && feature != null && !feature.isMany())
-			primSetValue(SetCommand.UNSET_VALUE);
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
-	 * 
-	 * @return java.util.HashMap
-	 */
-	public java.util.HashMap getAttributes() {
-		if (attributes == null)
-			attributes = new HashMap();
-		return attributes;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
-	 * 
-	 * @return org.eclipse.emf.ecore.EFactory
-	 */
-	protected org.eclipse.emf.ecore.EFactory getFactory() {
-		return getPackage().getEFactoryInstance();
-	}
-
-	protected EPackage getPackage() {
-		return ((EClassImpl) getFeatureType()).getEPackage();
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
-	 * 
-	 * @return org.eclipse.emf.ecore.EStructuralFeature
-	 */
-	public org.eclipse.emf.ecore.EStructuralFeature getFeature() {
-		return feature;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
-	 * 
-	 * @return EObject
-	 */
-	protected EObject getFeatureType() {
-		return getFeature().getEType();
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (5/10/2001 4:51:58 PM)
-	 * 
-	 * @return com.ibm.etools.j2ee.commands.FeatureValueConverter
-	 */
-	public FeatureValueConverter getFeatureValueConverter() {
-		if (featureValueConverter == null)
-			featureValueConverter = FeatureValueConverter.DEFAULT;
-		return featureValueConverter;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
-	 * 
-	 * @return String
-	 */
-	protected String getNewValueTypeName() {
-		if (getValueXSITypeName() != null && getValueXSITypeName().length() > 0)
-			return getValueXSITypeName();
-		return (((EClass) getFeatureType()).getName());
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
-	 * 
-	 * @return org.eclipse.emf.ecore.EObject
-	 */
-	public org.eclipse.emf.ecore.EObject getOwner() {
-		if (owner == null) {
-			OwnerProvider provider = getOwnerProvider();
-			EObject providerOwner = null;
-			if (provider != null)
-				providerOwner = provider.getOwner();
-			if (providerOwner == null && getOwnerHelper() != null)
-				providerOwner = (EObject) getOwnerHelper().getValue();
-			return providerOwner;
-		}
-		return owner;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/8/2001 2:47:54 PM)
-	 * 
-	 * @return com.ibm.etools.j2ee.commands.J2EEModifierHelper
-	 */
-	public ModifierHelper getOwnerHelper() {
-		if (ownerHelper == null) {
-			if (getOwnerProvider() != null && getOwnerProvider().getOwner() == null)
-				return getOwnerProvider().getOwnerHelper();
-		}
-		return ownerHelper;
-	}
-
-	public ModifierHelper primGetOwnerHelper() {
-		return ownerHelper;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (9/18/2001 1:31:14 PM)
-	 * 
-	 * @return com.ibm.etools.j2ee.ui.J2EEOwnerProvider
-	 */
-	public OwnerProvider getOwnerProvider() {
-		return ownerProvider;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
-	 * 
-	 * @return java.lang.Object
-	 */
-	public java.lang.Object getValue() {
-		return value;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/10/2001 3:39:31 PM)
-	 * 
-	 * @return java.lang.String
-	 */
-	public java.lang.String getValueXSITypeName() {
-		return valueXSITypeName;
-	}
-
-	/**
-	 * This will automatically get called from the J2EEModelModifier before executing so it is not
-	 * necessary to call it directly.
-	 */
-	public boolean isComplete() {
-		boolean result = true;
-		if (getOwnerHelper() != null)
-			result = getOwnerHelper().isComplete();
-		if (!mustCreateValue())
-			result = getValue() != null || shouldUnsetValue();
-		else
-			result = getFeatureType() != null;
-		return result && getFeature() != null && (getOwner() != null || getOwnerHelper() != null);
-	}
-
-	public boolean mustCreateValue() {
-		return getValue() == null && getFeature() != null && !shouldUnsetValue();
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
-	 * 
-	 * @param newValue
-	 *            java.lang.Object
-	 */
-	public void primSetValue(java.lang.Object newValue) {
-		value = newValue;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
-	 * 
-	 * @param newFeature
-	 *            org.eclipse.emf.ecore.EStructuralFeature
-	 */
-	public void setFeature(org.eclipse.emf.ecore.EStructuralFeature newFeature) {
-		feature = newFeature;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (5/10/2001 4:51:58 PM)
-	 * 
-	 * @param newFeatureValueConverter
-	 *            com.ibm.etools.j2ee.commands.FeatureValueConverter
-	 */
-	public void setFeatureValueConverter(FeatureValueConverter newFeatureValueConverter) {
-		featureValueConverter = newFeatureValueConverter;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
-	 * 
-	 * @param newOwner
-	 *            org.eclipse.emf.ecore.EObject
-	 */
-	public void setOwner(org.eclipse.emf.ecore.EObject newOwner) {
-		owner = newOwner;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/8/2001 2:47:54 PM)
-	 * 
-	 * @param newOwnerHelper
-	 *            com.ibm.etools.j2ee.commands.J2EEModifierHelper
-	 */
-	public void setOwnerHelper(ModifierHelper newOwnerHelper) {
-		ownerHelper = newOwnerHelper;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (9/18/2001 1:31:14 PM)
-	 * 
-	 * @param newOwnerProvider
-	 *            com.ibm.etools.j2ee.ui.J2EEOwnerProvider
-	 */
-	public void setOwnerProvider(OwnerProvider newOwnerProvider) {
-		ownerProvider = newOwnerProvider;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
-	 * 
-	 * @param newValue
-	 *            java.lang.Object
-	 */
-	public void setValue(java.lang.Object newValue) {
-		try {
-			primSetValue(convertValue(newValue));
-		} catch (FeatureValueConversionException featureException) {
-			Logger.getLogger().logError(featureException);
-			primSetValue(null);
-		}
-	}
-
-	/**
-	 * Treat an empty String as a null value. Creation date: (4/6/2001 3:28:16 PM)
-	 * 
-	 * @param newValue
-	 *            java.lang.Object
-	 */
-	public void setValueFromWidget(String newValue) {
-		Object data = newValue;
-		if (newValue != null && newValue.length() == 0)
-			data = null;
-		setValue(data);
-		if (data == null)
-			doUnsetValue();
-		else
-			shouldUnsetValue = false;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (4/10/2001 3:39:31 PM)
-	 * 
-	 * @param newValueXSITypeName
-	 *            java.lang.String
-	 */
-	public void setValueXSITypeName(java.lang.String newValueXSITypeName) {
-		valueXSITypeName = newValueXSITypeName;
-	}
-
-	public boolean shouldUnsetValue() {
-		return shouldUnsetValue;
-	}
-
-	public EObject createNewObjectFromFeature() {
-		EClass metaClass = (EClass) getPackage().getEClassifier(getNewValueTypeName());
-		return getFactory().create(metaClass);
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModifierHelperChainer.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModifierHelperChainer.java
deleted file mode 100644
index d36148d..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModifierHelperChainer.java
+++ /dev/null
@@ -1,49 +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
- *******************************************************************************/
-package org.eclipse.wst.common.internal.emfworkbench.integration;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EStructuralFeature;
-
-
-
-/**
- * @version 1.0
- * @author
- */
-public class ModifierHelperChainer {
-
-	ModifierHelper helper;
-
-	public ModifierHelperChainer(EStructuralFeature feature, EObject owner, Object value) {
-		helper = new ModifierHelper();
-
-		if (owner != null)
-			helper.setOwner(owner);
-
-		helper.setFeature(feature);
-
-		if (value != null)
-			helper.setValue(value);
-
-	}
-
-	public ModifierHelper getHelper() {
-		return helper;
-	}
-
-	public void setOwnerBasedOnType(Object owner) {
-		if (owner instanceof EObject)
-			helper.setOwner((EObject) owner);
-		else if (owner instanceof ModifierHelper)
-			helper.setOwnerHelper((ModifierHelper) owner);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModifierHelperFactory.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModifierHelperFactory.java
deleted file mode 100644
index bc41a62..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModifierHelperFactory.java
+++ /dev/null
@@ -1,34 +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 27, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.common.internal.emfworkbench.integration;
-
-/**
- * @author jsholl
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-public interface ModifierHelperFactory {
-
-
-	/**
-	 * @param baseHelper
-	 * @param actionFlag
-	 * @return
-	 */
-	ModifierHelper getHelper(ModifierHelper baseHelper, int actionFlag);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModifierHelperRegistry.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModifierHelperRegistry.java
deleted file mode 100644
index b1da8ad..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModifierHelperRegistry.java
+++ /dev/null
@@ -1,273 +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 Apr 27, 2004
- * 
- * To change the template for this generated file go to Window - Preferences -
- * Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.common.internal.emfworkbench.integration;
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-
-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.Platform;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EClassifier;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.jem.util.logger.proxy.Logger;
-
-/**
- * @author jsholl
- *  
- */
-public class ModifierHelperRegistry {
-	private static final String PLUGIN_ID = "org.eclipse.wst.common.internal.emfworkbench.integration"; //$NON-NLS-1$
-	private static final String EXTENSION_POINT = "ModifierHelperFactory"; //$NON-NLS-1$
-	private static final String FACTORY_CLASS = "class"; //$NON-NLS-1$
-	private static final String PACKAGE = "package"; //$NON-NLS-1$
-	private static final String PACKAGE_URI = "uri"; //$NON-NLS-1$
-	private static final String NAME = "name"; //$NON-NLS-1$
-	private static final String TYPE = "type"; //$NON-NLS-1$
-	private static final String FEATURE = "feature"; //$NON-NLS-1$
-	private static final String FEATURE_ACTION = "action"; //$NON-NLS-1$
-	private static final String FEATURE_ACTION_SET = "set"; //$NON-NLS-1$
-	private static final String FEATURE_ACTION_UNSET = "unset"; //$NON-NLS-1$
-	private static final String FEATURE_ACTION_BOTH = "both"; //default //$NON-NLS-1$
-	private static ModifierHelperRegistry INSTANCE = null;
-	// Hashtable mapping features to a list of FactoryHolders
-	private Hashtable featureHash = new Hashtable();
-	private Hashtable factoryHash = new Hashtable();
-
-	private class FactoryHolder {
-		private int actionType;
-		private IConfigurationElement element;
-
-		public FactoryHolder(IConfigurationElement element, int actionType) {
-			this.element = element;
-			this.actionType = actionType;
-		}
-
-		public ModifierHelperFactory getFactory(int actionTypeArg) {
-			if (this.actionType == actionTypeArg || this.actionType == ModifierHelper.ACTION_BOTH) {
-				String hashKey = getFactoryHash(element);
-				ModifierHelperFactory factory = (ModifierHelperFactory) factoryHash.get(hashKey);
-				if (null == factory) {
-					try {
-						factory = (ModifierHelperFactory) element.createExecutableExtension(FACTORY_CLASS);
-						factoryHash.put(hashKey, factory);
-					} catch (CoreException e) {
-						Logger.getLogger().logError(e);
-					}
-				}
-				return factory;
-			}
-			return null;
-		}
-
-		public boolean equals(Object obj) {
-			if (super.equals(obj)) {
-				return true;
-			}
-			FactoryHolder holder = (FactoryHolder) obj;
-			return getFactoryHash(element).equals(getFactoryHash(holder.element));
-		}
-	}
-
-	private ModifierHelperRegistry() {
-		readExtensions();
-	}
-
-	private void readExtensions() {
-		IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(PLUGIN_ID, EXTENSION_POINT);
-		if (point == null)
-			return;
-		IConfigurationElement[] elements = point.getConfigurationElements();
-		for (int i = 0; i < elements.length; i++) {
-			readFactory(elements[i]);
-		}
-	}
-
-	private void readFactory(IConfigurationElement element) {
-		String factoryClassName = element.getAttribute(FACTORY_CLASS);
-		if (null == factoryClassName) {
-			logError(element, "No " + FACTORY_CLASS + " defined."); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		IConfigurationElement[] packages = element.getChildren(PACKAGE);
-		if (packages.length == 0) {
-			logError(element, "No " + PACKAGE + " defined."); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		for (int j = 0; j < packages.length; j++) {
-			readPackage(element, packages[j]);
-		}
-	}
-
-	private void readPackage(IConfigurationElement factoryElement, IConfigurationElement element) {
-		String packageURI = element.getAttribute(PACKAGE_URI);
-		if (null == packageURI) {
-			logError(element, "No " + PACKAGE_URI + " defined."); //$NON-NLS-1$ //$NON-NLS-2$
-			return;
-		}
-		EPackage ePackage = EPackage.Registry.INSTANCE.getEPackage(packageURI);
-		if (null == ePackage) {
-			logError(element, PACKAGE + " " + packageURI + " can not be found."); //$NON-NLS-1$ //$NON-NLS-2$
-			return;
-		}
-		IConfigurationElement[] types = element.getChildren(TYPE);
-		if (types.length == 0) {
-			logError(element, "No " + TYPE + " defined."); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		for (int i = 0; i < types.length; i++) {
-			readType(factoryElement, ePackage, types[i]);
-		}
-	}
-
-	private void readType(IConfigurationElement factoryElement, EPackage ePackage, IConfigurationElement element) {
-		String typeName = element.getAttribute(NAME);
-		if (null == typeName) {
-			logError(element, "No " + NAME + " defined."); //$NON-NLS-1$ //$NON-NLS-2$
-			return;
-		}
-		EClassifier eClassifier = ePackage.getEClassifier(typeName);
-		if (null == eClassifier) {
-			logError(element, TYPE + " " + typeName + " can not be found in " + PACKAGE + " " + ePackage.getName()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			return;
-		}
-		EClass eClass = (EClass) eClassifier;
-		IConfigurationElement[] features = element.getChildren(FEATURE);
-		if (features.length == 0) {
-			logError(element, "No " + FEATURE + " defined."); //$NON-NLS-1$ //$NON-NLS-2$
-			return;
-		}
-		for (int i = 0; i < features.length; i++) {
-			readFeature(factoryElement, eClass, features[i]);
-		}
-	}
-
-	private void readFeature(IConfigurationElement factoryElement, EClass eClass, IConfigurationElement element) {
-		String featureName = element.getAttribute(NAME);
-		if (null == featureName) {
-			logError(element, "No " + NAME + " defined."); //$NON-NLS-1$ //$NON-NLS-2$
-			return;
-		}
-		String action = element.getAttribute(FEATURE_ACTION);
-		if (null == action) {
-			action = FEATURE_ACTION_BOTH;
-		}
-		int actionType = -1;
-		if (action.equalsIgnoreCase(FEATURE_ACTION_BOTH)) {
-			actionType = ModifierHelper.ACTION_BOTH;
-		} else if (action.equalsIgnoreCase(FEATURE_ACTION_SET)) {
-			actionType = ModifierHelper.ACTION_SET;
-		} else if (action.equalsIgnoreCase(FEATURE_ACTION_UNSET)) {
-			actionType = ModifierHelper.ACTION_UNSET;
-		}
-		if (actionType == -1) {
-			logError(element, "Invalid " + FEATURE_ACTION + "=" + action + " defined.  Valid values are: " + FEATURE_ACTION_BOTH + ", " + FEATURE_ACTION_SET + ", or " + FEATURE_ACTION_UNSET); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-			return;
-		}
-		EStructuralFeature feature = null;
-		EList allFeatures = eClass.getEAllStructuralFeatures();
-		EStructuralFeature tempFeature = null;
-		Iterator iterator = allFeatures.iterator();
-		while (null == feature && iterator.hasNext()) {
-			tempFeature = (EStructuralFeature) iterator.next();
-			if (tempFeature.getName().equals(featureName)) {
-				feature = tempFeature;
-			}
-		}
-		if (feature == null) {
-			logError(element, FEATURE + " " + featureName + " can not be found in " + TYPE + " " + eClass.getName()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			return;
-		}
-		List factoryHolderList = (List) featureHash.get(feature);
-		if (null == factoryHolderList) {
-			factoryHolderList = new ArrayList();
-			featureHash.put(feature, factoryHolderList);
-		}
-		FactoryHolder factoryHolder = new FactoryHolder(factoryElement, actionType);
-		if (factoryHolderList.contains(factoryHolder)) {
-			logError(element, "Duplicate" + FEATURE + ":" + featureName + " defined for " + FACTORY_CLASS + ":" + factoryElement.getAttribute(FACTORY_CLASS)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-			return;
-		}
-		factoryHolderList.add(factoryHolder);
-	}
-
-	private String getFactoryHash(IConfigurationElement factoryElement) {
-		return factoryElement.getDeclaringExtension().getNamespace() + factoryElement.getAttribute(FACTORY_CLASS);
-	}
-
-	public static 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("\n" + text); //$NON-NLS-1$
-		Logger.getLogger().logError(buf.toString());
-	}
-
-	public static ModifierHelperRegistry getInstance() {
-		if (null == INSTANCE) {
-			INSTANCE = new ModifierHelperRegistry();
-		}
-		return INSTANCE;
-	}
-
-	/**
-	 * returns a list of ModifierHelpers
-	 * 
-	 * @param baseHelper
-	 * @param actionFlag
-	 * @return
-	 */
-	public List getHelpers(ModifierHelper baseHelper) {
-		int actionFlag = baseHelper.shouldUnsetValue() ? ModifierHelper.ACTION_UNSET : ModifierHelper.ACTION_SET;
-		EStructuralFeature feature = baseHelper.getFeature();
-		List factoryList = getFactories(feature, actionFlag);
-		if (null == factoryList) {
-			return null;
-		}
-		ArrayList helpers = new ArrayList();
-		Iterator it = factoryList.iterator();
-		ModifierHelperFactory factory = null;
-		while (it.hasNext()) {
-			factory = (ModifierHelperFactory) it.next();
-			Object helper = factory.getHelper(baseHelper, actionFlag);
-			if (null != helper) {
-				helpers.add(helper);
-			}
-		}
-		return helpers;
-	}
-
-	private List getFactories(EStructuralFeature feature, int actionFlag) {
-		List factoryHolderList = (List) featureHash.get(feature);
-		if (null == factoryHolderList) {
-			return null;
-		}
-		List factoryList = new ArrayList();
-		ModifierHelperFactory factory = null;
-		for (int i = 0; i < factoryHolderList.size(); i++) {
-			factory = ((FactoryHolder) factoryHolderList.get(i)).getFactory(actionFlag);
-			if (null != factory) {
-				factoryList.add(factory);
-			}
-		}
-		return factoryList;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/OwnerProvider.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/OwnerProvider.java
deleted file mode 100644
index e082439..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/OwnerProvider.java
+++ /dev/null
@@ -1,31 +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
- *******************************************************************************/
-package org.eclipse.wst.common.internal.emfworkbench.integration;
-
-import org.eclipse.emf.ecore.EObject;
-
-
-/**
- * Insert the type's description here. Creation date: (6/20/2001 10:24:46 PM)
- * 
- * @author: Administrator
- */
-public interface OwnerProvider {
-	/**
-	 * Return the EObject that will serve as the owner of a given J2EEModifierHelper.
-	 */
-	EObject getOwner();
-
-	/**
-	 * Return a J2EEModifierHelper for the owner if the owner does not yet exist.
-	 */
-	ModifierHelper getOwnerHelper();
-}
\ No newline at end of file
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
deleted file mode 100644
index aa8f271..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ProjectResourceSetEditImpl.java
+++ /dev/null
@@ -1,53 +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 Mar 4, 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.internal.emfworkbench.integration;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.emf.common.util.URI;
-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;
-import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper;
-
-/**
- * @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 ProjectResourceSetEditImpl extends ProjectResourceSetImpl {
-
-	/**
-	 * @param aProject
-	 */
-	public ProjectResourceSetEditImpl(IProject aProject) {
-		super(aProject);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @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);
-		if (result != null && WorkbenchResourceHelper.isReferencedResource(result))
-			WorkbenchResourceHelper.cacheSynchronizationStamp((ReferencedResource) result);
-		return result;
-	}
-
-}
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
deleted file mode 100644
index 94d46e3..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ResourceSetWorkbenchEditSynchronizer.java
+++ /dev/null
@@ -1,452 +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 Mar 4, 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.internal.emfworkbench.integration;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-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.IProgressMonitor;
-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;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.jem.internal.util.emf.workbench.EMFWorkbenchContextFactory;
-import org.eclipse.jem.util.emf.workbench.ProjectResourceSet;
-import org.eclipse.jem.util.emf.workbench.ResourceSetWorkbenchSynchronizer;
-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.emfworkbench.WorkbenchResourceHelper;
-
-/**
- * @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 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 Set recentlySavedFiles = new HashSet();
-	private Map ignoredFilesCache = new HashMap();
-
-	/** The emf resources to be removed from the resource set as a result of a delta */
-	protected List deferredRemoveResources = new ArrayList();
-	protected List deferredUnloadResources = new ArrayList();
-	protected List deferredLoadResources = new ArrayList();
-
-	protected List autoloadResourcesURIs = new ArrayList();
-	protected List autoloadResourcesExts = new ArrayList();
-
-
-	/**
-	 * @param aResourceSet
-	 * @param aProject
-	 */
-	public ResourceSetWorkbenchEditSynchronizer(ResourceSet aResourceSet, IProject aProject) {
-		super(aResourceSet, aProject);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.internal.emfworkbench.ResourceSetWorkbenchSynchronizer#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent)
-	 */
-	public void resourceChanged(IResourceChangeEvent event) {
-		super.resourceChanged(event);
-		try {
-			acceptDelta(event);
-			notifyExtendersIfNecessary();
-			processDeferredResources();
-		} catch (Exception e) {
-			e.printStackTrace();
-		} finally {
-			deferredRemoveResources.clear();
-			deferredUnloadResources.clear();
-			deferredLoadResources.clear();
-		}
-	}
-
-	protected void processDeferredRemovedResources() {
-		Resource resource = null;
-		for (int i = 0; i < deferredRemoveResources.size(); i++) {
-			resource = (Resource) deferredRemoveResources.get(i);
-			resourceSet.getResources().remove(resource);
-			resource.unload();
-		}
-	}
-
-	protected void processDeferredUnloadedResources() {
-		Resource resource = null;
-		for (int i = 0; i < deferredUnloadResources.size(); i++) {
-			resource = (Resource) deferredUnloadResources.get(i);
-			resource.unload();
-		}
-	}
-
-	private void processDeferredLoadResources() {
-		URI uri = null;
-		for (int i = 0; i < deferredLoadResources.size(); i++) {
-			uri = (URI) deferredLoadResources.get(i);
-			try {
-				resourceSet.getResource(uri, true);
-			} catch (WrappedException ex) {
-				Logger.getLogger().logError(ex);
-			}
-
-		}
-	}
-
-	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 {
-				currentProjectDelta = null;
-				delta.accept(ResourceSetWorkbenchEditSynchronizer.this);
-			} catch (Exception e) {
-				Logger.getLogger().logError(e);
-			}
-		}
-	}
-
-	/**
-	 * The project is going away so we need to cleanup ourself and the ResourceSet. TODO Need to
-	 * push up this code to ResourceSetWorkbenchSynchronizer in next release.
-	 */
-	protected void release() {
-		if (JEMUtilPlugin.isActivated()) {
-			try {
-				if (resourceSet instanceof ProjectResourceSet)
-					((ProjectResourceSet) resourceSet).release();
-			} finally {
-				EMFWorkbenchContextFactory.INSTANCE.removeCachedProject(getProject());
-				dispose();
-			}
-		}
-	}
-
-	private void processDeferredResources() {
-		processDeferredRemovedResources();
-		processDeferredUnloadedResources();
-		processDeferredLoadResources();
-	}
-
-	public boolean visit(IResourceDelta delta) {
-		IResource resource = delta.getResource();
-		// only respond to project changes
-		if (resource != null) {
-			if (resource.getType() == IResource.PROJECT) {
-				IProject p = (IProject) resource;
-				if (isInterrestedInProject(p)) {
-					currentProjectDelta = delta;
-					return true;
-				}
-				return false;
-			}
-			if (resource.getType() == IResource.FILE && isInterrestedInFile((IFile) resource)) {
-				switch (delta.getKind()) {
-					case IResourceDelta.REMOVED :
-						removedResource((IFile) resource);
-						break;
-					case IResourceDelta.ADDED :
-						addedResource((IFile) resource);
-						break;
-					case IResourceDelta.CHANGED :
-						if ((delta.getFlags() & IResourceDelta.CONTENT) != 0)
-							changedResource((IFile) resource);
-						break;
-					default :
-						if ((delta.getFlags() & IResourceDelta.MOVED_FROM) != 0 || (delta.getFlags() & IResourceDelta.MOVED_TO) != 0)
-							movedResource((IFile) resource);
-						break;
-				}
-				return false;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * Queue up the <code>Resource</code> that corresponds to <code>aFile</code>, for removal
-	 * from the cache of resources.
-	 * 
-	 * @post Return true if a <code>Resource</code> was queued up to be removed.
-	 */
-	protected boolean removedResource(IFile aFile) {
-		return processResource(aFile, true);
-	}
-
-	/**
-	 * Queue up the <code>Resource</code> that corresponds to <code>aFile</code>, for reload.
-	 * 
-	 * @post Return true if a <code>Resource</code> was queued up to be reloaded.
-	 */
-	protected boolean addedResource(IFile aFile) {
-        boolean didProcess = false;
-        Resource resource = getResource(aFile);
-        if ((resource != null) || (recentlySavedFiles.contains(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() && WorkbenchResourceHelper.isReferencedResource(resource) && !WorkbenchResourceHelper.isConsistent((ReferencedResource)resource)) {
-                        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;
-}
-
-	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;
-			}
-			
-			if (isRemove)
-				deferredRemoveResources.add(resource);
-			else if (resource.isLoaded() && WorkbenchResourceHelper.isReferencedResource(resource) && !WorkbenchResourceHelper.isConsistent((ReferencedResource)resource))
-				deferredUnloadResources.add(resource);
-		}
-		return false;
-	}
-
-	/**
-	 * For now, do the same as if the <code>aFile</code> was removed.
-	 */
-	protected boolean movedResource(IFile aFile) {
-		return removedResource(aFile);
-	}
-
-	/**
-	 * The contents of <code>aFile</code> have changed in the Workbench and we may need to update
-	 * our cached resources.
-	 * 
-	 * We will process this resource to be refreshed and not removed.
-	 * 
-	 * @post Return true if a <code>Resource</code> was actually removed.
-	 */
-
-	protected boolean changedResource(IFile aFile) {
-		//Process resource as a refresh.
-		return processResource(aFile, false);
-	}
-
-	protected Resource getResource(IFile aFile) {
-		
-		return resourceSet.getResource(URI.createPlatformResourceURI(aFile.getFullPath().toString()), false);
-	}
-
-
-	/**
-	 * This method should be called prior to writing to an IFile from a MOF resource.
-	 */
-	public void preSave(IFile aFile) {
-		if (aFile != null) {
-			recentlySavedFiles.add(aFile);
-			ignoredFilesCache.remove(aFile);
-		}
-	}
-
-	/**
-	 * This method should be called after a preSave if the save fails
-	 */
-	public void removeFromRecentlySavedList(IFile aFile) {
-		if (aFile != null) {
-			recentlySavedFiles.remove(aFile);
-			ignoredFilesCache.remove(aFile);
-		}
-	}
-
-	/**
-	 * This method should be called just after writing to an IFile from a MOF resource.
-	 * 
-	 * @deprecated No longer needs to be called.
-	 */
-	public void postSave(IFile aFile) {
-		//TODO remove this method
-	}
-
-	/**
-	 * Return <code>true</code> if <code>aProject</code> has the projectNatureID.
-	 */
-	protected boolean isInterrestedInProject(IProject aProject) {
-		return aProject.equals(getProject());
-	}
-
-	/**
-	 * Optimized not to be not interrested in files with an extension of .java or .class or if the
-	 * file has just been saved by our own internal mechanism.
-	 */
-	protected boolean isInterrestedInFile(IFile aFile) {
-		String extension = aFile.getFileExtension();
-		if (CLASS_EXTENSION.equals(extension) || JAVA_EXTENSION.equals(extension))
-			return false;
-		if (recentlySavedFiles.remove(aFile)) {
-			cacheIgnored(aFile);
-			return false;
-		}
-		return !hasIgnored(aFile);
-	}
-
-	/**
-	 * Return true if we have already ignored this <code>file</code> and that its modification
-	 * stamp is the same as when we processed it.
-	 * 
-	 * @param file
-	 * @return
-	 */
-	private boolean hasIgnored(IFile file) {
-		Long cachedStamp = (Long) ignoredFilesCache.get(file);
-		if (cachedStamp == null)
-			return false;
-		long stamp = WorkbenchResourceHelper.computeModificationStamp(file);
-		return cachedStamp.longValue() == stamp;
-	}
-
-	/**
-	 * Cache the modification stamp of the <code>file</code>.
-	 * 
-	 * @param file
-	 */
-	private void cacheIgnored(IFile file) {
-		long stamp = WorkbenchResourceHelper.computeModificationStamp(file);
-		ignoredFilesCache.put(file, new Long(stamp));
-	}
-
-	public void enableAutoload(URI uri) {
-		URI normalized = resourceSet.getURIConverter().normalize(uri);
-		autoloadResourcesURIs.add(normalized);
-	}
-
-	public void disableAutoload(URI uri) {
-		URI normalized = resourceSet.getURIConverter().normalize(uri);
-		autoloadResourcesURIs.remove(normalized);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.internal.emfworkbench.ResourceSetWorkbenchSynchronizer#initialize()
-	 */
-	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/IValidateEditContext.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/IValidateEditContext.java
deleted file mode 100644
index e965900..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/IValidateEditContext.java
+++ /dev/null
@@ -1,30 +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 18, 2004
- */
-package org.eclipse.wst.common.internal.emfworkbench.validateedit;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
-
-
-/**
- * @author jlanuti This is the abstraction layer for validate edit
- */
-public interface IValidateEditContext extends ResourceStateValidatorPresenter {
-
-	public static final String CLASS_KEY = "ValidateEditContext"; //$NON-NLS-1$
-
-	public void setEditModel(EditModel fValidator);
-
-	public IStatus validateState(EditModel fValidator);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ResourceStateInputProvider.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ResourceStateInputProvider.java
deleted file mode 100644
index 4b8bc60..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ResourceStateInputProvider.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
- **************************************************************************************************/
-package org.eclipse.wst.common.internal.emfworkbench.validateedit;
-
-
-import java.util.List;
-
-public interface ResourceStateInputProvider {
-	/**
-	 * Return true if any of the controlled resources or files has been modified.
-	 * 
-	 * @return boolean
-	 */
-	boolean isDirty();
-
-	/**
-	 * Return a <code>List</code> of the MOF Resources that are being managed. Synchronization
-	 * checking will only work if you are using the emf.workbench plugin apis for loading resources.
-	 * This will ensure that you get an instance of a <code>ReferencedResource</code>. This
-	 * resource type is capable of caching its last known synchronization stamp that may be used to
-	 * test if the resource is consitent with the underlying IFile.
-	 * 
-	 * @return List
-	 */
-	List getResources();
-
-	/**
-	 * Return a <code>List</code> of IFiles that are not MOF Resources that are also being
-	 * modified.
-	 * 
-	 * @return List
-	 */
-	List getNonResourceFiles();
-
-	/**
-	 * Return a subset of the List from getNonResourceFiles() that are inconsistent with the
-	 * underlying java.io.File.
-	 * 
-	 * @return List
-	 * @see ResourceStateInputProvider#getNonResourceFiles()
-	 */
-	List getNonResourceInconsistentFiles();
-
-	/**
-	 * It is the responsibility of the provider to cache the synchronization stamp for the List of
-	 * <code>roNonResourceFiles</code>. This stamp will be used to determine the inconsistent
-	 * files. This is only necessary of IFiles that are not MOF resources.
-	 * 
-	 * @param roNonResourceFiles
-	 * @see ResourceStateInputProvider#getNonResourceInconsistentFiles()
-	 */
-	void cacheNonResourceValidateState(List roNonResourceFiles);
-}
-
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ResourceStateValidator.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ResourceStateValidator.java
deleted file mode 100644
index ef337c4..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ResourceStateValidator.java
+++ /dev/null
@@ -1,57 +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.internal.emfworkbench.validateedit;
-
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jem.util.plugin.JEMUtilPlugin;
-
-public interface ResourceStateValidator {
-	static final IStatus OK_STATUS = new Status(IStatus.OK, JEMUtilPlugin.ID, 0, "", null); //$NON-NLS-1$
-
-	/**
-	 * This method should be called whenever a <code>presenter</code> is activated (becomes
-	 * active). This will check the timestamps of the underlying files to see if they are different
-	 * from the last cached modified value. The <code>presenter</code> should be prepared to
-	 * prompt the user if they would like to refresh with the contents on disk if we are dirty.
-	 */
-	void checkActivation(ResourceStateValidatorPresenter presenter) throws CoreException;
-
-	/**
-	 * This method should be called whenever a <code>presenter</code> looses activation. This will
-	 * check the timestamps of the underlying files to see if they are different from the last
-	 * cached modified value. The <code>presenter</code> should be prepared to prompt the user if
-	 * they would like to refresh with the contents on disk if we are dirty.
-	 */
-	void lostActivation(ResourceStateValidatorPresenter presenter) throws CoreException;
-
-	/**
-	 * This method should be called the first time the files are about to be modified after a
-	 * <code>presenter</code> becomes active. The returned IStatus may have an ERROR status which
-	 * should be presented to the user.
-	 */
-	IStatus validateState(ResourceStateValidatorPresenter presenter) throws CoreException;
-
-	/**
-	 * This method should be called prior to the <code>presenter</code> saving the modified
-	 * contents. This will check the consistency of the underlying files to ensure that they are
-	 * synchronized. If true is returned, the save can proceed.
-	 */
-	boolean checkSave(ResourceStateValidatorPresenter presenter) throws CoreException;
-
-	/**
-	 * Return true if there are any read only files.
-	 */
-	boolean checkReadOnly();
-}
-
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
deleted file mode 100644
index 729443f..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ResourceStateValidatorImpl.java
+++ /dev/null
@@ -1,446 +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.internal.emfworkbench.validateedit;
-
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-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.IWorkspaceRunnable;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
-import org.eclipse.wst.common.internal.emf.resource.ReferencedResource;
-import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper;
-
-public class ResourceStateValidatorImpl implements ResourceStateValidator {
-	protected ResourceStateInputProvider provider;
-	protected Map lastNonRefreshStateMap;
-	protected boolean isCheckingConsistency;
-
-	class RefreshRunnable implements IWorkspaceRunnable {
-		CoreException thrownException;
-		List files;
-		List resources;
-
-		RefreshRunnable(List someFiles, List inconsistentResources) {
-			files = someFiles;
-			resources = inconsistentResources;
-		}
-
-		public CoreException getThrownException() {
-			return thrownException;
-		}
-
-		public void run(IProgressMonitor aMonitor) {
-			try {
-				prepareResourcesForRefresh(resources);
-				primRefreshFiles(files);
-			} catch (CoreException e) {
-				thrownException = e;
-			}
-		}
-	}
-
-	/**
-	 * Constructor for ResourceStateValidator.
-	 */
-	public ResourceStateValidatorImpl(ResourceStateInputProvider aProvider) {
-		provider = aProvider;
-	}
-
-	/**
-	 * This method should be called whenever <code>aListener</code> is activated (becomes active).
-	 * This will check the timestamps of the underlying files to see if they are different from the
-	 * last cached modified value. <code>aListener</code> should be prepared to prompt the user if
-	 * they would like to refresh with the contents on disk if we are dirty.
-	 */
-	public void checkActivation(ResourceStateValidatorPresenter presenter) throws CoreException {
-		checkConsistency(presenter);
-	}
-
-	public void lostActivation(ResourceStateValidatorPresenter presenter) throws CoreException {
-		checkConsistency(presenter);
-	}
-
-	public boolean checkSave(ResourceStateValidatorPresenter presenter) throws CoreException {
-		if (presenter == null)
-			return false;
-		if (!provider.isDirty())
-			return false;
-		List inconsistentResources = getInconsistentResources();
-		List inconsistentFiles = getFiles(inconsistentResources);
-		inconsistentFiles = addOtherInconsistentFiles(inconsistentFiles);
-		if (inconsistentFiles == null || inconsistentFiles.isEmpty())
-			return true;
-		return presenter.promptForInconsistentFileOverwrite(inconsistentFiles);
-	}
-
-	/**
-	 * @see ResourceStateValidator#checkReadOnly()
-	 */
-	public boolean checkReadOnly() {
-		boolean result = checkReadOnlyResources();
-		if (!result)
-			result = checkReadOnlyNonResourceFiles();
-		return result;
-	}
-
-	/**
-	 * Method checkReadOnlyNonResourceFiles.
-	 * 
-	 * @return boolean
-	 */
-	private boolean checkReadOnlyNonResourceFiles() {
-		List files = provider.getNonResourceFiles();
-		if (files == null || files.isEmpty())
-			return false;
-		int size = files.size();
-		IFile file = null;
-		for (int i = 0; i < size; i++) {
-			file = (IFile) files.get(i);
-			if (file.isReadOnly())
-				return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Method checkReadOnlyResources.
-	 * 
-	 * @return boolean
-	 */
-	private boolean checkReadOnlyResources() {
-		List resources = provider.getResources();
-		if (resources == null || resources.isEmpty())
-			return false;
-		int size = resources.size();
-		Resource res = null;
-		IFile file = null;
-		for (int i = 0; i < size; i++) {
-			res = (Resource) resources.get(i);
-			file = WorkbenchResourceHelper.getFile(res);
-			if (file != null && file.isReadOnly())
-				return true;
-		}
-		return false;
-	}
-
-	protected void checkConsistency(ResourceStateValidatorPresenter presenter) throws CoreException {
-		if (isCheckingConsistency || presenter == null)
-			return;
-		isCheckingConsistency = true;
-		try {
-			List inconsistentResources = getInconsistentResources();
-			List inconsistentFiles = getFiles(inconsistentResources);
-			inconsistentFiles = addOtherInconsistentFiles(inconsistentFiles);
-			if (inconsistentFiles == null || inconsistentFiles.isEmpty())
-				return;
-			boolean shouldRefreshFiles = true;
-			//Defect 208654 & 209631 want prompt no matter what.
-			if (anyFileChangedSinceLastRefreshPrompt(inconsistentFiles)) {
-				clearLastNonRefreshStateMap();
-				shouldRefreshFiles = presenter.promptForInconsistentFileRefresh(inconsistentFiles);
-			} else
-				return;
-			if (shouldRefreshFiles)
-				refreshFiles(inconsistentFiles, inconsistentResources);
-			else
-				cacheLastNonRefreshFileStamps(inconsistentFiles);
-		} finally {
-			isCheckingConsistency = false;
-		}
-	}
-
-	/**
-	 * Method cacheLastNonRefreshFileStamps.
-	 * 
-	 * @param inconsistentFiles
-	 */
-	private void cacheLastNonRefreshFileStamps(List inconsistentFiles) {
-		if (inconsistentFiles != null && !inconsistentFiles.isEmpty()) {
-			Map map = getLastNonRefreshStateMap();
-			IFile file = null;
-			long stamp = 0;
-			for (int i = 0; i < inconsistentFiles.size(); i++) {
-				file = (IFile) inconsistentFiles.get(i);
-				stamp = WorkbenchResourceHelper.computeModificationStamp(file);
-				map.put(file, new Long(stamp));
-			}
-		}
-	}
-
-	/**
-	 * Method cacheValidateState.
-	 * 
-	 * @param result
-	 */
-	private void cacheValidateState(IStatus aStatus, List readOnlyResources, List roNonResourceFiles) {
-		if (aStatus.isOK()) {
-			if (readOnlyResources != null && !readOnlyResources.isEmpty()) {
-				ReferencedResource res = null;
-				for (int i = 0; i < readOnlyResources.size(); i++) {
-					res = (ReferencedResource) readOnlyResources.get(i);
-					WorkbenchResourceHelper.setSynhronizationStamp(res, computeModificationStamp(res));
-				}
-			}
-			provider.cacheNonResourceValidateState(roNonResourceFiles);
-		}
-	}
-
-	private void clearLastNonRefreshStateMap() {
-		if (lastNonRefreshStateMap != null)
-			lastNonRefreshStateMap.clear();
-	}
-
-	/**
-	 * Method anyFileChangedSinceLastRefreshPrompt.
-	 * 
-	 * @param inconsistentFiles
-	 * @return boolean
-	 */
-	private boolean anyFileChangedSinceLastRefreshPrompt(List inconsistentFiles) {
-		if (inconsistentFiles == null || inconsistentFiles.isEmpty())
-			return false;
-		if (lastNonRefreshStateMap == null || lastNonRefreshStateMap.isEmpty())
-			return true;
-		int size = inconsistentFiles.size();
-		IFile file = null;
-		Long stamp = null;
-		for (int i = 0; i < size; i++) {
-			file = (IFile) inconsistentFiles.get(i);
-			stamp = (Long) getLastNonRefreshStateMap().get(file);
-			if (stamp == null || (stamp.longValue() != WorkbenchResourceHelper.computeModificationStamp(file)))
-				return true;
-		}
-		return false;
-	}
-
-	protected List addOtherInconsistentFiles(List inconsistentFiles) {
-		if (inconsistentFiles == null || inconsistentFiles.isEmpty())
-			return getNonResourceInconsistentFiles();
-		List nonResFiles = getNonResourceInconsistentFiles();
-		if (nonResFiles != null)
-			inconsistentFiles.addAll(nonResFiles);
-		return inconsistentFiles;
-	}
-
-	/**
-	 * Method getNonResourceInconsistentFiles.
-	 * 
-	 * @return List
-	 */
-	private List getNonResourceInconsistentFiles() {
-		List files = provider.getNonResourceInconsistentFiles();
-		if (files != null && !files.isEmpty())
-			return files;
-		//Determine consistency based on the synchronization of the IFile
-		files = provider.getNonResourceFiles();
-		if (files == null || files.isEmpty())
-			return Collections.EMPTY_LIST;
-		List inconsistent = null;
-		int size = files.size();
-		IFile file = null;
-		for (int i = 0; i < size; i++) {
-			file = (IFile) files.get(i);
-			if (file.isAccessible() && !file.isSynchronized(IResource.DEPTH_ZERO)) {
-				if (inconsistent == null)
-					inconsistent = new ArrayList();
-				inconsistent.add(file);
-			}
-		}
-		if (inconsistent == null)
-			inconsistent = Collections.EMPTY_LIST;
-		return inconsistent;
-	}
-
-	protected List getInconsistentResources() {
-		List mofResources = provider.getResources();
-		List inconsistent = null;
-		int size = mofResources.size();
-		Resource res = null;
-		ReferencedResource refRes = null;
-		for (int i = 0; i < size; i++) {
-			res = (Resource) mofResources.get(i);
-			if (WorkbenchResourceHelper.isReferencedResource(res)) {
-				refRes = (ReferencedResource) res;
-				if (!WorkbenchResourceHelper.isConsistent(refRes) && (refRes.isLoaded() && !refRes.isNew())) {
-					if (inconsistent == null)
-						inconsistent = new ArrayList();
-					inconsistent.add(refRes);
-				}
-			}
-		}
-		if (inconsistent == null)
-			inconsistent = Collections.EMPTY_LIST;
-		return inconsistent;
-	}
-
-	protected List getFiles(List refResources) {
-		List files = new ArrayList(refResources.size());
-		IFile file = null;
-		ReferencedResource refRes = null;
-		for (int i = 0; i < refResources.size(); i++) {
-			refRes = (ReferencedResource) refResources.get(i);
-			file = WorkbenchResourceHelper.getFile(refRes);
-			if (file != null)
-				files.add(file);
-		}
-		return files;
-	}
-
-	/**
-	 * This method should be called at least the first time a ResourceStateValidatorPresenter
-	 * becomes active and is about to edit its contents. The returned IStatus may have an ERROR
-	 * status which should be presented to the user.
-	 */
-	public IStatus validateState(ResourceStateValidatorPresenter presenter) throws CoreException {
-		List roResources, nonResROFiles, roFiles = null;
-		List[] readOnly = selectReadOnlyResources(provider.getResources());
-		roResources = readOnly[0];
-		roFiles = readOnly[1];
-		nonResROFiles = selectReadOnlyFiles(provider.getNonResourceFiles());
-		if (nonResROFiles != null) {
-			if (roFiles == null)
-				roFiles = nonResROFiles;
-			else
-				roFiles.addAll(nonResROFiles);
-		}
-		if (roFiles == null || roFiles.isEmpty())
-			return OK_STATUS;
-		IFile[] files = new IFile[roFiles.size()];
-		roFiles.toArray(files);
-		Object ctx = presenter != null ? presenter.getValidateEditContext() : null;
-		IStatus result = ResourcesPlugin.getWorkspace().validateEdit(files, ctx);
-		cacheValidateState(result, roResources, nonResROFiles);
-		if (!result.isOK())
-			checkConsistency(presenter);
-		return result;
-	}
-
-	/**
-	 * Method selectReadOnlyFiles.
-	 * 
-	 * @param list
-	 * @param roFiles
-	 */
-	private List selectReadOnlyFiles(List files) {
-		if (files == null || files.isEmpty())
-			return files;
-		int size = files.size();
-		List readOnly = null;
-		IFile file = null;
-		for (int i = 0; i < size; i++) {
-			file = (IFile) files.get(i);
-			if (file.isReadOnly()) {
-				if (readOnly == null)
-					readOnly = new ArrayList(size);
-				readOnly.add(file);
-			}
-		}
-		return readOnly;
-	}
-
-	/**
-	 * Method selectReadOnlyResources.
-	 * 
-	 * @param list
-	 * @param roFiles
-	 * @return List
-	 */
-	private List[] selectReadOnlyResources(List resources) {
-		if (resources == null || resources.isEmpty())
-			return new List[]{resources, null};
-		IFile file = null;
-		int size = resources.size();
-		Resource res = null;
-		List readOnly = null;
-		List roFiles = null;
-		for (int i = 0; i < size; i++) {
-			res = (Resource) resources.get(i);
-			file = WorkbenchResourceHelper.getFile(res);
-			if (file != null && file.isReadOnly()) {
-				if (readOnly == null)
-					readOnly = new ArrayList(size);
-				readOnly.add(res);
-				if (roFiles == null)
-					roFiles = new ArrayList(size);
-				roFiles.add(file);
-			}
-		}
-		return new List[]{readOnly, roFiles};
-	}
-
-	protected long computeModificationStamp(ReferencedResource resource) {
-		return WorkbenchResourceHelper.computeModificationStamp(resource);
-	}
-
-
-	protected void refreshFiles(List someFiles, List inconsitentResources) throws CoreException {
-		RefreshRunnable runnable = new RefreshRunnable(someFiles, inconsitentResources);
-		ResourcesPlugin.getWorkspace().run(runnable, null);
-		if (runnable.getThrownException() != null)
-			throw runnable.getThrownException();
-	}
-
-	protected void primRefreshFiles(List someFiles) throws CoreException {
-		int size = someFiles.size();
-		IFile file = null;
-		for (int i = 0; i < size; i++) {
-			file = (IFile) someFiles.get(i);
-			if (!file.isSynchronized(IResource.DEPTH_ZERO))
-				file.refreshLocal(IResource.DEPTH_ONE, null);
-			else
-				refreshResource(file);
-		}
-	}
-
-	/**
-	 * We need to remove the Resource that corresponds to the <code>file</code> to force a
-	 * refresh.
-	 */
-	protected void refreshResource(IFile file) {
-		Resource res = WorkbenchResourceHelperBase.getResource(file);
-		if (res != null)
-			res.unload();
-	}
-
-	/**
-	 * Force the resources to not be dirty to ensure that they will be removed from their
-	 * ResourceSet when their file is refreshed.
-	 */
-	protected void prepareResourcesForRefresh(List refResources) {
-		ReferencedResource res = null;
-		for (int i = 0; i < refResources.size(); i++) {
-			res = (ReferencedResource) refResources.get(i);
-			res.setForceRefresh(true);
-		}
-	}
-
-	/**
-	 * Gets the lastNonRefreshStateMap.
-	 * 
-	 * @return Returns a Map
-	 */
-	protected Map getLastNonRefreshStateMap() {
-		if (lastNonRefreshStateMap == null)
-			lastNonRefreshStateMap = new HashMap();
-		return lastNonRefreshStateMap;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ResourceStateValidatorPresenter.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ResourceStateValidatorPresenter.java
deleted file mode 100644
index 47545d3..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ResourceStateValidatorPresenter.java
+++ /dev/null
@@ -1,50 +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
- **************************************************************************************************/
-package org.eclipse.wst.common.internal.emfworkbench.validateedit;
-
-
-import java.util.List;
-
-import org.eclipse.core.runtime.IStatus;
-
-public interface ResourceStateValidatorPresenter {
-	/**
-	 * Present to the user that the <code>inconsistentFiles</code> will need to be refreshed in
-	 * the workbench. Return true if the refresh should occur. The List will be a list of IFiles.
-	 * 
-	 * @param inconsistentFiles
-	 * @return boolean
-	 */
-	boolean promptForInconsistentFileRefresh(List inconsistentFiles);
-
-	/**
-	 * Return the context (Shell) that would be passed to the validateEdit method. If this method
-	 * returns null, a prompt to check out code will not be presented to the user.
-	 * 
-	 * @see org.eclipse.core.resources.IWorkspace#validateEdit(org.eclipse.core.resources.IFile[],
-	 *      java.lang.Object)
-	 */
-	Object getValidateEditContext();
-
-	/**
-	 * Present a dialog to the user that indicates that the user is about to save and overwrite the
-	 * list of <code>inconsitentFiles</codes>.  Return true if
-	 * the overwrite should proceed.  The list of <code>inconsitentFiles</codes> will
-	 * be a list of IFiles. 
-	 * @param inconsistentFiles
-	 * @return boolean
-	 */
-	boolean promptForInconsistentFileOverwrite(List inconsistentFiles);
-
-	/**
-	 * This method should be called by any action that is about to edit any contents of any IFile.
-	 */
-	public IStatus validateState();
-}
-
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ValidateEditHeadlessContext.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ValidateEditHeadlessContext.java
deleted file mode 100644
index 11efe03..0000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ValidateEditHeadlessContext.java
+++ /dev/null
@@ -1,97 +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 18, 2004
- */
-package org.eclipse.wst.common.internal.emfworkbench.validateedit;
-
-import java.util.List;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
-
-
-/**
- * @author jlanuti Headless Validate Edit Context Implementation
- */
-public class ValidateEditHeadlessContext implements IValidateEditContext {
-
-	protected boolean fNeedsStateValidation = true;
-	protected boolean fMessageUp = false;
-	protected EditModel fValidator = null;
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.internal.emfworkbench.validateedit.IValidateEditContext#validateState()
-	 */
-	public IStatus validateState() {
-		// For now do nothing in headless state
-		return Status.OK_STATUS;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.internal.emfworkbench.validateedit.ResourceStateValidatorPresenter#getValidateEditContext()
-	 */
-	public Object getValidateEditContext() {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.internal.emfworkbench.validateedit.ResourceStateValidatorPresenter#promptForInconsistentFileOverwrite(java.util.List)
-	 */
-	public boolean promptForInconsistentFileOverwrite(List inconsistentFiles) {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.internal.emfworkbench.validateedit.ResourceStateValidatorPresenter#promptForInconsistentFileRefresh(java.util.List)
-	 */
-	public boolean promptForInconsistentFileRefresh(List inconsistentFiles) {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	/**
-	 * @see IValidateEditListener#setNeedsStateValidation(boolean)
-	 */
-	public void setNeedsStateValidation(boolean needsStateValidation) {
-		fNeedsStateValidation = needsStateValidation;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.internal.emfworkbench.validateedit.IValidateEditContext#setEditModel(org.eclipse.wst.common.internal.emfworkbench.integration.EditModel)
-	 */
-	public void setEditModel(EditModel fValidator) {
-		this.fValidator = fValidator;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.internal.emfworkbench.validateedit.IValidateEditContext#validateState(org.eclipse.wst.common.internal.emfworkbench.integration.EditModel)
-	 */
-	public IStatus validateState(EditModel editModel) {
-		setEditModel(editModel);
-		return validateState();
-	}
-}
\ 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/.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 66102b8..b4bf115 100644
--- a/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF
@@ -1,9 +1,9 @@
 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.1.61.qualifier
+Bundle-Version: 1.1.205.qualifier
 Bundle-Activator: org.eclipse.wst.common.componentcore.internal.ModulecorePlugin
 Bundle-Localization: plugin
 Export-Package: org.eclipse.wst.common.componentcore,
@@ -16,18 +16,19 @@
  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;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.wst.common.frameworks;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.emf.ecore;bundle-version="[2.2.0,2.3.0)",
- org.eclipse.wst.common.emfworkbench.integration;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.wst.common.emf;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,2.3.0)",
- org.eclipse.core.commands;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.emf.edit;bundle-version="[2.2.0,2.3.0)",
- org.eclipse.jem.util;bundle-version="[1.2.0,1.3.0)",
- org.eclipse.wst.common.uriresolver;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.wst.common.project.facet.core;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.wst.common.environment;bundle-version="[1.0.100,1.1.0)",
- org.eclipse.wst.validation;bundle-version="[1.1.0,1.2.0)"
+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 4ec5989..2199df3 100644
--- a/plugins/org.eclipse.wst.common.modulecore/about.html
+++ b/plugins/org.eclipse.wst.common.modulecore/about.html
@@ -10,7 +10,7 @@
 
 <H3>About This Content</H3>
 
-<P>May 2, 2006</P>
+<P>June, 2008</P>
 
 <H3>License</H3>
 
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 709cf5b..77cca57 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
@@ -11,10 +11,14 @@
 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;
@@ -28,12 +32,17 @@
 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.integration.EditModel;
 import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelListener;
 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
@@ -272,13 +281,22 @@
 	 *            {@see ModuleCoreNature}
 	 */
 	protected ArtifactEdit(ModuleCoreNature aNature, IVirtualComponent aModule, boolean toAccessAsReadOnly) {
-		if (toAccessAsReadOnly)
-			artifactEditModel = aNature.getArtifactEditModelForRead(ModuleURIUtil.fullyQualifyURI(aModule.getProject()), this);
-		else
-			artifactEditModel = aNature.getArtifactEditModelForWrite(ModuleURIUtil.fullyQualifyURI(aModule.getProject()), this);
+		
 		isReadOnly = toAccessAsReadOnly;
 		isArtifactEditModelSelfManaged = true;
 		project = aNature.getProject();
+		IProject aProject = aModule.getProject();
+		URI componentURI = ModuleURIUtil.fullyQualifyURI(aProject);
+		Map editModelParams = null;
+		if (getContentTypeDescriber() != null) {
+			editModelParams = new HashMap();
+			editModelParams.put(ArtifactEditModelFactory.PARAM_ROOT_URI, getRootURI());
+			editModelParams.put(ArtifactEditModelFactory.PARAM_ROOT_CONTENT_TYPE, getContentTypeDescriber());
+		}
+		if (toAccessAsReadOnly) 
+			artifactEditModel = aNature.getArtifactEditModelForRead(componentURI, this, null, editModelParams);
+		else 
+			artifactEditModel = aNature.getArtifactEditModelForWrite(componentURI, this, null, editModelParams);
 	}
 
 	/**
@@ -311,6 +329,25 @@
 		
 		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}.
@@ -332,24 +369,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)
+		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
+		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() {
 		
-		project = aProject;
+		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>
@@ -388,7 +483,7 @@
 	/**
 	 * Validate edit for resource state
 	 */
-	protected IStatus validateEdit() {
+	public IStatus validateEdit() {
 		IValidateEditContext validator = (IValidateEditContext) UIContextDetermination.createInstance(IValidateEditContext.CLASS_KEY);
 		return validator.validateState(getArtifactEditModel());
 	}
@@ -458,7 +553,7 @@
 	 */
 	public void dispose() {
 		if(isBinary()){
-			binaryComponentHelper.releaseAccess(this);
+			binaryComponentHelper.dispose();
 		} else if (isArtifactEditModelSelfManaged && artifactEditModel != null)
 			artifactEditModel.releaseAccess(this);
 	}
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 e6467b7..062a5e5 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,7 +16,6 @@
 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.wst.common.componentcore.internal.ComponentResource;
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
 import org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeNode;
@@ -25,7 +24,6 @@
 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;
@@ -56,7 +54,7 @@
 	 *            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 (aProject == null || !aProject.isAccessible()){
@@ -72,10 +70,30 @@
 	 * 
 	 * @param aProject
 	 *            A valid, accessible project to contain the component
+	 * @param checkForComponentFile
+	 *            A flag to indicate if the presence of the component file should be checked
+	 * @return A handle to an IVirtualComponent that may or may not exist or
+	 *         null if passed project does not contain ModuleCoreNature.
+	 * @see org.eclipse.core.runtime.IProgressMonitor#create(int, org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public static IVirtualComponent createComponent(IProject aProject, boolean checkForComponentFile) {
+		if (aProject == null || !aProject.isAccessible()){
+			return null;
+		}
+		return ComponentImplManager.instance().createComponent(aProject, checkForComponentFile);
+	}
+
+	/**
+	 * Return an IVirtualComponent with the given name (aComponentName)
+	 * contained by the given project (aProject). Component names should be
+	 * unique across a project.
+	 * 
+	 * @param aProject
+	 *            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.
 	 * @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);
@@ -89,7 +107,7 @@
 	 *            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 ComponentImplManager.instance().createArchiveComponent(aProject, aComponentName);
@@ -106,8 +124,8 @@
 	 *            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 ComponentImplManager.instance().createFolder(aProject, aRuntimePath);
@@ -127,7 +145,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);
@@ -145,7 +163,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);
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 017920f..a3704cf 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
@@ -13,6 +13,7 @@
 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.IProjectDescription;
 import org.eclipse.core.resources.IProjectNature;
@@ -31,15 +32,14 @@
 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.WTPModulesResourceFactory;
 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;
@@ -49,6 +49,7 @@
 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>
@@ -137,14 +138,15 @@
  * @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$
-    private ModuleStructuralModel cachedModel;
+    public static final String VALIDATION_BUILDER_ID = ValidationPlugin.VALIDATION_BUILDER_ID;
+    private ModuleStructuralModel cachedWriteHandle;
+    private ModuleStructuralModel cachedReadHandle;
 	/**
 	 * <p>
 	 * Find and return the ModuleCoreNature of aProject, if available.
@@ -165,8 +167,33 @@
 		}
 		return null;
 	}
+	// The existence of this Nature plus the component file on disk makes a flexible project
 	public static boolean isFlexibleProject(IProject project) {
-		return ModuleCoreNature.getModuleCoreNature(project) != null;
+		boolean foundNature = ModuleCoreNature.getModuleCoreNature(project) != null;
+		if (foundNature) {
+			return componentResourceExists(project);
+		}
+		return false;
+	}
+	public static boolean componentResourceExists(IProject project) {
+		
+		IFile compFile = project.getFile(StructureEdit.MODULE_META_FILE_NAME);
+		if (compFile.isAccessible())
+			return true;
+		else { //Need to check for legacy file locations also....
+			compFile = project.getFile(ModuleStructuralModel.R1_MODULE_META_FILE_NAME);
+			if (compFile.isAccessible())
+				return true;
+			else {
+				compFile = project.getFile(ModuleStructuralModel.R0_7_MODULE_META_FILE_NAME);
+				if (compFile.isAccessible())
+					return true;
+				else {
+					compFile = project.getFile(WTPModulesResourceFactory.FIRST_WTP_MODULES_SHORT_NAME);
+					return compFile.isAccessible();
+				}
+			}
+		}
 	}
 
 	/**
@@ -238,7 +265,20 @@
 	 * @return A {@see ModuleStructuralModel}for the project of the current nature.
 	 */
 	public ModuleStructuralModel getModuleStructuralModelForRead(Object anAccessorKey) {
-		return (ModuleStructuralModel) getEditModelForRead(ModuleStructuralModelFactory.MODULE_STRUCTURAL_MODEL_ID, anAccessorKey);
+		// Return self managed edit model - will always cache locally
+		ModuleStructuralModel editModel = (ModuleStructuralModel)getEmfContext().getExistingEditModel(ModuleStructuralModelFactory.MODULE_STRUCTURAL_MODEL_ID, null,true);
+		if (editModel == null) {
+			editModel = (ModuleStructuralModel)EditModelRegistry.getInstance().createEditModelForRead(ModuleStructuralModelFactory.MODULE_STRUCTURAL_MODEL_ID, getEmfContext(), null);
+			synchronized (editModel) {
+				getEmfContext().cacheEditModel(editModel, null);
+				editModel.access(anAccessorKey);
+			}
+		} else {
+			synchronized (editModel) {
+				editModel.access(anAccessorKey);
+			}
+		}
+		return editModel;
 	}
 
 	/**
@@ -264,14 +304,27 @@
 	 * @return A {@see ModuleStructuralModel}for the project of the current nature.
 	 */
 	public ModuleStructuralModel getModuleStructuralModelForWrite(Object anAccessorKey) {
-		return (ModuleStructuralModel) getEditModelForWrite(ModuleStructuralModelFactory.MODULE_STRUCTURAL_MODEL_ID, anAccessorKey);
+		// Return self managed edit model - will always cache locally
+		ModuleStructuralModel editModel = (ModuleStructuralModel)getEmfContext().getExistingEditModel(ModuleStructuralModelFactory.MODULE_STRUCTURAL_MODEL_ID, null,false);
+		if (editModel == null) {
+			editModel = (ModuleStructuralModel)EditModelRegistry.getInstance().createEditModelForWrite(ModuleStructuralModelFactory.MODULE_STRUCTURAL_MODEL_ID, getEmfContext(), null);
+			synchronized (editModel) {
+				getEmfContext().cacheEditModel(editModel, null);
+				editModel.access(anAccessorKey);
+			}
+		} else {
+			synchronized (editModel) {
+				editModel.access(anAccessorKey);
+			}
+		}
+		return editModel;
 	}
 
 	/**
 	 * <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>
@@ -296,7 +349,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>
 	 * 
@@ -317,7 +370,7 @@
 	 *            {@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);
@@ -372,8 +425,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>
@@ -399,7 +452,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>
 	 * 
@@ -420,7 +473,7 @@
 	 *            {@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);
@@ -496,11 +549,12 @@
 		// 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();
+		projectResourceSet.getSynchronizer().addExtender(this); // added so we can be informed of closes
+		cacheModuleStructuralModels();
 	}
 	
 	/**
-	 * @see EMFNature.primConfigure
+	 * @see org.eclipse.jem.util.emf.workbench.nature.EMFNature.primConfigure
 	 */
 	protected void primConfigure() throws CoreException {
 		super.primConfigure();
@@ -552,9 +606,11 @@
 		
 	}
 
-	private void cacheModuleStructuralModel() {
-		if (cachedModel == null)
-			cachedModel = getModuleStructuralModelForRead(this);
+	private void cacheModuleStructuralModels() {
+		if (cachedWriteHandle == null)
+			cachedWriteHandle = getModuleStructuralModelForWrite(this);
+		if (cachedReadHandle == null)
+			cachedReadHandle = getModuleStructuralModelForRead(this);
 	}
 
 	protected String getPluginID() {
@@ -567,9 +623,17 @@
 
 	public void shutdown() {
 		super.shutdown();
-		if (cachedModel != null) {
-			cachedModel.dispose();
-			cachedModel = null;
+		if (cachedWriteHandle != null) {
+			if (cachedWriteHandle.isDirty())
+				cachedWriteHandle.saveIfNecessary(this);
+			cachedWriteHandle.dispose();
+			cachedWriteHandle = null;
+		}
+		if (cachedReadHandle != null) {
+			if (cachedReadHandle.isDirty())
+				cachedReadHandle.saveIfNecessary(this);
+			cachedReadHandle.dispose();
+			cachedReadHandle = null;
 		}
 	}
 
@@ -579,9 +643,12 @@
 	 * @see org.eclipse.wst.common.internal.emfworkbench.ISynchronizerExtender#projectChanged(org.eclipse.core.resources.IResourceDelta)
 	 */
 	public void projectChanged(IResourceDelta delta) {
-		if (delta.getKind() == IResourceDelta.OPEN)
-			if (cachedModel == null)
-				cachedModel = getModuleStructuralModelForRead(this);
+		if (delta.getKind() == IResourceDelta.OPEN) {
+			if (cachedWriteHandle == null)
+				cachedWriteHandle = getModuleStructuralModelForWrite(this);
+			if (cachedReadHandle == null)
+				cachedReadHandle = getModuleStructuralModelForRead(this);
+		}
 	
 	}
 
@@ -591,10 +658,19 @@
 	 * @see org.eclipse.wst.common.internal.emfworkbench.ISynchronizerExtender#projectClosed()
 	 */
 	public void projectClosed() {
+//		StringBuffer buffer = new StringBuffer("Disposing Module models for project: ");
+//		buffer.append(this.getProject());
+//		System.out.println(buffer.toString());
 		this.emfContext = null;
-		if (cachedModel != null) {
-			cachedModel.dispose();
-			cachedModel = null;
+		if (cachedWriteHandle != null) {
+			if (cachedWriteHandle.isDirty())
+				cachedWriteHandle.saveIfNecessary(this);
+			cachedWriteHandle.dispose();
+			cachedWriteHandle = null;
+		}
+		if (cachedReadHandle != null) {
+			cachedReadHandle.dispose();
+			cachedReadHandle = null;
 		}
 	}
 
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 1300287..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
  *******************************************************************************/
@@ -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);
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 bf7c505..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,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
  *******************************************************************************/
@@ -15,12 +15,15 @@
 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;
@@ -36,10 +39,15 @@
 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.RuntimeManager;
 
@@ -62,6 +70,7 @@
 
 	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);
@@ -73,12 +82,65 @@
 
 	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);
@@ -222,8 +284,6 @@
 				} else {
 					event.getDataModel().removeListener(this);
 				}
-			} else if (event.getPropertyName().equals(IFacetDataModelProperties.FACET_VERSION)) {
-				getDataModel().notifyPropertyChange(FACET_RUNTIME, IDataModel.VALID_VALUES_CHG);
 			}
 		}
 
@@ -266,6 +326,30 @@
 				}
 			}
 		}
+		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);
 	}
 
@@ -292,7 +376,7 @@
 		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));
 		}
@@ -300,33 +384,40 @@
 	}
 
 	public DataModelPropertyDescriptor[] getValidPropertyDescriptors(String propertyName) {
-		if (FACET_RUNTIME.equals(propertyName)) {
-			Collection projectFacets = (Collection)getProperty(REQUIRED_FACETS_COLLECTION);
-			Set runtimes = RuntimeManager.getRuntimes();
-			ArrayList list = new ArrayList();
+		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();
 
-			for (Iterator it = runtimes.iterator(); it.hasNext();) {
-				IRuntime rt = (IRuntime) it.next();
+            for( IRuntime rt : RuntimeManager.getRuntimes() ) 
+            {
+                // add this runtime in the list only if it supports all of the required facets
 
-				// add this runtime in the list only if it supports all of the required facets
-				boolean supportsFactet = true;
-				for (Iterator facetIt = projectFacets.iterator(); facetIt.hasNext();) {
-					IProjectFacet facet = (IProjectFacet) facetIt.next();
-					if (!rt.supports(facet)) {
-						supportsFactet = false;
-						break;
-					}
-				}
-				if (supportsFactet) {
-					list.add(rt);
-				}
-			}
+                boolean supports = true;
+                
+                for( IProjectFacet facet : fixedFacets )
+                {
+                    if( ! rt.supports( facet ) )
+                    {
+                        supports = false;
+                        break;
+                    }
+                }
+                
+                if( supports ) 
+                {
+                    list.add(rt);
+                }
+            }
 
-			DataModelPropertyDescriptor[] descriptors = new DataModelPropertyDescriptor[list.size() + 1];
+            DataModelPropertyDescriptor[] descriptors = new DataModelPropertyDescriptor[list.size() + 1];
 			Iterator iterator = list.iterator();
 			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() {
@@ -344,11 +435,21 @@
 		return super.getValidPropertyDescriptors(propertyName);
 	}
 
-	public IStatus validate(String propertyName) {
-		if (FACET_PROJECT_NAME.equals(propertyName)) {
+	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 37f1403..0000000
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FlexibleProjectCreationDataModelProvider.java
+++ /dev/null
@@ -1,127 +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.DoNotUseMeThisWillBeDeletedPost15;
-import org.eclipse.wst.common.frameworks.internal.operations.IProjectCreationProperties;
-import org.eclipse.wst.common.frameworks.internal.operations.ProjectCreationDataModelProvider;
-
-/**
- * This has been slated for removal post WTP 1.5. Do not use this class/interface
- * 
- * @deprecated
- * 
- * @see FacetProjectCreationDataModelProvider
- */
-public class FlexibleProjectCreationDataModelProvider extends AbstractDataModelProvider implements IFlexibleProjectCreationDataModelProperties, DoNotUseMeThisWillBeDeletedPost15 {
-
-	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 09fbe2f..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
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 13137d7..0dec083 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
@@ -10,39 +10,32 @@
  *******************************************************************************/
 package org.eclipse.wst.common.componentcore.datamodel.properties;
 
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
-import org.eclipse.wst.common.frameworks.internal.DoNotUseMeThisWillBeDeletedPost15;
-
 public interface ICreateReferenceComponentsDataModelProperties {
 
 	/**
 	 * <p>
-	 * This required property is the {@link IVirtualComponent} which will reference the
-	 * {@link IVirtualComponent}s specified by {@link #TARGET_COMPONENT_LIST}.
+	 * 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 IVirtualComponent}s A, B, and C exist and references are required
+	 * 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 List} containing B and C.
+	 * {@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 List} containing the {@link IVirtualComponent}s that
-	 * will be referenced from the {@link IVirtualComponent} specified by {@link #SOURCE_COMPONENT}.
+	 * 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 "/"
+	 * Note: this is the default for the entire archive.  See {@link #TARGET_COMPONENTS_DEPLOY_PATH_MAP}
 	 */
 	public static final String TARGET_COMPONENTS_DEPLOY_PATH = "ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_DEPLOY_PATH"; //$NON-NLS-1$
 
@@ -58,20 +51,12 @@
 	public static final String TARGET_COMPONENTS_DEPLOY_PATH_MAP = "ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_DEPLOY_PATH_MAP"; //$NON-NLS-1$
 
 	/**
-	 * Optional, archive name for the dependent component, default is ""
-	 * 
-	 * @deprecated
-	 * @see DoNotUseMeThisWillBeDeletedPost15
-	 */
-	public static final String TARGET_COMPONENT_ARCHIVE_NAME = "ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_ARCHIVE_NAME"; //$NON-NLS-1$
-
-	/**
 	 * <p>
-	 * This optional property is the {@link Map} containing keys of {@link IVirtualComponent}s and
+	 * 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 IVirtualComponent} specified by the {@link #SOURCE_COMPONENT} property to lookup
-	 * the keyed {@link IVirtualComponent}. The {@link Set} of {@link IVirtualComponent}s in the
-	 * keys of this {@link Map} should have the same contents as the {@link List}.
+	 * 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 5f647cc..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
  *******************************************************************************/
@@ -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 c92d8c6..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
  *******************************************************************************/
@@ -17,6 +17,9 @@
 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
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 b101ec6..0000000
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFlexibleProjectCreationDataModelProperties.java
+++ /dev/null
@@ -1,48 +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.DoNotUseMeThisWillBeDeletedPost15;
-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
- */
-/**
- * This has been slated for removal post WTP 1.5. Do not use this class/interface
- * 
- * @deprecated
- * 
- * @see IFacetProjectCreationDataModelProperties
- */
-public interface IFlexibleProjectCreationDataModelProperties extends IProjectCreationProperties, DoNotUseMeThisWillBeDeletedPost15 {
-   
-    /**
-     * 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/datamodel/properties/IServerContextRootDataModelProperties.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IServerContextRootDataModelProperties.java
new file mode 100644
index 0000000..c939138
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IServerContextRootDataModelProperties.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.componentcore.internal.operation.ServerContextRootDataModelProvider;
+
+public interface IServerContextRootDataModelProperties {
+	/**
+	 * This field should not be used.  It is not part of the API and may be modified in the future.
+	 */
+	public static Class _provider_class = ServerContextRootDataModelProvider.class;
+
+	public static final String PROJECT = "IServerContextRootDataModelProperties.PROJECT"; //$NON-NLS-1$	
+	public static final String CONTEXT_ROOT = "IServerContextRootDataModelProperties.CONTEXT_ROOT"; //$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 199ee9e..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
@@ -66,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;
 
@@ -101,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>
@@ -154,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
@@ -168,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);
 	}
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
index bcade13..ea71b40 100644
--- 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
@@ -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
  *******************************************************************************/
@@ -13,7 +13,6 @@
 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.ArtifactEdit;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 
 public abstract class BinaryComponentHelper {
@@ -28,8 +27,6 @@
 		return component;
 	}
 
-	public abstract void releaseAccess(ArtifactEdit edit);
-
 	public abstract EObject getPrimaryRootObject();
 
 	public abstract Resource getResource(URI uri);
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 c9351db..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
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 e44eded..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
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
index f78f715..0372d3c 100644
--- 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
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * 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;
@@ -7,7 +17,6 @@
 import org.eclipse.core.runtime.jobs.ILock;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.xmi.XMIResource;
 import org.eclipse.wst.common.componentcore.ModuleCoreNature;
 import org.eclipse.wst.common.componentcore.internal.impl.WTPModulesResource;
@@ -60,10 +69,12 @@
 			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 {
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
index 2495975..1969f61 100644
--- 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
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * 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;
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 51558ab..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
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 75b0fdd..b974268 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
@@ -46,7 +46,6 @@
 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.ResourceStateValidator;
 import org.eclipse.wst.common.internal.emfworkbench.validateedit.ResourceStateValidatorPresenter;
 import org.eclipse.wst.common.project.facet.core.internal.FacetedProjectNature;
 /**
@@ -79,8 +78,8 @@
 */ 
 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 R0_7_MODULE_META_FILE_NAME = ".component";
+	public static final String R1_MODULE_META_FILE_NAME = ".settings/.component";
 	public static final String MODULE_CORE_ID = "moduleCoreId"; //$NON-NLS-1$ 
 	private static final String PROJECT_VERSION_1_5 = "1.5.0";
 	private boolean useOldFormat = false;
@@ -99,6 +98,8 @@
 	}
 	protected boolean removeResource(Resource aResource) {
 		if (aResource != null) {
+			//First checking if resource is loaded (Which will prevent removing in middle of loading by checking resource adapter lock)
+			aResource.isLoaded();
 			synchronized (aResource) {
 				aResource.eAdapters().remove(resourceAdapter);
 				return getResources().remove(aResource);
@@ -284,7 +285,7 @@
 		}
 	}
 	/**
-	 * @see ResourceStateValidator#checkActivation(ResourceStateValidatorPresenter)
+	 * @see org.eclipse.wst.common.internal.emfworkbench.validateedit.ResourceStateValidator#checkActivation(ResourceStateValidatorPresenter)
 	 */
 	public void checkActivation(ResourceStateValidatorPresenter presenter) throws CoreException {
 		super.checkActivation(presenter);
@@ -300,15 +301,15 @@
 		// 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) URI.createURI(StructureEdit.MODULE_META_FILE_NAME);
+		URI uri = URI.createURI(StructureEdit.MODULE_META_FILE_NAME);
 		WTPModulesResource res = (WTPModulesResource)getResource(uri);
 		if (res == null || !res.isLoaded()) {
 			removeResource(res);
-			uri = (URI) URI.createURI(R1_MODULE_META_FILE_NAME);
+			uri = URI.createURI(R1_MODULE_META_FILE_NAME);
 			res = (WTPModulesResource)getResource(uri);
 			if (res == null || !res.isLoaded()) {
 				removeResource(res);
-				uri = (URI) URI.createURI(R0_7_MODULE_META_FILE_NAME);
+				uri = URI.createURI(R0_7_MODULE_META_FILE_NAME);
 				res = (WTPModulesResource)getResource(uri);
 				if (res == null || !res.isLoaded()) {
 					removeResource(res);
@@ -368,4 +369,40 @@
 	public void setUseOldFormat(boolean useOldFormat) {
 		this.useOldFormat = useOldFormat;
 	}
+	
+	public void saveIfNecessary(IProgressMonitor monitor, Object accessorKey) {
+		// Always force save
+		super.save(monitor, accessorKey);
+	}
+	@Override
+	public void access(Object accessorKey) {
+		
+		super.access(accessorKey);
+//		StringBuffer buffer = new StringBuffer("Access Module model (");
+//		buffer.append(this.hashCode());
+//		buffer.append(") Project: ");
+//		buffer.append(this.getProject());
+//		if (isReadOnly())
+//			buffer.append(" R = "); //$NON-NLS-1$
+//		else
+//			buffer.append(" W = "); //$NON-NLS-1$
+//		buffer.append(getRegistry().size());
+//		System.out.println(buffer.toString());
+				
+	}
+	@Override
+	public void releaseAccess(Object accessorKey) {
+		
+		super.releaseAccess(accessorKey);
+//		StringBuffer buffer = new StringBuffer("Release Module model (");
+//		buffer.append(this.hashCode());
+//		buffer.append(") Project: ");
+//		buffer.append(this.getProject());
+//		if (isReadOnly())
+//			buffer.append(" R = "); //$NON-NLS-1$
+//		else
+//			buffer.append(" W = "); //$NON-NLS-1$
+//		buffer.append(getRegistry().size());
+//		System.out.println(buffer.toString());
+	}
 }
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 82eaa76..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
@@ -26,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.
@@ -170,4 +172,20 @@
 			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 8e83f55..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
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 774a705..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
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 27586f6..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
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 5095c07..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
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..04d8dcd
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphImpl.java
@@ -0,0 +1,464 @@
+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);
+			//[Bug 238685] need to lock on workspace to avoid dead lock
+			setRule(ResourcesPlugin.getWorkspace().getRoot());
+		}
+
+		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) {
+		Thread graphUpdateThread = graphUpdateJob.getThread();
+		if(graphUpdateThread != null && graphUpdateThread != Thread.currentThread()) {
+			try {
+				graphUpdateJob.join();
+			} catch (InterruptedException e) {
+				ModulecorePlugin.logError(e);
+			}
+		}
+			
+		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 4cf9dbd..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
@@ -10,268 +10,46 @@
  *******************************************************************************/
 package org.eclipse.wst.common.componentcore.internal.builder;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-
-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.Path;
-import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.componentcore.ComponentCore;
-import org.eclipse.wst.common.componentcore.internal.resources.VirtualArchiveComponent;
-import org.eclipse.wst.common.componentcore.internal.util.ComponentUtilities;
-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 class DependencyReference {
-		
-		public IProject componentProject;
-		public IProject targetProject;
-		
-		public DependencyReference(IProject target, IProject component) {
-			super();
-			componentProject=component;
-			targetProject=target;
-		}
-	}
 
 	private static DependencyGraphManager INSTANCE = null;
-	private static final String MANIFEST_URI = "META-INF/MANIFEST.MF";
-	private HashMap wtpModuleTimeStamps = null;
-	private HashMap manifestTimeStamps = null;
-	private long modStamp = System.currentTimeMillis();
-	
+
 	private DependencyGraphManager() {
 		super();
 	}
-	
+
 	public synchronized static final DependencyGraphManager getInstance() {
 		if (INSTANCE == null)
 			INSTANCE = new DependencyGraphManager();
 		return INSTANCE;
 	}
-	
+
 	public void construct(IProject project) {
-		if (project!=null && project.isAccessible() && getComponentFile(project) !=null) //$NON-NLS-1$
-			constructIfNecessary();
-	}
-
-	private IResource getComponentFile(IProject project) {
-		IResource componentFile = project.findMember(IModuleConstants.COMPONENT_FILE_PATH);
-		if (componentFile == null)
-			componentFile = project.findMember(IModuleConstants.R1_MODULE_META_FILE_PATH);
-		return componentFile;
-		
-	}
-	
-	private void constructIfNecessary() {
-		if (metadataChanged()) {
-			buildDependencyGraph();
-		}
-	}
-
-	private boolean metadataChanged() {
-		return moduleTimeStampsChanged() || manifestTimeStampsChanged();
-	}
-	
-	private boolean manifestTimeStampsChanged() {
-		HashMap workspaceTimeStamps = collectManifestTimeStamps();
-		if (timestampsMatch(getManifestTimeStamps(),workspaceTimeStamps))
-			return false;
-		return true;
-	}
-
-	private HashMap getManifestTimeStamps() {
-		if (manifestTimeStamps == null)
-			manifestTimeStamps = new HashMap();
-		return manifestTimeStamps;
-	}
-
-	private HashMap collectManifestTimeStamps() {
-		HashMap timeStamps = new HashMap();
-		IProject[] projects = ProjectUtilities.getAllProjects();
-		for (int i=0; i<projects.length; i++) {
-			IFile manifestFile = null;
-			if (projects[i]==null || !projects[i].isAccessible())
-				continue;
-			manifestFile = getTimeStampFile(projects[i]);
-			if (manifestFile != null && manifestFile.exists() && ComponentCore.createComponent(projects[i]) != null) {
-				Long currentTimeStamp = new Long(manifestFile.getModificationStamp());
-				timeStamps.put(projects[i],currentTimeStamp);
-			}
-		}
-		return timeStamps;
-	}
-	
-	/**
-	 * This returns the file used for time stamp purposes.  Typically this will be the manifest file.
-	 * @param p
-	 * @return
-	 */
-	private IFile getTimeStampFile(IProject p) {
-		IVirtualComponent component = ComponentCore.createComponent(p);
-		if(null == component){
-			return null;
-		}
-		if(component.isBinary()){
-			return ((VirtualArchiveComponent)component).getUnderlyingWorkbenchFile();
-		} else {
-			try {
-				IFile file = ComponentUtilities.findFile(component, new Path(MANIFEST_URI));
-				if (file != null)
-					return file;
-			} catch (CoreException ce) {
-				Logger.getLogger().log(ce);
-			}
-		}
-		return null;
-	}
-
-	private boolean moduleTimeStampsChanged() {
-		HashMap workspaceTimeStamps = collectModuleTimeStamps();
-		if (timestampsMatch(getWtpModuleTimeStamps(),workspaceTimeStamps))
-			return false;
-		return true;
-	}
-
-	private boolean timestampsMatch(HashMap savedTimeStamps, HashMap workspaceTimeStamps) {
-		return savedTimeStamps.equals(workspaceTimeStamps);
-		
-	}
-	
-	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 = getComponentFile(projects[i]); //$NON-NLS-1$
-			if (wtpModulesFile != null && wtpModulesFile.exists() && ComponentCore.createComponent(projects[i]) != null) {
-				Long currentTimeStamp = new Long(wtpModulesFile.getModificationStamp());
-				timeStamps.put(projects[i],currentTimeStamp);
-			}
-		}
-		return timeStamps;
-	}
-	
-	private void buildDependencyGraph() {
-		// Process and collect dependency references to add
-		List referencesToAdd = new ArrayList();
-		List componentProjects = new ArrayList();
-		IProject[] projects = ProjectUtilities.getAllProjects();
-		
-		for (int k=0; k<projects.length; k++) {
-			if (!projects[k].isAccessible() || getComponentFile(projects[k])==null) 
-				continue;
-			IVirtualComponent component= ComponentCore.createComponent(projects[k]);
-			if (component == null) continue;
-			referencesToAdd.addAll(getDependencyReferences(component));
-			componentProjects.add(projects[k]);
-		}
-		
-		//Update the actual graph/timestamps and block other threads here
-		synchronized (this) {
-			cleanDependencyGraph();
-			for (Iterator iter = componentProjects.iterator(); iter.hasNext();) {
-				IProject proj = (IProject) iter.next();
-				//For All projects (regardless if involved in references), update timestamps
-				addTimeStamp(proj);
-			}
-			for (int i=0; i<referencesToAdd.size(); i++) {
-				DependencyReference ref = (DependencyReference) referencesToAdd.get(i);
-				if (ref.targetProject == null || ref.componentProject == null || ref.targetProject.equals(ref.componentProject))
-					continue;
-				DependencyGraph.getInstance().addReference(ref.targetProject,ref.componentProject);
-			}
-		}
-	}
-	
-	private List getDependencyReferences(IVirtualComponent component) {
-		List refs = new ArrayList();
-		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();
-				refs.add(new DependencyReference(targetProject,componentProject));
-			}	
-		}
-		return refs;
-	}
-	
-	private boolean addTimeStamp(IProject project) {
-		// Get the .component file for the given project
-		IResource wtpModulesFile = getComponentFile(project);
-		if (wtpModulesFile==null)
-			return false;
-		Long currentTimeStamp = new Long(wtpModulesFile.getModificationStamp());
-		getWtpModuleTimeStamps().put(project,currentTimeStamp);
-		//		 Get the MANIFEST file for the given project
-		IResource manifestFile = getTimeStampFile(project);
-
-		if (manifestFile==null)
-			return false;
-		currentTimeStamp = new Long(manifestFile.getModificationStamp());
-		getManifestTimeStamps().put(project,currentTimeStamp);
-		return true;
-	}
-	
-	private void cleanDependencyGraph() {
-		DependencyGraph.getInstance().clear();
-		getWtpModuleTimeStamps().clear();
-		getManifestTimeStamps().clear();
-		setModStamp(System.currentTimeMillis());
+		// 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() {
-		buildDependencyGraph();
+		// do nothing
 	}
 
-	
 	public long getModStamp() {
-		return modStamp;
-	}
-
-	
-	private void setModStamp(long modStamp) {
-		this.modStamp = modStamp;
+		return IDependencyGraph.INSTANCE.getModStamp();
 	}
 
 	public boolean checkIfStillValid(long timeStamp) {
-		return (getModStamp() == timeStamp && !metadataChanged());
+		return IDependencyGraph.INSTANCE.getModStamp() == timeStamp;
 	}
-	
-	public boolean checkIfModuleTimeStampsStillValid(long timeStamp) {
-		return (getModStamp() == timeStamp && !moduleTimeStampsChanged());
-	}	
 }
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 f8582be..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
@@ -17,16 +17,15 @@
 
 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.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;
@@ -41,7 +40,7 @@
 public class ComponentCoreURIConverter extends CompatibilityWorkbenchURIConverterImpl {
 	
 	private IProject containingProject;
-	private IFolder archiveRoot;
+//	private IFolder archiveRoot;
 	/**
 	 *  
 	 */
@@ -98,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);
@@ -161,5 +160,36 @@
 		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/IResourceFactoryExtPtConstants.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/IResourceFactoryExtPtConstants.java
index 8d63f9c..c6e1e45 100644
--- 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
@@ -1,13 +1,13 @@
 /*******************************************************************************
- * 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
- *******************************************************************************/ 
+ *******************************************************************************/
 package org.eclipse.wst.common.componentcore.internal.impl;
 
 public interface IResourceFactoryExtPtConstants {
@@ -20,6 +20,14 @@
 	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$ 
+	
+	String ATT_OVERRIDES_FACTORY ="overridesFactoryClass"; //$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 71b0576..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 {
@@ -129,8 +139,9 @@
 	public static URI trimToDeployPathSegment(URI aFullyQualifiedModuleResourcePath) {
 		int segmentCount = aFullyQualifiedModuleResourcePath.segmentCount();
 		URI uri;
-		if(segmentCount > 4){
-			uri = aFullyQualifiedModuleResourcePath.deresolve(aFullyQualifiedModuleResourcePath.trimSegments(segmentCount - 4));
+		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));
 		}
@@ -160,6 +171,9 @@
 	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);
@@ -188,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/ReferencedComponentImpl.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ReferencedComponentImpl.java
index 9f97403..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.3 2006/03/27 21:49:41 vbhadrir Exp $
+ * $Id: ReferencedComponentImpl.java,v 1.4 2007/02/14 16:00:52 jsholl Exp $
  */
 package org.eclipse.wst.common.componentcore.internal.impl;
 
@@ -217,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));
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 1baafac..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
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 1a42a88..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
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 eee6cce..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
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 3865a93..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
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 3e254f2..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
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 89fe082..8c1136d 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,20 +10,40 @@
  *******************************************************************************/
 package org.eclipse.wst.common.componentcore.internal.impl;
 
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Comparator;
+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.core.runtime.jobs.ILock;
 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;
+import org.eclipse.wst.common.internal.emfworkbench.edit.EMFWorkbenchEditContextFactory;
 
 /**
  * <p>
@@ -47,19 +67,45 @@
 		return WTPResourceFactoryRegistry.INSTANCE.getFactory(uri);	
 	}   
 
-	public synchronized Resource.Factory getFactory(URI uri) {
-		
-		Resource.Factory resourceFactory = null;
-		if(uri != null && uri.lastSegment() != null) {
-			ResourceFactoryDescriptor descriptor = getDescriptor(uri);
-			
-			if(descriptor != null) {
-				resourceFactory = getFactory(descriptor);	
-			}	
+	public Resource.Factory getFactory(URI uri, IContentDescription description) {
+		IProject componentProject = null;
+		try {
+			componentProject = StructureEdit.getContainingProject(uri);
+		} catch (UnresolveableURIException e) {
+			// don't do anything
 		}
-		if(resourceFactory == null)
-			resourceFactory = super.getFactory(uri);
-		return resourceFactory; 
+		ILock lock = EMFWorkbenchEditContextFactory.getProjectLockObject(componentProject);
+		try{
+			if(null != lock){
+				lock.acquire();
+			}
+			synchronized(this){
+				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;
+			}
+		} finally{
+			if(null != lock){
+				lock.release();
+			}
+		} 
+	}
+	
+	public Resource.Factory getFactory(URI uri) {
+		return getFactory(uri, (IContentDescription)null);
 	}	
 
 
@@ -86,6 +132,18 @@
 		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();
+		if(descriptor instanceof ConfigurationResourceFactoryDescriptor){
+			ConfigurationResourceFactoryDescriptor configurationDescriptor = (ConfigurationResourceFactoryDescriptor)descriptor;
+			key.factoryClassName = configurationDescriptor.getFactoryClassName();
+			key.overridesFactoryClassName = configurationDescriptor.getOverridesFactoryClassName();
+		}
+		return key;
+	}
 	
 	/**
 	 * Declares a subclass to create Resource.Factory(ies) from an extension. 
@@ -93,6 +151,10 @@
 	private class ConfigurationResourceFactoryDescriptor extends ResourceFactoryDescriptor  implements IResourceFactoryExtPtConstants {
 		
 		private String shortSegment;
+		private IContentType contentType;
+		private boolean isDefault = true;
+		private String factoryClassName = null;
+		private String overridesFactoryClassName = null;
 		private final IConfigurationElement element; 
 		
 		public ConfigurationResourceFactoryDescriptor(IConfigurationElement ext) throws CoreException {
@@ -101,22 +163,52 @@
 			init();
 		} 
 		
+		public String getOverridesFactoryClassName() {
+			return overridesFactoryClassName;
+		}
+
+		public String getFactoryClassName() {
+			return factoryClassName;
+		}
+
 		private void init() throws CoreException {
 			shortSegment = element.getAttribute(ATT_SHORT_SEGMENT);
-			if(shortSegment == null || shortSegment.trim().length() == 0)
+			
+			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);
+			}
+			
+			if ((shortSegment == null || shortSegment.trim().length() == 0)
+						&& contentType == null) {
 				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));
+										"Either the shortSegment attribute or the contentType element of " //$NON-NLS-1$
+										+ TAG_RESOURCE_FACTORY 
+										+ " must be specified in " 
+										+ element.getNamespaceIdentifier()
+										+ ".  The shortSegment attribute is specified with a valid, non-null, " //$NON-NLS-1$
+										+ "non-empty value, and the contentType element is specified with a " //$NON-NLS-1$
+										+ "valid, non-null, non-empty contentTypeId." //$NON-NLS-1$
+										, null));
+			}
 			
+			if ("false".equals(element.getAttribute(ATT_ISDEFAULT)))
+				isDefault = false;
+				
+            factoryClassName = element.getAttribute(ATT_CLASS);
+			overridesFactoryClassName = element.getAttribute(ATT_OVERRIDES_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)
+			// Not sure where this is actually used, so not sure what the proper 
+			// implementation should be, so simply checking the short segment for now
+			if (fileURI != null && fileURI.lastSegment() != null && shortSegment != null) {
 				return shortSegment.equals(fileURI.lastSegment());
+			}
 			return false;
 		} 
 		
@@ -141,8 +233,40 @@
 
 		public String getShortSegment() {
 			return shortSegment;
-		}  
-	}  
+		}
+
+		public IContentType getContentType() {
+			return contentType;
+		}
+
+		public boolean isDefault() {
+			return isDefault;
+		}
+		
+		public int hashCode() {
+			int hashCode = 0;
+			if (getContentType() != null) {
+				hashCode |= getContentType().hashCode();
+			}
+			if (getShortSegment() != null) {
+				hashCode |= getShortSegment().hashCode();
+			}
+			return hashCode;
+		}
+		
+		public boolean equals(Object o) {
+			if (! (o instanceof ResourceFactoryDescriptor)) {
+				return false;
+			}
+			ResourceFactoryDescriptor rfdo = (ResourceFactoryDescriptor) o;
+			boolean equals = true;
+			equals &= (getContentType() == null) ? rfdo.getContentType() == null :
+				getContentType().equals(rfdo.getContentType());
+			equals &= (getShortSegment() == null) ? rfdo.getShortSegment() == null :
+				getShortSegment().equals(rfdo.getShortSegment());
+			return equals;
+		}
+	}
 	 
 	
 	private class ResourceFactoryRegistryReader extends RegistryReader implements IResourceFactoryExtPtConstants { 
@@ -172,4 +296,194 @@
 			}	
 		}
 	}
+	private class WTPResourceFactoryRegistryKey { 
+ 		
+		public String overridesFactoryClassName;
+		public String factoryClassName;
+		public String shortName;
+		public IContentType type;
+		public boolean isDefault = true;
+		public WTPResourceFactoryRegistryKey() {
+			super();
+		}
+		
+		/**
+		 * Sort in the following manner:
+		 * First, sort by shortName, if shortName is null, then it comes last
+		 * If shortNames are equal, then sort by isDefault
+		 * If isDefault is also equal, then the one defining a factoryClassName wins
+		 * If both have factoryClassNames, then check to see if one overrides the other via overridesFactoryClassName
+		 * If neither override the other factory class, then sort by factoryClassname
+		 * @param other
+		 * @return
+		 */
+		public int compareTo(WTPResourceFactoryRegistryKey other){
+			if(this == other){
+				return 0;
+			}
+			if(shortName == null && other.shortName == null){
+				return 0;
+			} else if(shortName == null){
+				return 1;
+			} else if(other.shortName == null){
+				return -1;
+			}
+			
+			int shortNameCompare = this.shortName.compareTo(other.shortName);
+			if(shortNameCompare != 0){
+				return shortNameCompare;
+			} else {
+				if(this.isDefault != other.isDefault){
+					if(this.isDefault){
+						return -1;
+					} else {
+						return 1;
+					}
+				} else {
+					if(this.factoryClassName == null && other.factoryClassName == null){
+						return 0;
+					} else if(other.factoryClassName == null){
+						return -1;
+					} else if (this.factoryClassName == null){
+						return 1;
+					} else if(other.factoryClassName.equals(this.overridesFactoryClassName)){
+						return -1;
+					} else if(this.factoryClassName.equals(other.overridesFactoryClassName)){
+						return 1;
+					} else {
+						return this.factoryClassName.compareTo(other.factoryClassName);
+					}	
+				}
+			}
+		}
+	}
+
+	protected void addDescriptor(ResourceFactoryDescriptor descriptor) {
+		getDescriptors().put(getKey(descriptor), descriptor);
+	}
+	
+	private WTPResourceFactoryRegistryKey []  sortedDescriptors = null;
+	
+	private WTPResourceFactoryRegistryKey []  getSortedDescriptorKeys() {
+		if(sortedDescriptors == null || sortedDescriptors.length != getDescriptors().size()){
+			Set keys = getDescriptors().keySet();
+			WTPResourceFactoryRegistryKey [] array = new WTPResourceFactoryRegistryKey [keys.size()];
+			int count = 0;
+			for (Iterator iterator = keys.iterator(); iterator.hasNext();count++) {
+				WTPResourceFactoryRegistryKey key = (WTPResourceFactoryRegistryKey) iterator.next();
+				array[count] = key;
+			}
+			Arrays.sort(array, new Comparator<WTPResourceFactoryRegistryKey>() {
+				public int compare(WTPResourceFactoryRegistryKey key1,
+						WTPResourceFactoryRegistryKey key2) {
+					return key1.compareTo(key2);
+				}
+			});
+			sortedDescriptors = array;
+		}
+		return sortedDescriptors;
+	}
+
+	protected synchronized ResourceFactoryDescriptor getDescriptor(URI uri, IContentDescription description) {
+		WTPResourceFactoryRegistryKey [] keys = getSortedDescriptorKeys();
+		ResourceFactoryDescriptor defaultDescriptor = null;
+		
+		// first check content type
+		if (description != null) {
+			for (WTPResourceFactoryRegistryKey key : keys) {
+				ResourceFactoryDescriptor descriptor = (ResourceFactoryDescriptor) getDescriptors().get(key);
+				
+				if ((key.type != null) && (description.getContentType().equals(key.type))) {
+					if ((defaultDescriptor == null) || (key.isDefault)) {
+						defaultDescriptor = descriptor;
+					}
+				}
+			}
+		}
+		
+		// then check short name, overriding default if necessary
+		for (WTPResourceFactoryRegistryKey key : keys) {
+			ResourceFactoryDescriptor descriptor = (ResourceFactoryDescriptor) getDescriptors().get(key);
+						
+			if ((key.shortName != null) && (uri.lastSegment().equals(key.shortName))) {
+				if ((defaultDescriptor == null) 
+						|| ((description == null) && (key.isDefault))) {
+					defaultDescriptor = descriptor;
+				}
+			}
+		}
+		
+		return defaultDescriptor;
+	}
+	
+	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 940ca63..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,15 +2,13 @@
  * <copyright>
  * </copyright>
  *
- * $Id: WorkbenchComponentImpl.java,v 1.12.2.1 2006/09/28 17:01:20 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.Iterator;
 import java.util.List;
-import java.util.Map;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IPath;
@@ -187,14 +185,14 @@
 	 */
 	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;
 	
@@ -254,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());
 		}
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 b713cde..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
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 ea7575c..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
@@ -114,7 +114,6 @@
 	 * Validate edit for resource state
 	 */
 	protected IStatus validateEdit() {
-		IStatus status = OK_STATUS;
 		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 1202171..0000000
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ComponentCreationDataModelProvider.java
+++ /dev/null
@@ -1,247 +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.FacetProjectCreationDataModelProvider;
-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.DoNotUseMeThisWillBeDeletedPost15;
-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
- */
-/**
- * This has been slated for removal post WTP 1.5. Do not use this class/interface
- * 
- * @deprecated
- * 
- * @see FacetProjectCreationDataModelProvider
- */
-public abstract class ComponentCreationDataModelProvider extends AbstractDataModelProvider implements IComponentCreationDataModelProperties, DoNotUseMeThisWillBeDeletedPost15 {
-
-	// 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 769c2dd..0000000
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ComponentCreationOperation.java
+++ /dev/null
@@ -1,105 +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;
-import org.eclipse.wst.common.frameworks.internal.DoNotUseMeThisWillBeDeletedPost15;
-
-
-/**
- * This has been slated for removal post WTP 1.5. Do not use this class/interface
- * 
- * @deprecated
- * 
- * @see FacetProjectCreationOperation
- */
-public abstract class ComponentCreationOperation extends AbstractDataModelOperation implements IComponentCreationDataModelProperties, DoNotUseMeThisWillBeDeletedPost15 {
-
-    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 1e9d5ba..3967a2a 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
@@ -12,7 +12,6 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -32,7 +31,6 @@
 		propertyNames.add(TARGET_COMPONENT_LIST);
 		propertyNames.add(TARGET_COMPONENTS_DEPLOY_PATH);
 		propertyNames.add(TARGET_COMPONENTS_DEPLOY_PATH_MAP);
-		propertyNames.add(TARGET_COMPONENT_ARCHIVE_NAME);
 		propertyNames.add(TARGET_COMPONENTS_TO_URI_MAP);
 		return propertyNames;
 	}
@@ -57,12 +55,6 @@
 			return new ArrayList();
 		else if (propertyName.equals(TARGET_COMPONENTS_DEPLOY_PATH)){
 			return "/"; //$NON-NLS-1$
-		} else if (propertyName.equals(TARGET_COMPONENT_ARCHIVE_NAME)){
-			List components = (List) getProperty(TARGET_COMPONENT_LIST);
-			if(components.size() == 0){
-				Map map = (Map)getProperty(TARGET_COMPONENTS_TO_URI_MAP);
-				map.put(components.get(0), getProperty(propertyName));	
-			}
 		}
 		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 955fdee..dfcc622 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
@@ -58,20 +58,22 @@
 		IStatus status = OK_STATUS;
 		IValidateEditContext validator = (IValidateEditContext) UIContextDetermination.createInstance(IValidateEditContext.CLASS_KEY);
 		IVirtualComponent sourceComp = (IVirtualComponent) model.getProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT);
-		final IProject project = sourceComp.getProject();
-		StructureEdit sEdit = null;
-		try {
-			sEdit = StructureEdit.getStructureEditForWrite(project);
-			status = validator.validateState(sEdit.getModuleStructuralModel());
-		} finally {
-			if (sEdit != null)
-				sEdit.dispose();
+		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;
 	}
 
@@ -97,7 +99,7 @@
 		IVirtualComponent sourceComp = (IVirtualComponent) model.getProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT);
 		List vlist = new ArrayList();
 		List modList = (List) model.getProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_LIST);
-		Map modDeployPathList = (Map) model.getProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_DEPLOY_PATH_MAP);
+		Map modDeployPathMap = (Map) model.getProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_DEPLOY_PATH_MAP);
 		String deployPathStr = model.getStringProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_DEPLOY_PATH);
 		IPath deployPath = null;
 		IPath archiveDeployPath = null;
@@ -108,7 +110,7 @@
 			IVirtualComponent comp = (IVirtualComponent) modList.get(i);
 			if (!srcComponentContainsReference(sourceComp, comp, deployPath)) {
 				IVirtualReference ref = ComponentCore.createReference(sourceComp, comp);
-				deployPathStr = (String)modDeployPathList.get(comp);
+				deployPathStr = (String)modDeployPathMap.get(comp);
 				if (deployPathStr != null)
 				{
 					archiveDeployPath = new Path(deployPathStr);
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 5873c52..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,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
  *******************************************************************************/
@@ -32,6 +32,7 @@
 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;
@@ -101,7 +102,7 @@
 			}
 			if (runtimeAdded) {
 				IRuntime runtime = (IRuntime) model.getProperty(IFacetProjectCreationDataModelProperties.FACET_RUNTIME);
-				addDefaultFacets(facetProj, runtime.getDefaultFacets(fixedFacets));
+				addDefaultFactets(facetProj, runtime);
 			}
 
 		} catch (CoreException e) {
@@ -150,14 +151,13 @@
 	}
 	
 	public static void addDefaultFactets(IFacetedProject facetProj, IRuntime runtime) throws ExecutionException {
-		try {
+		
 			if (runtime != null) {
-				addDefaultFacets(facetProj, runtime.getDefaultFacets(facetProj.getFixedProjectFacets()));
+				final IFacetedProjectWorkingCopy fpjwc = facetProj.createWorkingCopy();
+				Set<IProjectFacetVersion> presetFacets = fpjwc.getDefaultConfiguration().getProjectFacets();
+				addDefaultFacets(facetProj, presetFacets);
 			}
-		} catch (CoreException e) {
-			Logger.getLogger().logError(e);
-			throw new ExecutionException(e.getMessage(), e);
-		}
+		
 	}
 
 }
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 460b068..0000000
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/FlexibleProjectCreationOperation.java
+++ /dev/null
@@ -1,101 +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.FacetProjectCreationDataModelProvider;
-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.DoNotUseMeThisWillBeDeletedPost15;
-import org.eclipse.wst.common.frameworks.internal.WTPProjectUtilities;
-
-/**
- * This has been slated for removal post WTP 1.5. Do not use this class/interface
- * 
- * @deprecated
- * 
- * @see FacetProjectCreationDataModelProvider
- */
-public class FlexibleProjectCreationOperation extends AbstractDataModelOperation implements DoNotUseMeThisWillBeDeletedPost15{
-
-    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 68e14fd..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();
@@ -44,6 +42,4 @@
 		return OK_STATUS;
 	}
 
-	
-
 }
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 468f142..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
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ServerContextRootDataModelProvider.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ServerContextRootDataModelProvider.java
new file mode 100644
index 0000000..01ded49
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ServerContextRootDataModelProvider.java
@@ -0,0 +1,39 @@
+package org.eclipse.wst.common.componentcore.internal.operation;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Set;
+
+import org.eclipse.wst.common.componentcore.datamodel.properties.IServerContextRootDataModelProperties;
+import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelProvider;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
+
+public class ServerContextRootDataModelProvider 
+ extends AbstractDataModelProvider
+ implements IServerContextRootDataModelProperties{
+
+	public ServerContextRootDataModelProvider(){
+		super();
+	}
+
+	public Set getPropertyNames() {
+		Set names = super.getPropertyNames();
+		names.add(PROJECT);
+		names.add(CONTEXT_ROOT);
+		return names;
+	}
+	
+	public IDataModelOperation getDefaultOperation() {
+		return new ServerContextRootUpdateOperation(model);
+	}
+	
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ServerContextRootUpdateOperation.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ServerContextRootUpdateOperation.java
new file mode 100644
index 0000000..962b731
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ServerContextRootUpdateOperation.java
@@ -0,0 +1,45 @@
+package org.eclipse.wst.common.componentcore.internal.operation;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.datamodel.properties.IServerContextRootDataModelProperties;
+import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+
+public class ServerContextRootUpdateOperation 
+ extends  AbstractDataModelOperation 
+ implements IServerContextRootDataModelProperties{
+	
+
+	public ServerContextRootUpdateOperation(IDataModel model) {
+		super(model);
+	}
+
+	public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		IProject project = (IProject)model.getProperty( IServerContextRootDataModelProperties.PROJECT );
+		String contextRoot = model.getStringProperty( IServerContextRootDataModelProperties.CONTEXT_ROOT );
+		if (contextRoot != null) {
+			IVirtualComponent comp = ComponentCore.createComponent(project);
+			comp.setMetaProperty(IModuleConstants.CONTEXTROOT, contextRoot);	
+		}
+		return OK_STATUS;
+	}
+
+}
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
index 6182b44..47710ab 100644
--- 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
@@ -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.componentcore.internal.resources;
 
 import java.util.HashMap;
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 0e5410a..0d66c2f 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
@@ -16,7 +16,6 @@
 
 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;
@@ -36,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;
@@ -61,7 +64,7 @@
 			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);
@@ -240,12 +243,10 @@
 			IFile file = getProject().getFile(archivePath);
 			if(file.exists())
 				loc  = file.getLocation();
-			else {
-				if( archivePath.segmentCount() >= 2 ){
-					file = ResourcesPlugin.getWorkspace().getRoot().getFile(archivePath);
-					if(file.exists())
-						loc = file.getLocation();
-				}
+			else if(archivePath.segmentCount() > 1) {
+				file = ResourcesPlugin.getWorkspace().getRoot().getFile(archivePath);
+				if(file.exists())
+					loc = file.getLocation();
 			}
 			// this is a file on the local filesystem
 			if(loc != null)  
@@ -258,7 +259,7 @@
 		File diskFile = new File(osPath);
 		return diskFile;
 	}
-
+	
 	public String toString() {
 		if(archivePath != null){
 			return componentProject + " " +archivePath;
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 a196265..104db30 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
@@ -14,6 +14,7 @@
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 
 import org.eclipse.core.resources.IProject;
@@ -113,7 +114,7 @@
                 	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.getDefault().logError(IStatus.ERROR, message, null);
+                		ModulecorePlugin.logError(IStatus.ERROR, message, null);
                 	}
                     props.setProperty(name, value);
                 }
@@ -205,9 +206,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();
@@ -265,6 +268,10 @@
 		}
 	}	
 
+	public IVirtualReference[] getReferences(Map<String, Object> options) {
+		return getReferences();
+	}
+	
 	public IVirtualReference[] getReferences() { 
 		StructureEdit core = null;
 		List references = new ArrayList();
@@ -322,7 +329,9 @@
 				referencedComponent.setArchiveName(references[i].getArchiveName());
 			}
 			//clean up any old obsolete references
-			cleanUpReferences(component);	
+			if (component != null){
+				cleanUpReferences(component);
+			}
 		} finally {
 			if(core != null) {
 				core.saveIfNecessary(null);
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 eb9cde6..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
@@ -18,7 +18,6 @@
 
 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.resources.ResourcesPlugin;
@@ -32,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;
@@ -122,14 +122,14 @@
 	}
 
 	/**
-	 * @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 ComponentCore.createFolder(getProject(), getRuntimePath().append(name));
@@ -156,7 +156,10 @@
 		List virtualResources = new ArrayList(); // result
 		Set allNames = new HashSet();
 		// Ignore all meta data paths in the virtual container resource set
-		IPath[] metaPaths = getComponent().getMetaResources();
+		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)
@@ -240,7 +243,7 @@
 	}
 
 	/**
-	 * @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 {
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 57480a2..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;
@@ -42,7 +41,7 @@
 	}
 
 	/**
-	 * @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 {
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 272cbb4..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
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 c5ec204..5f637f9 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
@@ -45,7 +45,7 @@
 	private static final String EMPTY_STRING = ""; //$NON-NLS-1$
 	private IVirtualComponent component;
 	private String resourceType;
-	
+
 	private final ResourceTimestampMappings mapping = new ResourceTimestampMappings();
 
 
@@ -70,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();
@@ -82,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;
@@ -112,11 +114,12 @@
 	}
 
 	public IPath[] getProjectRelativePaths() {
- 
+
 		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.
+			// still need some sort of loop here to search subpieces of the
+			// runtime path.
 			ComponentResource[] componentResources = null;
 
 			if (root != null) {
@@ -124,29 +127,32 @@
 				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);
-				} while (estimatedPaths.length==0 && canSearchContinue(componentResources, searchPath));
-				if (estimatedPaths==null || estimatedPaths.length==0)
-					return new IPath[] {getRuntimePath()};
+				}
+				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("/"))) { 
+	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);
 	}
@@ -164,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;
@@ -174,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();
 	}
@@ -192,8 +198,8 @@
 			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 ComponentCore.createFolder(getProject(), getRuntimePath().removeLastSegments(1));
@@ -241,25 +247,25 @@
 	}
 
 	public void setResourceType(String aResourceType) {
-		resourceType = aResourceType; 
+		resourceType = aResourceType;
 		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) { 
+		if (null == resourceType) {
 			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;
@@ -281,48 +287,58 @@
 		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;
 		try {
 			moduleCore = StructureEdit.getStructureEditForWrite(getProject());
 			WorkbenchComponent component = moduleCore.getComponent();
-			ResourceTreeRoot root = ResourceTreeRoot.getDeployResourceTreeRoot(component);
-			ComponentResource[] resources = root.findModuleResources(getRuntimePath(), ResourceTreeNode.CREATE_NONE);
-			if (resources.length > 0) {
-				for (int resourceIndx = 0; resourceIndx < resources.length; resourceIndx++) {
-					if (aProjectRelativeLocation.makeAbsolute().equals(resources[resourceIndx].getSourcePath())) {
-						component.getResources().remove(resources[resourceIndx]);
+			if (component != null) {
+				ResourceTreeRoot root = ResourceTreeRoot.getDeployResourceTreeRoot(component);
+				ComponentResource[] resources = root.findModuleResources(getRuntimePath(), ResourceTreeNode.CREATE_NONE);
+				if (resources.length > 0) {
+					for (int resourceIndx = 0; resourceIndx < resources.length; resourceIndx++) {
+						if (aProjectRelativeLocation.makeAbsolute().equals(resources[resourceIndx].getSourcePath())) {
+							component.getResources().remove(resources[resourceIndx]);
+						}
 					}
 				}
 			}
-		} finally {
+		}
+		finally {
 			if (moduleCore != null) {
-				moduleCore.saveIfNecessary(monitor);
+				if (component != null)
+					moduleCore.saveIfNecessary(monitor);
 				moduleCore.dispose();
 			}
 		}
 	}
-	
+
 	protected final WorkbenchComponent getReadOnlyComponent() {
-		if(!mapping.hasChanged(getProject()) && mapping.hasCacheData(getProject()))
+		if (!mapping.hasChanged(getProject()) && mapping.hasCacheData(getProject()))
 			return (WorkbenchComponent) mapping.getData(getProject());
-		
+
 		StructureEdit moduleCore = null;
 		WorkbenchComponent component = null;
 		try {
 			moduleCore = StructureEdit.getStructureEditForRead(getProject());
-			component = moduleCore.getComponent();
-			mapping.mark(getProject(), component);
-		} finally {
-			if (moduleCore != null) { 
+			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 a37da71..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,14 +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.ProjectFacetsManager;
 
 /**
  * <p>
@@ -36,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 {
 
@@ -61,7 +58,6 @@
 				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 {
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 96c7895..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
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
index 01dd80a..60a9feb 100644
--- 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
@@ -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,7 +43,7 @@
 	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 static final Object LOAD_FAILED = new Object();
 
 	private final Map/* <String, ComponentImplDescriptor> */ descriptors = new Hashtable();
 
@@ -169,6 +169,23 @@
 		return new VirtualComponent(project, new Path("/")); //$NON-NLS-1$
 	}
 
+	public IVirtualComponent createComponent(IProject project, boolean checkSettings) {
+		if  (checkSettings)
+			return createComponent(project);
+		try {
+			IComponentImplFactory factory = findFactoryForProject(project);
+			if(null != factory){
+				return factory.createComponent(project);
+			}
+		} catch (Exception e) {
+			// Just return a default component
+		}
+		if (ModuleCoreNature.getModuleCoreNature(project) == null){
+			return null;
+		}
+		return new VirtualComponent(project, new Path("/")); //$NON-NLS-1$
+	}
+
 	public IVirtualComponent createArchiveComponent(IProject aProject, String aComponentName) {
 		try {
 			IComponentImplFactory factory = findFactoryForProject(aProject);
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 f480993..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
  *     
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 5d4e167..0ddeaf9 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
@@ -16,6 +16,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
@@ -25,6 +26,7 @@
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
@@ -33,6 +35,7 @@
 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.datamodel.properties.IServerContextRootDataModelProperties;
 import org.eclipse.wst.common.componentcore.internal.Property;
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
 import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
@@ -116,7 +119,7 @@
 			return null;
 		IVirtualFolder root = comp.getRootFolder();
 		IVirtualResource file = root.findMember(aPath);
-		if (file != null){
+		if (file != null && file.getType() == IVirtualResource.FILE){
 			IResource resource = file.getUnderlyingResource();
 			if(resource.getType() == IResource.FILE){
 				return (IFile) resource;
@@ -323,9 +326,19 @@
 	 * 
 	 * @param contextRoot string
 	 */
-	public static void setServerContextRoot(IProject project, String contextRoot) {
-		IVirtualComponent comp = ComponentCore.createComponent(project);
-		comp.setMetaProperty(IModuleConstants.CONTEXTROOT, contextRoot);
+	public static void setServerContextRoot(IProject project, String newContextRoot) {
+		
+		IDataModel model = DataModelFactory.createDataModel(IServerContextRootDataModelProperties.class);
+		model.setProperty(IServerContextRootDataModelProperties.PROJECT, project);
+		model.setStringProperty(IServerContextRootDataModelProperties.CONTEXT_ROOT,
+				newContextRoot);
+		
+		try {
+			model.getDefaultOperation().execute(new NullProgressMonitor(), null);
+		}
+		catch (ExecutionException e) {
+			org.eclipse.wst.common.componentcore.internal.ModulecorePlugin.logError(e);
+		}
 	}
 
 	/**
@@ -346,5 +359,4 @@
 			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 95f6623..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
@@ -51,15 +51,17 @@
 
 				IProject container = null;
 				ComponentResource moduleResource = (ComponentResource) getTarget();
-				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);  
+				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 f7b59a5..8fba627 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,14 +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;
-		if( edit.getContentModelRoot() == 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 && res instanceof CompatibilityXMIResource)
+							retVal = res.getEObject(aValue);
+					}
+				}
+			} finally {
+//			if ((res != null) && res.getResourceSet() != null) {
+//				res.getResourceSet().getResources().remove(res);
+//				res.unload();
+//			}
+			}
+		}
+		return retVal;
 	}
 
 	/*
@@ -82,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
index f38b3f5..8673b16 100644
--- 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
@@ -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
  *******************************************************************************/
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 e6b2a70..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
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 f2210ca..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
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 13d7c17..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
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 d07c71f..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
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 fd25628..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
diff --git a/plugins/org.eclipse.wst.common.modulecore/plugin.properties b/plugins/org.eclipse.wst.common.modulecore/plugin.properties
index aef7448..883476b 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,8 @@
 # IBM Corporation - initial API and implementation
 ###############################################################################
 provider=Eclipse.org
+
+Bundle-Name.0 = Modulecore Plug-in
+ValidationMarker.name=ModuleCore Validation Marker
+Validator.name=ModuleCore Validator
+Nature.name=Web Properties
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.modulecore/plugin.xml b/plugins/org.eclipse.wst.common.modulecore/plugin.xml
index 2c2fd98..569dd44 100644
--- a/plugins/org.eclipse.wst.common.modulecore/plugin.xml
+++ b/plugins/org.eclipse.wst.common.modulecore/plugin.xml
@@ -15,7 +15,7 @@
    <!--============================-->
    <extension
          id="ModuleCoreNature"
-         name="Web Properties"
+         name="%Nature.name"
          point="org.eclipse.core.resources.natures">
       <runtime>
          <run
@@ -70,13 +70,13 @@
     <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"
+         name="%Validator.name"
          point="org.eclipse.wst.validation.validator">
       <validator>
       	<projectNature
@@ -106,7 +106,7 @@
 
 <extension
          id="ModuleCoreValidatorMarker"
-         name="ModuleCore Validation Marker"
+         name="%ValidationMarker.name"
          point="org.eclipse.core.resources.markers">
       <super
             type="org.eclipse.wst.validation.problemmarker">
diff --git a/plugins/org.eclipse.wst.common.modulecore/schema/componentimpl.exsd b/plugins/org.eclipse.wst.common.modulecore/schema/componentimpl.exsd
index 2ec75cf..667317e 100644
--- a/plugins/org.eclipse.wst.common.modulecore/schema/componentimpl.exsd
+++ b/plugins/org.eclipse.wst.common.modulecore/schema/componentimpl.exsd
@@ -1,10 +1,10 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.wst.common.modulecore">
+<schema targetNamespace="org.eclipse.wst.common.modulecore" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
-      <appInfo>
+      <appinfo>
          <meta.schema plugin="org.eclipse.wst.common.modulecore" id="componentimpl" name="componentimpl"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          [Enter description of this extension point.]
       </documentation>
@@ -33,9 +33,9 @@
                <documentation>
                   
                </documentation>
-               <appInfo>
+               <appinfo>
                   <meta.attribute translatable="true"/>
-               </appInfo>
+               </appinfo>
             </annotation>
          </attribute>
       </complexType>
@@ -50,65 +50,55 @@
                </documentation>
             </annotation>
          </attribute>
-         <attribute name="class" use="required">
+         <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>
-            <simpleType>
-               <restriction base="string">
-                  <enumeration value="instanceof IVirtualComponent">
-                  </enumeration>
-               </restriction>
-            </simpleType>
          </attribute>
       </complexType>
    </element>
 
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="since"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          [Enter the first release in which this extension point appears.]
       </documentation>
    </annotation>
 
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="examples"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          [Enter extension point usage example here.]
       </documentation>
    </annotation>
 
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="apiInfo"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          [Enter API information here.]
       </documentation>
    </annotation>
 
+
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="implementation"/>
-      </appInfo>
+      </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.modulecore/schema/resourceFactories.exsd b/plugins/org.eclipse.wst.common.modulecore/schema/resourceFactories.exsd
index 08cf3b5..49f7a80 100644
--- a/plugins/org.eclipse.wst.common.modulecore/schema/resourceFactories.exsd
+++ b/plugins/org.eclipse.wst.common.modulecore/schema/resourceFactories.exsd
@@ -1,16 +1,21 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.wst.common.modulecore">
+<schema targetNamespace="org.eclipse.wst.common.modulecore" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
-      <appInfo>
+      <appinfo>
          <meta.schema plugin="org.eclipse.wst.common.modulecore" id="resourceFactories" name="Resource Factory Association (Internal)"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          An *internal* extension point that declares an association between a short-segment filename and a Resource.Factory.
       </documentation>
    </annotation>
 
    <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
       <complexType>
          <sequence>
             <element ref="resourceFactory"/>
@@ -34,9 +39,9 @@
                <documentation>
                   
                </documentation>
-               <appInfo>
+               <appinfo>
                   <meta.attribute translatable="true"/>
-               </appInfo>
+               </appinfo>
             </annotation>
          </attribute>
       </complexType>
@@ -45,24 +50,64 @@
    <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. 
+            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>
+               <appinfo>
                   <meta.attribute kind="java" basedOn="org.eclipse.emf.ecore.resource.Resource.Factory"/>
-               </appInfo>
+               </appinfo>
             </annotation>
          </attribute>
-         <attribute name="shortSegment" type="string" use="required">
+         <attribute name="shortSegment" type="string">
             <annotation>
                <documentation>
-                  Declares the short segment of a filename that the resource factory applies to (e.g. &quot;web.xml&quot;).
+                  Optionally 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>
+         <attribute name="overridesFactoryClass" type="string">
+            <annotation>
+               <documentation>
+                  This optional attribute is to resolve conflicts between multiple defeault factories registered to the same content type and short segments.  The value should be the fully qualified class name of the factory being overridden.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.emf.ecore.resource.Resource.Factory:"/>
+               </appinfo>
+            </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>
@@ -70,48 +115,40 @@
    </element>
 
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="since"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          [Enter the first release in which this extension point appears.]
       </documentation>
    </annotation>
 
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="examples"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          [Enter extension point usage example here.]
       </documentation>
    </annotation>
 
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="apiInfo"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          [Enter API information here.]
       </documentation>
    </annotation>
 
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="implementation"/>
-      </appInfo>
+      </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.validation/.classpath b/plugins/org.eclipse.wst.validation/.classpath
index f8323da..64ae09a 100644
--- a/plugins/org.eclipse.wst.validation/.classpath
+++ b/plugins/org.eclipse.wst.validation/.classpath
@@ -3,7 +3,12 @@
 	<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="src" path="vf2"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<accessrules>
+			<accessrule kind="accessible" pattern="org/eclipse/wst/common/**"/>
+		</accessrules>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.wst.validation/.options b/plugins/org.eclipse.wst.validation/.options
index 26565de..404c71b 100644
--- a/plugins/org.eclipse.wst.validation/.options
+++ b/plugins/org.eclipse.wst.validation/.options
@@ -1,2 +1,37 @@
-com.ibm.etools.validation/debug=true
-com.ibm.etools.validation/tracefilter=
\ No newline at end of file
+org.eclipse.wst.validation/debug=true
+
+# Set this to true if you wish performance information to be logged
+org.eclipse.wst.validation/timings=false
+
+# set this to true if you want version 1 validator tracing
+org.eclipse.wst.validation/v1=false
+
+# Set this to a file name, if you wish the results to be logged to a file, otherwise
+# they will be written to stderr. When logged to a file the results are in a
+# CSV (comma separated values) form. When logged to stderr they are in a more 
+# human readable form.
+org.eclipse.wst.validation/timings/tracefile=
+
+# By default times that are written to the trace file are in milliseconds for elapsed
+# time and nanoseconds for cpu time. If you find these times easier to read as seconds
+# as expressed by a double, the following flag can be turned on.
+org.eclipse.wst.validation/timings/useDoubles=false
+
+# If extra detail is needed for a particular validator it's id can be specified here.
+# For example, if you wanted more detail on the XML validator you would use
+# org.eclipse.wst.xml.core.xml 
+org.eclipse.wst.validation/extraValDetail=
+
+# To make debugging easier, you can make it appear is if only one validator has been 
+# registered via the extension points. You do this by setting the following filter
+# to validator id of the one validator that you want registered.
+#
+# As an example, you could use this plug-in id for a v1 validator: org.eclipse.jst.j2ee.ejb.EJBValidator
+# and org.eclipse.wst.html.ui.HTMLValidator for a v2 validator
+org.eclipse.wst.validation/filter/allExcept=
+
+# The tracing level. If not supplied a default of zero is used. The higher the number the
+# more verbose the tracing.
+org.eclipse.wst.validation/trace/level=
+
+
diff --git a/plugins/org.eclipse.wst.validation/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.validation/.settings/org.eclipse.jdt.core.prefs
index 62c0483..58507dd 100644
--- a/plugins/org.eclipse.wst.validation/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/org.eclipse.wst.validation/.settings/org.eclipse.jdt.core.prefs
@@ -1,12 +1,78 @@
-#Wed Mar 29 04:07:08 EST 2006
+#Fri Apr 11 07:15:44 EDT 2008
 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.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=_
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=_
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+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.4
+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.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.source=1.3
+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.discouragedReference=warning
+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.fatalOptionalError=enabled
+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=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=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.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+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.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.wst.validation/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.wst.validation/.settings/org.eclipse.jdt.ui.prefs
index 35ee23b..76ddc11 100644
--- a/plugins/org.eclipse.wst.validation/.settings/org.eclipse.jdt.ui.prefs
+++ b/plugins/org.eclipse.wst.validation/.settings/org.eclipse.jdt.ui.prefs
@@ -1,3 +1,7 @@
-#Wed Mar 29 04:07:07 EST 2006
+#Mon Jun 11 14:58:22 EDT 2007
 eclipse.preferences.version=1
-internal.default.compliance=default
+org.eclipse.jdt.ui.exception.name=e
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.javadoc=false
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.overrideannotation=true
diff --git a/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF
index a8421a3..ae1a891 100644
--- a/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF
@@ -1,22 +1,24 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
-Bundle-Name: Validation Framework
+Bundle-Name: %Bundle-Name.0
 Bundle-SymbolicName: org.eclipse.wst.validation; singleton:=true
-Bundle-Version: 1.1.6.qualifier
+Bundle-Version: 1.2.6.qualifier
 Bundle-Activator: org.eclipse.wst.validation.internal.plugin.ValidationPlugin
-Bundle-Vendor: Eclipse.org
+Bundle-Vendor: %Bundle-Vendor.0
 Bundle-Localization: plugin
-Export-Package: org.eclipse.wst.validation.internal;x-internal:=true,
- org.eclipse.wst.validation.internal.core;x-internal:=true,
+Export-Package: org.eclipse.wst.validation,
+ org.eclipse.wst.validation.internal;x-friends:="org.eclipse.wst.common.tests.validation",
+ org.eclipse.wst.validation.internal.core;x-friends:="org.eclipse.wst.common.tests.validation",
  org.eclipse.wst.validation.internal.delegates;x-internal:=true,
- org.eclipse.wst.validation.internal.operations;x-internal:=true,
- org.eclipse.wst.validation.internal.plugin;x-internal:=true,
+ org.eclipse.wst.validation.internal.model;x-internal:=true,
+ org.eclipse.wst.validation.internal.operations;x-friends:="org.eclipse.wst.common.tests.validation",
+ org.eclipse.wst.validation.internal.plugin;x-friends:="org.eclipse.wst.common.tests.validation",
  org.eclipse.wst.validation.internal.provisional;x-internal:=true,
- org.eclipse.wst.validation.internal.provisional.core;x-internal:=true
-Require-Bundle: org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.wst.common.frameworks;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.jem.util;bundle-version="[1.2.0,1.3.0)",
- org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.wst.common.project.facet.core;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.core.expressions;bundle-version="[3.2.0,4.0.0)"
-Eclipse-LazyStart: true
+ org.eclipse.wst.validation.internal.provisional.core
+Require-Bundle: org.eclipse.core.resources;bundle-version="[3.4.0,4.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.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)"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.wst.validation/about.html b/plugins/org.eclipse.wst.validation/about.html
index 4ec5989..2199df3 100644
--- a/plugins/org.eclipse.wst.validation/about.html
+++ b/plugins/org.eclipse.wst.validation/about.html
@@ -10,7 +10,7 @@
 
 <H3>About This Content</H3>
 
-<P>May 2, 2006</P>
+<P>June, 2008</P>
 
 <H3>License</H3>
 
diff --git a/plugins/org.eclipse.wst.validation/build.properties b/plugins/org.eclipse.wst.validation/build.properties
index 8a3225d..167d165 100644
--- a/plugins/org.eclipse.wst.validation/build.properties
+++ b/plugins/org.eclipse.wst.validation/build.properties
@@ -1,10 +1,10 @@
 ###############################################################################
-# Copyright (c) 2001, 2004 IBM Corporation and others.
+# Copyright (c) 2001, 2008 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.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,11 +12,14 @@
                plugin.properties,\
                META-INF/,\
                about.html,\
-               .
+               .,\
+               .options,\
+               xsds/
 jars.compile.order = .
 src.includes = component.xml,\
                xsds/
 output.. = bin/
 source.. = validate_core/,\
            property_files/,\
-           validate/
+           validate/,\
+           vf2/
diff --git a/plugins/org.eclipse.wst.validation/plugin.properties b/plugins/org.eclipse.wst.validation/plugin.properties
index 4561d96..d7722e4 100644
--- a/plugins/org.eclipse.wst.validation/plugin.properties
+++ b/plugins/org.eclipse.wst.validation/plugin.properties
@@ -1,21 +1,26 @@
 ###############################################################################
-# Copyright (c) 2001, 2004 IBM Corporation and others.
+# Copyright (c) 2001, 2008 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.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
+ProblemMarkerV2=Validation Message
+
 VALIDATION_PROJECTMARKER_NAME=Enabled Validators
 VALIDATION_PREFERENCEMARKER_NAME=Validation Preferences
 Validator=Validator
 ReferencialFileValidator=ReferencialFileValidator
 validationSelectionHandler=validationSelectionHandler
 ValidatorDelegates=Validator Delegates
+
+Bundle-Name.0 = Validation Framework
+Bundle-Vendor.0 = Eclipse.org
+
+Extension.validator=Validator (Version 2)
diff --git a/plugins/org.eclipse.wst.validation/plugin.xml b/plugins/org.eclipse.wst.validation/plugin.xml
index 9187915..1b17568 100644
--- a/plugins/org.eclipse.wst.validation/plugin.xml
+++ b/plugins/org.eclipse.wst.validation/plugin.xml
@@ -1,14 +1,16 @@
 <?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="validatorV2" name="%Extension.validator" schema="xsds/validator.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"/>
    <extension-point id="validatorDelegates" name="%ValidatorDelegates" schema="xsds/validatorDelegates.exsd"/>   
+   <extension-point id="validatorGroup" name="Validator Group" schema="xsds/validatorgroup.exsd"/>   
+   <extension-point id="exclude" name="Validator Exclusions" schema="xsds/exclude.exsd"/>   
    
 <!--============================-->
 <!-- Validation Contributions   -->
@@ -110,5 +112,20 @@
             name="version">
       </attribute>
    </extension>
+   <!-- GRK - I added a new problem marker so that we can keep the v2 changes separate from the v1 framework. -->
+   <extension
+         id="problemmarker2"
+         name="%ProblemMarkerV2"
+         point="org.eclipse.core.resources.markers">
+      <super
+            type="org.eclipse.core.resources.problemmarker">
+      </super>
+      <persistent
+            value="true">
+      </persistent>
+      <attribute
+            name="owner">
+      </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/org/eclipse/wst/validation/internal/messages.properties b/plugins/org.eclipse.wst.validation/property_files/org/eclipse/wst/validation/internal/messages.properties
new file mode 100644
index 0000000..a5062b8
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/property_files/org/eclipse/wst/validation/internal/messages.properties
@@ -0,0 +1,73 @@
+###############################################################################
+# Copyright (c) 2005, 2008 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+ErrConfig=IWAE0100E Extension configuration error. An internal error has happened, the validator {0} has incorrectly configured the validation extension point.
+ErrGroupName=IWAE0101E Invalid element, expect either the element "include" or "exclude".
+ErrFilterRule=IWAE0102E An invalid filter rule has been encountered.
+
+ErrGroupNoType=IWAE0103E Groups must have a valid type, no type was returned
+ErrGroupInvalidType=IWAE0104E Groups must have a valid type, the following invalid type was returned: {0}
+ErrDependencyVersion=IWAE0105E Only version {0} is supported
+
+ErrPatternAttrib=IWAE0106E The pattern attribute must be supplied
+ErrTypeReq=IWAE0107E Type is a required attribute for file filters
+
+VbfExcSyntaxNoValClass=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.
+VbfExcSyntaxNoValRun=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.
+VbfExcSyntaxNoValNull=IWAE0018E Validator class {0} could not be created. IConfigurationElement.createExecutableExtension(String) returned null.
+
+ErrType=The value of the type attribute is incorrect. It was specified as {0} but the only valid values are: {1}, {2}, {3}
+ConfigError=It appears that validator {0} (with id {1}) has been configured incorrectly, it produced {2} messages while validating {3}. It has been disabled. Try restoring the defaults for this validator.
+
+DecodeError1=IWAE0019E There was a problem deserializing a string. A boolean was expected but not found. 
+Error20=IWAE0020E Internal error, the incoming validator must be a v2 validator
+GroupInclude=Include Group
+GroupExclude=Exclude Group
+
+TypeInclude=include
+TypeExclude=exclude
+
+JobName=Validation
+JobNameMonitor=Validation Monitor
+JobIndexSave=Index Save
+
+MigrationJobName=Validation Setup
+
+RuleProjectNature=Project nature
+RuleFileExt=File extension
+RuleFile=File
+RuleContentType=Content Type
+RuleFacet=Facet
+RuleFolder=Folder
+RuleFull=Qualified File
+
+FileExtWithCase={0}: {1} (case sensitive)
+FileExtWithoutCase={0}: {1}
+
+ContentTypeExact={0}: {1} (excludes subtypes)
+ContentTypeNotExact={0}: {1} (includes subtypes)
+
+LogValStart=Validator {0} starting to validate: {1}
+LogValEnd=Validator {0} finished validating: {1}
+LogValEndTime=Validator {0} with id {1} finished validating: {2} in {3}
+LogValSummary=Validator {0} with id {1} validated {2} resources in {3}
+LogValSummary2=Validator {0} with id {1} validated {2} resources in {3} using {4} of CPU time
+LogSession=Session started on: {0}
+
+SevError=Error
+SevWarning=Warning
+SevIgnore=Ignore
+
+TimeUnder=under a second
+TimeNano={0} nanoseconds
+TimeMicro={0} microseconds
+TimeSec={0} seconds
+TimeMin={0} minutes
+
diff --git a/plugins/org.eclipse.wst.validation/property_files/validate_base.properties b/plugins/org.eclipse.wst.validation/property_files/validate_base.properties
index 0a0955a..9e2583d 100644
--- a/plugins/org.eclipse.wst.validation/property_files/validate_base.properties
+++ b/plugins/org.eclipse.wst.validation/property_files/validate_base.properties
@@ -1,10 +1,10 @@
 ###############################################################################
-# Copyright (c) 2001, 2004 IBM Corporation and others.
+# Copyright (c) 2001, 2008 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
 # http://www.eclipse.org/legal/epl-v10.html
-# 
+#
 # Contributors:
 # IBM Corporation - initial API and implementation
 ###############################################################################
@@ -79,14 +79,10 @@
 
 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 IWorkbenchContext.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.
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
index 171596b..16aef08 100644
--- 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
@@ -1,85 +1,86 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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 {
-	public static final String DISABLE_ALL_VALIDATION_SETTING = "disableAllValidation"; //$NON-NLS-1$ // boolean
-	///* package */static final String AUTO_SETTING = "autoValidate"; //$NON-NLS-1$ // boolean
-	///* package */static final String BUILD_SETTING = "runWhenBuild"; //$NON-NLS-1$ // boolean
-	public static final String SAVE_AUTOMATICALLY_SETTING = "saveAutomatically"; //$NON-NLS-1$ // boolean
+	String DISABLE_ALL_VALIDATION_SETTING = "disableAllValidation"; //$NON-NLS-1$ // boolean
+	String SAVE_AUTOMATICALLY_SETTING = "saveAutomatically"; //$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_DISABLE_VALIDATION_SETTING = false;
-	///* 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
-  static final String DELEGATES_SEPARATOR = "="; //$NON-NLS-1$ // Separates the delegating validator id from the delegate validator id in the list of delegates
-	// The following values must match the attributes in the preference marker as shown in
-	// plugin.xml
+	String CURRENT_VERSION = (String) ValidationPlugin.getPlugin().getBundle().getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION);  // this is a constant, so it should be intern
+	boolean DEFAULT_ASYNC = true;
+	boolean DEFAULT_DISABLE_VALIDATION_SETTING = false;
+	ValidatorMetaData[] DEFAULT_ENABLED_VALIDATORS = ValidationRegistryReader.getReader().getValidatorMetaDataArrayEnabledByDefault();  // store a copy here so that we don't modify the original and don't create a copy every time we need this value
+	int DEFAULT_MAXNUMMESSAGES = 50;
+	int DEPTH_INFINITE = IResource.DEPTH_INFINITE;
+	int DEPTH_ZERO = IResource.DEPTH_ZERO;
+	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
+	String DELEGATES_SEPARATOR = "="; //$NON-NLS-1$ // Separates the delegating validator id from the delegate validator id in the list of delegates
+
+	// 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_MANUAL_VALIDATORS = "enabledManualValidatorList"; //$NON-NLS-1$ // String
-	/* package */static final String ENABLED_BUILD_VALIDATORS = "enabledBuildValidatorList"; //$NON-NLS-1$ // String
-  /* package */static final String DELEGATE_VALIDATORS = "delegateValidatorList"; //$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
+	String ENABLED_MANUAL_VALIDATORS = "enabledManualValidatorList"; //$NON-NLS-1$ // String
+	String ENABLED_BUILD_VALIDATORS = "enabledBuildValidatorList"; //$NON-NLS-1$ // String
+	String DELEGATE_VALIDATORS = "delegateValidatorList"; //$NON-NLS-1$ // String
+	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.
+	String MAXNUMMESSAGES = "maxNumMessages"; //$NON-NLS-1$ // integer
+	String PLUGIN_ID = ValidationPlugin.PLUGIN_ID;
+	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)
+	String PREFERENCE_MARKER = PLUGIN_ID + ".preferencemarker"; //$NON-NLS-1$
+	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)
+	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)
+	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
-	/* package */static final QualifiedName USER_MANUAL_PREFERENCE = new QualifiedName(PLUGIN_ID, "ValidationManualConfiguration"); //$NON-NLS-1$ // ValidationConfiguration for the IResource
-	/* package */static final QualifiedName USER_BUILD_PREFERENCE = new QualifiedName(PLUGIN_ID, "ValidationBuildConfiguration"); //$NON-NLS-1$ // ValidationConfiguration for the IResource
-  /* package */static final QualifiedName DELEGATES_PREFERENCE = new QualifiedName(PLUGIN_ID, "ValidationDelegatesConfiguration"); //$NON-NLS-1$ // ValidationConfiguration for the IResource
+	QualifiedName USER_PREFERENCE = new QualifiedName(PLUGIN_ID, "ValidationConfiguration"); //$NON-NLS-1$ // ValidationConfiguration for the IResource
+	QualifiedName USER_MANUAL_PREFERENCE = new QualifiedName(PLUGIN_ID, "ValidationManualConfiguration"); //$NON-NLS-1$ // ValidationConfiguration for the IResource
+	QualifiedName USER_BUILD_PREFERENCE = new QualifiedName(PLUGIN_ID, "ValidationBuildConfiguration"); //$NON-NLS-1$ // ValidationConfiguration for the IResource
+	QualifiedName DELEGATES_PREFERENCE = new QualifiedName(PLUGIN_ID, "ValidationDelegatesConfiguration"); //$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$
+	
+	/** 
+	 * org.eclipse.wst.validation.problemmarker - The marker id which is used to add v1 validation markers 
+	 * to the task list */
+	String VALIDATION_MARKER = PLUGIN_ID + ".problemmarker"; //$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. */
+	String VALIDATION_MARKER_GROUP = "groupName"; //$NON-NLS-1$
+	
+	/**  Persist the message id of the message, not just the translated text. */
+	String VALIDATION_MARKER_MESSAGEID = "messageId"; //$NON-NLS-1$
+	
+	// The following values must match the attributes in the validation message marker as shown in plugin.xml
+	String VALIDATION_MARKER_OWNER = "owner"; //$NON-NLS-1$ // The IValidator who owns the IMarker on the task list
+	String VALIDATION_MARKER_SEVERITY = "validationSeverity"; //$NON-NLS-1$ // one of the SeverityEnum values
+	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.
+	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$
+	String VERSION4_03 = "4.03"; //$NON-NLS-1$
+	String VERSION5_0 = "5.0"; //$NON-NLS-1$
+	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
index 537d69a..47e919c 100644
--- 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
@@ -1,25 +1,22 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.Preferences;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 
 
@@ -27,17 +24,15 @@
  * Only the validation framework can use this class.
  */
 public final class ConfigurationManager implements ConfigurationConstants {
-	private static ConfigurationManager inst = null;
+	private static ConfigurationManager _instance = null;
 
-	private ConfigurationManager() {
-		//Default constructor
-	}
+	private ConfigurationManager() {}
 
 	public static ConfigurationManager getManager() {
-		if (inst == null) {
-			inst = new ConfigurationManager();
+		if (_instance == null) {
+			_instance = new ConfigurationManager();
 		}
-		return inst;
+		return _instance;
 	}
 
 	/**
@@ -46,29 +41,16 @@
 	 * return null.
 	 */
 	public String getValidator(IMarker marker) {
-		if (marker == null) {
-			return null;
-		}
+		if (marker == null)return null;
 
 		try {
-			if (!marker.getType().equals(VALIDATION_MARKER)) {
-				return null;
-			}
+			if (!marker.getType().equals(VALIDATION_MARKER))return null;
 
 			Object attrib = marker.getAttribute(VALIDATION_MARKER_OWNER);
-			if (attrib == null) {
-				// owner not set
-				return null;
-			}
+			if (attrib == null)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);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return null;
 		}
 	}
@@ -77,47 +59,30 @@
 	 * Return true if the given marker is a validation marker. Otherwise return false.
 	 */
 	public boolean isValidationMarker(IMarker marker) {
-		if (marker == null) {
-			return false;
-		}
+		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);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return false;
 		}
 	}
 
 	/**
-	 * This method is for use by the TVT Validation plugin ONLY!!! No code should access the
+	 * This method is for use by the TVT Validation plug-in ONLY!!! No code should access the
 	 * validation markers in the list directly except for the validation framework and the TVT
-	 * Validation plugin.
+	 * Validation plug-in.
 	 */
 	public void removeAllValidationMarkers(IProject project) {
-		if ((project == null) || (!project.isOpen())) {
-			return;
-		}
+		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);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 
@@ -125,16 +90,25 @@
 	 * This method returns the global preferences for the workspace.
 	 */
 	public GlobalConfiguration getGlobalConfiguration() throws InvocationTargetException {
-		IWorkspaceRoot root = ValidationConfiguration.getRoot();
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		GlobalConfiguration gp = null;
+		try {
+			gp = (GlobalConfiguration) root.getSessionProperty(USER_PREFERENCE);
+			if (gp == null)gp = getGlobalConfiguration(root);
+		} catch (CoreException exc) {
+			throw new InvocationTargetException(exc, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_RETRIEVE, new String[]{root.getName()}));
+		}
+		return gp;
+	}
+	
+	private synchronized GlobalConfiguration getGlobalConfiguration(IWorkspaceRoot root) throws InvocationTargetException {
 		GlobalConfiguration gp = null;
 		try {
 			gp = (GlobalConfiguration) root.getSessionProperty(USER_PREFERENCE);
 			if (gp == null) {
 				gp = new GlobalConfiguration(root);
-				Preferences prefs = ValidationPlugin.getPlugin().getPluginPreferences();
-				if( prefs != null ){
-					prefs.addPropertyChangeListener(gp);
-				}
+				PreferencesWrapper prefs = PreferencesWrapper.getPreferences(null, null);
+//				prefs.addPropertyChangeListener(gp);
 				
 				gp.getVersion(); // initialize the configuration's version attribute
 				gp.load(); // initialize this instance from the stored values
@@ -181,45 +155,36 @@
 
 	/**
 	 * The nature of the project has changed; update the enabled validators on the project.
+	 * 
+	 * @deprecated this method doesn't do anything.
 	 */
 	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);
-				if(!prjp.useGlobalPreference())
-					prjp.store();
+				if(!prjp.useGlobalPreference())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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			if (e.getTargetException() != null)
+				ValidationPlugin.getPlugin().handleException(e.getTargetException());
 		}
 	}
 
+	/**
+	 * @deprecated this method does not do anything.
+	 * @param project
+	 */
 	public void deleting(IProject project) {
 	}
 
+	/**
+	 * @deprecated this method does not do anything.
+	 * @param 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.
@@ -230,9 +195,7 @@
 	 */
 	public boolean isGlobalMigrated() throws InvocationTargetException {
 		IWorkspaceRoot root = ValidationConfiguration.getRoot();
-		if (root == null) {
-			return false;
-		}
+		if (root == null)return false;
 
 		try {
 			GlobalConfiguration gp = (GlobalConfiguration) root.getSessionProperty(USER_PREFERENCE);
@@ -257,20 +220,17 @@
 	 * 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;
-		}
+		if (project == null)return false;
+		
 		try {
 			if (project.isAccessible()) {
 				ProjectConfiguration prjp = (ProjectConfiguration) project.getSessionProperty(USER_PREFERENCE);
-				if (prjp != null) {
-					return prjp.isVersionCurrent();
-				}
+				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
+					prjp.getVersion(); 
 					return prjp.isVersionCurrent();
 				}
 			}
@@ -280,4 +240,17 @@
 		return false;
 	}
 
-}
\ No newline at end of file
+	/**
+	 * Answer the appropriate configuration based on whether the project has overridden the configuration
+	 * or not. If the project exists and is allowed to override the global configuration answer the
+	 * project configuration, otherwise answer the global configuration.
+	 * @param project it can be null
+	 */
+	public ValidationConfiguration getConfiguration(IProject project) throws InvocationTargetException {
+		if (project == null)return getGlobalConfiguration();
+		ProjectConfiguration pc = getProjectConfiguration(project);
+		if (pc != null && !pc.useGlobalPreference())return pc;
+		return getGlobalConfiguration();
+	}
+
+}
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
index ab83e87..d603b8d 100644
--- 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
@@ -1,17 +1,18 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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 java.util.Set;
+import java.util.concurrent.CopyOnWriteArraySet;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
@@ -23,9 +24,6 @@
 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;
 
@@ -33,47 +31,70 @@
  * 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 static EventManager _inst;
+	
+	// false means that eclipse is not shutting down, and true means that it is shutting down. 
+	private boolean _shutdown; 
+
+	private IResourceDeltaVisitor _postAutoBuildVisitor;
+	private boolean _isActive; // has the registry been read?
+	
+	private Set<IProjectChangeListener> _listeners = new CopyOnWriteArraySet<IProjectChangeListener>();
 
 	private EventManager() {
-		super();
 	}
 
 	public static EventManager getManager() {
-		if (_inst == null) {
-			_inst = new EventManager();
-		}
+		if (_inst == null)_inst = new EventManager();
 		return _inst;
 	}
+	
+	public void addProjectChangeListener(IProjectChangeListener listener){
+		Tracing.log("EventManager-03: add listener: ", listener); //$NON-NLS-1$
+		_listeners.add(listener);
+	}
+	
+	public void removeProjectChangeListener(IProjectChangeListener listener){
+		_listeners.remove(listener);
+	}
+	
+	private void signal(IProject project, int type){
+		if (Tracing.isLogging()){
+			String name = "Null"; //$NON-NLS-1$
+			if (project != null)name = project.getName();
+			Tracing.log("EventManager-02: signal project: " + name + ", IProjectChangeListener type: " + type); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		for (IProjectChangeListener pcl : _listeners){
+			try {
+				pcl.projectChanged(project, type);
+			}
+			catch (Exception e){
+				ValidationPlugin.getPlugin().handleException(e);
+			}
+		}
+	}
 
 	public void opening(IProject project) {
-		if (project == null || !ValidationPlugin.isActivated()) {
-			return;
-		}
+		if (project == null || !ValidationPlugin.isActivated())return;
+		
+		signal(project, IProjectChangeListener.ProjectOpened);
 
-		// When the project is opened, check for any orphaned tasks
-		// or tasks whose owners need to be updated.
-		ConfigurationManager.getManager().opening(project);
+		// 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;
-		}
-
+		if (project == null || !ValidationPlugin.isActivated())return;
+		
+		signal(project, IProjectChangeListener.ProjectClosed);
+		
 		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.
+			// validator and its prerequisite plug-ins 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];
+				for (ValidatorMetaData vmd : vmds) {
 
 					if (!vmd.isActive()) {
 						// If this validator has not been activated, or if it has been shut down,
@@ -85,66 +106,39 @@
 					try {
 						helper = vmd.getHelper(project);
 						helper.closing();
-					} catch (InstantiationException exc) {
+					} catch (InstantiationException e) {
 						// 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) {
+						ValidationPlugin.getPlugin().handleException(e);
+					} catch (Exception e) {
 						// 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;
+						// continue with the next validator.
+						ValidationPlugin.getPlugin().handleException(e);
 					}
 				}
 
 				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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			if (e.getTargetException() != null)
+				ValidationPlugin.getPlugin().handleException(e.getTargetException());
 		}
 	}
 
 	public void deleting(IProject project) {
-		if (project == null) {
-			return;
-		}
+		if (project == null)return;
+		
+		signal(project, IProjectChangeListener.ProjectDeleted);
 
 		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.
+			// validator and its prerequisite plug-ins 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];
+				for (ValidatorMetaData vmd : vmds) {
 
 					if (!vmd.isActive()) {
 						// If this validator has not been activated, or if it has been shut down,
@@ -156,50 +150,26 @@
 					try {
 						helper = vmd.getHelper(project);
 						helper.deleting();
-					} catch (InstantiationException exc) {
+					} catch (InstantiationException e) {
 						// 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);
-						}
-
+						ValidationPlugin.getPlugin().handleException(e);
 						continue;
-					} catch (Throwable exc) {
+					} catch (Exception e) {
 						// 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 with the next validator.
+						ValidationPlugin.getPlugin().handleException(e);
 						continue;
 					}
 				}
 
-				ConfigurationManager.getManager().deleting(project);
+//				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);
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			if (e.getTargetException() != null)
+				ValidationPlugin.getPlugin().handleException(e.getTargetException());
 
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
 		}
 	}
 
@@ -211,55 +181,33 @@
 		if (_postAutoBuildVisitor == null) {
 			_postAutoBuildVisitor = new IResourceDeltaVisitor() {
 				public boolean visit(IResourceDelta subdelta) throws CoreException {
-					if (subdelta == null)
-						return true;
+					if (subdelta == null)return false;
 
 					IResource resource = subdelta.getResource();
+					if (resource instanceof IWorkspaceRoot)return true;
 					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);
-									}
-								}
-							}
+							signal(project, IProjectChangeListener.ProjectChanged);
 							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.
+								// project would just have been closed.
 								opening(project);
 							}
-							// closing is called by PRE_CLOSE in resourceChanged
-							//							else {
-							//								closing(project);
-							//							}
+							return false;
+						}
+						
+						if ((subdelta.getFlags() & IResourceDelta.ADDED) == IResourceDelta.ADDED) {
+							signal(project, IProjectChangeListener.ProjectAdded);
+							return false;
 						}
 					}
 
-					return true;
+					return false;
 				}
 			};
 		}
@@ -267,7 +215,7 @@
 		try {
 			delta.accept(_postAutoBuildVisitor, true);
 		} catch (CoreException exc) {
-			exc.printStackTrace();
+			ValidationPlugin.getPlugin().handleException(exc);
 		}
 	}
 
@@ -279,50 +227,42 @@
 	 * @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.
+		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 (Tracing.isLogging()){
+			Tracing.log("Eventmanager-01: IResourceChangeEvent type=" + //$NON-NLS-1$
+				Misc.resourceChangeEventType(event.getType()) + 
+				", resource=" +  //$NON-NLS-1$
+				event.getResource() + ", source=" + event.getSource() + ", delta=" +   //$NON-NLS-1$//$NON-NLS-2$
+				event.getDelta());				
+		}
+		
 		if (event.getSource() instanceof IWorkspace) {
-			if ((event.getType() == IResourceChangeEvent.PRE_DELETE) && (event.getResource() instanceof IProject)) {
+			boolean isProject = event.getResource() instanceof IProject;
+			if ((event.getType() == IResourceChangeEvent.PRE_DELETE) && isProject) {
 				deleting((IProject) event.getResource());
-			} else if ((event.getType() == IResourceChangeEvent.PRE_CLOSE) && (event.getResource() instanceof IProject)) {
+			} else if ((event.getType() == IResourceChangeEvent.PRE_CLOSE) && isProject) {
 				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.)
-	 * 
+	 * either the plug-in could not load, or that the workbench is shutting down.)
+	 * <p>
 	 * 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; } }
-			 */
+			// resourceChanged(IResourceChangeEvent) needs to know when a shutdown has started.
+			_shutdown = true;
 
 			// 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
@@ -332,9 +272,7 @@
 			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];
+			for (IProject project : projects) {
 				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
@@ -345,17 +283,12 @@
 				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.
+					// the validator and its prerequisite plug-ins until they're needed.
 					if (isMigrated) {
 						prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-						//No need to save project level validation preferences at shutdown.b
-						//if(!prjp.useGlobalPreference())
-						//	prjp.store();
 
 						ValidatorMetaData[] vmdList = prjp.getEnabledValidators();
-						// if vmdList is null, IProject has never been loaded, so nothing to clean
-						// up
+						// 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];
@@ -370,36 +303,28 @@
 								if (helper != null) {
 									try {
 										helper.shutdown();
-									} catch (Throwable exc) {
+									} catch (Exception 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);
+				} catch (InvocationTargetException e) {
+					ValidationPlugin.getPlugin().handleException(e);
+					if (e.getTargetException() != null)
+						ValidationPlugin.getPlugin().handleException(e.getTargetException());
 
-						if (exc.getTargetException() != null) {
-							entry.setTargetException(exc);
-							logger.write(Level.SEVERE, entry);
-						}
-					}
 				}
 			}
-		} catch (Throwable exc) {
+		} catch (Exception 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,
+		// i.e., when eclipse is shut down, if validation plug-in 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
@@ -421,12 +346,13 @@
 	}
 
 	/**
-	 * This method should be used to determine if the workbench is running in UI or Headless
+	 * This method should be used to determine if the workbench is running in UI or Headless.
+	 * 
+	 * @deprecated This plug-in no longer depends on jem. If you need this function use the jem
+	 * code directly.
 	 */
 	public static boolean isHeadless() {
-		boolean ret = UIContextDetermination.getCurrentContext() == UIContextDetermination.HEADLESS_CONTEXT;
-		return ret;
-		//return UIContextDetermination.getCurrentContext() ==
-		// UIContextDetermination.HEADLESS_CONTEXT;
+		//return UIContextDetermination.getCurrentContext() == UIContextDetermination.HEADLESS_CONTEXT;
+		return false;
 	}
-}
\ 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
index 3a82813..39a36bc 100644
--- 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
@@ -1,23 +1,20 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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;
@@ -28,10 +25,9 @@
 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.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;
@@ -45,9 +41,9 @@
 	private static VMDResourceVisitor _resourceVisitor = null;
 
 	private interface VMDRecorder {
-		public Map getResult();
+		public Map<ValidatorMetaData, Set<IFileDelta>> getResult();
 
-		public void setEnabledValidators(Set enabledValidators);
+		public void setEnabledValidators(Set<ValidatorMetaData> enabledValidators);
 
 		public void setProgressMonitor(IProgressMonitor monitor);
 
@@ -55,53 +51,40 @@
 	}
 
 	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;
-		}
+	static Map<ValidatorMetaData, Set<IFileDelta>> wrapInMap(Set<ValidatorMetaData> enabledValidators) {
+		Map<ValidatorMetaData, Set<IFileDelta>> result = new HashMap<ValidatorMetaData, Set<IFileDelta>>();
+		if ((enabledValidators == null) || (enabledValidators.size() == 0))return result;
 
-		Iterator iterator = enabledValidators.iterator();
-		while (iterator.hasNext()) {
-			result.put(iterator.next(), null);
-		}
+		for (ValidatorMetaData vmd : enabledValidators)result.put(vmd, null);
 		return result;
 	}
 
 	static void checkCanceled(IProgressMonitor monitor) throws OperationCanceledException {
-		if (monitor == null) {
-			return;
-		} else if (monitor.isCanceled()) {
-			throw new OperationCanceledException(""); //$NON-NLS-1$
-		}
+		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);
+	private static Set<IFileDelta> getResourceDeltas(Map<ValidatorMetaData, Set<IFileDelta>> enabledValidators, 
+			ValidatorMetaData vmd) {
+		Set<IFileDelta> fileDeltas = enabledValidators.get(vmd);
 		if (fileDeltas == null) {
-			fileDeltas = new HashSet();
+			fileDeltas = new HashSet<IFileDelta>();
 			enabledValidators.put(vmd, fileDeltas);
 		}
 		return fileDeltas;
@@ -168,8 +151,9 @@
 	 * 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);
+	static void addFileDelta(Map<ValidatorMetaData, Set<IFileDelta>> enabledValidators, 
+			ValidatorMetaData vmd, WorkbenchFileDelta fileDelta) {
+		Set<IFileDelta> fileDeltas = getResourceDeltas(enabledValidators, vmd);
 		fileDeltas.add(fileDelta);
 		enabledValidators.put(vmd, fileDeltas);
 	}
@@ -181,59 +165,43 @@
 	 * 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
+	public static Map<ValidatorMetaData, Set<IFileDelta>> 
+		getFileDeltas(Set<ValidatorMetaData> enabledValidators, Object[] changedResources, boolean filterIn) {
+		// by default assume that the resources have changed, i.e. not added or deleted
+		return getFileDeltas(enabledValidators, changedResources, IFileDelta.CHANGED, filterIn); 
 	}
 
 	/**
 	 * 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
+	public static Map<ValidatorMetaData, Set<IFileDelta>> 
+		getFileDeltas(Set<ValidatorMetaData> enabledValidators, Object[] changedResources, int ifileDeltaType) {
+		// by default check if the Objects are filtered in by the validator
+		return getFileDeltas(enabledValidators, changedResources, ifileDeltaType, false); 
 	}
 
 	/**
 	 * Return a Map wrapper, with each VMD from enabledValidators as the key, and the value a Set of
 	 * IFileDelta wrapper around the changed Object[].
-	 * 
+	 * <p>
 	 * 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();
+	public static Map<ValidatorMetaData, Set<IFileDelta>> getFileDeltas(Set<ValidatorMetaData> enabledValidators, 
+		Object[] changedResources, int ifileDeltaType, boolean force) {
+		
+		Map<ValidatorMetaData, Set<IFileDelta>> result = new HashMap<ValidatorMetaData, Set<IFileDelta>>();
 		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();
+		for (ValidatorMetaData vmd : enabledValidators) {
 			try {
-				Set deltas = new HashSet();
+				Set<IFileDelta> deltas = new HashSet<IFileDelta>();
 				IProgressMonitor monitor = new NullProgressMonitor();
 				for (int i = 0; i < changedResources.length; i++) {
 					Object obj = changedResources[i];
@@ -254,20 +222,12 @@
 					}
 				}
 				result.put(vmd, deltas);
-			} catch (InstantiationException exc) {
+			} catch (InstantiationException e) {
 				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);
-				}
+				ValidationPlugin.getPlugin().handleException(e);
 				continue;
 			}
 
@@ -285,7 +245,6 @@
 			}
 		}
 
-
 		return result;
 	}
 
@@ -295,16 +254,11 @@
 		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);
-			}
+			
+			// [122960] null should be allowed
+//			String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_SYNTAX_NULL_NAME), 
+//				new Object[]{resource.getName(), vmd.getValidatorDisplayName()});
+//			ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, result);
 
 			IPath resourcePath = resource.getFullPath();
 			if (resourcePath != null) {
@@ -312,12 +266,8 @@
 				// 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);
-				}
+				ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, 
+					"portableName is null and path is null for resource " + resource); //$NON-NLS-1$
 				return null;
 			}
 		}
@@ -331,23 +281,15 @@
 	 * 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) {
+	static boolean addToFileList(Map<ValidatorMetaData, Set<IFileDelta>> 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);
-			}
-
+		} catch (Exception exc) {
+			ValidationPlugin.getPlugin().handleException(exc);
 			InternalValidatorManager.getManager().addInternalErrorTask(resource.getProject(), vmd, exc);
 
 			// Don't return ... even though the register threw an exception, that's not to say
@@ -398,55 +340,50 @@
 	}
 
 	/**
-	 * 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.)
+	 * 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). It also sends output to the
+	 * <code>IProgressMonitor</code>, and calls the current Validator to
+	 * validate the resource.
+	 * <p>
+	 * To process a resource, there are several steps:
+	 * <ol>
+	 * <li>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)
+	 * <li>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 the extension point.
+	 * <li>If the resource passes both filters, call <code>validate</code> on
+	 * the validator, with the resource.
+	 * <li>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.)
+	 * </ol>
 	 */
-	static void filterOut(IProgressMonitor monitor, Map enabledValidators, IResource resource, int resourceDelta, boolean isFullBuild) {
-		if (monitor == null) {
-			return;
-		}
+	static void filterOut(IProgressMonitor monitor, Map<ValidatorMetaData, Set<IFileDelta>> enabledValidators, 
+		IResource resource, int resourceDelta, boolean isFullBuild) {
+		if (monitor == null)return;
 
 		checkCanceled(monitor);
 
-		Iterator iterator = enabledValidators.keySet().iterator();
 		boolean cannotLoad = false;
-		while (iterator.hasNext()) {
+		for (ValidatorMetaData vmd : enabledValidators.keySet()) {
 			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) {
+				} catch (InstantiationException e) {
 					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);
-					}
+					ValidationPlugin.getPlugin().handleException(e);
 				}
 			}
 		}
@@ -487,12 +424,12 @@
 	 * 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) {
+	static void filterOut(IProgressMonitor monitor, Map<ValidatorMetaData, Set<IFileDelta>> 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;
-		}
+		if (filterOut(delta))return;
+		
 		filterOut(monitor, enabledValidators, resource, delta.getKind(), false); // false =
 		// incremental
 		// build
@@ -608,17 +545,17 @@
 		return true;
 	}
 
-	private static VMDResourceVisitor getResourceVisitor(IProgressMonitor monitor, Set enabledValidators) {
+	private static VMDResourceVisitor getResourceVisitor(IProgressMonitor monitor, Set<ValidatorMetaData> enabledValidators) {
 		if (_resourceVisitor == null) {
 			_resourceVisitor = new VMDResourceVisitor() {
-				private Map _vmdDeltas = null;
+				private Map<ValidatorMetaData, Set<IFileDelta>> _vmdDeltas = null;
 				private IProgressMonitor _progressMonitor = null;
 
-				public Map getResult() {
+				public Map<ValidatorMetaData, Set<IFileDelta>> getResult() {
 					return _vmdDeltas;
 				}
 
-				public void setEnabledValidators(Set validators) {
+				public void setEnabledValidators(Set<ValidatorMetaData> validators) {
 					_vmdDeltas = wrapInMap(validators);
 				}
 
@@ -635,12 +572,7 @@
 
 					// 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
+					filterOut(getProgressMonitor(), _vmdDeltas, res, IResourceDelta.CHANGED, true);
 
 					return true; // visit the resource's children as well
 				}
@@ -652,17 +584,17 @@
 		return _resourceVisitor;
 	}
 
-	private static VMDDeltaVisitor getDeltaVisitor(IProgressMonitor monitor, Set enabledValidators) {
+	private static VMDDeltaVisitor getDeltaVisitor(IProgressMonitor monitor, Set<ValidatorMetaData> enabledValidators) {
 		if (_deltaVisitor == null) {
 			_deltaVisitor = new VMDDeltaVisitor() {
-				private Map _vmdDeltas = null;
+				private Map<ValidatorMetaData, Set<IFileDelta>> _vmdDeltas = null;
 				private IProgressMonitor _progressMonitor = null;
 
-				public Map getResult() {
+				public Map<ValidatorMetaData, Set<IFileDelta>> getResult() {
 					return _vmdDeltas;
 				}
 
-				public void setEnabledValidators(Set validators) {
+				public void setEnabledValidators(Set<ValidatorMetaData> validators) {
 					_vmdDeltas = wrapInMap(validators);
 				}
 
@@ -681,24 +613,16 @@
 
 					IResource resource = subdelta.getResource();
 
-					Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.FINEST)) {
-						StringBuffer buffer = new StringBuffer("subdelta of "); //$NON-NLS-1$
+					if (Tracing.isLogging(2)) {
+						StringBuffer buffer = new StringBuffer("FilterUtil-01: subdelta of "); //$NON-NLS-1$
 						buffer.append(resource.getName());
-						buffer.append(" is "); //$NON-NLS-1$
+						buffer.append(" has resource delta kind: "); //$NON-NLS-1$
 						buffer.append(subdelta.getKind());
-						buffer.append(" resource exists? "); //$NON-NLS-1$
+						buffer.append(" Does the resource exist? "); //$NON-NLS-1$
 						buffer.append(resource.exists());
-						buffer.append(" resource.isPhantom?"); //$NON-NLS-1$
+						buffer.append(" Is it a phantom? "); //$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);
-						}
-
+						Tracing.log(buffer);
 					}
 
 					// If the delta is an IProject, and the IProject is getting deleted or closed,
@@ -717,16 +641,18 @@
 		return _deltaVisitor;
 	}
 
-	public static Map loadDeltas(final IProgressMonitor monitor, final Set enabledValidators, IResourceDelta delta) throws CoreException {
+	public static Map<ValidatorMetaData, Set<IFileDelta>> loadDeltas(final IProgressMonitor monitor, 
+			final Set<ValidatorMetaData> 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 {
+	public static Map<ValidatorMetaData, Set<IFileDelta>> loadDeltas(final IProgressMonitor monitor, 
+			final Set<ValidatorMetaData> 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
index 3204d26..20c044f 100644
--- 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
@@ -1,25 +1,21 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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.core.runtime.Preferences;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 
 
@@ -27,7 +23,7 @@
  * 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;
+	static final boolean PREF_PROJECTS_CAN_OVERRIDE_DEFAULT = true;
 	static final boolean PREF_SAVE_AUTOMATICALLY_DEFAULT = false;
 
 	private boolean _canProjectsOverride = getCanProjectsOverrideDefault();
@@ -39,14 +35,11 @@
 	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
+		// 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.
+		//    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.
+		// 	  to the default, which may be different than the stored value.
 	}
 
 	/**
@@ -54,7 +47,7 @@
 	 * without persisting them (i.e., if the user presses Cancel then nothing needs to be done.)
 	 */
 	public GlobalConfiguration(GlobalConfiguration original) throws InvocationTargetException {
-		super();
+		super(original.getResource());
 		original.copyTo(this);
 	}
 
@@ -74,7 +67,7 @@
 		_saveAutomatically = save;
 	}
 
-	public void resetToDefault() throws InvocationTargetException {
+	public void resetToDefault()  throws InvocationTargetException {
 		setDisableAllValidation(getDisableValidationDefault());
 		setEnabledValidators(getEnabledValidatorsDefault());
 		setEnabledManualValidators(getManualEnabledValidators());
@@ -84,17 +77,6 @@
 		setDefaultDelegates(getValidators());
 	}
 
-	public void restoreDefaults() throws InvocationTargetException
-	{
-		ValidationPlugin plugin = ValidationPlugin.getPlugin();
-		Preferences pluginPreferences = plugin.getPluginPreferences();
-		deserialize(pluginPreferences.getDefaultString(USER_PREFERENCE));
-		deserializeManual(pluginPreferences.getDefaultString(USER_MANUAL_PREFERENCE));
-		deserializeBuild(pluginPreferences.getDefaultString(USER_BUILD_PREFERENCE));
-		deserializeDelegates(pluginPreferences.getDefaultString(DELEGATES_PREFERENCE));
-	}
-
-	
 	/**
 	 * This method exists only for migration purposes. The root marker must be deleted after
 	 * migration is complete.
@@ -110,15 +92,9 @@
 			// job is done. Nothing to migrate.
 			return null;
 
-		} catch (CoreException exc) {
+		} catch (CoreException e) {
 			// 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);
-			}
+			ValidationPlugin.getPlugin().handleException(e);
 			return null;
 		}
 	}
@@ -138,7 +114,7 @@
 
 			IMarker rootMarker = marker[0]; // getMarker() has already checked that there's a marker
 			// in the array
-			ValidatorMetaData[] enabledValidators = null;
+//			ValidatorMetaData[] enabledValidators = null;
 //			String enabledValidatorsString = (String) getValue(rootMarker, ConfigurationConstants.ENABLED_VALIDATORS);
 //			if (enabledValidatorsString == null) {
 //				enabledValidators = ConfigurationConstants.DEFAULT_ENABLED_VALIDATORS;
@@ -151,18 +127,12 @@
 			setEnabledManualValidators(getStringAsEnabledElementsArray(enabledManualValidators));
 			String enabledBuildValidators = (String) getValue(rootMarker, ConfigurationConstants.ENABLED_BUILD_VALIDATORS);
 			setEnabledManualValidators(getStringAsEnabledElementsArray(enabledBuildValidators));
-			if (enabledManualValidators.equals(null) || enabledBuildValidators.equals(null)) 
-				enabledValidators = ConfigurationConstants.DEFAULT_ENABLED_VALIDATORS;
+//			if (enabledManualValidators.equals(null) || enabledBuildValidators.equals(null)) 
+//				enabledValidators = ConfigurationConstants.DEFAULT_ENABLED_VALIDATORS;
 			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);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 
@@ -224,4 +194,4 @@
 	}
 
 	
-}
\ 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
index f22df4f..959988e 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 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
  *******************************************************************************/
@@ -13,6 +13,9 @@
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IProject;
 
+/**
+ * ValidatorHelper extensions must implement this interface.
+ */
 public interface IProjectValidationHelper {
 	
 	public IContainer[] getOutputContainers(IProject project);
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
index 07d3845..5f9dba8 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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,24 +14,18 @@
 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
@@ -59,15 +53,11 @@
 	/**
 	 * 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;
-		}
+	public static Set<ValidatorMetaData> wrapInSet(ValidatorMetaData[] vmds) {
+		Set<ValidatorMetaData> result = new HashSet<ValidatorMetaData>();
+		if ((vmds == null) || (vmds.length == 0))return result;
 
-		for (int i = 0; i < obj.length; i++) {
-			result.add(obj[i]);
-		}
+		for (ValidatorMetaData vmd : vmds)result.add(vmd);
 
 		return result;
 	}
@@ -113,11 +103,10 @@
 	 * 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]);
+		Set<String> temp = new HashSet<String>();
+		for (ValidatorMetaData vmd : vmds) {
+			for (String name : vmd.getValidatorNames()) {
+				temp.add(name);
 			}
 		}
 
@@ -129,14 +118,11 @@
 	/**
 	 * 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]);
+	public String[] getValidatorNames(Collection<ValidatorMetaData> vmds) {
+		Set<String> temp = new HashSet<String>();
+		for (ValidatorMetaData vmd : vmds) {
+			for (String name : vmd.getValidatorNames()) {
+				temp.add(name);
 			}
 		}
 
@@ -174,19 +160,10 @@
 			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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			if (e.getTargetException() != null)
+				ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return new ValidatorMetaData[0];
 		}
 	}
@@ -203,4 +180,4 @@
 		}
 		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
index 105d838..5f39ecf 100644
--- 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
@@ -1,42 +1,40 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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.HashSet;
 import java.util.Map;
-import java.util.logging.Level;
+import java.util.Set;
+import java.util.StringTokenizer;
 
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ProjectScope;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.IScopeContext;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.delegates.ValidatorDelegateDescriptor;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 import org.osgi.service.prefs.BackingStoreException;
 
-
 /**
  * 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)
+	
+	/** false - If the user has never set a preference before, this is the override default */
+	static final boolean PRJ_OVERRIDEGLOBAL_DEFAULT = false;
+	
+	/** default_value - the configuration is using the defaults. */
+	private static final String DefaultValue = "default_value"; //$NON-NLS-1$
+	
 	private boolean _doesProjectOverride = getDoesProjectOverrideDefault();
 
 	/**
@@ -47,22 +45,21 @@
 		// global list.
 		super(project, extractProjectValidators(convertToArray(ValidationRegistryReader.getReader().getAllValidators()), project));
 
-		// Can't put the call to load() and passivate() in the ValidationConfiguration constructor
-		// due
+		// 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.
+		//    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.
+		//       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.)
+	 * 
+	 * @deprecated
 	 */
 	public ProjectConfiguration(ProjectConfiguration original) throws InvocationTargetException {
-		super();
+		super(original.getResource());
 		original.copyTo(this);
 	}
 
@@ -84,17 +81,15 @@
 			// 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);
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return false;
 		}
 	}
+	
+	public boolean getDoesProjectOverride(){
+		return _doesProjectOverride;
+	}
 
 	public boolean doesProjectOverride() {
 		// If the global preference doesn't allow projects to override, it doesn't matter what the
@@ -152,11 +147,7 @@
 		return super.getValidators();
 	}
 
-	/*
-   * (non-Javadoc)
-   * @see org.eclipse.wst.validation.internal.ValidationConfiguration#getDelegatingValidators()
-	 */
-  public Map getDelegatingValidators() throws InvocationTargetException {
+  public Map<String,String> getDelegatingValidators() throws InvocationTargetException {
     if (useGlobalPreference()) {
       return ConfigurationManager.getManager().getGlobalConfiguration().getDelegatingValidators();
     }
@@ -283,7 +274,7 @@
 
 		setEnabledManualValidators(gp.getManualEnabledValidators());
 		setEnabledBuildValidators(gp.getBuildEnabledValidators());
-    setDelegatingValidators(gp.getDelegatingValidators());
+		setDelegatingValidators(gp.getDelegatingValidators());
 		
 		// except for this field, which is unique to the project preferences
 		setDoesProjectOverride(getDoesProjectOverrideDefault());
@@ -294,12 +285,14 @@
 		GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
 		setEnabledManualValidators(gp.getManualEnabledValidators());
 		setEnabledBuildValidators(gp.getBuildEnabledValidators());
-    setDelegatingValidators(gp.getDelegatingValidators());
+		setDelegatingValidators(gp.getDelegatingValidators());
 	}
 
 	/**
 	 * 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.
+	 * 
+	 * @deprecated this method doesn't do anything
 	 */
 	public void resetProjectNature() {
 		/*
@@ -333,15 +326,8 @@
 			}
 			// 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);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return null;
 		}
 	}
@@ -364,7 +350,7 @@
 
 			IMarker prjMarker = marker[0]; // getProjectMarker() has already checked that there's a
 			// marker in the array
-			GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
+//			GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
 
 //			String enabledValStr = (String) getValue(prjMarker, ConfigurationConstants.ENABLED_VALIDATORS);
 //			ValidatorMetaData[] enabledVal = null;
@@ -379,10 +365,11 @@
 			ValidatorMetaData[] enabledBuildVal = null;
 			String enabledManualValStr = (String) getValue(prjMarker, ConfigurationConstants.ENABLED_MANUAL_VALIDATORS);
 			String enabledBuildValStr = (String) getValue(prjMarker, ConfigurationConstants.ENABLED_BUILD_VALIDATORS);
-			ValidatorMetaData[] enabledVal = null;
-			if (enabledManualValStr.equals(null) || enabledBuildValStr.equals(null)) {
-				enabledVal = gp.getEnabledValidators();
-			} else {
+//			ValidatorMetaData[] enabledVal = null;
+//			if (enabledManualValStr.equals(null) || enabledBuildValStr.equals(null)) {
+//				enabledVal = gp.getEnabledValidators();
+//			} else {
+			if (!enabledManualValStr.equals(null) && !enabledBuildValStr.equals(null)) {
 				enabledManaualVal = getStringAsEnabledElementsArray(enabledManualValStr);
 				setEnabledManualValidators(enabledManaualVal);
 				enabledBuildVal = getStringAsEnabledElementsArray(enabledManualValStr);
@@ -402,25 +389,12 @@
 			} else {
 				setDoesProjectOverride(boolVal.booleanValue());
 			}
-			boolean override = doesProjectOverride();
 
 			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);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 
@@ -472,10 +446,7 @@
 		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
+			// for whether the global preferences are to be used or not
 			GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
 			return gp.hasEnabledValidatorsChanged(projEnabledVmd);
 		}
@@ -483,14 +454,14 @@
 		return false;
 	}
 
-  public boolean haveDelegatesChanged(Map oldDelegates, boolean allow) throws InvocationTargetException {
+  public boolean haveDelegatesChanged(Map<String, String> oldDelegates, boolean allow) throws InvocationTargetException {
 
     if (super.haveDelegatesChanged(oldDelegates)) {
       return true;
     }
 
     if (allow) {
-      Map projDelegates = super.getDelegatingValidators(); 
+      Map<String, String> projDelegates = super.getDelegatingValidators(); 
       GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
       return gp.haveDelegatesChanged(projDelegates);
     }
@@ -499,11 +470,8 @@
   }
 
 
-	/**
-	 * @see org.eclipse.wst.validation.internal.operations.internal.attribute.ValidationConfiguration#deserialize(String)
-	 */
 	public void deserialize(String storedConfiguration) throws InvocationTargetException {
-		if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals("default_value")) {
+		if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals(DefaultValue)) {
 			resetToDefault();
 		} else if (storedConfiguration != null) {
 			int prjOverrideIndex = storedConfiguration.indexOf(ConfigurationConstants.PRJ_OVERRIDEGLOBAL);
@@ -513,7 +481,7 @@
 				String disableAllValidation = storedConfiguration.substring(disableAllValidationIndex + ConfigurationConstants.DISABLE_ALL_VALIDATION_SETTING.length(), versionIndex);
 				setDisableAllValidation(Boolean.valueOf(disableAllValidation).booleanValue());
 			} else {
-				setDisableAllValidation(false);;
+				setDisableAllValidation(false);
 			}
 			// project doesn't override the global
 			if (disableAllValidationIndex != -1) {
@@ -523,9 +491,6 @@
 		}
 	}
 
-	/**
-	 * @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);
@@ -537,11 +502,6 @@
 		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());
@@ -625,35 +585,75 @@
   
   public void store() throws InvocationTargetException {
 		IProject project = (IProject) getResource();
-		IScopeContext projectContext = new ProjectScope((IProject) getResource());
-		final IEclipsePreferences pref = projectContext.getNode(ValidationPlugin.PLUGIN_ID);
+		final PreferencesWrapper pref = PreferencesWrapper.getPreferences(project, null);
 		if (pref != null) {
 			try {
-				pref.put(USER_PREFERENCE, serialize());
-				pref.put(USER_MANUAL_PREFERENCE, serializeManualSetting());
-				pref.put(USER_BUILD_PREFERENCE, serializeBuildSetting());
-				pref.put(DELEGATES_PREFERENCE, serializeDelegatesSetting());
+				pref.put(ValidationConfiguration.UserPreference, serialize());
+				pref.put(ValidationConfiguration.UserManualPreference, serializeManualSetting());
+				pref.put(ValidationConfiguration.UserBuildPreference, serializeBuildSetting());
+				pref.put(ValidationConfiguration.DelegatesPreference, serializeDelegatesSetting());
 				pref.flush();
-			} catch (BackingStoreException bse) {
-				Logger.getLogger().log(bse);
+			} catch (BackingStoreException e) {
+				// A common error is that the project has been closed, in which case there
+				// is nothing that we can do.
+				if (project.isAccessible())ValidationPlugin.getPlugin().handleException(e);
 			}
 		}
 	}
   
   protected void loadPreference() throws InvocationTargetException {
 		IProject project = (IProject) getResource();
-		IScopeContext projectContext = new ProjectScope(project);
-		final IEclipsePreferences prefs = projectContext.getNode(ValidationPlugin.PLUGIN_ID);
-		if (prefs != null) {
-			String projectName = project.getName();
-			String storedConfig = prefs.get(USER_PREFERENCE,"default_value");
+		final PreferencesWrapper prefs = PreferencesWrapper.getPreferences(project, null);
+		if (prefs.nodeExists()) { 
+			String storedConfig = prefs.get(ValidationConfiguration.UserPreference, DefaultValue);
 			deserialize(storedConfig);
-			String storedManualConfig = prefs.get(USER_MANUAL_PREFERENCE,"default_value");
+			String storedManualConfig = prefs.get(ValidationConfiguration.UserManualPreference, DefaultValue);
 			deserializeManual(storedManualConfig);
-			String storedBuildConfig = prefs.get(USER_BUILD_PREFERENCE,"default_value");
+			String storedBuildConfig = prefs.get(ValidationConfiguration.UserBuildPreference, DefaultValue);
 			deserializeBuild(storedBuildConfig);
-			String storedDelegatesConfiguration = prefs.get(DELEGATES_PREFERENCE,"default_value");
+			String storedDelegatesConfiguration = prefs.get(ValidationConfiguration.DelegatesPreference, DefaultValue);
 			deserializeDelegates(storedDelegatesConfiguration);
 		}
 	}
-}
\ No newline at end of file
+  
+  /**
+   * Answer the validator id's that have been enabled for manual validation.
+   * @return null if they are all enabled
+   */
+  Set<String> getEnabledManualValidators(){
+	  return getIds(ValidationConfiguration.UserManualPreference, ConfigurationConstants.ENABLED_MANUAL_VALIDATORS);
+  }
+  
+  /**
+   * Answer the validator id's that have been enabled for build validation.
+   * @return null if they are all enabled
+   */
+  Set<String> getEnabledBuildlValidators(){
+	  return getIds(ValidationConfiguration.UserBuildPreference, ConfigurationConstants.ENABLED_BUILD_VALIDATORS);
+  }
+  
+  /**
+   * A helper method to extract some validator id's from a preference store field.
+   * 
+   * @return null if all the validators are enabled.
+   */
+  private Set<String> getIds(String prefKey, String enabledPhrase){
+	IProject project = (IProject) getResource();
+	final PreferencesWrapper prefs = PreferencesWrapper.getPreferences(project, null);
+	if (prefs == null)return null;
+	
+	String storedConfig = prefs.get(prefKey, DefaultValue);
+	if (storedConfig == null || storedConfig.length() == 0 || storedConfig.equals(DefaultValue))return null;
+	int validationIndex = storedConfig.indexOf(enabledPhrase);
+
+	String ids = storedConfig.substring(validationIndex + enabledPhrase.length(),storedConfig.length());
+
+	StringTokenizer tokenizer = new StringTokenizer(ids, ConfigurationConstants.ELEMENT_SEPARATOR);
+	Set<String> set = new HashSet<String>(20);
+	while (tokenizer.hasMoreTokens())set.add(tokenizer.nextToken());
+	if (set.size() == 0)return null;
+	  
+	return set;
+	  
+  }
+}
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
index 9927fd4..d638d0a 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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,28 +17,30 @@
 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;
+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 ReferencialFileValidatorExtension {
 	private String id = null;
 	private ReferencialFileValidator instance;
 	private boolean errorCondition = false;
 	private IConfigurationElement element;
+	
+	/** referencialFileValidator */
 	public static final String REF_FILE_VALIDATOR_EXTENSION = "referencialFileValidator"; //$NON-NLS-1$
+	
+	/** run */
 	public static final String RUN = "run"; //$NON-NLS-1$
+	
+	/** id */
 	public static final String ATT_ID = "id"; //$NON-NLS-1$
+	
+	/** class */
 	public static final String ATT_CLASS = "class"; //$NON-NLS-1$
 
-	/**
-	 *  
-	 */
 	public ReferencialFileValidatorExtension() {
 		super();
 	}
@@ -46,9 +48,9 @@
 	public ReferencialFileValidator getInstance() {
 		try {
 			if (instance == null && !errorCondition)
-				instance = (ReferencialFileValidator) element.createExecutableExtension("run"); //$NON-NLS-1$
-		} catch (Throwable e) {
-			Logger.getLogger().logError(e);
+				instance = (ReferencialFileValidator) element.createExecutableExtension(RUN);
+		} catch (Exception e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			errorCondition = true;
 		}
 		return instance;
@@ -83,4 +85,4 @@
 	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
index 59f803a..c9233ef 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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,32 +17,60 @@
 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.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
 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;
+public class ReferencialFileValidatorRegistryReader {
+	static ReferencialFileValidatorRegistryReader instance;
+	
+	private static final String Id = "id"; //$NON-NLS-1$
+	private static final String ExtensionPoint = "referencialFileValidator"; //$NON-NLS-1$
+	
+	protected List<ReferencialFileValidatorExtension> referencialFileValidationExtensions;
 
-	/**
-	 * @param arg0
-	 * @param arg1
-	 * @param arg2
-	 */
 	public ReferencialFileValidatorRegistryReader() {
-		super(ValidationPlugin.PLUGIN_ID, "referencialFileValidator"); //$NON-NLS-1$
 	}
+	
+	/**
+	 * Read the extension point and parse it.
+	 */
+	public void readRegistry() {
+		IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(Id, ExtensionPoint);
+		if (point == null)return;
+		IConfigurationElement[] elements = point.getConfigurationElements();
+		for (int i = 0; i < elements.length; i++) {
+			internalReadElement(elements[i]);
+		}
+	}
+	
+	private void internalReadElement(IConfigurationElement element) {
+		boolean recognized = this.readElement(element);
+		if (!recognized) {
+			logError(element, "Error processing extension: " + element); //$NON-NLS-1$
+		}
+	}
+
+	/*
+	 * Logs the error in the desktop log using the provided text and the information in the configuration element.
+	 */
+	protected void logError(IConfigurationElement element, String text) {
+		IExtension extension = element.getDeclaringExtension();
+		StringBuffer buf = new StringBuffer();
+		buf.append("Plugin " + extension.getContributor().getName() + ", extension " + extension.getExtensionPointUniqueIdentifier()); //$NON-NLS-1$ //$NON-NLS-2$
+		buf.append("\n" + text); //$NON-NLS-1$
+		ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, buf.toString());
+	}
+
 
 	/*
 	 * (non-Javadoc)
@@ -60,19 +88,15 @@
 	/**
 	 * Sets the extension point.
 	 * 
-	 * @param extensions
+	 * @param newExtension
 	 *            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
+    	//add to the list of post validator extensions only if the extension 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;
+    	for(ReferencialFileValidatorExtension ext : getReferencialFileValidationExtensions()) {
+    		if(!ext.getElement().getAttribute(Id).equals(newExtension.getAttribute(Id)))containsExt = false;
     	}
     	if(!containsExt ||getReferencialFileValidationExtensions().isEmpty())
     		getReferencialFileValidationExtensions().add(new ReferencialFileValidatorExtension(newExtension));
@@ -83,12 +107,12 @@
 	/**
 	 * Sets the extension point.
 	 * 
-	 * @param extensions
+	 * @param newExtension
 	 *            The extensions to set
 	 */
 	protected void addExtensionPoint(ReferencialFileValidatorExtension newExtension) {
 		if (referencialFileValidationExtensions == null)
-			referencialFileValidationExtensions = new ArrayList();
+			referencialFileValidationExtensions = new ArrayList<ReferencialFileValidatorExtension>();
 		referencialFileValidationExtensions.add(newExtension);
 	}
 
@@ -97,18 +121,14 @@
 	 *         available and enabled
 	 */
 	public ReferencialFileValidator getReferencialFileValidator() {
-		ReferencialFileValidatorExtension refFileValExt;
-		for (Iterator refFileValItr = getReferencialFileValidationExtensions().iterator(); refFileValItr.hasNext();) {
-			refFileValExt = (ReferencialFileValidatorExtension) refFileValItr.next();
+		for (ReferencialFileValidatorExtension refFileValExt: getReferencialFileValidationExtensions()) {
 			return refFileValExt.getInstance();
 		}
 		return null;
 	}
 
 	/**
-	 * Gets the instance.
-	 * 
-	 * @return Returns a EJBCodegenHandlerExtensionReader
+	 * Gets the singleton instance.
 	 */
 	public static ReferencialFileValidatorRegistryReader getInstance() {
 		if (instance == null) {
@@ -121,10 +141,10 @@
 	/**
 	 * @return Returns the handlerExtensions.
 	 */
-	protected List getReferencialFileValidationExtensions() {
+	protected List<ReferencialFileValidatorExtension> getReferencialFileValidationExtensions() {
 		if (referencialFileValidationExtensions == null)
-			referencialFileValidationExtensions = new ArrayList();
+			referencialFileValidationExtensions = new ArrayList<ReferencialFileValidatorExtension>();
 		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
index ee6e106..81a78b4 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 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
  *******************************************************************************/
@@ -19,55 +19,122 @@
  * 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
+	String PLUGIN_ID = ValidationPlugin.PLUGIN_ID;
+	
+	/** validator - extension point declaration of the validator */
+	String VALIDATOR_EXT_PT_ID = "validator"; //$NON-NLS-1$
 
-	/* 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.
+	/** run - identifies the Validator class */
+	String TAG_RUN_CLASS = "run"; //$NON-NLS-1$
+	
+	/** 
+	 * filter - 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.) 
+	 */ 
+	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.)
+	 */
+	String TAG_CONTENTTYPE = "contentTypeBinding"; //$NON-NLS-1$ 
+	
+	/**
+	 *  identifies a type
+	 */
+	String ATT_CONTENTTYPEID = "contentTypeId"; //$NON-NLS-1$ 
+	/** helper - IValidationContext which loads the MOF model for the IValidator */ 
+	String TAG_HELPER_CLASS = "helper"; //$NON-NLS-1$
+	
+	/** projectNature - identifies the projects which the validator should run on */
+	String TAG_PROJECT_NATURE = "projectNature"; //$NON-NLS-1$
+	
+	/** 
+	 * aggregateValidator - 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. */
+	String TAG_AGGREGATE_VALIDATORS = "aggregateValidator"; //$NON-NLS-1$ 
 
-	/* 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.
+	/** objectClass - identifies a type */ 
+	String ATT_OBJECT_CLASS = "objectClass"; //$NON-NLS-1$
+	
+	/** nameFilter - identifies a name (may include the '*' wildcard anywhere in the name) */
+	String ATT_NAME_FILTER = "nameFilter"; //$NON-NLS-1$
+	
+	/** id - identifies a unique id to filter on */
+	String ATT_ID = "id"; //$NON-NLS-1$
+	
+	/** class - identifies a class name of a tag, e.g. "helper class", or "run class" */
+	String ATT_CLASS = "class"; //$NON-NLS-1$
+	
+	/** action - identifies the incremental validation actions for which a resource should be filtered in */ 
+	String ATT_ACTION_FILTER = "action"; //$NON-NLS-1$
+	
+	/** 
+	 * incremental - identifies whether or not the validator supports incremental build validation. 
+	 * Default is true (i.e., incremental builds are supported). 
+	 */
+	String ATT_INCREMENTAL = "incremental"; //$NON-NLS-1$
+	
+	/** true - The incremental default. */
+	boolean ATT_INCREMENTAL_DEFAULT = true;
+	
+	/** 
+	 * fullBuild - identifies whether or not the validator supports full build validation. 
+	 * Default is true (i.e., full build validation is supported).
+	 */ 
+	String ATT_FULLBUILD = "fullBuild"; //$NON-NLS-1$ 
+	
+	/** true - The build default. */
+	boolean ATT_FULLBUILD_DEFAULT = true;
+	
+	/** enabled - identifies whether or not the validator is enabled by default. Default is "true" (enabled). */ 
+	String ATT_ENABLED = "enabled"; //$NON-NLS-1$
+	
+	/** true - The "enabled" default. */
+	boolean ATT_ENABLED_DEFAULT = true;
+	
+	/** include - Include projects with this nature */
+	String ATT_INCLUDE = "include"; //$NON-NLS-1$
+	
+	/** 
+	 * true - By default, if "include" is not specified in the projectNature element, 
+	 * then assume that the nature is included. */
+	boolean ATT_INCLUDE_DEFAULT = true;
+	
+	/** 
+	 * ruleGroup - identifies the different validation passes which this validator recognizes. 
+	 * The values are identified in IRuleGroup.
+	 */
+	String ATT_RULE_GROUP = "ruleGroup"; //$NON-NLS-1$
+	
+	/** the default pass includes only the FAST PASS. FULL can be invoked only explicitly by an operation. */
+	int ATT_RULE_GROUP_DEFAULT = IRuleGroup.PASS_FAST;
+	
+	/** caseSensitive */
+	String ATT_CASE_SENSITIVE = "caseSensitive"; //$NON-NLS-1$
+	
+	/** async - Is the validator thread-safe? */
+	String ATT_ASYNC = "async"; //$NON-NLS-1$
+	
+	/** false - The "can validator run asynchronously" default. In the future this may be changed to true. */
+	boolean ATT_ASYNC_DEFAULT = false;
 
-
-	/* 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;
-	static final String FACET = "facet"; //$NON-NLS-1$
-	static final String FACET_ID ="facetId"; //$NON-NLS-1$
-}
\ No newline at end of file
+	/** migrate - the "migrate" section of the validator */
+	String TAG_MIGRATE = "migrate"; //$NON-NLS-1$
+	
+	/** validator - the "validator" element of the "migrate" section */
+	String TAG_VALIDATOR = "validator"; //$NON-NLS-1$
+	
+	/** from - the fully-qualified class name of the former validator class */
+	String ATT_FROM = "from"; //$NON-NLS-1$
+	
+	/** to - the fully-qualified class name of the current validator class */
+	String ATT_TO = "to"; //$NON-NLS-1$
+	String DEP_VALIDATOR = "dependentValidator"; //$NON-NLS-1$
+	String DEP_VAL_VALUE = "depValValue"; //$NON-NLS-1$
+	String MARKER_ID = "markerId"; //$NON-NLS-1$
+	String MARKER_ID_VALUE = "markerIdValue"; //$NON-NLS-1$
+	boolean DEP_VAL_VALUE_DEFAULT = false;
+	String FACET = "facet"; //$NON-NLS-1$
+	String FACET_ID ="facetId"; //$NON-NLS-1$
+}
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
index 515768e..62f8a08 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -13,111 +13,107 @@
 
 
 /**
- * Constants used to access the string resources associated with the plugin.
+ * Constants used to access the string resources associated with the plug-in.
  * 
  * 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$ 
+	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$ 
+	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$ 
+	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$ 
+	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$ 
+	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$ 
+	// A java.lang.Runtime error has occurred during the build.
+	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$ 
+	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$ 
+	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$ 
+	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$ 
+	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$ 
+	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$ 
+	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$ 
+	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$ 
+	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$ 
+	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
+	// After a validator is finished, this message informs the user that validation, using a
 	// particular validator, has completed.
-	public static final String VBF_STATUS_ENDING_VALIDATION = "VBF_STATUS_ENDING_VALIDATION"; //$NON-NLS-1$ 
+	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$ 
+	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$ 
+	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$ 
+	String VBF_EXC_SYNTAX_NO_HELPER = "VBF_EXC_SYNTAX_NO_HELPER"; //$NON-NLS-1$ 
+	String VBF_EXC_SYNTAX_NO_HELPER_CLASS = "VBF_EXC_SYNTAX_NO_HELPER_CLASS"; //$NON-NLS-1$ 
+	String VBF_EXC_SYNTAX_NO_HELPER_THROWABLE = "VBF_EXC_SYNTAX_NO_HELPER_THROWABLE"; //$NON-NLS-1$ 
+	String VBF_EXC_SYNTAX_NO_VAL_THROWABLE = "VBF_EXC_SYNTAX_NO_VAL_THROWABLE"; //$NON-NLS-1$ 
+	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$ 
+	String VBF_EXC_NULLCREATE = "VBF_EXC_NULLCREATE"; //$NON-NLS-1$ 
+	String VBF_EXC_NULLSAVE = "VBF_EXC_NULLSAVE"; //$NON-NLS-1$ 
+	String VBF_EXC_SAVE = "VBF_EXC_SAVE"; //$NON-NLS-1$ 
+	String VBF_EXC_NULLRETRIEVE = "VBF_EXC_NULLRETRIEVE"; //$NON-NLS-1$ 
+	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$ 
+	String VBF_EXC_BADVMD = "VBF_EXC_BADVMD"; //$NON-NLS-1$ 
+	String VBF_EXC_OPENPRJ = "VBF_EXC_OPENPRJ"; //$NON-NLS-1$ 
+	String VBF_EXC_EXISTPRJ = "VBF_EXC_EXISTPRJ"; //$NON-NLS-1$ 
+	String VBF_EXC_BADPRJ = "VBF_EXC_BADPRJ"; //$NON-NLS-1$ 
+	String VBF_EXC_MULTIPRJ = "VBF_EXC_MULTIPRJ"; //$NON-NLS-1$ 
+	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$ 
+	String VBF_STATUS_START_REMOVING_OLD_MESSAGES = "VBF_STATUS_START_REMOVING_OLD_MESSAGES"; //$NON-NLS-1$ 
+	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$
+	String VBF_TASK_WARN_MESSAGE_LIMIT_VAL = "VBF_TASK_WARN_MESSAGE_LIMIT_VAL"; //$NON-NLS-1$
 	
-	public static final String VBF_VALIDATION_JOB_MSG = "VBF_VALIDATION_JOB_MSG"; //$NON-NLS-1$
+	String VBF_VALIDATION_JOB_MSG = "VBF_VALIDATION_JOB_MSG"; //$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$ 
+	String VBF_EXC_DISABLEV = "VBF_EXC_DISABLEV"; //$NON-NLS-1$ 
+	String VBF_EXC_DISABLEH = "VBF_EXC_DISABLEH"; //$NON-NLS-1$ 
+	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$
+	String VBF_STATUS_LOOKING = "VBF_STATUS_LOOKING"; //$NON-NLS-1$ 
+	String VBF_STATUS_LOOKINGDONE = "VBF_STATUS_LOOKINGDONE"; //$NON-NLS-1$ 
+	String VBF_STATUS_REMOVING = "VBF_STATUS_REMOVING"; //$NON-NLS-1$ 
+	String VBF_STATUS_REMOVINGDONE = "VBF_STATUS_REMOVINGDONE"; //$NON-NLS-1$
   
-  public static final String VBF_WRONG_CONTEXT_FOR_DELEGATE = "VBF_WRONG_CONTEXT_FOR_DELEGATE"; //$NON-NLS-1$
-  public static final String VBF_NO_DELEGATE = "VBF_NO_DELEGATE"; //$NON-NLS-1$
-  public static final String VBF_CANNOT_INSTANTIATE_DELEGATE = "VBF_CANNOT_INSTANTIATE_DELEGATE"; //$NON-NLS-1$  
-}
\ No newline at end of file
+	String VBF_WRONG_CONTEXT_FOR_DELEGATE = "VBF_WRONG_CONTEXT_FOR_DELEGATE"; //$NON-NLS-1$
+	String VBF_NO_DELEGATE = "VBF_NO_DELEGATE"; //$NON-NLS-1$
+	String VBF_CANNOT_INSTANTIATE_DELEGATE = "VBF_CANNOT_INSTANTIATE_DELEGATE"; //$NON-NLS-1$  
+}
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
index 0cf1cd4..c3d2f7e 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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,17 +12,12 @@
 
 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.
@@ -39,16 +34,11 @@
 	public static ResourceBundle getBundle() {
 		if (_bundle == null) {
 			try {
-				_bundle = ResourceBundle.getBundle(ValidationPlugin.getBundleName());
+				_bundle = ResourceBundle.getBundle(ValidationPlugin.getBundlePropertyFileName());
 			} 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);
+				if (Tracing.isLogging()) {
+					Tracing.log("ResourceHandler-01", "Cannot find bundle " + ValidationPlugin.getBundlePropertyFileName()); //$NON-NLS-1$ //$NON-NLS-2$
 				}
 			}
 		}
@@ -59,26 +49,13 @@
 		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);
-				}
+				Tracing.log("ResourceHandler-02: ", "Resource bundle is null"); //$NON-NLS-1$ //$NON-NLS-2$
 				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);
-			}
+			Tracing.log("ResourceHandler-03: ", "Cannot find message id ", key); //$NON-NLS-1$ //$NON-NLS-2$
 		}
 		return key;
 	}
@@ -86,26 +63,14 @@
 	public static String getExternalizedMessage(String key, String[] parms) {
 		String res = ""; //$NON-NLS-1$
 		try {
-			res = java.text.MessageFormat.format(getExternalizedMessage(key), parms);
+			res = java.text.MessageFormat.format(getExternalizedMessage(key), (Object[])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);
-			}
+			Tracing.log("ResourceHandler-04: ", "Cannot find message id ", key); //$NON-NLS-1$ //$NON-NLS-2$
 		} 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);
+			if (Tracing.isLogging()) {
+				Tracing.log("ResourceHandler-05: Cannot format message id " + key + " with " + parms.length + " parameters."); //$NON-NLS-1$  //$NON-NLS-2$  //$NON-NLS-3$
 			}
 		}
 		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
index cdbf991..1cae3c1 100644
--- 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
@@ -1,17 +1,16 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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;
@@ -19,8 +18,6 @@
 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;
 
@@ -48,6 +45,7 @@
 	 * This method is here for use by the SABER validator's reporter instance ONLY. Do not use. See
 	 * defect 260144 for details.
 	 */
+	@SuppressWarnings("unchecked")
 	public static IMarker setPriority(IMarker item, int priority) throws CoreException {
 		Map attrib = item.getAttributes();
 		attrib.put(IMarker.PRIORITY, new Integer(priority));
@@ -58,8 +56,11 @@
 	/**
 	 * 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)) {
+	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) || (!resource.exists())) {
 			return null;
 		}
 
@@ -75,6 +76,7 @@
 		// in more than one place, and also to clear out any old messages which are not cleared
 		// by the validation framework.
 		IMarker item = null;
+		MarkerManager.getDefault().hook(resource);
 		if(markerName != null && markerName.length() >0 )
 			 item = resource.createMarker(markerName); // add a validation marker
 		else
@@ -141,80 +143,12 @@
 	/**
 	 * 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;
+	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 {
+		
+		return addTask(pluginId, resource, location, messageId, 
+				message, markerType, null, targetObjectName, groupName, offset, length);
 	}
 
 	/**
@@ -282,14 +216,8 @@
 			}
 
 			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);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return false;
 		}
 	}
@@ -297,75 +225,42 @@
 	private static IMarker[] getValidationTasks(IResource resource, int severity, int depth) {
 		IMarker[] tempMarkers = null;
 		int validCount = 0;
+		IMarker[] allMarkers = null;
 		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;
-			}
+			allMarkers = resource.findMarkers(VALIDATION_MARKER, true, depth);
+		} catch (CoreException e) {
+			if (Tracing.isLogging())ValidationPlugin.getPlugin().handleException(e);
+			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 {
+		// Now filter in the markers, based on severity type.
+		if (allMarkers.length != 0) {
+			tempMarkers = new IMarker[allMarkers.length];
+			for (IMarker marker : allMarkers) {
+				Integer filterSeverity = null;
+				try {
+					filterSeverity = (Integer) marker.getAttribute(VALIDATION_MARKER_SEVERITY);
+				}
+				catch (CoreException e){
+					// Someone may have deleted the marker on us. All we can do is skip it.
+					continue;
+				}
+				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 {
+						// 226541 - I was seeing markers with valid severities being reset, so I added this
+						// additional test.
+						if (marker.getAttribute(IMarker.SEVERITY, -1) == -1)
 							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) {
+					} catch (Exception e) {
+						ValidationPlugin.getPlugin().handleException(e);
 						continue;
 					}
-					tempMarkers[validCount++] = marker;
+				} else if ((severity & filterSeverity.intValue()) == 0) {
+					continue;
 				}
-			}
-		} 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);
+				tempMarkers[validCount++] = marker;
 			}
 		}
 
@@ -388,40 +283,32 @@
 
 	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;
-		}
+		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];
-
+		for (IMarker marker : markers) {
+			Object owner = null;
 			try {
-				Object owner = marker.getAttribute(VALIDATION_MARKER_OWNER);
-				if ((owner == null) || !(owner instanceof String)) {
-					// The ValidationMigrator will remove any "unowned" validation markers.
-					continue;
-				}
+				owner = marker.getAttribute(VALIDATION_MARKER_OWNER);
+			} catch (CoreException e) {
+				// eat it -- if it no longer exists there is nothing we can do about it
+			}
+			
+			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;
-					}
+			for (String messageOwner : messageOwners) {
+				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;
 			}
 		}
+		
+		if (validCount == 0)return NO_MARKERS;
 
 		IMarker[] result = new IMarker[validCount];
 		System.arraycopy(temp, 0, result, 0, validCount);
@@ -487,15 +374,8 @@
 		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);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 
@@ -568,4 +448,4 @@
 			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
index 05b3891..e9d9b7e 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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,10 +12,8 @@
 
 
 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.core.runtime.IStatus;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 
 
@@ -45,13 +43,8 @@
 					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);
-							}
+							String message = "restart = " + restart; //$NON-NLS-1$
+							ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, message);
 							break;
 						}
 
@@ -63,20 +56,10 @@
 							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
+					} catch (Exception e) {
 						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);
-						}
+						ValidationPlugin.getPlugin().handleException(e);
 					} finally {
 						//do nothing
 					}
@@ -111,11 +94,11 @@
 	}
 
 	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?
+		private Vector<Runnable> _queuedJobs; // The queued Runnables that need to be run.
+		private boolean _isActive; // Is a job being run in the validation thread?
 
 		public Jobs() {
-			__jobs = new Vector();
+			_queuedJobs = new Vector<Runnable>();
 		}
 
 		public synchronized void queue(Runnable runnable) {
@@ -125,7 +108,7 @@
 			// 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);
+			_queuedJobs.add(runnable);
 			notifyAll();
 		}
 
@@ -133,7 +116,7 @@
 		 * Pop the Runnable off of the head of the queue.
 		 */
 		synchronized Runnable dequeue() {
-			while (__jobs.size() == 0) {
+			while (_queuedJobs.size() == 0) {
 				try {
 					wait();
 				} catch (InterruptedException exc) {
@@ -142,10 +125,10 @@
 			} // 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 (_queuedJobs.size() > 0) {
+				job = _queuedJobs.get(0);
 				if (job != null) {
-					__jobs.remove(0);
+					_queuedJobs.remove(0);
 				}
 			}
 			return job;
@@ -163,7 +146,7 @@
 		 * Return true if all of the Runnables have been run.
 		 */
 		public synchronized boolean isDone() {
-			return ((__jobs.size() == 0) && !isActive());
+			return ((_queuedJobs.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
index a052d95..3ddb087 100644
--- 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
@@ -1,30 +1,24 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
 import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 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;
@@ -34,12 +28,10 @@
 import org.eclipse.core.runtime.Preferences;
 import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;
 import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.delegates.ValidatorDelegateDescriptor;
 import org.eclipse.wst.validation.internal.delegates.ValidatorDelegatesRegistry;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
+import org.osgi.service.prefs.BackingStoreException;
 
 /**
  * This class represents the user's preference or project settings.
@@ -48,31 +40,43 @@
  * property while the resource is open.
  */
 public abstract class ValidationConfiguration implements IPropertyChangeListener {
-	private IResource _resource = null;
-	private boolean disableAllValidation = getDisableAllValidation();
-	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.
-	protected HashMap manualValidators = null;
-	protected HashMap buildValidators = null;
-	protected String USER_PREFERENCE = "USER_PREFERENCE";
-	protected String USER_MANUAL_PREFERENCE = "USER_MANUAL_PREFERENCE";
-	protected String USER_BUILD_PREFERENCE = "USER_BUILD_PREFERENCE";
-	protected String DELEGATES_PREFERENCE = "DELEGATES_PREFERENCE";
+	private final IResource 	_resource;
+	private boolean 	disableAllValidation = getDisableAllValidation();
+	private String 		_version;
 	
-  private Map _delegatesByTarget = null;
+	/**
+	 * Map of all validators configured on the project or installed globally. The value of true
+	 * means that the VMD is enabled, and a value of false means that the VMD is disabled.
+	 */
+	private Map<ValidatorMetaData, Boolean>		_validators = new HashMap<ValidatorMetaData, Boolean>();
+	protected Map<ValidatorMetaData, Boolean> 	manualValidators;
+	protected Map<ValidatorMetaData, Boolean> 	buildValidators;
+	
+	protected static final String UserPreference = "USER_PREFERENCE"; //$NON-NLS-1$
+	protected static final String UserBuildPreference = "USER_BUILD_PREFERENCE"; //$NON-NLS-1$
+	protected static final String UserManualPreference = "USER_MANUAL_PREFERENCE"; //$NON-NLS-1$
+	protected static final String DelegatesPreference = "DELEGATES_PREFERENCE"; //$NON-NLS-1$
+	
+	// GRK - I am keeping these "constants" in the off chance that they were used somewhere outside the framework
+	protected String USER_PREFERENCE 		= UserPreference;
+	protected String USER_MANUAL_PREFERENCE = UserManualPreference;
+	protected String USER_BUILD_PREFERENCE 	= UserBuildPreference;
+	protected String DELEGATES_PREFERENCE 	= DelegatesPreference;
+	
+	/**
+	 * The key is the target id, that is the id of the place holder validator. The value is the id 
+	 * of the real validator. 
+	 */
+	private Map<String, String> _delegatesByTarget = new HashMap<String, String>();
+	
+	private static final String DefaultValue = "default_value"; //$NON-NLS-1$
 
-	public static String getEnabledElementsAsString(Set elements) {
-		if (elements == null) {
-			return null;
-		}
+	public static String getEnabledElementsAsString(Set<ValidatorMetaData> elements) {
+		if (elements == null)return null;
 
 		StringBuffer buffer = new StringBuffer();
-		Iterator iterator = elements.iterator();
-		while (iterator.hasNext()) {
-			buffer.append(((ValidatorMetaData) iterator.next()).getValidatorUniqueName());
+		for (ValidatorMetaData vmd : elements) {
+			buffer.append(vmd.getValidatorUniqueName());
 			buffer.append(ConfigurationConstants.ELEMENT_SEPARATOR);
 		}
 		return buffer.toString();
@@ -82,36 +86,30 @@
 		return false;
 	}
 
-	public static String getEnabledElementsAsString(Object[] elements) {
+	public static String getEnabledElementsAsString(ValidatorMetaData[] elements) {
 		StringBuffer buffer = new StringBuffer();
-		for (int i = 0; i < elements.length; i++) {
-			buffer.append(((ValidatorMetaData) elements[i]).getValidatorUniqueName());
+		for (ValidatorMetaData vmd : elements) {
+			buffer.append(vmd.getValidatorUniqueName());
 			buffer.append(ConfigurationConstants.ELEMENT_SEPARATOR);
 		}
 		return buffer.toString();
 	}
 
-	public static Set getStringAsEnabledElements(String elements) {
-		if (elements == null) {
-			return null;
-		}
+	public static Set<ValidatorMetaData> getStringAsEnabledElements(String elements) {
+		if (elements == null)return null;
 
-		HashSet result = new HashSet();
+		Set<ValidatorMetaData> result = new HashSet<ValidatorMetaData>();
 		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);
-			}
+			if (vmd != null)result.add(vmd);
 		}
 		return result;
 	}
 
 	public static ValidatorMetaData[] getStringAsEnabledElementsArray(String elements) {
-		if (elements == null) {
-			return null;
-		}
+		if (elements == null)return null;
 
 		StringTokenizer tokenizer = new StringTokenizer(elements, ConfigurationConstants.ELEMENT_SEPARATOR);
 		ValidatorMetaData[] result = new ValidatorMetaData[tokenizer.countTokens()];
@@ -119,9 +117,7 @@
 		while (tokenizer.hasMoreTokens()) {
 			String elem = tokenizer.nextToken();
 			ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(elem);
-			if (vmd != null) {
-				result[count++] = vmd;
-			}
+			if (vmd != null)result[count++] = vmd;
 		}
 
 		if (count != result.length) {
@@ -132,29 +128,47 @@
 
 		return result;
 	}
+	
+	/**
+	 * Answer the validators
+	 * @return
+	 */
+	public static Set<String> getValidatorIdsManual(){
+		PreferencesWrapper prefs = PreferencesWrapper.getPreferences(null, null);
+		String config = prefs.get(UserManualPreference, null);
+		return getValidatorIds(config);
+	}
+	
+	public static Set<String> getValidatorIdsBuild(){
+		PreferencesWrapper prefs = PreferencesWrapper.getPreferences(null, null);
+		String config = prefs.get(UserBuildPreference, null);
+		return getValidatorIds(config);
+	}
+	
+	private static Set<String> getValidatorIds(String elements){
+		Set<String> set = new HashSet<String>(50);
+		if (elements != null){
+			StringTokenizer tokenizer = new StringTokenizer(elements, ConfigurationConstants.ELEMENT_SEPARATOR);
+			while (tokenizer.hasMoreTokens())set.add(tokenizer.nextToken());
+		}
+		return set;
+	}
 
 	public static IWorkspaceRoot getRoot() {
 		return ResourcesPlugin.getWorkspace().getRoot();
 	}
-
-	protected ValidationConfiguration() throws InvocationTargetException {
-		_validators = new HashMap();
-    _delegatesByTarget = new HashMap();
+	
+	protected ValidationConfiguration(IResource resource){
+		_resource = resource;
 	}
 
 	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;
+		setValidators(validators);
 	}
 	
 	public boolean isDisableAllValidation() throws InvocationTargetException {
@@ -191,17 +205,13 @@
 		ValidatorMetaData[] result = null;
 		 
 		if( !isDisableAllValidation() ){
-			ValidatorMetaData[] temp = new ValidatorMetaData[numberOfValidators()];
-			Iterator iterator = getBuildEnabledValidatorsMap().keySet().iterator();
-
-			
-			while (iterator.hasNext()) {
-				ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-				Boolean bvalue = (Boolean)(getBuildEnabledValidatorsMap().get(vmd));
-				if (bvalue.booleanValue() == true) {
+			Set<ValidatorMetaData> set = getBuildEnabledValidatorsMap().keySet();
+			ValidatorMetaData[] temp = new ValidatorMetaData[set.size()];
+			for (ValidatorMetaData vmd : set) {
+				Boolean bvalue = getBuildEnabledValidatorsMap().get(vmd);
+				if (bvalue) {
 					// If the validator is enabled
-					if (vmd == null)
-						continue;
+					if (vmd == null)continue;
 					if ( vmd.isBuildValidation() ) {
 						if (!onlyReferenced || vmd.isDependentValidator())
 							temp[count++] = vmd;
@@ -210,7 +220,8 @@
 			}
 			result = new ValidatorMetaData[count];
 			System.arraycopy(temp, 0, result, 0, count);
-		}else{
+		}
+		else {
 			 result = new ValidatorMetaData[0];
 		}
 		return result;
@@ -218,49 +229,69 @@
 
 	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();
+		Map<ValidatorMetaData, Boolean> all = getValidatorMetaData();
+		for (ValidatorMetaData vmd : all.keySet()) {
 			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);
+		if ((vmds == null) || (vmds.length == 0))return;
+		
+		for (ValidatorMetaData vmd : vmds) {
+			all.put(vmd, Boolean.TRUE);
 		}
 	}
 	
 	public void setEnabledManualValidators(ValidatorMetaData[] vmds) throws InvocationTargetException {
-		List manualEnabledVMDList = Arrays.asList(vmds);
-		List allValidators = Arrays.asList(getValidators());
-		for(int i = 0; i < allValidators.size(); i++) {
-			ValidatorMetaData data = (ValidatorMetaData) allValidators.get(i);
-			if(manualEnabledVMDList.contains(data))
-				getManualEnabledValidatorsMap().put(data, new Boolean(true));
+		Set<ValidatorMetaData> manualEnabledVMDs = new HashSet<ValidatorMetaData>(vmds.length);
+		for (ValidatorMetaData vmd : vmds)manualEnabledVMDs.add(vmd);
+		
+		for(ValidatorMetaData data : getValidators()) {
+			if(manualEnabledVMDs.contains(data))
+				getManualEnabledValidatorsMap().put(data, Boolean.TRUE);
 			else
-				getManualEnabledValidatorsMap().put(data, new Boolean(false));
-			
+				getManualEnabledValidatorsMap().put(data, Boolean.FALSE);			
+		}
+	}
+	
+	/**
+	 * Update the list of validators that have been enabled for manual validation.
+	 * 
+	 * @param vmds the validators that are enabled for manual validation.
+	 * @throws InvocationTargetException
+	 */
+	public void setEnabledManualValidators(Set<ValidatorMetaData> vmds) throws InvocationTargetException {
+		for(ValidatorMetaData data : getValidators()) {
+			if(vmds.contains(data))getManualEnabledValidatorsMap().put(data, Boolean.TRUE);
+			else getManualEnabledValidatorsMap().put(data, Boolean.FALSE);			
 		}
 	}
 	
 	public void setEnabledBuildValidators(ValidatorMetaData[] vmds) throws InvocationTargetException {
-		List buildEnabledVMDList = Arrays.asList(vmds);
-		List allValidators = Arrays.asList(getValidators());
-		for(int i = 0; i < allValidators.size(); i++) {
-			ValidatorMetaData data = (ValidatorMetaData) allValidators.get(i);
-			if(buildEnabledVMDList.contains(data))
-				getBuildEnabledValidatorsMap().put(data, new Boolean(true));
+		Set<ValidatorMetaData> buildEnabledVMDs = new HashSet<ValidatorMetaData>(vmds.length);
+		for (ValidatorMetaData vmd : vmds)buildEnabledVMDs.add(vmd);
+		for(ValidatorMetaData data : getValidators()) {
+			if(buildEnabledVMDs.contains(data))
+				getBuildEnabledValidatorsMap().put(data, Boolean.TRUE);
 			else
-				getBuildEnabledValidatorsMap().put(data, new Boolean(false));
-			
+				getBuildEnabledValidatorsMap().put(data, Boolean.FALSE);			
+		}
+	}
+	
+	/**
+	 * Update the list of validators that have been enabled for build validation.
+	 * 
+	 * @param vmds the validators that are enabled for build validation.
+	 * @throws InvocationTargetException
+	 */
+	public void setEnabledBuildValidators(Set<ValidatorMetaData> vmds) throws InvocationTargetException {
+		for(ValidatorMetaData data : getValidators()) {
+			if(vmds.contains(data))getBuildEnabledValidatorsMap().put(data, Boolean.TRUE);
+			else getBuildEnabledValidatorsMap().put(data, Boolean.FALSE);			
 		}
 	}
 
-	private Map getValidatorMetaData() {
+	private Map<ValidatorMetaData, Boolean> getValidatorMetaData() {
 		return _validators;
 	}
 	
@@ -275,11 +306,9 @@
 	 */
 	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);
+		for (ValidatorMetaData vmd : getValidatorMetaData().keySet()) {
+			Boolean bvalue = getValidatorMetaData().get(vmd);
 			if (bvalue.booleanValue() == value) {
 				temp[count++] = vmd;
 			}
@@ -291,50 +320,46 @@
 	}
 	
 	public ValidatorMetaData[] getManualEnabledValidators() throws InvocationTargetException {
-		HashMap map = getManualEnabledValidatorsMap();
-		Set set = getManualEnabledValidatorsMap().keySet();
-		if (!set.isEmpty()) {
-			Iterator it = set.iterator();
-			List enabledManualValidators = new ArrayList();
-			while (it.hasNext()) {
-				ValidatorMetaData data = (ValidatorMetaData) it.next();
-				Boolean obj = (Boolean) map.get(data);
-				if (obj != null && obj.booleanValue() == true) {
-					enabledManualValidators.add(data);
-				}
+		Map<ValidatorMetaData, Boolean> map = getManualEnabledValidatorsMap();
+		if (!map.isEmpty()) {
+			List<ValidatorMetaData> list = new LinkedList<ValidatorMetaData>();
+			for (Map.Entry<ValidatorMetaData, Boolean> me : map.entrySet()) {
+				Boolean obj = me.getValue();
+				if (obj != null && obj)list.add(me.getKey());
 			}
-			return (ValidatorMetaData[]) enabledManualValidators.toArray(new ValidatorMetaData[enabledManualValidators.size()]);
+			return (ValidatorMetaData[]) list.toArray(new ValidatorMetaData[list.size()]);
 		}
 		return getEnabledValidators();
 	}	
 	
 	public  ValidatorMetaData[] getBuildEnabledValidators() throws InvocationTargetException {
-		HashMap map = getBuildEnabledValidatorsMap();
-		Set set = getBuildEnabledValidatorsMap().keySet();
-		Iterator it = set.iterator();
-		List enabledBuildValidators = new ArrayList();
-		if (!set.isEmpty()) {
-			while (it.hasNext()) {
-				ValidatorMetaData data = (ValidatorMetaData) it.next();
-				Boolean obj = (Boolean) map.get(data);
-				if (obj != null && obj.booleanValue() == true) {
-					enabledBuildValidators.add(data);
-				}
+		Map<ValidatorMetaData, Boolean> map = getBuildEnabledValidatorsMap();
+		List<ValidatorMetaData> list = new LinkedList<ValidatorMetaData>();
+		if (!map.isEmpty()) {
+			for (Map.Entry<ValidatorMetaData, Boolean> me : map.entrySet()) {
+				Boolean obj = me.getValue();
+				if (obj != null && obj)list.add(me.getKey());
 			}
-			return (ValidatorMetaData[]) enabledBuildValidators.toArray(new ValidatorMetaData[enabledBuildValidators.size()]);
+			return (ValidatorMetaData[]) list.toArray(new ValidatorMetaData[list.size()]);
 		}
 		return getEnabledValidators();
 	}
 	
-	protected  HashMap getBuildEnabledValidatorsMap() {
-		if(buildValidators == null)
-			buildValidators = new HashMap();
+	/**
+	 * Answer the map of the validators that have been enabled for build validation, 
+	 * creating it if necessary.
+	 */
+	protected  Map<ValidatorMetaData, Boolean> getBuildEnabledValidatorsMap() {
+		if(buildValidators == null)buildValidators = new HashMap<ValidatorMetaData, Boolean>();
 		return buildValidators;
 	}	
 	
-	protected  HashMap getManualEnabledValidatorsMap() {
-		if(manualValidators == null)
-			manualValidators = new HashMap();
+	/**
+	 * Answer the map of the validators that have been enabled for manual validation, 
+	 * creating it if necessary.
+	 */
+	protected  Map<ValidatorMetaData, Boolean> getManualEnabledValidatorsMap() {
+		if(manualValidators == null)manualValidators = new HashMap<ValidatorMetaData, Boolean>();
 		return manualValidators;
 	}	
 
@@ -344,17 +369,10 @@
 	 */
 	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;
-				}
-			}
+		for (ValidatorMetaData vmd : getValidatorMetaData().keySet()) {
+			Boolean bvalue = getValidatorMetaData().get(vmd);
+			if (bvalue && vmd.isIncremental())temp[count++] = vmd;
 		}
 
 		ValidatorMetaData[] result = new ValidatorMetaData[count];
@@ -372,25 +390,20 @@
 	
 	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));
+		for (ValidatorMetaData vmd : vmds) {
+			if (vmd == null)continue;
+			_validators.put(vmd, (vmd.isEnabledByDefault() ? Boolean.TRUE : Boolean.FALSE));
 		}
 	}
 	
   public void setDefaultDelegates(ValidatorMetaData[] vmds) throws InvocationTargetException {
     _delegatesByTarget.clear();
-    for (int i = 0; i < vmds.length; i++) {
-      ValidatorMetaData vmd = vmds[i];
-      if (vmd == null) {
-        continue;
-      }
+    for (ValidatorMetaData vmd : vmds) {
+      if (vmd == null)continue;
+      
       String targetID = vmd.getValidatorUniqueName();
       String delegateID = ValidatorDelegatesRegistry.getInstance().getDefaultDelegate(targetID);
-      if (delegateID == null) {
-        continue;
-      }
+      if (delegateID == null)continue;
       _delegatesByTarget.put(targetID, ValidatorDelegatesRegistry.getInstance().getDefaultDelegate(targetID));
     }
   }
@@ -413,11 +426,8 @@
 
 	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++;
-			}
+		for (ValidatorMetaData vmd : vmds) {
+			if (vmd.isIncremental())count++;
 		}
 		return count;
 	}
@@ -436,21 +446,11 @@
 		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();
-		}
+		if (_version == null)loadVersion();
 		return _version;
 	}
 
@@ -460,6 +460,7 @@
 
 	/**
 	 * This preference has been migrated; change the version to the current version.
+	 * @deprecated dead code.
 	 */
 	public void markVersionCurrent() {
 		// The version should not be marked current until the migration is complete
@@ -493,14 +494,10 @@
 	 * Return true if the validator is enabled on this preference.
 	 */
 	public boolean isEnabled(ValidatorMetaData vmd) throws InvocationTargetException {
-		if (vmd == null) {
-			return false;
-		}
+		if (vmd == null)return false;
 
-		Boolean value = (Boolean) getValidatorMetaData().get(vmd);
-		if (value == null) {
-			return false;
-		}
+		Boolean value = getValidatorMetaData().get(vmd);
+		if (value == null)return false;
 
 		return value.booleanValue();
 	}
@@ -544,19 +541,13 @@
 		return t.intValue();
 	}
 
-	public static ValidatorMetaData[] convertToArray(Collection c) {
+	public static ValidatorMetaData[] convertToArray(Collection<ValidatorMetaData> c) {
 		int length = (c == null) ? 0 : c.size();
 		ValidatorMetaData[] result = new ValidatorMetaData[length];
-		if (length == 0) {
-			return result;
-		}
+		if (length == 0)return result;
 
-		Iterator iterator = c.iterator();
 		int count = 0;
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-			result[count++] = vmd;
-		}
+		for (ValidatorMetaData vmd : c)result[count++] = vmd;
 
 		return result;
 	}
@@ -564,34 +555,33 @@
 	public static ValidatorMetaData[] convertToArray(Object[] c) {
 		int length = (c == null) ? 0 : c.length;
 		ValidatorMetaData[] result = new ValidatorMetaData[length];
-		if (length == 0) {
-			return result;
-		}
+		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 {
+		store(null);
+	}
 
 	/**
 	 * Save the values of these fields before the project or workspace is closed.
 	 */
-	public void store() throws InvocationTargetException {
-		Preferences pref = ValidationPlugin.getPlugin().getPluginPreferences();
-		if (pref != null) {
-			try {
-				OutputStream os = new ByteArrayOutputStream();
-				pref.setValue(USER_PREFERENCE, serialize());
-				pref.store(os, USER_PREFERENCE);
-				pref.setValue(USER_MANUAL_PREFERENCE, serializeManualSetting());
-				pref.store(os, USER_MANUAL_PREFERENCE);
-				pref.setValue(USER_BUILD_PREFERENCE, serializeBuildSetting());
-				pref.store(os, USER_BUILD_PREFERENCE);
-				pref.setValue(DELEGATES_PREFERENCE, serializeDelegatesSetting());
-				pref.store(os, DELEGATES_PREFERENCE);
-			} catch (IOException ie) {
-				Logger.getLogger().log(ie);
-			}
-
+	public void store(Boolean persist) throws InvocationTargetException {
+		PreferencesWrapper pref = PreferencesWrapper.getPreferences(null, persist);
+		pref.put(ValidationConfiguration.UserPreference, serialize());
+		pref.put(ValidationConfiguration.UserManualPreference, serializeManualSetting());
+		pref.put(ValidationConfiguration.UserBuildPreference, serializeBuildSetting());
+		pref.put(ValidationConfiguration.DelegatesPreference, serializeDelegatesSetting());
+		try {
+			pref.flush();
+		}
+		catch (BackingStoreException e){
+			throw new InvocationTargetException(e);
 		}
 	}
 
@@ -622,9 +612,7 @@
 
 	protected final String loadVersion(IMarker[] marker) throws InvocationTargetException {
 		String version = (String) getValue(marker[0], ConfigurationConstants.VERSION);
-		if (version == null) {
-			return ConfigurationConstants.VERSION4_03;
-		}
+		if (version == null)	return ConfigurationConstants.VERSION4_03;
 
 		return version;
 	}
@@ -674,7 +662,7 @@
 			}
 		} catch (InvocationTargetException exc) {
 			throw exc;
-		} catch (Throwable exc) {
+		} catch (Exception exc) {
 			String resourceName = (getResource() == null) ? "null" : getResource().getName(); //$NON-NLS-1$
 			throw new InvocationTargetException(exc, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_RETRIEVE, new String[]{resourceName}));
 		}
@@ -689,47 +677,33 @@
 	protected abstract void load(IMarker[] marker) throws InvocationTargetException;
 
 	protected Object getValue(IMarker marker, String attribName) {
-		if (marker == null) {
-			return null;
-		}
+		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);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return null;
 		}
 	}
 
 	protected boolean getValue(IMarker marker, String attribName, boolean defaultValue) {
 		Boolean bool = (Boolean) getValue(marker, attribName);
-		if (bool == null) {
-			return defaultValue;
-		}
+		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;
-		}
+		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;
-		}
+		if (string == null)return defaultValue;
 
 		return string;
 	}
@@ -739,24 +713,22 @@
 		// 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.
-		Preferences prefs = ValidationPlugin.getPlugin().getPluginPreferences();
-		if (prefs != null) {
-			deserializeAllPrefs(prefs);
-		}
+		PreferencesWrapper prefs = PreferencesWrapper.getPreferences(null, null);
+		deserializeAllPrefs(prefs);
 	}
 
 	/**
 	 * @param prefs
 	 * @throws InvocationTargetException
 	 */
-	private void deserializeAllPrefs(Preferences prefs) throws InvocationTargetException {
-		String storedConfig = prefs.getString(USER_PREFERENCE);
+	private void deserializeAllPrefs(PreferencesWrapper prefs) throws InvocationTargetException {
+		String storedConfig = prefs.get(ValidationConfiguration.UserPreference, null);
 		deserialize(storedConfig);
-		String storedManualConfig = prefs.getString(USER_MANUAL_PREFERENCE);
+		String storedManualConfig = prefs.get(ValidationConfiguration.UserManualPreference, null);
 		deserializeManual(storedManualConfig);
-		String storedBuildConfig = prefs.getString(USER_BUILD_PREFERENCE);
+		String storedBuildConfig = prefs.get(ValidationConfiguration.UserBuildPreference, null);
 		deserializeBuild(storedBuildConfig);
-		String storedDelegatesConfiguration = prefs.getString(DELEGATES_PREFERENCE);
+		String storedDelegatesConfiguration = prefs.get(ValidationConfiguration.DelegatesPreference, null);
 		deserializeDelegates(storedDelegatesConfiguration);
 	}
 	
@@ -766,28 +738,28 @@
 			try {
 				deserializeAllPrefs(event);
 				passivate();
-			 } catch (InvocationTargetException ie) {
-				Logger.getLogger().log(ie);
+			 } catch (InvocationTargetException e) {
+				 ValidationPlugin.getPlugin().handleException(e);
 			}
 		}
 	}
 
 	private void deserializeAllPrefs(PropertyChangeEvent event) throws InvocationTargetException {
 		String storedConfig = (String)event.getNewValue();
-		if( event.getProperty().equals(USER_PREFERENCE) ){
+		if( event.getProperty().equals(ValidationConfiguration.UserPreference) ){
 			deserialize(storedConfig);
-		}else if(event.getProperty().equals(USER_MANUAL_PREFERENCE)){
+		}else if(event.getProperty().equals(ValidationConfiguration.UserManualPreference)){
 			deserializeManual(storedConfig);
-		}else if(event.getProperty().equals(USER_BUILD_PREFERENCE)){
+		}else if(event.getProperty().equals(ValidationConfiguration.UserBuildPreference)){
 			deserializeBuild(storedConfig);
-		}else if(event.getProperty().equals(DELEGATES_PREFERENCE)){
+		}else if(event.getProperty().equals(ValidationConfiguration.DelegatesPreference)){
 			deserializeDelegates(storedConfig);
 		}
 	}
 	
 	
 	protected void deserializeBuild(String storedConfiguration) throws InvocationTargetException {
-		if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals("default_value")) {
+		if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals(DefaultValue)) {
 			// Assume that the configuration has never been set (new workspace).
 			resetToDefault();
 			return;
@@ -799,7 +771,7 @@
 	}
 
 	protected void deserializeManual(String storedConfiguration) throws InvocationTargetException {
-		if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals("default_value")) {
+		if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals(DefaultValue)) {
 			// Assume that the configuration has never been set (new workspace).
 			resetToDefault();
 			return;
@@ -812,7 +784,7 @@
 
 	protected void deserializeDelegates(String storedConfiguration) throws InvocationTargetException {
 
-    if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals("default_value")) {
+    if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals(DefaultValue)) {
 	    // Assume that the configuration has never been set (new workspace).
 	    resetToDefault();
 	    return;
@@ -838,7 +810,6 @@
 
 	protected void copyTo(ValidationConfiguration up) throws InvocationTargetException {
 		up.setVersion(getVersion());
-		up.setResource(getResource());
 		up.setValidators(getValidators());
 		up.setDisableAllValidation(isDisableAllValidation());
 		up.setEnabledValidators(getEnabledValidators());
@@ -847,15 +818,19 @@
     up.setDelegatingValidators(getDelegatingValidators());
 	}
 
-  public Map getDelegatingValidators() throws InvocationTargetException {
-    return _delegatesByTarget;
-  }
+	/**
+	 * The key is the id of the place holder validator, and the value is the id of validator
+	 * that will perform the validation. 
+	 */
+	public Map<String, String> getDelegatingValidators() throws InvocationTargetException {
+		return _delegatesByTarget;
+	}
 
-  public void setDelegatingValidators(Map source)
-  {
-    // It is safe to copy this map as it contains only immutable strings.
-    _delegatesByTarget.putAll(source);
-  }
+	public void setDelegatingValidators(Map<String, String> source)
+	{
+		// It is safe to copy this map as it contains only immutable strings.
+		_delegatesByTarget.putAll(source);
+	}
 
   /**
 	 * Return true if the enabled validators have not changed since this ValidationConfiguration was
@@ -893,32 +868,20 @@
    * @return true if there has been a change, false otherwise.
    * @throws InvocationTargetException
    */
-  protected boolean haveDelegatesChanged(Map oldDelegates) throws InvocationTargetException {
+  protected boolean haveDelegatesChanged(Map<String, String> oldDelegates) throws InvocationTargetException {
     
-    if (oldDelegates == null) {
-      return true;
-    }
+    if (oldDelegates == null)return true;
     
-    Iterator iterator = oldDelegates.keySet().iterator();
-    
-    while (iterator.hasNext())
-    {
-      String targetID = (String) iterator.next();
-      String oldDelegateID = (String) oldDelegates.get(targetID);
-      String newDelegateID = (String) _delegatesByTarget.get(targetID);
+    for (String targetID : oldDelegates.keySet()) {
+      String oldDelegateID = oldDelegates.get(targetID);
+      String newDelegateID = _delegatesByTarget.get(targetID);
       
-      if (oldDelegateID == null || newDelegateID == null) {
-        return true;
-      }
+      if (oldDelegateID == null || newDelegateID == null)return true;
         
-      if (!newDelegateID.equals(oldDelegateID)) {
-        return true;
-      }
+      if (!newDelegateID.equals(oldDelegateID))return true;
     }
     
-    if (oldDelegates.size() != _delegatesByTarget.size()) {
-      return true;
-    }
+    if (oldDelegates.size() != _delegatesByTarget.size())return true;
     
     return false;
   }
@@ -958,20 +921,14 @@
    * @param validatorMetaData a Map with the currently configured validators.
    * @return a String.
    */
-  private String getDelegatesAsString(Map validatorMetaData) {
+  private String getDelegatesAsString(Map<ValidatorMetaData, Boolean> validatorMetaData) {
     
     StringBuffer buffer = new StringBuffer();
-    Iterator iterator = validatorMetaData.keySet().iterator();
-    
-    while (iterator.hasNext()) {
-    
-      ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
+    for (ValidatorMetaData vmd : validatorMetaData.keySet()) {    
       String targetID = vmd.getValidatorUniqueName();
       String delegateID = getDelegateUniqueName(vmd);
       
-      if (delegateID == null) {
-        continue;
-      }
+      if (delegateID == null)continue;
 
       // Write out pairs targetID=delegateID
 
@@ -986,14 +943,25 @@
   
   /**
    * Provides the delegate's ID of the validator delegate configured in this configuration for 
-   * a given delegating validator.
+   * a given delegating validator. That is answer the id of validator that is going to do the real work.
    * 
-   * @param vmd the delegating validator's metadata. Must not be null.
-   * @return a String with the unique name (ID) of the validator delegate, null if there isn't one.
+   * @param vmd the delegating validator's meta data. Must not be null.
+   * @return a String with the id of the validator delegate, null if there isn't one.
    */
   public String getDelegateUniqueName(ValidatorMetaData vmd) {
     String targetID = vmd.getValidatorUniqueName();    
-    return (String) _delegatesByTarget.get(targetID);
+    return _delegatesByTarget.get(targetID);
+  }
+  
+  /**
+   * Provides the delegate's ID of the validator delegate configured in this configuration for 
+   * a given delegating validator. That is answer the id of validator that is going to do the real work.
+   * 
+   * @param targetId the id of the target (or place holder) validator. Must not be null.
+   * @return a String with the id of the validator delegate, null if there isn't one.
+   */
+  public String getDelegateForTarget(String targetId){
+	  return _delegatesByTarget.get(targetId);
   }
 
   /**
@@ -1013,7 +981,7 @@
 	 * loadVersion() method.
 	 */
 	protected void deserialize(String storedConfiguration) throws InvocationTargetException {
-		if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals("default_value")) {
+		if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals(DefaultValue)) {
 			// Assume that the configuration has never been set (new workspace).
 			resetToDefault();
 			return;
@@ -1024,7 +992,7 @@
 				String disableAllValidation = storedConfiguration.substring(disableAllValidationIndex + ConfigurationConstants.DISABLE_ALL_VALIDATION_SETTING.length(),versionIndex);
 				setDisableAllValidation(Boolean.valueOf(disableAllValidation).booleanValue());
 		} else {
-				setDisableAllValidation(false);;
+				setDisableAllValidation(false);
 		}
 		
 	}
@@ -1047,32 +1015,53 @@
 		// method.)
 		return ConfigurationConstants.CURRENT_VERSION;
 	}
-
 	
 	public boolean isManualEnabled(ValidatorMetaData vmd) {
-		if (vmd == null) {
-			return false;
-		}
-		Boolean value = (Boolean) getManualEnabledValidatorsMap().get(vmd);
-		if (value == null) 
-			return false;
-		return value.booleanValue();
+		if (vmd == null)return false;
+		Boolean value = getManualEnabledValidatorsMap().get(vmd);
+		if (value == null)return false;
+		return value;
 	}
 
 	public boolean isBuildEnabled(ValidatorMetaData vmd) {
-		if (vmd == null) {
-			return false;
-		}
-		Boolean value = (Boolean) getBuildEnabledValidatorsMap().get(vmd);
-		if (value == null) 
-			return false;
-		return value.booleanValue();
+		if (vmd == null)return false;
+		Boolean value = getBuildEnabledValidatorsMap().get(vmd);
+		if (value == null)return false;
+		return value;
 	}
 	
 	public int numberOfManualEnabledValidators() throws InvocationTargetException {
 		return getManualEnabledValidators().length;
 	}
+	
+	public void enableSingleValidator(ValidatorMetaData  vmd){
+		getValidatorMetaData().put(vmd, Boolean.TRUE);
+	}
+	
+	
+	public void disableSingleValidator(ValidatorMetaData  vmd){
+		getValidatorMetaData().put(vmd, Boolean.FALSE);
+	}
+	
+	public void enableSingleManualValidator(ValidatorMetaData  vmd){
+		getManualEnabledValidatorsMap().put(vmd, Boolean.TRUE);
+	}
+	
+	
+	public void disableSingleManualValidator(ValidatorMetaData  vmd){
+		getManualEnabledValidatorsMap().put(vmd, Boolean.FALSE);
+	}
 
+	
+	public void enableSingleBuildValidator(ValidatorMetaData  vmd){
+		getBuildEnabledValidatorsMap().put(vmd, Boolean.TRUE);
+	}
+	
+	
+	public void disableSingleBuildValidator(ValidatorMetaData  vmd){
+		getBuildEnabledValidatorsMap().put(vmd, Boolean.FALSE);
+	}
+	
   /**
    * Provides the delegate validator descriptor of the validator delegate configured 
    * for the given delegating validator in the context of this configuration. 
@@ -1086,4 +1075,4 @@
     ValidatorDelegateDescriptor descriptor = ValidatorDelegatesRegistry.getInstance().getDescriptor(targetID, delegateID); 
     return descriptor;    
   }
-}
\ 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
index b8ec7c3..1ba2ed1 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * 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
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
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
index 4d332d1..9766048 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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,13 +14,12 @@
 import java.text.MessageFormat;
 import java.util.Arrays;
 import java.util.Collection;
-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 java.util.StringTokenizer;
-import java.util.logging.Level;
 
 import org.eclipse.core.expressions.EvaluationContext;
 import org.eclipse.core.expressions.EvaluationResult;
@@ -34,9 +33,9 @@
 import org.eclipse.core.runtime.IExtension;
 import org.eclipse.core.runtime.IExtensionPoint;
 import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
+import org.eclipse.osgi.util.NLS;
 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.IProjectFacetVersion;
@@ -55,32 +54,41 @@
  * 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.
- * 
+ * <p>
  * No Validator should need to know about this class. The only class which should call
  * ValidationRegistryReader is ValidatorManager.
- * 
+ * </p>
+ * <p>
  * 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>
+ * </p>
  */
 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,
+	
+	 /* <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>
+		 */
+	
+	private static ValidationRegistryReader _inst = new ValidationRegistryReader();
+	
+	/** list of all validators registered, with their associated ValidatorMetaData, indexed by project nature id */
+	private final Map<String,Set<ValidatorMetaData>> _validators;
+	
+	// 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;
+	private final Map<String, ValidatorMetaData> _indexedValidators; 
+	
+	private final Set<ValidatorMetaData> _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.
@@ -89,18 +97,18 @@
 	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.
 	
-	public HashMap projectValidationMetaData = null;
+	/** @deprecated this instance variable should not be public. */
+	public HashMap<IProject, Set<ValidatorMetaData>> projectValidationMetaData = new HashMap<IProject, Set<ValidatorMetaData>>();
 
 	/**
 	 * The registry is read once - when this class is instantiated.
 	 */
 	private ValidationRegistryReader() {
-		super();
 
+		_validators = new HashMap<String,Set<ValidatorMetaData>>();
+		_indexedValidators = new HashMap<String, ValidatorMetaData>();
+		_defaultEnabledValidators = new HashSet<ValidatorMetaData>();
 		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
@@ -110,14 +118,8 @@
 			// 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);
-			}
+		} catch (Exception e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 
@@ -126,9 +128,7 @@
 	 * created to increase runtime performance.
 	 */
 	private void buildCache() {
-		Iterator iterator = _indexedValidators.values().iterator();
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
+		for (ValidatorMetaData vmd : _indexedValidators.values()) {
 			buildProjectNatureCache(vmd);
 			buildDefaultEnabledCache(vmd);
 		}
@@ -138,17 +138,12 @@
 		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.
+		// projects have been added to the project natures which they don't exclude.
 		_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);
+		if (Tracing.isTraceV1()) {
+			Tracing.log("ValidationRegistryReader-01: ", debug()); //$NON-NLS-1$
 		}
-
 	}
 
 	/**
@@ -189,13 +184,9 @@
 	 * Build the list of validators which are enabled by default.
 	 */
 	private void buildDefaultEnabledCache(ValidatorMetaData vmd) {
-		if (vmd == null) {
-			return;
-		}
+		if (vmd == null)return;
 
-		if (vmd.isEnabledByDefault()) {
-			_defaultEnabledValidators.add(vmd);
-		}
+		if (vmd.isEnabledByDefault())_defaultEnabledValidators.add(vmd);
 	}
 
 	/**
@@ -229,23 +220,20 @@
 	}
 
 	private void addExcludedRemainder() {
-		Set excludedProjVmds = (Set) _validators.get(EXCLUDED_PROJECT);
+		Set<ValidatorMetaData> excludedProjVmds = _validators.get(EXCLUDED_PROJECT);
 		if (excludedProjVmds == null) {
 			// no excluded project natures
 			return;
 		}
 
-		Iterator exIterator = excludedProjVmds.iterator();
-		while (exIterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) exIterator.next();
+		for (ValidatorMetaData vmd : excludedProjVmds) {
 
-			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();
+			// assume that, by default, if someone explicitly excludes
+			// a project nature then they don't include any project natures
+			boolean noneIncluded = true;
+			
+			// a project nature then they don't include any project natures
+			for (String projId : _validators.keySet()) {
 				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;
@@ -278,16 +266,13 @@
 	}
 
 	private void addAnyRemainder() {
-		Set anyProjVmds = (Set) _validators.get(UNKNOWN_PROJECT);
+		Set<ValidatorMetaData> anyProjVmds = _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();
+		for (String projId : _validators.keySet()) {
 			if (projId.equals(UNKNOWN_PROJECT) || projId.equals(EXCLUDED_PROJECT)) {
 				// Don't add list to itself or to a project nature which is excluded.
 				continue;
@@ -297,26 +282,22 @@
 		}
 	}
 
-	private void add(String projectNatureId, Set vmdList) {
-		if ((vmdList == null) || (vmdList.size() == 0)) {
-			return;
-		}
+	private void add(String projectNatureId, Set<ValidatorMetaData> 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
+		// whether the validator includes or excludes this
+		// project nature id, make sure that an entry is created for it in the table
+		Set<ValidatorMetaData> pnVal = createSet(projectNatureId); 
 		pnVal.addAll(vmdList);
 		_validators.put(projectNatureId, pnVal);
 	}
 
 	private void add(String projectNatureId, ValidatorMetaData vmd) {
-		if (vmd == null) {
-			return;
-		}
+		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
+		// whether the validator includes or excludes this
+		// project nature id, make sure that an entry is created for it in the table
+		Set<ValidatorMetaData> pnVal = createSet(projectNatureId); 
 		pnVal.add(vmd);
 		_validators.put(projectNatureId, pnVal);
 	}
@@ -334,25 +315,21 @@
 		// 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;
-			}
+		for (String projId : _validators.keySet()) {
+			Set<ValidatorMetaData> value = _validators.get(projId);
+			if (value == null)continue;
 
 			if (value.contains(vmd)) {
 				value.remove(vmd);
-				_validators.put(key, value);
+				_validators.put(projId, value);
 			}
 		}
 	}
 
-	private Set createSet(String projNature) {
-		Set v = (Set) _validators.get(projNature);
+	private Set<ValidatorMetaData> createSet(String projNature) {
+		Set<ValidatorMetaData> v = _validators.get(projNature);
 		if (v == null) {
-			v = new HashSet();
+			v = new HashSet<ValidatorMetaData>();
 		}
 		return v;
 	}
@@ -389,6 +366,20 @@
 		}
 		return names;
 	}
+	
+	private String[] getContentTypeBindings(IConfigurationElement element){
+		IConfigurationElement[] bindings = element.getChildren(TAG_CONTENTTYPE);
+		if(bindings.length == 0)
+			return null;
+		String[] cTypeIDs = new String[bindings.length];
+		for (int i = 0; i < bindings.length; i ++){
+			
+			cTypeIDs[i] = bindings[i].getAttribute(ATT_CONTENTTYPEID);
+		}
+		
+		return cTypeIDs;
+		
+	}
 
 	/**
 	 * Given an IConfigurationElement from plugin.xml, if it has any filter tags, construct the
@@ -482,53 +473,36 @@
 		return helpers[0].getAttribute(ATT_CLASS);
 	}
 
-	/* package */static IWorkbenchContext createHelper(IConfigurationElement element, String helperClassName) {
+	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);
-			}
+		} catch (Exception exc) {
+			ValidationPlugin.getPlugin().handleException(exc);
+			String result = MessageFormat.format(
+				ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_SYNTAX_NO_HELPER_THROWABLE), 
+				new Object[]{helperClassName});
+			ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, result);	
 			return null;
 		}
 		return wh;
 	}
 
-	/* package */static IValidator createValidator(IConfigurationElement element, String validatorClassName) {
+	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);
-			}
+			validator = (IValidator) element.createExecutableExtension(ATT_CLASS);
+		} catch (Exception e) {
+			String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_SYNTAX_NO_VAL_THROWABLE), 
+				new Object[]{validatorClassName});
+			ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, result);	
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 
 		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);
+			if (Tracing.isTraceV1()) {
+				Tracing.log("ValidationRegistryReader-02: ",  //$NON-NLS-1$
+					NLS.bind(ValMessages.VbfExcSyntaxNoValNull, validatorClassName));
 			}
 			return null;
 		}
@@ -673,7 +647,7 @@
 		return result;
 	}
 
-	private ValidatorMetaData.MigrationMetaData getMigrationMetaData(IConfigurationElement element, ValidatorMetaData vmd) {
+	private ValidatorMetaData.MigrationMetaData getMigrationMetaData(IConfigurationElement element) {
 		IConfigurationElement[] runChildren = element.getChildren(TAG_MIGRATE);
 		if ((runChildren == null) || (runChildren.length == 0)) {
 			return null;
@@ -688,7 +662,7 @@
 			return null;
 		}
 
-		ValidatorMetaData.MigrationMetaData mmd = vmd.new MigrationMetaData();
+		ValidatorMetaData.MigrationMetaData mmd = new ValidatorMetaData.MigrationMetaData();
 		for (int i = 0; i < migrateChildren.length; i++) {
 			IConfigurationElement migrateChild = migrateChildren[i];
 			String from = migrateChild.getAttribute(ATT_FROM);
@@ -747,12 +721,7 @@
 	 * Returns the singleton ValidationRegistryReader.
 	 */
 	public static ValidationRegistryReader getReader() {
-		if (inst == null) {
-			inst = new ValidationRegistryReader();
-
-			EventManager.getManager().setActive(true);
-		}
-		return inst;
+		return _inst;
 	}
 
 	public static boolean isActivated() {
@@ -768,21 +737,14 @@
 	 */
 	private IExtensionPoint getValidatorExtensionPoint() {
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
-		IExtensionPoint extensionPoint = registry.getExtensionPoint(PLUGIN_ID, VALIDATOR_EXT_PT_ID);
+		IExtensionPoint extensionPoint = registry.getExtensionPoint(ValidationPlugin.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$
+			// declaration from our plugin.xml file.
+			if (Tracing.isTraceV1()) {
 				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);
+						new Object[]{ValidationPlugin.PLUGIN_ID + "." + VALIDATOR_EXT_PT_ID}); //$NON-NLS-1$
+				Tracing.log("ValidationRegistryReader-03: ", result);		 //$NON-NLS-1$
 			}
 		}
 		return extensionPoint;
@@ -795,13 +757,9 @@
 	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);
-			}
+				String message = ResourceHandler.getExternalizedMessage(
+					ResourceConstants.VBF_EXC_ORPHAN_IVALIDATOR, new String[]{"null"}); //$NON-NLS-1$
+				ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, message);
 			return null;
 		}
 
@@ -813,19 +771,15 @@
 
 		// 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);
-		}
+		String message = ResourceHandler.getExternalizedMessage(
+				ResourceConstants.VBF_EXC_ORPHAN_IVALIDATOR, new String[]{validatorClassName});
+		ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, message);
 		return null;
 	}
 
-	public Set getValidatorMetaData(IWorkspaceRoot root) {
+	public Set<ValidatorMetaData> getValidatorMetaData(IWorkspaceRoot root) {
 		// Every validator on the Preferences page must be returned
-		Set copy = new HashSet();
+		Set<ValidatorMetaData> copy = new HashSet<ValidatorMetaData>();
 		clone(_indexedValidators.values(), copy);
 		return copy;
 	}
@@ -836,8 +790,8 @@
 	 * 
 	 * This is a long-running process. If you can, cache the result.
 	 */
-	public Set getValidatorMetaData(IProject project) {
-		Set copy = new HashSet();
+	public Set<ValidatorMetaData> getValidatorMetaData(IProject project) {
+		Set<ValidatorMetaData> copy = new HashSet<ValidatorMetaData>();
 		getValidatorMetaData(project, copy);
 		return copy;
 	}
@@ -845,19 +799,13 @@
 	/**
 	 * Copy the set of configured validator metadata into the Set.
 	 */
-	public void getValidatorMetaData(IProject project, Set vmds) {
-		if (vmds == null) {
-			return;
-		}
+	public void getValidatorMetaData(IProject project, Set<ValidatorMetaData> 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 (Tracing.isTraceV1()) {
+				Tracing.log("ValidationRegistryReader-04: IProject is " + String.valueOf(project)); //$NON-NLS-1$
 			}
 			if (project == null) {
 				executionMap |= 0x1;
@@ -867,23 +815,16 @@
 			String[] projectNatures = null;
 			try {
 				projectNatures = project.getDescription().getNatureIds();
-			} catch (CoreException exc) {
+			} catch (CoreException e) {
 				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);
-				}
+				ValidationPlugin.getPlugin().handleException(e);
 				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;
 				
@@ -897,10 +838,8 @@
 		        //  <test forcePluginActivation="true" property="foo.testProperty"/>
 		        // </enablement> 
 				
-				Set validatorsWithEnablementExpression = new HashSet();
-				Iterator allValidators = getAllValidators().iterator();
-				while (allValidators.hasNext()) {
-					ValidatorMetaData vmd = (ValidatorMetaData) allValidators.next();
+				Set<ValidatorMetaData> validatorsWithEnablementExpression = new HashSet<ValidatorMetaData>();
+				for (ValidatorMetaData vmd : getAllValidators()) {
 					if (isFacetEnabled(vmd, project)) {
 						validatorsWithEnablementExpression.add(vmd);
 					}
@@ -915,12 +854,8 @@
 
 			} 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);
+				if (Tracing.isTraceV1()) {
+					Tracing.log("ValidationRegistryReader-05: ", projectNatures.toString()); //$NON-NLS-1$
 				}
 				calculateVmdsForNatureAndFacets(vmds, projectNatures,project);
 				// Now filter out the validators which must not run on this project
@@ -931,20 +866,13 @@
 				}
 			}
 		} finally {
-			if (logger.isLoggingLevel(Level.FINER)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.getValidatorMetaData(IProject)"); //$NON-NLS-1$
-				entry.setExecutionMap(executionMap);
-				
+			if (Tracing.isTraceV1()) {
 				StringBuffer buffer = new StringBuffer();
-				Iterator iterator = vmds.iterator();
-				while (iterator.hasNext()) {
-					ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
+				for (ValidatorMetaData vmd : vmds) {
 					buffer.append(vmd.getValidatorUniqueName());
 					buffer.append("\n"); //$NON-NLS-1$
 				}
-				entry.setText(buffer.toString());
-				logger.write(Level.FINER, entry);
+				Tracing.log("ValidationRegistryReader-06: ", buffer.toString()); //$NON-NLS-1$
 			}
 		}
 	}
@@ -954,31 +882,22 @@
 	 * @param vmds
 	 * @param projectNatures
 	 */
-	private void calculateVmdsForNatureAndFacets(Set vmds, String[] projectNatures, IProject project) {
-		Set projVmds;
+	private void calculateVmdsForNatureAndFacets(Set<ValidatorMetaData> vmds, String[] projectNatures, IProject project) {
+		Set<ValidatorMetaData> projVmds;
 		String[] projectFacetIds = getProjectFacetIds(project);
-		Iterator allValidators = getAllValidators().iterator();
-		while (allValidators.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) allValidators.next();
+		for (ValidatorMetaData vmd : getAllValidators()) {
 			if (containsProjectFacet(vmd, projectFacetIds) || isFacetEnabled(vmd, project)) {
 				vmds.add(vmd);
 			}
 		}
-		for (int i = 0; i < projectNatures.length; i++) {
-			String projectNatureId = projectNatures[i];
-			projVmds = (Set) _validators.get(projectNatureId);
-			if (projVmds == null)
-				continue;
+		for (String projectNatureId : projectNatures) {
+			projVmds = _validators.get(projectNatureId);
+			if (projVmds == null)continue;
 
-			Iterator iterator = projVmds.iterator();
-			while (iterator.hasNext()) {
-				ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
+			for (ValidatorMetaData vmd : projVmds) {
 				if (!vmds.contains(vmd) && (vmd.getFacetFilters() == null || vmd.getFacetFilters().length == 0)) {
-					if (vmd.getEnablementExpresion() == null)
-						vmds.add(vmd);
-					else if (isFacetEnabled(vmd, project))
-						vmds.add(vmd);
-
+					if (vmd.getEnablementExpresion() == null)vmds.add(vmd);
+					else if (isFacetEnabled(vmd, project))vmds.add(vmd);
 				}
 			}
 		}
@@ -1035,34 +954,21 @@
 	 * 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();
+	private void removeExcludedProjects(IProject project, Set<ValidatorMetaData> vmds) {
+		if (Tracing.isTraceV1()) {
+			StringBuffer buffer = new StringBuffer("\nValidationRegistryReader-12: before:\n"); //$NON-NLS-1$
+			for (ValidatorMetaData vmd : vmds) {
 				buffer.append(vmd.getValidatorUniqueName());
 				buffer.append("\n"); //$NON-NLS-1$
 			}
-			entry.setText(buffer.toString());
-			logger.write(Level.FINEST, entry);
+			Tracing.log(buffer);
 		}
 
 		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);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return;
 		}
 		if ((projectNatures == null) || (projectNatures.length == 0)) {
@@ -1071,17 +977,16 @@
 		}
 		for (int i = 0; i < projectNatures.length; i++) {
 			String nature = projectNatures[i];
-			Iterator iterator = vmds.iterator();
+			Iterator<ValidatorMetaData> iterator = vmds.iterator();
 			while (iterator.hasNext()) {
-				ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
+				ValidatorMetaData vmd = 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];
+				for (ValidatorNameFilter pn : natureFilters) {
 					if (nature.equals(pn.getNameFilter()) && !pn.isInclude()) {
 						iterator.remove();
 						break;
@@ -1090,30 +995,19 @@
 			}
 		}
 
-		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();
+		if (Tracing.isTraceV1()) {
+			StringBuffer buffer = new StringBuffer("\nValidationRegistryReader-13: after:\n"); //$NON-NLS-1$
+			for (ValidatorMetaData vmd : vmds) {
 				buffer.append(vmd.getValidatorUniqueName());
 				buffer.append("\n"); //$NON-NLS-1$
 			}
-			entry.setText(buffer.toString());
-			logger.write(Level.FINEST, entry);
+			Tracing.log(buffer);
 		}
 	}
 
+	@SuppressWarnings("unchecked")
 	private Collection clone(Collection input, Collection copy) {
-		if (input == null) {
-			return null;
-		}
-
-		if (copy == null) {
-			return null;
-		}
+		if (input == null || copy == null)return null;
 		copy.clear();
 		copy.addAll(input);
 		return copy;
@@ -1123,16 +1017,12 @@
 		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();
+		for (String projId : _validators.keySet()) {
 			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();
+			Set<ValidatorMetaData> validators = _validators.get(projId);
+			for (ValidatorMetaData vmd : validators) {
 				buffer.append("\t"); //$NON-NLS-1$
 				buffer.append(vmd.getValidatorUniqueName());
 				buffer.append("\n"); //$NON-NLS-1$
@@ -1142,9 +1032,7 @@
 
 		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();
+		for (ValidatorMetaData vmd : _indexedValidators.values()) {
 			buffer.append(vmd.getValidatorUniqueName());
 			buffer.append(" enabled? "); //$NON-NLS-1$
 			buffer.append(vmd.isEnabledByDefault());
@@ -1155,26 +1043,27 @@
 	}
 
 	public boolean isConfiguredOnProject(ValidatorMetaData vmd, IProject project) {
-		if (projectValidationMetaData == null)
-			projectValidationMetaData = new HashMap();
-
-		Object vmds = projectValidationMetaData.get(project);
+		Set<ValidatorMetaData> vmds = null;
+		synchronized(projectValidationMetaData){
+			vmds = projectValidationMetaData.get(project);
+		}
 		if (vmds != null) {
-			Set pvmds = (Set) vmds;
-			return pvmds.contains(vmd);
+			return vmds.contains(vmd);
 		} else {
-			Set prjVmds = getValidatorMetaData(project);
-			if (prjVmds == null) {
-				return false;
+			Set<ValidatorMetaData> prjVmds = getValidatorMetaData(project);
+			if (prjVmds == null || prjVmds.size() == 0)return false;
+			synchronized(projectValidationMetaData){
+				projectValidationMetaData.put(project, prjVmds);
 			}
-
-			if (prjVmds.size() == 0) {
-				return false;
-			}
-			projectValidationMetaData.put(project, prjVmds);
 			return prjVmds.contains(vmd);
 		}
 	}
+	
+	public void clearCachedMaps(){
+		synchronized(projectValidationMetaData){
+			projectValidationMetaData.clear();
+		}
+	}
 
 	/**
 	 * Return a set of ValidatorMetaData which are configured on all projects or which run on any
@@ -1184,10 +1073,10 @@
 	 * 
 	 * @see addExcludedRemainder()
 	 */
-	private Set getValidatorMetaDataUnknownProject() {
-		Set projVmds = (Set) _validators.get(UNKNOWN_PROJECT);
+	private Set<ValidatorMetaData> getValidatorMetaDataUnknownProject() {
+		Set<ValidatorMetaData> projVmds = _validators.get(UNKNOWN_PROJECT);
 		if (projVmds == null) {
-			projVmds = Collections.EMPTY_SET;
+			projVmds = new HashSet<ValidatorMetaData>();
 		}
 		return projVmds;
 	}
@@ -1195,8 +1084,8 @@
 	/**
 	 * Return a set of ValidatorMetaData which are enabled by default.
 	 */
-	public Set getValidatorMetaDataEnabledByDefault() {
-		Set copy = new HashSet();
+	public Set<ValidatorMetaData> getValidatorMetaDataEnabledByDefault() {
+		Set<ValidatorMetaData> copy = new HashSet<ValidatorMetaData>();
 		clone(_defaultEnabledValidators, copy);
 		return copy;
 	}
@@ -1218,34 +1107,21 @@
 	 * any code not in this package.
 	 */
 	public ValidatorMetaData getValidatorMetaData(String validatorClassName) {
-		if (validatorClassName == null) {
-			return null;
-		}
+		if (validatorClassName == null)return null;
 
-		ValidatorMetaData vmd = (ValidatorMetaData) _indexedValidators.get(validatorClassName);
-		if (vmd != null) {
-			return vmd;
-		}
+		ValidatorMetaData vmd2 = _indexedValidators.get(validatorClassName);
+		if (vmd2 != null)return vmd2;
 
 		// Check for an aggregate validator
-		Iterator iterator = _indexedValidators.values().iterator();
-		while (iterator.hasNext()) {
-			vmd = (ValidatorMetaData) iterator.next();
-			if (vmd == null) {
-				continue;
-			}
+		for (ValidatorMetaData vmd : _indexedValidators.values()) {
+			if (vmd == null)continue;
 
-			if (vmd.getValidatorUniqueName().equals(validatorClassName)) {
-				return vmd;
-			}
+			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;
-					}
+				for (String aggregateName : aggregateNames) {
+					if (validatorClassName.equals(aggregateName))return vmd;
 				}
 			}
 
@@ -1257,15 +1133,13 @@
 				continue;
 			}
 
-			Set idList = mmd.getIds();
+			Set<String[]> idList = mmd.getIds();
 			if (idList == null) {
 				// Invalid <migrate> element.
 				continue;
 			}
 
-			Iterator idIterator = idList.iterator();
-			while (idIterator.hasNext()) {
-				String[] ids = (String[]) idIterator.next();
+			for (String[] ids : idList) {
 				if (ids.length != 2) {
 					// log
 					continue;
@@ -1301,37 +1175,22 @@
 	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);
+			// How can an IValidatorImpl be created when there no class name to instantiate?
+			if (Tracing.isLogging()) {
+				Tracing.log("ValidationRegistryReader-07: ", NLS.bind(ValMessages.VbfExcSyntaxNoValRun, validatorName));				 //$NON-NLS-1$
 			}
 			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
+		//Using the Unique Identifier give the flexibility of the same validator class used by other validator extensions 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);
+			if (Tracing.isLogging()) {
+				Tracing.log("ValidationRegistryReader-08: ", NLS.bind(ValMessages.VbfExcSyntaxNoValClass, validatorName)); //$NON-NLS-1$
 			}
 			return null;
 		}
@@ -1339,13 +1198,8 @@
 		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);
+			if (Tracing.isLogging()) {
+				Tracing.log("ValidationRegistryReader-09: ", NLS.bind(ValMessages.VbfExcSyntaxNoValRun, validatorImplName)); //$NON-NLS-1$
 			}
 			return null;
 		}
@@ -1360,34 +1214,18 @@
 		//
 		// 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.addFacetFilters(getFacetIds(element));//validator may or may not specify the facet
-		vmd.setEnablementElement(getEnablementElement(element));
-		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));
-		initializeValidatorCustomMarkers(element, pluginId, vmd);
 		
-		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);
+		boolean async = getAsync(element);
+		String[] markerIds = initializeValidatorCustomMarkers(element, pluginId);
+		ValidatorMetaData vmd = new ValidatorMetaData(async, getAggregateValidatorsNames(element), getEnabledByDefault(element),
+				getIncremental(element), getFullBuild(element), element, helperImplName, getMigrationMetaData(element),
+				pluginId, getRuleGroup(element), runChildren[0], validatorName.intern(), validatorImplName.intern(),
+				getContentTypeBindings(element), getDependentValidatorValue(element), getEnablementElement(element),
+				getFacetIds(element), getFilters(element), getProjectNatureFilters(element), markerIds);
+		
+		
+		if (Tracing.isTraceV1()) {
+			Tracing.log("ValidationRegistryReader-10: validator loaded: " + validatorImplName); //$NON-NLS-1$
 		}
 
 		return vmd;
@@ -1398,24 +1236,25 @@
 	 * @param pluginId
 	 * @param vmd
 	 */
-	private void initializeValidatorCustomMarkers(IConfigurationElement element, String pluginId, ValidatorMetaData vmd) {
+	private String[] initializeValidatorCustomMarkers(IConfigurationElement element, String pluginId) {
+		String[] qualifiedMarkerIds = null;
 		String[] customMarkerIds = getMarkerIdsValue(element);
 		if (customMarkerIds != null && customMarkerIds.length > 0) {
-			String[] qualifiedMarkerIds = new String[customMarkerIds.length];
+			qualifiedMarkerIds = new String[customMarkerIds.length];
 			for (int i = 0; i < customMarkerIds.length; i++) {
 				String markerid = customMarkerIds[i];
-				if (markerid.lastIndexOf(".") != -1) {
-					String pluginID = markerid.substring(0, markerid.lastIndexOf("."));
+				if (markerid.lastIndexOf(".") != -1) { //$NON-NLS-1$
+					String pluginID = markerid.substring(0, markerid.lastIndexOf(".")); //$NON-NLS-1$
 					Bundle bundle = Platform.getBundle(pluginID);
 					if (bundle == null)
-						qualifiedMarkerIds[i] = pluginId + "." + customMarkerIds[i];
+						qualifiedMarkerIds[i] = pluginId + "." + customMarkerIds[i]; //$NON-NLS-1$
 					else
 						qualifiedMarkerIds[i] = customMarkerIds[i];
 				} else
-					qualifiedMarkerIds[i] = pluginId + "." + customMarkerIds[i];
+					qualifiedMarkerIds[i] = pluginId + "." + customMarkerIds[i]; //$NON-NLS-1$
 			}
-			vmd.setMarkerIds(qualifiedMarkerIds); //$NON-NLS-1$
 		}
+		return qualifiedMarkerIds;
 	}
 
 	private Expression getEnablementElement(IConfigurationElement element) {
@@ -1424,8 +1263,8 @@
 			return null;
 		try {
 			return ExpressionConverter.getDefault().perform(enablements[0]);
-		} catch (CoreException ce) {
-			Logger.getLogger().log(ce);
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 		return null;
 	}
@@ -1434,8 +1273,8 @@
 	 * 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();
+	public Collection<ValidatorMetaData> getAllValidators() {
+		Set<ValidatorMetaData> validators = new HashSet<ValidatorMetaData>(50);
 		clone(_indexedValidators.values(), validators);
 		return validators;
 	}
@@ -1455,29 +1294,25 @@
 
 			String label = extension.getLabel();
 			if (label == null || label.equals("")) { //$NON-NLS-1$
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.FINE)) {
+				if (Tracing.isTraceV1()) {
 					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);
+							(Object[])msgParm);
+					Tracing.log("ValidationRegistryReader-11: ", result); //$NON-NLS-1$
 				}
 			} 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);
+				String pluginId = extension.getContributor().getName();
+				if (Tracing.isEnabled(extension.getUniqueIdentifier())){
+					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);
+					}
 				}
 			}
 		}
@@ -1509,10 +1344,10 @@
 	}
 
 	public IValidator getValidator(String validatorClassName) throws InstantiationException {
-		ValidatorMetaData vmd = (ValidatorMetaData) _indexedValidators.get(validatorClassName);
+		ValidatorMetaData vmd = _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
index 3876c4e..cf3ce9a 100644
--- 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
@@ -1,42 +1,38 @@
-/*
- * Created on Nov 23, 2004
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
  *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
 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.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
 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 class ValidationSelectionHandlerRegistryReader {
 
 	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
-	 */
+	/** handlerClass - */
+	static final String ATT_HANDLER_CLASS = "handlerClass"; //$NON-NLS-1$
+	
+	static final String ATT_SELECTION_TYPE = "selectionType"; //$NON-NLS-1$
+	private static ValidationSelectionHandlerRegistryReader INSTANCE;
+	private List<IValidationSelectionHandler> _validationSelectionHandlers;
+	
 	public ValidationSelectionHandlerRegistryReader() {
-		super(ValidationPlugin.PLUGIN_ID, VALIDATION_SELECTION_HANDLER);
 	}
 	
 	public static ValidationSelectionHandlerRegistryReader getInstance() {
@@ -47,6 +43,36 @@
 		return INSTANCE;
 	}
 
+	/**
+	 * Read the extension point and parse it.
+	 */
+	public void readRegistry() {
+		IExtensionPoint point = Platform.getExtensionRegistry()
+			.getExtensionPoint(ValidationPlugin.PLUGIN_ID, VALIDATION_SELECTION_HANDLER);
+		if (point == null)return;
+		IConfigurationElement[] elements = point.getConfigurationElements();
+		for (int i = 0; i < elements.length; i++) {
+			internalReadElement(elements[i]);
+		}
+	}
+	
+	private void internalReadElement(IConfigurationElement element) {
+		boolean recognized = this.readElement(element);
+		if (!recognized) {
+			logError(element, "Error processing extension: " + element); //$NON-NLS-1$
+		}
+	}
+
+	/*
+	 * Logs the error in the desktop log using the provided text and the information in the configuration element.
+	 */
+	protected void logError(IConfigurationElement element, String text) {
+		IExtension extension = element.getDeclaringExtension();
+		StringBuffer buf = new StringBuffer();
+		buf.append("Plugin " + extension.getContributor().getName() + ", extension " + extension.getExtensionPointUniqueIdentifier()); //$NON-NLS-1$ //$NON-NLS-2$
+		buf.append("\n" + text); //$NON-NLS-1$
+		ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, buf.toString());
+	}
 	
 
 	/* (non-Javadoc)
@@ -71,19 +97,17 @@
 	   return false;
 	}
 	
-	private List getValidationSelectionHandlers() {
-		if (validationSelectionHandlers == null)
-			validationSelectionHandlers = new ArrayList();
-		return validationSelectionHandlers;
+	private List<IValidationSelectionHandler> getValidationSelectionHandlers() {
+		if (_validationSelectionHandlers == null)
+			_validationSelectionHandlers = new ArrayList<IValidationSelectionHandler>();
+		return _validationSelectionHandlers;
 	}
 	
 	public Object getExtendedType(Object selection) {
 		Object result = null;
-		for (int i=0; i<getValidationSelectionHandlers().size(); i++ ) {
-			IValidationSelectionHandler handler = (IValidationSelectionHandler) getValidationSelectionHandlers().get(i);
+		for (IValidationSelectionHandler handler : getValidationSelectionHandlers()) {
 			result = handler.getBaseValidationType(selection);
-			if (result != null)
-				break;
+			if (result != null)break;
 		}
 		return result;
 	}
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
index 8035a0c..d51a217 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 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,26 +12,24 @@
 
 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;
+	private ValidatorNameFilter _nameFilter;
+	private ValidatorTypeFilter _typeFilter;
+	private ValidatorActionFilter _actionFilter;
 
-	/* package */ValidatorFilter() {
+	ValidatorFilter() {
 		super();
 		_nameFilter = new ValidatorNameFilter();
 		_typeFilter = new ValidatorTypeFilter();
 		_actionFilter = new ValidatorActionFilter();
 	}
 
-	/* package */ValidatorFilter(String mustImplementClass) {
+	ValidatorFilter(String mustImplementClass) {
 		this();
 		_nameFilter = new ValidatorNameFilter();
 		_typeFilter.setMustImplementClass(mustImplementClass);
@@ -48,7 +46,7 @@
 	 * 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) {
+	boolean isApplicableName(IResource resource) {
 		return _nameFilter.isApplicableName(resource);
 	}
 
@@ -58,7 +56,7 @@
 	 * 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) {
+	boolean isApplicableType(IResource resource) {
 		return _typeFilter.isApplicableType(resource);
 	}
 
@@ -69,7 +67,7 @@
 	/**
 	 * Sets the name filter.
 	 */
-	/* package */void setNameFilter(String filter, String isCaseSensitiveString) {
+	void setNameFilter(String filter, String isCaseSensitiveString) {
 		_nameFilter.setNameFilter(filter);
 		if(filter != null)
 			  _nameFilter.setNameFilterExtension(getFilterExt(filter));
@@ -77,14 +75,14 @@
 	}
 	
 	private String getFilterExt(String filter) {
-		return filter.substring(filter.indexOf(".") + 1);
+		return filter.substring(filter.indexOf(".") + 1); //$NON-NLS-1$
 	}
 	
 
 	/**
 	 * Sets the type filter.
 	 */
-	/* package */void setTypeFilter(String filter) {
+	void setTypeFilter(String filter) {
 		_typeFilter.setTypeFilter(filter);
 	}
 
@@ -108,4 +106,4 @@
 	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
index d5a101d..0d0b518 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -18,19 +18,22 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
 
 import org.eclipse.core.expressions.Expression;
 import org.eclipse.core.resources.IContainer;
+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.IConfigurationElement;
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.jem.util.logger.proxy.Logger;
+import org.eclipse.core.runtime.content.IContentDescription;
+import org.eclipse.core.runtime.content.IContentType;
 import org.eclipse.wst.validation.internal.delegates.ValidatorDelegatesRegistry;
 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.eclipse.wst.validation.internal.provisional.core.IValidatorJob;
 import org.osgi.framework.Bundle;
@@ -41,82 +44,82 @@
  * ValidatorMetaData; it is for use by the base framework only.
  */
 public class ValidatorMetaData {
-	private ValidatorFilter[] _filters = null;
-	private ValidatorNameFilter[] _projectNatureFilters = null;
-	private String[] facetFilters = 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[] markerIds = null;
-	private String _helperClassName = null;
-	private IConfigurationElement _helperClassElement = null;
-	private IConfigurationElement _validatorClassElement = null;
-	private boolean _cannotLoad = false;
-	private boolean manualValidation = true;
-	private boolean buildValidation = true;
-	private Map helpers = Collections.synchronizedMap( new HashMap() );
-	private Expression enablementExpression = null;
-
-	/* package */ValidatorMetaData() {
-		//default
-	}
-
+	private final ValidatorFilter[] _filters;
+	private final ValidatorNameFilter[] 	_projectNatureFilters;
+	private final String[]			_facetFilters;
+	private final AtomicReference<IValidator>	_validator = new AtomicReference<IValidator>();
+	private final AtomicReference<IWorkbenchContext> 		_helper = new AtomicReference<IWorkbenchContext>();
+	private final String 			_validatorDisplayName;
+	private final String 			_validatorUniqueName;
+	
 	/**
-	 * Add to the list of class names of every validator which this validator aggregates. For
+	 * 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;
-	}
+	private final String[] 	_aggregatedValidators;
+    private final String[] 	_contentTypeIds;
+	private final String[] 	_validatorNames;
+	private final String 	_pluginId;
+	private final boolean	_supportsIncremental;
+	private final boolean 	_supportsFullBuild;
+	private final boolean 	_isEnabledByDefault;
+	private final MigrationMetaData _migrationMetaData;
+	private final int 		_ruleGroup;
+	private final boolean 	_async;
+	private final boolean 	_dependentValidator;
+	private final String[]	_markerIds;
+	private final String 	_helperClassName;
+	private final IConfigurationElement _helperClassElement;
+	private final IConfigurationElement _validatorClassElement;
+	private volatile boolean 	_cannotLoad;
+	private volatile boolean 	_manualValidation = true;
+	private volatile boolean	_buildValidation = true;
+	private final Map<IValidatorJob, IWorkbenchContext> _helpers = 
+		Collections.synchronizedMap( new HashMap<IValidatorJob, IWorkbenchContext>() );
+	private final Expression 		_enablementExpression;
 
-	/**
-	 * Add the name/type filter pair(s).
-	 */
-	/* package */void addFilters(ValidatorFilter[] filters) {
+	ValidatorMetaData(boolean async, String[] aggregatedValidators, boolean isEnabledByDefault, boolean supportsIncremental,
+			boolean supportsFullBuild, IConfigurationElement helperClassElement, String helperClassName, 
+			MigrationMetaData migrationMetaData, String pluginId, int ruleGroup, IConfigurationElement validatorClassElement,
+			String validatorDisplayName, String validatorUniqueName, String[] contentTypeIds, boolean dependentValidator,
+			Expression enablementExpression, String[] facetFilters, ValidatorFilter[] filters,
+			ValidatorNameFilter[] projectNatureFilters, String[] markerIds) {
+		_async = async;
+		_aggregatedValidators = aggregatedValidators;
+		_isEnabledByDefault = isEnabledByDefault;
+		_supportsIncremental = supportsIncremental;
+		_supportsFullBuild = supportsFullBuild;
+		_helperClassElement = helperClassElement;
+		_helperClassName = helperClassName;
+		_migrationMetaData = migrationMetaData;
+		_pluginId = pluginId;
+		_ruleGroup = ruleGroup;
+		_validatorClassElement = validatorClassElement;
+		_validatorDisplayName = validatorDisplayName;
+		_validatorUniqueName = validatorUniqueName;
+		_contentTypeIds = contentTypeIds;
+		_dependentValidator = dependentValidator;
+		_enablementExpression = enablementExpression;
+		_facetFilters = facetFilters;
 		_filters = filters;
+		_projectNatureFilters = projectNatureFilters;
+		_markerIds = markerIds;
+		_validatorNames = buildValidatorNames();
 	}
-
-	/**
-	 * Add the project nature filter(s).
-	 */
-	/* package */void addProjectNatureFilters(ValidatorNameFilter[] filters) {
-		_projectNatureFilters = filters;
-	}
-	
-	/**
-	 * Add the facet  filter(s).
-	 */
-	protected void addFacetFilters(String[] filters) {
-		facetFilters = filters;
-	}
-	
+		
 	protected String[] getFacetFilters() {
-		return facetFilters;
+		return _facetFilters;
 	}
 
-	public List getNameFilters() {
-		List nameFilters = new ArrayList();
+	public List<String> getNameFilters() {
+		List<String> nameFilters = new ArrayList<String>();
 		if (_filters != null && _filters.length > 0) {
-			for (int i = 0; i < _filters.length; i++) {
-				ValidatorFilter filter = _filters[i];
+			for (ValidatorFilter filter : _filters) {
 				ValidatorNameFilter nameFilter = filter.get_nameFilter();
 				if (nameFilter != null) {
 					nameFilters.add(nameFilter.getNameFilter());
 				}
-
 			}
 		}
 		return nameFilters;
@@ -126,16 +129,18 @@
 	 * 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;
 	}
+	
+	private String[] buildValidatorNames() {
+		int aLength = (_aggregatedValidators == null) ? 0 : _aggregatedValidators.length;
+		String [] 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
@@ -191,30 +196,21 @@
 	//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 (_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;
+		IWorkbenchContext helper = _helper.get();
+		if (helper != null)return helper;
+		
+		helper = ValidationRegistryReader.createHelper(_helperClassElement, _helperClassName);
+		if (helper == null)helper = new WorkbenchContext();
+		
+		if ((helper.getProject() == null) || !(helper.getProject().equals(project))) {
+			helper.setProject(project);
 		}
-		if ((_helper.getProject() == null) || !(_helper.getProject().equals(project))) {
-			// Initialize helper with the new project
-			_helper.setProject(project);
-		}
-		return _helper;
+		if (_helper.compareAndSet(null, helper))return helper;
+		return _helper.get();
 	}
 
 	/**
 	 * 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;
@@ -229,23 +225,6 @@
 		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;
 	}
@@ -260,7 +239,7 @@
 	/**
 	 * Return the filters which identify which project(s) this validator may run on.
 	 */
-	/* package */ValidatorNameFilter[] getProjectNatureFilters() {
+	ValidatorNameFilter[] getProjectNatureFilters() {
 		return _projectNatureFilters;
 	}
 
@@ -268,23 +247,19 @@
 	 * 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());
+		IValidator val = _validator.get();
+		if (val != null)return val;
+		
+		val = 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()}));
-			}
+		if (val == null) {
+			setCannotLoad();
+			throw new InstantiationException(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_DISABLEV, new String[]{getValidatorUniqueName()}));
 		}
-		return _validator;
+		if (_validator.compareAndSet(null, val))return val;
+		return _validator.get();
 	}
 
 	public String getValidatorDisplayName() {
@@ -314,9 +289,9 @@
 	 */
 	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;
+		// rebuild of the model cache.
+		// Also make sure no content type id is specified (BUG 193816)
+		if (_filters == null  && getContentTypeIds() == null)return true;
 
 		return isApplicableTo(resource, resourceDelta, _filters);
 	}
@@ -324,19 +299,29 @@
 	/**
 	 * Return true if the resource passes the name/type filters for this validator.
 	 */
-	/* package */boolean isApplicableTo(IResource resource, int resourceDelta, ValidatorFilter[] filters) {
+	boolean isApplicableTo(IResource resource, int resourceDelta, ValidatorFilter[] filters) {
 		// Are any of the filters satisfied? (i.e., OR them, not AND them.)
-		if (checkIfValidSourceFile(resource)) {
-			for (int i = 0; i < filters.length; i++) {
-				ValidatorFilter filter = filters[i];
-				if (filter.isApplicableType(resource) &&
-					filter.isApplicableName(resource) &&
-					filter.isApplicableAction(resourceDelta)){
+		// make sure filters is not null (BUG 193816)
+		if (filters != null && checkIfValidSourceFile(resource)) {
+			for (ValidatorFilter filter : filters) {
+				if (filter.isApplicableType(resource)
+						&& filter.isApplicableName(resource)
+						&& filter.isApplicableAction(resourceDelta)) {
 					return true;
-                }
-
+				}
 			}
 		}
+		if (getContentTypeIds() != null) {
+			IContentDescription description = null;
+			try {
+				if (resource.getType() == IResource.FILE && resource.exists())
+					description = ((IFile) resource).getContentDescription();
+			} catch (CoreException e) {
+				//Resource exceptions
+			}
+			if (description == null)return false;
+			if (isApplicableContentType(description))return true;
+		}
 		return false;
 	}
 
@@ -420,129 +405,55 @@
 		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 final static class MigrationMetaData {
+		private Set<String[]> _ids;
 
 		public MigrationMetaData() {
-			//default
 		}
 
 		public void addId(String oldId, String newId) {
-			if (oldId == null) {
-				// log
-				return;
-			}
-
-			if (newId == null) {
-				// log
-				return;
-			}
+			if (oldId == null)return;
+			if (newId == null)return;
 
 			String[] ids = new String[]{oldId, newId};
 			getIds().add(ids);
 		}
 
-		public Set getIds() {
-			if (_ids == null) {
-				_ids = new HashSet();
-			}
+		public Set<String[]> getIds() {
+			if (_ids == null)_ids = new HashSet<String[]>();
 			return _ids;
 		}
 	}
 
-	/**
-	 * @param b
-	 */
-	public void addDependentValidator(boolean b) {
-		dependentValidator = b;
-	}
-
-	/**
-	 * @param b
-	 */
 	public boolean isDependentValidator() {
-		return dependentValidator;
+		return _dependentValidator;
 	}
 
 	/**
 	 * @return Returns the markerId.
 	 */
 	public String[] getMarkerIds() {
-		return markerIds;
-	}
-
-	/**
-	 * @param markerId
-	 *            The markerId to set.
-	 */
-	public void setMarkerIds(String[] markerId) {
-		this.markerIds = markerId;
+		return _markerIds;
 	}
 
 	public boolean isBuildValidation() {
-		return buildValidation;
+		return _buildValidation;
 	}
 
 	public void setBuildValidation(boolean buildValidation) {
-		this.buildValidation = buildValidation;
+		_buildValidation = buildValidation;
 	}
 
 	public boolean isManualValidation() {
-		return manualValidation;
+		return _manualValidation;
 	}
 
 	public void setManualValidation(boolean manualValidation) {
-		this.manualValidation = manualValidation;
+		_manualValidation = manualValidation;
 	}
   
 	/**
@@ -569,15 +480,15 @@
 	}	  
 	
    public void addHelper( IValidatorJob validator, IWorkbenchContext helper ){
-	   helpers.put( validator, helper );
+	   _helpers.put( validator, helper );
    }
    
    public void removeHelper( IValidatorJob validator ){
-	   helpers.remove( validator );
+	   _helpers.remove( validator );
    }
    
    private IWorkbenchContext getHelper( IValidatorJob validator ){
-	   return (IWorkbenchContext)helpers.get( validator );
+	   return _helpers.get( validator );
    }   
    
    public IWorkbenchContext getHelper( IProject project, IValidator validator ){
@@ -607,12 +518,25 @@
    }   
    
    public Expression getEnablementExpresion() {
-		return enablementExpression;
+		return _enablementExpression;
 	}
 
-   public void setEnablementElement(Expression enablementElement) {
-	 enablementExpression = enablementElement;
+public String[] getContentTypeIds() {
+	return _contentTypeIds;
+}
+
+ 
+private boolean isApplicableContentType(IContentDescription desc){
+	
+	IContentType ct = desc.getContentType();
+	String[] applicableContentTypes = getContentTypeIds();
+	if (applicableContentTypes != null) {
+		for (int i = 0; i < applicableContentTypes.length; i ++){
+			if(applicableContentTypes[i].equals(ct.getId()))
+				return true;
+		}
 	}
+	return false;
+}
    
-   
-}
\ 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
index f80648c..946cfba 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 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
  *******************************************************************************/
@@ -20,8 +20,8 @@
  * this class would store the "*.*", and provide the wildcard matching functionality.
  */
 public class ValidatorNameFilter {
-	private String _nameFilter = null;
-	private String nameFilterExtension = null;
+	private String _nameFilter;
+	private String nameFilterExtension;
 	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
@@ -29,29 +29,29 @@
 	/**
 	 * Insert the method's description here. Creation date: (12/4/00 11:08:41 AM)
 	 */
-	/* package */ValidatorNameFilter() {
+	ValidatorNameFilter() {
 		//default
 	}
 
 	/**
 	 * Get the filter, as specified in plugin.xml
 	 */
-	/* package */String getNameFilter() {
+	String getNameFilter() {
 		return _nameFilter;
 	}
 
-	/* package */boolean isCaseSensitive() {
+	boolean isCaseSensitive() {
 		return _isCaseSensitive;
 	}
 
-	/* package */boolean isInclude() {
+	boolean isInclude() {
 		return _include;
 	}
 
 	/**
 	 * Return true if the given resource is both applicable and include="true".
 	 */
-	/* package */boolean isApplicableTo(IResource resource) {
+	boolean isApplicableTo(IResource resource) {
 		return (isApplicableName(resource) && isInclude());
 	}
 	
@@ -75,12 +75,12 @@
 		if (name.equalsIgnoreCase(_nameFilter))
 			return true;
 
-		int indexOfStarDot = _nameFilter.indexOf("*.");
+		int indexOfStarDot = _nameFilter.indexOf("*."); //$NON-NLS-1$
 
-		//return value if the fileter name extension matches the extension
+		//return value if the filter name extension matches the extension
 		//of the resource 
 		if (indexOfStarDot != -1) {
-			String nameExtension = name.substring(name.lastIndexOf(".") + 1);
+			String nameExtension = name.substring(name.lastIndexOf(".") + 1); //$NON-NLS-1$
 			return nameFilterExtension.equalsIgnoreCase(nameExtension);
 		}
 
@@ -91,7 +91,7 @@
 		return verifyNameMatch(_nameFilter, name);
 	}
 
-	/* package */void setInclude(String includeValue) {
+	void setInclude(String includeValue) {
 		if (includeValue != null) {
 			setInclude(Boolean.valueOf(includeValue).booleanValue());
 		}
@@ -104,11 +104,11 @@
 	/**
 	 * Set the filter, as specified in plugin.xml
 	 */
-	/* package */void setNameFilter(String filter) {
+	void setNameFilter(String filter) {
 		_nameFilter = filter;
 	}
 
-	/* package */void setCaseSensitive(String isCaseSensitiveString) {
+	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();
@@ -127,7 +127,7 @@
 	 * 
 	 * The only filter wildcard allowed is '*'.
 	 */
-	/* package */static boolean verifyNameMatch(final String filter, String name) {
+	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.,
@@ -167,4 +167,4 @@
 		}
 		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
index 0f00ce3..f495aa6 100644
--- 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
@@ -1,22 +1,18 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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
@@ -24,17 +20,17 @@
  * provide the "instanceof" matching functionality.
  */
 public class ValidatorTypeFilter {
-	private Class _typeFilterClass = null;
-	private String _mustImplementClass = null; // the type set in setTypeFilter must implement the
+	private Class _typeFilterClass;
+	private String _mustImplementClass; // the type set in setTypeFilter must implement the
 
 	// class/interface identified by this fully-qualified
 	// Java string.
 
-	/* package */ValidatorTypeFilter() {
+	ValidatorTypeFilter() {
 		//default
 	}
 
-	/* package */ValidatorTypeFilter(String mustImplementClass) {
+	ValidatorTypeFilter(String mustImplementClass) {
 		setMustImplementClass(mustImplementClass);
 	}
 
@@ -42,14 +38,14 @@
 	 * 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() {
+	String getMustImplementClass() {
 		return _mustImplementClass;
 	}
 
 	/**
 	 * Return the type filter as a java.lang.Class object.
 	 */
-	/* package */Class getTypeFilterClass() {
+	Class getTypeFilterClass() {
 		return _typeFilterClass;
 	}
 
@@ -71,7 +67,7 @@
 	/**
 	 * Checks if filterClass is a parent (interface or superclass) of objectClass.
 	 */
-	/* package */boolean isInstance(Class objectClass, Class filterClass) {
+	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.
@@ -96,7 +92,7 @@
 	 * 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) {
+	void setMustImplementClass(String className) {
 		_mustImplementClass = className;
 	}
 
@@ -104,7 +100,7 @@
 	 * 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) {
+	void setTypeFilter(String filter) {
 		Class filterClass = null;
 		Class mustImplementClass = null;
 
@@ -121,26 +117,19 @@
 				// 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);
+					if (Tracing.isLogging()) {
+						String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INVALID_TYPE_FILTER), 
+							new Object[]{filter, getMustImplementClass()});
+						Tracing.log("ValidatorTypeFilter-01: ", result); //$NON-NLS-1$
 					}
 				}
 			}
 		} 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);
+			if (Tracing.isLogging()) {
+				Tracing.log("ValidatorTypeFilter-02: The class named " + filter +  //$NON-NLS-1$
+					" cannot be instantiated because it does not exist. Check the spelling of the name, " + //$NON-NLS-1$
+					"in the validator's plugin.xml contribution, and try restarting eclipse again."); //$NON-NLS-1$
 			}
 			return;
 		}
@@ -154,4 +143,4 @@
 		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/delegates/DelegatingValidator.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/DelegatingValidator.java
index 0daf071..d143f9b 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/DelegatingValidator.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/DelegatingValidator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2008 IBM Corporation and others.
  * All rights reserved. This program and 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,13 @@
 import java.util.List;
 
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.wst.validation.AbstractValidator;
+import org.eclipse.wst.validation.ValidationResult;
+import org.eclipse.wst.validation.ValidationState;
 import org.eclipse.wst.validation.internal.ConfigurationManager;
 import org.eclipse.wst.validation.internal.ProjectConfiguration;
 import org.eclipse.wst.validation.internal.ResourceConstants;
@@ -50,11 +55,8 @@
  * API will almost certainly be broken (repeatedly) as the API evolves.
  * </p>
  */
-public class DelegatingValidator implements IDelegatingValidator
+public class DelegatingValidator extends AbstractValidator implements IDelegatingValidator
 {
-  /**
-   * Default constructor.
-   */
   public DelegatingValidator()
   {
   }
@@ -78,7 +80,7 @@
    */
   public void validate(IValidationContext helper, IReporter reporter) throws ValidationException
   {
-    // Apparently this method will not be called on an IValidatorJob.
+    validateInJob(helper, reporter);
   }
 
   /**
@@ -260,4 +262,9 @@
   {
     return null;
   }
+
+@Override
+public ValidationResult validate(IResource resource, int kind, ValidationState state, IProgressMonitor monitor) {
+	return null;
+}
 }
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegateDescriptor.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegateDescriptor.java
index d8ba0be..51910e0 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegateDescriptor.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegateDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2008 IBM Corporation and others.
  * All rights reserved. This program and 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,114 +13,142 @@
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.wst.validation.AbstractValidator;
 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;
 import org.eclipse.wst.validation.internal.core.ValidationException;
 import org.eclipse.wst.validation.internal.operations.LocalizedMessage;
+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;
 
 /**
  * ValidatorDelegateDescriptor stores information about a delegate validator.
- * 
+ * <p>
  * It is also used to store the instance of the validator it describes. To
  * obtain the instance call getValidator().
+ * </p>
  */
-public class ValidatorDelegateDescriptor
-{
-  /**
-   * The platform configuration element describing this delegate.
-   */
-  private IConfigurationElement delegateConfiguration;
+public class ValidatorDelegateDescriptor {
+	/**
+	 * The platform configuration element describing this delegate.
+	 */
+	private IConfigurationElement _delegateConfiguration;
 
-  /**
-   * The delegating validator's ID.
-   */
-  private String delegatingValidatorID;
+	/**
+	 * The delegating validator's ID.
+	 */
+	private String _delegatingValidatorID;
 
-  /**
-   * The delegate's ID.
-   */
-  private String id;
+	/**
+	 * The delegate's ID.
+	 */
+	private String _id;
 
-  /**
-   * The delegate's display name.
-   */
-  private String name;
+	/**
+	 * The delegate's display name.
+	 */
+	private String _name;
 
-  /**
-   * Constructs a descriptor.
-   * 
-   * @param id
-   *          the delegate's uniques id. Must be unique in the context of a
-   *          delegating validator.
-   * @param delegateConfiguration
-   *          the delegates configuration element
-   * @param delegateName
-   *          the delegate's display name.
-   * @param targetValidatorID
-   *          the target validator's unique id.
-   */
-  public ValidatorDelegateDescriptor(String id, IConfigurationElement delegateConfiguration, String delegateName, String targetValidatorID)
-  {
-    this.id = id;
-    this.delegateConfiguration = delegateConfiguration;
-    this.name = delegateName;
-    this.delegatingValidatorID = targetValidatorID;
-  }
+	/**
+	 * Constructs a descriptor.
+	 * 
+	 * @param id
+	 *            The delegate's unique id. Must be unique in the context of a
+	 *            delegating validator.
+	 * @param delegateConfiguration
+	 *            The delegates configuration element
+	 * @param delegateName
+	 *            The delegate's display name.
+	 * @param targetValidatorID
+	 *            The target validator's unique id.
+	 */
+	public ValidatorDelegateDescriptor(String id,
+			IConfigurationElement delegateConfiguration, String delegateName,
+			String targetValidatorID) {
 
-  /**
-   * Provides the delegate's ID.
-   * 
-   * @return a string with the fully qualified class name of this validator
-   *         implementation.
-   */
-  public String getId()
-  {
-    return id;
-  }
+		assert id != null;
+		assert delegateConfiguration != null;
+		assert targetValidatorID != null;
 
-  /**
-   * Provides the delegate's name.
-   * 
-   * @return a String with the validator's display name.
-   */
-  public String getName()
-  {
-    return name;
-  }
+		_id = id;
+		_delegateConfiguration = delegateConfiguration;
+		_name = delegateName;
+		_delegatingValidatorID = targetValidatorID;
+	}
 
-  /**
-   * Retrieves the target validator's ID.
-   * 
-   * @return a String with the fully qualified class name of the delegating
-   *         validator who will delegate its implementation to the validator
-   *         described by this descriptor.
-   */
-  public String getTargetID()
-  {
-    return delegatingValidatorID;
-  }
+	/**
+	 * Provides the delegate's ID.
+	 * 
+	 * @return a string with the fully qualified class name of this validator
+	 *         implementation.
+	 */
+	public String getId() {
+		return _id;
+	}
 
-  /**
-   * Provides the instance of the validator delegate pointed to by this
-   * descriptor.
-   * 
-   * @return an IValidator instance.
-   * @throws ValidationException
-   */
-  public IValidator getValidator() throws ValidationException
-  {
-    try
-    {
-      IValidator delegate = (IValidator) delegateConfiguration.createExecutableExtension(ValidatorDelegatesRegistryReader.CLASS_ATTRIBUTE);
-      return delegate;
-    }
-    catch (CoreException e)
-    {
-      String delegatingValidatorName = ValidationRegistryReader.getReader().getValidatorMetaData(getTargetID()).getValidatorDisplayName();
-      throw new ValidationException(new LocalizedMessage(IMessage.HIGH_SEVERITY, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_CANNOT_INSTANTIATE_DELEGATE, new String[] { getName(), delegatingValidatorName })));
-    }
-  }
+	/**
+	 * Provides the delegate's name.
+	 * 
+	 * @return a String with the validator's display name.
+	 */
+	public String getName() {
+		return _name;
+	}
+
+	/**
+	 * Retrieves the target validator's ID.
+	 * 
+	 * @return a String with the fully qualified class name of the delegating
+	 *         validator who will delegate its implementation to the validator
+	 *         described by this descriptor.
+	 */
+	public String getTargetID() {
+		return _delegatingValidatorID;
+	}
+
+	/**
+	 * Provides the instance of the validator delegate pointed to by this descriptor.
+	 * 
+	 * @return an IValidator instance.
+	 * @throws ValidationException
+	 */
+	public IValidator getValidator() throws ValidationException {
+		try {
+			IValidator delegate = (IValidator) _delegateConfiguration
+					.createExecutableExtension(ValidatorDelegatesRegistryReader.CLASS_ATTRIBUTE);
+			return delegate;
+		} catch (CoreException e) {
+			handleException(e);
+		}
+		return null;
+	}
+
+	/**
+	 * Answer an AbstractValidator if one has been defined, otherwise answer null.
+	 */
+	public AbstractValidator getValidator2() throws ValidationException {
+		try {
+			Object o = _delegateConfiguration
+					.createExecutableExtension(ValidatorDelegatesRegistryReader.CLASS_ATTRIBUTE);
+			if (o instanceof AbstractValidator)
+				return (AbstractValidator) o;
+		} catch (CoreException e) {
+			handleException(e);
+		}
+		return null;
+	}
+
+	private void handleException(CoreException e) throws ValidationException {
+		ValidationPlugin.getPlugin().handleException(e);
+		String delegatingValidatorName = getTargetID();
+		ValidatorMetaData vmd = ValidationRegistryReader.getReader()
+			.getValidatorMetaData(getTargetID());
+		if (vmd != null)delegatingValidatorName = vmd.getValidatorDisplayName();
+		throw new ValidationException(new LocalizedMessage(
+			IMessage.HIGH_SEVERITY, ResourceHandler.getExternalizedMessage(
+			ResourceConstants.VBF_CANNOT_INSTANTIATE_DELEGATE, new String[] { getName(), delegatingValidatorName })));
+	}
 }
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegatesRegistry.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegatesRegistry.java
index 5169850..09bc63f 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegatesRegistry.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegatesRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2008 IBM Corporation and others.
  * All rights reserved. This program and 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,12 +22,12 @@
  * ValidatorDelegatesRegistry is a singleton used to store validator delegate
  * descriptors for each delegating validator.
  */
-public class ValidatorDelegatesRegistry
-{
+public class ValidatorDelegatesRegistry {
+	
   /**
    * The one and only instance of this registry.
    */
-  private static ValidatorDelegatesRegistry instance;
+  private static ValidatorDelegatesRegistry _instance;
 
   /**
    * Provides the one and only instance of this class.
@@ -38,45 +38,38 @@
    * 
    * @return the validator delegates registry singleton instance.
    */
-  public static ValidatorDelegatesRegistry getInstance()
-  {
-    if (instance == null)
-    {
-      instance = new ValidatorDelegatesRegistry();
-
-      ValidatorDelegatesRegistryReader reader = new ValidatorDelegatesRegistryReader(instance);
+  public static ValidatorDelegatesRegistry getInstance() {
+    if (_instance == null) {
+      _instance = new ValidatorDelegatesRegistry();
+      ValidatorDelegatesRegistryReader reader = new ValidatorDelegatesRegistryReader(_instance);
       reader.readRegistry();
     }
 
-    return instance;
+    return _instance;
   }
 
   /**
    * The map of target validator id to Map of delegates by id.
    */
-  private Map delegatesByTarget = new HashMap();
+  private Map<String, Map<String,ValidatorDelegateDescriptor>> _delegatesByTarget = 
+	  new HashMap<String, Map<String,ValidatorDelegateDescriptor>>();
 
   /**
    * Adds a descriptor to the registry.
    * 
    * @param descriptor
-   *          the descriptor to add. Must not be null.
+   *          The descriptor to add. Must not be null.
    */
-  void add(ValidatorDelegateDescriptor descriptor)
-  {
-    if (descriptor == null)
-    {
-      return;
-    }
+  void add(ValidatorDelegateDescriptor descriptor) {
+    if (descriptor == null)return;
 
     String targetID = descriptor.getTargetID();
 
-    Map delegates = (Map) delegatesByTarget.get(targetID);
+    Map<String,ValidatorDelegateDescriptor> delegates = _delegatesByTarget.get(targetID);
 
-    if (delegates == null)
-    {
-      delegates = new HashMap();
-      delegatesByTarget.put(targetID, delegates);
+    if (delegates == null) {
+      delegates = new HashMap<String,ValidatorDelegateDescriptor>();
+      _delegatesByTarget.put(targetID, delegates);
     }
 
     delegates.put(descriptor.getId(), descriptor);
@@ -86,32 +79,24 @@
    * Provides the default delegate ID for the given delegating validator ID.
    * 
    * @param targetID
-   *          the delegating validator's ID.
+   *          The delegating validator's ID.
    * @return a String with the ID of the default delegate.
    */
   public String getDefaultDelegate(String targetID)
   {
-    Map delegates = getDelegateDescriptors(targetID);
+    Map<String,ValidatorDelegateDescriptor> delegates = getDelegateDescriptors(targetID);
 
-    if (delegates == null)
-    {
-      return null;
-    }
+    if (delegates == null)return null;
 
     // TODO: Implement a default attribute and use that to get the default?
     // What happens if two or more delegates claim to be the default one?
     // For now, just pick the first one in the list.
 
-    Iterator delegatesIterator = delegates.values().iterator();
+    Iterator<ValidatorDelegateDescriptor> delegatesIterator = delegates.values().iterator();
 
-    if (!delegatesIterator.hasNext())
-    {
-      return null;
-    }
+    if (!delegatesIterator.hasNext())return null;
 
-    ValidatorDelegateDescriptor descriptor = (ValidatorDelegateDescriptor) delegatesIterator.next();
-
-    return descriptor.getId();
+    return delegatesIterator.next().getId();
   }
 
   /**
@@ -128,10 +113,7 @@
   {
     ValidatorDelegateDescriptor descriptor = getDescriptor(targetID, delegateID);
 
-    if (descriptor == null)
-    {
-      return null;
-    }
+    if (descriptor == null)return null;
 
     IValidator delegate = descriptor.getValidator();
 
@@ -147,9 +129,8 @@
    * @return a Map <string, ValidatorDelegateDescriptor>. May be null if the ID
    *         passed in is not a delegating validator.
    */
-  public Map getDelegateDescriptors(String targetID)
-  {
-    return (Map) delegatesByTarget.get(targetID);
+  public Map<String,ValidatorDelegateDescriptor> getDelegateDescriptors(String targetID) {
+    return _delegatesByTarget.get(targetID);
   }
 
   /**
@@ -164,19 +145,9 @@
    */
   public ValidatorDelegateDescriptor getDescriptor(String targetID, String delegateID)
   {
-    Map delegates = (Map) delegatesByTarget.get(targetID);
+    Map<String,ValidatorDelegateDescriptor> delegates = _delegatesByTarget.get(targetID);
 
-    if (delegates == null)
-    {
-      // No delegates registered for this target.
-
-      return null;
-    }
-
-    if (delegateID == null)
-    {
-      return null;
-    }
+    if (delegates == null || delegateID == null)return null;
     
     ValidatorDelegateDescriptor descriptor = (ValidatorDelegateDescriptor) delegates.get(delegateID);
 
@@ -192,7 +163,7 @@
    */
   public boolean hasDelegates(String targetID)
   {
-    Map delegatesByID = (Map) delegatesByTarget.get(targetID);
+    Map<String,ValidatorDelegateDescriptor> delegatesByID = _delegatesByTarget.get(targetID);
 
     boolean hasDelegates = (delegatesByID != null && !delegatesByID.isEmpty());
     return hasDelegates;
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegatesRegistryReader.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegatesRegistryReader.java
index e64f0e6..368f267 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegatesRegistryReader.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegatesRegistryReader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2008 IBM Corporation and others.
  * All rights reserved. This program and 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,12 +12,15 @@
 package org.eclipse.wst.validation.internal.delegates;
 
 import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IContributor;
 import org.eclipse.core.runtime.IExtensionPoint;
 import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 
 /**
- * This class reads the plugin extension registry and registers each delegating
+ * This class reads the plug-in extension registry and registers each delegating
  * validator descriptor with the delegates registry.
  * 
  * @see ValidatorDelegatesRegistry
@@ -83,9 +86,9 @@
 
     if (elementName.equals(DELEGATE_ELEMENT))
     {
-      String delegateID = (String) element.getAttribute(CLASS_ATTRIBUTE);
-      String delegateName = (String) element.getAttribute(NAME_ATTRIBUTE);
-      String targetValidatorID = (String) element.getAttribute(TARGET_ATTRIBUTE);
+      String delegateID = element.getAttribute(CLASS_ATTRIBUTE);
+      String delegateName = element.getAttribute(NAME_ATTRIBUTE);
+      String targetValidatorID = element.getAttribute(TARGET_ATTRIBUTE);
 
       ValidatorDelegateDescriptor descriptor = new ValidatorDelegateDescriptor(delegateID, element, delegateName, targetValidatorID);
 
@@ -103,12 +106,19 @@
 
     if (point != null)
     {
-      IConfigurationElement[] elements = point.getConfigurationElements();
-
-      for (int index = 0; index < elements.length; index++)
-      {
-        readElement(elements[index]);
-      }
-    }
+			IConfigurationElement[] elements = point.getConfigurationElements();
+			for (IConfigurationElement configurationElement : elements) {
+				try {
+					readElement(configurationElement);
+				}
+				catch (Exception e) {
+					// we don't want all the validators to be rendered helpless by some 
+					// rogue contribution, so, we catch any exception that occurs during 
+					// initialization, log it, and continue on.
+					IContributor contributor = configurationElement.getContributor();
+					ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, "Rogue validator delegate from " + contributor);
+				}
+			}
+		}
   }
 }
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
index f32ae59..66809bc 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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,11 +12,8 @@
 
 
 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;
@@ -53,20 +50,12 @@
 		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);
-				}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			if (e.getTargetException() != null) {
+				ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			}
 		}
 	}
 
-}
\ 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
index 7fcd3f4..df5a832 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -13,13 +13,10 @@
 
 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;
@@ -111,19 +108,11 @@
 		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);
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			if (e.getTargetException() != null)
+				ValidationPlugin.getPlugin().handleException(e.getTargetException());
 
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, exc);
-				}
-			}
 		}
 		setDelta(delta);
 		setContext(context);
@@ -145,19 +134,11 @@
 		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);
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			if (e.getTargetException() != null)
+				ValidationPlugin.getPlugin().handleException(e.getTargetException());
 
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, exc);
-				}
-			}
 		}
 		setDelta(delta);
 	}
@@ -179,19 +160,11 @@
 		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);
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			if (e.getTargetException() != null)
+				ValidationPlugin.getPlugin().handleException(e.getTargetException());
 
-				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));
@@ -215,22 +188,14 @@
 		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);
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			if (e.getTargetException() != null)
+				ValidationPlugin.getPlugin().handleException(e.getTargetException());
 
-				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
index 9566a7b..9b8afb3 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * 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
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -15,6 +15,7 @@
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.wst.validation.internal.RegistryConstants;
+import org.eclipse.wst.validation.internal.ValidatorMetaData;
 
 
 /**
@@ -116,7 +117,7 @@
 	 * in the background validation thread, if async is false, it would run in the main thread. 
 	 * All validators implementing IValidator interface will run in in the main thread regardless of this flag.
 	 */
-	protected EnabledValidatorsOperation(IProject project, Set enabledValidators, boolean async) {
+	protected EnabledValidatorsOperation(IProject project, Set<ValidatorMetaData> 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
 	}
@@ -130,7 +131,8 @@
 	 * in the background validation thread, if async is false, it would run in the main thread. 
 	 * All validators implementing IValidator interface will run in in the main thread regardless of this flag.
 	 */
-	protected EnabledValidatorsOperation(IProject project,IWorkbenchContext aWorkbenchContext, Set enabledValidators, boolean async) {
+	protected EnabledValidatorsOperation(IProject project,IWorkbenchContext aWorkbenchContext, 
+		Set<ValidatorMetaData> 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
 	}
@@ -144,7 +146,9 @@
 	 * in the background validation thread, if async is false, it would run in the main thread. 
 	 * All validators implementing IValidator interface will run in in the main thread regardless of this flag.
 	 */
-	protected EnabledValidatorsOperation(IProject project, Set enabledValidators, int ruleGroup, boolean force, boolean async) {
+	protected EnabledValidatorsOperation(IProject project, Set<ValidatorMetaData> enabledValidators, 
+		int ruleGroup, boolean force, boolean async) {
+		
 		super(project, force, ruleGroup, async);
 		setEnabledValidators(enabledValidators);
 	}
@@ -158,8 +162,9 @@
 	 * in the background validation thread, if async is false, it would run in the main thread. 
 	 * All validators implementing IValidator interface will run in in the main thread regardless of this flag.
 	 */
-	protected EnabledValidatorsOperation(IProject project, IWorkbenchContext aWorkbenchContext, Set enabledValidators, int ruleGroup, boolean force, boolean async) {
+	protected EnabledValidatorsOperation(IProject project, IWorkbenchContext aWorkbenchContext, 
+		Set<ValidatorMetaData> 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/IRuleGroup.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/IRuleGroup.java
index dabcee8..1c2ad11 100644
--- 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
@@ -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
  *******************************************************************************/
@@ -38,4 +38,4 @@
 	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
index b3c8ec0..2ee4b60 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 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
  *******************************************************************************/
@@ -15,9 +15,6 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.wst.validation.internal.provisional.core.IProjectValidationContext;
 
-
-
-
 /**
  * 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
@@ -30,7 +27,7 @@
 	 * 
 	 * If the cleanup is a long-running operation, subtask messages should be sent to the IReporter.
 	 */
-	public void cleanup(WorkbenchReporter reporter);
+	void cleanup(WorkbenchReporter reporter);
 
 	/**
 	 * When the IProject is closing, perform any cleanup that needs to be done. When this method is
@@ -38,7 +35,7 @@
 	 * resources. If you do not allocate resources in your helper, then this method should be a
 	 * no-op.
 	 */
-	public void closing();
+	void closing();
 
 	/**
 	 * When the IProject is being deleted, perform any cleanup that needs to be done. When this
@@ -46,7 +43,7 @@
 	 * those resources. If you do not allocate resources in your helper, then this method should be
 	 * a no-op.
 	 */
-	public void deleting();
+	void deleting();
 
 	/**
 	 * Given an Object, if the object has a corresponding IFile in the workbench, return the IFile.
@@ -68,7 +65,7 @@
 	 * 
 	 * @deprecated Implement getResource(Object) instead.
 	 */
-	public IFile getFile(Object object);
+	IFile getFile(Object object);
 
 	/**
 	 * Given an Object, if the object has a corresponding IResource in the workbench, return the
@@ -88,7 +85,7 @@
 	 * If this method returns null, then the WorkbenchReporter will add the message to the IProject
 	 * instead of an IResource.
 	 */
-	public IResource getResource(Object object);
+	IResource getResource(Object object);
 
 	/**
 	 * Given an IMessage's target object, return the line number, of the IFile, which the target
@@ -99,18 +96,18 @@
 	 * 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);
+	String getLocation(Object object);
 
 	/**
 	 * Return the name of the resource, without the project-specific information in front.
-	 * 
+	 * <p>
 	 * 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.
-	 * 
+	 * </p><p>
 	 * 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
@@ -119,20 +116,21 @@
 	 * 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".
-	 * 
+	 * </p><p>
 	 * 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.
+	 * </p>
 	 */
-	public String getPortableName(IResource resource);
+	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();
+	IProject getProject();
 
 	/**
 	 * When an IValidator associates a target object with an IMessage, the WorkbenchReporter
@@ -148,7 +146,7 @@
 	 * identify a particular object must be returned. The id needs to be unique only within one
 	 * particular IValidator.
 	 */
-	public String getTargetObjectName(Object object);
+	String getTargetObjectName(Object object);
 
 	/**
 	 * Whether full or incremental validation is running, this method will be called, by the
@@ -156,13 +154,13 @@
 	 * IValidationContext can receive notification that one of the resources, which validation will run on, is
 	 * being filtered in.
 	 */
-	public void registerResource(IResource resource);
+	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);
+	void setProject(IProject project);
 
 	/**
 	 * Notifies this IWorkbenchContext that the Validation Framework is shutting down. There will be
@@ -172,5 +170,5 @@
 	 * 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
+	void shutdown();
+}
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
index 2472f76..9b03057 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 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
  *******************************************************************************/
@@ -15,14 +15,13 @@
 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;
+	private String _message;
 
 	public LocalizedMessage(int severity, String messageText) {
 		this(severity, messageText, null);
@@ -61,4 +60,4 @@
 	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/ManualIncrementalValidatorsOperation.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ManualIncrementalValidatorsOperation.java
index e837ccb..59d5f0f 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ManualIncrementalValidatorsOperation.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ManualIncrementalValidatorsOperation.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * 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
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -28,4 +28,4 @@
 		super( project, changedResources );
 		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/ManualValidatorsOperation.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ManualValidatorsOperation.java
index 35b85d0..03a0bf2 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ManualValidatorsOperation.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ManualValidatorsOperation.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * 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
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -20,11 +20,13 @@
  * 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.
- * 
+ * <p>
  * Instances of this operation run every enabled validator (both full and incremental) on the
  * project.
- * 
+ * </p>
+ * <p>
  * This operation is not intended to be subclassed outside of the validation framework.
+ * </p>
  */
 public class ManualValidatorsOperation extends ValidatorSubsetOperation {
 
@@ -36,4 +38,4 @@
 		super(project, shouldForce(changedResources), RegistryConstants.ATT_RULE_GROUP_DEFAULT, true);
 		setEnabledValidators(ValidatorManager.getManager().getManualEnabledValidators(project));
 	}	
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/MessageInfo.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/MessageInfo.java
index 96d1771..16b93c0 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/MessageInfo.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/MessageInfo.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -23,20 +23,12 @@
 	private String		targetObjectName;	
 	private String		markerId;	
 	private IMessage	msg;
-
-				
 	
-	public MessageInfo(){
-		
+	public MessageInfo(){		
 	}
 	
-	public MessageInfo(String messageOwnerId,
-						IResource resource,
-						String location, 
-						String text,
-						String targetObjectName,
-						String markerId,
-						IMessage msg){
+	public MessageInfo(String messageOwnerId, IResource resource, String location, 
+		String text, String targetObjectName, String markerId, IMessage msg){
 		
 		this.messageOwnerId = messageOwnerId;	
 		this.resource = resource;
@@ -103,4 +95,10 @@
 		this.text = text;
 	}
 	
+	@Override
+	public String toString() {
+		if (text != null)return "MessageInfo: " + text; //$NON-NLS-1$
+		return super.toString();
+	}
+	
 }
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
index c11ec1d..99d359b 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -80,45 +80,46 @@
 	 * OneValidatorOperation constructor comment.
 	 * 
 	 * @param project
-	 *            org.eclipse.core.resources.IProject
+	 *            The project to be validated. It must exist and be open.
 	 * @param validatorId
-	 *            The plugin id of the validator which you wish to run.
+	 *            The plug-in 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.
+	 *            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.
+	 * @param async
+	 *            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.
 	 * 
-	 * IllegalArgumentException will be thrown if the named validator is not configured on the
-	 * project.
+	 * 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.
+			// No validator, with that plug-in 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.
+			// No validator, with that plug-in 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();
+		Set<ValidatorMetaData> enabled = new HashSet<ValidatorMetaData>();
 		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
index a2e1fcc..c15609c 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -18,12 +18,18 @@
 
 import java.util.List;
 
+import org.eclipse.core.resources.IFile;
+
 /**
  * @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
+	
+	/**
+	 * Answer the referenced files.
+	 * 
+	 * @param inputFiles
+	 * @return a list of IFile's.
+	 */
+	public List<IFile> getReferencedFile(List inputFiles);
+}
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
index 1dbe0bd..99d66e1 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -27,25 +27,18 @@
 
 /**
  * @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
+	 * 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;
+	public static List<IFile> getAllProjectFiles(IProject project) {
+		List<IFile> result = new ArrayList<IFile>();
+		if (project == null)return result;
+		
 		try {
 			result = collectFiles(project.members(), result);
 		} catch (CoreException e) {
@@ -54,16 +47,12 @@
 		return result;
 	}
 
-	private static List collectFiles(IResource[] members, List result) throws CoreException {
+	private static List<IFile> collectFiles(IResource[] members, List<IFile> 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);
-			}
+		for (IResource res : members) {
+			if (res instanceof IFolder)collectFiles(((IFolder) res).members(), result);
+			else if (res instanceof IFile)result.add((IFile)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
index fe47c03..8e942ea 100644
--- 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
@@ -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
  *******************************************************************************/
@@ -17,4 +17,4 @@
  */
 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/ValidationBuilder.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationBuilder.java
index 48e0b56..5bb1c28 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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,71 +14,81 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 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.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.core.runtime.OperationCanceledException;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.wst.validation.ValidationFramework;
 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.Tracing;
+import org.eclipse.wst.validation.internal.ValBuilderJob;
+import org.eclipse.wst.validation.internal.ValManager;
 import org.eclipse.wst.validation.internal.ValidatorMetaData;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-import org.eclipse.wst.validation.internal.provisional.core.IValidator;
 
 /**
  * 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
+ * <p>
+ * This builder is configured on J2EE IProjects automatically, and can be added to other types of
+ * projects through the Properties page. It launches validation on the project if the project has
  * build validation enabled.
+ * </p>
+ * <p>
+ * This launches a Job for the new V2 validators and also a Job for each of the Job based V1
+ * validators. If there are any "in-line" V1 validations they are done as part of this builder.
+ * Because of all the jobs that this builder spawns, the build will usually be finished long before
+ * all the validation has finished.
+ * </p>
  */
 public class ValidationBuilder extends IncrementalProjectBuilder {
-	public static final int NO_DELTA_CHANGE = -1; // Since IResourceConstants
-	protected List referencedProjects;
+	/*
+	 * GRK - This class serves as a main entry point into the framework. There is one instance of this class for every
+	 * project that has a validation builder configured for it. Typically if you had ten projects in your workspace you would have
+	 * ten of these objects. They are created early in the life cycle of the workbench, and then are reused. 
+	 * 
+	 * My observation was that they are run serially by the same thread.
+	 */
+	public static final int NO_DELTA_CHANGE = -1;
+	protected List<IProject> referencedProjects;
 	protected IWorkbenchContext workbenchContext = null;
-
-	// doesn't have a "no delta"
-	// flag, let this constant be
-	// the flag.
+	
+	/** 
+	 * All the jobs that the validation framework spawns will belong to this family. 
+	 */
+	public static final Object FAMILY_VALIDATION_JOB = new Object();
+	
 	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();
+	private IProject[] getAllReferencedProjects(IProject project, Set<IProject> visitedProjects) {
+		if (visitedProjects == null)visitedProjects = new HashSet<IProject>();
+		else if (visitedProjects.contains(project))return getReferencedProjects();
+		else visitedProjects.add(project);
+		
+		if (referencedProjects == null)referencedProjects = new ArrayList<IProject>();
 		try {
 			if (project.isAccessible()) {
 				IProject[] refProjArray = project.getReferencedProjects();
 				collectReferecedProject(refProjArray);
-				for (int i = 0; i < refProjArray.length; i++) {
-					IProject refProject = refProjArray[i];
+				for (IProject refProject : refProjArray) {
 					getAllReferencedProjects(refProject, visitedProjects);
 				}
 			}
 			return getReferencedProjects();
-		} catch (CoreException core) {
-			return null;
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
+		return null;
 	}
 	
 	public IWorkbenchContext getWorkbenchContext() {
@@ -89,28 +99,23 @@
 		return workbenchContext;
 	}
 
-
 	/**
-	 * @param referencedProjects2
+	 * Add the projects from refProjArray to the list of referenced projects (if they are not
+	 * already in the list).
 	 * @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);
+		for (IProject project : refProjArray) {
+			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;
+		Tracing.log("ValidationBuilder-02 clean ", currentProject); //$NON-NLS-1$
+
+		newClean(monitor);
+		if (currentProject == null || !currentProject.isAccessible())return;
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(currentProject);
 			ValidatorMetaData[] vmds = prjp.getValidators();
@@ -121,64 +126,44 @@
 				// 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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 		}
 
 	}
 
-	/**
-	 * @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;
+		return referencedProjects.toArray(refProjArray);
 	}
-
+	
+	@SuppressWarnings("unchecked")
 	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();
+		Tracing.log("ValidationBuilder-01 build ", kind, project);  //$NON-NLS-1$
+		if (Tracing.isLogging(1)){
+			Tracing.logResourceDeltas(getDelta(project), 50);
+		}
+		
+		// GRK I wonder why this builder needs to know about all the other referenced projects?
+		// won't they have builders of their own.
 		IProject[] referenced = getAllReferencedProjects(project, null);
+		if (ValidationFramework.getDefault().isSuspended(project) || 
+			ValManager.getDefault().isDisabled(project))return referenced;
+
 		try {
-			if (ValidatorManager.getManager().isSuspended(project)) {
-				// Do not perform validation on this project
-				executionMap |= 0x1;
-				return referenced;
-			}
+			newBuild(kind, monitor);
+
 			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.)
+			// (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.
+			// kind==FULL_BUILD and a null delta, and validation should run in that case.
 			if (!doFullBuild && delta == null) {
 				if (isReferencedProjectInDelta(referenced)) {
 					performFullBuildForReferencedProjectChanged(monitor, prjp);
@@ -186,12 +171,9 @@
 					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
+					// 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;
 			}
@@ -199,113 +181,28 @@
 				cleanupReferencedProjectsMarkers(prjp, referenced);
 				performFullBuild(monitor, prjp);
 			} else {
-//				if (doAutoBuild && !prjp.isAutoValidate()) {
-//					executionMap |= 0x8;
-//					return referenced;
-//				}
 				if (delta.getAffectedChildren().length == 0) {
 					if (isReferencedProjectInDelta(referenced)){
 						cleanupReferencedProjectsMarkers(prjp, referenced);
 						performFullBuildForReferencedProjectChanged(monitor, prjp);
 					}
-					else
-						executionMap |= 0x10;
 					return referenced;
 				}
 				EnabledIncrementalValidatorsOperation operation = new EnabledIncrementalValidatorsOperation(project, delta, true);
 				operation.run(monitor);
 			}
 			return referenced;
-		} catch (InvocationTargetException exc) {
-			logInvocationTargetException(logger, exc);
-			executionMap |= 0x20;
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return referenced;
-		} catch (Throwable exc) {
-			logBuildError(logger, exc);
-			executionMap |= 0x40;
+		} catch (Exception e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			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, true);
-			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)) {
-			if( ! (exc instanceof OperationCanceledException) ){
-				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);
-	}
 	
 	private void cleanupReferencedProjectsMarkers(final ProjectConfiguration prjp, IProject[] referenced){
 		//When a project references one or more project, performing a clean build on referenced
@@ -317,38 +214,90 @@
 		//causes marker to be generated for the util project, but the markers for util project are not
 		//cleaned up.   
 		
-		if( referenced == null || referenced.length == 0 ){
-			return;
-		}
+		if( referenced == null || referenced.length == 0 )return;
 		
 		try{
 			ValidatorMetaData[] enabledValidators = prjp.getEnabledFullBuildValidators(true, false);
  
-			HashSet  set = new HashSet();
+			Set<ValidatorMetaData>  set = new HashSet<ValidatorMetaData>();
 			set.addAll( Arrays.asList( enabledValidators ) );
-			for (int i = 0; i < referenced.length; i++) {
-				IProject p = referenced[i];
+			for (IProject p : referenced) {
+				if (!p.isAccessible())continue;
 				ProjectConfiguration refProjectCfg = ConfigurationManager.getManager().getProjectConfiguration(p);
 		
 				ValidatorMetaData[] refEnabledValidators = refProjectCfg.getEnabledFullBuildValidators(true, false);
-				for( int j=0; j< refEnabledValidators.length; j++ ){
-					//remove from the set the validators which are also in child
-					set.remove(refEnabledValidators[j]);
-				}
-				Iterator it = set.iterator();
-				while( it.hasNext() ){
-					ValidatorMetaData validatorMetaData = (ValidatorMetaData)it.next();
-					WorkbenchReporter.removeAllMessages(p, validatorMetaData.getValidator());
-				}
-		
+				
+				//remove from the set the validators which are also in child
+				for(ValidatorMetaData vmd : refEnabledValidators)set.remove(vmd);
+				
+				for(ValidatorMetaData vmd : set)WorkbenchReporter.removeAllMessages(p, vmd.getValidator());		
 			}	
-		}catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			logInvocationTargetException(logger, exc);
-		} 
-		catch (Throwable exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			logBuildError(logger, exc);
+		}catch (Exception exc) {
+			ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, exc.toString());
+	}
+}
+
+	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;
+	}
+
+	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<ValidatorMetaData> enabledValidatorsSet = InternalValidatorManager.wrapInSet(enabledValidators);
+			EnabledValidatorsOperation op = new EnabledValidatorsOperation(getProject(), enabledValidatorsSet, true);
+			op.run(monitor);
 		}
 	}
-}
\ No newline at end of file
+	
+	/**
+	 * Run the new validation builder. This is a transition method, while we continue to have
+	 * the old and new validation builders.
+	 * 
+	 * @param kind the kind of build
+	 * 
+	 * @see IncrementalProjectBuilder#AUTO_BUILD
+	 * @see IncrementalProjectBuilder#CLEAN_BUILD
+	 * @see IncrementalProjectBuilder#FULL_BUILD
+	 * @see IncrementalProjectBuilder#INCREMENTAL_BUILD
+	 */
+	private void newBuild(int kind, IProgressMonitor monitor)	throws CoreException {
+
+		IResourceDelta delta = null;
+		IProject project = getProject();
+		
+		switch (kind){
+			case AUTO_BUILD:
+			case INCREMENTAL_BUILD:
+				delta = getDelta(project);
+				break;
+		}
+		
+		ValBuilderJob.validateProject(project, delta, kind);		
+	}
+	
+	
+	/**
+	 * Run the new clean method. This is a transition method, while we continue to have
+	 * the old and new validation builders.
+	 */
+	private void newClean(IProgressMonitor monitor) throws CoreException {
+		ValManager.getDefault().clean(getProject(), monitor);
+	}	
+	
+}
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
index 1e37524..260fa72 100644
--- 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
@@ -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
  *******************************************************************************/
@@ -22,4 +22,4 @@
  */
 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
index a7d5a21..045be17 100644
--- 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
@@ -1,25 +1,24 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Queue;
 import java.util.Set;
-import java.util.logging.Level;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
@@ -32,7 +31,6 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.core.runtime.QualifiedName;
 import org.eclipse.core.runtime.Status;
@@ -40,9 +38,8 @@
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.core.runtime.jobs.JobChangeAdapter;
-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.ValidationFramework;
 import org.eclipse.wst.validation.internal.FilterUtil;
 import org.eclipse.wst.validation.internal.IProjectValidationHelper;
 import org.eclipse.wst.validation.internal.InternalValidatorManager;
@@ -51,7 +48,8 @@
 import org.eclipse.wst.validation.internal.ResourceConstants;
 import org.eclipse.wst.validation.internal.ResourceHandler;
 import org.eclipse.wst.validation.internal.TaskListUtility;
-import org.eclipse.wst.validation.internal.TimeEntry;
+import org.eclipse.wst.validation.internal.Tracing;
+import org.eclipse.wst.validation.internal.ValManager;
 import org.eclipse.wst.validation.internal.ValidationRegistryReader;
 import org.eclipse.wst.validation.internal.ValidatorMetaData;
 import org.eclipse.wst.validation.internal.core.IFileDelta;
@@ -63,44 +61,86 @@
 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.IValidatorJob;
-import org.eclipse.wst.validation.internal.provisional.core.MessageLimitException;
 
 /**
- * Implemented Validators methods must not be called directly by anyone other than this class, since
+ * Validators 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.
- * 
+ * <p>
  * This operation is not intended to be subclassed outside of the validation framework.
+ * </p>
  */
 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.
+	// Since IResourceConstants don't have a "no delta" flag, let this constant be the flag.
+	public static final int NO_DELTA_CHANGE = -1; 
 	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 = true; // For the deprecated
-	// constructors, by
-	// default the
-	// operation will not
-	// fork.
-	protected static final boolean DEFAULT_FORCE = true; // By default, run the
-	protected static final String VALIDATIONLAUNCHERMSG = "Waiting for build"; // By default, run the
-	// operation whether
-	// or not it needs to
 	
-	class ValidationLauncherJob extends Job {
-	    private Job validationJob;
-	    public ValidationLauncherJob(Job validationJob) {
-	            super(ResourceHandler.getExternalizedMessage("VBF_VALIDATION_JOB_MSG"));
-	            
-	            setSystem(true);
-	            setRule(ResourcesPlugin.getWorkspace().getRoot());
-	            this.validationJob= validationJob;
+	// For the depreciated constructors, by default the operation will not fork. 
+	protected static final boolean DEFAULT_ASYNC = true;
+	
+	protected static final boolean DEFAULT_FORCE = true;
+	
+	private static ValidationLauncherJob launcherJob = new ValidationLauncherJob();
+	
+	private static final int jobsPerProcessor = 3;
+	
+	private final static class ValidationLauncherJob extends Job {
+	    private Queue<Job> _validationJobs = new LinkedList<Job>();
+	    
+	    public ValidationLauncherJob() {
+            super(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_VALIDATION_JOB_MSG));
+            setSystem(true);
+            setRule(ResourcesPlugin.getWorkspace().getRoot());
 	    }
+	    
 	    protected IStatus run(IProgressMonitor monitor) {
-	    		validationJob.schedule();
-	            return Status.OK_STATUS;
+			int processors = Runtime.getRuntime().availableProcessors();
+			int totalInitialJobs = processors * jobsPerProcessor;
+    		synchronized (_validationJobs) {
+    			// never schedule more than 3 validation jobs per processor at a time
+    			for (int i=0; i< totalInitialJobs; i++) {
+    				Job validationJob = _validationJobs.poll();
+    				if (validationJob == null) break;
+    				addJobChangeAdapter(validationJob);
+    				validationJob.schedule();
+    			}
+    		}
+            return Status.OK_STATUS;
+	    }
+	    
+	    private void addJobChangeAdapter(Job job) {
+	    	job.addJobChangeListener(new JobChangeAdapter(){
+	    		// when done, see if there is another validation job to schedule
+				public void done(IJobChangeEvent event) {
+					synchronized (_validationJobs) {
+						Job validationJob = _validationJobs.poll();
+						if (validationJob != null) {
+							addJobChangeAdapter(validationJob);
+							validationJob.schedule();
+						}
+					}
+				}
+			});
+	    }
+	    
+	    @Override
+	    public boolean belongsTo(Object family) {
+			if (family == ResourcesPlugin.FAMILY_MANUAL_BUILD)return true;
+			if (family == ValidationBuilder.FAMILY_VALIDATION_JOB){
+				return true;
+			}
+			return super.belongsTo(family);
+	    }
+	    
+	    public void addValidationJob(Job validationJob) {
+	    	synchronized (_validationJobs) {
+	    		_validationJobs.add(validationJob);
+	    		// schedule the job if we were empty
+	    		if (_validationJobs.size() == 1) {
+	    			this.schedule();
+	    		}
+	    	}
 	    }
 	}
 	
@@ -108,38 +148,29 @@
 	 * @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 IProject 		_project; // project to be validated
+	private int 			_ruleGroup = RegistryConstants.ATT_RULE_GROUP_DEFAULT;
 	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;
+	private Map<ValidatorMetaData, Set<IFileDelta>> _fileDeltas; // To reduce object creation,
+	private IResourceDelta _delta;
+	
 	// 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
+	private Set<ValidatorMetaData> _enabledValidators;
+	
+	private boolean _force = DEFAULT_FORCE; // force this operation to run even if it doesn't need to?
+	private boolean _isFullValidate; 	// Run a full validation or an incremental? (true = full)
+	private Boolean _isAutoBuild; 		// Is the global auto-build preference enabled?
+	private Set<ValidatorMetaData> _launchedValidators;
 	
 	protected IWorkbenchContext context;
 
-	// are enabled and were launched
-	// (i.e., that have input to
-	// validate). For internal
+	// 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.
+	// it's needed for the automatic tests.
 	/**
 	 * This method is used for FINEST logging, to report exactly what deltas were about to be
 	 * validated.
@@ -157,13 +188,12 @@
 			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});
+		return MessageFormat.format(DELTA_AS_STRING, new Object[]{String.valueOf(numArgs), args});
 	}
 
 	protected static void checkCanceled(WorkbenchReporter reporter) throws OperationCanceledException {
-		if (reporter == null) {
-			return;
-		} else if (reporter.getProgressMonitor().isCanceled()) {
+		if (reporter == null)return;
+		else if (reporter.getProgressMonitor().isCanceled()) {
 			throw new OperationCanceledException(""); //$NON-NLS-1$
 		}
 	}
@@ -216,7 +246,7 @@
 		_ruleGroup = ruleGroup;
 		_fork = fork;
 		_force = force;
-		_enabledValidators = new HashSet();
+		_enabledValidators = new HashSet<ValidatorMetaData>();
 	}
 	
 	/**
@@ -230,7 +260,7 @@
 		_ruleGroup = ruleGroup;
 		_fork = fork;
 		_force = force;
-		_enabledValidators = new HashSet();
+		_enabledValidators = new HashSet<ValidatorMetaData>();
 		context = aContext;
 	}
 
@@ -238,26 +268,14 @@
 	 * @deprecated Will be removed in Milestone 3.
 	 */
 	protected void terminateCleanup(WorkbenchReporter reporter) {
-		Set enabledValidators = getEnabledValidators();
-		Iterator iterator = enabledValidators.iterator();
-		ValidatorMetaData vmd = null;
-
-		while (iterator.hasNext()) {
-			vmd = (ValidatorMetaData) iterator.next();
+		for (ValidatorMetaData vmd : getEnabledValidators()) {
 			reporter.displaySubtask(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_VALIDATOR_CLEANUP, new String[]{vmd.getValidatorDisplayName()}));
 			try {
 				reporter.removeAllMessages(vmd.getValidator());
-			} catch (InstantiationException exc) {
+			} catch (InstantiationException e) {
 				// 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);
-				}
+				ValidationPlugin.getPlugin().handleException(e);
 				continue;
 			}
 			addCancelTask(vmd);
@@ -476,19 +494,8 @@
 	 * 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);
+		// Validation is not necessary if there are no files for the validator to validate.
+		return isFullValidate() || (delta.length > 0);
 	}
 
 	/**
@@ -496,35 +503,27 @@
 	 * operation to do.
 	 */
 	public boolean isNecessary(IProgressMonitor monitor) throws CoreException, OperationCanceledException {
-		Set enabledValidators = getEnabledValidators();
+		Set<ValidatorMetaData> 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;
-			}
+		if (isFullValidate())return true;
+		
+		for (ValidatorMetaData vmd : enabledValidators) {
+			if (isValidationNecessary(vmd, getFileDeltas(monitor, vmd)))return true;
 		}
 		return false;
 	}
 
-	private Map getFileDeltas(IProgressMonitor monitor) throws CoreException {
-		if (_fileDeltas == null) {
-			loadFileDeltas(monitor);
-		}
+	private Map<ValidatorMetaData, Set<IFileDelta>> 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];
-		}
+		Set<IFileDelta> result = getFileDeltas(monitor).get(vmd);
+		if (result == null)return new IFileDelta[0];
+		
 		IFileDelta[] temp = new IFileDelta[result.size()];
 		result.toArray(temp);
 		return temp;
@@ -550,7 +549,7 @@
 		}
 	}
 
-	protected void setFileDeltas(Map deltas) {
+	protected void setFileDeltas(Map<ValidatorMetaData, Set<IFileDelta>> deltas) {
 		_fileDeltas = deltas;
 	}
 
@@ -570,7 +569,7 @@
 	 * 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() {
+	public Set<ValidatorMetaData> getEnabledValidators() {
 		return _enabledValidators;
 	}
 
@@ -578,21 +577,19 @@
 	 * This is an internal method, subject to change without notice. It is provided only for the
 	 * automated validation framework tests.
 	 */
-	public Set getLaunchedValidators() {
+	public Set<ValidatorMetaData> getLaunchedValidators() {
 		if (_launchedValidators == null) {
-			_launchedValidators = new HashSet();
+			_launchedValidators = new HashSet<ValidatorMetaData>();
 		}
 		return _launchedValidators;
 	}
 
-	protected void setEnabledValidators(Set evmds) {
+	protected void setEnabledValidators(Set<ValidatorMetaData> 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();
+		for (ValidatorMetaData vmd : evmds) {
 			if (ValidationRegistryReader.getReader().isConfiguredOnProject(vmd, getProject())) {
 				_enabledValidators.add(vmd);
 			}
@@ -608,10 +605,10 @@
 
 	protected int getUnitsOfWork() {
 		/*
-		 * // Let one unit of work equal one resource. number of enabled validators // i.e., each
+		 * 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.
+		 * 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,
@@ -636,17 +633,13 @@
 	 * 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;
-			}
+			// In order to check whether or not the monitor has been canceled, the monitor must not be null.
+			if (progressMonitor == null)return;
+			IProject project = getProject();
+			if (ValidationFramework.getDefault().isSuspended(project))return;
+			if (ValManager.getDefault().isDisabled(project))return;
+			
 			if (!areValidatorsEnabled()) {
 				// save some processing time...
 				return;
@@ -655,35 +648,28 @@
 			final WorkbenchReporter reporter = new WorkbenchReporter(getProject(), progressMonitor);
 
 			try {
-				// Periodically check if the user has cancelled the operation
+				// Periodically check if the user has canceled 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);
-				}
+			} catch (CoreException e) {
+				ValidationPlugin.getPlugin().handleException(e);
 			}
 		} 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);
-			}
+			//TODO GRK determine if timing info should be added here
+//			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) {
@@ -699,14 +685,11 @@
 		}
 	}
 
-	/**
-	 * @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();
+		List<IResource> inputFiles = new ArrayList<IResource>();
+		
+		List<IFile> referencingFiles = new ArrayList<IFile>();
 		if (resourceDelta != null && resourceDelta.length > 0) {
 			for (int i = 0; i < resourceDelta.length; i++) {
 				IResource resource = resourceDelta[i].getResource();
@@ -715,88 +698,66 @@
 				} else if (resource instanceof IFile)
 					inputFiles.add(resource);
 			}
-			List rFilesToValidate = refFileValidator.getReferencedFile(inputFiles);
+			List<IFile> 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);
+				ValidationPlugin.getPlugin().handleException(e);
 			}
 		}
 	}
 
-	/**
-	 * @param delta
-	 * @return
-	 */
-	private void getFileResourceDeltaInFolder(IResourceDelta delta, List inputFiles) {
+	private void getFileResourceDeltaInFolder(IResourceDelta delta, List<IResource> 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);
+			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);
+		Set<ValidatorMetaData> set = ValidationRegistryReader.getReader().getValidatorMetaData(_project);
+		for (ValidatorMetaData data : set) {
+			List<String> filters = data.getNameFilters();
+			List<IFile> files = getAllFilesForFilter(filters);
 			if (!files.isEmpty()) {
-				List fileForValidation = refFileValidator.getReferencedFile(files);
+				List<IFile> fileForValidation = refFileValidator.getReferencedFile(files);
 				try {
 					validateReferencingFiles(reporter, fileForValidation);
 				} catch (Exception e) {
-					Logger.getLogger().log(e);
+					ValidationPlugin.getPlugin().handleException(e);
 				}
 			}
 		}
 	}
 
-	/**
-	 * @param filters
-	 * @return
-	 */
-	private List getAllFilesForFilter(List filters) {
+	private List<IFile> getAllFilesForFilter(List<String> 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);
+			List<IFile> allProjectFiles = ReferencialFileValidatorHelper.getAllProjectFiles(_project);
+			List<IFile> filterFiles = new ArrayList<IFile>();
+			for (String fileName : filters) {
+				if (fileName == null)continue;
+				
+				for (IFile projectFile : allProjectFiles) {
 					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);
+						if (ext != null && ext.equals(extName))filterFiles.add(projectFile);
+					} else if (fileName.equals(projectFile.getName()))filterFiles.add(projectFile);
 				}
-
 			}
 			return filterFiles;
 		}
-		return Collections.EMPTY_LIST;
+		return new LinkedList<IFile>();
 	}
 
-	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);
+	private void validateReferencingFiles(IReporter reporter, List<IFile> referencingFiles) throws Exception {
+		Set<IFile> validatedFiles = new HashSet<IFile>();
+		for (IFile refFile : referencingFiles) {
 			if (!validatedFiles.contains(refFile)) {
 				IResource resource = refFile.getParent();
 				IProject project = null;
@@ -805,13 +766,10 @@
 				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();
+					Set<ValidatorMetaData> set = ValidationRegistryReader.getReader().getValidatorMetaData(project);
+					for (ValidatorMetaData data : set) {
 						if (data.isApplicableTo(refFile)) {
-							IValidator validator = (IValidator)data.getValidator();
+							IValidator validator = data.getValidator();
 							validator.validate(data.getHelper(project),reporter);
 							validatedFiles.add(refFile);
 						}
@@ -838,83 +796,60 @@
 	 * thread, and the not-thread-safe validators in this thread.
 	 */
 	protected void validate(WorkbenchReporter reporter) throws OperationCanceledException {
-		if (reporter == null) {
-			return;
-		}
+		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();
+		Iterator<ValidatorMetaData> iterator = null;
 		IFileDelta[] delta = null;
 		
-		HashSet jobValidators = new HashSet();
-		HashSet validators = new HashSet();
-		
-		
-		iterator = getEnabledValidators().iterator();
-		
-			while( iterator.hasNext() ){
-				vmd = (ValidatorMetaData) iterator.next();
-				IValidator valInstance = null;
-				try {
-					valInstance = vmd.getValidator();
-				} catch (InstantiationException e1) {
-					if(!ValidatorManager.getManager().getProblemValidators().contains(vmd)) {
-						ValidatorManager.getManager().getProblemValidators().add(vmd);
-						System.out.println(e1.getMessage());
-					}
-				}
+		Set<ValidatorMetaData> jobValidators = new HashSet<ValidatorMetaData>();
+		Set<ValidatorMetaData> validators = new HashSet<ValidatorMetaData>();
 				
-					if( isFork() && (valInstance != null) && valInstance instanceof IValidatorJob ){
-						try {
-							delta = getFileDeltas(reporter.getProgressMonitor(), vmd);
-						} catch (CoreException e) {
-							e.printStackTrace();
-						}
-						boolean willRun = (isForce() || isValidationNecessary(vmd, delta));
-						if( willRun ){
-							jobValidators.add( vmd );
-						}
-					}else if (valInstance != null){
-						validators.add( vmd );
+		for(ValidatorMetaData vmd : getEnabledValidators()){
+			IValidator valInstance = null;
+			try {
+				valInstance = vmd.getValidator();
+			} 
+			catch (InstantiationException e1) {
+				if(!ValidatorManager.getManager().getProblemValidators().contains(vmd)) {
+					ValidatorManager.getManager().getProblemValidators().add(vmd);
+					System.out.println(e1.getMessage());
 				}
 			}
-			if( jobValidators.size() > 0 ){
-				launchJobs( jobValidators, reporter );
-			}
-		
-		
-		try {
-			//iterator = getEnabledValidators().iterator();
-			iterator = validators.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();
+			if( isFork() && (valInstance != null) && valInstance instanceof IValidatorJob ){
+				try {
+					delta = getFileDeltas(reporter.getProgressMonitor(), vmd);
+				} catch (CoreException e) {
+					e.printStackTrace();
+				}
+				boolean willRun = (isForce() || isValidationNecessary(vmd, delta));
+				if( willRun )jobValidators.add( vmd );
+			}
+			else if (valInstance != null){
+				validators.add( vmd );
+			}
+		}
+		if( jobValidators.size() > 0 ){
+			launchJobs( jobValidators, reporter );
+		}
+				
+		ValidatorMetaData currentVmd = null;
+		try {
+			for (ValidatorMetaData vmd : validators) {
+				currentVmd = vmd;
 				// Is validation about to be run on this validator?
-				// Validation will run either if this operation forces
-				// regardless
+				// 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
+				// the plug-in
 				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);
+					if (Tracing.isTraceV1()) {
 						StringBuffer buffer = new StringBuffer();
-						buffer.append("will run? "); //$NON-NLS-1$
+						buffer.append("ValidationOperation-01: will run? "); //$NON-NLS-1$
 						buffer.append(willRun);
 						buffer.append("  "); //$NON-NLS-1$
 						buffer.append("is force? "); //$NON-NLS-1$
@@ -924,8 +859,6 @@
 						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());
@@ -939,33 +872,15 @@
 								buffer.append(getDeltaAsString(delta));
 							}
 						}
-						entry.setDetails(buffer.toString());
-						logger.write(Level.FINEST, entry);
+						Tracing.log(buffer);
 					}
 					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);
-					}
+				} catch (CoreException e) {
+					ValidationPlugin.getPlugin().handleException(e);
 					String mssg = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
 					reporter.displaySubtask(mssg);
-					/*
-					 The code  below  causes bundle not found exception since, the  bundle here is
-					 validate_base and we  are  trying to load that bundle from the classloader of 
-					 the Validator. 
-			  
-					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 {
@@ -975,16 +890,10 @@
 					
 					checkCanceled(reporter);
 					
-				} catch (InstantiationException exc) {
+				} catch (InstantiationException e) {
 					// 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);
-					}
+					ValidationPlugin.getPlugin().handleException(e);
 					continue;
 				}
 				
@@ -998,23 +907,19 @@
 //				} else {
 //					internalValidate(reporter, validator, vmd, context, delta);
 //				}
-				internalValidate(reporter, (IValidator)validator, vmd, context, delta);
-				}
-		} catch (OperationCanceledException exc) {
-			handleOperationCancelledValidateException(reporter, validator, vmd, iterator, logger, exc);
-		} finally {
+				internalValidate(reporter, validator, vmd, context, delta);
+			}
+		} 
+		catch (OperationCanceledException exc) {
+			handleOperationCancelledValidateException(reporter, validator, currentVmd, iterator, exc);
+		} 
+		finally {
 			releaseCachedMaps();
 		}
 	}
 
-	/**
-	 * 
-	 */
 	private void releaseCachedMaps() {
-		if (ValidationRegistryReader.getReader().projectValidationMetaData != null) {
-			ValidationRegistryReader.getReader().projectValidationMetaData.clear();
-			ValidationRegistryReader.getReader().projectValidationMetaData = null;
-		}
+		ValidationRegistryReader.getReader().clearCachedMaps();
 		IProjectValidationHelper helper = ValidationHelperRegistryReader.getInstance().getValidationHelper();
 		if (helper != null)
 			helper.disposeInstance();
@@ -1022,9 +927,8 @@
 
 	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];
+			 ((WorkbenchContext)context).setValidationFileURIs(new ArrayList<String>());
+			 for(IFileDelta file : delta) {
 				 if(file.getDeltaType() != IFileDelta.DELETED ) {
 					 ((WorkbenchContext)context).getValidationFileURIs().add(file.getFileName());
 				 }
@@ -1040,7 +944,8 @@
 	 * @param logger
 	 * @param exc
 	 */
-	private void handleOperationCancelledValidateException(WorkbenchReporter reporter, IValidator validator, ValidatorMetaData vmd, Iterator iterator, final Logger logger, OperationCanceledException exc) {
+	private void handleOperationCancelledValidateException(WorkbenchReporter reporter, IValidator validator, 
+		ValidatorMetaData vmd, Iterator<ValidatorMetaData> iterator, 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.
@@ -1069,13 +974,7 @@
 			} 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);
-				}
+				ValidationPlugin.getPlugin().handleException(exc2);
 				continue;
 			}
 			reporter.displaySubtask(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_VALIDATOR_CLEANUP, new String[]{vmd.getValidatorDisplayName()}));
@@ -1084,14 +983,13 @@
 			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"
+		// the framework can display the correct "canceled"
 		// 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);
@@ -1110,21 +1008,13 @@
 		} catch (OperationCanceledException exc) {
 			// This is handled in the validate(WorkbenchReporter) method.
 			throw exc;
-		}catch (Throwable exc) {
+		}catch (Exception e) {
 			// 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);
-			}
+			// error and continue with the next validator.
+			// If a runtime exception has occurred, e.g. NullPointer or
+			// ClassCast, display it with the "A runtime exception has occurred" message.
+			// This will provide more information to the user when he/she calls Service.
+			ValidationPlugin.getPlugin().handleException(e);
 			String mssg = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
 			reporter.displaySubtask(mssg);
 			
@@ -1165,7 +1055,6 @@
 		// 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
@@ -1197,11 +1086,6 @@
 						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());
 						}
@@ -1212,35 +1096,10 @@
 			}
 		} 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);
-			}
+		} catch (Exception e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			String mssg = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
 			reporter.displaySubtask(mssg);
-			
-			/*
-			 The code  below  causes bundle not found exception since, the  bundle here is
-			 validate_base and we  are  trying to load that bundle from the classloader of 
-			 the Validator. 			 * 
-			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;
 		}
 	}
@@ -1263,11 +1122,8 @@
 	 * (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;
-		}
+		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
@@ -1277,47 +1133,42 @@
 			// 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
+				// 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.
+			if (Tracing.isLogging()) {
+				// 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);
-			}
+			//TODO GRK determine if timing info should be added here
+//			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) {
@@ -1325,78 +1176,25 @@
 			// 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) {
+				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
+					// 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.
+			// 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);
-				}
-			}
+			ValidationPlugin.getPlugin().handleException(exc);
+			ValidationPlugin.getPlugin().handleException(exc.getAssociatedException());
 			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);
-			}
+		} catch (Exception e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			String mssg = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
 			reporter.displaySubtask(mssg);
 			
@@ -1416,76 +1214,18 @@
 		} 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);
-				}
-				
-				/*
-			 The code  below  causes bundle not found exception since, the  bundle here is
-			 validate_base and we  are  trying to load that bundle from the classloader of 
-			 the Validator.  
-				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;
-				}
-				
-				*/
+			} catch (Exception e) {
+				ValidationPlugin.getPlugin().handleException(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);
-				}
-				
-				/*
-			 The code  below bundle not found exception since, the  bundle here is
-			 validate_base and we  are  trying to load that bundle from the classloader of 
-			 the Validator. 
-			 				 
-				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;
-				}
-				*/
+			} catch (Exception e) {
+				ValidationPlugin.getPlugin().handleException(e);
 				return;
 			} finally {
 				// Now that cleanup has been called, set the project to null.
@@ -1502,23 +1242,16 @@
 			}
 			// 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)
+			reporter.getProgressMonitor().worked(((delta == null) ? 1 : delta.length));
 		}
 	}
 
-	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;
-	}
+//	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
@@ -1531,27 +1264,30 @@
 	 * (hProject.getName().indexOf("fork") > -1)) { Thread.dumpStack(); } System.err.println(prefix +
 	 * "End ValidationOperation"); }
 	 */
+	
+	/**
+	 * @deprecated This class is no longer used by the framework.
+	 */
 	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;
+		private WorkbenchReporter _reporter;
+		private IValidator _validator;
+		private ValidatorMetaData _vmd;
+		private IFileDelta[] _delta;
 
-		public ProjectRunnable(WorkbenchReporter reporter, IValidator validator, ValidatorMetaData vmd, IWorkbenchContext helper, IFileDelta[] delta, Iterator iterator) {
+		@SuppressWarnings("unchecked")
+		public ProjectRunnable(WorkbenchReporter reporter, IValidator validator, 
+			ValidatorMetaData vmd, IWorkbenchContext helper, IFileDelta[] delta, Iterator iterator) {
 			_reporter = reporter;
 			_validator = validator;
 			_vmd = vmd;
-//			_helper = helper;
-			__delta = delta;
+			_delta = delta;
 		}
 
 		public void run() {
 			try {
-				internalValidate(_reporter, _validator, _vmd, context,__delta);
+				internalValidate(_reporter, _validator, _vmd, context,_delta);
 			} catch (OperationCanceledException exc) {
-				// User can't cancel a job in a background thread, so ignore
-				// this exception.
+				// User can't cancel a job in a background thread, so ignore this exception.
 			}
 		}
 
@@ -1574,49 +1310,24 @@
 		this.context = context;
 	}
 	
-	void launchJobs(HashSet validators, final WorkbenchReporter reporter) throws OperationCanceledException{
+	void launchJobs(Set<ValidatorMetaData> validators, final WorkbenchReporter reporter) throws OperationCanceledException{
 		
-		final Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-		Iterator iterator = validators.iterator();
-		ValidatorMetaData vmd = null;
 		IValidator validator = null;
 		IFileDelta[] delta = null;
 		IWorkbenchContext workbenchcontext = null;
 		
-		while (iterator.hasNext()) {
+		for (ValidatorMetaData vmd : validators) {
 			checkCanceled(reporter);
 			
-			vmd = (ValidatorMetaData) iterator.next();
-
 			try {
 				delta = getFileDeltas(reporter.getProgressMonitor(), vmd);
 				boolean willRun = (isForce() || isValidationNecessary(vmd, delta));
-				if (!willRun) {
-					continue;
-				}
-			} catch (CoreException exc) {
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationOperation.launchJobs()"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
+				if (!willRun)continue;
+
+			} catch (CoreException e) {
+				ValidationPlugin.getPlugin().handleException(e);
 				String mssg = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
 				reporter.displaySubtask(mssg);
-				
-				/*
-			 The code  below  causes bundle not found exception since, the  bundle here is
-			 validate_base and we  are  trying to load that bundle from the classloader of 
-			 the Validator. 
-			  
-				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;
 			}
 			
@@ -1627,16 +1338,10 @@
 				vmd.addHelper((IValidatorJob)validator, workbenchcontext);				
 				checkCanceled(reporter);
 				
-			} catch (InstantiationException exc) {
+			} catch (InstantiationException e) {
 				// 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.launchJobs()"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
+				ValidationPlugin.getPlugin().handleException(e);
 				continue;
 			}
 			
@@ -1652,142 +1357,97 @@
 			} catch (OperationCanceledException exc) {
 				throw exc;
 
-			} catch (Throwable exc) {
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationOperation.launchJobs()"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
+			} catch (Exception e) {
+				ValidationPlugin.getPlugin().handleException(e);
 				String mssg = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
 				reporter.displaySubtask(mssg);
-
-				/*
-				 The code  below  causes bundle not found exception since, the  bundle here is
-				 validate_base and we  are  trying to load that bundle from the classloader of 
-				 the Validator. 
-				 */
-				 
-//				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);
+			} catch (Error e) {
+				ValidationPlugin.getPlugin().handleException(e);
+				String mssg = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
+				reporter.displaySubtask(mssg);
+				throw e;
 			} finally {
 				// If user fixes problem, and limit exceeded, add "exceeded"
-				// message, or
-				// if limit not exceeded any more, remove "exceeded" message.
+				// message, or if limit not exceeded any more, remove "exceeded" message.
 				reporter.getProgressMonitor().done();
 			}
 		}
-				
-				
-				
-		
-
 	}
-	
-	
-
-	
+		
 	private void initValidateContext(IFileDelta[] delta, IWorkbenchContext context ) {
 		 if (context instanceof WorkbenchContext) {
-			 ((WorkbenchContext)context).setValidationFileURIs(new ArrayList());
-			 for(int i = 0; i < delta.length; i++) {
-				 IFileDelta file = delta[i];
+			 ((WorkbenchContext)context).setValidationFileURIs(new ArrayList<String>());
+			 for(IFileDelta file : delta) {
 				 if(file.getDeltaType() != IFileDelta.DELETED ) {
 					 ((WorkbenchContext)context).getValidationFileURIs().add(file.getFileName());
 				 }
 			 } 
 		}
 	}
-			
-			
+						
 	private final void launchValidatorJob(WorkbenchReporter reporter,
-				   IValidatorJob validator, ValidatorMetaData vmd,
-				   IWorkbenchContext helper, IFileDelta[] delta) {
+		IValidatorJob validator, ValidatorMetaData vmd, IWorkbenchContext helper, IFileDelta[] delta) {
 		
-		if (reporter == null) {
-			return;
-		}
+		if (reporter == null)return;
 		checkCanceled(reporter);
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
 
 		if (helper instanceof WorkbenchContext) {
 			((WorkbenchContext) helper).setRuleGroup(getRuleGroup());
 		}
-		if (logger.isLoggingLevel(Level.FINEST)) {
-			// This internal "launched validators" value is used only in
-			// tests.
+		if (Tracing.isLogging()) {
+			// This internal "launched validators" value is used only in tests.
 			getLaunchedValidators().add(vmd);
 		}
 		
-		ValidatorJob validatorjob = new ValidatorJob( validator, vmd.getValidatorDisplayName(), vmd.getValidatorUniqueName(),
-					helper.getProject(), helper );
-
+		ValidatorJob validatorjob = new ValidatorJob( validator, vmd.getValidatorDisplayName(), 
+			vmd.getValidatorUniqueName(), helper.getProject(), helper );
 
 		ISchedulingRule schedulingRule = validator.getSchedulingRule(helper);
 		validatorjob.setRule( schedulingRule );		
 		QualifiedName validatorKey = new QualifiedName(null, "Validator"); //$NON-NLS-1$
 		validatorjob.setProperty( validatorKey, validator );
 		validatorjob.addJobChangeListener(
-					new JobChangeAdapter(){
-						
-						public void done(IJobChangeEvent event){
-							Job job = event.getJob();
-							QualifiedName validatorKey = new QualifiedName(null, "Validator"); //$NON-NLS-1$
-							IValidatorJob validator = (IValidatorJob)job.getProperty( validatorKey );
-							ValidatorManager mgr = ValidatorManager.getManager();
-							final ArrayList list = mgr.getMessages(validator);							
-							
-							IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
-							    public void run(IProgressMonitor monitor) throws CoreException {
+			new JobChangeAdapter(){
+				
+				public void done(IJobChangeEvent event){
+					Job job = event.getJob();
+					QualifiedName validatorKey = new QualifiedName(null, "Validator"); //$NON-NLS-1$
+					IValidatorJob validator = (IValidatorJob)job.getProperty( validatorKey );
+					ValidatorManager mgr = ValidatorManager.getManager();
+					final List<MessageInfo> list = mgr.getMessages(validator);							
+					
+					IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
+					    public void run(IProgressMonitor monitor) throws CoreException {
 
-							    	Iterator it = list.iterator();
-									while( it.hasNext() ){
-										MessageInfo info = (MessageInfo)it.next();
-										try {
-										
-										TaskListUtility.addTask( info.getMessageOwnerId(), info.getResource(),
-												info.getLocation(), info.getMsg().getId(), info.getText(),
-												info.getMsg().getSeverity(),
-												info.getMarkerId(),
-												info.getTargetObjectName(),
-												info.getMsg().getGroupName(),
-												info.getMsg().getOffset(),
-												info.getMsg().getLength());
-										
-										
-										} catch (CoreException exc) {
-											Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-											if (logger.isLoggingLevel(Level.SEVERE)) {
-												LogEntry entry = ValidationPlugin.getLogEntry();
-												entry.setTargetException(exc);
-												logger.write(Level.SEVERE, entry);
-											}
-										}										
-									}
-							    }
-							};
-							try {
-								
-								ResourcesPlugin.getWorkspace().run(runnable, null, IWorkspace.AVOID_UPDATE, null);
-							} catch (CoreException e) {
-							   e.printStackTrace();
+							for(MessageInfo info : list){
+								try {								
+									TaskListUtility.addTask( info.getMessageOwnerId(), info.getResource(),
+										info.getLocation(), info.getMsg().getId(), info.getText(),
+										info.getMsg().getSeverity(),
+										info.getMarkerId(),
+										info.getTargetObjectName(),
+										info.getMsg().getGroupName(),
+										info.getMsg().getOffset(),
+										info.getMsg().getLength());								
+								} catch (CoreException e) {
+									ValidationPlugin.getPlugin().handleException(e);
+								}										
 							}
-							mgr.clearMessages( validator );
-							validator = null;
-						}
+					    }
+					};
+					try {
+						
+						ResourcesPlugin.getWorkspace().run(runnable, null, IWorkspace.AVOID_UPDATE, null);
+					} catch (CoreException e) {
+					   e.printStackTrace();
 					}
+					mgr.clearMessages( validator );
+					validator = null;
+				}
+			}
 		);
 		validatorjob.setPriority(Job.DECORATE);
-
-		ValidationLauncherJob validationLauncherJob = new ValidationLauncherJob(validatorjob);
-		validationLauncherJob.schedule();
-		
-		//validatorjob.schedule();		
-		
+		launcherJob.addValidationJob(validatorjob);
 	}
 		
-}
\ 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
index 0a29729..4e53471 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -13,14 +13,11 @@
 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;
@@ -45,7 +42,7 @@
 			return new String[0];
 		}
 
-		Set tempSet = new HashSet();
+		Set<String> tempSet = new HashSet<String>();
 		for (int i = 0; i < markers.length; i++) {
 			IMarker marker = markers[i];
 			try {
@@ -54,15 +51,9 @@
 					// 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);
-				}
+				tempSet.add((String)owner);
+			} catch (CoreException e) {
+				ValidationPlugin.getPlugin().handleException(e);
 			}
 		}
 
@@ -100,22 +91,12 @@
 					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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			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/ValidatorJob.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorJob.java
index 473fea2..048dd39 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorJob.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorJob.java
@@ -1,16 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.logging.Level;
-
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
+import org.eclipse.wst.validation.IPerformanceMonitor;
+import org.eclipse.wst.validation.PerformanceCounters;
+import org.eclipse.wst.validation.ValidationFramework;
+import org.eclipse.wst.validation.internal.Misc;
 import org.eclipse.wst.validation.internal.ResourceConstants;
 import org.eclipse.wst.validation.internal.ResourceHandler;
 import org.eclipse.wst.validation.internal.ValidationRegistryReader;
@@ -25,20 +34,15 @@
 
 
 	private IProject			project;
-	private String				validatorUniqueName;
 	private IWorkbenchContext 	helper;
 	private IValidatorJob		validator;
 	
 	public ValidatorJob(String name) {
 		super(name);
 	}
-
-
-	   
 	   
 	public ValidatorJob( IValidatorJob validator, String displayName, String name, IProject project, IWorkbenchContext aHelper  ){
 		super(displayName);
-		validatorUniqueName = name;
 		this.project = project;
 		this.helper = aHelper;
 		this.validator = validator;
@@ -49,6 +53,14 @@
 	//error information is reported by the IReporter
 	
 	protected IStatus run(IProgressMonitor monitor) {
+		
+		IPerformanceMonitor pm = ValidationFramework.getDefault().getPerformanceMonitor();
+		long elapsed = -1;
+		long cpuTime = -1;
+		if (pm.isCollecting()){
+			elapsed = System.currentTimeMillis();
+			cpuTime = Misc.getCPUTime();
+		}
 
 		monitor.beginTask("Validating", IProgressMonitor.UNKNOWN); //$NON-NLS-1$
 		IStatus status = IValidatorJob.OK_STATUS;
@@ -56,28 +68,17 @@
 
 		ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validator);
 		
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-
 		try {
 
 			String message = ResourceHandler.getExternalizedMessage(
 				ResourceConstants.VBF_STATUS_STARTING_VALIDATION,
 				new String[]{helper.getProject().getName(), vmd.getValidatorDisplayName()});
 			
-			monitor.subTask(message);
-			
-		
+			monitor.subTask(message);		
 			status = validator.validateInJob(helper, reporter);
 		
-			//to remove, if error is returned from the validator, the job stays back in the UI...
-			//should we even return error status if error is found in the validator
-			//status = IValidatorJob.OK_STATUS;	
-			
-			
-			
-			message = ResourceHandler.getExternalizedMessage(
-					ResourceConstants.VBF_STATUS_ENDING_VALIDATION,
-					new String[]{helper.getProject().getName(), vmd.getValidatorDisplayName()});
+			message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION,
+				new String[]{helper.getProject().getName(), vmd.getValidatorDisplayName()});
 			monitor.subTask(message);
  
 		} catch (OperationCanceledException exc) {
@@ -93,42 +94,24 @@
 				}
 			}
 			// If there is a problem with this particular validator, log the
-			// error and continue
-			// with the next validator.
+			// error and continue with the next validator.
 			exc.setClassLoader(validator.getClass().getClassLoader());
 
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidatorJob.run()"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-				if (exc.getAssociatedException() != null) {
-					entry.setTargetException(exc.getAssociatedException());
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+			ValidationPlugin.getPlugin().handleException(exc);
+			ValidationPlugin.getPlugin().handleException(exc.getAssociatedException());
 			String message = ResourceHandler.getExternalizedMessage(
-						ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY,
-						new String[]{helper.getProject().getName(), vmd.getValidatorDisplayName()});
+					ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY,
+					new String[]{helper.getProject().getName(), vmd.getValidatorDisplayName()});
 			
 			monitor.subTask(message);
 			if (exc.getAssociatedMessage() != null) {
 				reporter.addMessage(validator, exc.getAssociatedMessage());
 			}
-		} catch (Throwable exc) {
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidatorJob.run()"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-				IStatus stat = new Status(IStatus.ERROR,
-			    		      ValidationPlugin.getPlugin().PLUGIN_ID, 0, "", exc );
-					logger.write(Level.SEVERE, stat);
-				
-			}
+		} catch (Exception e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			String mssg = ResourceHandler.getExternalizedMessage(
-						ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY,
-						new String[]{helper.getProject().getName(), vmd.getValidatorDisplayName() });
+				ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY,
+				new String[]{helper.getProject().getName(), vmd.getValidatorDisplayName() });
 			
 			monitor.subTask(mssg);
 			
@@ -137,13 +120,8 @@
 				validator.cleanup(reporter);
 			} catch (OperationCanceledException e) {
 				throw e;
-			} catch (Throwable exc) {
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidatorJob.run()"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
+			} catch (Exception exc) {
+				ValidationPlugin.getPlugin().handleException(exc);
 				
 				String[] msgParm = {exc.getClass().getName(), vmd.getValidatorDisplayName(), (exc.getMessage() == null ? "" : exc.getMessage())}; //$NON-NLS-1$				
 				Message message = ValidationPlugin.getMessage();
@@ -158,13 +136,8 @@
 					vmd.removeHelper( validator );
 				}catch (OperationCanceledException e) {
 					throw e;
-				} catch (Throwable exc) {
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setSourceID("ValidatorJob.run()"); //$NON-NLS-1$
-						entry.setTargetException(exc);
-						logger.write(Level.SEVERE, entry);
-					}
+				} catch (Exception exc) {
+					ValidationPlugin.getPlugin().handleException(exc);
 					String[] msgParm = {exc.getClass().getName(), vmd.getValidatorDisplayName(), (exc.getMessage() == null ? "" : exc.getMessage())}; //$NON-NLS-1$
 					Message message = ValidationPlugin.getMessage();
 					message.setSeverity(IMessage.NORMAL_SEVERITY);
@@ -185,6 +158,16 @@
 			//monitor.worked(((delta == null) ? 1 : delta.length)); // One
 			monitor.done();
 		}
+		if (pm.isCollecting()){
+			if (cpuTime != -1){
+				cpuTime = Misc.getCPUTime() - cpuTime;
+			}
+			String projectName = null;
+			if (project != null)projectName = project.getName();
+			pm.add(new PerformanceCounters(vmd.getValidatorUniqueName(), 
+				vmd.getValidatorDisplayName(),projectName, -1, 
+				System.currentTimeMillis()-elapsed, cpuTime));
+		}
 		return status;
 	}
 
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
index 68605e6..7cf398b 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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,7 +20,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.logging.Level;
 
 import org.eclipse.core.resources.ICommand;
 import org.eclipse.core.resources.IMarker;
@@ -30,8 +29,7 @@
 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.ValidationFramework;
 import org.eclipse.wst.validation.internal.ConfigurationManager;
 import org.eclipse.wst.validation.internal.GlobalConfiguration;
 import org.eclipse.wst.validation.internal.InternalValidatorManager;
@@ -40,40 +38,33 @@
 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.IValidator;
 import org.eclipse.wst.validation.internal.provisional.core.IValidatorJob;
 
 /**
- * A centralised class for accessing validation metadata.
+ * A centralized class for accessing validation metadata.
  * 
  * This class is not intended to be subclassed outside of the validation framework.
  */
 public final class ValidatorManager {
 	public static final String VALIDATOR_JOB_FAMILY = "validators";	 //$NON-NLS-1$	
-	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 ValidatorManager inst;
+	private static IResourceUtil _resourceUtil; // 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;
-	private Map validatorMsgs = Collections.synchronizedMap( new HashMap() );	
-	private Set problemValidators = new HashSet();	
+		
+	// an empty set, provided for convenience, so that we only construct one empty set once.
+	private static final Set<ValidatorMetaData> EMPTY_SET = new HashSet<ValidatorMetaData>();
 	
-	/**
-	 * ValidatorManager constructor comment.
-	 */
+	private static Class 	_messageLimitOwner;
+	private String[] 		_internalOwners;
+	private Map<IValidatorJob, List<MessageInfo>> _validatorMsgs = 
+		Collections.synchronizedMap( new HashMap<IValidatorJob, List<MessageInfo>>() );	
+	private Set<ValidatorMetaData> _problemValidators = new HashSet<ValidatorMetaData>();	
+	
 	private ValidatorManager() {
 		super();
-		_suspendedProjects = new HashSet();
 		_internalOwners = new String[0];
 
 		addInternalOwner(getMessageLimitOwner());
@@ -87,23 +78,81 @@
 		setEnabledValidators(currentProject, EMPTY_SET, monitor);
 	}
 
+	public void enableValidator(String validatorId) {
+
+		try {
+			ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validatorId);
+			GlobalConfiguration gf = ConfigurationManager.getManager().getGlobalConfiguration();
+			gf.enableSingleValidator(vmd);
+		} catch (InvocationTargetException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	
+	public void disableValidator(String validatorId){
+
+		try {
+			ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validatorId);
+			GlobalConfiguration gf = ConfigurationManager.getManager().getGlobalConfiguration();
+			gf.disableSingleValidator(vmd);
+		} catch (InvocationTargetException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	
+	public void enableValidator(String validatorId, IProject project, boolean manualValidation, boolean buildValidation) {		
+		try {
+			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
+			prjp.setDoesProjectOverride(true);
+			ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validatorId);
+			
+			if(manualValidation)prjp.enableSingleManualValidator(vmd);
+			if (buildValidation)prjp.enableSingleBuildValidator(vmd);
+			prjp.store();		
+		} catch (InvocationTargetException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void disableValidator(String validatorId, IProject project, boolean manualValidation, boolean buildValidation){
+
+		try {
+			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
+			prjp.setDoesProjectOverride(true);
+			ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validatorId);
+			
+			if(manualValidation)prjp.disableSingleManualValidator(vmd);
+			if (buildValidation)prjp.disableSingleBuildValidator(vmd);
+			prjp.store();
+			
+		} catch (InvocationTargetException e) {
+			e.printStackTrace();
+		}
+
+	}
+	
+	
+	
 	/**
 	 * 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.
+	 * builder to the project description so that the project can support build validation.
 	 */
 	public static void addProjectBuildValidationSupport(IProject project) {
-		if (project == null) {
-			return;
-		}
+		/*
+		 * I'm working my way through the code to see where this gets called. One place was in ModuleCoreNature
+		 * which had hard coded the builder id.
+		 */
+		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
+			ICommand[] commands = description.getBuildSpec();
 			if (commands != null) {
-				for (int i = 0; i < commands.length; i++) {
-					String builderName = commands[i].getBuilderName();
+				for (ICommand command : commands) {
+					String builderName = command.getBuilderName();
 					if (builderName == null) {
 						// builder name will be null if it has not been set
 						continue;
@@ -146,7 +195,7 @@
 	 * 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.
-	 * 
+	 * <p>
 	 * This is a long-running process - is there any way that I can shorten the amount of time this
 	 * takes?
 	 */
@@ -196,19 +245,9 @@
 		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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 		}
 	}
 
@@ -222,19 +261,9 @@
 		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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return Collections.EMPTY_SET;
 		}
 	}
@@ -251,19 +280,9 @@
 		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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return Collections.EMPTY_SET;
 		}
 	}
@@ -281,19 +300,9 @@
 		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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return Collections.EMPTY_SET;
 		}
 	}
@@ -311,19 +320,9 @@
 		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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return Collections.EMPTY_SET;
 		}
 	}
@@ -401,12 +400,10 @@
 	/**
 	 * @deprecated For use by the validation framework only.
 	 */
-	public Set getIncrementalValidators(Collection vmds) {
-		if (vmds == null) {
-			return Collections.EMPTY_SET;
-		}
+	public Set<ValidatorMetaData> getIncrementalValidators(Collection vmds) {
+		if (vmds == null)return new HashSet<ValidatorMetaData>();
 
-		Set result = new HashSet();
+		Set<ValidatorMetaData> result = new HashSet<ValidatorMetaData>();
 		Iterator iterator = vmds.iterator();
 		while (iterator.hasNext()) {
 			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
@@ -528,19 +525,9 @@
 			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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return Collections.EMPTY_SET;
 		}
 	}
@@ -551,21 +538,18 @@
 	 * 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) {
+	public Set<ValidatorMetaData> getProjectConfiguredValidators(IProject project, Object[] enabledVal, 
+			boolean getIncremental) {
 		if ((project == null) || (enabledVal == null) || (enabledVal.length == 0)) {
-			return Collections.EMPTY_SET;
+			return new HashSet<ValidatorMetaData>();
 		}
 
-		Set val = new HashSet();
+		Set<ValidatorMetaData> val = new HashSet<ValidatorMetaData>();
 		for (int i = 0; i < enabledVal.length; i++) {
 			ValidatorMetaData vmd = (ValidatorMetaData) enabledVal[i];
-			if (!vmd.isConfiguredOnProject(project)) {
-				continue;
-			}
+			if (!vmd.isConfiguredOnProject(project))continue;
 
-			if (!getIncremental || vmd.isIncremental()) {
-				val.add(vmd);
-			}
+			if (!getIncremental || vmd.isIncremental())val.add(vmd);
 		}
 		return val;
 	}
@@ -589,7 +573,7 @@
 	/**
 	 * For use by the validation framework only.
 	 */
-	protected Set getEnabledValidators(IProject project) {
+	protected Set<ValidatorMetaData> getEnabledValidators(IProject project) {
 		try {
 			ValidatorMetaData[] vmds = null;
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
@@ -598,86 +582,55 @@
 			else
 			   vmds = getStateOfProjectLevelValidatorsFromGlobal(prjp);
 			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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return Collections.EMPTY_SET;
 		}
 	}
 
 	private ValidatorMetaData[] getStateOfProjectLevelValidatorsFromGlobal(ProjectConfiguration prjp) throws InvocationTargetException {
-		List enabledGlobalValidatorsForProject = new ArrayList();
+		List<ValidatorMetaData> enabledGlobalValidatorsForProject = new ArrayList<ValidatorMetaData>();
 		GlobalConfiguration gf = ConfigurationManager.getManager().getGlobalConfiguration();
 		List allProjectValidator = getAllValidatorUniqueNames(prjp.getValidators());
-		ValidatorMetaData[] vmd = gf.getBuildEnabledValidators();
-		for(int i = 0; i < vmd.length; i++) {
-			if(allProjectValidator.contains(vmd[i].getValidatorUniqueName())) {
-				enabledGlobalValidatorsForProject.add(vmd[i]);
+		for(ValidatorMetaData vmd : gf.getBuildEnabledValidators()) {
+			if(allProjectValidator.contains(vmd.getValidatorUniqueName())) {
+				enabledGlobalValidatorsForProject.add(vmd);
 			}
 	   }
 		return (ValidatorMetaData[]) enabledGlobalValidatorsForProject.toArray(new ValidatorMetaData[enabledGlobalValidatorsForProject.size()]);
 	}
 	
-	private List getAllValidatorUniqueNames(ValidatorMetaData[] metaData) {
-		List names = new ArrayList();
-		for(int i = 0; i < metaData.length; i++) {
-			names.add(metaData[i].getValidatorUniqueName());
+	private List<String> getAllValidatorUniqueNames(ValidatorMetaData[] metaData) {
+		List<String> names = new ArrayList<String>();
+		for(ValidatorMetaData vmd : metaData) {
+			names.add(vmd.getValidatorUniqueName());
 		}
 		return names;
 	}
 	
 	
 
-	protected Set getManualEnabledValidators(IProject project) {
+	protected Set<ValidatorMetaData> getManualEnabledValidators(IProject project) {
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			ValidatorMetaData[] vmds = prjp.getManualEnabledValidators();
 			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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return Collections.EMPTY_SET;
 		}
 	}	
 	
-	protected Set getBuildEnabledValidators(IProject project) {
+	protected Set<ValidatorMetaData> getBuildEnabledValidators(IProject project) {
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			ValidatorMetaData[] vmds = prjp.getBuildEnabledValidators();
 			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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return Collections.EMPTY_SET;
 		}
 	}	
@@ -721,19 +674,9 @@
 				// 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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 		}
 	}
 
@@ -743,19 +686,9 @@
 			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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return false;
 		}
 	}
@@ -773,19 +706,9 @@
 		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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return false;
 		}
 	}
@@ -798,19 +721,9 @@
 		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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return false;
 		}
 	}
@@ -840,112 +753,52 @@
 		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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return 0;
 		}
 	}
 
 
 	/**
-	 * 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.
+	 * @deprecated Use ValidationFramework.suspendValidation(project, suspend) directly.
+	 * @see ValidationFramework#suspendValidation(IProject, boolean)
 	 */
 	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);
-		}
+		ValidationFramework.getDefault().suspendValidation(project, suspend);
 	}
 
 	/**
-	 * 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.
+	 * @deprecated Use ValidationFramework.getDefault().suspendAllValidation(suspend) directly.
+	 * @see ValidationFramework#suspendAllValidation(boolean)
 	 */
 	public void suspendAllValidation(boolean suspend) {
-		_suspendAllValidation = suspend;
+		ValidationFramework.getDefault().suspendAllValidation(suspend);
 	}
 
 	/**
-	 * Return true if "suspend all" is enabled, false otherwise.
+	 * @deprecated Use ValidationFramework.getDefault().isSuspended() directly.
+	 * @see ValidationFramework#isSuspended()
 	 */
 	public boolean isSuspended() {
-		return _suspendAllValidation;
+		return ValidationFramework.getDefault().isSuspended();
 	}
 
 	/**
-	 * 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.
+	 * @deprecated Use ValidationFramework.getDefault().isSuspended(project) directly.
+	 * @see ValidationFramework#isSuspended(IProject)
 	 */
 	public boolean isSuspended(IProject project) {
-		if (project == null) {
-			return false;
-		}
-
-		if (_suspendAllValidation) {
-			return true;
-		}
-
-		return _suspendedProjects.contains(project);
+		return ValidationFramework.getDefault().isSuspended(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
+	 * @deprecated Use ValidationFramework.getDefault().isProjectSuspended(project) directly.
+	 * @see ValidationFramework#isProjectSuspended(IProject)
 	 */
 	public boolean isProjectSuspended(IProject project) {
-		if (project == null) {
-			return false;
-		}
-
-		return _suspendedProjects.contains(project);
+		return ValidationFramework.getDefault().isProjectSuspended(project);
 	}
 
 	/**
@@ -954,7 +807,7 @@
 	 * 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) {
+	public void setEnabledValidators(IProject project, Set<ValidatorMetaData> vmdsSet, IProgressMonitor monitor) {
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			ValidatorMetaData[] vmds = null;
@@ -968,19 +821,9 @@
 			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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 		}
 	}
 
@@ -989,7 +832,7 @@
 	}
 
 	/**
-	 * This method is for use by batch EJB deploy only. Only in batch mode is an infinitie number of
+	 * This method is for use by batch EJB deploy only. Only in batch mode is an infinite number of
 	 * messages allowed.
 	 * 
 	 * Enable a project to have an infinite number of messages.
@@ -1012,45 +855,45 @@
 		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 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 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;
-	}
+//	/**
+//	 * 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
@@ -1064,14 +907,8 @@
 			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);
-				}
+			} catch (CoreException e) {
+				ValidationPlugin.getPlugin().handleException(e);
 			}
 		}
 		return false;
@@ -1134,32 +971,31 @@
 	}
 	
 	public void cacheMessage(IValidatorJob validator, MessageInfo info){
-		ArrayList list = (ArrayList) validatorMsgs.get(validator);
+		List<MessageInfo> list = _validatorMsgs.get(validator);
 		if( list == null ){
-			list = new ArrayList();
-			validatorMsgs.put(validator, list);
+			list = new ArrayList<MessageInfo>();
+			_validatorMsgs.put(validator, list);
 		}
 		list.add(info);
 	}
 	
-	public ArrayList getMessages(IValidatorJob validator){
-		ArrayList list = (ArrayList) validatorMsgs.get(validator);
-		if( list == null )
-			list = new ArrayList();		
+	public List<MessageInfo> getMessages(IValidatorJob validator){
+		List<MessageInfo> list = _validatorMsgs.get(validator);
+		if( list == null )list = new ArrayList<MessageInfo>();		
 		return list;
 	}
 	
 	public void clearMessages(IValidatorJob validator){
-		ArrayList list = (ArrayList) validatorMsgs.get(validator);
+		List<MessageInfo> list = _validatorMsgs.get(validator);
 		if( list != null ){
 			list.clear();
 		}
-		validatorMsgs.remove( validator );
+		_validatorMsgs.remove( validator );
 	}
 
 	
-	public Set getProblemValidators() {
-		return problemValidators;
+	public Set<ValidatorMetaData> getProblemValidators() {
+		return _problemValidators;
 	}
 	
 }
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
index 533bb70..274ddec 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -33,10 +33,8 @@
  * 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
+	// By default, assume that there is no default fallback extension
+	protected static final String DEFAULT_DEFAULTEXTENSION = null; 
 
 	/**
 	 * Create an operation that runs a full validation on the named validators either if validation
@@ -149,40 +147,12 @@
 	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.
+		// force the resources to be filtered in even if the validator doesn't normally take them?
+		boolean filterIn = false; 
+		
+		// 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.
+		ValidatorMetaData[] vmds = InternalValidatorManager.getManager().getValidatorsForExtension(project, fileExtension);
 		if ((defaultExtension != null) && ((vmds == null) || (vmds.length == 0))) {
 			filterIn = true;
 			vmds = InternalValidatorManager.getManager().getValidatorsForExtension(project, defaultExtension);
@@ -194,23 +164,9 @@
 
 		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
+		// construct an array of IFileDelta[] to wrap the Object[];
+		// one IFileDelta for each Object in the array
+		setFileDeltas(FilterUtil.getFileDeltas(getEnabledValidators(), changedResources, filterIn));
 	}
 
 	/**
@@ -249,7 +205,7 @@
 		}
 
 		if ((changedResources != null) && (changedResources.length > 0)) {
-			Set tempSet = new HashSet();
+			Set<IProject> tempSet = new HashSet<IProject>();
 			for (int i = 0; i < changedResources.length; i++) {
 				IProject p = changedResources[i].getProject();
 				if (!p.isOpen()) {
@@ -266,9 +222,9 @@
 			}
 			if (tempSet.size() != 1) {
 				StringBuffer buffer = new StringBuffer("\n"); //$NON-NLS-1$
-				Iterator iterator = tempSet.iterator();
+				Iterator<IProject> iterator = tempSet.iterator();
 				while (iterator.hasNext()) {
-					IProject p = (IProject) iterator.next();
+					IProject p = iterator.next();
 					buffer.append("\t"); //$NON-NLS-1$
 					buffer.append(p.getName());
 					if (iterator.hasNext()) {
@@ -288,22 +244,7 @@
 
 		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
+		// an array of IFileDelta[] to wrap the IResource[]; one IFileDelta for each IResource in the array
 	}
 
 	/**
@@ -313,14 +254,14 @@
 	 * 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]);
+		Set<ValidatorMetaData> enabled = new HashSet<ValidatorMetaData>();
+		for (String name : validatorNames) {
+			ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(name);
 			if (vmd == null) {
-				// No validator, with that plugin id, can be run on that project.
+				// No validator, with that plug-in 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]);
+				throw new IllegalArgumentException(name);
 			}
 			enabled.add(vmd);
 		}
@@ -333,4 +274,4 @@
 	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
index 58b281f..eea36c1 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -16,7 +16,6 @@
 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;
@@ -25,9 +24,8 @@
 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.Tracing;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 import org.eclipse.wst.validation.internal.provisional.core.IMessage;
 
@@ -37,20 +35,18 @@
  * 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; 
+	private IProject 	_project;
+	private Hashtable<String,Method> 	_modelRegistry;
+	private int 		_ruleGroup = RegistryConstants.ATT_RULE_GROUP_DEFAULT;
+	public List<String> validationFileURIs; 
 	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();
+		_modelRegistry = new Hashtable<String, Method>();
 
 		registerModel(IRuleGroup.PASS_LEVEL, "loadRuleGroup"); //$NON-NLS-1$
 		
@@ -157,16 +153,9 @@
 						foundResource = null;
 					}
 				}
-			} catch (IllegalArgumentException exc) {
+			} catch (IllegalArgumentException e) {
 				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);
-				}
+				ValidationPlugin.getPlugin().handleException(e);
 			}
 		}
 
@@ -292,14 +281,8 @@
 		}
 		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);
-			}
+		} catch (Exception e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return IMessage.LINENO_UNSET;
 		}
 
@@ -337,14 +320,8 @@
 		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);
-			}
+		} catch (NoSuchMethodException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return null;
 		}
 
@@ -390,10 +367,10 @@
 	   * @param validatorClassName The name of the validator class.
 	   * @return The collection of files relevant for the validator class specified.
 	   */
-	  public Collection getFiles(String validatorClassName)
+	  public Collection<IFile> getFiles(String validatorClassName)
 	  {
 	    IProject project = getProject();
-	    List files = new ArrayList();
+	    List<IFile> files = new ArrayList<IFile>();
 	    getFiles(files, project, validatorClassName);
 	    return files;
 	  }
@@ -406,7 +383,7 @@
 	   * @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)
+	  protected void getFiles(Collection<IFile> files, IContainer resource, String validatorClassName)
 	  {
 	    try
 	    {
@@ -416,7 +393,7 @@
 	        if (ValidatorManager.getManager().isApplicableTo(validatorClassName, resourceArray[i])) 
 	        {
 	          if (resourceArray[i] instanceof IFile) 
-				  files.add(resourceArray[i]);
+				  files.add((IFile)resourceArray[i]);
 	        }
 	        if (resourceArray[i].getType() == IResource.FOLDER)
 	         getFiles(files,(IContainer)resourceArray[i], validatorClassName) ;
@@ -549,9 +526,7 @@
 	 * "registerModel" method.
 	 */
 	public final boolean isRegistered(String symbolicName) {
-		if (symbolicName == null) {
-			return false;
-		}
+		if (symbolicName == null)return false;
 		return _modelRegistry.containsKey(symbolicName);
 	}
 
@@ -577,52 +552,22 @@
 	 */
 	public Object loadModel(String symbolicName, Object[] parms) {
 		try {
-			Method loader = (Method) _modelRegistry.get(symbolicName);
-			if (loader == null) {
-				return null;
-			}
+			Method loader = _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);
-			}
+		} catch (IllegalAccessException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			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);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			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);
-			}
+		} catch (NullPointerException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			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);
-			}
+		} catch (ExceptionInInitializerError e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return null;
 		}
 	}
@@ -688,9 +633,8 @@
 	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$
+			if (Tracing.isLogging()) {
+				StringBuffer buffer = new StringBuffer("WorkbenchContext-01: load method "); //$NON-NLS-1$
 				buffer.append(loadMethodName);
 				buffer.append("("); //$NON-NLS-1$
 				for (int i = 0; (parms != null) && (i < parms.length); i++) {
@@ -698,10 +642,7 @@
 				}
 				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);
+				Tracing.log(buffer);
 			}
 		} else {
 			_modelRegistry.put(symbolicName, method);
@@ -763,28 +704,26 @@
 	}
 
 	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);
+		validationFileURIs.toArray(uris);
 		return uris;
 	}
 
 	/**
 	 * @return Returns the validationFileURIs.
 	 */
-	public List getValidationFileURIs() {
+	public List<String> getValidationFileURIs() {
 		return validationFileURIs;
 	}
 
 	/**
 	 * @param validationFileURIs The validationFileURIs to set.
 	 */
-	public void setValidationFileURIs(List validationFileURIs) {
+	public void setValidationFileURIs(List<String> 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
index 2871aff..0953e0a 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 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
  *******************************************************************************/
@@ -20,8 +20,8 @@
  * with the FileDelta.
  */
 public class WorkbenchFileDelta extends FileDelta {
-	private IResource _resource = null;
-	private Object _changedResource = null;
+	private IResource _resource;
+	private Object _changedResource;
 
 	private static final String FILE_NAME = "FILE NAME:"; //$NON-NLS-1$
 	private static final String DELTA = "  DELTA: "; //$NON-NLS-1$
@@ -75,4 +75,4 @@
 		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
index db6d2aa..f9162f3 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -13,18 +13,16 @@
 import java.text.MessageFormat;
 import java.util.Arrays;
 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.ResourceHandler;
 import org.eclipse.wst.validation.internal.TaskListUtility;
+import org.eclipse.wst.validation.internal.Tracing;
 import org.eclipse.wst.validation.internal.ValidationRegistryReader;
 import org.eclipse.wst.validation.internal.ValidatorMetaData;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
@@ -35,70 +33,56 @@
 
 /**
  * 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.
- * 
+ * IReporter instance to WorkbenchReporter.
+ * <p>
  * This class handles interaction between the user and the IValidator in the eclipse workbench
  * environment.
- * 
+ * <p>
  * This class must not be called outside of an IWorkspaceRunnable or IRunnableWithProgress. Many
  * resource deltas can be generated by the methods in this class.
- * 
+ * <p>
  * Only the validation framework may instantiate or alter instances of this class.
  */
 
-public final class WorkbenchReporter implements IReporter {
+public 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;
+	private IProject _project;
+	private IProgressMonitor _monitor;
 
 	public static void addMessage(IResource resource, Class messageOwner, IMessage message) {
-		addMessage(resource, messageOwner, null, message); // null ClassLoader = use the default
-		// (clazz.getClassLoader());
+		addMessage(resource, messageOwner, null, message);
 	}
 	
 	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) {
+		addMessage(resource, clazz, null, message, targetObjectName, location);
 	}
 	
-	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, IMessage message, 
+		String targetObjectName, String location,String markerId) {
+		addMessage(resource, clazz, null, message, targetObjectName, location,markerId);
 	}
 	
-	
+	public static void addMessage(IResource resource, Class clazz, ClassLoader cl, IMessage message, 
+		String targetObjectName, String location) {
+		if ((clazz == null) || (message == null) || (resource == null))return;
 
-	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();
-		}
+		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;
-		}
+	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();
-		}
+		if (cl == null)cl = clazz.getClassLoader();
 
 		addMessage(resource, getUniqueId(clazz), cl, message, targetObjectName, location, markerId);
 	}
@@ -107,44 +91,32 @@
 		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) {
+	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);
-			}
+			TaskListUtility.addTask(messageOwnerId, resource, location, message.getId(), 
+				message.getText(cl), severity,targetObjectName, message.getGroupName(), 
+				message.getOffset(), message.getLength());
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 	
-	public static void addMessage(IResource resource, String messageOwnerId, ClassLoader cl, IMessage message, String targetObjectName, String location, String markerId) {
+	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());
-		} 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);
-			}
+			TaskListUtility.addTask(messageOwnerId, resource, location, message.getId(), 
+				message.getText(cl), severity,markerId,targetObjectName, message.getGroupName(), 
+				message.getOffset(), message.getLength());
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 	
-	
-
 	public static void removeAllMessages(IResource resource, IValidator validator) {
-		if (resource == null) {
-			return;
-		}
+		if (resource == null)return;
 
 		ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validator);
 		if (vmd == null) {
@@ -155,15 +127,8 @@
 		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);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 
@@ -187,33 +152,18 @@
 			//String targetObjectName = getTargetObjectName(vmd.getHelper(resource.getProject()), object);
 			String targetObjectName = getTargetObjectName( getHelper( resource.getProject(), validator), object);			
 			removeAllMessages(resource, validatorNames, targetObjectName);
-		} catch (InstantiationException exc) {
+		} catch (InstantiationException e) {
 			// 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);
-			}
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 
 	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);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 
@@ -232,15 +182,8 @@
 	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);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 
@@ -265,15 +208,6 @@
 		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);
@@ -289,14 +223,8 @@
 		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);
-			}
+		} catch (Exception e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 		if ((location == null) || (location.trim().equals(""))) { //$NON-NLS-1$
 			location = DEFAULT_LOCATION;
@@ -317,14 +245,8 @@
 		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);
-			}
+		} catch (Exception e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 		return targetObjectName;
 	}
@@ -415,7 +337,7 @@
 				try {
 					IWorkbenchContext helper = getHelper(validator);
 					resource = helper.getResource(object);
-				} catch (InstantiationException exc) {
+				} catch (InstantiationException e) {
 					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
@@ -425,45 +347,20 @@
 						// 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) {
+						ValidationPlugin.getPlugin().handleException(e);
+					} catch (IllegalArgumentException e2) {
 						// 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);
-						}
+						ValidationPlugin.getPlugin().handleException(e2);
 					}
-				} catch (IllegalArgumentException exc) {
+				} catch (IllegalArgumentException e) {
 					// 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);
-					}
+					ValidationPlugin.getPlugin().handleException(e);
+				} catch (Exception e) {
+					ValidationPlugin.getPlugin().handleException(e);
 				}
 			}
 		}
@@ -522,24 +419,15 @@
 		ValidatorMetaData vmd = getVMD(validator);
 		try {
 			helper = getHelper(validator);
-		} catch (InstantiationException exc) {
+		} catch (InstantiationException e) {
 			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);
-				}
+				ValidationPlugin.getPlugin().handleException(e);
 				return;
 			} catch (IllegalArgumentException exc2) {
 				logDisabledValidator(exc2);
@@ -551,29 +439,23 @@
 		}
 
 		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);
+			if (Tracing.isLogging()) {
+				String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(
+					ResourceConstants.VBF_EXC_INVALID_RESOURCE), 
+					new Object[]{message.getText(), getTargetObjectName(helper, message)});
+				Tracing.log("WorkbenchReporter-01: ", result); //$NON-NLS-1$
 			}
 			return;
 		}
 
-		ValidatorManager mgr = ValidatorManager.getManager();
 		if( validator instanceof IValidatorJob ){
-			cacheMessage( (IValidatorJob)validator, resource, validator.getClass(), message, getTargetObjectName(helper, message), getLocation(helper, message), getMarkerId(vmd, message) );
+			cacheMessage( (IValidatorJob)validator, resource, validator.getClass(), message, 
+				getTargetObjectName(helper, message), getLocation(helper, message), getMarkerId(vmd, message) );
 		}else
-			addMessage(resource, validator.getClass(), message, getTargetObjectName(helper, message), getLocation(helper, message),getMarkerId(vmd,message));
+			addMessage(resource, validator.getClass(), message, getTargetObjectName(helper, message), 
+				getLocation(helper, message),getMarkerId(vmd,message));
 	}
 
-	/**
-	 * @param vmd
-	 */
 	private String getMarkerId(ValidatorMetaData vmd, IMessage message) {
 		if (vmd.getMarkerIds() != null) {
 			if (vmd.getMarkerIds().length == 1)
@@ -582,10 +464,10 @@
 				String messageMarkerId = message.getMarkerId();
 				if (messageMarkerId != null && messageMarkerId.length() > 0) {
 					String firstMarkerId = vmd.getMarkerIds()[0];
-					String pluginQualifier = firstMarkerId.substring(0, firstMarkerId.lastIndexOf("."));
+					String pluginQualifier = firstMarkerId.substring(0, firstMarkerId.lastIndexOf(".")); //$NON-NLS-1$
 					String qualifiedMessageMarkerId = null;
 					if (messageMarkerId.indexOf(pluginQualifier) == -1)
-						qualifiedMessageMarkerId = pluginQualifier + "." + messageMarkerId;
+						qualifiedMessageMarkerId = pluginQualifier + "." + messageMarkerId; //$NON-NLS-1$
 					else
 						qualifiedMessageMarkerId = messageMarkerId;
 					if (Arrays.asList(vmd.getMarkerIds()).contains(qualifiedMessageMarkerId))
@@ -596,20 +478,11 @@
 		return null;
 	}
 
-	/**
-	 * @param exc
-	 */
-	private void logDisabledValidator(IllegalArgumentException exc) {
+	private void logDisabledValidator(IllegalArgumentException e) {
 		// 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);
-		}
+		ValidationPlugin.getPlugin().handleException(e);
 		return;
 	}
 
@@ -654,22 +527,14 @@
 		try {
 			//helper = vmd.getHelper(resource.getProject());
 			helper = getHelper(validator);
-		} catch (InstantiationException exc) {
+		} catch (InstantiationException e) {
 			// 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);
-			}
+			ValidationPlugin.getPlugin().handleException(e);
 
 			return;
 		}
@@ -699,22 +564,14 @@
 			//helper = vmd.getHelper(resource.getProject());
 			helper = getHelper( resource.getProject(), validator );
 		} 
-		catch (InstantiationException exc) {
+		catch (InstantiationException e) {
 			// 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);
-			}
+			ValidationPlugin.getPlugin().handleException(e);
 
 			return;
 		}
@@ -725,24 +582,16 @@
 	}
 	
 	private static void cacheMessage( IValidatorJob validator,
-				IResource resource,
-				Class clazz, IMessage message,
-				String targetObjectName,
-				String location,
-				String markerId ){
+		IResource resource,	Class clazz, IMessage message,
+		String targetObjectName, String location, String markerId ){
 		
-		if ((clazz == null) || (message == null) || (resource == null)) {
-			return;
-		}
-		ClassLoader cl = null;
-		if (cl == null) {
-			cl = clazz.getClassLoader();
-		}
+		if ((clazz == null) || (message == null) || (resource == null))return;
+		
+		ClassLoader cl = clazz.getClassLoader();
 		String text = message.getText(cl);
 		MessageInfo msgInfo = new MessageInfo(getUniqueId(clazz), resource, location,
-					text, targetObjectName, markerId, message );
+				text, targetObjectName, markerId, message );
 
-		ValidatorManager mgr = ValidatorManager.getManager();
-		mgr.cacheMessage( validator, msgInfo );
+		ValidatorManager.getManager().cacheMessage( validator, msgInfo );
 	}
-}
\ 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
index eef9e53..887f7cd 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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,22 +14,26 @@
 import java.util.List;
 
 import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.RegistryReader;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.wst.validation.internal.IProjectValidationHelper;
 
-public class ValidationHelperRegistryReader extends RegistryReader {
+public class ValidationHelperRegistryReader {
 
+	/** validationHelper - extension point name. */
 	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
-	 */
+	static final String ATT_ID = "id"; //$NON-NLS-1$ 
+	
+	/** helperClass - class that implements the extension. */
+	static final String ATT_HELPER_CLASS = "helperClass"; //$NON-NLS-1$
+	
+	private static ValidationHelperRegistryReader INSTANCE = null;
+	private List<IProjectValidationHelper> _validationHelpers;
+	
 	public ValidationHelperRegistryReader() {
-		super(ValidationPlugin.PLUGIN_ID, VALIDATION_HELPER);
 	}
 	
 	public static ValidationHelperRegistryReader getInstance() {
@@ -39,11 +43,42 @@
 		}
 		return INSTANCE;
 	}
+
+	/**
+	 * Read the extension point and parse it.
+	 */
+	public void readRegistry() {
+		IExtensionPoint point = Platform.getExtensionRegistry()
+			.getExtensionPoint(ValidationPlugin.PLUGIN_ID, VALIDATION_HELPER);
+		if (point == null)return;
+		IConfigurationElement[] elements = point.getConfigurationElements();
+		for (int i = 0; i < elements.length; i++) {
+			internalReadElement(elements[i]);
+		}
+	}
 	
-	private List getValidationHelpers() {
-		if (validationHelpers == null)
-			validationHelpers = new ArrayList();
-		return validationHelpers;
+	private void internalReadElement(IConfigurationElement element) {
+		boolean recognized = this.readElement(element);
+		if (!recognized) {
+			logError(element, "Error processing extension: " + element); //$NON-NLS-1$
+		}
+	}
+
+	/*
+	 * Logs the error in the desktop log using the provided text and the information in the configuration element.
+	 */
+	protected void logError(IConfigurationElement element, String text) {
+		IExtension extension = element.getDeclaringExtension();
+		StringBuffer buf = new StringBuffer();
+		buf.append("Plugin " + extension.getContributor().getName() + ", extension " + extension.getExtensionPointUniqueIdentifier()); //$NON-NLS-1$ //$NON-NLS-2$
+		buf.append("\n" + text); //$NON-NLS-1$
+		ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, buf.toString());
+	}
+
+	private List<IProjectValidationHelper> getValidationHelpers() {
+		if (_validationHelpers == null)
+			_validationHelpers = new ArrayList<IProjectValidationHelper>();
+		return _validationHelpers;
 	}
 
 	public boolean readElement(IConfigurationElement element) {
@@ -61,9 +96,8 @@
 	}
 	
 	public IProjectValidationHelper getValidationHelper() {
-		if (getValidationHelpers().isEmpty())
-			return null;
-		return (IProjectValidationHelper) getValidationHelpers().get(0);
+		if (getValidationHelpers().isEmpty())return null;
+		return 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
index 1bec1c0..2b8b8dd 100644
--- 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
@@ -1,83 +1,78 @@
-/***************************************************************************************************
- * 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
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.validation.internal.plugin;
 
-import java.util.Locale;
-
+import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ProjectScope;
 import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.wst.common.frameworks.internal.WTPPlugin;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.wst.validation.ValidationFramework;
+import org.eclipse.wst.validation.internal.DependencyIndex;
 import org.eclipse.wst.validation.internal.EventManager;
-import org.eclipse.wst.validation.internal.TimeEntry;
+import org.eclipse.wst.validation.internal.ProjectUnavailableError;
+import org.eclipse.wst.validation.internal.ResourceUnavailableError;
+import org.eclipse.wst.validation.internal.Tracing;
 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;
+/**
+ * How does this plug-in get activated? There are many other plug-ins that depend on this plug-in, so there are
+ * many paths that will activate it. One common path is the J2EE perspective. If the J2EE plug-in start method, they
+ * reference a class in this plug-in, which activates the plug-in. For that case this plug-in will be active even before
+ * the workbench is up.
+ */
+public class ValidationPlugin extends Plugin {
+	public static final String 	VALIDATION_PROP_FILE_NAME = "validate_base"; //$NON-NLS-1$
+	
+	/** org.eclipse.wst.validation - the plug-in id */
+	public static final String 	PLUGIN_ID = "org.eclipse.wst.validation"; //$NON-NLS-1$
+	private static ValidationPlugin _plugin;
+	private static Message 		_message;
 	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);
-
-		}
+		if (_plugin == null)_plugin = this;
 	}
-
+	
+	/**
+	 * Answer the name of the bundle's property file.
+	 * 
+	 * @deprecated Use getBundlePropertyFileName() instead.
+	 */
 	public static String getBundleName() {
+		return getBundlePropertyFileName();
+	}
+
+	/**
+	 * Answer the name of the bundle's property file.
+	 */
+	public static String getBundlePropertyFileName() {
 		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());
+			_message.setBundleName(getBundlePropertyFileName());
 		}
 		// clear the message for reuse
 		_message.setId(null);
@@ -88,41 +83,10 @@
 		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)
@@ -130,20 +94,24 @@
 		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);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(EventManager.getManager(), 
+			IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_DELETE | 
+			IResourceChangeEvent.POST_BUILD | IResourceChangeEvent.PRE_BUILD | IResourceChangeEvent.POST_CHANGE);
+
+		DependencyIndex di = (DependencyIndex)ValidationFramework.getDefault().getDependencyIndex();
+		IWorkspace ws = ResourcesPlugin.getWorkspace();
+		ws.addSaveParticipant(this, di);
+//		ws.addResourceChangeListener(ValOperationManager.getDefault(), 
+//			IResourceChangeEvent.POST_BUILD | IResourceChangeEvent.PRE_BUILD);
+
 	}
 
-	/**
-	 * @see org.eclipse.core.runtime.Plugin#stop(BundleContext context)
-	 */
 	public void stop(BundleContext context) throws Exception {
 		super.stop(context);
 		ResourcesPlugin.getWorkspace().removeResourceChangeListener( EventManager.getManager() );		
+//		ResourcesPlugin.getWorkspace().removeResourceChangeListener( ValOperationManager.getDefault() );		
 		EventManager.getManager().shutdown();
 	}
 
@@ -156,5 +124,58 @@
 		return PLUGIN_ID;
 	}
 	
+	public static IEclipsePreferences getPreferences(IProject project){
+		IScopeContext projectContext = new ProjectScope(project);
+		return projectContext.getNode(PLUGIN_ID);
+	}
 	
-}
\ No newline at end of file
+	/**
+	 * Write this exception to the log.
+	 * <p>
+	 * We are in the transition of moving to a new approach for localized messages. This is the new 
+	 * approach for exceptions.
+	 * 
+	 * @param e the throwable, this can be null in which case it is a nop.
+	 */
+	public void handleException(Throwable e){
+		handleException(e, IStatus.ERROR);
+	}
+	
+	/**
+	 * Write this exception to the log.
+	 * <p>
+	 * We are in the transition of moving to a new approach for localized messages. This is the new 
+	 * approach for exceptions.
+	 * 
+	 * @param e the throwable, this can be null in which case it is a nop.
+	 * @param severity the severity of the message. This must be one of the IStatus severities. 
+	 */
+	public void handleException(Throwable e, int severity){
+		if (e == null)return;
+		Status status = new Status(severity, PLUGIN_ID, e.getLocalizedMessage(), e);
+		getLog().log(status);
+	}
+	
+	public void handleProjectUnavailableError(ProjectUnavailableError e){
+		if (Tracing.isLogging())handleException(e);
+	}
+	
+	public void handleResourceUnavailableError(ResourceUnavailableError e){
+		if (Tracing.isLogging())handleException(e);
+	}
+	
+	/** 
+	 * Write a message into the log. 
+	 * 
+	 * We are in the transition of moving to a new approach for localized messages. This is the new 
+	 * approach for exceptions.
+	 * 
+	 * @param severity message severity, see IStaus
+	 * @param message a localized message
+	 */
+	public void logMessage(int severity, String message){
+		Status status = new Status(severity, PLUGIN_ID, message);
+		getLog().log(status);
+		
+	}	
+}
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/EmptySchedulingRule.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/EmptySchedulingRule.java
index d59249a..dacb599 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/EmptySchedulingRule.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/EmptySchedulingRule.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * 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.validation.internal.core;
 
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
@@ -12,11 +22,4 @@
     public boolean isConflicting(ISchedulingRule rule) {
          return rule == this;
     }
-    
-    
-//    public static ISchedulingRule getDefaultRule(){
-//    	IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory();
-//    	EmptySchedulingRule emptyRule = new EmptySchedulingRule();
-//		ISchedulingRule rule = MultiRule.combine(ruleFactory.markerRule(fileResource), emptyRule);    	
-//    }
 }
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
index a0229a5..04e6ba7 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 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
  *******************************************************************************/
@@ -24,8 +24,8 @@
  *   a typical client would need to create one of these.]
  */
 public class FileDelta implements IFileDelta {
-	private int fileDelta = 0;
-	private String fileName = null;
+	private int fileDelta;
+	private String fileName;
 
 	/**
 	 * <p>
@@ -81,4 +81,4 @@
 	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
index 170a74b..b848eed 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 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
  *******************************************************************************/
@@ -26,9 +26,15 @@
  *  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
+	
+	/** 1 - the file has been added */
+	int ADDED = 1;
+	
+	/** 2 - the file has been changed */
+	int CHANGED = 2;
+	
+	/** 3 - the file has been deleted */
+	int DELETED = 3;
 
 	/**
 	 * <p>
@@ -42,7 +48,7 @@
 	 *  to be validated. Can you provide a use case where the type of change is needed for
 	 *  validation? ]
 	 */
-	public int getDeltaType();
+	int getDeltaType();
 
 	/**
 	 * <p>
@@ -55,5 +61,5 @@
 	 * [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
+	String getFileName();
+}
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
index 88d6eca..af85f64 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 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
  *******************************************************************************/
@@ -31,7 +31,7 @@
 	 *            messages".
 	 * @return List list of messages related to the target object
 	 */
-	public abstract List getMessages(MessageFilter filter);
+	abstract List getMessages(MessageFilter filter);
 
 	/**
 	 * @param filter
@@ -43,5 +43,5 @@
 	 * @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
+	abstract List getMessagesAsText(MessageFilter filter, Locale targetLocale);
+}
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
index 99a9f46..8998112 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 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
  *******************************************************************************/
@@ -59,17 +59,17 @@
  * ]
  */
 public class Message implements IMessage {
-	private String id = null;
-	private String[] params = null;
+	private String id;
+	private String[] params;
 	private int severity = MessageFilter.ANY_SEVERITY;
-	private Object targetObject = null;
-	private String bundleName = null;
-	private String groupName = null;
+	private Object targetObject;
+	private String bundleName;
+	private String groupName;
 	private int lineNumber = IMessage.LINENO_UNSET;
 	private int length = IMessage.OFFSET_UNSET;
 	private int offset = IMessage.OFFSET_UNSET;
-	private HashMap messageAttributes;
-	private String markerId = null;
+	private HashMap<String, Object> messageAttributes;
+	private String markerId;
 
 	/**
 	 * <p>
@@ -284,7 +284,7 @@
 			message = bundle.getString(getId());
 
 			if (getParams() != null) {
-				message = java.text.MessageFormat.format(message, getParams());
+				message = java.text.MessageFormat.format(message, (Object[])getParams());
 			}
 		} catch (MissingResourceException exc) {
 			System.err.println(exc.getMessage());
@@ -379,12 +379,12 @@
 
 	public void setAttribute(String attributeName, Object value) {
 		if(messageAttributes == null) {
-			messageAttributes = new HashMap();
+			messageAttributes = new HashMap<String, Object>();
 		}
 		messageAttributes.put(attributeName,value);
 	}
 	
-	public HashMap getAttributes() {
+	public HashMap<String,Object> getAttributes() {
 		return messageAttributes;
 	}
 
@@ -395,4 +395,4 @@
 	public void setMarkerId(String markerId) {
 		this.markerId = markerId;
 	}
-}
\ 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
index a380061..a8e97a3 100644
--- 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
@@ -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
  *******************************************************************************/
@@ -126,4 +126,4 @@
 	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
index e5fb20a..f8970a7 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 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
  *******************************************************************************/
@@ -25,9 +25,9 @@
  * </p>
  */
 public class ValidationException extends Exception {
-	private Throwable _lowLevelException = null;
-	private IMessage _message = null;
-	private ClassLoader _loader = null;
+	private Throwable _lowLevelException;
+	private IMessage _message;
+	private ClassLoader _loader;
 	private final static long serialVersionUID = -3387516993124229949L;
 
 
@@ -162,4 +162,4 @@
 		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
index 8d90e0c..f053410 100644
--- 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
@@ -1,22 +1,19 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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.ArrayList;
 import java.util.Iterator;
-import java.util.logging.Level;
+import java.util.List;
 
 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.TaskListUtility;
 import org.eclipse.wst.validation.internal.operations.MessageInfo;
 import org.eclipse.wst.validation.internal.operations.ValidatorManager;
@@ -26,23 +23,14 @@
 import org.eclipse.wst.validation.internal.provisional.core.IValidator;
 import org.eclipse.wst.validation.internal.provisional.core.IValidatorJob;
 
-
-
 /**
- * <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;
+	private static ValidatorLauncher _launcher;
 
-	
-	/**
-	 * Default constructor 
-	 */
 	private ValidatorLauncher() {
-		//Default constructor
 	}
 
 	/**
@@ -60,9 +48,7 @@
 	 * 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>
+	 * <p>
 	 * 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.
@@ -73,25 +59,15 @@
 	 * @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.
+	 * 			Is an instance of an IReporter interface, which is used for interaction with the user.
 	 */
 	public void start(final IValidationContext helper, final IValidator validator, final IReporter reporter) throws ValidationException {
-		if ((helper == null) || (validator == null) || (reporter == null)) {
-			return;
-		}
+		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;
-		}
+		// 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.
@@ -107,7 +83,7 @@
 			//the  validators who have implemented IValidatorJob but are running synchronously
 			//would log messages now ...
 			ValidatorManager mgr = ValidatorManager.getManager();
-			final ArrayList list = mgr.getMessages((IValidatorJob)validator);
+			final List list = mgr.getMessages((IValidatorJob)validator);
 
 	    	Iterator it = list.iterator();
 			while( it.hasNext() ){
@@ -115,16 +91,12 @@
 				try {
 				TaskListUtility.addTask( info.getMessageOwnerId(), info.getResource(),
 							info.getLocation(), info.getMsg().getId(), info.getText(),
-							info.getMsg().getSeverity(), info.getTargetObjectName(),
+							info.getMsg().getSeverity(), info.getMarkerId(), 
+							info.getTargetObjectName(),
 							info.getMsg().getGroupName(), info.getMsg().getOffset(), info.getMsg().getLength());
 				
-				} catch (CoreException exc) {
-					Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setTargetException(exc);
-						logger.write(Level.SEVERE, entry);
-					}
+				} catch (CoreException e) {
+					ValidationPlugin.getPlugin().handleException(e);
 				}										
 			}
 			mgr.clearMessages( (IValidatorJob)validator );
@@ -132,4 +104,4 @@
 
 	}
 	
-}
\ 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
index 28de1c3..5550942 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -22,9 +22,16 @@
  * 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>
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
+ */
+public interface IMessage {
+	/*
  * 
  * [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?
@@ -46,57 +53,67 @@
  *   - 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;
+	 */
+	int OFFSET_UNSET = -1; // see getLength(), getOffset()
+	int LINENO_UNSET = 0;
+	
 	/**
 	 * Typically used to specify error messages.
 	 */
-	public static final int HIGH_SEVERITY = 0x0001;
+	int HIGH_SEVERITY = 0x0001;
 	/**
 	 * Typically used to specify warning messages.
 	 */
-	public static final int NORMAL_SEVERITY = 0x0002;
+	int NORMAL_SEVERITY = 0x0002;
 	/**
 	 * Typically used to specify information messages.
 	 */
-	public static final int LOW_SEVERITY = 0x0004;
+	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;
+	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;
+	int ALL_MESSAGES = ERROR_AND_WARNING | LOW_SEVERITY;
+	
+	/** 
+	 * TargetResource - The key to use when associating a resource with a message via an
+	 * attribute. 
+	 * <p>
+	 * Normally, the target is stored using the setTargetObject() method, but
+	 * some of the legacy validators used this field for objects that where not IResources.
+	 * In order to associate the message with the proper IResource the validator can store
+	 * the IResource as an attribute and use this string as the key.
+	 * </p>
+	 */
+	String TargetResource = "TargetResource"; //$NON-NLS-1$
 
 	/**
 	 * @return the name of the bundle which this message is contained in.
 	 */
-	public String getBundleName();
+	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();
+	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();
+	String getId();
 
 	/**
 	 * @return the length of the problem area, starting from the offset. If unset, value =
@@ -104,41 +121,35 @@
 	 * 
 	 * @see #getOffset()
 	 */
-	public int getLength();
+	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.
 	 * 
+	 * @return line number of the location of the problem.
 	 */
-	public int getLineNumber();
+	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>
+	 * 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.
 	 * 
 	 * @return offset of the message
 	 */
-	public int getOffset();
+	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>
+	 * substituted into parameter slots in localized message text descriptions.
 	 * 
 	 * @return parameters of the message
 	 */
-	public java.lang.String[] getParams();
+	String[] getParams();
 
 	/**
 	 * <p>
@@ -151,24 +162,22 @@
 	 * 
 	 * @return the severity level of the message
 	 */
-	public int getSeverity();
+	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();
+	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();
+	String getText();
 
 	/**
 	 * @param classLoader 
@@ -177,7 +186,7 @@
 	 * @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);
+	String getText(ClassLoader classLoader);
 
 	/**
 	 * @param locale
@@ -186,7 +195,7 @@
 	 * @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);
+	String getText(Locale locale);
 
 	/**
 	 * @param locale
@@ -197,21 +206,22 @@
 	 * @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);
+	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
+	 * that can used by some other parties that are interested in those attribute values.
+	 * 
 	 * @param attributeName
 	 * @return an Object basically the value associated with the object name.
 	 */
 	
-	public Object getAttribute(String attributeName);
+	 Object getAttribute(String attributeName);
 	
 	/**
-	 * Set the attributeName and value as key value pair
-	 * @see getAttribute(String attributeName).
+	 * Set the attributeName and value as key value pair.
+	 * 
+	 * @see #getAttribute(String attributeName)
 	 * @param attributeName
 	 */
 	
@@ -224,85 +234,77 @@
 	 * @param bundleName 
 	 * 			Name of the bundle which contains the message.
 	 */
-	public void setBundleName(String bundleName);
+	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);
+	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);
+	void setId(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 		
+	 *			Sets the length. 		
 	 */
-	public void setLength(int length);
+	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. 	
+	 *			Sets the line number.
 	 */
-	public void setLineNo(int lineNumber);
+	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>
+	 * 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.
+	 * 
 	 * @param offset 
-	 *			sets the offset of the message.
+	 *			Sets the offset of the message.
 	 */
-	public void setOffset(int offset);
+	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,
+	 * has it's parameters set.
 	 * </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.
+	 *            Parameters of the message.
 	 */
-	public void setParams(java.lang.String[] newParams);
+	void setParams(String[] newParams);
 
 	/**
 	 * Sets the severity level of the message. One of SeverityEnum constants.
@@ -312,36 +314,33 @@
 	 * @see IMessage#LOW_SEVERITY
 	 * 
 	 * @param newSeverity
-	 *            severity level of the message
+	 *            Severity level of the message.
 	 */
-	public void setSeverity(int newSeverity);
+	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);
+	void setTargetObject(Object obj);
 	
 	/**
-	 * return all the attributes of a Message object
-	 * @return
+	 * Return all the attributes of a Message object.
 	 */
-	public HashMap getAttributes();
+	HashMap getAttributes();
 	
 	/**
-	 * return the marker id if one is set on this object when created
+	 * Return the marker id if one is set on this object when created.
 	 */
-	public String getMarkerId();
+	String getMarkerId();
 	
 	/**
-	 * set the marker id on a Message object
+	 * Set the marker id on a Message object.
 	 */
-	 public void setMarkerId(String markerId);
-}
\ No newline at end of file
+	 void setMarkerId(String markerId);
+}
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IMetaModelContext.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IMetaModelContext.java
index 37a9cfe..1ffef39 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IMetaModelContext.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IMetaModelContext.java
@@ -10,6 +10,14 @@
  *******************************************************************************/
 package org.eclipse.wst.validation.internal.provisional.core;
 
+/**
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
+ */
 public interface IMetaModelContext extends IValidationContext {
 	
 	public Object getModel(String URI);
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IProjectValidationContext.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IProjectValidationContext.java
index 95533db..4210353 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IProjectValidationContext.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IProjectValidationContext.java
@@ -17,11 +17,10 @@
  * IProjectValidationContext extends IValidationContext to provide access to a
  * reference to the project on which a validator is being invoked.
  * <p>
- * <b>Note:</b> This class/interface 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.
+ * <b>Provisional API:</b> This class/interface 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.
  * </p>
  */
 public interface IProjectValidationContext extends IValidationContext
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
index a2cd946..3005139 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.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,6 @@
 
 import java.util.List;
 
-
-
-
 /*
  * CCM - Reporter is now passed locale-independent messages.
  *       Messages should only be translated to a locale upon access.
@@ -25,17 +22,24 @@
  * 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
- * 
+ * <p>
+ * Reporter implementations should keep non-localized versions of their messages.
+ * </p>
+ * <p>
  * 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.
- * 
+ * </p>
+ * <p>
  * 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. 
- * ] 
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
  */
 public interface IReporter {
 	/**
@@ -55,110 +59,104 @@
 	 * @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. ]
+	 *            A message to be reported.
 	 */
-	public abstract void addMessage(IValidator origin, IMessage message);
+	void addMessage(IValidator origin, IMessage message);
 
 	/**
+	 * 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
 	 * <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. 
+	 * 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.
-	 *                       
+	 * @param validator
+	 * 		The validator issuing the subtask message.
+	 * @param message
+	 * 		The message to be displayed to the user.
+	 * 
 	 */
-	public abstract void displaySubtask(IValidator validator, IMessage message);
+	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();
+	List getMessages();
 
 	/**
-	 * <p>
-	 * Return true if the user cancelled validation, and false otherwise. This method should be
+	 * Return true if the user canceled 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
+	 * user canceled 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.
+	 * @return true if the user canceled validation, and false otherwise.
 	 *  
 	 */
-	public abstract boolean isCancelled();
+	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.  
+	 * 			Originator validator of the message.  
 	 */
-	public abstract void removeAllMessages(IValidator origin);
+	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>
+	 * 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>
+	 * 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);
+	 * @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.
+	 * 
+	 */
+	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>
+	 * 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. 
+	 * <p>
+	 * The IValidator parameter must not be null.
+	 * </p>
+	 * <p>
+	 * 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.)
+	 * </p>
+	 * <p>
+	 * If groupName is null, that's the same as no group (i.e., the same
+	 * behaviour as the <code>removeAllMessages(IValidator, Object)</code>
+	 * method.)
+	 * </p>
 	 * 
-	 * 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 validator
+	 * 		Originator validator of the message.
+	 * @param obj
+	 * 		Object to which the message belongs.
 	 * @param groupName
-	 * 			name of the group to which the message belongs. 
+	 * 		Name of the group to which the message belongs.
 	 */
-	public void removeMessageSubset(IValidator validator, Object obj, String groupName);
-}
\ No newline at end of file
+	void removeMessageSubset(IValidator validator, Object obj, String groupName);
+}
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
index 135a80f..54a8ce5 100644
--- 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
@@ -1,27 +1,23 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 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
  *******************************************************************************/
 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 
+ * as-you-type or builder based 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 as-you-type and one for 
+ * builder based. 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>
@@ -32,30 +28,43 @@
  * <code>loadModel</code> method. An IValidationContext can support more than one IValidator; 
  * the helper needs to support every model that each validator needs.
  * </p>
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
  */
 public interface IValidationContext {
 	/**
 	 * <p>
-	 * Load the model identified by <code>symbolicName</code>.<code>symbolicName</code> 
+	 * 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.
-	 * 
+	 * as-you-type and builder based validation.
+	 * </p>
+	 * <p>
 	 * 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
+	 * 
+	 * @see <code>WorkbenchContext</code>
 	 */
-	public Object loadModel(String symbolicName);
+	Object loadModel(String symbolicName);
 
+	/*
+	 * 
+	 * [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.]
+	 */
 	/**
 	 * <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
+	 * needs to be run in both as-you-type and builder based validation. 
+	 * If <code>parms</code> is null then this
 	 * method behaves the same as
 	 * 
 	 * @link #loadModel(String).
@@ -65,20 +74,17 @@
 	 * 		 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.]
+	 * @param symbolicName String identifier for model.
+	 * @param parms 	   List of parameters that the model takes for invocation.
 	 */
-	public Object loadModel(String symbolicName, Object[] parms);
+	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
+	 * case of Incremental build.
 	 */
 	
-	public String[] getURIs();
+	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
index 366df5f..6fbd55e 100644
--- 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
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 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
  *******************************************************************************/
@@ -15,57 +15,60 @@
 /**
  * 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>
+ * determines the rules. 
+ * <p>
  * 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>
+ * full validation but incremental validation is optional.
+ * </p>
+ * <p>
+ * Each validator must not be tied to any particular workbench implementation.
+ * </p>
+ * <p>
  * 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. ]   
+ * </p>
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
  */
 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.
+	 * 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.
 	 * 
+	 * @param reporter Used for the interaction with the user.
+	 */
+	void cleanup(IReporter reporter);
+
+	/*
 	 * [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
+	/**
+	 * This is the method which performs the validation on the objects.
+	 * <p>
+	 * <code>helper</code> and <code>reporter</code> may not be null. <code>changedFiles</code>
+	 * may be null, if a full build is desired. <br>
+	 * </p>
+	 * @param helper 
+	 * 			Loads an object. 
+	 * @param reporter
+	 * 			Is an instance of an IReporter interface, which is used for interaction with the user.
+	 * 
+	 */
+	void validate(IValidationContext helper, IReporter reporter) throws ValidationException;
+}
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidatorJob.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidatorJob.java
index 595151b..a25e7bb 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidatorJob.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidatorJob.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 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
  *******************************************************************************/
@@ -18,37 +18,36 @@
 /**
  * This is the Job interface for the validator. Validators implementing this interface are executed as
  * background jobs. 
- * Following is a  sequence of  call  <br/>
- * validator.getSchedulingRule(helper) <br/>
- * validator.validate(reporter)
+ * Following is a sequence of  calls:
+ * <ul>
+ * <li>validator.getSchedulingRule(helper)
+ * <li>validator.validate(reporter)
+ * </ul>
  */
-
 public interface IValidatorJob extends IValidator{
 
-	public static IStatus OK_STATUS = new Status(IStatus.OK, "org.eclipse.wst.validation", 0, "OK", null); //$NON-NLS-1$ //$NON-NLS-2$
+	IStatus OK_STATUS = new Status(IStatus.OK, "org.eclipse.wst.validation", 0, "OK", null); //$NON-NLS-1$ //$NON-NLS-2$
 	
 
 
 	/**
-	 * This is the method which performs the validation on the objects. <br>
-	 * <br>
+	 * This is the method which performs the validation on the objects.
+	 * <p>
 	 * <code>reporter</code> may not be null. <code>changedFiles</code>
 	 * may be null, if a full build is desired. <br>
-	 * <br>
+	 * </p>
      *
 	 * @param reporter
 	 *            Is an instance of an IReporter interface, which is used for interaction with the
 	 *            user.
-	 * @param helper will not be null,
-	 *		loads an object.
+	 * @param helper Will not be null, loads an object.
 	 */
-	public IStatus validateInJob(IValidationContext helper, IReporter reporter) throws ValidationException;
+	IStatus validateInJob(IValidationContext helper, IReporter reporter) throws ValidationException;
 
 	/**
-	 * Get the scheduling rule, which the framework applies to the Validator job, 
-	 * @param helper will not be null,
-	 *		loads an object.
-	 * @return
+	 * Get the scheduling rule, which the framework applies to the Validator job.
+	 * 
+	 * @param helper Will not be null, loads an object.
 	 */
-	public ISchedulingRule getSchedulingRule(IValidationContext helper);
-}
\ No newline at end of file
+	ISchedulingRule getSchedulingRule(IValidationContext helper);
+}
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
index 4a9c63e..3a86bf4 100644
--- 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
@@ -1,29 +1,30 @@
 /*******************************************************************************
- * 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
  * 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. ]
+ */
+/**
+ * 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.
  *  @deprecated This class is not longer used by the framework. The framework is
  *  not going to limit the number of messages displayed by a 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/validate_core/org/eclipse/wst/validation/internal/provisional/core/package.html b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/package.html
new file mode 100644
index 0000000..70bdb29
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/package.html
@@ -0,0 +1,9 @@
+<html>
+<head>
+<title>Validation Framework (Version 1)</title>
+</head>
+<body>
+<p>An earlier framework for calling validators that are build based.</p>
+<p>This framework is being replaced by the <code>newer org.eclipse.wst.validation</code> framework.</p>
+</body>
+</html>
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/AbstractValidator.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/AbstractValidator.java
new file mode 100644
index 0000000..83c1d55
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/AbstractValidator.java
@@ -0,0 +1,194 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.wst.validation.Validator.V2;
+
+/**
+ * The class that all Validators that wish to use version two of the validation framework must subclass.
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
+ * @author karasiuk
+ *
+ */
+public abstract class AbstractValidator {
+	
+	private V2 _parent;
+	
+	/**
+	 * Validate the resource. The validator is called from a WorkspaceJob, so
+	 * the validator itself does not need to establish it's own IWorkspaceRunnable.
+	 * <p>
+	 * If you override this method then you should not override the other validate method.
+	 * </p>
+	 * 
+	 * @param resource
+	 * 		The resource to be validated.
+	 * 
+	 * @param kind
+	 * 		The way the resource changed. It uses the same values as the kind
+	 * 		parameter in IResourceDelta.
+	 * 
+	 * @param state
+	 * 		A way to pass arbitrary, validator specific, data from one
+	 * 		invocation of a validator to the next, during the validation phase.
+	 * 		At the end of the validation phase, this object will be cleared,
+	 * 		thereby allowing any of this state information to be garbaged
+	 * 		collected.
+	 * 
+	 * @param monitor
+	 * 		A monitor that you can use to report your progress. To be a well
+	 * 		behaved validator you need to check the isCancelled() method at
+	 * 		appropriate times.
+	 * 
+	 * @return the result of the validation. This may be, but usually isn't, null.
+	 */
+	public ValidationResult validate(IResource resource, int kind, ValidationState state, IProgressMonitor monitor){
+		return null;
+	}
+	
+	/**
+	 * Validate the resource. The validator is called from a WorkspaceJob, so
+	 * the validator itself does not need to establish it's own
+	 * IWorkspaceRunnable.
+	 * <p>
+	 * If you override this method then you should not override the other
+	 * validate method.
+	 * </p>
+	 * 
+	 * @param event
+	 *            An object that describes the resource to be validated and why
+	 *            it should be validated.
+	 * 
+	 * @param state
+	 *            A way to pass arbitrary, validator specific, data from one
+	 *            invocation of a validator to the next, during the validation
+	 *            phase. At the end of the validation phase, this object will be
+	 *            cleared, thereby allowing any of this state information to be
+	 *            garbaged collected.
+	 * 
+	 * @param monitor
+	 *            A monitor that you can use to report your progress. To be a
+	 *            well behaved validator you need to check the isCancelled()
+	 *            method at appropriate times.
+	 * 
+	 * @return the result of the validation. Null should never be returned. If
+	 *         null is returned then the other validate method will be called as
+	 *         well.
+	 */
+	public ValidationResult validate(ValidationEvent event, ValidationState state, IProgressMonitor monitor){
+		return null;
+	}
+	
+	
+	/**
+	 * A call back method that lets the validator know that the project is being
+	 * cleaned. This method gives the validator a chance to do any special
+	 * cleanup. The default is to do nothing.
+	 * <p>
+	 * If the entire workspace is being cleaned, then the first call will have a
+	 * null project, and then there will be subsequent calls for each open
+	 * project in the workspace.</p>
+	 * 
+	 * @param project
+	 * 		The project being cleaned. This may be null, which is an indication
+	 * 		that the workspace is being cleaned.
+	 * 
+	 * @param state
+	 * 		A way to pass arbitrary, validator specific, data from one
+	 * 		invocation of a validator to the next, during the validation phase.
+	 * 
+	 * @param monitor
+	 * 		The monitor that should be used for reporting progress if the clean
+	 * 		takes a long time.
+	 */
+	public void clean(IProject project, ValidationState state, IProgressMonitor monitor){		
+	}
+		
+	/**
+	 * This method is called before any validation takes place. It allows
+	 * validators to perform any initialization that they might need.
+	 * 
+	 * @param project
+	 * 		The project that is being validated. For the very first call in the
+	 * 		validation phase, this will be null. A null project is the signal
+	 * 		that a top level validation is starting. Subsequently, the project
+	 * 		will be set, as each of the individual projects are validated.
+	 * 
+	 * @param state
+	 * 		A way to pass arbitrary, validator specific, data from one
+	 * 		invocation of a validator to the next, during the validation phase.
+	 * 
+	 * @param monitor
+	 * 		The monitor that should be used for reporting progress if the initialization
+	 * 		takes a long time.
+	 */
+	public void validationStarting(IProject project, ValidationState state, IProgressMonitor monitor){		
+	}
+	
+	/**
+	 * This method will be called when validation is complete. It allows
+	 * validators to perform any cleanup that they might need to do.
+	 * 
+	 * @param project
+	 * 		The project that was validated. The very last call in the validation
+	 * 		sets this to null so that the validator knows that all the
+	 * 		projects have now been validated.
+	 * 
+	 * @param state
+	 * 		A way to pass arbitrary, validator specific, data from one
+	 * 		invocation of a validator to the next, during the validation phase.
+	 * 
+	 * @param monitor
+	 * 		The monitor that should be used for reporting progress if the cleanup
+	 * 		takes a long time.
+	 */
+	public void validationFinishing(IProject project, ValidationState state, IProgressMonitor monitor){		
+	}
+	
+	/**
+	 * Should the validation framework first clear the markers that this
+	 * validator has placed on this resource? This method can be overridden by
+	 * validator implementors to provide a validator specific behavior.
+	 * 
+	 * @param event
+	 *            The validation event that triggered the validation.
+	 * @return true if the validation framework should first clear all the
+	 *         markers that this validator produced. This is the default
+	 *         behavior. Return false to leave the markers unchanged. It then
+	 *         becomes the responsibility of the validator to manage it's own
+	 *         markers for this resource, for this validation event.
+	 */
+	public boolean shouldClearMarkers(ValidationEvent event){
+		return true;
+	}
+		
+	/**
+	 * Answer the validator that you belong to. The validator controls the
+	 * filters and various other settings.
+	 * 
+	 * @nooverride
+	 */
+	public V2 getParent(){
+		return _parent;
+	}
+	
+	void setParent(V2 parent){
+		_parent = parent;
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/DependentResource.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/DependentResource.java
new file mode 100644
index 0000000..3f1c67d
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/DependentResource.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 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.validation;
+
+import org.eclipse.core.resources.IResource;
+
+/**
+ * A resource that is dependent on another resource.
+ * <p>
+ * This is returned by the IDependencyIndex.
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
+ * @noextend
+ * @see IDependencyIndex
+ * @author karasiuk
+ *
+ */
+public class DependentResource {
+	private IResource 	_resource;
+	private Validator	_validator;
+	
+	/**
+	 * @noreference
+	 */
+	public DependentResource(IResource resource, Validator validator){
+		_resource = resource;
+		_validator = validator;
+	}
+	
+	/**
+	 * Answer the resource that is depended on.
+	 */
+	public IResource getResource() {
+		return _resource;
+	}
+	
+	/**
+	 * Answer the validator that asserted the dependency.
+	 */
+	public Validator getValidator() {
+		return _validator;
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/Friend.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/Friend.java
new file mode 100644
index 0000000..4146636
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/Friend.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+import java.util.Map;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.wst.validation.internal.ContentTypeWrapper;
+import org.eclipse.wst.validation.internal.ValType;
+
+/**
+ * This class is only to be called by the validation framework and it's test cases.
+ * This class is NOT part of the API.
+ * <p>
+ * This class provides access to some internal methods.
+ * </p>
+ * @author karasiuk
+ *
+ */
+public class Friend {
+	
+	public static void setMessages(Validator validator, Map<String, MessageSeveritySetting> map) {
+		validator.setMessages(map);
+	}
+	
+	/**
+	 * Has the validator's implementation been loaded yet? This is used by some test cases to ensure that 
+	 * plug-ins are not loaded too early.
+	 */
+	public static boolean isLoaded(Validator validator){
+		return validator.isLoaded();
+	}
+	
+	public static boolean shouldValidate(Validator validator, IResource resource, boolean isManual, boolean isBuild, 
+			ContentTypeWrapper contentTypeWrapper){
+		return validator.shouldValidate(resource, isManual, isBuild, contentTypeWrapper);
+	}
+	
+	public static boolean shouldValidate(Validator validator, IResource resource, ValType valType, 
+		ContentTypeWrapper contentTypeWrapper){
+		
+		return validator.shouldValidate(resource, valType, contentTypeWrapper);		
+	}
+	
+	public static void setMigrated(Validator validator, boolean migrated){
+		validator.setMigrated(migrated);
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IDependencyIndex.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IDependencyIndex.java
new file mode 100644
index 0000000..d9d494b
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IDependencyIndex.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+
+/**
+ * This service is used to specify the resources that a particular resource depends on.
+ * <p>
+ * This is an optional service, validators do not need to use this Interface and can simply supply
+ * their dependency information through the ValidationResult return result.
+ * </p>
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
+ * @noimplement
+ * @see ValidationResult
+ * @author karasiuk
+ *
+ */
+public interface IDependencyIndex {
+	
+	/**
+	 * Assert that one resource depends on another resource as part of it's validity.
+	 * <p>
+	 * For example, if an XML file is dependent on an XSD file to be valid, the
+	 * resource that holds the XML file would be the dependent, and the resource
+	 * that holds the XSD would be the dependsOn.
+	 * </p>
+	 * 
+	 * @param id
+	 * 		The validator id that is asserting that the dependency exists.
+	 * @param dependent
+	 * 		The resource that is dependent on the other resource. For example a XML file.
+	 * @param dependsOn
+	 * 		The resource that this being depended on. For example a XSD file.
+	 */
+	void add(String id, IResource dependent, IResource dependsOn);
+	
+	/**
+	 * Remove all the dependency assertions for this project.
+	 * 
+	 * @param project
+	 * 		The project that will have it's dependency assertions removed.
+	 */
+	void clear(IProject project);
+	
+	/**
+	 * Answer all the resources that depend on this resource. For example, if
+	 * this resource was a XSD, this could answer all the XML files that
+	 * depended on it for their validity.
+	 * 
+	 * @param resource
+	 * 		A resource that other resources may depend on.
+	 * 
+	 * @return the dependent resources.
+	 */
+	List<DependentResource> get(IResource resource);
+	
+	/**
+	 * Answer all the resources that depend on this resource. For example, if
+	 * this resource was a XSD, this could answer all the XML files that
+	 * depended on it for their validity.
+	 * 
+	 * @param id
+	 * 		The validator id that asserted that the dependency exists.
+	 * @param resource
+	 * 		A resource that other resources may depend on.
+	 * 
+	 * @return the dependent resources. This method can return null or an empty array, if
+	 * 	there are no dependent resources.
+	 */
+	IResource[] get(String id, IResource resource);
+	
+	/**
+	 * Answer true if other resources depend on this resource.
+	 * 
+	 * @param resource
+	 * 		The resource being tested.
+	 * 
+	 * @return true if any of the validators asserted a dependency on this resource.
+	 */
+	boolean isDependedOn(IResource resource);
+	
+	/**
+	 * Replace all the resources that the dependent depends on.
+	 * 
+	 * @param id
+	 * 		The validator id that is asserting that the dependency exists.
+	 * @param dependent
+	 * 		The resource that is dependent on the other resource.
+	 * @param dependsOn
+	 * 		All the resources that are depended on. This can be null or a zero
+	 * 		length array. Null or a zero length array removes all the dependencies.
+	 */
+	void set(String id, IResource dependent, IResource[] dependsOn);
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IMutableValidator.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IMutableValidator.java
new file mode 100644
index 0000000..90ebfb1
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IMutableValidator.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+/**
+ * A validator that has fields that can be updated.
+ * <p>
+ * The following procedure is used to change a Validator's settings.
+ * <ol>
+ * <li>An IMutableValidator is retrieved.</li>
+ * <li>The IMutableValidator is changed.</li>
+ * <li>The IMutableValidator is "activated".</li>
+ * </ol>
+ * </p>
+ * <p>The methods {@link ValidationFramework#getProjectSettings(org.eclipse.core.resources.IProject)} and 
+ * {@link ValidationFramework#getWorkspaceSettings()} can be used to retrieve IMutableValidator's.
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+
+ * @author karasiuk
+ *
+ */
+public interface IMutableValidator {
+	
+	/**
+	 * Answer the validator's id.
+	 */
+	String getId();
+	
+	/**
+	 * Answer the validator's name.
+	 */
+	String getName();
+	
+	/**
+	 * Answer the validator's class name.
+	 * @return
+	 */
+	String getValidatorClassname();
+	
+	/**
+	 * Answer if the validator is enabled for build based validation.
+	 */
+	boolean isBuildValidation();
+	
+	/**
+	 * Answer if the validator is enabled for manual based validation.
+	 */
+	boolean isManualValidation();
+	
+	/**
+	 * Set whether the validator should be enabled for build based validation.
+	 */
+	void setBuildValidation(boolean build);
+	
+	/**
+	 * Set whether the validator should be enabled for manual based validation.
+	 */	
+	void setManualValidation(boolean manual);
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IPerformanceMonitor.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IPerformanceMonitor.java
new file mode 100644
index 0000000..b951270
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IPerformanceMonitor.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+import java.util.List;
+
+/**
+ * A service that collects performance information on validation operations.
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @author karasiuk
+ *
+ */
+public interface IPerformanceMonitor {
+	
+	/**
+	 * The level of information to collect.
+	 */
+	public enum CollectionLevel {None, Default}
+	
+	/** 
+	 * Add this performance counter to the monitor. The monitor will decide what to 
+	 * do with the results, it may log them to a file, or it may simply hold on to them.
+	 * 
+	 * @param counters
+	 */
+	public void add(PerformanceCounters counters);
+	
+	/**
+	 * Answer true if the performance monitor is collecting performance events.
+	 */
+	public boolean isCollecting();
+	
+	/** Answer true if only summary information is requested. */
+	public boolean isSummaryOnly();
+	
+	/**
+	 * Set the performance event collection level. This controls which
+	 * performance events are collected, including none of them.
+	 * 
+	 * @param level
+	 * 		The level to collect. The default is to not collect anything.
+	 */
+	public void setCollectionLevel(CollectionLevel level);
+	
+	/**
+	 * Answer the level of performance events that are being collected by the validation framework.
+	 */
+	public CollectionLevel getCollectionLevel();
+	
+	/**
+	 * Answer the performance counters that have been collected so far. Some
+	 * monitors do not save counters, and they will always return an empty list.
+	 * 
+	 * @param asSummary
+	 * 		If this parameter is true, only answer a summary of the counters.
+	 */
+	public List<PerformanceCounters> getPerformanceCounters(boolean asSummary);
+	
+	/**
+	 * Delete the collected performance counters.
+	 */
+	public void resetPerformanceCounters();
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IValidatorGroupListener.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IValidatorGroupListener.java
new file mode 100644
index 0000000..5f4feee
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IValidatorGroupListener.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+/**
+ * Validators may wish to join validator groups for performance or other
+ * reasons. That way expensive operations like creating and releasing models can
+ * be done in a common location, and be done only once per resource. Group listeners
+ * are declared via the <code>org.eclipse.wst.validation.validatorGroup</code> extension point.
+ * <p>
+ * As validation proceeds, the validation framework, on a resource by resource
+ * bases, determines if any validators that are members of a group are
+ * interested in the resource. If they are, before the first validator in the
+ * group is called, the <code>validationStarting</code> method is called. If this method was
+ * called, then the <code>validationFinishing</code> method will be called once all the
+ * validators have processed the resource.
+ * </p>
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
+ */
+public interface IValidatorGroupListener {
+	/**
+	 * This is called before the first validator in the group that is interested
+	 * in the resource is called. If no validators in the group are interested
+	 * in the resource, then this method is not called.
+	 * 
+	 * @param resource
+	 *            The resource that is being validated.
+	 * @param monitor
+	 *            A progress monitor that the method should use.
+	 * @param state
+	 *            The validation state for the current operation.
+	 */
+	void validationStarting(IResource resource, IProgressMonitor monitor, ValidationState state);
+	
+	/**
+	 * If the validationStarting method was called on the resource, then this
+	 * method will be called after the last validator has processed the
+	 * resource.
+	 * 
+	 * @param resource
+	 * 		The resource that is being validated.
+	 * @param monitor
+	 * 		A progress monitor that the method can use.
+	 * @param state
+	 * 		The validation state for the current operation.
+	 */
+	void validationFinishing(IResource resource, IProgressMonitor monitor, ValidationState state);
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/MessageSeveritySetting.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/MessageSeveritySetting.java
new file mode 100644
index 0000000..4eaa3b7
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/MessageSeveritySetting.java
@@ -0,0 +1,140 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.wst.validation.internal.ValMessages;
+
+/**
+ * Associate a message severity with a message category.
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
+ * @noextend
+ * @author karasiuk
+ *
+ */
+public class MessageSeveritySetting {
+	public enum Severity {
+		Error(ValMessages.SevError, IMarker.SEVERITY_ERROR),
+		Warning(ValMessages.SevWarning, IMarker.SEVERITY_WARNING),
+		Ignore(ValMessages.SevIgnore, IMarker.SEVERITY_INFO);
+		
+		private String _severityLabel;
+		private Severity(String label, int markerSeverity){
+			_severityLabel = label;
+			_markerSeverity = markerSeverity;
+		}
+		private int		_markerSeverity;
+		
+		@Override
+		public String toString() {
+			return _severityLabel;
+		}
+
+		/**
+		 * Answer the associated IMarker severity.
+		 */
+		public int getMarkerSeverity() {
+			return _markerSeverity;
+		}
+		
+	}
+	
+	private String		_id;
+	private String 		_label;
+	private Severity 	_default;
+	private Severity 	_current;
+	
+	/**
+	 * Create an association between a label and a message severity.
+	 * 
+	 * @param id
+	 * 		An id that is used to identify this particular setting. This must be
+	 * 		unique within the scope of this particular validator.
+	 * 
+	 * @param label
+	 * 		An end user string, that can describe either an individual message
+	 * 		or a message category.
+	 * 
+	 * @param defaultSeverity
+	 * 		The default severity for this label. If the end user doesn't change
+	 * 		anything this is what the severity will be.
+	 */
+	public MessageSeveritySetting(String id, String label, Severity defaultSeverity){
+		_id = id;
+		_label = label;
+		_default = defaultSeverity;
+	}
+	
+	@Override
+	public int hashCode() {
+		int h = 0;
+		if (_current != null)h += _current.getMarkerSeverity()*1000;
+		if (_id != null)h += _id.hashCode();
+		return h;
+	}
+
+	public String getLabel() {
+		return _label;
+	}
+
+	/** Answer the default severity as defined by the validator owner. */
+	public Severity getDefault() {
+		return _default;
+	}
+
+	/** 
+	 * Answer the current severity for the message. The end user may have changed this through a
+	 * preference dialog.
+	 */
+	public Severity getCurrent() {
+		if (_current != null)return _current;
+		return _default;
+	}
+
+	/**
+	 * The id that the validator owner assigned to the message.
+	 */
+	public String getId() {
+		return _id;
+	}
+
+	/**
+	 * Set the current message severity.
+	 * 
+	 * @param severity
+	 * @return true if the setting changed
+	 */
+	public boolean setCurrent(Severity severity) {
+		if (_current == severity)return false;
+		_current = severity;
+		return true;
+	}
+	
+	@Override
+	public String toString() {
+		return _id + " " + getCurrent().toString(); //$NON-NLS-1$
+	}
+
+	/**
+	 * Answer a copy of this object.
+	 */
+	public MessageSeveritySetting copy() {
+		MessageSeveritySetting ms = new MessageSeveritySetting(_id, _label, _default);
+		ms._current = _current;
+		return ms;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/MutableProjectSettings.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/MutableProjectSettings.java
new file mode 100644
index 0000000..73bf21c
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/MutableProjectSettings.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+import org.eclipse.core.resources.IProject;
+
+/**
+ * This class holds the overall project validation settings.
+ * <p>
+ * The following procedure is used to change a project's Validation settings.
+ * <ol>
+ * <li>The MutableProjectSettings are retrieved.</li>
+ * <li>The MutableProjectSettings are changed.</li>
+ * <li>The MutableProjectSettings are "applied".</li>
+ * </ol>
+ * </p>
+ * <p>In order for a project's validation setting to be effective, both 
+ * {@link #getOverride()} and {@link MutableWorkspaceSettings#getOverride()}
+ * must be true.
+ * </p>
+ * <p>
+ * These settings can be retrieved with {@link ValidationFramework#getProjectSettings(IProject)}.
+ * </p>
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
+
+ * @author karasiuk
+ *
+ */
+public final class MutableProjectSettings {
+	private final IProject	_project;
+
+	private boolean _override;
+	private boolean	_suspend;
+	private final IMutableValidator[] _validators;
+	
+	public IMutableValidator[] getValidators() {
+		return _validators;
+	}
+
+	public MutableProjectSettings(IProject project, IMutableValidator[] validators){
+		_project = project;
+		_validators = validators;
+	}
+
+	/**
+	 * Can this project override the workspace level validation settings?
+	 */
+	public boolean getOverride() {
+		return _override;
+	}
+
+	/**
+	 * Change whether this project can override workspace level validation settings.
+	 * @param override Set to true if the project is allowed to override workspace level validation settings.
+	 */
+	public void setOverride(boolean override) {
+		_override = override;
+	}
+
+	/**
+	 * Is validation suspended for this project?
+	 */
+	public boolean getSuspend() {
+		return _suspend;
+	}
+
+	/**
+	 * Change whether this project is suspending it's validation.
+	 * @param suspend Set to true, to suspend validation for this project.
+	 */
+	public void setSuspend(boolean suspend) {
+		_suspend = suspend;
+	}
+
+	/**
+	 * Answer the project that these settings are for.
+	 */
+	public IProject getProject() {
+		return _project;
+	}
+
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/MutableWorkspaceSettings.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/MutableWorkspaceSettings.java
new file mode 100644
index 0000000..80d18f1
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/MutableWorkspaceSettings.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+import org.eclipse.wst.validation.internal.model.GlobalPreferencesValues;
+
+
+/**
+ * This class holds the overall workspace validation settings.
+ * <p>
+ * The following procedure is used to change a project's Validation settings.
+ * <ol>
+ * <li>The MutableWorkspaceSettings are retrieved.</li>
+ * <li>The MutableWorkspaceSettings are changed.</li>
+ * <li>The MutableWorkspaceSettings are "applied".</li>
+ * </ol>
+ * </p>
+ * <p>
+ * These settings can be retrieved with {@link ValidationFramework#getWorkspaceSettings()}.
+ * </p>
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
+
+ * @author karasiuk
+ *
+ */
+public final class MutableWorkspaceSettings {
+
+	private final GlobalPreferencesValues _values;
+	
+	private final IMutableValidator[] _validators;
+	
+	public IMutableValidator[] getValidators() {
+		return _validators;
+	}
+
+	public MutableWorkspaceSettings(IMutableValidator[] validators, GlobalPreferencesValues values){
+		_validators = validators;
+		_values = values;
+	}
+	
+	public GlobalPreferencesValues getGlobalPreferencesValues(){
+		return _values;
+	}
+	
+	public boolean getAutoSave() {
+		return _values.saveAutomatically;
+	}
+
+	public void setAutoSave(boolean autoSave) {
+		_values.saveAutomatically = autoSave;
+	}
+
+	/**
+	 * Can this project override the workspace level validation settings?
+	 */
+	public boolean getOverride() {
+		return _values.override;
+	}
+
+	/**
+	 * Change whether this project can override workspace level validation settings.
+	 * @param override Set to true if the project is allowed to override workspace level validation settings.
+	 */
+	public void setOverride(boolean override) {
+		_values.override = override;
+	}
+
+	/**
+	 * Is validation suspended for this project?
+	 */
+	public boolean getSuspend() {
+		return _values.disableAllValidation;
+	}
+
+	/**
+	 * Change whether this project is suspending it's validation.
+	 * @param suspend Set to true, to suspend validation for this project.
+	 */
+	public void setSuspend(boolean suspend) {
+		_values.disableAllValidation = suspend;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/PerformanceCounters.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/PerformanceCounters.java
new file mode 100644
index 0000000..cf57721
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/PerformanceCounters.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.validation.internal.Misc;
+import org.eclipse.wst.validation.internal.ValMessages;
+
+/**
+ * Some performance information for a validation invocation. This object is immutable.
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
+ * @noextend
+ * @author karasiuk
+ *
+ */
+public class PerformanceCounters {
+	
+	private long	_when;
+	private String 	_validatorId;
+	private String	_validatorName;
+	private String	_resourceName;
+	private int		_numberInvocations;
+	private	long	_elapsedTime;
+	private long	_cpuTime;
+	
+	/**
+	 * @param validatorId
+	 * @param validatorName
+	 * @param resourceName 
+	 * @param numberInvocations number of times the validator was invoked
+	 * @param elapsedTime elapsed time in milliseconds
+	 * @param cpuTime CPU time in nanoseconds
+	 */
+	public PerformanceCounters(String validatorId, String validatorName, String resourceName, 
+		int numberInvocations, long elapsedTime, long cpuTime){
+		
+		_when = System.currentTimeMillis();
+		_validatorId = validatorId;
+		_validatorName = validatorName;
+		_resourceName = resourceName;
+		_numberInvocations = numberInvocations;
+		_elapsedTime = elapsedTime;
+		_cpuTime = cpuTime;
+	}
+	
+	public String getValidatorId() {
+		return _validatorId;
+	}
+	public int getNumberInvocations() {
+		return _numberInvocations;
+	}
+	
+	/**
+	 * Answer the elapsed time in milliseconds. 
+	 */
+	public long getElapsedTime() {
+		return _elapsedTime;
+	}
+	
+	/**
+	 * Answer the amount of CPU time in nanoseconds. If this can not be determined,
+	 * answer -1.
+	 */
+	public long getCpuTime() {
+		return _cpuTime;
+	}
+	
+	@Override
+	public String toString() {
+		return NLS.bind(ValMessages.LogValEndTime,	
+			new Object[]{_validatorName, _validatorId, _resourceName, Misc.getTimeMS(_elapsedTime)});
+	}
+	
+	public String toString(boolean asSummary){
+		if (asSummary){
+			if (_cpuTime != -1)return NLS.bind(ValMessages.LogValSummary2, 
+				new Object[]{_validatorName, _validatorId, _numberInvocations, 
+					Misc.getTimeMS(_elapsedTime), Misc.getTimeNano(_cpuTime)});
+			
+			return NLS.bind(ValMessages.LogValSummary, 
+					new Object[]{_validatorName, _validatorId, _numberInvocations, Misc.getTimeMS(_elapsedTime)});
+		}
+		return toString();
+	}
+
+	public String getValidatorName() {
+		return _validatorName;
+	}
+
+	/** 
+	 * Answer when was the event logged. 
+	 * 
+	 * @see System#currentTimeMillis()
+	 */
+	public long getWhen() {
+		return _when;
+	}
+
+	public String getResourceName() {
+		return _resourceName;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ReporterHelper.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ReporterHelper.java
new file mode 100644
index 0000000..20876bf
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ReporterHelper.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.wst.validation.internal.MarkerManager;
+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;
+
+
+/**
+ * This is a temporary class to ease the transition from the previous validation framework.
+ * <p>
+ * This is not API. 
+ * @author karasiuk
+ *
+ */
+public class ReporterHelper implements IReporter {
+	private IProgressMonitor 	_monitor;
+	private List<IMessage>		_list = new LinkedList<IMessage>();
+	
+	public ReporterHelper(IProgressMonitor monitor){
+		_monitor = monitor;
+	}
+
+	public void addMessage(IValidator origin, IMessage message) {
+		_list.add(message);
+	}
+
+	public void displaySubtask(IValidator validator, IMessage message) {
+		_monitor.subTask(message.getText(validator.getClass().getClassLoader()));
+	}
+
+	public List<IMessage> getMessages() {
+		return _list;
+	}
+
+	public boolean isCancelled() {
+		return _monitor.isCanceled();
+	}
+
+	public void removeAllMessages(IValidator origin) {
+		_list.clear();
+	}
+
+	public void removeAllMessages(IValidator origin, Object object) {
+		_list.clear();
+	}
+
+	public void removeMessageSubset(IValidator validator, Object obj, String groupName) {
+		_list.clear();
+	}
+	
+	public void makeMarkers(){
+		MarkerManager.getDefault().makeMarkers(_list);
+	}
+	
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationEvent.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationEvent.java
new file mode 100644
index 0000000..528e58e
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationEvent.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceDelta;
+
+/**
+ * An object that describes which object should be validated and what triggered its validation.
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
+ * @author karasiuk
+ *
+ */
+
+public final class ValidationEvent {
+	
+	private IResource 		_resource;
+	private int				_kind;
+	private IResourceDelta 	_dependsOn;
+	
+	/**
+	 * Create an object that describes what should be validated.
+	 * 
+	 * @param resource
+	 *            The resource to be validated.
+	 * @param kind
+	 *            The way the resource changed. It uses the same values as the
+	 *            kind parameter in IResourceDelta.
+	 * @param dependsOn
+	 *            If the resource is being validated because one of it's
+	 *            dependencies has changed, that change is described here. This
+	 *            can be null.
+	 */
+	public ValidationEvent(IResource resource, int kind, IResourceDelta dependsOn){
+		_resource = resource;
+		_kind = kind;
+		_dependsOn = dependsOn;
+	}
+
+	/**
+	 * The resource to be validated.
+	 */
+	public IResource getResource() {
+		return _resource;
+	}
+
+	/**
+	 * The way the resource changed. It uses the same values as the kind
+	 * parameter in IResourceDelta.
+	 */
+	public int getKind() {
+		return _kind;
+	}
+
+	/**
+	 * If the resource is being validated because one of it's dependencies has changed, that change is described here.
+	 * This method will return null when the trigger is not because of a dependency change.
+	 */
+	public IResourceDelta getDependsOn() {
+		return _dependsOn;
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationFramework.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationFramework.java
new file mode 100644
index 0000000..17cc455
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationFramework.java
@@ -0,0 +1,683 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceVisitor;
+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.core.runtime.Platform;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.wst.validation.Validator.V1;
+import org.eclipse.wst.validation.internal.ConfigurationManager;
+import org.eclipse.wst.validation.internal.ContentTypeWrapper;
+import org.eclipse.wst.validation.internal.DebugConstants;
+import org.eclipse.wst.validation.internal.DependencyIndex;
+import org.eclipse.wst.validation.internal.DisabledResourceManager;
+import org.eclipse.wst.validation.internal.DisabledValidatorManager;
+import org.eclipse.wst.validation.internal.GlobalConfiguration;
+import org.eclipse.wst.validation.internal.MarkerManager;
+import org.eclipse.wst.validation.internal.Misc;
+import org.eclipse.wst.validation.internal.PerformanceMonitor;
+import org.eclipse.wst.validation.internal.ProjectUnavailableError;
+import org.eclipse.wst.validation.internal.ValManager;
+import org.eclipse.wst.validation.internal.ValOperation;
+import org.eclipse.wst.validation.internal.ValPrefManagerGlobal;
+import org.eclipse.wst.validation.internal.ValPrefManagerProject;
+import org.eclipse.wst.validation.internal.ValType;
+import org.eclipse.wst.validation.internal.ValidationRunner;
+import org.eclipse.wst.validation.internal.ValidatorMetaData;
+import org.eclipse.wst.validation.internal.ValidatorMutable;
+import org.eclipse.wst.validation.internal.ValManager.UseProjectPreferences;
+import org.eclipse.wst.validation.internal.model.GlobalPreferences;
+import org.eclipse.wst.validation.internal.model.GlobalPreferencesValues;
+import org.eclipse.wst.validation.internal.model.ProjectPreferences;
+import org.eclipse.wst.validation.internal.operations.ValidationBuilder;
+import org.eclipse.wst.validation.internal.operations.ValidatorManager;
+import org.eclipse.wst.validation.internal.operations.WorkbenchReporter;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
+
+
+/**
+ * The central class of the Validation Framework.
+ * <p>
+ * This is a singleton class that is accessed through the getDefault() method. 
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
+ * @author karasiuk
+ *
+ */
+public final class ValidationFramework {
+	
+	private volatile IDependencyIndex 	_dependencyIndex;
+	private IPerformanceMonitor			_performanceMonitor;
+	
+	private Set<IProject> 				_suspendedProjects;
+	private boolean 					_suspendAllValidation;
+
+	/** 
+	 * Answer the singleton, default instance of this class.
+	 */
+	public static ValidationFramework getDefault(){
+		return Singleton.vf;
+	}
+	
+	private ValidationFramework(){}
+	
+	/**
+	 * Add the validation builder to the project, so that the project can support
+	 * build time validation. It is safe to call this method, if the builder was
+	 * previously added to the project. It will not be added more than once.
+	 * 
+	 * @param project The project that the builder is added to.
+	 */
+	public void addValidationBuilder(IProject project){
+		ValidatorManager.addProjectBuildValidationSupport(project);
+	}
+	
+	/**
+	 * Clear any validation markers that may have been set by this validator.
+	 * 
+	 * @param resource
+	 * 		The resource that may have it's markers cleared.
+	 * @param validatorId
+	 * 		The id of validator that created the marker.
+	 */
+	public void clearMessages(IResource resource, String validatorId) throws CoreException {
+		Validator v = getValidator(validatorId, null);
+		if (v != null)MarkerManager.getDefault().clearMarker(resource, v);
+	}
+	
+	/**
+	 * Disable all validation for the given resource. This method instructs
+	 * the framework to not run any validators on the given resource or any of
+	 * it's children. This setting is persistent. Currently this only works with version 2
+	 * validators.
+	 * <p>
+	 * Use the enableValidation method to restore validation.
+	 * </p>
+	 * 
+	 * @param resource
+	 *            The resource that is having validation disabled. It must be an IFolder or an IFile.
+	 * 
+	 * @see #enableValidation(IResource)
+	 */
+	public void disableValidation(IResource resource){
+		assert resource != null;
+		DisabledResourceManager.getDefault().disableValidation(resource);
+	}
+	
+	/**
+	 * Enable validation for the given resource. If the resource was not
+	 * previously disabled this method call has no effect. Currently this only
+	 * works with version 2 validators.
+	 * 
+	 * @param resource
+	 * 		The resource that is having validation re-enabled.
+	 * 
+	 * @see #disableValidation(IResource)
+	 */
+	public void enableValidation(IResource resource){
+		DisabledResourceManager.getDefault().enableValidation(resource);
+	}
+	
+	/**
+	 * Answer the dependency index. Validators can use this to determine which resources depend on which
+	 * other resources.
+	 */
+	public IDependencyIndex getDependencyIndex(){
+		// note how the _dependencyIndex is volatile so that this double checking approach can be used.
+		if (_dependencyIndex == null){
+			synchronized(this){
+				if (_dependencyIndex == null)_dependencyIndex = new DependencyIndex();
+			}
+		}
+		return _dependencyIndex;
+	}
+
+	/**
+	 * Answer a performance monitor for the validators.
+	 */
+	public synchronized IPerformanceMonitor getPerformanceMonitor(){
+		if (_performanceMonitor == null){
+			boolean traceTimes = Misc.debugOptionAsBoolean(DebugConstants.TraceTimes);
+			String traceFile = Platform.getDebugOption(DebugConstants.TraceTimesFile);
+			boolean useDoubles = Misc.debugOptionAsBoolean(DebugConstants.TraceTimesUseDoubles);
+
+			_performanceMonitor = PerformanceMonitor.create(traceTimes, traceFile, useDoubles);
+		}
+		return _performanceMonitor;
+	}
+	
+	/**
+	 * Answer the preference store that holds the persisted global validation settings.
+	 */
+	public IEclipsePreferences getPreferenceStore(){
+		return new InstanceScope().getNode(ValidationPlugin.PLUGIN_ID);
+	}
+	
+	public IReporter getReporter(IProject project, IProgressMonitor monitor){
+		return new WorkbenchReporter(project, monitor);
+	}
+	
+	/**
+	 * Answer all the validators that are applicable for the given resource. A validator is
+	 * still returned even if it has been turned off by the user.
+	 * <p>
+	 * The caller may still need to test if the validator has been turned off by
+	 * the user, by using the isBuildValidation() and isManualValidation()
+	 * methods.
+	 * </p>
+	 * 
+	 * @param resource
+	 * 		The resource that determines which validators are applicable.
+	 * 
+	 * @param isManual
+	 * 		If true then the validator must be turned on for manual validation.
+	 * 		If false then the isManualValidation setting isn't used to filter
+	 * 		out validators.
+	 * 
+	 * @param isBuild
+	 * 		If true then the validator must be turned on for build based
+	 * 		validation. If false then the isBuildValidation setting isn't used
+	 * 		to filter out validators.
+	 * 
+	 * @see Validator#isBuildValidation()
+	 * @see Validator#isManualValidation()
+	 */
+	public Validator[] getValidatorsFor(IResource resource, boolean isManual, boolean isBuild){
+		IProject project = resource.getProject();
+		List<Validator> list = new LinkedList<Validator>();
+		ContentTypeWrapper ctw = new ContentTypeWrapper();
+		for (Validator val : ValManager.getDefault().getValidators(project)){
+			if (val.shouldValidate(resource, isManual, isBuild, ctw))list.add(val);
+		}
+		
+		Validator[] result = new Validator[list.size()];
+		list.toArray(result);
+		return result;
+	}
+	
+	/**
+	 * Answer all the validators that should not validate the resource, either
+	 * because their filters don't support the resource, or the validator has
+	 * been disabled for both build validation and manual validation.
+	 * 
+	 * @param resource
+	 * 		The resource this is being tested.
+	 */
+	public Set<Validator> getDisabledValidatorsFor(IResource resource){
+		return DisabledValidatorManager.getDefault().getDisabledValidatorsFor(resource);
+	}
+	
+	/**
+	 * Answer the global validator with the given id.
+	 * 
+	 * @deprecated Use getValidator(String id, IProject project) with a null project instead.
+	 * 
+	 * @param id
+	 * @return null if the validator is not found
+	 */
+	public Validator getValidator(String id){
+		return ValManager.getDefault().getValidatorWithId(id, null);
+	}
+	
+	/**
+	 * Answer the validator with the given id that is in effect for the given
+	 * project.
+	 * <p>
+	 * Individual projects may override the global validation preference
+	 * settings. If this is allowed and if the project has it's own settings,
+	 * then those validators are returned via this method.
+	 * </p>
+	 * <p>
+	 * The following approach is used. For version 1 validators, the validator
+	 * is only returned if it is defined to operate on this project type. This
+	 * is the way that the previous version of the framework did it. For version
+	 * 2 validators, they are all returned.
+	 * </p>
+	 * 
+	 * @param id
+	 * 		Validator id.
+	 * @param project
+	 * 		This can be null, in which case all the registered validators are
+	 * 		checked.
+	 * @return null if the validator is not found
+	 */
+	public Validator getValidator(String id, IProject project){
+		return ValManager.getDefault().getValidatorWithId(id, project);
+	}
+	
+	/**
+	 * Answer copies of all the registered validators.
+	 * 
+	 * @return Answer an empty array if there are no validators.
+	 */
+	public Validator[] getValidators(){
+		return ValManager.getDefault().getValidatorsCopy();
+	}
+		
+	/**
+	 * Answer the validation settings that have been defined on the
+	 * project. To "activate" any changes to these settings, the
+	 * {@link #applyChanges(MutableProjectSettings, boolean)} method needs to be
+	 * called.
+	 * 
+	 * @param project The project who's settings you wish to examine or change.
+	 * @return Validation settings that apply to the given project.
+	 */
+	public MutableProjectSettings getProjectSettings(IProject project){
+		ProjectPreferences pp = ValManager.getDefault().getProjectPreferences(project);
+		Validator[] vals = pp.getValidators();
+		ValidatorMutable[] vms = new ValidatorMutable[vals.length];
+		for (int i=0; i<vals.length; i++)vms[i] = new ValidatorMutable(vals[i]);
+
+		MutableProjectSettings mps = new MutableProjectSettings(project, vms);
+		mps.setOverride(pp.getOverride());
+		mps.setSuspend(pp.getSuspend());
+		return mps;
+	}
+	
+	/**
+	 * Answer the validation settings that have been defined at the workspace level.
+	 * To "activate" any changes to these settings, the
+	 * {@link #applyChanges(MutableWorkspaceSettings, boolean)} method needs to be
+	 * called.
+	 * 
+	 * @return Validation settings that apply to the entire workspace.
+	 */
+	public MutableWorkspaceSettings getWorkspaceSettings() throws InvocationTargetException{
+		
+		ValManager vm = ValManager.getDefault();
+		GlobalPreferences gp = vm.getGlobalPreferences();
+		
+		Validator[] vals = vm.getValidators();		
+		ValidatorMutable[] vms = new ValidatorMutable[vals.length];
+		for (int i=0; i<vals.length; i++)vms[i] = new ValidatorMutable(vals[i]);
+
+		MutableWorkspaceSettings mws = new MutableWorkspaceSettings(vms, gp.asValues());
+		return mws;
+	}
+		
+	/**
+	 * Apply the changes that have been been to the validation settings.
+	 * 
+	 * @param settings
+	 *            The project settings.
+	 * @param persist
+	 *            If true then the changes are persisted to the property files.
+	 *            If false the changes are applied to the validators, but are
+	 *            not persisted.
+	 */
+	public void applyChanges(MutableProjectSettings settings, boolean persist){
+		ValPrefManagerProject vpm = new ValPrefManagerProject(settings.getProject());
+		vpm.savePreferences(settings, persist);
+	}
+	
+	/**
+	 * Apply the changes that have been been to the validation settings.
+	 * 
+	 * @param settings
+	 *            The workspace settings.
+	 * @param persist
+	 *            If true then the changes are persisted to the property files.
+	 *            If false the changes are applied to the validators, but are
+	 *            not persisted.
+	 */
+	public void applyChanges(MutableWorkspaceSettings settings, boolean persist){
+		
+		ValManager vm = ValManager.getDefault();
+		GlobalPreferencesValues gpv = settings.getGlobalPreferencesValues();
+		vm.replace(gpv);
+		
+		IMutableValidator[] mvs = settings.getValidators();
+		ValidatorMutable[] vals = new ValidatorMutable[mvs.length];
+		for (int i=0; i<mvs.length; i++)vals[i] = (ValidatorMutable)mvs[i];
+		ValPrefManagerGlobal.getDefault().savePreferences(vm.getGlobalPreferences(), vals, persist);
+		ValPrefManagerGlobal.saveV1Preferences(vals, persist);		
+	}
+	
+	/**
+	 * Validators can use project level settings (Project natures and facets) to
+	 * determine if they are applicable to the project or not.
+	 * 
+	 * @param project
+	 *            The project that the configuration is based on.
+	 * @return The copies of the validators that are configured to run on this project based
+	 *         on the project level settings.
+	 * @throws ProjectUnavailableError
+	 */
+	public Validator[] getValidatorsConfiguredForProject(IProject project) throws ProjectUnavailableError {
+		Validator[] orig = ValManager.getDefault().getValidatorsConfiguredForProject(project, UseProjectPreferences.Normal);
+		Validator[] copy = new Validator[orig.length];
+		for (int i=0; i<orig.length; i++)copy[i] = orig[i].copy();
+		return copy;
+	}
+	
+	/**
+	 * Answer all the validators that are applicable for the given resource.
+	 * 
+	 * @param resource the resource that determines which validators are applicable.
+	 */
+	public Validator[] getValidatorsFor(IResource resource){
+		List<Validator> list = new LinkedList<Validator>();
+		for (Validator v : getValidatorsFor(resource, false, false)){
+			if (v.isBuildValidation() || v.isManualValidation())list.add(v);
+		}
+		Validator[] vals = new Validator[list.size()];
+		return list.toArray(vals);
+	}
+	
+	/**
+	 * Answer true if the resource has any enabled validators.
+	 * 
+	 * @param resource
+	 * 		A file, folder or project.
+	 * 
+	 * @param isManual
+	 * 		If true then the validator must be turned on for manual validation.
+	 * 		If false then the isManualValidation setting isn't used to filter
+	 * 		out validators.
+	 * 
+	 * @param isBuild
+	 * 		If true then the validator must be turned on for build based
+	 * 		validation. If false then the isBuildValidation setting isn't used
+	 * 		to filter out validators.
+	 */
+	public boolean hasValidators(IResource resource, boolean isManual, boolean isBuild){
+		return ValManager.getDefault().hasValidators(resource, isManual, isBuild);
+	}
+	
+	/**
+	 * Answer whether or not the validator has been activated, i.e. has the
+	 * bundle that defines the validator been loaded. We do not want to cause
+	 * unnecessary bundle loading, so this check can be performed by third party
+	 * callers, to prevent making other calls that will force the validator to
+	 * be loaded.
+	 * 
+	 * @param validator
+	 *            The validator that is being tested.
+	 * @return true if the validator has already been loaded.
+	 */
+	public boolean isLoaded(Validator validator){
+		return validator.isLoaded();
+	}
+	
+	/**
+	 * Waits until all validation jobs are finished. This method will block the
+	 * calling thread until all such jobs have finished executing, or until this
+	 * thread is interrupted. If there are no validation jobs that are
+	 * currently waiting, running, or sleeping, this method returns immediately.
+	 * Feedback on how the join is progressing is provided to the progress
+	 * monitor.
+	 * <p>
+	 * If this method is called while the job manager is suspended, only jobs
+	 * that are currently running will be joined. Once there are no jobs in the
+	 * family in the {@link Job#RUNNING} state, this method returns.
+	 * </p>
+	 * <p>
+	 * Note that there is a deadlock risk when using join. If the calling thread
+	 * owns a lock or object monitor that the joined thread is waiting for,
+	 * deadlock will occur. This method can also result in starvation of the
+	 * current thread if another thread continues to add jobs of the given
+	 * family, or if a job in the given family reschedules itself in an infinite
+	 * loop.
+	 * </p>
+	 * 
+	 * @param monitor
+	 * 		Progress monitor for reporting progress on how the wait is
+	 * 		progressing, or <code>null</code> if no progress monitoring is
+	 * 		required.
+	 * @exception InterruptedException
+	 * 		if this thread is interrupted while waiting
+	 * @exception OperationCanceledException
+	 * 		if the progress monitor is canceled while waiting
+	 */
+	public void join(IProgressMonitor monitor) throws InterruptedException, OperationCanceledException {
+		Job.getJobManager().join(ResourcesPlugin.FAMILY_AUTO_BUILD, monitor);
+		Job.getJobManager().join(ValidationBuilder.FAMILY_VALIDATION_JOB, monitor);
+	}
+	
+	/**
+	 * Suspends, or undoes the suspension of, validation on the current project.
+	 * If <b>suspend</b> is true then validation is suspended and if it's false
+	 * then validation is not suspended on the project. The value of this
+	 * variable is not persisted.
+	 * <p>
+	 * Be <b>very careful</b> 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 reset the suspension. The user will have to shut down
+	 * and restart the workbench to get validation to work again.
+	 * </p>
+	 * 
+	 * @param project
+	 * 		The project that is to be suspended or unsuspended.
+	 * @param suspend
+	 * 		If true, validation on the project will be suspend. If false it will
+	 * 		not be suspended.
+	 */
+	public void suspendValidation(IProject project, boolean suspend) {
+		if (project == null)return;
+		if (suspend)getSuspendedProjects().add(project);
+		else getSuspendedProjects().remove(project);
+	}
+	
+	private synchronized Set<IProject> getSuspendedProjects(){
+		if (_suspendedProjects == null)_suspendedProjects = Collections.synchronizedSet(new HashSet<IProject>(20));
+		return _suspendedProjects;
+	}
+	
+	/**
+	 * Save the validators settings into the persistent store, there by making their settings the active settings.
+	 * <p>
+	 * A common use of this method would be to change whether particular validators are enabled or not. For example
+	 * if you only wanted the JSP validator enabled, you could use code similar to this:
+	 * <pre>
+	 * ValidationFramework vf = ValidationFramework.getDefault();
+	 * Validator[] vals = vf.getValidators();
+	 * for (Validator v : vals){
+	 *   boolean enabled = false;
+	 *   if (v.getValidatorClassname().equals("org.eclipse.jst.jsp.core.internal.validation.JSPBatchValidator"))enabled = true;
+	 *     v.setBuildValidation(enabled);
+	 *     v.setManualValidation(enabled);
+	 *  }
+	 * vf.saveValidators(vals);
+	 * </pre>
+	 * </p> 
+	 * 
+	 * @param validators The validators that you are saving.
+	 * 
+	 * @throws InvocationTargetException
+	 */
+	public void saveValidators(Validator[] validators) throws InvocationTargetException{
+		
+		
+		ValPrefManagerGlobal gp = ValPrefManagerGlobal.getDefault();
+		gp.saveAsPrefs(validators);	
+		
+		GlobalConfiguration gc = ConfigurationManager.getManager().getGlobalConfiguration();
+		
+		List<ValidatorMetaData> manual = new LinkedList<ValidatorMetaData>();
+		List<ValidatorMetaData> build = new LinkedList<ValidatorMetaData>();
+		for (Validator v : validators){
+			V1 v1 = v.asV1Validator();
+			if (v1 == null)continue;
+			if (v1.isManualValidation())manual.add(v1.getVmd());
+			if (v1.isBuildValidation())build.add(v1.getVmd());
+		}
+		
+		ValidatorMetaData[] array = new ValidatorMetaData[manual.size()];
+		gc.setEnabledManualValidators(manual.toArray(array));
+		
+		array = new ValidatorMetaData[build.size()];
+		gc.setEnabledBuildValidators(build.toArray(array));
+
+		gc.passivate();
+		gc.store();		
+	}
+
+	/**
+	 * 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 is not suspended. The value of this variable is
+	 * not persisted.
+	 * <p>
+	 * Be <b>very careful</b> 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 reset the suspension. The user will have to shut down
+	 * and restart the workbench to get validation to work again.
+	 * </p>
+	 */
+	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 (_suspendAllValidation)return true;
+		if (project == null)return false;
+		return getSuspendedProjects().contains(project);
+	}
+
+	/**
+	 * This method should be called by any code that is preparing to suspend validation on a
+	 * project. Rather than calling isSuspended(IProject), which will also return true if all validation
+	 * has been suspended. 
+	 * 
+	 * @param project the project that is being tested
+	 * @return boolean true if the project has been suspended
+	 */
+	public boolean isProjectSuspended(IProject project) {
+		if (project == null)return false;
+		return getSuspendedProjects().contains(project);
+	}
+	
+	/**
+	 * Validate the projects. Exactly one of isManual or isBuild needs to be true.
+	 * 
+	 * @param projects
+	 *            The projects to be validated.
+	 * 
+	 * @param isManual
+	 *            Is this being done as part of a manual validation? i.e. did
+	 *            the user select the Validate menu item?
+	 * 
+	 * @param isBuild
+	 *            Is this being done as part of a build?
+	 * 
+	 * @param monitor
+	 * 
+	 * @return the validation result which is the combined result for all the
+	 *         resources that were validated.
+	 */
+	public ValidationResults validate(IProject[] projects, final boolean isManual, final boolean isBuild,
+		IProgressMonitor monitor) throws CoreException{
+		ValType type = ValType.Build;
+		if (isManual)type = ValType.Manual;
+		ValOperation vo = ValidationRunner.validate(createMap(projects), type, monitor, true);
+		return vo.getResults();
+	}
+
+	/**
+	 * Validate a specific file resource.
+	 * 
+	 * @param file
+	 *            The file to be validated.
+	 * @param monitor
+	 *            Progress monitor.
+	 * @return the result of validating the file.
+	 */
+  public ValidationResults validate(IFile file, IProgressMonitor monitor) throws CoreException{
+      ValOperation vo = ValidationRunner.validate(file, ValType.Manual, monitor, true);
+      return vo.getResults();
+    }
+	  
+	/**
+	 * Answer all the resources in the projects as a map.
+	 * @param projects
+	 */
+	private Map<IProject, Set<IResource>> createMap(IProject[] projects) throws CoreException{
+		final HashMap<IProject, Set<IResource>> map = new HashMap<IProject, Set<IResource>>(1000);
+			
+		for (IProject p : projects){
+			Set<IResource> set = new HashSet<IResource>(1000);
+			ResourceAdder ra = new ResourceAdder(set);
+			p.accept(ra);
+			map.put(p, set);
+		}
+		return map;
+	}
+	
+	public static class ResourceAdder implements IResourceVisitor {
+		
+		private Set<IResource> _set;
+		
+		/**
+		 * A class that knows how to add resources to a set.
+		 * @param set the set where the resources are added.
+		 */
+		public ResourceAdder(Set<IResource> set){
+			_set = set;
+		}
+
+		public boolean visit(IResource resource) throws CoreException {
+			// [225839] the older validators only expect files and folders.
+			int type = resource.getType();
+			if (type == IResource.FILE || type == IResource.FOLDER)_set.add(resource);
+			return true;
+		}
+		
+	}
+	
+	/**
+	 * Store the singleton for the ValidationFramework. This approach is used to avoid having to synchronize the
+	 * ValidationFramework.getDefault() method.
+	 * 
+	 * @author karasiuk
+	 *
+	 */
+	private static class Singleton {
+		static ValidationFramework vf = new ValidationFramework();
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationResult.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationResult.java
new file mode 100644
index 0000000..c1714e1
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationResult.java
@@ -0,0 +1,385 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.wst.validation.internal.core.ValidationException;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
+
+/**
+ * The result of running a validate operation. Validators create and return this objects as part of
+ * performing their validation.
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
+ * @author karasiuk
+ *
+ */
+public final class ValidationResult {
+	
+	private final List<ValidatorMessage> _messages = new LinkedList<ValidatorMessage>();
+	
+	private final static ValidatorMessage[] _noMessages = new ValidatorMessage[0];
+	
+	private boolean		_canceled;
+	
+	/** 
+	 * The resources that the validated resource depends on. This can be left null.
+	 * For example, an XML file may depend on a XSD in order to know if it is valid or not.
+	 * It would pass back the XSD file. 
+	 */
+	private IResource[]	_dependsOn;
+	
+	/** 
+	 * The objects that you validated as a side effect of validating this object. The framework will not
+	 * call you with any of these objects (in this validation run). This can be left null.
+	 */
+	private IResource[] _validated;
+	
+	private int			_severityError;
+	private int			_severityWarning;
+	private int			_severityInfo;
+	
+	private IProject	_suspendValidation;
+	
+	/** A count of the number of resources that were validated. */
+	private int			_numberOfValidatedResources = 1;
+	
+	private ReporterHelper	_reporter;
+	private ValidationException	_validationException;
+	
+	/**
+	 * This is an optional method, that a validator can use to return error
+	 * messages. The validation framework converts these into IMarkers.
+	 * <p>
+	 * The scenario that motivated this method, is when a validator is used both
+	 * for <b>as you type</b> validation and <b>build</b> validation. When
+	 * called in as you type mode, the validator doesn't want to directly create IMarkers,
+	 * because the resource hasn't been saved yet. It needs to return something
+	 * other than an IMarker. But when called in build mode, it does ultimately
+	 * want IMarkers. By returning ValidatorMessages, it only needs to return
+	 * one type of message, and those messages can be either be directly used by
+	 * the caller, or automatically converted into IMarkers by the validation
+	 * framework.
+	 * </p>
+	 * <p>
+	 * To make matters even more complicated there is a third way to return
+	 * messages. To make it easier for old validators to port to the new
+	 * framework, they can continue to use an IReporter. If a validator calls
+	 * the getReporter() method then it is assumed by the framework that that is
+	 * the approach that they have chosen.
+	 * </p>
+	 * 
+	 * @see #getReporter(IProgressMonitor)
+	 * 
+	 * @param message
+	 * 		A validation message.
+	 */
+	public void add(ValidatorMessage message){
+		_messages.add(message);
+	}
+	
+	/**
+	 * Answer an IReporter for handing error messages.
+	 * <p>
+	 * This is a transition method, to help old validators port to the new validation framework. If this method
+	 * is called it is assumed by the framework, that this IReporter will be used as the only way of passing messages
+	 * back to the framework.
+	 * 
+	 * @see #add(ValidatorMessage)
+	 * @param monitor
+	 */
+	public IReporter getReporter(IProgressMonitor monitor){
+		if (_reporter == null)_reporter = new ReporterHelper(monitor);
+		return _reporter;
+	}
+	
+	ReporterHelper getReporterHelper(){
+		return _reporter;
+	}
+	
+	/**
+	 * Merge the message counts and messages from an individual validator into this result.
+	 * @param result it can be null, in which case it is ignored.
+	 */
+	public void mergeResults(ValidationResult result){
+		if (result == null)return;
+		
+		ValidatorMessage[] msgs = result.getMessages();
+		for (ValidatorMessage m : msgs){
+			add(m);
+			int severity = m.getAttribute(IMarker.SEVERITY, 0);
+			switch (severity){
+			case IMarker.SEVERITY_ERROR:
+				incrementError(1);
+				break;
+			case IMarker.SEVERITY_WARNING:
+				incrementWarning(1);
+				break;
+			case IMarker.SEVERITY_INFO:
+				incrementInfo(1);
+				break;
+					
+			}
+		}
+		
+		incrementError(result.getSeverityError());
+		incrementWarning(result.getSeverityWarning());
+		incrementInfo(result.getSeverityInfo());
+		
+		_numberOfValidatedResources += result.getNumberOfValidatedResources();
+		
+	}
+
+	/**
+	 * Answer the resources that the validated resource depends on.
+	 */
+	public IResource[] getDependsOn() {
+		return _dependsOn;
+	}
+	
+	/**
+	 * Answer any validation messages that were added by the validator. 
+	 * @return an array is returned even if there are no messages.
+	 */
+	public ValidatorMessage[] getMessages(){
+		if (_messages == null)return _noMessages;
+		ValidatorMessage[] msgs = new ValidatorMessage[_messages.size()];
+		_messages.toArray(msgs);
+		return msgs;
+	}
+		
+	/**
+	 * Answer a copy of any validation messages that were added by the validator. The array is a new
+	 * array, and each message is a copy. 
+	 * @return an array is returned even if there are no messages.
+	 */
+	public synchronized ValidatorMessage[] getMessagesAsCopy(){
+		if (_messages == null)return _noMessages;
+		ValidatorMessage[] msgs = new ValidatorMessage[_messages.size()];
+		int i = 0;
+		for (ValidatorMessage msg : _messages)msgs[i++] = msg.asCopy();
+		return msgs;
+	}
+
+	/**
+	 * Update the resources that the validated resource depends on. This can be
+	 * left null. For example, a XML file may depend on a XSD file in order to
+	 * know if it is valid or not. It would pass back that XSD file.
+	 * 
+	 * @param dependsOn
+	 * 		If this is null then the dependency information is not updated. To
+	 * 		remove the dependency information, an empty array needs to be
+	 * 		supplied. A non null parameter, <b>replaces</b> all the dependency
+	 * 		information for this resource, for this validator.
+	 */
+	public void setDependsOn(IResource[] dependsOn) {
+		_dependsOn = dependsOn;
+	}
+	
+	/**
+	 * @return All the resources that were validated as a side-effect of
+	 * 	validating the main resource, or null if none were.
+	 */
+	public IResource[] getValidated() {
+		return _validated;
+	}
+	
+	/**
+	 * Indicate that additional resources have been validated as part of this
+	 * validate operation. Sometimes in the course of performing a validation on
+	 * one resource it is necessary to validate other resources as well. This
+	 * method is used to let the framework know about these additional validated
+	 * resources, to possibly save them being validated redundantly.
+	 * 
+	 * @param validated
+	 * 		Any additional resources that were validated.
+	 */
+	public void setValidated(IResource[] validated) {
+		_validated = validated;
+	}
+
+	/**
+	 * Answer the number of error messages that were generated as part of this validation operation.
+	 */
+	public int getSeverityError() {
+		return _severityError;
+	}
+
+	/**
+	 * Set the number of error messages that were generated as part of this validation operation.
+	 * <p>
+	 * Messages added through the add(ValidationMessage) method should not be included here, as this
+	 * information will be determined from the ValidationMessage.
+	 * </p>
+	 */
+	public void setSeverityError(int severityError) {
+		_severityError = severityError;
+	}
+	
+
+	/**
+	 * Increment the number of error messages that were generated as part of this validation operation.
+	 * <p>
+	 * Messages added through the add(ValidationMessage) method should not be included here, as this
+	 * information will be determined from the ValidationMessage.
+	 * </p>
+	 * 
+	 * @return the current number of errors.
+	 */
+	public int incrementError(int errors){
+		_severityError += errors;
+		return _severityError;
+	}
+
+	/**
+	 * Answer the number of warning messages that were generated as part of this validation operation.
+	 */
+	public int getSeverityWarning() {
+		return _severityWarning;
+	}
+
+	/**
+	 * Set the number of warning messages that were generated as part of this validation operation.
+	 * <p>
+	 * Messages added through the add(ValidationMessage) method should not be included here, as this
+	 * information will be determined from the ValidationMessage.
+	 * </p>
+	 */
+	public void setSeverityWarning(int severityWarning) {
+		_severityWarning = severityWarning;
+	}
+
+	/**
+	 * Increment the number of warning messages that were generated as part of this validation operation.
+	 * <p>
+	 * Messages added through the add(ValidationMessage) method should not be included here, as this
+	 * information will be determined from the ValidationMessage.
+	 * </p>
+	 * 
+	 * @return the current number of warnings.
+	 */
+	public int incrementWarning(int warnings){
+		_severityWarning += warnings;
+		return _severityWarning;
+	}
+
+	/**
+	 * Answer the number of informational messages that were generated as part of this validation operation.
+	 */
+	public int getSeverityInfo() {
+		return _severityInfo;
+	}
+
+	/**
+	 * Set the number of informational messages that were generated as part of this validation operation.
+	 * <p>
+	 * Messages added through the add(ValidationMessage) method should not be included here, as this
+	 * information will be determined from the ValidationMessage.
+	 * </p>
+	 */
+	public void setSeverityInfo(int severityInfo) {
+		_severityInfo = severityInfo;
+	}
+
+	/**
+	 * Increment the number of informational messages that were generated as part of this validation operation.
+	 * <p>
+	 * Messages added through the add(ValidationMessage) method should not be included here, as this
+	 * information will be determined from the ValidationMessage.
+	 * </p>
+	 * 
+	 * @return the current number of informational message.
+	 */
+	public int incrementInfo(int info){
+		_severityInfo += info;
+		return _severityInfo;
+	}
+
+	/**
+	 * Was the operation canceled before it completed? For example if the validation is being run through the
+	 * user interface, the end user can cancel the operation through the progress monitor.
+	 * 
+	 * @return true if the operation was canceled
+	 */
+	public boolean isCanceled() {
+		return _canceled;
+	}
+
+	/**
+	 * Indicate if the operation was canceled.
+	 * 
+	 * @param canceled
+	 * 		Set to true if it was canceled and false if it was not canceled.
+	 */
+	public void setCanceled(boolean canceled) {
+		_canceled = canceled;
+	}
+
+	/**
+	 * Answer the number of resources that have been validated.
+	 */
+	public int getNumberOfValidatedResources() {
+		if (_validated == null)return _numberOfValidatedResources;
+		return _numberOfValidatedResources + _validated.length;
+	}
+
+	/**
+	 * If the validation ended with an exception, answer it.
+	 * @return null if the validator did not finish with an exception.
+	 */
+	public ValidationException getValidationException() {
+		return _validationException;
+	}
+
+	/**
+	 * If the validation failed with an exception, it can be recorded here.
+	 * <p>
+	 * This method is provided for old validators to ease their transition to the new framework.
+	 * </p>
+	 * @param validationException
+	 */
+	public void setValidationException(ValidationException validationException) {
+		_validationException = validationException;
+	}
+	
+	/**
+	 * Answer the project that the validator would like to have suspended.
+	 * 
+	 * @return the project to suspend or null. The normal result is null, which means that
+	 * the validator wishes to receive normal validation requests. 
+	 */
+	public IProject getSuspendValidation(){
+		return _suspendValidation;
+	}
+
+	/**
+	 * Calling this method will inform the framework, that this validator does not wish to be
+	 * called again for any resources in this project, for the duration of this validation operation.
+	 * <p>
+	 * Some validators may have a rich set of triggers, but once they have been invoked once,
+	 * do not need to be invoked again during the course of the current validation.
+	 * </p>
+	 * @param project The project that this validator no longer wants to be notified on.
+	 */
+	public void setSuspendValidation(IProject project) {
+		_suspendValidation = project;
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationResults.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationResults.java
new file mode 100644
index 0000000..ba947f8
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationResults.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+
+/**
+ * The combined results of validating multiple resources.
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
+ * @author karasiuk
+ *
+ */
+public final class ValidationResults {
+	
+	private final ValidatorMessage[] _messages;
+	private final int 	_error;
+	private final int	_warn;
+	private final int	_info;
+	
+	public ValidationResults(ValidationResult result){
+		if (result == null){
+			_messages = new ValidatorMessage[0];
+			_error = 0;
+			_warn = 0;
+			_info = 0;
+		}
+		else {
+			_messages = result.getMessagesAsCopy();
+			_error = result.getSeverityError();
+			_warn = result.getSeverityWarning();
+			_info = result.getSeverityInfo();
+		}
+	}
+	
+	/**
+	 * Answer any validation messages that were added by the validation operation.
+	 * @return an array is returned even if there are no messages.
+	 */
+	public ValidatorMessage[] getMessages(){
+		return _messages;
+	}
+
+	/**
+	 * Answer the number of error messages that were generated as part of this validation operation.
+	 */
+	public int getSeverityError() {
+		return _error;
+	}
+
+	/**
+	 * Answer the number of informational messages that were generated as part of this validation operation.
+	 */
+	public int getSeverityInfo() {
+		return _info;
+	}
+	
+	/**
+	 * Answer the number of warning messages that were generated as part of this validation operation.
+	 */
+	public int getSeverityWarning() {
+		return _warn;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationState.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationState.java
new file mode 100644
index 0000000..8097de4
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationState.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+/**
+ * Keep track of arbitrary validation data, during the course of a validation.
+ * <p>
+ * To enable more efficient caching, the validation framework, allows individual validators to cache
+ * arbitrary data during the validation process. Use of this object is completely optional.
+ * <p>
+ * Since some validators wish to share data with other validators, any validator can see the state data for
+ * any other validator, since the id is simply the validator's extension id.
+ * <p>
+ * This object is freed at the end of the validation process.
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
+ * @noextend
+ * @author karasiuk
+ *
+ */
+public final class ValidationState {
+	
+	/**
+	 * This is a special id.
+	 * <p>
+	 * If a resource that is depended on by others is changed, then the
+	 * dependent resources are validated. The depended on resource, which is the
+	 * resource that actually changed, is placed into the ValidationState using
+	 * this id.
+	 * </p>
+	 * @deprecated This approach is not thread safe, the longer form of the AbstractValidator validate method should be used instead.
+	 * @see AbstractValidator#validate(ValidationEvent, ValidationState, org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public static final String TriggerResource = ValidationPlugin.PLUGIN_ID + ".Trigger"; //$NON-NLS-1$
+
+	// I can't use a ConncurrentHashMap because some of the clients store nulls.
+	private final Map<String, Object> _map = new HashMap<String, Object>(50);
+	
+	public ValidationState(){
+	}
+	
+	/**
+	 * Save some state information.
+	 * 
+	 * @param id
+	 * 		By convention this is the fully qualified validator extension id.
+	 * 		For example: org.eclipse.wst.html.ui.HTMLValidator
+	 * 
+	 * @param value
+	 * 		Any arbitrary data that the validator might find useful. The
+	 * 		validation framework doesn't do anything with this object except
+	 * 		pass it along during the validation process.
+	 */
+	public synchronized void put(String id, Object value){
+		_map.put(id, value);
+	}
+	
+	/**
+	 * Answer the state data for the given validator.
+	 * 
+	 * @param id
+	 * 		By convention this is the fully qualified validator extension point
+	 * 		id. For example org.eclipse.wst.html.ui.HTMLValidator
+	 * 
+	 * @return any arbitrary data that the validator might find useful,
+	 * 	including null.
+	 */
+	public synchronized Object get(String id){
+		return _map.get(id);
+	}
+
+	
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/Validator.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/Validator.java
new file mode 100644
index 0000000..dcaea84
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/Validator.java
@@ -0,0 +1,1348 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IContributor;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.validation.internal.ConfigurationConstants;
+import org.eclipse.wst.validation.internal.ConfigurationManager;
+import org.eclipse.wst.validation.internal.ContentTypeWrapper;
+import org.eclipse.wst.validation.internal.ExtensionConstants;
+import org.eclipse.wst.validation.internal.MarkerManager;
+import org.eclipse.wst.validation.internal.Misc;
+import org.eclipse.wst.validation.internal.NullValidator;
+import org.eclipse.wst.validation.internal.SummaryReporter;
+import org.eclipse.wst.validation.internal.Tracing;
+import org.eclipse.wst.validation.internal.ValManager;
+import org.eclipse.wst.validation.internal.ValMessages;
+import org.eclipse.wst.validation.internal.ValOperation;
+import org.eclipse.wst.validation.internal.ValPrefManagerGlobal;
+import org.eclipse.wst.validation.internal.ValPrefManagerProject;
+import org.eclipse.wst.validation.internal.ValType;
+import org.eclipse.wst.validation.internal.ValidationConfiguration;
+import org.eclipse.wst.validation.internal.ValidatorExtensionReader;
+import org.eclipse.wst.validation.internal.ValidatorMetaData;
+import org.eclipse.wst.validation.internal.core.ValidatorLauncher;
+import org.eclipse.wst.validation.internal.delegates.ValidatorDelegateDescriptor;
+import org.eclipse.wst.validation.internal.delegates.ValidatorDelegatesRegistry;
+import org.eclipse.wst.validation.internal.model.FilterGroup;
+import org.eclipse.wst.validation.internal.operations.IWorkbenchContext;
+import org.eclipse.wst.validation.internal.operations.WorkbenchContext;
+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;
+
+/**
+ * Represents a validator. This gets instantiated through one of the validator extension points.
+ * <p>
+ * <b>This class is not API</b>.
+ * </p>
+ * 
+ * @author karasiuk
+ *
+ */
+public abstract class Validator implements Comparable<Validator> {
+	// Remember if you add a new instance variable, make sure that you update the copy and become methods
+	
+	/**
+	 * The level of configuration for the validator.
+	 * <ul>
+	 * <li>Extension - Defined by an extension point.</li>
+	 * <li>Global - Defined by a global preference.</li>
+	 * <li>Project - Defined by a project property.</li>
+	 * </ul>
+	 */
+	public enum Level {Extension, Global, Project};
+	
+	protected boolean	_buildValidation = true;
+	
+	/** If this is a delegating validator, then this field holds the validator that will be delegated to. */
+	private String 		_delegatingId;
+	
+	/** 
+	 * If this validator is also used to control an ISource validator, the id of the ISource validator is
+	 * registered here.
+	 */
+	private String		_sourceId;
+	
+	protected boolean 	_manualValidation = true;
+	
+	/** An optional customized marker id for this validator. */
+	private String 		_markerId;
+	
+	/** 
+	 * Version of the filter definition. By increasing this number the framework can know that a plug-in has 
+	 * changed it's filters.
+	 */
+	private int			_version = 1;
+	
+	/** Map simple message id's to message settings. */
+	private Map<String, MessageSeveritySetting> _messageSettings;
+	
+	/** The project that you are defined in. This can be null which means that you are a global validator. */
+	protected IProject	_project;
+		
+	/** How many times has a global field in this validator been changed since it was created (or copied)? */
+	protected transient int _changeCountGlobal;
+	
+	/** How many times has a message field in this validator been changed since it was created (or copied)? */
+	protected transient int _changeCountMessages;
+	
+	/** Has the validator been migrated from an earlier version in this session, but not yet saved? */
+	private boolean _migrated;
+	
+	public Validator(IProject project){
+		_project = project;
+	}
+		
+	void setMigrated(boolean migrated){
+		_migrated = migrated;
+	}
+	
+	/**
+	 * Create a new validator based on a abstract validator.
+	 * 
+	 * @param validator
+	 *            The validator that is being wrapped.
+	 * 
+	 * @param project
+	 *            The project that you are defined in. This can be null which
+	 *            means that you are a global validator.
+	 */
+	public static Validator create(IConfigurationElement validator, IProject project) {
+		V2 v2 = new V2(validator, project);
+		return v2;
+	}
+	
+	/**
+	 * Create a new validator based on validator meta data.
+	 * 
+	 * @param project
+	 *            The project that you are defined in. This can be null which
+	 *            means that you are a global validator.
+	 */
+	public static Validator create(ValidatorMetaData vmd, ValidationConfiguration config, IProject project){
+		V1 v1 = new V1(vmd, config, project);
+		return v1;
+	}
+	
+	/**
+	 * If you are a version 1 validator, answer yourself as one, otherwise answer null.
+	 */
+	public V1 asV1Validator(){
+		return null;
+	}
+	
+	/**
+	 * If you are a version 2 validator, answer yourself as one, otherwise answer null.
+	 */
+	public V2 asV2Validator() {
+		return null;
+	}
+	
+	/**
+	 * The project is being cleaned, this method gives the validator a chance to do any special cleanup.
+	 * The default is to do nothing.
+	 * 
+	 * @param project the project being built.
+	 * @param monitor the monitor that should be used for reporting progress if the clean takes a long time.
+	 */
+	public void clean(IProject project, ValOperation operation, IProgressMonitor monitor){
+	}	
+	
+	/**
+	 * Compare yourself based on Validator name.
+	 */
+	public int compareTo(Validator validator) {
+		return getName().compareTo(validator.getName());			
+	}
+	
+	/** Answer a deep copy of yourself. */
+	public Validator copy(){
+		return copy(false);
+	}
+	
+	public abstract Validator copy(boolean includeChangeCounts);
+	
+	/**
+	 * Update your direct, non transient fields from the fields in v.
+	 */
+	protected void copyLocal(Validator v, boolean includeChangeCounts){
+		_buildValidation = v._buildValidation;
+		_delegatingId = v._delegatingId;
+		_manualValidation = v._manualValidation;
+		_markerId = v._markerId;
+		_messageSettings = v._messageSettings;
+		_sourceId = v._sourceId;
+		_version = v._version;
+		_migrated = v._migrated;
+		
+		if (includeChangeCounts){
+			_changeCountGlobal = v._changeCountGlobal;
+			_changeCountMessages = v._changeCountMessages;
+		}
+	}
+	
+	/**
+	 * Should the validation framework first clear the markers that this
+	 * validator has placed on this resource? This method can be overridden by
+	 * validator implementors to provide a validator specific behavior.
+	 * 
+	 * @param event
+	 *            The validation event that triggered the validation.
+	 * @return true if the validation framework should first clear all the
+	 *         markers that this validator produced. This is the default
+	 *         behavior. Return false to leave the markers unchanged. It then
+	 *         becomes the responsibility of the validator to manage it's own
+	 *         markers for this resource, for this validation event.
+	 */
+	public boolean shouldClearMarkers(ValidationEvent event){
+		return true;
+	}
+	
+	/**
+	 * Answer true if this validator, based on it's filters, should validate
+	 * this resource. This method does not check to see if global validation or
+	 * project validation has been suspended or not.
+	 * 
+	 * @param resource
+	 *            The resource to be checked.
+	 * @param isManual
+	 *            If true then this validator must also be enabled for manual
+	 *            validation.
+	 * @param isBuild
+	 *            If true then this validator must also be enabled for builder
+	 *            based validation.
+	 * 
+	 * @return true if the resource should be validated.
+	 */
+	public boolean shouldValidate(IResource resource, boolean isManual, boolean isBuild){
+		return shouldValidate(resource, isManual, isBuild, new ContentTypeWrapper());
+	}
+	
+	/**
+	 * Answer true if this validator, based on it's filters, should validate
+	 * this resource. This method does not check to see if global validation or
+	 * project validation has been suspended or not.
+	 * 
+	 * @param resource
+	 *            The resource to be checked.
+	 * @param isManual
+	 *            If true then this validator must also be enabled for manual
+	 *            validation.
+	 * @param isBuild
+	 *            If true then this validator must also be enabled for builder
+	 *            based validation.
+	 * @param contentTypeWrapper 
+	 *            For repeated calls on the same resource, it is more efficient
+	 *            to remember the content type.
+	 * @return true if the resource should be validated.
+	 * @see Friend#shouldValidate(Validator, IResource, boolean, boolean, ContentTypeWrapper)
+	 */
+	boolean shouldValidate(IResource resource, boolean isManual, boolean isBuild, 
+		ContentTypeWrapper contentTypeWrapper){
+		
+		if (isManual && !_manualValidation)return false;
+		if (isBuild && !_buildValidation)return false;
+		
+		return shouldValidate(resource, contentTypeWrapper);
+	}
+	
+	/**
+	 * Answer true if this validator, based on it's filters, should validate
+	 * this resource. This method does not check to see if global validation or
+	 * project validation has been suspended or not.
+	 * 
+	 * @param resource
+	 *            The resource to be checked.
+	 * @param valType
+	 *            The context to use when performing the check.
+	 * 
+	 * @return true if the resource should be validated.
+	 */
+	public boolean shouldValidate(IResource resource, ValType valType){
+		return shouldValidate(resource, valType, new ContentTypeWrapper());
+	}
+	
+	/**
+	 * Answer true if this validator, based on it's filters, should validate
+	 * this resource. This method does not check to see if global validation or
+	 * project validation has been suspended or not.
+	 * 
+	 * @param resource
+	 *            The resource to be checked.
+	 * @param valType
+	 *            The context to use when performing the check.
+	 * @param contentTypeWrapper
+	 *            For repeated calls on the same resource, it is more efficient
+	 *            to remember the content type.
+	 * 
+	 * @return true if the resource should be validated.
+	 * 
+	 * @see Friend#shouldValidate(Validator, IResource, ValType, ContentTypeWrapper)
+	 */
+	boolean shouldValidate(IResource resource, ValType valType, ContentTypeWrapper contentTypeWrapper){
+		if (Tracing.matchesExtraDetail(getId())){
+			Tracing.log("Validator-01: checking if " + getId() + " should validate " + resource); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		if (valType == ValType.Manual && !_manualValidation)return false;
+		if (valType == ValType.Build && !_buildValidation)return false;
+		
+		boolean result = shouldValidate(resource, contentTypeWrapper);
+		if (Tracing.matchesExtraDetail(getId())){
+			Tracing.log("Validator-02: result = " + result); //$NON-NLS-1$
+		}
+		
+		return result;
+	}
+	
+	/**
+	 * Answer true if this validator, based on it's filters, should validate this project. This method
+	 * does not check to see if global validation or project validation has been suspended or not.
+	 * 
+	 * @param project the project to be checked
+	 * @param type The type of validation request
+	 * 
+	 * @return true if the project should be validated.
+	 */
+	public boolean shouldValidateProject(IProject project, ValType type){
+		return shouldValidateProject(project, type == ValType.Manual, type == ValType.Build);
+	}
+	
+	/**
+	 * Answer true if this validator, based on it's filters, should validate this project. This method
+	 * does not check to see if global validation or project validation has been suspended or not.
+	 * 
+	 * @param project the project to be checked
+	 * @param isManual if true then this validator must also be enabled for manual validation.
+	 * @param isBuild if true then this validator must also be enabled for builder based validation.
+	 * 
+	 * @return true if the project should be validated.
+	 */
+	public boolean shouldValidateProject(IProject project, boolean isManual, boolean isBuild){
+		if (Tracing.matchesExtraDetail(getId())){
+			Tracing.log("Validator-03: checking if " + getId() + " should validate " + project); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		if (isManual && !_manualValidation)return false;
+		if (isBuild && !_buildValidation)return false;
+		if (project == null || !project.isOpen())return false;
+		boolean result = shouldValidateProject(project);
+		if (Tracing.matchesExtraDetail(getId())){
+			Tracing.log("Validator-04: result " + result); //$NON-NLS-1$
+		}
+		return result;
+	}
+	
+	/**
+	 * Validate the resource.
+	 * 
+	 * @param resource
+	 *            The resource to be validated.
+	 * @param kind
+	 *            The kind of resource change, see IResourceDelta for values.
+	 * @param operation
+	 *            The operation that this validation is running under. This can
+	 *            be null.
+	 * @param monitor
+	 *            A way to report progress. This can be null.
+	 * 
+	 * @return the result of doing the validation, it can be, but usually isn't
+	 *         null.
+	 */
+	public abstract ValidationResult validate(IResource resource, int kind, ValOperation operation, IProgressMonitor monitor);
+	
+	/**
+	 * Validate the resource.
+	 * 
+	 * @param resource
+	 *            The resource to be validated.
+	 * @param kind
+	 *            The kind of resource change, see IResourceDelta for values.
+	 * @param operation
+	 *            The operation that this validation is running under. This can
+	 *            be null.
+	 * @param monitor
+	 *            A way to report progress. This can be null.
+	 * @param event
+	 *            An event that describes in more detail what should be
+	 *            validated and why it should be validated. This can be null.
+	 * 
+	 * @return the result of doing the validation, it can be, but usually isn't
+	 *         null.
+	 */
+	public ValidationResult validate(IResource resource, int kind, ValOperation operation, IProgressMonitor monitor, ValidationEvent event){
+		// The reason that the resource and kind are still specified, is that I didn't want to remove a public method in the service
+		// stream. 
+		return validate(resource, kind, operation, monitor);		
+	}
+
+	/**
+	 * This method will be called before any validation takes place. It allows validators to perform any
+	 * initialization that they might need. 
+	 *  
+	 * @param project the project that is being validated. For the very first call in the validation phase,
+	 * this will be null. That is the signal to the validator that a top level validation is starting.
+	 * Subsequently, the project will be set, as each of the individual projects are validated.
+	 * 
+	 * @param state a way to pass arbitrary, validator specific, data from one invocation of a validator to
+	 * the next, during the validation phase.
+	 * 
+	 * @param monitor the monitor that should be used for reporting progress if the clean takes a long time.
+	 */
+	public void validationStarting(IProject project, ValidationState state, IProgressMonitor monitor){
+		// subclasses need to override this, if they wish to let their validators know about this event
+	}
+	
+	/**
+	 * This method will be called when validation is complete. It allows validators to perform any
+	 * cleanup that they might need to do.  
+	 *  
+	 * @param project the project that was validated. The very last call in the validation will set this to 
+	 * null so that the validator knows that all the projects have now been validated.
+	 * 
+	 * @param state a way to pass arbitrary, validator specific, data from one invocation of a validator to
+	 * the next, during the validation phase.
+	 * 
+	 * @param monitor the monitor that should be used for reporting progress if the clean takes a long time.
+	 */
+	public void validationFinishing(IProject project, ValidationState state, IProgressMonitor monitor){		
+		// subclasses need to override this, if they wish to let their validators know about this event
+	}
+	
+	void add(MessageSeveritySetting message){
+		// I can't use getMessageSettings() here, as that will put us into an infinite loop
+		if (_messageSettings == null){
+			_messageSettings = new HashMap<String, MessageSeveritySetting>(10);
+		}
+		_messageSettings.put(message.getId(), message);
+		bumpChangeCountMessages();
+	}
+	
+	public IValidator asIValidator(){
+		return null;
+	}
+	
+	protected abstract boolean shouldValidate(IResource resource, ContentTypeWrapper contentTypeWrapper);
+	protected abstract boolean shouldValidateProject(IProject project);
+			
+	public abstract String getId();
+	
+	public MessageSeveritySetting getMessage(String id){
+		return getMessageSettings().get(id);
+	}
+	
+	/**
+	 * Answer all the message settings that this validator has defined.
+	 * 
+	 * @return an empty map if the validator did not define any message settings.
+	 */
+	public Map<String, MessageSeveritySetting> getMessageSettings(){
+		Map<String, MessageSeveritySetting> settings = _messageSettings;
+		if (settings == null){
+			settings = new HashMap<String, MessageSeveritySetting>(10);
+			init(settings);
+			if (ValManager.getDefault().mustUseGlobalValidators(getProject())){
+				ValPrefManagerGlobal gp = ValPrefManagerGlobal.getDefault();
+				gp.loadMessages(this, settings);
+			}
+			else {
+				ValPrefManagerProject vp = new ValPrefManagerProject(getProject());
+				vp.loadMessages(this, settings);				
+			}
+			_messageSettings = settings;
+		}
+		return settings;
+	}
+	
+	/**
+	 * Answer a hash code for the configurable fields so that we can quickly determine if two
+	 * validators are the same.
+	 */
+	public int hashCodeForConfig(){
+		int h = 0;
+		if (_buildValidation)h += 101;
+		if (_delegatingId != null)h += _delegatingId.hashCode();
+		if (_manualValidation)h += 201;
+		if (_messageSettings != null){
+			for (MessageSeveritySetting ms : _messageSettings.values())h += ms.hashCode();
+		}
+		if (_sourceId != null)h += _sourceId.hashCode();
+		h += _version;
+		return h;
+	}
+	
+	private void init(Map<String, MessageSeveritySetting> settings) {
+		for (MessageSeveritySetting ms : ValidatorExtensionReader.getDefault().addMessages(this)){
+			settings.put(ms.getId(), ms);
+		}		
+	}
+
+	public abstract String getName();
+	
+	/**
+	 * Answer the project that you were enabled on. 
+	 * 
+	 * @return null if you are a global (i.e. workspace level) validator.
+	 */
+	public IProject getProject(){
+		return _project;
+	}
+		
+	/**
+	 * Answer the name of the class that implements the validator.
+	 */
+	public abstract String getValidatorClassname();
+	
+	/**
+	 * Is this validator currently enabled for validations that are triggered manually? 
+	 */
+	public boolean isManualValidation() {
+		return _manualValidation;
+	}
+
+	/**
+	 * Set whether this validator should be triggered as part of a manual validation.
+	 * 
+	 * @param manualValidation
+	 * @return true if the setting changed.
+	 */
+	public boolean setManualValidation(boolean manualValidation) {
+		return setManualValidation2(manualValidation);
+	}
+	
+	protected final boolean setManualValidation2(boolean manualValidation) {
+		boolean changed = false;
+		if (_manualValidation != manualValidation){
+			bumpChangeCountGlobal();
+			changed = true;
+			_manualValidation = manualValidation;
+		}
+		return changed;
+	}
+
+	/**
+	 * Is this validator currently enabled for validations that are triggered by builds? 
+	 */
+	public boolean isBuildValidation() {
+		return _buildValidation;
+	}
+	
+	/**
+	 * Has the validator changed since it was last created or copied? Or was it migrated from an earlier version. 
+	 */
+	public boolean isChanged(){
+		if (_changeCountGlobal > 0 || _changeCountMessages > 0 || _migrated)return true;
+		return false;
+	}
+	
+	/**
+	 * Has the validator's implementation been loaded yet? This is used by some test cases to ensure that 
+	 * plug-ins are not loaded too early.
+	 */
+	abstract boolean isLoaded();
+	
+
+	/**
+	 * Set whether this validator should be triggered by the build process.
+	 * 
+	 * @param buildValidation
+	 * @return true if the setting changed.
+	 */
+	public boolean setBuildValidation(boolean buildValidation) {
+		return setBuildValidation2(buildValidation);
+	}
+	
+	protected final boolean setBuildValidation2(boolean buildValidation) {
+		boolean changed = false;
+		if (_buildValidation != buildValidation){
+			bumpChangeCountGlobal();
+			changed = true;
+			_buildValidation = buildValidation;
+		}
+		return changed;
+	}
+
+	/**
+	 * Get the id of the "real" validator, that is the validator that will be called when this delegating
+	 * validator is asked to validate something. If this isn't a delegating validator answer null.
+	 */
+	public String getDelegatingId() {
+		return _delegatingId;
+	}
+	
+	/**
+	 * Set the id of the "real" validator, that is the validator that will be called when this delegating
+	 * validator is asked to validate something.
+	 * 
+	 * @param delegating the id of the validator that is actually going to perform the validation.
+	 */
+	public void setDelegatingId(String delegating) {
+		if (!Misc.same(_delegatingId, delegating)){
+			_delegatingId = delegating;
+			bumpChangeCountGlobal();
+		}
+	}
+	
+	public int getVersion() {
+		return _version;
+	}
+	
+	public void setVersion(int version) {
+		if (_version != version){
+			_version = version;
+			bumpChangeCountGlobal();
+		}
+	}
+	
+	@Override
+	public String toString() {
+		return getName();
+	}
+		
+/**
+ * A validator that uses version 1 of the validation framework.
+ * @author karasiuk
+ *
+ */ 
+public static class V1 extends Validator {
+	private ValidatorMetaData _vmd;
+	
+	/**
+	 * Create a new version 1 validator. 
+	 * @param vmd
+	 * @param config this is used to set the global enablement options. In some case this can be null.
+	 */
+	public V1(ValidatorMetaData vmd, ValidationConfiguration config, IProject project){
+		super(project);
+		_vmd = vmd;
+		if (config != null){
+			setBuildValidation(config.isBuildEnabled(vmd));
+			setManualValidation(config.isManualEnabled(vmd));
+		}
+		setDelegatingId(ValidatorDelegatesRegistry.getInstance().getDefaultDelegate(_vmd.getValidatorUniqueName()));
+		if (_vmd.getMarkerIds() != null && _vmd.getMarkerIds().length > 0)setMarkerId(_vmd.getMarkerIds()[0]);
+		resetChangeCounters();
+	}
+	
+	@Override
+	public IValidator asIValidator() {
+		IValidator v = null;
+		try {
+			v = _vmd.getValidator();
+		}
+		catch (InstantiationException e){
+			ValidationPlugin.getPlugin().handleException(e);
+			return null;
+		}
+		return v;
+	}
+	
+	public V1 asV1Validator() {
+		return this;
+	}
+			
+	public Validator copy(boolean includeChangeCounts) {
+		V1 v = new V1Copy(_vmd, null, _project);
+		v.copyLocal(this, includeChangeCounts);
+				
+		return v;
+	}
+	
+	public String getName() {
+		return _vmd.getValidatorDisplayName();
+	}
+	
+	public ValidatorMetaData getVmd(){
+		return _vmd;
+	}
+	
+	public String getValidatorClassname(){
+		String name = ""; //$NON-NLS-1$
+		try {
+			name = _vmd.getValidator().getClass().getName();
+		}
+		catch (Exception e){
+			// eat it
+		}
+		return name;
+	}
+	public String getId() {
+		return _vmd.getValidatorUniqueName();
+	}
+	
+	@Override
+	boolean isLoaded() {
+		return _vmd.isActive();
+	}
+	
+	@Override
+	public boolean setBuildValidation(boolean buildValidation) {
+		boolean changed = super.setBuildValidation(buildValidation);
+		_vmd.setBuildValidation(buildValidation);
+		return changed;
+	}
+	
+	@Override
+	public boolean setManualValidation(boolean manualValidation) {
+		boolean changed = super.setManualValidation(manualValidation);
+		_vmd.setManualValidation(manualValidation);
+		return changed;
+	}
+
+	@Override
+	protected boolean shouldValidate(IResource resource, ContentTypeWrapper contentTypeWrapper) {
+		return _vmd.isApplicableTo(resource);
+	}
+
+	@Override
+	protected boolean shouldValidateProject(IProject project) {
+		// TODO determine if this can be optimized
+		return true;
+	}
+
+	@Override
+	public ValidationResult validate(IResource resource, int kind, ValOperation operation, 
+		IProgressMonitor monitor) {
+		
+		if (monitor == null)monitor = new NullProgressMonitor();
+		
+		ValidationResult vr = new ValidationResult();
+		IValidator v = asIValidator();
+		if (v == null)return null;
+		
+		try {
+			IProject project = resource.getProject();
+			SummaryReporter reporter = new SummaryReporter(project, monitor);
+			IWorkbenchContext helper = _vmd.getHelper(project);
+			if (helper instanceof WorkbenchContext){
+				WorkbenchContext wc = (WorkbenchContext)helper;
+				List<String> files = new LinkedList<String>();
+				// [213631] The JSP validator expects full paths not relative paths, but the XML validator
+				// expects relative paths.
+				files.add(wc.getPortableName(resource));
+				wc.setValidationFileURIs(files);
+			}
+			try {
+				ValidatorLauncher.getLauncher().start(helper, v, reporter);
+			}
+			finally {
+				helper.cleanup(reporter);
+			}
+			
+			vr.incrementError(reporter.getSeverityHigh());
+			vr.incrementWarning(reporter.getSeverityNormal());
+			vr.incrementInfo(reporter.getSeverityLow());
+			
+		}
+		catch (Exception e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+		return vr;
+	}
+	
+	/*
+	 * GRK - Because I didn't want to try to make a true copy of the V1 validator, (because I didn't
+	 * want to copy the vmd object), I came up with this approach to only copy the fields that
+	 * the preference page was worried about. 
+	 */
+	public final static class V1Copy extends V1 {
+		public V1Copy(ValidatorMetaData vmd, ValidationConfiguration vc, IProject project){
+			super(vmd, vc, project);
+		}
+		
+		@Override
+		public boolean setManualValidation(boolean bool) {
+			return setManualValidation2(bool);
+		}
+		
+		@Override
+		public boolean setBuildValidation(boolean bool) {
+			return setBuildValidation2(bool);
+		}
+				
+	}
+		
+}
+
+/**
+ * A validator that uses version 2 of the validation framework.
+ * @author karasiuk
+ *
+ */
+public final static class V2 extends Validator implements IAdaptable {
+	private AbstractValidator	_validator;
+	
+	private List<FilterGroup>	_groups = new LinkedList<FilterGroup>();
+	private FilterGroup[]		_groupsArray;
+	
+	/** The full id of the extension. */
+	private String			_id;
+	
+	/** Name of the validator. */
+	private String			_name;
+	
+	/** 
+	 * We don't want to create the validator too early, as it may trigger new plug-ins to be loaded.
+	 * We delay that as long as possible, by starting with just the config element.
+	 */
+	private IConfigurationElement _validatorConfigElement;
+	
+	private String	_validatorClassName;
+	
+	/**
+	 * An array containing the validator group IDs for which this validator is a member.
+	 */
+	private String[] _validatorGroupIds;
+		
+	/** 
+	 * If this validator is a delegating validator, then this is the "real" validator (i.e. the one that
+	 * does the work).
+	 */
+	private AbstractValidator	_delegated;
+		
+	/** How many times has a group field in this validator been changed since it was created (or copied)? */
+	protected transient int _changeCountGroups;
+		
+	private Level _level;
+	
+	/**
+	 * Do we still need to invoke the validateStarting method for this validator, for the null project?
+	 * 
+	 * Because we do not want to activate a validator's plug-in too soon, we do not activate the validator
+	 * as a reaction to the global validation starting event. Instead we mark it pending, and wait until
+	 * we are sure that we have something to validate.
+	 * 
+	 * If this flag is true, it means that the validateStarting method still needs to be called for this validator.
+	 */
+	private AtomicBoolean _pendingValidationStarted = new AtomicBoolean();
+	
+	V2(IConfigurationElement configElement, IProject project){
+		super(project);
+		assert configElement != null;
+		_validatorConfigElement = configElement;
+		_validatorClassName = configElement.getAttribute(ExtensionConstants.AttribClass);
+
+		IConfigurationElement[] groupReferenceElements = configElement.getChildren(ExtensionConstants.Group.elementGroup);
+		List<String> validatorGroupIDs = new ArrayList<String>();
+		for (IConfigurationElement groupElement : groupReferenceElements) {
+			String id = groupElement.getAttribute(ExtensionConstants.Group.attId);
+			if (id != null)validatorGroupIDs.add(id);
+		}
+		_validatorGroupIds = validatorGroupIDs.toArray(new String[validatorGroupIDs.size()]);
+			
+		init();
+	}
+	
+	private V2(IProject project, String validatorClassName, AbstractValidator validator){
+		super(project);
+		assert validator != null;
+		
+		_validatorClassName = validatorClassName;
+		_validator = validator;
+		init();
+	}
+	
+	private void init(){
+		try {
+			String id = ConfigurationManager.getManager().getConfiguration(_project).getDelegateForTarget(_validatorClassName);
+			if (id == null) id = ValidatorDelegatesRegistry.getInstance().getDefaultDelegate(_validatorClassName);
+			setDelegatingId(id);
+		}
+		catch (InvocationTargetException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+		resetChangeCounters();		
+	}
+
+	public synchronized void add(FilterGroup fg) {
+		assert fg != null;
+		_groupsArray = null;
+		_groups.add(fg);
+		bumpChangeCountGroups();
+	}
+	
+	@Override
+	public IValidator asIValidator() {
+		AbstractValidator av = getDelegatedValidator();
+		if (av instanceof IValidator)return (IValidator)av;
+		return super.asIValidator();
+	}
+	
+	@Override
+	public V2 asV2Validator() {
+		return this;
+	}
+	
+	/**
+	 * Let the validator know that a clean is about to happen.
+	 * 
+	 * @param project the project that is being cleaned. This can be null which means that the workspace
+	 * is being cleaned (in which case a separate call will be made for each open project).
+	 * 
+	 */
+	@Override
+	public void clean(IProject project, ValOperation operation, IProgressMonitor monitor) {
+		getDelegatedValidator().clean(project, operation.getState(), monitor);
+	}
+	
+	@Override
+	public Validator copy(boolean includeChangeCounts) {
+		V2 v = null;
+		if (_validatorConfigElement != null)v = new V2(_validatorConfigElement, _project);
+		else v = new V2(_project, _validatorClassName, _validator);
+		v.copyLocal(this, includeChangeCounts);
+		
+		if (includeChangeCounts)v._changeCountGroups = _changeCountGroups;
+		
+		FilterGroup[] groups = getGroups();
+		v._groupsArray = new FilterGroup[groups.length];
+		for (int i=0; i<groups.length; i++){
+			v._groupsArray[i] = groups[i];
+			v._groups.add(groups[i]);
+		}
+
+		v._id = _id;
+		v._name = _name;
+		v._validatorGroupIds = _validatorGroupIds;
+		v._pendingValidationStarted = _pendingValidationStarted;
+				
+		return v;
+	}
+	
+	public int getChangeCountGroups(){
+		return _changeCountGroups;
+	}
+	
+	public void bumpChangeCountGroups(){
+		_changeCountGroups++;
+	}
+	
+	public Level getLevel() {
+		return _level;
+	}
+
+	public void setLevel(Level level) {
+		assert _level == null;
+		_level = level;
+	}
+	
+	/**
+	 * Answer the actual validator that is going to perform the validation. If this is a normal validator this
+	 * method will simply answer itself. However if this is a delegating validator, then this will answer the
+	 * "real" validator.
+	 */
+	public AbstractValidator getDelegatedValidator(){
+		AbstractValidator delegated = _delegated;
+		if (delegated != null)return delegated;
+		else if (getDelegatingId() == null)return getValidator();
+		try {
+			ValidatorDelegateDescriptor vdd = ValidatorDelegatesRegistry.getInstance()
+				.getDescriptor(getValidatorClassname(), getDelegatingId());
+			if (vdd == null)return getValidator();
+			delegated = vdd.getValidator2();
+		}
+		catch (Exception e){
+			ValidationPlugin.getPlugin().handleException(e);
+			delegated = new NullValidator();
+		}
+		delegated.setParent(this);
+		_delegated = delegated;
+		return delegated;
+	}
+		
+	@Override
+	public String getId() {
+		return _id;
+	}
+	
+	/**
+	 * Answer the validator's filter groups.
+	 * @return an empty array if the validator does not have any filter groups.
+	 */
+	public synchronized FilterGroup[] getGroups(){
+		FilterGroup[] groups = _groupsArray;
+		if (groups == null){
+			groups = new FilterGroup[_groups.size()];
+			_groups.toArray(groups);
+			_groupsArray = groups;
+		}
+		return groups;
+	}
+	
+	@Override
+	public String getName() {
+		return _name;
+	}
+	
+	public AbstractValidator getValidator() {
+		if (_validator == null){
+			try {
+				_validator = (AbstractValidator)_validatorConfigElement.createExecutableExtension(ExtensionConstants.AttribClass);
+			}
+			catch (Exception e){
+				ValidationPlugin.getPlugin().handleException(e);
+				IContributor contrib = _validatorConfigElement.getContributor();
+				String message = NLS.bind(ValMessages.ErrConfig, contrib.getName());
+				ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, message);
+				_validator = new NullValidator();
+			}
+			_validator.setParent(this);
+			_validatorConfigElement = null;
+
+		}
+		return _validator;
+	}
+	
+	@Override
+	public String getValidatorClassname(){
+		return _validatorClassName;
+	}
+	
+	public String[] getValidatorGroups(){
+		return _validatorGroupIds;
+	}
+	
+	@Override
+	public int hashCodeForConfig() {
+		int h =  super.hashCodeForConfig();
+		if (_id != null)h += _id.hashCode();
+		if (_groups != null){
+			for (FilterGroup fg : _groups)h += fg.hashCodeForConfig();
+		}
+		return h;
+	}
+	
+	@Override
+	public boolean isChanged() {
+		if (_changeCountGroups > 0)return true;
+		return super.isChanged();
+	}
+	
+	@Override
+	boolean isLoaded() {
+		return _validator != null;
+	}
+	
+	@Override
+	public boolean shouldClearMarkers(ValidationEvent event) {
+		return getValidator().shouldClearMarkers(event);
+	}
+		
+	/**
+	 * Answer true if this validator, based on it's filters, should validate this resource.
+	 * 
+	 * @return true if the resource should be validated.
+	 */
+	@Override
+	protected boolean shouldValidate(IResource resource, ContentTypeWrapper contentTypeWrapper) {
+		FilterGroup[] groups = getGroups();
+		IProject project = resource.getProject();
+		for (FilterGroup group : groups){
+			if (!group.shouldValidate(project, resource, contentTypeWrapper))return false;
+		}
+		return true;
+	}
+	
+	
+	@Override
+	public void setDelegatingId(String delegating) {
+		super.setDelegatingId(delegating);
+		_delegated = null;
+	}
+	
+	public synchronized void setGroups(List<FilterGroup> groups){
+		_groups = groups;
+		_groupsArray = null;
+		bumpChangeCountGroups();
+	}
+
+	public void setId(String id) {
+		if (!Misc.same(_id, id)){
+			_id = id;
+			bumpChangeCountGlobal();
+		}
+	}
+	
+	public void setName(String name) {
+		if (!Misc.same(_name, name)){
+			_name = name;
+			bumpChangeCountGlobal();
+		}
+	}
+	
+	@Override
+	public ValidationResult validate(IResource resource, int kind, ValOperation operation, IProgressMonitor monitor){
+		return validate(resource, kind, operation, monitor, null);
+	}
+	
+	@Override
+	public ValidationResult validate(IResource resource, int kind, ValOperation operation, IProgressMonitor monitor, ValidationEvent event) {
+		ValidationResult vr = null;
+		if (operation == null)operation = new ValOperation();
+		if (monitor == null)monitor = new NullProgressMonitor();
+		try {
+			if (event == null)event = new ValidationEvent(resource, kind, null);
+			vr = getDelegatedValidator().validate(event, operation.getState(), monitor);
+			if (vr == null)vr = getDelegatedValidator().validate(resource, kind, operation.getState(), monitor);
+		}
+		catch (Exception e){
+			try {
+				String msg = NLS.bind(ValMessages.LogValEnd, getName(), resource.getLocationURI());
+				ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, msg);
+			}
+			catch (Exception e2 ){
+				// ignore it
+			}
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+		
+		if (vr != null){
+			if (vr.getValidationException() != null){
+				ValidationPlugin.getPlugin().handleException(vr.getValidationException());
+			}
+			updateResults(vr);
+			if (vr.getDependsOn() != null){
+				ValidationFramework.getDefault().getDependencyIndex().set(getId(), resource, vr.getDependsOn());
+			}
+			IResource[] validated = vr.getValidated();
+			if (validated != null){
+				for (int i=0; i<validated.length; i++){
+					operation.addValidated(getId(), validated[i]);
+				}
+			}
+			
+			ValidatorMessage[] msgs = vr.getMessages();
+//			if (sanityTest(msgs.length, resource)){
+				MarkerManager mm = MarkerManager.getDefault();
+				for (ValidatorMessage m : msgs){
+					mm.createMarker(m, getId());
+				}
+//			}
+//			else {
+//				setBuildValidation(false);
+//				setManualValidation(false);
+//			}
+		}
+		return vr;		
+	}
+	
+	/**
+	 * Perform a simple sanity test to ensure that the validator is configured correctly.
+	 * @param numberofMessages number of messages that the validator produced.
+	 * @return true if the test passed
+	 */
+//	private boolean sanityTest(int numberofMessages, IResource resource) {
+//		if (numberofMessages < 201)return true;
+//		
+//		String resName = ""; //$NON-NLS-1$
+//		if (resource != null)resName = resource.getName();
+//		String message = NLS.bind(ValMessages.ConfigError, new Object[]{
+//				getName(), getId(), String.valueOf(numberofMessages), resName});
+//		ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, message);
+//		
+//		return false;
+//	}
+
+	/**
+	 * If the validator is using a report helper then update it with any of the messages that were
+	 * added directly to the validation result.
+	 * @param vr
+	 */
+	private void updateResults(ValidationResult vr) {
+		ReporterHelper rh = vr.getReporterHelper();
+		if (rh == null)return;
+		ClassLoader classloader = getDelegatedValidator().getClass().getClassLoader();
+		for (IMessage message : rh.getMessages()){
+			Object target = message.getTargetObject();
+			if (target != null){
+				IResource res = null;
+				if (target instanceof IResource)res = (IResource)target;
+				if (res == null){
+					target = message.getAttribute(IMessage.TargetResource);
+					if (target != null && target instanceof IResource)res = (IResource)target;
+				}
+				if (res != null){
+					
+					ValidatorMessage vm = ValidatorMessage.create(message.getText(classloader), res);
+					if (getMarkerId() != null)vm.setType(getMarkerId());
+					vr.add(vm);
+					int markerSeverity = IMarker.SEVERITY_INFO;
+					int sev = message.getSeverity();
+					if ((sev & IMessage.HIGH_SEVERITY) != 0)markerSeverity = IMarker.SEVERITY_ERROR;
+					else if ((sev & IMessage.NORMAL_SEVERITY) != 0)markerSeverity = IMarker.SEVERITY_WARNING;
+					vm.setAttribute(IMarker.SEVERITY, markerSeverity);
+					vm.setAttribute(IMarker.LINE_NUMBER, message.getLineNumber());
+					int offset = message.getOffset();
+					if (offset != IMessage.OFFSET_UNSET){
+						vm.setAttribute(IMarker.CHAR_START, offset);
+						int len = message.getLength();
+						if (len != IMessage.OFFSET_UNSET){
+							vm.setAttribute(IMarker.CHAR_START, offset);
+							vm.setAttribute(IMarker.CHAR_END, offset+len);
+						}
+					}
+					String groupName = message.getGroupName();
+					if (groupName != null){
+						vm.setAttribute(ConfigurationConstants.VALIDATION_MARKER_GROUP, groupName);
+					}
+					
+					copyAttributes(message, vm);
+				}
+			}
+		}		
+	}
+
+	@SuppressWarnings("unchecked")
+	private void copyAttributes(IMessage message, ValidatorMessage vm) {
+		// I made this a separate method, so that I could localize the suppression of unchecked warnings.
+		Map attributes = message.getAttributes();
+		if (attributes != null){						
+			for (Iterator it = attributes.entrySet().iterator(); it.hasNext();){
+				Map.Entry me = (Map.Entry)it.next();
+				String key = (String)me.getKey();
+				vm.setAttribute(key, me.getValue());
+			}
+		}
+	}
+	
+	@Override
+	public void validationStarting(IProject project, ValidationState state, IProgressMonitor monitor) {
+		if (project == null)_pendingValidationStarted.set(true);
+		else {
+			AbstractValidator val = getDelegatedValidator();
+			if (_pendingValidationStarted.getAndSet(false)){
+				val.validationStarting(null, state, monitor);
+			}
+			val.validationStarting(project, state, monitor);
+		}
+	}
+	
+	@Override
+	public void validationFinishing(IProject project, ValidationState state, IProgressMonitor monitor) {
+		if (project == null){
+			if (!_pendingValidationStarted.getAndSet(false))getDelegatedValidator().validationFinishing(null, state, monitor);
+		}
+		else getDelegatedValidator().validationFinishing(project, state, monitor);
+	}
+
+	@SuppressWarnings("unchecked")
+	public Object getAdapter(Class adapter) {
+		return Platform.getAdapterManager().getAdapter(this, adapter);
+	}
+
+	public synchronized void remove(FilterGroup group) {
+		_groups.remove(group);
+		_groupsArray = null;	
+		bumpChangeCountGroups();
+	}
+	
+	@Override
+	public void resetChangeCounters() {
+		super.resetChangeCounters();
+		_changeCountGroups = 0;
+	}
+
+	@Override
+	protected boolean shouldValidateProject(IProject project) {
+		FilterGroup[] groups = getGroups();
+		ContentTypeWrapper ctw = new ContentTypeWrapper();
+		for (FilterGroup group : groups){
+			if (!group.shouldValidate(project, null, ctw))return false;
+		}
+		return true;
+	}
+	
+	public synchronized void replaceFilterGroup(FilterGroup existing, FilterGroup merged) {
+		remove(existing);
+		add(merged);
+	}
+
+}
+
+public String getSourceId() {
+	return _sourceId;
+}
+
+public void setSourceId(String sourceId) {
+	if (!Misc.same(_sourceId, sourceId)){
+		_sourceId = sourceId;
+		bumpChangeCountGlobal();
+	}
+}
+
+
+void setMessages(Map<String, MessageSeveritySetting> map) {
+	_messageSettings = map;
+	bumpChangeCountMessages();
+}
+
+public int getChangeCountGlobal() {
+	return _changeCountGlobal;
+}
+
+public boolean hasGlobalChanges(){
+	return _migrated || _changeCountGlobal > 0;
+}
+
+public int getChangeCountMessages() {
+	return _changeCountMessages;
+}
+
+public void bumpChangeCountMessages(){
+	_changeCountMessages++;
+}
+
+public void resetChangeCounters() {
+	_changeCountGlobal = 0;
+	_changeCountMessages = 0;
+}
+
+public void bumpChangeCountGlobal(){
+	_changeCountGlobal++;
+}
+
+/**
+ * Answer true if you have the same configuration settings as validator.
+ * @param validator this can be null.
+ */
+public boolean sameConfig(Validator validator) {
+	if (validator == null)return false;
+	return hashCodeForConfig() == validator.hashCodeForConfig();
+}
+
+public String getMarkerId() {
+	return _markerId;
+}
+
+public void setMarkerId(String markerId) {
+	_markerId = markerId;
+	if (markerId != null)MarkerManager.getDefault().getMarkers().add(markerId);
+}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidatorMessage.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidatorMessage.java
new file mode 100644
index 0000000..b8146dc
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidatorMessage.java
@@ -0,0 +1,295 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.wst.validation.internal.Tracing;
+import org.eclipse.wst.validation.internal.ValConstants;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+/**
+ * This class provides a way for a validator to return messages, that are easily
+ * converted into IMarkers.
+ * <p>
+ * This class is completely optional for validators. A validator can choose to
+ * directly manage IMarkers. However, some validators want to be used in
+ * multiple contexts, for example as-you-type validation and build based
+ * validation. For these types of validators it is not possible for them to use
+ * only IMarkers, because often the Resource has not been saved yet.
+ * </p>
+ * <p>
+ * <b>Provisional API:</b> This class/interface 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.
+ * </p>
+ */
+public class ValidatorMessage {
+	
+	public static final String ValidationId = "ValidationId"; //$NON-NLS-1$
+	
+	/** Associate some arbitrary attributes with a message. */
+	private final Map<String, Object>	_map = new HashMap<String, Object>(5);
+	
+	private IResource	_resource;
+	
+	/** The type of marker. */
+	private String		_type;
+	
+	/**
+	 * Create a new validation message.
+	 * 
+	 * @param message
+	 * 		The localized message that will be displayed to the user.
+	 * 
+	 * @param resource
+	 * 		The resource that the message is associated with.
+	 */
+	public static ValidatorMessage create(String message, IResource resource){
+		ValidatorMessage msg = new ValidatorMessage();
+		msg._type = ValConstants.ProblemMarker;
+		msg._resource = resource;
+		msg.setAttribute(IMarker.MESSAGE, ValidationPlugin.getPlugin().isDebugging() ? 
+			Tracing.timestampIt(message): message);
+		return msg;
+	}
+	
+	private ValidatorMessage(){}
+	
+	/**
+	 * Answer a copy of yourself.
+	 */
+	public ValidatorMessage asCopy(){
+		ValidatorMessage msg = new ValidatorMessage();
+		msg._resource = _resource;
+		msg._type = _type;
+		msg._map.putAll(_map);
+		return msg;
+	}
+	
+	/**
+	 * Returns the attribute with the given name. The result is an instance of
+	 * one of the following classes: <code>String</code>, <code>Integer</code>,
+	 * or <code>Boolean</code>. Returns <code>null</code> if the attribute is
+	 * undefined.
+	 * 
+	 * @param attributeName
+	 * 		The name of the attribute.
+	 * @return the value, or <code>null</code> if the attribute is undefined.
+	 */
+	public Object getAttribute(String attributeName){
+		return _map.get(attributeName);
+	}
+
+	/**
+	 * Returns the integer valued attribute with the given name. Returns the
+	 * given default value if the attribute is undefined or the marker does not
+	 * exist or is not an integer value.
+	 * 
+	 * @param attributeName
+	 * 		The name of the attribute.
+	 * @param defaultValue
+	 * 		The value to use if no integer value is found.
+	 * @return the value or the default value if no integer value was found.
+	 */
+	public int getAttribute(String attributeName, int defaultValue){
+		Integer value = null;
+		try {
+			value = (Integer)_map.get(attributeName);
+		}
+		catch (Exception e){
+			// eat it
+		}
+		if (value == null)return defaultValue;
+		return value.intValue();
+	}
+
+	/**
+	 * Returns the string valued attribute with the given name. Returns the
+	 * given default value if the attribute is undefined or the marker does not
+	 * exist or is not a string value.
+	 * 
+	 * @param attributeName
+	 * 		The name of the attribute.
+	 * @param defaultValue
+	 * 		The value to use if no value is found.
+	 * @return the value or the default value if no value was found.
+	 */
+	public String getAttribute(String attributeName, String defaultValue){
+		String value = null;
+		try {
+			value = (String)_map.get(attributeName);
+		}
+		catch (Exception e){
+			// eat it
+		}
+		if (value == null)return defaultValue;
+		return value;
+		
+	}
+
+	/**
+	 * Returns the boolean valued attribute with the given name. Returns the
+	 * given default value if the attribute is undefined or the marker does not
+	 * exist or is not a boolean value.
+	 * 
+	 * @param attributeName
+	 * 		The name of the attribute.
+	 * @param defaultValue
+	 * 		The value to use if no value is found.
+	 * @return the value or the default value if no value was found.
+	 */
+	public boolean getAttribute(String attributeName, boolean defaultValue){
+		Boolean value = null;
+		try {
+			value = (Boolean)_map.get(attributeName);
+		}
+		catch (Exception e){
+			// eat it
+		}
+		if (value == null)return defaultValue;
+		return value.booleanValue();
+		
+	}
+
+	/**
+	 * Returns a map with all the attributes for the marker. If the marker has
+	 * no attributes then <code>null</code> is returned.
+	 * 
+	 * @return a map of attribute keys and values (key type :
+	 * 	<code>String</code> value type : <code>String</code>,
+	 * 	<code>Integer</code>, or <code>Boolean</code>) or <code>null</code>.
+	 */
+	@SuppressWarnings("unchecked")
+	public Map getAttributes() {
+		return _map;
+	}
+		
+	/**
+	 * Returns the resource with which this marker is associated. 
+	 *
+	 * @return the resource with which this marker is associated
+	 */
+	public IResource getResource(){
+		return _resource;		
+	}
+
+	/**
+	 * Returns the type of this marker. The returned marker type will not be 
+	 * <code>null</code>.
+	 *
+	 * @return the type of this marker
+	 */
+	public String getType() {
+		return _type;
+	}
+	
+	/**
+	 * Sets the marker type.
+	 * 
+	 * @param type The marker id to use when creating new markers.
+	 */
+	public void setType(String type){
+		assert type != null;
+		_type = type;
+	}
+		
+	/**
+	 * Sets the integer valued attribute with the given name.
+	 * <p>
+	 * This method changes resources; these changes will be reported in a
+	 * subsequent resource change event, including an indication that this
+	 * marker has been modified.
+	 * </p>
+	 * 
+	 * @param attributeName
+	 * 		The name of the attribute.
+	 * @param value
+	 * 		The value.
+	 */
+	public void setAttribute(String attributeName, int value){
+		_map.put(attributeName, new Integer(value));
+		
+	}
+
+	/**
+	 * Sets the attribute with the given name. The value must be
+	 * <code>null</code> or an instance of one of the following classes:
+	 * <code>String</code>, <code>Integer</code>, or <code>Boolean</code>.
+	 * 
+	 * @param attributeName
+	 * 		The name of the attribute.
+	 * @param value
+	 * 		The value, or <code>null</code> if the attribute is to be undefined.
+	 */
+	public void setAttribute(String attributeName, Object value){
+		_map.put(attributeName, value);
+	}
+
+	/**
+	 * Sets the boolean valued attribute with the given name.
+	 * 
+	 * @param attributeName
+	 * 		The name of the attribute.
+	 * @param value
+	 * 		The value.
+	 */
+	public void setAttribute(String attributeName, boolean value){
+		_map.put(attributeName, value ? Boolean.TRUE : Boolean.FALSE);		
+	}
+
+	/**
+	 * Sets the given attribute key-value pairs on this marker. The values must
+	 * be <code>null</code> or an instance of one of the following classes:
+	 * <code>String</code>, <code>Integer</code>, or <code>Boolean</code>. If a
+	 * value is <code>null</code>, the new value of the attribute is considered
+	 * to be undefined.
+	 * 
+	 * @param attributeNames
+	 * 		An array of attribute names.
+	 * @param values
+	 * 		An array of attribute values.
+	 */
+	public void setAttributes(String[] attributeNames, Object[] values){
+		Assert.isTrue(attributeNames.length == values.length);
+		for (int i=0; i<attributeNames.length; i++){
+			setAttribute(attributeNames[i], values[i]);			
+		}
+	}
+
+	/**
+	 * Sets the attributes for this marker to be the ones contained in the given
+	 * table. The values must be an instance of one of the following classes:
+	 * <code>String</code>, <code>Integer</code>, or <code>Boolean</code>.
+	 * Attributes previously set on the marker but not included in the given map
+	 * are considered to be removals. Setting the given map to be
+	 * <code>null</code> is equivalent to removing all marker attributes.
+	 * 
+	 * @param attributes
+	 * 		A map of attribute names to attribute values (key type :
+	 * 		<code>String</code> value type : <code>String</code>,
+	 * 		<code>Integer</code>, or <code>Boolean</code>) or <code>null</code>.
+	 */
+	public void setAttributes(Map<String, Object> attributes) {
+		_map.clear();
+		_map.putAll(attributes);
+		
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ContentTypeWrapper.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ContentTypeWrapper.java
new file mode 100644
index 0000000..2436c84
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ContentTypeWrapper.java
@@ -0,0 +1,43 @@
+package org.eclipse.wst.validation.internal;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.content.IContentDescription;
+import org.eclipse.core.runtime.content.IContentType;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+/**
+ * Since it can be expense to determine a content type, we provide a wrapper so that we only
+ * need to get it once, as we validate a resource.
+ * @author karasiuk
+ *
+ */
+public class ContentTypeWrapper {
+	
+	private IContentType _type;
+	private boolean 	_initialized;
+	
+	public IContentType getContentType(IFile file){
+		if (_initialized)return _type;
+		
+		IContentDescription cd = null;
+		try {
+			cd = file.getContentDescription();
+		}
+		catch (CoreException e){
+			try {
+				file.refreshLocal(IResource.DEPTH_ZERO, null);
+				cd = file.getContentDescription();
+			}
+			catch (CoreException e2){
+				if (Tracing.isLogging())ValidationPlugin.getPlugin().handleException(e2);
+			}
+		}
+		if (cd == null)return null;
+		_type = cd.getContentType();
+		_initialized = true;
+		return _type;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DebugConstants.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DebugConstants.java
new file mode 100644
index 0000000..a466241
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DebugConstants.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.plugin.ValidationPlugin;
+
+public interface DebugConstants {
+	
+	/** matches - trace filter matches. */
+	String TraceMatches = ValidationPlugin.PLUGIN_ID+"/matches"; //$NON-NLS-1$
+	
+	/** timings - trace the times of the validators. */
+	String TraceTimes = ValidationPlugin.PLUGIN_ID+"/timings"; //$NON-NLS-1$
+	
+	/** v1 - trace the v1 validators. */
+	String TraceV1 = ValidationPlugin.PLUGIN_ID+"/v1"; //$NON-NLS-1$
+	
+	/** timings/tracefile - file that stores the trace events */
+	String TraceTimesFile = ValidationPlugin.PLUGIN_ID+"/timings/tracefile"; //$NON-NLS-1$
+	
+	/** 
+	 * timings/useDoubles - By default times that are written to the trace file are
+	 * in milliseconds for elapsed time and nanoseconds for cpu time. 
+	 * If you find these times easier to read as seconds as expressed by a double, 
+	 * the following flag can be turned on.
+	 */
+	String TraceTimesUseDoubles = ValidationPlugin.PLUGIN_ID+"/timings/useDoubles"; //$NON-NLS-1$
+	
+	/** 
+	 * extraValDetail - If extra detail is needed for a particular validator it's id can be specified here. 
+	 * For example, if you wanted more detail on the XML validator you would use org.eclipse.wst.xml.core.xml 
+	 */
+	String ExtraValDetail = ValidationPlugin.PLUGIN_ID+"/extraValDetail"; //$NON-NLS-1$
+	
+	/** 
+	 * filter/allExcept - If supplied, it is as if this is the only validator that gets defined via
+	 * the extension point. All the other validators are ignored.
+	 */
+	String FilterAllExcept = ValidationPlugin.PLUGIN_ID+"/filter/allExcept"; //$NON-NLS-1$
+	
+	/**
+	 * trace/level - The tracing level. If not supplied a default of zero is used. The higher the number the
+	 * more verbose the tracing.
+	 */
+	String TraceLevel = ValidationPlugin.PLUGIN_ID+"/trace/level"; //$NON-NLS-1$
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DependencyIndex.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DependencyIndex.java
new file mode 100644
index 0000000..ff29dca
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DependencyIndex.java
@@ -0,0 +1,370 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+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.ISaveContext;
+import org.eclipse.core.resources.ISaveParticipant;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.validation.DependentResource;
+import org.eclipse.wst.validation.IDependencyIndex;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+/**
+ * A simple implementation of the IDependencyIndex. This will probably be
+ * replaced with a higher performance, more robust index, at some point in the
+ * future.
+ * <p>
+ * The format of the index is:
+ * 
+ * <pre>
+ * Version number
+ * Number of depends on entries
+ *   depends on file name
+ *   number of dependent entries
+ *     dependent file name
+ *     number of validators
+ *       validator id
+ * </pre>
+ * 
+ * @author karasiuk
+ */
+public class DependencyIndex implements IDependencyIndex, ISaveParticipant {
+	
+	/**
+	 * An index so that we can determine which things depend on this resource.
+	 */
+	private Map<IResource,Set<Depends>>		_dependsOn;
+	
+	/**
+	 * An index so that we can determine who the resource depends on.
+	 */
+	private Map<IResource,Set<Depends>>		_dependents;
+	private boolean _dirty;
+	
+	private static IResource[] EmptyResources = new IResource[0];
+	
+	/** Version of the persistent index. */
+	private static final int CurrentVersion = 1;
+
+	public synchronized void add(String id, IResource dependent, IResource dependsOn) {
+		init();
+		if (dependsOn == null || dependent == null)return;
+		Depends d = getOrCreateDepends(dependent, dependsOn);
+		if (d.getValidators().add(id))_dirty = true;
+	}
+	
+	private Depends getOrCreateDepends(IResource dependent, IResource dependsOn) {
+		Set<Depends> set = getSet(_dependents, dependent);
+		for (Depends d : set){
+			if (d.getDependsOn().equals(dependsOn)) return d;
+		}
+		Depends d = new Depends(dependent, dependsOn);
+		_dirty = true;
+		set.add(d);
+		
+		getSet(_dependsOn, dependsOn).add(d);
+		return d;
+	}
+
+	/**
+	 * Answer the set for the resource, creating it if you need to.
+	 */
+	private Set<Depends> getSet(Map<IResource, Set<Depends>> map, IResource resource) {
+		Set<Depends> set = map.get(resource);
+		if (set == null){
+			set = new HashSet<Depends>(5);
+			map.put(resource, set);
+		}
+		return set;
+	}
+
+	/**
+	 * Restore the dependency index. See the class comment for the structure.
+	 */	
+	private void init() {
+		if (_dependsOn != null)return;
+		
+		boolean error = false;
+		File f = getIndexLocation();
+		if (!f.exists()){
+			_dependsOn = new HashMap<IResource,Set<Depends>>(100);
+			_dependents = new HashMap<IResource,Set<Depends>>(100);
+		}
+		else {
+			String errorMessage = "The following dependency could not be restored " + 
+				"because the following resource {0} could no longer be found."; 
+			DataInputStream in = null;
+			try {
+				IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+				in = new DataInputStream(new FileInputStream(f));
+				
+				int version = in.readInt();
+				if (version != CurrentVersion){
+					error = true;
+					String msg = NLS.bind(ValMessages.ErrDependencyVersion, CurrentVersion);
+					throw new IllegalStateException(msg);
+				}
+				int numDependsOn = in.readInt();
+				_dependsOn = new HashMap<IResource,Set<Depends>>(numDependsOn+100);
+				_dependents = new HashMap<IResource,Set<Depends>>(numDependsOn+100);
+				for (int i=0; i<numDependsOn; i++){
+					String v = in.readUTF();
+					IResource dependsOn = root.findMember(v);
+					if (dependsOn == null){
+						Tracing.log(NLS.bind(errorMessage, v));
+					}
+					int numDependents = in.readInt();
+					for (int j=0; j<numDependents; j++){
+						v = in.readUTF();
+						IResource dependent = root.findMember(v);
+						if (dependent == null){
+							Tracing.log(NLS.bind(errorMessage, v));
+						}
+						int numVal = in.readInt();
+						for (int k=0; k<numVal; k++){
+							String id = in.readUTF();
+							if (dependent != null && dependsOn != null)add(id, dependent, dependsOn);
+						}
+					}					
+				}				
+			}
+			catch (IOException e){
+				error = true;
+				ValidationPlugin.getPlugin().handleException(e);
+			}
+			finally {
+				Misc.close(in);
+				if (error){
+					_dependsOn = new HashMap<IResource,Set<Depends>>(100);
+					_dependents = new HashMap<IResource,Set<Depends>>(100);
+					f.delete();
+				}
+			}			
+		}
+	}
+
+	public synchronized void clear(IProject project) {
+		init();
+		for (Map.Entry<IResource,Set<Depends>> me : _dependents.entrySet()){
+			if (me.getKey().getProject() == project){
+				for (Depends d : me.getValue()){
+					if (d.delete())_dirty = true;
+				}
+			}
+		}
+	}
+
+	public synchronized IResource[] get(String validatorId, IResource dependsOn) {
+		init();
+		List<IResource> list = new LinkedList<IResource>();
+		Set<Depends> set = getSet(_dependsOn, dependsOn);
+		for (Depends d : set){
+			for (String id : d.getValidators()){
+				if (validatorId.equals(id))list.add(d.getDependent());
+			}
+		}
+		
+		if (list.size() == 0)return EmptyResources;
+		IResource[] resources = new IResource[list.size()];
+		list.toArray(resources);
+		return resources;
+	}
+
+	
+	public synchronized List<DependentResource> get(IResource dependsOn) {
+		init();
+		List<DependentResource> list = new LinkedList<DependentResource>();
+		Set<Depends> set = getSet(_dependsOn, dependsOn);
+		ValManager vm = ValManager.getDefault();
+		for (Depends d : set){
+			for (String id : d.getValidators()){
+				Validator v = vm.getValidator(id, d.getDependent().getProject());
+				if (v != null)list.add(new DependentResource(d.getDependent(), v));
+			}
+		}
+		return list;
+	}
+
+
+	public synchronized void set(String id, IResource dependent, IResource[] dependsOn) {
+		init();
+		Set<Depends> set = getSet(_dependents, dependent);
+		for (Depends d : set){
+			if (d.delete(id))_dirty = true;
+		}
+		if (dependsOn != null){
+			for (IResource d : dependsOn)add(id, dependent, d);
+		}
+	}
+		
+	public boolean isDependedOn(IResource resource) {
+		init();
+		Set<Depends> set = _dependsOn.get(resource);
+		if (set == null || set.size() == 0)return false;
+		return true;
+	}
+
+	public void doneSaving(ISaveContext context) {	
+	}
+	
+	public void prepareToSave(ISaveContext context) throws CoreException {	
+	}
+	
+	public void rollback(ISaveContext context) {
+	}
+	
+	/**
+	 * Persist the dependency index. See the class comment for the structure.
+	 */
+	public synchronized void saving(ISaveContext context) throws CoreException {
+		if (!_dirty)return;
+		_dirty = false;
+		
+		DataOutputStream out = null;
+		try {
+			File f = getIndexLocation();
+			out = new DataOutputStream(new FileOutputStream(f));
+			out.writeInt(CurrentVersion);
+			Map<String, Set<DependsResolved>> map = compress(_dependsOn);
+			out.writeInt(map.size());
+			for (Map.Entry<String, Set<DependsResolved>> me : map.entrySet()){
+				out.writeUTF(me.getKey());
+				Set<DependsResolved> set = me.getValue();
+				out.writeInt(set.size());
+				for (DependsResolved d : set){
+					out.writeUTF(d.resource);
+					out.writeInt(d.validators.size());
+					for (String id : d.validators){
+						out.writeUTF(id);
+					}
+				}
+			}
+		}
+		catch (IOException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+		finally {
+			Misc.close(out);
+		}
+	}
+
+	private Map<String, Set<DependsResolved>> compress(Map<IResource, Set<Depends>> dependsOn) {
+		Map<String, Set<DependsResolved>> map = new HashMap<String, Set<DependsResolved>>(dependsOn.size());
+		for (Map.Entry<IResource, Set<Depends>> me : dependsOn.entrySet()){
+			Set<DependsResolved> set = new HashSet<DependsResolved>(me.getValue().size());
+			for (Depends d : me.getValue()){
+				IPath path = d.getDependent().getFullPath();
+				if (path != null){
+					DependsResolved dr = new DependsResolved();
+					dr.resource = path.toPortableString();
+					if (d.getValidators().size() > 0){
+						dr.validators = d.getValidators();
+						set.add(dr);
+					}
+				}				
+			}
+			if (set.size() > 0){
+				IResource res = me.getKey();
+				if (res != null){
+					IPath path = res.getFullPath();
+					if (path != null)map.put(path.toPortableString(), set);
+				}
+			}
+		}
+		return map;
+	}
+
+	private File getIndexLocation() {
+		IPath path = ValidationPlugin.getPlugin().getStateLocation().append("dep.index"); //$NON-NLS-1$
+		return path.toFile();
+	}
+
+	/**
+	 * Keep track of a relationship between a dependent and the thing that it
+	 * depends on.
+	 * 
+	 * @author karasiuk
+	 * 
+	 */
+	private static class Depends {
+
+		/** The resource that is being depended on, for example a.xsd */
+		private IResource _dependsOn;
+
+		/** The resource that is dependent, for example a.xml */
+		private IResource _dependent;
+
+		/** The id's of the validators that have asserted the dependency. */
+		private Set<String> _validators;
+
+		public Depends(IResource dependent, IResource dependsOn) {
+			_dependent = dependent;
+			_dependsOn = dependsOn;
+			_validators = new HashSet<String>(5);
+		}
+
+		/**
+		 * Answer true if the id was deleted.
+		 */
+		public boolean delete(String id) {
+			return _validators.remove(id);
+		}
+
+		/**
+		 * Delete all the dependency assertions for all of your validators.
+		 * @return false if there was nothing to delete
+		 */
+		public boolean delete() {
+			boolean deleted = _validators.size() > 0;
+			if (deleted)_validators.clear();
+			return deleted;
+		}
+
+		public IResource getDependsOn() {
+			return _dependsOn;
+		}
+
+		public IResource getDependent() {
+			return _dependent;
+		}
+
+		public Set<String> getValidators() {
+			return _validators;
+		}
+}
+
+	private static class DependsResolved {
+		String 		resource;
+		Set<String> validators;
+	}
+
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Deserializer.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Deserializer.java
new file mode 100644
index 0000000..b1af963
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Deserializer.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+/**
+ * A simple deserializer that knows how to retrieve booleans, integers and strings, from a string
+ * that was encoded by the Serializer class.
+ * 
+ *  @see Serializer
+ * @author karasiuk
+ *
+ */
+public class Deserializer {
+	private char[] 	_buffer;
+	private int		_posn;
+	
+	public Deserializer(String value){
+		_buffer = value.toCharArray();
+	}
+	
+	public boolean getBoolean(){
+		boolean result = false;
+		if (_buffer[_posn] == 'T')result = true;
+		else if (_buffer[_posn] == 'F')result = false;
+		else throw new IllegalStateException(ValMessages.DecodeError1);
+		
+		_posn++;
+		return result;
+	}
+	
+	public String getString(){
+		int len = getInt();
+		String result = new String(_buffer, _posn, len);
+		_posn += len;
+		return result;		
+	}
+	
+	public int getInt(){
+		Integer len = new Integer(String.valueOf(_buffer[_posn]));
+		_posn++;
+		
+		String s = String.valueOf(_buffer, _posn, len+1);
+		_posn += len+1;
+		return Integer.parseInt(s);
+	}
+
+	/**
+	 * Are there any more items?
+	 * @return
+	 */
+	public boolean hasNext() {
+		if (_posn >= _buffer.length)return false;
+		return true;
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DisabledResourceManager.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DisabledResourceManager.java
new file mode 100644
index 0000000..120180f
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DisabledResourceManager.java
@@ -0,0 +1,158 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.HashSet;
+import java.util.Set;
+
+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.wst.validation.internal.plugin.ValidationPlugin;
+import org.osgi.service.prefs.BackingStoreException;
+
+/**
+ * Validators can assert that certain resources (usually folders) are not validated. This class keeps track of those
+ * assertions.
+ * @author karasiuk
+ *
+ */
+public class DisabledResourceManager implements IProjectChangeListener {
+	
+	public static DisabledResourceManager getDefault(){
+		return Singleton.disabledResourceManager;
+	}
+	
+	private Set<IResource> _disabled = new HashSet<IResource>(100);
+	private Set<IProject>	_loadedProjects = new HashSet<IProject>(40);
+	
+	private DisabledResourceManager(){
+		EventManager.getManager().addProjectChangeListener(this);
+	}
+	
+	public void disableValidation(IResource resource){
+		// We check for two reasons, 1) we may save some work, 2) we force the project to be loaded 
+		if (isDisabled(resource))return;
+		
+		Set<IResource> copy = new HashSet<IResource>(_disabled.size()+2);
+		copy.addAll(_disabled);
+		copy.add(resource);
+		save(copy, resource.getProject());
+		_disabled = copy;
+	}
+	
+	public void enableValidation(IResource resource){
+		// We check for two reasons, 1) we may save some work, 2) we force the project to be loaded 
+		if (!isDisabled(resource))return;
+		
+		Set<IResource> copy = new HashSet<IResource>(_disabled.size()+2);
+		copy.addAll(_disabled);
+		copy.remove(resource);
+		save(copy, resource.getProject());
+		_disabled = copy;		
+	}
+		
+	private void save(Set<IResource> disabled, IProject project) {
+		Serializer ser = new Serializer(200);
+		for (IResource resource : disabled){
+			if (project == resource.getProject()){
+				ser.put(resource.getProjectRelativePath().toPortableString());
+			}
+		}
+		PreferencesWrapper prefs = PreferencesWrapper.getPreferences(project, null);
+		prefs.put(PrefConstants.disabled, ser.toString());
+		try {
+			prefs.flush();
+		}
+		catch (BackingStoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+	}
+	
+	private void load(IProject project){
+		Set<IResource> copy = new HashSet<IResource>(_disabled.size()+10);
+		copy.addAll(_disabled);
+		PreferencesWrapper prefs = PreferencesWrapper.getPreferences(project, null);
+		String disabled = prefs.get(PrefConstants.disabled, ""); //$NON-NLS-1$
+		if (disabled.length() > 0){
+			Deserializer des = new Deserializer(disabled);
+			while(des.hasNext()){
+				String pathString = des.getString();
+				IPath path = Path.fromPortableString(pathString);
+				IResource resource = project.findMember(path);
+				copy.add(resource);
+			}
+		}
+		_disabled = copy;
+	}
+
+	public void dispose(){
+		EventManager.getManager().removeProjectChangeListener(this);
+	}
+	
+	/**
+	 * Answer true if this resource should not be validated.
+	 * 
+	 * @param resource the resource that is being tested.
+	 * @return true if the resource should not be validated.
+	 */
+	public boolean isDisabled(IResource resource){
+		IProject project = resource.getProject();
+		if (_loadedProjects.contains(project))return _disabled.contains(resource);
+		return isDisabled(resource, project); 		
+	}
+	
+	private synchronized boolean isDisabled(IResource resource, IProject project){
+		if (!_loadedProjects.contains(project)){
+			load(project);
+			_loadedProjects.add(project);
+		}
+		return _disabled.contains(resource);
+	}
+	
+	public void addDisabled(IResource resource){
+		_disabled.add(resource);
+	}
+
+	public void projectChanged(IProject project, int type) {
+		switch (type) {
+		case IProjectChangeListener.ProjectDeleted:
+		case IProjectChangeListener.ProjectClosed:
+			projectRemoved(project);
+			break;
+			
+		}
+		
+	}
+	
+	private synchronized void projectRemoved(IProject project) {
+		_loadedProjects.remove(project);
+		Set<IResource> copy = new HashSet<IResource>(100);
+		for (IResource resource : _disabled){
+			if (resource.getProject() != project)copy.add(resource);
+		}
+		_disabled = copy;
+	}
+	
+	/**
+	 * Store the singleton for the DisabledResourceManager. This approach is used to avoid having to synchronize the
+	 * DisabledResourceManager.getDefault() method.
+	 * 
+	 * @author karasiuk
+	 *
+	 */
+	private static class Singleton {
+		static DisabledResourceManager disabledResourceManager = new DisabledResourceManager();
+	}
+
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DisabledValidatorManager.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DisabledValidatorManager.java
new file mode 100644
index 0000000..7505e88
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DisabledValidatorManager.java
@@ -0,0 +1,125 @@
+package org.eclipse.wst.validation.internal;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.internal.model.IValidatorVisitor;
+
+/**
+ * Keep track of the disabled validators.
+ * @author karasiuk
+ *
+ */
+public final class DisabledValidatorManager implements IValChangedListener {
+	
+	private static final AtomicInteger _counter = new AtomicInteger();
+	private static final int CacheSize = 5;
+	
+	private final Map<IResource, LRUSet> _map = Collections.synchronizedMap(new HashMap<IResource, LRUSet>(5));
+	
+	public static DisabledValidatorManager getDefault(){
+		return Singleton.disabledValidatorManager;
+	}
+	
+	private DisabledValidatorManager(){
+		ValPrefManagerProject.addListener(this);
+	}
+	
+	/*
+	 * Although this is currently not called, it should be if this ever stops being a singleton.
+	 */
+	public void dispose(){
+		ValPrefManagerProject.removeListener(this);
+	}
+
+	public Set<Validator> getDisabledValidatorsFor(IResource resource) {
+		LRUSet set = _map.get(resource);
+		if (set != null){
+			set.counter = _counter.getAndIncrement();
+			return set.validators;
+		}
+		
+		DisabledValidationFinder dvf = new DisabledValidationFinder();
+		Set<Validator> vset = dvf.findDisabledValidatorsFor(resource);
+		insert(resource, vset);
+		return vset;		
+	}
+	
+	private synchronized void insert(IResource resource, Set<Validator> vset) {
+		if (_map.size() >= CacheSize ){
+			IResource oldest = null;
+			int current = Integer.MAX_VALUE;
+			for (Map.Entry<IResource, LRUSet> me : _map.entrySet()){
+				if (me.getValue().counter < current){
+					oldest = me.getKey();
+					current = me.getValue().counter;
+				}
+			}
+			_map.remove(oldest);
+		}
+		LRUSet set = new LRUSet();
+		set.counter = _counter.getAndIncrement();
+		set.validators = vset;
+		_map.put(resource, set);		
+	}
+
+
+	private final static class LRUSet {
+		int counter;
+		Set<Validator> validators;
+	}
+	
+	private final static class DisabledValidationFinder implements IValidatorVisitor {
+		
+		private Map<String, Validator> _validators;
+
+		public void visit(Validator validator, IProject project, ValType valType, ValOperation operation,
+				IProgressMonitor monitor) {
+			
+			_validators.remove(validator.getId());
+			
+		}
+		
+		public Set<Validator> findDisabledValidatorsFor(IResource resource) {
+			ValManager vm = ValManager.getDefault();
+			Validator[] vals = vm.getValidatorsCopy();
+			_validators = new HashMap<String, Validator>(100);
+			for (Validator v : vals)_validators.put(v.getId(), v);
+						
+			IProject project = resource.getProject();
+			vm.accept(this, project, resource, ValType.Build, new ValOperation(), new NullProgressMonitor());
+			Set<Validator> set = new HashSet<Validator>(_validators.size());
+			set.addAll(_validators.values());
+			return set;
+		}
+		
+		
+	}
+
+	public void validatorsForProjectChanged(IProject project, boolean configSettingChanged) {
+		_map.clear();
+	}
+	
+	
+	/**
+	 * Store the singleton for the DisabledValidatorManager. This approach is used to avoid having to synchronize the
+	 * DisabledValidatorManager.getDefault() method.
+	 * 
+	 * @author karasiuk
+	 *
+	 */
+	private final static class Singleton {
+		final static DisabledValidatorManager disabledValidatorManager = new DisabledValidatorManager();
+	}
+
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ExtensionConstants.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ExtensionConstants.java
new file mode 100644
index 0000000..e702471
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ExtensionConstants.java
@@ -0,0 +1,183 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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 in the extension points.
+ * @author karasiuk
+ *
+ */
+public interface ExtensionConstants {
+	
+	/** validatorV2 - extension point for registering validators that use version 2 of the validation framework. */
+	String validator = "validatorV2"; //$NON-NLS-1$
+	
+	/** exclude - extension point for adding extra exclusion filters to a validator. */ 
+	String excludeExtension = "exclude"; //$NON-NLS-1$
+	
+	/** build - is the validator enabled by default for build based validations? true or false */
+	String build = "build"; //$NON-NLS-1$
+	
+	/** class - name of the attribute that holds the validator class. */
+	String AttribClass = "class"; //$NON-NLS-1$
+	
+	/** manual - is the validator enabled by default for manual based validations? true or false */
+	String manual = "manual"; //$NON-NLS-1$
+	
+	/** 
+	 * markerId - the marker id that the framework should use when creating customized markers for this validator.
+	 * This is an optional attribute. If it is not supplied than the standard validation marker type will be used.
+	 */
+	String markerId = "markerId"; //$NON-NLS-1$
+	
+	/** 
+	 * sourceid - If this validator also serves as an as-you-type validator (also know as an ISourceValidator) 
+	 * then it's source id is specified here, so that the two validators can be associated with one 
+	 * another. By source id, we mean the id that is used in the org.eclipse.wst.sse.ui.sourceValidation 
+	 * extension point.
+	 */
+	String sourceId = "sourceid"; //$NON-NLS-1$
+	
+	/** 
+	 * version - the version of this definition. The attribute is a simple integer, and if not specified it
+	 * is assumed to be 1. This allows the filter settings to be changed in the future.
+	 */
+	String version = "version";  //$NON-NLS-1$
+	
+	/** 
+	 * include - a group of inclusion rules. At least one rule in this group needs to match in order for the resource
+	 * to to considered to be validated.
+	 */
+	String include = "include"; //$NON-NLS-1$
+	
+	/** exclude - a group of exclusion rules. If any of these rules match the resource is not validated. */
+	String exclude = "exclude"; //$NON-NLS-1$
+	
+	/** rules - a group of inclusion or exclusion rules. */
+	String rules = "rules"; //$NON-NLS-1$
+	
+	/** rules - extension point to declare a validator group */
+	String group = "validatorGroup"; //$NON-NLS-1$
+	
+	interface Group {
+		/*
+		 * The group sub-element for either the validatorGroup or validator
+		 * extension points.
+		 */
+		String elementGroup = "group"; //$NON-NLS-1$
+		// a validator group identifier
+		String attId = "id"; //$NON-NLS-1$
+		// the listener sub-element
+		String elementListener = "listener"; //$NON-NLS-1$
+		// the group listener class name
+		String attClass = "class"; //$NON-NLS-1$
+	}
+	
+	/** Different types of rules for filtering validation. */
+	interface Rule {
+		
+		/** projectNature - filter by project nature. */
+		String projectNature = "projectNature"; //$NON-NLS-1$
+		
+		/** fileext - filter by file extension. */
+		String fileext = "fileext"; //$NON-NLS-1$
+		
+		/** file - a file name, it can include path information as well. */
+		String file = "file"; //$NON-NLS-1$
+		
+		/** facet - filter by facet id. */
+		String facet = "facet"; //$NON-NLS-1$
+		
+		/** contentType - filter by content type. */
+		String contentType = "contentType"; //$NON-NLS-1$
+		
+		/** pattern - filter paths by regular expression. */
+		String pattern = "pattern"; //$NON-NLS-1$
+	}
+	
+	/** Rule attributes */
+	interface RuleAttrib {
+		
+		/** caseSensitive - true or false. */
+		String caseSensitive = "caseSensitive"; //$NON-NLS-1$
+		
+		/** 
+		 * exactMatch - true or false, default is true. It is used to decide whether content types need to match
+		 * exactly, or whether sub types should also be considered.
+		 */
+		String exactMatch = "exactMatch"; //$NON-NLS-1$
+		
+		/** ext - a file extension, for example "html". */
+		String ext = "ext"; //$NON-NLS-1$
+		
+		/** id - an identifier. */
+		String id = "id"; //$NON-NLS-1$
+		
+		/** name - a file name. */
+		String name = "name"; //$NON-NLS-1$
+		
+		/** regex - a Java regular expression. */
+		String regex = "regex"; //$NON-NLS-1$
+		
+		/** 
+		 * type - the type of file to be matched:
+		 * <ul>
+		 * <li>folder - project relative folder name
+		 * <li>file - simple file name
+		 * <li>full - fully qualified, project relative file name
+		 * </ul>
+		 */
+		String fileType = "type"; //$NON-NLS-1$
+		
+		/** version - facet version expression. See the facet framework for the exact syntax of this expression. */
+		String version = "version"; //$NON-NLS-1$
+	}
+	
+	interface FileType {
+		/** folder - project relative folder name */
+		String folder = "folder"; //$NON-NLS-1$
+		
+		/** file - simple file name */
+		String file = "file"; //$NON-NLS-1$
+		
+		/** full - fully qualified, project relative file name */
+		String full = "full"; //$NON-NLS-1$
+	}
+	
+	interface MessageCategory {
+		/** messageCategory - name of the message category element. */
+		String name = "messageCategory"; //$NON-NLS-1$
+		
+		/** id - simple id of the message. */
+		String id = "id"; //$NON-NLS-1$
+		
+		/** label = human readable label of the message category. */
+		String label = "label"; //$NON-NLS-1$
+		
+		/** severity - message severity, it must be one of error, warning or ignore. */
+		String severity = "severity"; //$NON-NLS-1$
+		
+		String sevError = "error"; //$NON-NLS-1$
+		String sevWarning = "warning"; //$NON-NLS-1$
+		String sevIgnore = "ignore";  //$NON-NLS-1$
+	}
+	
+	interface Exclude {
+		/** id - fully qualified id of the validator that is being extended. */
+		String id = "id"; //$NON-NLS-1$
+	}
+	
+	/** true */
+	String True = "true"; //$NON-NLS-1$
+	
+	/** false */
+	String False = "false"; //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ExtensionValidators.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ExtensionValidators.java
new file mode 100644
index 0000000..090f4af
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ExtensionValidators.java
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+/**
+ * The validators that have been defined by the validator extension points.
+ * @author karasiuk
+ *
+ */
+public final class ExtensionValidators {
+	private static ExtensionValidators _me;
+	
+	/** All the registered validators. The key is the validator id and the value is the validator. */
+	private final Map<String, Validator> _map;
+	
+	public synchronized static ExtensionValidators instance(){
+		if (_me == null){
+			_me = new ExtensionValidators();
+		}
+		return _me;
+	}
+
+	private ExtensionValidators(){
+		_map = new HashMap<String, Validator>(100);
+		for (Validator v : ValidatorExtensionReader.getDefault().process()){
+			_map.put(v.getId(), v);
+		}		
+	}
+	
+	/**
+	 * Answer all the v2 validators that have been defined by the extension point. This is the real
+	 * map (not a copy).
+	 * 
+	 * @return The key is the validator id and the value is the validator.
+	 */
+	public Map<String, Validator> getMapV2() {
+		return _map;
+	}
+
+	/**
+	 * Answer all the v2 validators that have been defined by the extension point. This is a copy of
+	 * the map, but not a copy of the validators.
+	 * 
+	 * @return The key is the validator id and the value is the validator.
+	 */
+	public Map<String, Validator> getMapV2Copy() {
+		HashMap<String, Validator> map = new HashMap<String, Validator>(_map.size());
+		map.putAll(_map);
+		return map;
+	}
+	
+	
+	/**
+	 * Answer all the validators that have been defined by extension points. This includes all
+	 * the v2 validators, and all of the v1 validators that have been defined just on this project.
+	 * 
+	 * @return The key is the validator id and the value is the validator.
+	 */
+	public Map<String, Validator> getMap(IProject project) {
+		//TODO I may want to consider caching this, but then again if the v1 validators are going away
+		// it may not be worth it.
+		Map<String, Validator> map = new HashMap<String, Validator>();
+		map.putAll(_map);
+		
+		for (Validator v : getV1Validators(project))map.put(v.getId(), v);
+		
+		return map;
+	}
+	
+	/**
+	 * Answer the v1 validators that have been defined just on this project.
+	 * @param project
+	 * @return
+	 */
+	List<Validator> getV1Validators(IProject project){
+		List<Validator> list = new LinkedList<Validator>();
+		try {
+			ProjectConfiguration pc = new ProjectConfiguration(project);
+			pc.resetToDefault();
+			for (ValidatorMetaData vmd : pc.getValidators()){
+				Validator v = Validator.create(vmd, pc, project);
+				list.add(v);
+			}
+		}
+		catch (InvocationTargetException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+
+		return list;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/FullBuildJob.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/FullBuildJob.java
new file mode 100644
index 0000000..332a2c7
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/FullBuildJob.java
@@ -0,0 +1,29 @@
+package org.eclipse.wst.validation.internal;
+
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+public class FullBuildJob extends WorkspaceJob {
+	
+	public FullBuildJob(){
+		super(ValMessages.JobName);
+	}
+
+	@Override
+	public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
+		try {
+			ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, monitor);
+		}
+		catch (Exception e){
+			return new Status(IStatus.ERROR,ValidationPlugin.PLUGIN_ID, e.toString(), e);
+		}
+		return Status.OK_STATUS;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/IProjectChangeListener.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/IProjectChangeListener.java
new file mode 100644
index 0000000..6788534
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/IProjectChangeListener.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.IProject;
+
+/**
+ * A call back for listeners that are interested when a project changes.
+ * @author karasiuk
+ *
+ */
+public interface IProjectChangeListener {
+	
+	int ProjectOpened = 1;
+	int ProjectClosed = 2;
+	int ProjectDeleted = 4;
+	
+	/** 8 - Something in the project description has changed. For example, a Nature was added. */
+	int ProjectChanged = 8;
+	
+	/** 16 - The project has been added. */
+	int ProjectAdded = 16;
+	
+	/**
+	 * The project has changed in some way.
+	 * 
+	 * @param project The project that has changed.
+	 * @param type The type of change. This will be one of the Project constants;
+	 */
+	void projectChanged(IProject project, int type);
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/IValChangedListener.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/IValChangedListener.java
new file mode 100644
index 0000000..a2d26d8
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/IValChangedListener.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+/**
+ * A class that wants to be notified when the validator preferences change.
+ * @author karasiuk
+ *
+ */
+public interface IValChangedListener {
+	
+	/**
+	 * The validators for the project have changed.
+	 *  
+	 * @param project the project can be null, which means that the global validation preferences have
+	 * changed.
+	 * 
+	 * @param configSettingChanged If true a setting that could effect what gets validated has changed.
+	 * If false, then only other types of settings (like whether to show a results dialog or not) have
+	 * changed. 
+	 */
+	public void validatorsForProjectChanged(org.eclipse.core.resources.IProject project, boolean configSettingChanged);
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/MarkerManager.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/MarkerManager.java
new file mode 100644
index 0000000..5c61529
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/MarkerManager.java
@@ -0,0 +1,196 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+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.Validator;
+import org.eclipse.wst.validation.ValidatorMessage;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+
+/**
+ * A central place to manage all of the V2 validation markers.
+ * @author karasiuk
+ *
+ */
+public class MarkerManager {
+	
+	private Set<String> _markers = new HashSet<String>(50);
+	
+	public static MarkerManager getDefault(){
+		return Singleton.markerManager;
+	}
+	
+	private MarkerManager(){
+		_markers.add(ValConstants.ProblemMarker);
+		_markers.add(ConfigurationConstants.VALIDATION_MARKER);
+	}
+	
+	/**
+	 * Clear any validation markers that may have been set by this validator.
+	 * 
+	 * @param resource
+	 *            The resource that may have it's markers cleared. It can be
+	 *            null, in which case the operation is a no-op.
+	 * @param validator
+	 *            The validator that created the marker.
+	 */
+	public void clearMarker(IResource resource, Validator validator) throws CoreException {
+		if (resource == null)return;
+		hook(resource);
+		
+		String id = validator.getMarkerId();
+		if (id != null){
+			try {
+				resource.deleteMarkers(id, true, IResource.DEPTH_ZERO);
+			}
+			catch (CoreException e){
+				// Nothing that we can do. This is not worth logging.
+			}
+			return;
+		}
+				
+		IMarker[] markers = resource.findMarkers(ValConstants.ProblemMarker, true, IResource.DEPTH_ZERO);
+		String valId = validator.getId();
+		for (IMarker marker : markers){
+			id = marker.getAttribute(ValidatorMessage.ValidationId, null);
+			if (valId.equals(id))marker.delete();
+		}
+	}
+	
+	@SuppressWarnings("unchecked")
+	public void createMarker(ValidatorMessage m, String id){
+		try {
+			IResource resource = m.getResource();
+			hook(resource);
+			IMarker marker = resource.createMarker(m.getType());
+			Map map = m.getAttributes();
+			if (map.get(ValidatorMessage.ValidationId) == null)
+				map.put(ValidatorMessage.ValidationId, id);
+			marker.setAttributes(map);
+		}
+		catch (CoreException e){
+			if (!m.getResource().exists())throw new ResourceUnavailableError(m.getResource());
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+		
+	}
+	
+	/**
+	 * Delete all the markers on this resource that were created before the
+	 * operation start time.
+	 * 
+	 * @param resource
+	 *            The resource that is having it's markers deleted.
+	 * @param operationStartTime
+	 *            The time as returned by System.currentTimeMillis().
+	 * @param depth
+	 *            The depth of the markers to clear. It is one of the
+	 *            IResource.DEPTH_XXX constants.
+	 */
+	public void deleteMarkers(IResource resource, long operationStartTime, int depth){
+		try {
+			hook(resource); 
+			IMarker[] markers = resource.findMarkers(null, true, depth);
+			for (IMarker marker : markers){
+				if (_markers.contains(marker.getType())){
+					long createTime = marker.getCreationTime();
+					if (createTime < operationStartTime){
+						try {
+							marker.delete();
+						}
+						catch (CoreException e){
+							// eat it - there is nothing we can do about this.
+						}
+					}
+				}
+			}
+		}
+		catch (CoreException e){
+			IProject project = resource.getProject();
+			if (!project.exists() || !project.isOpen())throw new ProjectUnavailableError(project);
+			if (!resource.exists())throw new ResourceUnavailableError(resource);
+			ValidationPlugin.getPlugin().handleException(e);
+		}		
+	}
+	
+	public void makeMarkers(List<IMessage> list){
+		for (IMessage message : list){
+			IResource res = null;
+			Object target = message.getTargetObject();
+			if (target != null && target instanceof IResource)res = (IResource)target;
+			if (res == null){
+				target = message.getAttribute(IMessage.TargetResource);
+				if (target != null && target instanceof IResource)res = (IResource)target;
+			}
+			if (res != null){
+				try {
+					hook(res);
+					String id = message.getMarkerId();
+					if (id == null)id = ConfigurationConstants.VALIDATION_MARKER;
+					IMarker marker = res.createMarker(id);
+					marker.setAttributes(message.getAttributes());
+					marker.setAttribute(IMarker.MESSAGE, message.getText());
+					int markerSeverity = IMarker.SEVERITY_INFO;
+					int sev = message.getSeverity();
+					if ((sev & IMessage.HIGH_SEVERITY) != 0)markerSeverity = IMarker.SEVERITY_ERROR;
+					else if ((sev & IMessage.NORMAL_SEVERITY) != 0)markerSeverity = IMarker.SEVERITY_WARNING;
+					marker.setAttribute(IMarker.SEVERITY, markerSeverity);
+					marker.setAttribute(IMarker.LINE_NUMBER, message.getLineNumber());
+				}
+				catch (CoreException e){
+					ValidationPlugin.getPlugin().handleException(e);
+				}				
+			}
+		}
+	}
+	
+	/**
+	 * A debugging method. A place to put break points, so that you can figure out what sort of marker
+	 * changes are happening.
+	 * 
+	 * @param resource
+	 */
+	public void hook(IResource resource){
+//		String name = "first.test2x";
+//		if (resource.getName().equals(name)){
+//			String markers = Misc.listMarkers(resource);
+//			Tracing.log("MarkerManager has hooked: ", name); //$NON-NLS-1$
+//			RuntimeException rt = new RuntimeException("hooking " + name);
+//			rt.printStackTrace();
+//		}
+	}
+
+	public Set<String> getMarkers() {
+		return _markers;
+	}
+	
+	/**
+	 * Store the singleton for the MarkerManager. This approach is used to avoid having to synchronize the
+	 * MarkerManager.getDefault() method.
+	 * 
+	 * @author karasiuk
+	 *
+	 */
+	private static class Singleton {
+		static MarkerManager markerManager = new MarkerManager();
+	}
+
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Misc.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Misc.java
new file mode 100644
index 0000000..ceafc41
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Misc.java
@@ -0,0 +1,155 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadMXBean;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Some miscellaneous helper methods. 
+ * @author karasiuk
+ *
+ */
+public final class Misc {
+	
+	public static void close(InputStream in){
+		if (in == null)return;
+		try {
+			in.close();
+		}
+		catch (IOException e){
+			// eat it
+		}
+	}
+
+	public static void close(OutputStream out) {
+		if (out == null)return;
+		try {
+			out.close();
+		}
+		catch (IOException e){
+			// eat it
+		}		
+	}
+	
+	public static boolean debugOptionAsBoolean(String option){
+		String opt = Platform.getDebugOption(option);
+		if (opt == null)return false;
+		opt = opt.toLowerCase();
+		if ("true".equals(opt))return true; //$NON-NLS-1$
+		if ("yes".equals(opt))return true; //$NON-NLS-1$
+		return false;
+	}
+	
+	
+	/**
+	 * Answer a units appropriate string for the time.
+	 * @param time time in nano seconds
+	 */
+	public static String getTimeNano(long time){
+		if (time <= 1000)return NLS.bind(ValMessages.TimeNano, time);
+		if (time <= 1000000)return NLS.bind(ValMessages.TimeMicro, time/1000);
+		return getTimeMS(time/1000000);
+	}
+	
+	/**
+	 * Answer the CPU time consumed by this thread in nano seconds.
+	 * @return -1 if the time can not be determined.
+	 */
+	public static long getCPUTime(){
+		long cpuTime = -1;
+		ThreadMXBean tb = ManagementFactory.getThreadMXBean();
+		if (tb.isCurrentThreadCpuTimeSupported()){
+			cpuTime = tb.getCurrentThreadCpuTime();
+		}
+		return cpuTime;
+	}
+	
+	/**
+	 * Answer a units appropriate string for the time.
+	 * @param time time in milliseconds
+	 */
+	public static String getTimeMS(long time) {
+		if (time <= 1000)return ValMessages.TimeUnder;
+		if (time <= 60000)return NLS.bind(ValMessages.TimeSec, time/1000);
+		return NLS.bind(ValMessages.TimeMin, time/60000);
+	}
+
+	/**
+	 * Used in debugging so we can see what types of markers there are.
+	 * @param resource
+	 */
+	public static String listMarkers(IResource resource){
+		StringBuffer b = new StringBuffer(2000);
+		try {
+			IMarker[] markers = resource.findMarkers(null, true, IResource.DEPTH_ZERO);
+			for (IMarker m : markers){
+				Object o = m.getAttribute(IMarker.MESSAGE);
+				if (o != null){
+					b.append(o);
+				}
+				o = m.getAttribute(IMarker.SEVERITY);
+				if (o != null){
+					b.append(", Severity="); //$NON-NLS-1$
+					b.append(o);
+				}
+				b.append("; "); //$NON-NLS-1$
+			}
+		}
+		catch (CoreException e){
+			
+		}
+		return b.toString();
+	}
+	
+	/**
+	 * Answer true if they are the same. If they are both null then they are the same. 
+	 * @param s1 the string to compare. It can be null.
+	 * @param s2 the string to compare. It can be null.
+	 */
+	public static boolean same(String s1, String s2){
+		if (s1 == null && s2 == null)return true;
+		if (s1 == null)return false;
+		return s1.equals(s2);
+	}
+	
+	public static void niy(String msg){
+		if (msg == null)msg = "Sorry, this function is not implemented yet"; //$NON-NLS-1$
+		throw new RuntimeException(msg);
+	}
+	
+	/**
+	 * Answer the type as a human readable string. This is only used for debugging.
+	 * @param type
+	 * @return
+	 */
+	public static String resourceChangeEventType(int type){
+		StringBuffer b = new StringBuffer(200);
+		if ((type & IResourceChangeEvent.POST_BUILD) != 0)b.append("post_build "); //$NON-NLS-1$
+		if ((type & IResourceChangeEvent.POST_CHANGE) != 0)b.append("post_change "); //$NON-NLS-1$
+		if ((type & IResourceChangeEvent.PRE_BUILD) != 0)b.append("pre_build "); //$NON-NLS-1$
+		if ((type & IResourceChangeEvent.PRE_CLOSE) != 0)b.append("pre_close "); //$NON-NLS-1$
+		if ((type & IResourceChangeEvent.PRE_DELETE) != 0)b.append("pre_delete "); //$NON-NLS-1$
+		return b.toString();
+	}
+	
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/NullValidator.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/NullValidator.java
new file mode 100644
index 0000000..9f057aa
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/NullValidator.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.IProgressMonitor;
+import org.eclipse.wst.validation.AbstractValidator;
+import org.eclipse.wst.validation.ValidationResult;
+import org.eclipse.wst.validation.ValidationState;
+
+/**
+ * A null validator that is used in error cases. It simply no-ops.
+ * @author karasiuk
+ *
+ */
+public class NullValidator extends AbstractValidator {
+
+	@Override
+	public ValidationResult validate(IResource resource, int kind, ValidationState state, IProgressMonitor monitor) {
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/PerformanceMonitor.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/PerformanceMonitor.java
new file mode 100644
index 0000000..f00e93d
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/PerformanceMonitor.java
@@ -0,0 +1,192 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.io.FileOutputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.validation.IPerformanceMonitor;
+import org.eclipse.wst.validation.PerformanceCounters;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+public class PerformanceMonitor implements IPerformanceMonitor {
+	
+	private CollectionLevel _level = CollectionLevel.None;
+	private boolean			_summaryOnly;
+	
+	/**
+	 * Create a performance monitor.
+	 * 
+	 * @param traceTimes
+	 *            Should the monitor be turned on?
+	 * @param file
+	 *            Should the events be logged to a file. If this is null or the
+	 *            empty string the events will be written to stderr. Otherwise
+	 *            the events are appended to a file with this name.
+	 * 
+	 * @param logInSeconds
+	 *            Set this to true if you want the times that are logged in the
+	 *            trace file normalized to seconds. Otherwise the default units are used,
+	 *            milliseconds for elapsed time and nanoseconds for cpu time.
+	 */
+	public static PerformanceMonitor create(boolean traceTimes, String file, boolean logInSeconds){
+		PerformanceMonitor pm = null;
+		if (file == null || file.length() == 0)pm = new PerformanceMonitor();
+		else pm = new ToFile(file, logInSeconds);
+		
+		if (traceTimes)pm.setCollectionLevel(CollectionLevel.Default);
+		
+		return pm;
+	}
+	
+	private PerformanceMonitor(){};
+	
+	public CollectionLevel getCollectionLevel() {
+		return _level;
+	}
+
+	public void setCollectionLevel(CollectionLevel level) {
+		_level = level;
+	}
+
+	public List<PerformanceCounters> getPerformanceCounters(boolean asSummary) {
+		return new LinkedList<PerformanceCounters>();
+	}
+
+
+	public void resetPerformanceCounters() {
+	}
+
+	public boolean isCollecting() {
+		return _level != CollectionLevel.None;
+	}
+	
+	public boolean isSummaryOnly() {
+		return _summaryOnly;
+	}
+	
+	public void add(PerformanceCounters counters){
+		Tracing.write(counters.toString());
+	}
+	
+	public static class Counters{
+		String	name;
+		int 	numberInvocations;
+		
+		/** Elapsed time in milliseconds. */
+		long	elapsedTime;
+		
+		/** CPU time in nanoseconds, or -1 if unknown. */
+		long	cpuTime;		
+	}
+	
+	public static class ToFile extends PerformanceMonitor {
+		
+		private String 		_fileName;
+		private boolean		_logInSeconds;
+		
+		private PrintWriter _pw;
+		private static final String Comma=","; //$NON-NLS-1$
+		private static DateFormat 	_df = new SimpleDateFormat("HH:mm:ss.SSSS"); //$NON-NLS-1$
+		
+		private ToFile(String fileName, boolean logInSeconds){
+			_fileName = fileName;
+			_logInSeconds = logInSeconds;
+		}
+		
+		@Override
+		public synchronized void add(PerformanceCounters pc) {
+			try {
+				PrintWriter pw = getWriter();
+				pw.print(_df.format(pc.getWhen()) + Comma + 
+					pc.getValidatorId() + Comma + pc.getNumberInvocations() + Comma);
+				if (_logInSeconds){
+					double sec = ((double)pc.getElapsedTime()) / 1000.0;
+					pw.print(sec);
+					pw.print(Comma);
+					sec = ((double)pc.getCpuTime()) / 1000000000.0;
+					pw.print(sec);
+				}
+				else {
+					pw.print(pc.getElapsedTime()+Comma+pc.getCpuTime());
+				}
+				pw.println(Comma + pc.getResourceName());
+				pw.flush();
+			}
+			catch (IOException e){
+				ValidationPlugin.getPlugin().handleException(e);
+			}
+		}
+		
+		private PrintWriter getWriter() throws IOException {
+			if (_pw == null){
+				_pw = new PrintWriter(new FileOutputStream(_fileName, true));
+				DateFormat df = DateFormat.getDateTimeInstance();
+				_pw.println("# " + NLS.bind(ValMessages.LogSession,  //$NON-NLS-1$
+					df.format(new Date(System.currentTimeMillis()))));
+				if (_logInSeconds)
+					_pw.println("# when, id, invocation count, elapsed time (seconds), cpu time (seconds), resource"); //$NON-NLS-1$
+				else 
+					_pw.println("# when, id, invocation count, elapsed time (ms), cpu time (ns), resource"); //$NON-NLS-1$
+			}
+			return _pw;
+			
+		}
+	}
+	
+	public static class Collecting extends PerformanceMonitor {
+		private List<PerformanceCounters>	_counters = new LinkedList<PerformanceCounters>();
+		
+		public void add(PerformanceCounters counters){
+			_counters.add(counters);
+		}
+		
+		public List<PerformanceCounters> getPerformanceCounters(boolean asSummary) {
+			if (asSummary){
+				Map<String, Counters> map = new HashMap<String, Counters>(40);
+				for (PerformanceCounters pc : _counters){
+					Counters c = map.get(pc.getValidatorId());
+					if (c == null){
+						c = new Counters();
+						c.name = pc.getValidatorName();
+						map.put(pc.getValidatorId(), c);
+					}
+					c.numberInvocations += pc.getNumberInvocations();
+					c.elapsedTime += pc.getElapsedTime();
+					if (pc.getCpuTime() != -1)c.cpuTime += pc.getCpuTime();
+					else c.cpuTime = -1;
+				}
+				List<PerformanceCounters> list = new LinkedList<PerformanceCounters>();
+				for (Map.Entry<String, Counters> me : map.entrySet()){
+					Counters c = me.getValue();
+					list.add(new PerformanceCounters(me.getKey(), c.name, null, c.numberInvocations, c.elapsedTime, c.cpuTime));
+				}
+				return list;
+			}
+			return _counters;
+		}
+		
+		public void resetPerformanceCounters() {
+			_counters.clear();
+		}
+
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/PrefConstants.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/PrefConstants.java
new file mode 100644
index 0000000..3bac075
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/PrefConstants.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+/**
+ * The constants that are used in the preference store so save the validator configurations. 
+ * <p>
+ * The entries in the preference hierarchy are organized something like this:
+ * <pre>
+ * /instance/frame-work-id/saveAuto=true|false
+ * /instance/frame-work-id/suspend=true|false
+ * /instance/frame-work-id/vf.version=2
+ * /instance/frame-work-id/filters/val-id/build=true|false
+ * /instance/frame-work-id/filters/val-id/manual=true|false
+ * /instance/frame-work-id/filters/val-id/version=someNumber
+ * /instance/frame-work-id/filters/val-id/groups/0/type=include|exclude
+ * /instance/frame-work-id/filters/val-id/groups/0/rules/0/type=file|fileext|projectNature|...
+ * /instance/frame-work-id/filters/val-id/groups/0/rules/0/pattern=...
+ * /instance/frame-work-id/filters/val-id/groups/0/rules/1/type=file|fileext|projectNature|...
+ * /instance/frame-work-id/filters/val-id/groups/0/rules/1/pattern=...
+ * </pre>
+ * <p>
+ * New approach
+ * <pre>
+ * vals/val-id/global=TF[version][len]delegate-id
+ * vals/val-id/groups=[groups]
+ * </pre>
+ * 
+ * 
+ * @author karasiuk
+ *
+ */
+public interface PrefConstants {
+	
+	/** filters - node where all the filters are saved. */
+	String filters = "filters"; //$NON-NLS-1$
+	
+	/** build - is the validator enabled for builds? */
+	String build = "build"; //$NON-NLS-1$
+	
+	/** delegate - the delegating implementation to use */
+	String delegate = "delegate"; //$NON-NLS-1$
+	
+	/** disabled - the list of disabled resources in the project. */
+	String disabled = "disabled"; //$NON-NLS-1$
+	
+	/** exactMatch - must the content type match exactly? */
+	String exactMatch = "exactMatch"; //$NON-NLS-1$
+	
+	/** manual - is the validator enabled for manual validation? */
+	String manual = "manual"; //$NON-NLS-1$
+	
+	/** msgs - node where all the message severity mappings are stored. */
+	String msgs = "msgs"; //$NON-NLS-1$
+	
+	/** 
+	 * version - version of the filter definition. This is something that a client can use to keep track
+	 * of changes that they might make to their validation extension.
+	 */
+	String version = "version"; //$NON-NLS-1$
+	
+	/** vf.version - version of the validation framework. */
+	String frameworkVersion = "vf.version"; //$NON-NLS-1$
+	
+	/** groups - filter group. */
+	String groups = "groups"; //$NON-NLS-1$
+	
+	/** type - type of group, either include or exclude. */
+	String type = "type"; //$NON-NLS-1$
+	
+	/** type - the type of rule. */
+	String ruleType = "type"; //$NON-NLS-1$
+	
+	/** rules - a filter rule. */
+	String rules = "rules"; //$NON-NLS-1$
+	
+	/** pattern - the pattern part of the rule. */
+	String pattern = "pattern"; //$NON-NLS-1$
+	
+	/** saveAuto - can we save all the resources automatically? true/false */
+	String saveAuto = "saveAuto"; //$NON-NLS-1$
+	
+	/** stateTS - plug-in state time stamp */
+	String stateTS = "stateTS"; //$NON-NLS-1$
+	
+	/** suspend - suspend all validation? true/false */
+	String suspend = "suspend"; //$NON-NLS-1$
+	
+	/** case - is this case sensitive? */
+	String caseSensitive = "case"; //$NON-NLS-1$
+	
+	/** fileType - the type of file, see FilterRule.File */
+	String fileType = "fileType"; //$NON-NLS-1$
+	
+	/** confirmDialog - should we show a confirmation dialog when doing a manual validation? */
+	String confirmDialog = "confirmDialog"; //$NON-NLS-1$
+	
+	/** override - should we show projects to override the global preferences? */
+	String override = "override"; //$NON-NLS-1$
+	
+	/** vals - the validators are grouped under this node. */
+	String vals = "vals"; //$NON-NLS-1$
+	
+	/** global - some global validation settings. */
+	String global = "global"; //$NON-NLS-1$
+	
+	
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/PreferencesWrapper.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/PreferencesWrapper.java
new file mode 100644
index 0000000..0f3a5e7
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/PreferencesWrapper.java
@@ -0,0 +1,431 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.wst.validation.ValidationFramework;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
+
+/**
+ * The subset of the IEclipsePreferences interface that the framework needs to
+ * be able to persist preferences.
+ * @author karasiuk
+ *
+ */
+public abstract class PreferencesWrapper {
+	
+	private static final WrapperManger _manager = new WrapperManger();
+	
+	/**
+	 * Answer the preferences for the project. If project is null answer the global preferences.
+	 * @param project
+	 * @param persistent if null the default preferences are returned, if True the persisted 
+	 * preferences are return and if False the transient preferences are returned.
+	 * @return
+	 */
+	public static PreferencesWrapper getPreferences(IProject project, Boolean persistent){
+		return _manager.get(project, persistent);
+	}
+		
+	/**
+	 * These are the names of the node entries.
+	 * @return
+	 * @throws BackingStoreException
+	 */
+	public abstract String[] childrenNames() throws BackingStoreException;
+	
+	public void flush() throws BackingStoreException {
+	}
+	
+	public abstract boolean getBoolean(String key, boolean def);
+	
+	public abstract String get(String key, String def);
+	
+	public abstract int getInt(String key, int def);
+	
+	public abstract long getLong(String key, long def);
+
+	public abstract String[] keys() throws BackingStoreException;
+
+	public boolean isPersistent(){
+		return false;
+	}
+
+	public boolean isTransient(){
+		return false;
+	}
+	
+	public abstract void put(String key, String value);
+	
+	public abstract void putBoolean(String key, boolean value);
+	
+	public abstract void putLong(String key, long value);
+	
+	public abstract void putInt(String key, int value);
+	
+	/**
+	 * Unlike the more sophisticated org.osgi.service.prefs.Preferences support, 
+	 * this is currently limited to simple node names.
+	 */
+	public abstract PreferencesWrapper node(String nodeName);
+	
+	public abstract boolean nodeExists();
+	
+	public abstract boolean nodeExists(String pathName)  throws BackingStoreException;
+	
+	public abstract void removeNode()  throws BackingStoreException;
+
+
+public final static class PreferencesWrapperPersistent extends PreferencesWrapper {
+	
+	private final Preferences _preferences;
+	
+	public PreferencesWrapperPersistent(Preferences preferences){
+		_preferences = preferences;
+	}
+	
+	@Override
+	public String[] childrenNames() throws BackingStoreException {
+		return _preferences.childrenNames();
+	}
+	
+	public void flush() throws BackingStoreException {
+		_preferences.flush();
+	}
+	
+	@Override
+	public String get(String key, String def) {
+		return _preferences.get(key, def);
+	}
+	
+	@Override
+	public boolean getBoolean(String key, boolean def) {
+		return _preferences.getBoolean(key, def);
+	}
+	
+	@Override
+	public int getInt(String key, int def) {
+		return _preferences.getInt(key, def);
+	}
+	
+	@Override
+	public long getLong(String key, long def) {
+		return _preferences.getLong(key, def);
+	}
+	
+	@Override
+	public String[] keys() throws BackingStoreException {
+		return _preferences.keys();
+	}
+	
+	@Override
+	public boolean isPersistent() {
+		return true;
+	}
+	
+	@Override
+	public void put(String key, String value) {
+		_preferences.put(key, value);
+	}
+	
+	@Override
+	public PreferencesWrapper node(String path) {
+		Preferences prefs = _preferences.node(path);
+		return new PreferencesWrapperPersistent(prefs);
+	}
+	
+	@Override
+	public boolean nodeExists() {
+		try {
+			return nodeExists(""); //$NON-NLS-1$
+		}
+		catch (BackingStoreException e){
+		
+		}
+		return false;
+	}
+	
+	@Override
+	public boolean nodeExists(String pathName) throws BackingStoreException  {
+		return _preferences.nodeExists(pathName);
+	}
+	
+	public void putBoolean(String key, boolean value) {
+		_preferences.putBoolean(key, value);	
+	}
+	
+	public void putLong(String key, long value){
+		_preferences.putLong(key, value);
+	}
+	
+	@Override
+	public void putInt(String key, int value) {
+		_preferences.putInt(key, value);
+	}
+	
+	@Override
+	public void removeNode() throws BackingStoreException {
+		_preferences.removeNode();
+	}
+}
+
+public final static class PreferencesWrapperTransient extends PreferencesWrapper {
+	
+	private final PreferencesWrapperTransient _parent;
+	private final Map<String, String> _children = Collections.synchronizedMap(new HashMap<String, String>(10));
+	private final Map<String, PreferencesWrapperTransient> _nodes = Collections.synchronizedMap(new HashMap<String, PreferencesWrapperTransient>(10));
+	
+	public PreferencesWrapperTransient(PreferencesWrapperTransient parent){
+		_parent = parent;
+	}
+	
+	public PreferencesWrapperTransient(PreferencesWrapper pw, PreferencesWrapperTransient parent) {
+		_parent = parent;
+		try {
+			for (String key : pw.keys()){
+				put(key, pw.get(key, null));
+			}
+			
+			
+			for (String nodeName : pw.childrenNames()){
+				PreferencesWrapper p = pw.node(nodeName);
+				PreferencesWrapperTransient pwt = new PreferencesWrapperTransient(p, this);
+				_nodes.put(nodeName, pwt);
+			}
+		}
+		catch (BackingStoreException e){
+			
+		}
+	}
+
+	@Override
+	public String[] childrenNames() throws BackingStoreException {
+		Set<String> keys = _nodes.keySet();
+		String names[] = new String[keys.size()];
+		keys.toArray(names);
+		return names;
+	}
+	
+	@Override
+	public String get(String key, String def) {
+		String value = _children.get(key);
+		if (value != null)return value;
+		return def;
+	}
+	
+	@Override
+	public boolean getBoolean(String key, boolean def) {
+		String value = _children.get(key);
+		if (value == null)return def;
+		value = value.toLowerCase();
+		if ("true".equals(value))return true; //$NON-NLS-1$
+		if ("false".equals(value))return false; //$NON-NLS-1$
+		return def;
+	}
+	
+	@Override
+	public int getInt(String key, int def) {
+		String value = _children.get(key);
+		if (value == null)return def;
+		try {
+			return Integer.parseInt(value);
+		}
+		catch (NumberFormatException e){
+		}
+		return def;
+	}
+	
+	@Override
+	public long getLong(String key, long def) {
+		String value = _children.get(key);
+		if (value == null)return def;
+		try {
+			return Long.parseLong(value);
+		}
+		catch (NumberFormatException e){
+		}
+		return def;
+	}
+	
+	@Override
+	public boolean isTransient() {
+		return true;
+	}
+	
+	@Override
+	public synchronized String[] keys() throws BackingStoreException {
+		String[] keys = new String[_children.size()];
+		_children.keySet().toArray(keys);
+		return keys;
+	}
+	
+	@Override
+	public synchronized PreferencesWrapper node(String name) {
+		PreferencesWrapperTransient pw  = _nodes.get(name);
+		if (pw != null)return pw;
+		pw = new PreferencesWrapperTransient(this);
+		_nodes.put(name, pw);
+		return pw;
+	}
+	
+	@Override
+	public boolean nodeExists() {
+		return true;
+	}
+	
+	@Override
+	public boolean nodeExists(String key) throws BackingStoreException {
+		PreferencesWrapperTransient pw = _nodes.get(key);
+		if (pw != null)return true;
+		return false;
+	}
+	
+	@Override
+	public void put(String key, String value) {
+		_children.put(key, value);
+	}
+	
+	@Override
+	public void putBoolean(String key, boolean bool) {
+		String value = bool ? "true" : "false";  //$NON-NLS-1$//$NON-NLS-2$
+		_children.put(key, value);
+	}
+	
+	@Override
+	public void putInt(String key, int value) {
+		_children.put(key, String.valueOf(value));
+	}
+	
+	@Override
+	public void putLong(String key, long value) {
+		_children.put(key, String.valueOf(value));
+	}
+	
+	@Override
+	public void removeNode() throws BackingStoreException {
+		if (_parent == null)return;
+		_parent.removeNode(this);
+	}
+	
+	private synchronized void removeNode(PreferencesWrapperTransient node){
+		String key = null;
+		for (Map.Entry<String, PreferencesWrapperTransient> me : _nodes.entrySet()){
+			if (me.getValue().equals(node)){
+				key = me.getKey();
+				break;
+			}
+		}
+		if (key != null)_nodes.remove(key);
+	}
+}
+
+private final static class WrapperManger implements IProjectChangeListener {
+	
+	private final Map<IProject, PreferencesWrapper> _map = new HashMap<IProject, PreferencesWrapper>(20); 
+	private final AtomicReference<PreferencesWrapper> _global = new AtomicReference<PreferencesWrapper>();
+	
+	private WrapperManger(){
+		EventManager.getManager().addProjectChangeListener(this);
+	}
+	
+	/**
+	 * Currently this object never goes away, but if that was ever to change then we would need to dispose it.
+	 */
+	@Override
+	protected void finalize() throws Throwable {
+		dispose();
+	}
+	
+	public void dispose(){
+		EventManager.getManager().removeProjectChangeListener(this);
+	}
+
+	public PreferencesWrapper get(IProject project, Boolean persistent) {
+		if (project == null)return globalPreferences(persistent);
+		PreferencesWrapper pw = null;
+		synchronized(_map){
+			pw = _map.get(project);
+		}
+		
+		if (pw != null && (persistent == null || persistent == pw.isPersistent()))return pw;
+		
+		if (pw == null)pw = new PreferencesWrapperPersistent(ValidationPlugin.getPreferences(project));
+		if (persistent != null && persistent && pw.isTransient())pw = new PreferencesWrapperPersistent(ValidationPlugin.getPreferences(project));
+		if (persistent != null && !persistent && pw.isPersistent())pw = new PreferencesWrapperTransient(pw, null);
+		
+		synchronized(_map){
+			_map.put(project, pw);
+		}
+		
+		return pw;
+	}
+
+	/**
+		 * Answer the appropriate global preferences.
+		 * 
+		 * @param persistent
+		 *            If null then answer the current saved global preferences,
+		 *            creating a new persistent one if there is none. If True,
+		 *            then ensure that the preferences are persistent. If False,
+		 *            ensure that the preferences are transient.
+		 * @return
+		 */
+	private PreferencesWrapper globalPreferences(Boolean persistent) {
+		PreferencesWrapper pw = _global.get();
+		
+		while(pw == null){
+			PreferencesWrapper newPW = createGlobal(persistent);
+			if (_global.compareAndSet(null, newPW))pw = newPW;
+			else pw = _global.get();
+		}
+		
+		while (persistent != null && !persistent && !pw.isTransient()){
+			PreferencesWrapper newPW = new PreferencesWrapperTransient(pw, null);
+			if (_global.compareAndSet(pw, newPW))pw = newPW;
+			else pw = _global.get();
+		}
+		
+		while (persistent != null && persistent && !pw.isPersistent()){
+			PreferencesWrapper newPW = new PreferencesWrapperPersistent(ValidationFramework.getDefault().getPreferenceStore());
+			if (_global.compareAndSet(pw, newPW))pw = newPW;
+			else pw = _global.get();			
+		}
+		return pw;
+	}
+	
+	private PreferencesWrapper createGlobal(Boolean persistent){
+		PreferencesWrapper pw = new PreferencesWrapperPersistent(ValidationFramework.getDefault().getPreferenceStore());
+		if (persistent == null || persistent)return pw;
+		return new PreferencesWrapperTransient(pw, null);
+	}
+
+	public void projectChanged(IProject project, int type) {
+		int interested = IProjectChangeListener.ProjectClosed | IProjectChangeListener.ProjectDeleted;
+		if ((type & interested) != 0){
+			synchronized (_map) {
+				_map.remove(project);
+			}
+		}
+		
+	}
+	
+}
+
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ProjectUnavailableError.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ProjectUnavailableError.java
new file mode 100644
index 0000000..03e2b65
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ProjectUnavailableError.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.IProject;
+
+/**
+ * This internal error is used to signal that a project is now unavailable.
+ * <p>
+ * We could be in the middle of validating a large project, and the project could be closed. 
+ * This error is used to "exit" the validation framework.
+ * <p>
+ * This is an error rather than a runtime exception, because some parts of Eclipse like to
+ * trap RuntimeExceptions and log them.
+ * @author karasiuk
+ *
+ */
+public class ProjectUnavailableError extends Error {
+	
+	private IProject _project;
+
+	private static final long serialVersionUID = 200801281118L;
+	
+	public ProjectUnavailableError(IProject project){
+		super();
+		_project = project;
+	}
+
+	public IProject getProject() {
+		return _project;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ResourceUnavailableError.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ResourceUnavailableError.java
new file mode 100644
index 0000000..9543670
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ResourceUnavailableError.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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 internal error is used to signal that a resource is now unavailable.
+ * <p>
+ * This error is used to "exit" the validation framework. 
+ * <p>
+ * This is an error rather than a runtime exception, because some parts of Eclipse like to
+ * trap RuntimeExceptions and log them.
+ * @author karasiuk
+ *
+ */
+public class ResourceUnavailableError extends Error {
+
+	private static final long serialVersionUID = 200801290853L;
+	
+	private IResource _resource;
+	
+	public ResourceUnavailableError(IResource resource){
+		super();
+		_resource = resource;
+	}
+
+	public IResource getResource() {
+		return _resource;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Serializer.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Serializer.java
new file mode 100644
index 0000000..22da768
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Serializer.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+/**
+ * A simple encoder that knows how to convert booleans, integers and strings, into a single string.
+ * 
+ * @see Deserializer
+ * @author karasiuk
+ *
+ */
+public class Serializer {
+	private StringBuffer _buffer;
+	
+	public Serializer(int size){
+		_buffer = new StringBuffer(size);
+	}
+	
+	public void put(boolean bool){
+		_buffer.append(bool ? 'T' : 'F');
+	}
+	
+	public void put(String string){
+		put(string.length());
+		_buffer.append(string);
+	}
+	
+	public void put(int anInt){
+		String s = String.valueOf(anInt);
+		int len = s.length();
+		_buffer.append(len-1);
+		_buffer.append(s);
+	}
+	
+	@Override
+	public String toString() {
+		return _buffer.toString();
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/SummaryReporter.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/SummaryReporter.java
new file mode 100644
index 0000000..5a19332
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/SummaryReporter.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * 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.validation.internal;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.wst.validation.internal.operations.WorkbenchReporter;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IValidator;
+
+/**
+ * This class extends the workbench reporter by capturing some summary information about any added
+ * messages.
+ * @author karasiuk
+ *
+ */
+public class SummaryReporter extends WorkbenchReporter {
+	
+	private int _severityHigh;
+	private int _severityNormal;
+	private int	_severityLow;
+
+	public SummaryReporter(IProject project, IProgressMonitor monitor) {
+		super(project, monitor);
+	}
+	
+	@Override
+	public void addMessage(IValidator validator, IMessage message) {
+		super.addMessage(validator, message);
+		switch (message.getSeverity()){
+		case IMessage.HIGH_SEVERITY: 
+			_severityHigh++;
+			break;
+		case IMessage.NORMAL_SEVERITY: 
+			_severityNormal++;
+			break;
+		case IMessage.LOW_SEVERITY:
+			_severityLow++;
+			break;
+		}
+	}
+
+	public int getSeverityHigh() {
+		return _severityHigh;
+	}
+
+	public int getSeverityNormal() {
+		return _severityNormal;
+	}
+
+	public int getSeverityLow() {
+		return _severityLow;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Tracing.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Tracing.java
new file mode 100644
index 0000000..77e49cb
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Tracing.java
@@ -0,0 +1,208 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+/**
+ * Control the tracing that this plug-in performs. This is used for service.
+ * @author karasiuk
+ *
+ */
+public final class Tracing {
+	
+	private final static DateFormat _df = new SimpleDateFormat("HH:mm:ss.SSSS"); //$NON-NLS-1$
+	private final static boolean	_isLogging = ValidationPlugin.getPlugin().isDebugging();
+	private final static boolean	_traceMatches = Misc.debugOptionAsBoolean(DebugConstants.TraceMatches);
+	private final static boolean	_traceV1 = Misc.debugOptionAsBoolean(DebugConstants.TraceV1);
+	private final static String		_extraValDetail = Platform.getDebugOption(DebugConstants.ExtraValDetail);
+	private final static int 		_tracingLevel;
+	
+	private final static String		_filter = Platform.getDebugOption(DebugConstants.FilterAllExcept);
+	
+	static {
+		String traceLevel = Platform.getDebugOption(DebugConstants.TraceLevel);
+		int level = 0;
+		if (traceLevel != null){
+			try {
+				level = Integer.parseInt(traceLevel);
+			}
+			catch (Exception e){
+			}
+		}
+		_tracingLevel = level;
+	}
+	
+	/**
+	 * Answer true if the filters allow this validator to be enabled. Normally this method will answer true.
+	 * It is only when filters are activated via the debugging options, that this method might return false.
+	 * This is used to aid in debugging by making it look like only one validator has been registered.
+	 * 
+	 * @param validatorId the validator id.
+	 * @return true if the validator should be registered via an extension point.
+	 */
+	public static boolean isEnabled(String validatorId){
+		if (_filter == null || _filter.length() == 0)return true;
+		return (_filter.equals(validatorId));		
+	}
+	
+	/**
+	 * Are we in logging/debugging mode?
+	 */
+	public static boolean isLogging(){
+		return _isLogging;
+	}
+	
+	/**
+	 * Answer true if we are in logging mode, and if the current logging level is greater than or
+	 * equal to level.
+	 * @param level The logging level that we are testing. The higher the level the more verbose
+	 * the tracing.
+	 */
+	public static boolean isLogging(int level){
+		if (_isLogging){
+			return _tracingLevel >= level;
+		}
+		return false;
+	}
+	
+	public static boolean isTraceMatches(){
+		return _traceMatches;
+	}
+	
+	public static boolean isTraceV1(){
+		return _traceV1;
+	}
+	
+	public static boolean matchesExtraDetail(String validatorId){
+		if (_extraValDetail == null)return false;
+		return _extraValDetail.equals(validatorId);
+	}
+
+	/**
+	 * Write a line to the console for debugging, if in debugging mode.
+	 * @param line
+	 */
+	public static void log(String line){
+		if (isLogging())write(line);
+	}
+	
+	public static void log(Object... parts){
+		if (isLogging()){
+			StringBuffer b = new StringBuffer(200);
+			for (Object p : parts)b.append(p);
+			write(b.toString());
+		}
+	}
+
+	/**
+	 * Write a line to the log. Include a time stamp with the line.
+	 * @param line
+	 */
+	public static void write(String line){
+		System.err.println(timestampIt(line));
+	}
+
+	public static String timestampIt(String line){
+		Date date = new Date();
+		String thread = Thread.currentThread().getName();
+		return _df.format(date) + " " + thread + " " + line;  //$NON-NLS-1$//$NON-NLS-2$		
+	}
+
+	/**
+	 * If we are in logging mode, log the item, and then reset the string buffer.
+	 */
+	public static void log(StringBuffer b){
+		log(b.toString());
+		b.setLength(0);
+	}
+
+	/**
+	 * This method doesn't do anything, and will be removed.
+	 * 
+	 * @deprecated
+	 */
+	public static void setForceLogging(boolean forceLogging) {
+	}
+	
+	/**
+	 * Log up to maxNumber deltas to the log.
+	 * @param delta The deltas to log.
+	 * @param maxNumber The maximum number of deltas to log.
+	 */
+	public static void logResourceDeltas(IResourceDelta delta, int maxNumber){
+		if (!isLogging())return;
+		if (delta == null)Tracing.log("  ResourceDelta: null"); //$NON-NLS-1$
+		else {
+			DeltaLogger logger = new DeltaLogger(maxNumber);
+			try {
+				delta.accept(logger);
+				if (logger.getCount() == 0)Tracing.log("  ResourceDelta: no deltas"); //$NON-NLS-1$
+			}
+			catch (CoreException e){
+				// eat it
+			}
+		}
+	}
+	
+	/**
+	 * A debugging class that prints out some resource delta's.
+	 * @author karasiuk
+	 *
+	 */
+	private final static class DeltaLogger implements IResourceDeltaVisitor {
+		
+		private final int 	_max;
+		private int 		_count;
+		public int getCount() {
+			return _count;
+		}
+
+		private StringBuffer _b = new StringBuffer(200);
+		
+		public DeltaLogger(int max){
+			_max = max;
+		}
+
+		public boolean visit(IResourceDelta delta) throws CoreException {
+			if (_count++ > _max)return false;
+			int kind = delta.getKind();
+			String type = "unknown"; //$NON-NLS-1$
+			switch (kind){
+			case IResourceDelta.ADDED:
+				type = "Added"; //$NON-NLS-1$
+				break;
+			case IResourceDelta.CHANGED:
+				type = "Changed"; //$NON-NLS-1$
+				break;
+			case IResourceDelta.REMOVED:
+				type = "Removed"; //$NON-NLS-1$
+				break;				
+			}
+			_b.append("  ResourceDelta "); //$NON-NLS-1$
+			_b.append(type);
+			_b.append(' ');
+			_b.append(delta.getResource());
+			Tracing.log(_b);
+			return true;
+		}
+		
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValBuilderJob.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValBuilderJob.java
new file mode 100644
index 0000000..5aafeee
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValBuilderJob.java
@@ -0,0 +1,345 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.LinkedList;
+import java.util.Queue;
+
+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.IResourceProxy;
+import org.eclipse.core.resources.IResourceProxyVisitor;
+import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.wst.validation.DependentResource;
+import org.eclipse.wst.validation.Friend;
+import org.eclipse.wst.validation.IDependencyIndex;
+import org.eclipse.wst.validation.ValidationEvent;
+import org.eclipse.wst.validation.ValidationFramework;
+import org.eclipse.wst.validation.ValidationState;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.internal.model.IValidatorVisitor;
+import org.eclipse.wst.validation.internal.operations.ValidationBuilder;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+
+/**
+ * Run all the v2 validators through this job.
+ * <p>
+ * This is the main class for supporting build based validation. When triggered it looks at all of the
+ * resource changes and determines what needs to be validated. 
+ * </p>
+ * @author karasiuk
+ *
+ */
+public final class ValBuilderJob extends WorkspaceJob {
+	
+	private static ValBuilderJob _job;
+	private static Queue<ValidationRequest> _work = new LinkedList<ValidationRequest>();
+	
+	private final ValOperation _operation = new ValOperation();
+		
+	/** The types of changes we are interested in. */
+	private final static int	InterestedFlags = IResourceDelta.CONTENT | IResourceDelta.ENCODING |
+		IResourceDelta.MOVED_FROM | IResourceDelta.MOVED_TO;
+	
+	public static synchronized void validateProject(IProject project, IResourceDelta delta, int buildKind){
+		ValidationRequest request = new ValidationRequest(project, delta, buildKind);
+		if (_job == null){
+			_job = new ValBuilderJob();
+			_job.add(request);
+			_job.schedule();
+		}
+		else {
+			_job.add(request);
+		}
+	}
+	
+	private static synchronized ValidationRequest getRequest(){
+		ValidationRequest request = _work.poll();
+		if (request == null){
+			_job = null;
+		}
+		return request;
+	}
+	
+	/**
+	 * Each validation run is done in it's own job.
+	 * 
+	 * @param project the project that is being validated
+	 * @param delta the delta that is being validated. This may be null, in which case we do a 
+	 * full validation of the project.
+	 * 
+	 * @param buildKind the kind of build.
+	 * @see org.eclipse.core.resources.IncrementalProjectBuilder#AUTO_BUILD
+	 * @see org.eclipse.core.resources.IncrementalProjectBuilder#CLEAN_BUILD
+	 * @see org.eclipse.core.resources.IncrementalProjectBuilder#FULL_BUILD
+	 * @see org.eclipse.core.resources.IncrementalProjectBuilder#INCREMENTAL_BUILD
+	 * 
+	 * @param operation some global context for the validation operation
+	 * 
+	 */
+	private ValBuilderJob(){
+		super(ValMessages.JobName);
+	}
+	
+	private void add(ValidationRequest request){
+		_work.add(request);
+	}
+	
+	@Override
+	public boolean belongsTo(Object family) {
+		if (family == ResourcesPlugin.FAMILY_MANUAL_BUILD)return true;
+		if (family == ValidationBuilder.FAMILY_VALIDATION_JOB){
+			return true;
+		}
+			
+		return super.belongsTo(family);
+	}
+
+	@Override
+	public IStatus runInWorkspace(IProgressMonitor monitor) {
+		Tracing.log("ValBuilderJob-01: Starting"); //$NON-NLS-1$
+		
+		try {
+			startingValidation(monitor);
+			
+			ValidationRequest request = getRequest();
+			while(request != null){
+				run(request, monitor);
+				request = getRequest();
+			}
+		}
+		finally {
+			finishingValidation(monitor);
+		}
+		
+		Tracing.log("ValBuilderJob-02: Finished"); //$NON-NLS-1$
+		return Status.OK_STATUS;
+	}
+
+	private void startingValidation(IProgressMonitor monitor) {
+        IValidatorVisitor startingVisitor = new IValidatorVisitor(){
+
+            public void visit(Validator validator, IProject project, ValType valType, 
+                ValOperation operation, IProgressMonitor monitor) {
+                
+                validator.validationStarting(project, operation.getState(), monitor);                   
+            }               
+        };
+
+        ValManager.getDefault().accept(startingVisitor, null, ValType.Build, getOperation(), monitor);
+	}
+	
+	private void finishingValidation(IProgressMonitor monitor) {
+		
+		IValidatorVisitor finishedVisitor = new IValidatorVisitor(){
+
+		    public void visit(Validator validator, IProject project, ValType valType,
+		      ValOperation operation, IProgressMonitor monitor) {
+
+		      validator.validationFinishing(project, operation.getState(), monitor);              
+		    }           
+		  };
+		  ValManager.getDefault().accept(finishedVisitor, null, ValType.Build, getOperation(), monitor);
+	}
+
+	private void run(ValidationRequest request, IProgressMonitor monitor){
+		setName(ValMessages.JobName + " " + request.getProject().getName()); //$NON-NLS-1$
+		try {		
+	        IValidatorVisitor startingVisitor = new IValidatorVisitor(){
+
+	            public void visit(Validator validator, IProject project, ValType valType, 
+	                ValOperation operation, IProgressMonitor monitor) {
+	                
+	                validator.validationStarting(project, operation.getState(), monitor);                   
+	            }               
+	        };
+
+	        ValManager.getDefault().accept(startingVisitor, request.getProject(), ValType.Build, getOperation(), monitor);
+		  
+			if (request.getDelta() == null)fullBuild(request, monitor);
+			else deltaBuild(request, monitor);
+
+			
+		}
+		catch (ProjectUnavailableError e){
+			ValidationPlugin.getPlugin().handleProjectUnavailableError(e);
+		}
+		catch (ResourceUnavailableError e){
+			ValidationPlugin.getPlugin().handleResourceUnavailableError(e);
+		}
+		catch (CoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+		finally {
+		  IValidatorVisitor finishedVisitor = new IValidatorVisitor(){
+
+		    public void visit(Validator validator, IProject project, ValType valType,
+		      ValOperation operation, IProgressMonitor monitor) {
+
+		      validator.validationFinishing(project, operation.getState(), monitor);              
+		    }           
+		  };
+          ValManager.getDefault().accept(finishedVisitor, request.getProject(), ValType.Build, getOperation(), monitor);
+		}
+		
+	}
+
+	private void deltaBuild(ValidationRequest request, IProgressMonitor monitor) throws CoreException {
+		ResourceCounter counter = new ResourceCounter();
+		request.getDelta().accept(counter);
+		SubMonitor subMonitor = SubMonitor.convert(monitor, counter.getCount());
+		Visitor vistitor = new Visitor(request, subMonitor, monitor, getOperation());
+		request.getDelta().accept(vistitor);		
+	}
+
+	private void fullBuild(ValidationRequest request, IProgressMonitor monitor) throws CoreException {
+		ResourceCounter counter = new ResourceCounter();
+		request.getProject().accept(counter, 0);
+		SubMonitor subMonitor = SubMonitor.convert(monitor, counter.getCount());
+		Visitor vistitor = new Visitor(request, subMonitor, monitor, getOperation());
+		request.getProject().accept(vistitor);
+		
+	}
+	
+	private ValOperation getOperation(){
+		return _operation;
+	}
+
+	static final class ResourceCounter implements IResourceProxyVisitor, IResourceDeltaVisitor {
+		
+		private int _count;
+
+		public int getCount() {
+			return _count;
+		}
+
+		public boolean visit(IResourceProxy proxy) throws CoreException {
+			_count++;
+			return true;
+		}
+
+		public boolean visit(IResourceDelta delta) throws CoreException {
+			_count++;
+			return true;
+		}		
+	}
+	
+	static final class ValidationRequest {
+		/** The project that is being built. */
+		private final IProject 			_project;
+		
+		/** The resource delta that triggered the build, it will be null for a full build. */
+		private final IResourceDelta	_delta;
+		
+		/** 
+		 * The kind of build.
+		 * 
+		 *  @see org.eclipse.core.resources.IncrementalProjectBuilder
+		 */
+		private final int					_buildKind;
+		
+		public ValidationRequest(IProject project, IResourceDelta delta, int buildKind){
+			_project = project;
+			_delta = delta;
+			_buildKind = buildKind;
+		}
+
+		public IProject getProject() {
+			return _project;
+		}
+
+		public IResourceDelta getDelta() {
+			return _delta;
+		}
+
+		public int getBuildKind() {
+			return _buildKind;
+		}
+	}
+	
+	private final static class Visitor implements IResourceDeltaVisitor, IResourceVisitor{
+		
+		private final ValidationRequest 	_request;
+		private final SubMonitor 			_subMonitor;
+		private final IProgressMonitor 		_monitor;
+		private final ValOperation			_operation;
+		
+		public Visitor(ValidationRequest request, SubMonitor subMonitor, IProgressMonitor monitor, ValOperation operation){
+			_request = request;
+			_subMonitor = subMonitor;
+			_monitor = monitor;
+			_operation = operation;
+		}
+		
+		public boolean visit(IResource resource) throws CoreException {
+			try {
+				if (DisabledResourceManager.getDefault().isDisabled(resource)){
+					MarkerManager.getDefault().deleteMarkers(resource, _operation.getStarted(), IResource.DEPTH_INFINITE);
+					return false;
+				}
+				ValManager.getDefault().validate(_request.getProject(), resource, IResourceDelta.NO_CHANGE, ValType.Build, 
+					_request.getBuildKind(), _operation, _subMonitor.newChild(1));
+			}
+			catch (ResourceUnavailableError e){
+				if (Tracing.isLogging())Tracing.log("ValBuilderJob-02: " + e.toString()); //$NON-NLS-1$
+				return false;
+			}
+			return true;
+		}
+		
+		@SuppressWarnings("deprecation")
+		public boolean visit(IResourceDelta delta) throws CoreException {
+			IResource resource = delta.getResource();
+			if (DisabledResourceManager.getDefault().isDisabled(resource)){
+				MarkerManager.getDefault().deleteMarkers(resource, _operation.getStarted(), IResource.DEPTH_INFINITE);
+				return false;
+			}
+			int kind = delta.getKind();
+			boolean isChanged = (kind & IResourceDelta.CHANGED) != 0;
+			if (isChanged &&  (delta.getFlags() & InterestedFlags) == 0)return true;
+			
+			if ((kind & (IResourceDelta.ADDED | IResourceDelta.CHANGED)) != 0){
+				ValManager.getDefault().validate(_request.getProject(), resource, delta.getKind(), ValType.Build, 
+					_request.getBuildKind(), _operation, _subMonitor.newChild(1));
+			}
+					
+			IDependencyIndex index = ValidationFramework.getDefault().getDependencyIndex();
+			if (index.isDependedOn(resource)){
+				MarkerManager mm = MarkerManager.getDefault();
+				for (DependentResource dr : index.get(resource)){
+					Validator val = dr.getValidator();
+					if (Friend.shouldValidate(val, dr.getResource(), ValType.Build, new ContentTypeWrapper())){
+						_operation.getState().put(ValidationState.TriggerResource, resource);
+						ValidationEvent event = new ValidationEvent(dr.getResource(), IResourceDelta.NO_CHANGE, delta);
+						if (val.shouldClearMarkers(event))mm.clearMarker(dr.getResource(), val); 
+						ValManager.getDefault().validate(val, _operation, dr.getResource(), 
+							IResourceDelta.NO_CHANGE, _monitor, event);
+					}
+				}
+			}
+					
+			return true;
+		}
+
+		
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValConstants.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValConstants.java
new file mode 100644
index 0000000..ab2aebf
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValConstants.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * 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.validation.internal;
+
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+public interface ValConstants {
+	/** problem marker for version 2 of the validation framework. */
+	String ProblemMarker =  ValidationPlugin.PLUGIN_ID +".problemmarker2"; //$NON-NLS-1$
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValManager.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValManager.java
new file mode 100644
index 0000000..3b2d041
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValManager.java
@@ -0,0 +1,1285 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.BitSet;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
+
+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.IWorkspaceRoot;
+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.QualifiedName;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.common.project.facet.core.FacetedProjectFramework;
+import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectEvent;
+import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener;
+import org.eclipse.wst.validation.Friend;
+import org.eclipse.wst.validation.IPerformanceMonitor;
+import org.eclipse.wst.validation.IValidatorGroupListener;
+import org.eclipse.wst.validation.PerformanceCounters;
+import org.eclipse.wst.validation.ValidationEvent;
+import org.eclipse.wst.validation.ValidationFramework;
+import org.eclipse.wst.validation.ValidationResult;
+import org.eclipse.wst.validation.ValidationState;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.internal.model.GlobalPreferences;
+import org.eclipse.wst.validation.internal.model.GlobalPreferencesValues;
+import org.eclipse.wst.validation.internal.model.IValidatorVisitor;
+import org.eclipse.wst.validation.internal.model.ProjectPreferences;
+import org.eclipse.wst.validation.internal.operations.ManualValidatorsOperation;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+import org.osgi.service.prefs.BackingStoreException;
+
+/**
+ * A central place to keep track of all the validators.
+ * @author karasiuk
+ *
+ */
+public final class ValManager implements IValChangedListener, IFacetedProjectListener, IProjectChangeListener {
+	
+	/**
+	 * Projects may be allowed to override the global validation settings. If that is the case then those
+	 * project specific settings are saved here. If the key exists, but the value is null, then that
+	 * means that the project has been checked and it does not have any specific settings.
+	 */
+	private final Map<IProject, ProjectPreferences> _projectPreferences = 
+		Collections.synchronizedMap(new HashMap<IProject, ProjectPreferences>(50));
+	
+	private final AtomicReference<GlobalPreferences> _globalPreferences = new AtomicReference<GlobalPreferences>();
+		
+	/**
+	 * This number increases each time any of the validation configurations change. It is used to determine
+	 * if information that we have cached in the ValProperty is stale or not. This starts off at zero, each time
+	 * the workbench is started.
+	 */
+	private final AtomicInteger _configNumber = new AtomicInteger();
+	
+	private final ValidatorIdManager _idManager = new ValidatorIdManager();
+	private final ValidatorCache 	_cache = new ValidatorCache();
+		
+	private static final QualifiedName StatusBuild = new QualifiedName(ValidationPlugin.PLUGIN_ID, "sb"); //$NON-NLS-1$
+	private static final QualifiedName StatusManual = new QualifiedName(ValidationPlugin.PLUGIN_ID, "sm"); //$NON-NLS-1$
+
+	
+	public static ValManager getDefault(){
+		return Singleton.valManager;
+	}
+	
+	private ValManager(){
+		ValPrefManagerGlobal.getDefault().addListener(this);
+		ValPrefManagerProject.addListener(this);
+		FacetedProjectFramework.addListener(this, IFacetedProjectEvent.Type.PROJECT_MODIFIED);
+		EventManager.getManager().addProjectChangeListener(this);
+	}
+	
+	/**
+	 * This needs to be called if the ValManager is ever deleted.
+	 */
+	public void dispose(){
+		// currently nobody calls this method, because this instance is never removed, but the method is
+		// here for completeness none the less.
+		ValPrefManagerGlobal.getDefault().removeListener(this);
+		ValPrefManagerProject.removeListener(this);
+		FacetedProjectFramework.removeListener(this);
+		EventManager.getManager().removeProjectChangeListener(this);	
+	}
+	
+	/**
+	 * Answer all the registered validators. If you are planning on making changes to the validators,
+	 * and then saving them in a preference store then you probably want the getValidatorsCopy method.
+	 * Because if you make changes to the original validators, and since we only save differences,
+	 * there won't be any differences. 
+	 * 
+	 * @return Answer the validators in name sorted order. Answer an empty array if there are no validators.
+	 * 
+	 * @see #getValidatorsCopy()
+	 */
+	public Validator[] getValidators(){
+		return getValidators(null);
+	}
+	
+	/**
+	 * Answer copies of all the registered validators. If you are going to be making changes to the validators
+	 * and then saving them backing into the preference store, then this is the method to use.
+	 * 
+	 * @return Answer an empty array if there are no validators.
+	 */
+	public Validator[] getValidatorsCopy(){
+		Validator[] orig = getValidators();
+		Validator[] copy = new Validator[orig.length];
+		for (int i=0; i<orig.length; i++)copy[i] = orig[i].copy();
+		return copy;
+	}
+	
+	/**
+	 * Answer all the validators for the given project.
+	 * <p>
+	 * Individual projects may override the global validation preference
+	 * settings. If the project has it's own settings, then those validators are
+	 * returned via this method.
+	 * </p>
+	 * <p>
+	 * The following approach is used. For version 1 validators, the validator
+	 * is only returned if it is defined to operate on this project type. This
+	 * is the way that the previous version of the framework did it. For version
+	 * 2 validators, they are all returned.
+	 * </p>
+	 * 
+	 * @param project
+	 *            this may be null, in which case the global preferences are
+	 *            returned.
+	 * @param respectOverrideSettings
+	 *            if this is true then the validators that get returned are
+	 *            based on the override settings. So for example, if the global
+	 *            preferences do not allow project overrides then none of the
+	 *            project settings are used. Normal validation would set this to true.
+	 *            The properties page would set this to false.
+	 *            
+	 * @deprecated Use {@link #getValidatorsNotCached(IProject)} instead            
+	 */
+	public Validator[] getValidators(IProject project, boolean respectOverrideSettings) throws ProjectUnavailableError {
+		return getValidators(project);
+	}
+	
+	/**
+	 * Answer a cached copy of the the validators for a given project. This is a front end method, 
+	 * for the getValidatorsNotCached() method.
+	 * <p>
+	 * Individual projects may override the global validation preference
+	 * settings. If the project has it's own settings, then those validators are
+	 * returned via this method.
+	 * </p>
+	 * <p>
+	 * The following approach is used. For version 1 validators, the validator
+	 * is only returned if it is defined to operate on this project type. This
+	 * is the way that the previous version of the framework did it. For version
+	 * 2 validators, they are all returned.
+	 * </p>
+	 * 
+	 * @param project
+	 *            This may be null, in which case the global preferences are
+	 *            returned.
+	 * 
+	 * @return The validators in name sorted order.
+	 */
+	public Validator[] getValidators(IProject project) throws ProjectUnavailableError {
+		return _cache.getValidatorsCached(project);
+	}
+	
+	/**
+	 * Answer all the validators for the given project.
+	 * <p>
+	 * Individual projects may override the global validation preference
+	 * settings. If the project has it's own settings, then those validators are
+	 * returned via this method.
+	 * </p>
+	 * <p>
+	 * The following approach is used. For version 1 validators, the validator
+	 * is only returned if it is defined to operate on this project type. This
+	 * is the way that the previous version of the framework did it. For version
+	 * 2 validators, they are all returned.
+	 * </p>
+	 * 
+	 * @param project
+	 *            This may be null, in which case the global preferences are
+	 *            returned.
+	 * 
+	 * @return The validators in name sorted order.
+	 */
+	private Validator[] getValidatorsNotCached(IProject project) throws ProjectUnavailableError {
+		Map<String,Validator> v2Vals = getV2Validators(project, UseProjectPreferences.Normal);
+		TreeSet<Validator> sorted = new TreeSet<Validator>();
+		sorted.addAll(v2Vals.values());
+		
+		try {
+			ValidationConfiguration vc = ConfigurationManager.getManager().getConfiguration(project);
+			if (project == null){
+				// If the project is null we need to use this approach, since you can not use new ManualValidatorsOperation(null)
+				ValidatorMetaData[] vmds = vc.getValidators();
+				for (ValidatorMetaData vmd : vmds){
+					Validator v = Validator.create(vmd, vc, project);
+					sorted.add(v);
+				}
+			}
+			else {
+				ManualValidatorsOperation mvo = new ManualValidatorsOperation(project);
+				Set<ValidatorMetaData> vmds = mvo.getEnabledValidators();
+				for (ValidatorMetaData vmd : vmds){
+					Validator v = Validator.create(vmd, vc, project);
+					sorted.add(v);
+				}
+			}
+		}
+		catch (InvocationTargetException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+		
+		Validator[] vals = new Validator[sorted.size()];
+		sorted.toArray(vals);
+		return vals;
+	}
+	/**
+	 * Validators can use project level settings (Project natures and facets) to
+	 * determine if they are applicable to the project or not.
+	 * 
+	 * @param project
+	 *            The project that the configuration is based on.
+	 * @param mustUseProjectSettings
+	 *            Force the project properties to be used. There is a case where the user has toggled the
+	 *            Enable project specific settings checkbox in the dialog, but has not yet committed the
+	 *            changes. This allows that setting to be passed through.
+	 * @return The validators that are configured to run on this project based
+	 *         on the project level settings. These are the "live" validators, they are not copies.
+	 * @throws ProjectUnavailableError
+	 * 
+	 * @deprecated Use getValidatorsConfiguredForProject(IProject project, UseProjectPreferences useProject)
+	 */
+	public Validator[] getValidatorsConfiguredForProject(IProject project, boolean mustUseProjectSettings) throws ProjectUnavailableError {
+		UseProjectPreferences useProject = UseProjectPreferences.Normal;
+		return getValidatorsConfiguredForProject(project, useProject);
+	}
+	
+	/**
+	 * Validators can use project level settings (Project natures and facets) to
+	 * determine if they are applicable to the project or not.
+	 * 
+	 * @param project
+	 *            The project that the configuration is based on.
+	 * @param useProject
+	 *            Specifies how to use the project preferences. This can be used
+	 *            to force the project properties to be used. There is a case
+	 *            where the user has toggled the Enable project specific
+	 *            settings checkbox in the dialog, but has not yet committed the
+	 *            changes. This allows that setting to be passed through.
+	 * @return The validators that are configured to run on this project based
+	 *         on the project level settings. These are the "live" validators,
+	 *         they are not copies.
+	 * @throws ProjectUnavailableError
+	 */
+	public Validator[] getValidatorsConfiguredForProject(IProject project, UseProjectPreferences useProject) throws ProjectUnavailableError {
+		Map<String,Validator> v2Vals = getV2Validators(project, useProject);
+		TreeSet<Validator> sorted = new TreeSet<Validator>();
+		sorted.addAll(v2Vals.values());
+		
+		if (useProject == UseProjectPreferences.MustNotUse){
+			sorted.addAll(ExtensionValidators.instance().getV1Validators(project));
+		}
+		else {
+			try {
+				ValidationConfiguration vc = ConfigurationManager.getManager().getProjectConfiguration(project);
+				ValidatorMetaData[] vmds = vc.getValidators();
+				for (ValidatorMetaData vmd : vmds) {
+					Validator v = Validator.create(vmd, vc, project);
+					sorted.add(v);
+				}
+			}
+			catch (InvocationTargetException e){
+				ValidationPlugin.getPlugin().handleException(e);
+			}
+		}
+				
+		List<Validator> list = new LinkedList<Validator>();
+		for (Validator v : sorted){
+			if (v.shouldValidateProject(project, false, false))list.add(v);
+		}
+		
+		Validator[]vals = new Validator[list.size()];
+		list.toArray(vals);
+		return vals;
+	}
+	
+	/**
+	 * Answer the V2 validators that are in effect for this project. The
+	 * following approach is used:
+	 * <ol>
+	 * <li>The validators that are defined by the extension point are loaded.</li>
+	 * <li>They are customized by any global preferences.</li>
+	 * <li>If project customizations are allowed, they are customized by the
+	 * project preferences.
+	 * </ol>
+	 * 
+	 * @param project
+	 *            This may be null, in which case only the global preferences
+	 *            are used.
+	 * @param useProject
+	 *            Specifies how to use the project preferences. This can be used
+	 *            to force the project properties to be used. There is a case
+	 *            where the user has toggled the Enable project specific
+	 *            settings checkbox in the dialog, but has not yet committed the
+	 *            changes. This allows that setting to be passed through.
+	 *            
+	 * @return
+	 */
+	private Map<String,Validator> getV2Validators(IProject project, UseProjectPreferences useProject){
+		Map<String,Validator> extVals = ExtensionValidators.instance().getMapV2Copy();
+		try {
+			List<Validator> vals = ValPrefManagerGlobal.getDefault().getValidators();
+			for (Validator v : vals)extVals.put(v.getId(), v);
+			
+			if (useProject != UseProjectPreferences.MustNotUse){
+				if (useProject == UseProjectPreferences.MustUse || !mustUseGlobalValidators(project)){
+					//TODO should probably cache this vpm
+					ValPrefManagerProject vpm = new ValPrefManagerProject(project);
+					vals = vpm.getValidators(extVals);
+					for (Validator v : vals)extVals.put(v.getId(), v);
+					
+					for (Validator v : getProjectPreferences(project).getValidators())extVals.put(v.getId(), v);
+				}	
+			}
+		}
+		catch (BackingStoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+		return extVals;
+	}
+	
+
+	/**
+	 * Answer true if we must use the global settings for this project. If the global preferences do not
+	 * allow overrides, or if this project does not allow overrides then the global preferences must be used.
+	 *  
+	 * @param project project that is being tested. It can be null, in which case the global preferences must be used.
+	 * @return true if the global preferences must be used.
+	 */
+	public boolean mustUseGlobalValidators(IProject project){
+		if (project == null)return true;
+		if (!getGlobalPreferences().getOverride())return true;
+		ProjectPreferences pp = _projectPreferences.get(project);
+		if (pp != null)return !pp.getOverride();
+		
+		ValPrefManagerProject vpm = new ValPrefManagerProject(project);
+		return !vpm.getOverride();
+	}
+	
+	/**
+	 * Answer the validator with the given id that is in effect for the given project.
+	 * 
+	 * @param id The validator id.
+	 * @param project
+	 * @return null if the validator is not found
+	 */
+	public Validator getValidator(String id, IProject project){
+		Validator[] vals = getValidators(project);
+		for (Validator v : vals){
+			if (v.getId().equals(id))return v;
+		}
+		return null;
+	}
+	
+	/**
+	 * @see ValidationFramework#getValidator(String, IProject)
+	 */
+	public Validator getValidatorWithId(String id, IProject project){
+		Validator[] vals = getValidators(project);
+		for (Validator v : vals){
+			if (v.getId().equals(id))return v;
+		}
+		return null;
+	}
+					
+	/**
+	 * Answer true if the resource has any enabled validators.
+	 * 
+	 * @param resource a file, folder or project.
+	 * 
+	 * @param isManual if true then the validator must be turned on for manual validation. 
+	 * If false then the isManualValidation setting isn't used to filter out validators.
+	 *   
+	 * @param isBuild if true then the validator must be turned on for build based validation.
+	 * If false then the isBuildValidation setting isn't used to filter out validators.  
+	 */
+	public boolean hasValidators(IResource resource, boolean isManual, boolean isBuild){
+		if (resource instanceof IProject){
+			IProject project = (IProject)resource;
+			return ValManager.getDefault().getValidators(project).length > 0;
+		}
+		else if (resource instanceof IFolder){
+			IFolder folder = (IFolder)resource;
+			HasValidatorVisitor v = new HasValidatorVisitor(isManual, isBuild);
+			return v.hasValidator(folder);
+		}
+		else {
+			ContentTypeWrapper ctw = new ContentTypeWrapper();
+			for (Validator val : ValManager.getDefault().getValidators(resource.getProject())){
+				if (Friend.shouldValidate(val, resource, isManual, isBuild, ctw))return true;
+			}			
+		}
+		return false;
+	}
+	
+	/**
+	 * Answer true if the project has disabled all of it's validators, or if project overrides are not
+	 * allowed if global validation has been disabled.
+	 * 
+	 * @param project the project that is being consulted, or null if only the global settings are to be 
+	 * checked.
+	 */
+	public boolean isDisabled(IProject project){
+		GlobalPreferences gp = getGlobalPreferences();
+		if (!gp.getOverride() || project == null)return gp.getDisableAllValidation();
+		
+		ProjectPreferences pp = _projectPreferences.get(project);
+		if (pp == null)return gp.getDisableAllValidation();
+		return pp.getSuspend();		
+	}
+			
+	/**
+	 * Answer all the registered validators as they were defined by the extension points. That is
+	 * answer the validators as if the user has never applied any customizations.
+	 * 
+	 * @return Answer an empty array if there are no validators.
+	 */
+	public static Validator[] getDefaultValidators() throws InvocationTargetException {
+		Map<String,Validator> extVals = ExtensionValidators.instance().getMapV2();
+		TreeSet<Validator> sorted = new TreeSet<Validator>();
+		for (Validator v : extVals.values())sorted.add(v);
+		
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		GlobalConfiguration gc = new GlobalConfiguration(root);
+		gc.resetToDefault();
+		for (ValidatorMetaData vmd : gc.getValidators()){
+			Validator v = Validator.create(vmd, gc, null);
+			v.setBuildValidation(vmd.isBuildValidation());
+			v.setManualValidation(vmd.isManualValidation());
+			sorted.add(v);
+		}
+		
+		Validator[] val = new Validator[sorted.size()];
+		sorted.toArray(val);
+		return val;
+	}
+	
+	public static Validator[] getDefaultValidators(IProject project) throws InvocationTargetException {
+		Map<String,Validator> extVals = ExtensionValidators.instance().getMap(project);
+		Validator[] val = new Validator[extVals.size()];
+		extVals.values().toArray(val);
+		return val;
+	}
+
+	/**
+	 * Answer all the registered validators.
+	 * 
+	 * @param project the project to use for getting the version 1 validator settings. This can
+	 * be null in which case the global preferences are used.
+	 * 
+	 * @return Answer an empty array if there are no validators.
+	 */
+//	Validator[] getValidators2(IProject project) throws ProjectUnavailableError {
+//		// If I use a local variable I don't need to synchronize the method.
+//		
+//		Validator[] validators = _validators;
+//		if (project == null && validators != null)return validators;
+//				
+//		Validator[] val = loadExtensions(false, project);
+//		ValPrefManagerGlobal vpm = ValPrefManagerGlobal.getDefault();
+//		if (!vpm.loadPreferences(val)){
+//			val = restoreDefaults2(project);
+//			saveStateTimestamp();				
+//		}
+//		else {
+//			if (getGlobalPreferences().getStateTimeStamp() != Platform.getStateStamp())
+//				val = migrateSettings(val, project);
+//		}
+//		
+//		TreeSet<Validator> set = new TreeSet<Validator>();
+//		for (Validator v : val)set.add(v);
+//		
+//		List<Validator> list = new LinkedList<Validator>();
+//		try {
+//			ValidationConfiguration vc = ConfigurationManager.getManager().getConfiguration(project);
+//			for (ValidatorMetaData vmd : vc.getValidators()){
+//				list.add(Validator.create(vmd, vc, project));
+//			}							
+//			
+//		}
+//		catch (InvocationTargetException e){
+//			if (project != null && (!project.exists() || !project.isOpen()))
+//				throw new ProjectUnavailableError(project);
+//			ValidationPlugin.getPlugin().handleException(e);
+//		}
+//		
+//		set.addAll(list);
+//		val = new Validator[set.size()];
+//		set.toArray(val);
+//		if (project == null)_validators = val;
+//		return val;
+//	}
+	
+	/**
+	 * This method needs to be called whenever the validation configuration has changed.
+	 */
+	private void configHasChanged(){
+		_configNumber.incrementAndGet();
+		ValidatorProjectManager.reset();
+		_cache.reset();
+	}
+		
+	/**
+	 * Answer the global validation preferences.
+	 */
+	public GlobalPreferences getGlobalPreferences(){
+		GlobalPreferences gp = _globalPreferences.get();
+		if (gp == null){
+			ValPrefManagerGlobal vpm = ValPrefManagerGlobal.getDefault();
+			gp = vpm.loadGlobalPreferences();
+			if (!_globalPreferences.compareAndSet(null, gp))gp = _globalPreferences.get();
+		}
+		return gp;
+	}
+	
+	/**
+	 * Update the global preferences, but only if something has actually changed.
+	 * @param values The global settings.
+	 * @return a bit mask of the changes between the old values and the new values. See the GlobalPreferences
+	 * constants for the bit mask values. If a zero is return there were no changes.
+	 */
+	public int replace(GlobalPreferencesValues values){
+		GlobalPreferences gp = new GlobalPreferences(values);
+		GlobalPreferences old = getGlobalPreferences();
+		int changes = old.compare(gp);
+		if (changes != 0){
+			_globalPreferences.set(gp);
+		}
+		return changes;
+	}
+		
+	/**
+	 * Answer the project preferences for this project.
+	 * @param project The project, this may be null.
+	 */
+	public ProjectPreferences getProjectPreferences(IProject project) {
+		ProjectPreferences pp = _projectPreferences.get(project);
+		if (pp != null)return pp;
+		
+		/* hopefully we rarely get this far */
+		
+		Map<String,Validator> extVals = ExtensionValidators.instance().getMapV2Copy();
+		try {
+			List<Validator> vals = ValPrefManagerGlobal.getDefault().getValidators();
+			for (Validator v : vals)extVals.put(v.getId(), v);
+			
+			pp = getProjectPreferences(project, extVals);
+		}
+		catch (BackingStoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}	
+		return pp;
+	}
+
+	/**
+	 * 
+	 * @param project The project, this may be null.
+	 * @param baseValidators
+	 */
+	private ProjectPreferences getProjectPreferences(IProject project, Map<String, Validator> baseValidators) 
+		throws BackingStoreException {
+		ProjectPreferences pp = _projectPreferences.get(project);
+		if (pp != null)return pp;
+		
+		ValPrefManagerProject vpm = new ValPrefManagerProject(project);
+		pp = vpm.loadProjectPreferences(project, baseValidators);
+		_projectPreferences.put(project, pp);
+		return pp;		
+	}
+		
+	/**
+	 * Restore all the validation defaults, as defined by the individual validators via the
+	 * validation extension point.
+	 */
+//	public synchronized void restoreDefaults() {
+//		getGlobalPreferences().resetToDefault();
+//		_validators = null;
+//		getValidators(true);
+//	}
+	
+
+	/**
+	 * Run all the validators that are applicable to this resource.
+	 * <p>
+	 * If this is a manual validation both the version 1 and version 2 validators are run. If it
+	 * is a build validation, then only the version 2 validators are run, because the old framework handles
+	 * the running of the old validators.
+	 * </p>
+	 * 
+	 * @param project project that is being validated
+	 * 
+	 * @param resource the resource that is being validated
+	 * 
+	 * @param kind the kind of resource delta. It will be one of the IResourceDelta constants, like
+	 * IResourceDelta.CHANGED for example.
+	 * 
+	 * @param valType The type of validation request.
+	 * @param buildKind the kind of build that triggered this validation. See IncrementalProjectBuilder for values.
+	 * @param operation the operation that this validation is running under
+	 * @param monitor the monitor to use to report progress 
+	 */
+	public void validate(IProject project, final IResource resource, final int kind, ValType valType, 
+		int buildKind, ValOperation operation, final IProgressMonitor monitor) {
+		
+		MarkerManager.getDefault().deleteMarkers(resource, operation.getStarted(), IResource.DEPTH_ZERO);
+		
+		IValidatorVisitor visitor = new IValidatorVisitor(){
+
+			public void visit(Validator validator, IProject project, ValType vt,
+				ValOperation operation, IProgressMonitor monitor) {
+								
+				Validator.V1 v1 = validator.asV1Validator();
+				if (vt == ValType.Build && v1 != null)return;
+				
+				SubMonitor subMonitor = SubMonitor.convert(monitor);
+				String task = NLS.bind(ValMessages.LogValStart, validator.getName(), resource.getName());
+				subMonitor.beginTask(task, 1);
+				validate(validator, operation, resource, kind, subMonitor.newChild(1), null);
+			}			
+		};
+		SubMonitor sm = SubMonitor.convert(monitor, getValidators(project).length);
+		accept(visitor, project, resource, valType, operation, sm);
+		
+	}
+	
+	/**
+	 * Validate a single resource with a single validator. This will call the validator whether the validator
+	 * is enabled or not.
+	 * <p>
+	 * Callers of this method should ensure that the shouldValidate was tested before making this call.
+	 * 
+	 * @param validator the validator
+	 * @param operation the operation that the validation is running in.
+	 * @param resource the resource to validate
+	 * @param kind the kind of resource change. See IResourceDelta.
+	 * @param monitor
+	 */
+	public void validate(Validator validator, ValOperation operation, IResource resource, int kind, 
+			IProgressMonitor monitor, ValidationEvent event){
+		if (operation.isValidated(validator.getId(), resource))return;
+		long time = 0;
+		long cpuTime = -1;
+		String msg1 = NLS.bind(ValMessages.LogValStart, validator.getName(), resource.getName());
+		monitor.subTask(msg1);
+		IPerformanceMonitor pm = ValidationFramework.getDefault().getPerformanceMonitor();
+		if (pm.isCollecting()){
+			time = System.currentTimeMillis();
+			cpuTime = Misc.getCPUTime();
+		}
+		
+		if (Tracing.matchesExtraDetail(validator.getId())){
+			Tracing.log("ValManager-03: validating ", resource); //$NON-NLS-1$
+		}
+		ValidationResult vr = validator.validate(resource, kind, operation, monitor, event);
+		if (pm.isCollecting()){
+			if (cpuTime != -1){
+				cpuTime = Misc.getCPUTime() - cpuTime;
+			}
+			int num = 0;
+			if (vr != null)num = vr.getNumberOfValidatedResources();
+			PerformanceCounters pc = new PerformanceCounters(validator.getId(), 
+				validator.getName(), resource.getName(),
+				num, System.currentTimeMillis()-time, cpuTime);
+			pm.add(pc);
+		}
+		if (ValidationPlugin.getPlugin().isDebugging() && !pm.isCollecting()){
+			String msg = time != 0 ? 
+				NLS.bind(ValMessages.LogValEndTime,	new Object[]{validator.getName(), 
+					validator.getId(), resource, Misc.getTimeMS(System.currentTimeMillis()-time)}) :
+				NLS.bind(ValMessages.LogValEnd, validator.getName(), resource);
+			Tracing.log("ValManager-01: " + msg); //$NON-NLS-1$
+		}
+		if (vr != null){
+			operation.mergeResults(vr);
+			if (vr.getSuspendValidation() != null)operation.suspendValidation(vr.getSuspendValidation(), validator);
+		}
+	}
+	
+	/**
+	 * Accept a visitor for all the validators that are enabled for the given project.
+	 * 
+	 * @param visitor
+	 * @param project
+	 * @param valType the type of validation
+	 * @param operation
+	 * @param monitor
+	 */
+	public void accept(IValidatorVisitor visitor, IProject project, ValType valType, 
+		ValOperation operation, IProgressMonitor monitor){
+		
+		if (isDisabled(project))return;
+		
+		for (Validator val : getValidators(project)){
+			if (monitor.isCanceled())return;
+			if (!ValidatorProjectManager.get().shouldValidate(val, project, valType))continue;
+			if (operation.isSuspended(val, project))continue;
+			try {
+				visitor.visit(val, project, valType, operation, monitor);
+			}
+			catch (Exception e){
+				ValidationPlugin.getPlugin().handleException(e);
+			}
+		}		
+	}
+	
+	/**
+	 * Accept a visitor for all the validators that are enabled for the given project, resource, 
+	 * and validation mode.
+	 * 
+	 * @param valType the type of validation request
+	 */
+	public void accept(IValidatorVisitor visitor, IProject project, IResource resource, 
+			ValType valType, ValOperation operation, IProgressMonitor monitor){
+		
+		if (isDisabled(project))return;
+		
+		Map<String,IValidatorGroupListener[]> groupListeners = new HashMap<String,IValidatorGroupListener[]>();
+		
+		ValProperty vp = getValProperty(resource, valType, _configNumber.get());
+		if (vp != null){
+			BitSet bs = vp.getConfigSet();
+			for (Validator val : getValidators(project)){
+				if (!monitor.isCanceled()) {
+					if (!bs.get(_idManager.getIndex(val.getId())))continue;
+					if (operation.isSuspended(val, project))continue;
+					Validator.V2 v2 = val.asV2Validator();
+					if (v2 != null) {
+						notifyGroupListenersStarting(resource, operation.getState(), monitor, groupListeners, v2);
+					}
+					try {
+						visitor.visit(val, project, valType, operation, monitor);
+					}
+					catch (Exception e){
+						ValidationPlugin.getPlugin().handleException(e);
+					}
+				}
+			}
+			notifyGroupFinishing(resource, operation.getState(), monitor, groupListeners);
+			return;
+		}
+		
+		vp = new ValProperty();
+		vp.setConfigNumber(_configNumber.get());
+		ContentTypeWrapper ctw = new ContentTypeWrapper();
+		for (Validator val : getValidators(project)){
+			if (!monitor.isCanceled()) {
+				if (!ValidatorProjectManager.get().shouldValidate(val, project, valType))continue;
+				if (Friend.shouldValidate(val, resource, valType, ctw)){
+					vp.getConfigSet().set(_idManager.getIndex(val.getId()));
+					// we do the suspend check after figuring out if it needs to be validated, because we save
+					// this information for the session.
+					if (operation.isSuspended(val, project))continue;
+					Validator.V2 v2 = val.asV2Validator();
+					if (v2 != null) {
+						notifyGroupListenersStarting(resource, operation.getState(), monitor, groupListeners, v2);
+					}
+					try {
+						visitor.visit(val, project, valType, operation, monitor);
+					}
+					catch (Exception e){
+						ValidationPlugin.getPlugin().handleException(e);
+					}
+				}
+			}
+		}
+		notifyGroupFinishing(resource, operation.getState(), monitor, groupListeners);
+		putValProperty(vp, resource, valType);
+	}
+
+	/**
+	 * Let the group listeners know that validation might be starting for the group of validators. 
+	 */
+	private void notifyGroupListenersStarting(final IResource resource,	 
+			final ValidationState state, final IProgressMonitor monitor, 
+			Map<String, IValidatorGroupListener[]> groupListeners, Validator.V2 v2) {
+		
+		String[] groups = v2.getValidatorGroups();
+		for (String group : groups) {
+			if (!groupListeners.containsKey(group)) {
+				IValidatorGroupListener[] createdListeners = null;
+				try {
+					createdListeners = ValidatorGroupExtensionReader.getDefault().createListeners(group);
+				}
+				catch (CoreException e){
+					String msg = NLS.bind(ValMessages.ErrConfig, v2.getId());
+					Status status = new Status(IStatus.ERROR, ValidationPlugin.PLUGIN_ID, msg);
+					CoreException core = new CoreException(status);
+					ValidationPlugin.getPlugin().handleException(core);
+					ValidationPlugin.getPlugin().handleException(e);
+					
+					// we create this to ensure that we don't signal the same exception over and over. 
+					createdListeners = new IValidatorGroupListener[0];
+				}
+				
+				// create and notify just this once
+				final IValidatorGroupListener[] listeners = createdListeners;
+					
+				groupListeners.put(group, listeners);
+				for (final IValidatorGroupListener listener : listeners) {
+					SafeRunner.run(new ISafeRunnable() {
+						public void run() throws Exception {
+							listener.validationStarting(resource, monitor, state);
+						}
+
+						public void handleException(Throwable exception) {
+							ValidationPlugin.getPlugin().handleException(exception);
+						}
+					});
+				}
+			}
+		}
+	}
+
+	/**
+	 * Let the group listeners know that validation is finished for the group of validators. 
+	 */
+	private void notifyGroupFinishing(final IResource resource, 
+			final ValidationState state, final IProgressMonitor monitor,
+			Map<String, IValidatorGroupListener[]> groupListeners) {
+		for (final IValidatorGroupListener[] listeners : groupListeners.values()) {
+			for (final IValidatorGroupListener listener : listeners) {
+				SafeRunner.run(new ISafeRunnable() {
+					public void run() throws Exception {
+						listener.validationFinishing(resource, monitor, state);
+					}
+
+					public void handleException(Throwable exception) {
+						ValidationPlugin.getPlugin().handleException(exception);
+					}
+				});
+			}
+		}
+	}
+
+	private ValProperty getValProperty(IResource resource, ValType valType, int configNumber) {
+		ValProperty vp = null;
+		try {
+			if (valType == ValType.Build)vp = (ValProperty)resource.getSessionProperty(StatusBuild);
+			else if (valType == ValType.Manual)vp = (ValProperty)resource.getSessionProperty(StatusManual);
+		}
+		catch (CoreException e){
+			// don't care about this one
+		}
+		if (vp == null)return null;
+		if (vp.getConfigNumber() != _configNumber.get())return null;
+		return vp;
+	}
+	
+	/**
+	 * Let the validation manager know that a project has been changed.
+	 * 
+	 * @param project The project that has been opened, created, or had it's description change.
+	 */
+	public void projectChanged(IProject project){
+		ValidatorProjectManager.reset();
+		_projectPreferences.remove(project);
+		_cache.reset(project);
+	}
+	
+	/**
+	 * Let the validation manager know that a project has been removed.
+	 * 
+	 * @param project The project that has been closed or deleted.
+	 * 
+	 */
+	public void projectRemoved(IProject project){
+		ValidatorProjectManager.reset();
+		_projectPreferences.remove(project);
+		_cache.reset(project);
+	}
+	
+	private void putValProperty(ValProperty vp, IResource resource, ValType valType) {
+		try {
+			if (valType == ValType.Build)resource.setSessionProperty(StatusBuild, vp);
+			else if (valType == ValType.Manual)resource.setSessionProperty(StatusManual, vp);
+		}
+		catch (CoreException e){
+			ValidationPlugin.getPlugin().handleException(e, IStatus.WARNING);
+		}
+	}
+
+	/**
+	 * Let each of the enabled validators know that a clean has been requested.
+	 * 
+	 * @param project the project that is being cleaned, or null if the entire workspace is being cleaned.
+	 * @param monitor
+	 */
+	void clean(final IProject project, final ValOperation operation, final IProgressMonitor monitor) {
+		IValidatorVisitor visitor = new IValidatorVisitor(){
+
+			public void visit(Validator validator, IProject project, ValType valType,
+				ValOperation operation, IProgressMonitor monitor) {
+				validator.clean(project, operation, monitor);					
+			}
+			
+		};
+		accept(visitor, project, ValType.Build, operation, monitor);
+	}
+	
+	/**
+	 * Let each of the enabled validators know that a clean has been requested.
+	 * 
+	 * @param project the project that is being cleaned, or null if the entire workspace is being cleaned.
+	 * @param monitor
+	 */
+	public void clean(IProject project, IProgressMonitor monitor){
+		IValidatorVisitor visitor = new IValidatorVisitor(){
+
+			public void visit(Validator validator, IProject project, ValType valType,
+				ValOperation operation, IProgressMonitor monitor) {
+				validator.clean(project, operation, monitor);					
+			}
+			
+		};
+		ValidationFramework.getDefault().getDependencyIndex().clear(project);
+		ValOperation operation = new ValOperation();
+		accept(visitor, project, ValType.Build, operation, monitor);
+	}
+
+	public void validatorsForProjectChanged(IProject project, boolean validationSettingChanged) {
+		if (validationSettingChanged){
+			if (project != null)_projectPreferences.remove(project);
+			configHasChanged();
+		}
+	}
+	
+	private final class HasValidatorVisitor implements IResourceVisitor {
+		
+		private boolean 			_hasValidator;
+		private final boolean		_isManual;
+		private final boolean		_isBuild;
+		
+		public HasValidatorVisitor(boolean isManual, boolean isBuild){
+			_isManual = isManual;
+			_isBuild = isBuild;			
+		}
+		
+		public boolean hasValidator(IFolder folder){
+			try {
+				folder.accept(this);
+			}
+			catch (CoreException e){
+				ValidationPlugin.getPlugin().handleException(e);
+			}
+			return _hasValidator;
+		}
+
+		public boolean visit(IResource resource) throws CoreException {
+			if (resource instanceof IFolder)return true;
+			if (hasValidators(resource, _isManual, _isBuild)){
+				_hasValidator = true;
+				return false;
+			}
+			return true;
+		}
+	}
+	
+	/**
+	 * Map validator id's to an index number on a bit set, so that we can quickly determine if a
+	 * particular validator needs to validate a particular resource.
+	 * @author karasiuk
+	 *
+	 */
+	private final static class ValidatorIdManager {
+		
+		/**
+		 * Map validator id's to Integers. The integers correspond to bits in the ValProperty instances.
+		 */
+		private final Map<String, Integer> _map = new HashMap<String, Integer>(100);
+		private final Map<Integer, String> _reverseMap = new HashMap<Integer, String>(100);
+		
+		/** Next available bit. */
+		private int _next;
+		
+		/**
+		 * Answer the index number for this validator. If we haven't seen it yet allocate a new index number.
+		 * @param id validator id.
+		 * @return index into the validator bit mask.
+		 */
+		public synchronized int getIndex(String id){
+			Integer i = _map.get(id);
+			if (i != null)return i;
+			
+			i = _next++;
+			_map.put(id, i);
+			_reverseMap.put(i, id);
+			
+			return i;
+		}
+		
+		/**
+		 * Answer the validator id for the index.
+		 * @param index
+		 * @return null if the index number has not been set.
+		 */
+		public synchronized String getId(Integer index){
+			return _reverseMap.get(index);
+		}
+		
+		public synchronized void reset(){
+			_map.clear();
+			_reverseMap.clear();
+			_next = 0;
+		}
+		
+		/**
+		 * Answer the ids for the bit in the bitset. This is used for debugging. 
+		 * @param bs
+		 */
+		public synchronized String[] getIds(BitSet bs){
+			List<String> list = new LinkedList<String>();
+			for(int i=bs.nextSetBit(0); i>=0; i=bs.nextSetBit(i+1)) {
+				String id = getId(i);
+				if (id != null)list.add(id);
+			}
+			String[] s = new String[list.size()];
+			return list.toArray(s);
+		}		
+	}
+	
+	/**
+	 * This is used to keep track of which validators are enabled with which projects. We want to ensure
+	 * that we don't activate a validator (and it's plug-in) if it has nothing to validate in the workspace.
+	 * This is an immutable object.
+	 * @author karasiuk
+	 *
+	 */
+	private final static class ValidatorProjectManager {
+		
+		private final static AtomicReference<ValidatorProjectManager> _me = new AtomicReference<ValidatorProjectManager>();
+		private final static AtomicInteger _counter = new AtomicInteger();
+		
+		private final ValProjectMap _manual = new ValProjectMap(ValType.Manual);
+		private final ValProjectMap _build = new ValProjectMap(ValType.Build);
+		private final int _sequence;
+		
+		/**
+		 * Answer the most current ValidatorProjectManager creating a new one if you have to.
+		 * @return
+		 */
+		public static ValidatorProjectManager get(){
+			ValidatorProjectManager vpm = _me.get();
+			if (vpm != null)return vpm;
+			
+			int next = _counter.incrementAndGet();
+			ValidatorProjectManager newVpm = null;
+			boolean looking = true;
+			while(looking){
+				vpm = _me.get();
+				if (vpm == null || next > vpm.getSequence()){
+					if (newVpm == null)newVpm = new ValidatorProjectManager(next);
+					if (_me.compareAndSet(vpm, newVpm))return newVpm;
+				}
+				else looking = false;
+			}
+			return vpm;
+		}
+		
+		/**
+		 * Reset the ValidatorProjectManager to null, which will force a newer one to be created the next time
+		 * that it is requested.
+		 */
+		public static void reset(){
+			int next = _counter.incrementAndGet();
+			ValidatorProjectManager vpm = _me.get();
+			if ( vpm == null)return;
+			if (next > vpm.getSequence())_me.compareAndSet(vpm, null);
+		}
+		
+		private ValidatorProjectManager(int sequence){
+			_sequence = sequence;
+		}
+		
+		int getSequence(){
+			return _sequence;
+		}
+		
+		/**
+		 * Should this validator attempt to validate any resources in this project?
+		 * 
+		 * @param validator
+		 *            The validator that is being tested.
+		 * @param project
+		 *            The project that is being tested. This can be null, which
+		 *            means that all projects will be tested.
+		 * @param type
+		 *            The type of validation operation.
+		 * @return true if the validator should attempt to validate.
+		 */
+		public boolean shouldValidate(Validator validator, IProject project, ValType type){
+			if (type == ValType.Build)return _build.shouldValidate(validator, project);
+			if (type == ValType.Manual)return _manual.shouldValidate(validator, project);
+				
+			return false;
+		}		
+				
+		/**
+		 * This is used to keep track of which validators are enabled for which projects. We want to ensure
+		 * that we don't activate a validator (and it's plug-in) if it has nothing to validate in the workspace.
+		 * <p>
+		 * There are two reasons why a validator may not be enabled. It's current project level filters may not match
+		 * the project. Or the entire validator may have been turned off for the project. 
+		 * </p>
+		 * @author karasiuk
+		 *
+		 */
+		private final static class ValProjectMap {
+			/**
+			 * Map a validator to the projects that it validates. This is an immutable object.
+			 * <p>
+			 * I've gone back and forth on whether the key should
+			 * be a Validator or the validator id. I'm back to it being the id because I was
+			 * running into cases where because of copying I wasn't getting the matches that I expected and I
+			 * want to ensure that I don't leak validators. If I run into
+			 * false matches, it is probably because reset isn't being called when it should be.
+			 * </p>
+			 */
+			private final Map<String, Set<IProject>> _map;
+			
+			private final ValType _type;
+						
+			public ValProjectMap(ValType type){
+				_type = type;
+				_map = load();
+			}
+			
+			/**
+			 * Should this validator attempt to validate any resources in this project?
+			 * 
+			 * @param validator
+			 *            The validator that is being tested.
+			 * @param project
+			 *            The project that is being tested. This can be null, which
+			 *            means that all projects will be tested, and if any of them return true, 
+			 *            then true is answered for this method.
+			 *            
+			 * @return true if the validator should attempt to validate.
+			 */
+			public boolean shouldValidate(Validator validator, IProject project){
+				String vid = validator.getId();
+				Set<IProject> projects = _map.get(vid);
+				if (projects == null)return false;
+				if (project == null)return projects.size() > 0;
+				return projects.contains(project);
+			}
+			
+			/**
+			 * For each of the projects in the workspace, load which validators are currently prepared to validate things.
+			 */
+			private Map<String, Set<IProject>> load() {
+				Map<String, Set<IProject>> map = new HashMap<String, Set<IProject>>(50);
+				ValManager vm = ValManager.getDefault();
+				IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+				Tracing.log("ValManager-02: loading " + projects.length + " projects");  //$NON-NLS-1$//$NON-NLS-2$
+				for (IProject project : projects){
+					if (!project.isOpen())continue;
+					Validator[] vals = vm.getValidators(project);
+					for (Validator v : vals){
+						String vid = v.getId();
+						Set<IProject> set = map.get(vid);
+						if (set == null){
+							set = new HashSet<IProject>(50);
+							map.put(vid, set);
+						}
+						
+						if (v.shouldValidateProject(project, _type))set.add(project);
+					}					
+				}
+				return map;
+			}
+			
+		}
+		
+	}
+
+	public void handleEvent(IFacetedProjectEvent event) {
+		projectChanged(event.getProject().getProject());
+	}
+
+	public void projectChanged(IProject project, int type) {
+		switch (type){
+		case IProjectChangeListener.ProjectClosed:
+		case IProjectChangeListener.ProjectDeleted:
+			projectRemoved(project);
+			break;
+		case IProjectChangeListener.ProjectOpened:
+		case IProjectChangeListener.ProjectChanged:
+		case IProjectChangeListener.ProjectAdded:
+			projectChanged(project);
+			break;
+		}		
+	}
+	
+	/**
+	 * Store the singleton for the ValManager. This approach is used to avoid having to synchronize the
+	 * ValManager.getDefault() method.
+	 * 
+	 * @author karasiuk
+	 *
+	 */
+	private static class Singleton {
+		static ValManager valManager = new ValManager();
+	}
+	
+	private final class ValidatorCache {
+		private final ConcurrentMap<IProject, Validator[]> _cache = new ConcurrentHashMap<IProject, Validator[]>(50);
+		private final AtomicReference<Validator[]> _global = new AtomicReference<Validator[]>();
+		
+		public Validator[] getValidatorsCached(IProject project) throws ProjectUnavailableError {
+			Validator[] vals = null;
+			if (project == null){
+				vals = _global.get();
+				if (vals == null){				
+					vals = getValidatorsNotCached(project);
+					_global.set(vals);
+				}
+			}
+			else {
+				vals = _cache.get(project);
+				if (vals == null){
+					vals = getValidatorsNotCached(project);
+					_cache.put(project, vals);
+				}
+			}
+			return vals;
+		}
+		
+		public void reset(){
+			_cache.clear();
+			_global.set(null);
+		}
+		
+		public void reset(IProject project){
+			if (project != null)_cache.remove(project);
+		}
+
+	}
+	
+	public enum UseProjectPreferences {Normal, MustUse, MustNotUse}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValMessages.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValMessages.java
new file mode 100644
index 0000000..02aabe1
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValMessages.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.osgi.util.NLS;
+
+public class ValMessages extends NLS {
+	
+	private static final String BUNDLE_NAME = "org.eclipse.wst.validation.internal.messages"; //$NON-NLS-1$
+	   
+	public static String ConfigError;
+	
+	public static String DecodeError1;
+	public static String Error20;
+	
+	public static String ErrConfig;	
+	public static String ErrFilterRule;	  
+	public static String ErrGroupName;
+	public static String ErrDependencyVersion;
+	
+	public static String ErrGroupNoType;
+	public static String ErrGroupInvalidType;
+	
+	public static String ErrPatternAttrib;
+	public static String ErrTypeReq;
+	public static String ErrType;
+	
+	public static String VbfExcSyntaxNoValClass;
+	public static String VbfExcSyntaxNoValRun;
+	public static String VbfExcSyntaxNoValNull;
+	
+	public static String GroupInclude;
+	
+	public static String GroupExclude;
+	
+	public static String JobName;
+	public static String JobNameMonitor;
+	
+	public static String JobIndexSave;
+	
+	public static String LogValStart;
+	public static String LogValEnd;
+	public static String LogValEndTime;
+	public static String LogValSummary;
+	public static String LogValSummary2;
+	public static String LogSession;
+	
+	public static String MigrationJobName;
+	
+	public static String RuleProjectNature;
+	public static String RuleFileExt;
+	public static String RuleFile;
+	public static String RuleFolder;
+	public static String RuleFull;
+	public static String RuleContentType;
+	public static String RuleFacet;
+	
+	public static String ContentTypeExact;
+	public static String ContentTypeNotExact;
+	
+	public static String FileExtWithCase;
+	public static String FileExtWithoutCase;
+
+	public static String SevError;
+	public static String SevWarning;
+	public static String SevIgnore;
+
+	public static String TimeUnder;
+	public static String TimeNano;
+	public static String TimeMicro;
+	public static String TimeSec;
+	public static String TimeMin;
+	
+	public static String TypeInclude;
+	public static String TypeExclude;
+	
+	static {
+		NLS.initializeMessages(BUNDLE_NAME, ValMessages.class);
+	  }
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValOperation.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValOperation.java
new file mode 100644
index 0000000..44c78ec
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValOperation.java
@@ -0,0 +1,205 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.wst.validation.ValidationResult;
+import org.eclipse.wst.validation.ValidationResults;
+import org.eclipse.wst.validation.ValidationState;
+import org.eclipse.wst.validation.Validator;
+
+/**
+ * This represents a validation operation, i.e. the running of a set of validators in response to some change. 
+ * It may be a large operation, as would happen on a clean build, or it may be the validation of just a single
+ * resource.
+ * <p>
+ * The operation can, but doesn't need to, span multiple projects.
+ * </p>
+ * <p>
+ * Once the operation has finished, this object goes away.
+ * </p>     
+ * @author karasiuk
+ *
+ */
+public final class ValOperation {
+	
+	private final ValidationState 	_state = new ValidationState();
+	private final ValidationResult	_result = new ValidationResult();
+	
+	/**
+	 * Each project can have a set of validators that are suspended for the duration of the validation operation.
+	 * The set contains the validator's id.
+	 */
+	private final Map<IProject, Set<String>> _suspended = new HashMap<IProject, Set<String>>(40);
+	
+	/** The time that the operation started. */
+	private final long	_started = System.currentTimeMillis();
+	
+	/** 
+	 * Are we in a multi project validation? That is, could we be validating several
+	 * projects at the same time? This can be triggered by either clean all or 
+	 * if auto build is turned off, a build all. 
+	 */
+	private final boolean	_multiProject;
+	
+	/** 
+	 * Holds all the resources that have been validated as a side-effect of running other validations.
+	 * The key is the validator id and the value is a Set of IResources.
+	 */
+	private final Map<String, Set<IResource>> 	_validated = new HashMap<String, Set<IResource>>(20);
+	
+	public ValOperation(){
+		_multiProject = false;
+	}
+	
+	/**
+	 * 
+	 * @param multiProject Set to true if we could be validating several projects at the same time.
+	 */
+	public ValOperation(boolean multiProject){
+		_multiProject = multiProject;
+	}
+	
+	public ValidationState getState() {
+		return _state;
+	}
+	
+	/**
+	 * Answer a summary of the validation results.
+	 * @return
+	 */
+	public ValidationResultSummary getResult() {
+		synchronized(_result){
+			ValidationResultSummary vrs = new ValidationResultSummary(_result.getSeverityError(), 
+				_result.getSeverityWarning(), _result.getSeverityInfo());
+			return vrs;
+		}
+	}
+		
+	/**
+	 * Answer a copy of the ValidationResult.
+	 * @return
+	 */
+	public ValidationResults getResults(){
+		return new ValidationResults(_result);
+	}
+	
+	/**
+	 * Remember that this resource has already been validated as a side-effect.
+	 *  
+	 * @param id id of the validator
+	 * @param resource resource that has been validated.
+	 */
+	public void addValidated(String id, IResource resource){
+		synchronized(_validated){
+			Set<IResource> set = _validated.get(id);
+			if (set == null){
+				set = new HashSet<IResource>(20);
+				_validated.put(id, set);
+			}
+			set.add(resource);
+		}
+	}
+	
+	/**
+	 * Answer if this resource has already been validated as a side-effect of some other validation by the
+	 * given validator.
+	 * 
+	 * @param id
+	 * @param resource
+	 */
+	public boolean isValidated(String id, IResource resource){
+		synchronized(_validated){
+			Set<IResource> set = _validated.get(id);
+			if (set == null)return false;
+			
+			return set.contains(resource);
+		}
+	}
+
+	/**
+	 * Has this validator been suspended for the duration of this operation on this project?
+	 * 
+	 * @param val
+	 *            The validator that is being checked.
+	 * @param project
+	 *            Can be null, in which case we return false.
+	 * 
+	 * @return true if this validator should not run on this project.
+	 */
+	public boolean isSuspended(Validator val, IProject project) {
+		if (project == null)return false;
+		synchronized(_suspended){
+			Set<String> set = getSuspended(project);		
+			return set.contains(val.getId());
+		}
+	}
+	
+	private Set<String> getSuspended(IProject project){
+		Set<String> set = _suspended.get(project);
+		if (set == null){
+			set = new HashSet<String>(5);
+			_suspended.put(project, set);
+		}
+		return set;
+	}
+
+	void suspendValidation(IProject project, Validator validator) {
+		if (project == null)return;
+		if (validator == null)return;
+		getSuspended(project).add(validator.getId());
+	}
+
+	public long getStarted() {
+		return _started;
+	}
+
+	public boolean isMultiProject() {
+		return _multiProject;
+	}
+
+	/**
+	 * Indicate if the operation was canceled.
+	 * 
+	 * @param canceled
+	 * 		Set to true if it was canceled and false if it was not canceled.
+	 */
+	public void setCanceled(boolean canceled) {
+		synchronized (_result) {
+			_result.setCanceled(canceled);
+		}
+		
+	}
+
+	/**
+	 * Was the operation canceled before it completed? For example if the validation is being run through the
+	 * user interface, the end user can cancel the operation through the progress monitor.
+	 * 
+	 * @return true if the operation was canceled
+	 */
+	public boolean isCanceled() {
+		synchronized (_result) {
+			return _result.isCanceled();
+		}
+	}
+
+	public void mergeResults(ValidationResult vr) {
+		synchronized (_result) {
+			_result.mergeResults(vr);
+		}
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValPrefManagerGlobal.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValPrefManagerGlobal.java
new file mode 100644
index 0000000..5fcbaf3
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValPrefManagerGlobal.java
@@ -0,0 +1,653 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.eclipse.wst.validation.Friend;
+import org.eclipse.wst.validation.MessageSeveritySetting;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.Validator.V2;
+import org.eclipse.wst.validation.internal.model.FilterGroup;
+import org.eclipse.wst.validation.internal.model.GlobalPreferences;
+import org.eclipse.wst.validation.internal.model.GlobalPreferencesValues;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+import org.osgi.service.prefs.BackingStoreException;
+
+/**
+ * A class that knows how to manage the global persisted validation settings.
+ * @author karasiuk
+ */
+public final class ValPrefManagerGlobal {
+	
+	/** 
+	 * Version of the framework properties.
+	 * <ul>
+	 * <li>Version 2 - used the filter approach
+	 * <li>Version 3 - switched to a difference based approach. (See Bugzilla 224179)
+	 * </ul>
+	 * 
+	 */
+	public final static int frameworkVersion = 3;
+	
+	private final Set<IValChangedListener> _listeners = new CopyOnWriteArraySet<IValChangedListener>();
+	
+	private final AtomicReference<List<Validator>> _validators = new AtomicReference<List<Validator>>();
+	
+	private ValPrefManagerGlobal(){}
+	
+	public static ValPrefManagerGlobal getDefault(){
+		return Singleton.valPrefManagerGlobal;
+	}
+	
+	public void addListener(IValChangedListener listener){
+		_listeners.add(listener);
+	}
+	
+	public void removeListener(IValChangedListener listener){
+		_listeners.remove(listener);
+	}
+	
+	private void updateListeners(boolean validationSettingChanged){
+		for (IValChangedListener cl : _listeners)cl.validatorsForProjectChanged(null, validationSettingChanged); 
+	}
+			
+	/**
+	 * Update the validator filters from the preference store.
+	 *  
+	 * @param val
+	 * 
+	 * @return false if there are no preferences, that means that the user has never changed any
+	 * of the default settings. Also answer false if there was some sort of error, which essentially
+	 * means that the preferences aren't valid for whatever reason.   
+	 * 
+	 * @deprecated
+	 */
+//	public boolean loadPreferences(Validator[] val) {
+//	
+//		try {
+//			IEclipsePreferences pref = ValidationFramework.getDefault().getPreferenceStore();
+//			if (!pref.nodeExists(PrefConstants.filters))return false;
+//		
+//			Preferences filters = pref.node(PrefConstants.filters);
+//			for (Validator v : val){
+//				String id = v.getId();
+//				if (filters.nodeExists(id)){
+//					Preferences vp = filters.node(id);
+//					loadPreferences(v, vp);
+//				}
+//			}			
+//		}
+//		catch (Exception e){
+//			ValidationPlugin.getPlugin().handleException(e);
+//			return false;
+//		}
+//		
+//		return true;
+//	}
+	
+	/**
+	 * Answer the v2 validators that have been overridden by the global preferences.
+	 */
+	public List<Validator> getValidators() throws BackingStoreException {
+		List<Validator> vals = _validators.get();
+		while (vals == null){
+			vals = loadValidators();
+			if (!_validators.compareAndSet(null, vals))vals = _validators.get();
+		}
+		return vals;
+	}
+	
+	/**
+	 * Load the validators from the preference store.
+	 * @return the validators that have been overridden by the global references.
+	 */
+	private List<Validator> loadValidators() throws BackingStoreException {
+		LinkedList<Validator> list = new LinkedList<Validator>();
+		PreferencesWrapper pref = PreferencesWrapper.getPreferences(null, null);
+		if (pref.nodeExists(PrefConstants.vals)){
+			PreferencesWrapper vals = pref.node(PrefConstants.vals);
+			for (String id : vals.childrenNames()){
+				Validator base = ExtensionValidators.instance().getMapV2().get(id);
+				Validator v = loadValidator(id, vals, base);
+				if (v != null){
+					V2 v2 = v.asV2Validator();
+					if (v2 != null)v2.setLevel(Validator.Level.Global);					
+					list.add(v);
+				}
+			}
+		}
+		return list;
+	}
+
+	/**
+	 * Answer a copy of the validator that has been updated with the given preferences.
+	 * 
+	 * @param id
+	 *            Validator id.
+	 * @param valsNode
+	 *            The /vals node in the preference store.
+	 * @param base
+	 *            The base validator that is being customized. This can be null,
+	 *            in which case null will be returned.
+	 * 
+	 * @return A new validator that is a copy of the extension point validator
+	 *         with the updates from the preference store.
+	 */
+	static Validator loadValidator(String id, PreferencesWrapper valsNode, Validator base) {
+		if (base == null)return null;
+		
+		PreferencesWrapper vp = valsNode.node(id);
+		base = base.copy();
+		V2 v2 = base.asV2Validator();
+
+		String global = vp.get(PrefConstants.global, ""); //$NON-NLS-1$
+		if (global.length() > 0){
+		Global g = new Global(global);
+			base.setBuildValidation(g.isBuild());
+			base.setManualValidation(g.isManual());
+			base.setDelegatingId(g.getDelegating());
+		}
+		
+		if (v2 != null){
+			String groups = vp.get(PrefConstants.groups, ""); //$NON-NLS-1$
+			if (groups.length() > 0){
+				List<FilterGroup> list = new LinkedList<FilterGroup>();
+				Deserializer des = new Deserializer(groups);
+				while(des.hasNext())list.add(FilterGroup.create(des));
+				v2.setGroups(list);
+			}
+		}					
+		return base;
+	}
+
+	/**
+	 * The only valid way to get the global preferences is through the ValManager.
+	 * 
+	 * @see ValManager#getGlobalPreferences()
+	 */
+	public GlobalPreferences loadGlobalPreferences() {
+		PreferencesWrapper pref = PreferencesWrapper.getPreferences(null, null);
+		GlobalPreferencesValues gp = new GlobalPreferencesValues();
+		gp.saveAutomatically = pref.getBoolean(PrefConstants.saveAuto, GlobalPreferences.DefaultAutoSave);
+		gp.disableAllValidation = pref.getBoolean(PrefConstants.suspend, GlobalPreferences.DefaultSuspend);
+		gp.confirmDialog = pref.getBoolean(PrefConstants.confirmDialog, GlobalPreferences.DefaultConfirm);
+		gp.override = pref.getBoolean(PrefConstants.override, GlobalPreferences.DefaultOverride);
+		gp.version = pref.getInt(PrefConstants.frameworkVersion, GlobalPreferences.DefaultFrameworkVersion);
+		gp.stateTimeStamp = pref.getLong(PrefConstants.stateTS, 0);
+		
+		if (gp.version != frameworkVersion)migrate(gp.version, pref);
+		return new GlobalPreferences(gp);
+	}
+	
+	/**
+	 * If necessary migrate the preferences.
+	 * @param version The incoming version of the preferences.
+	 * @param pref the root of the preference store
+	 */
+	static void migrate(int version, PreferencesWrapper pref) {
+		try {
+			boolean update = false;
+			if (version == 2){
+				if (pref.nodeExists(PrefConstants.filters)){
+					pref.node(PrefConstants.filters).removeNode();
+					update = true;
+				}
+				if (pref.nodeExists(PrefConstants.msgs)){
+					pref.node(PrefConstants.msgs).removeNode();
+					update = true;
+				}
+			}
+			if (update){
+				pref.putInt(PrefConstants.frameworkVersion, frameworkVersion);
+				pref.flush();
+			}
+		}
+		catch (BackingStoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}		
+	}
+
+	/**
+	 * Load the preferences for a validator.
+	 * 
+	 * @param v the validator that is being built up
+	 * @param p the node in the preference tree for the validator, 
+	 * 	e.g. /instance/validator-framework-id/filters/validator-id
+	 * 
+	 * @deprecated
+	 */
+//	static void loadPreferences(Validator v, Preferences p) throws BackingStoreException {
+//		v.setBuildValidation(p.getBoolean(PrefConstants.build, true));
+//		v.setManualValidation(p.getBoolean(PrefConstants.manual, true));
+//		v.setVersion(p.getInt(PrefConstants.version, 1));
+//		v.setDelegatingId(p.get(PrefConstants.delegate, null));
+//		
+//		Validator.V2 v2 = v.asV2Validator();
+//		if (v2 == null)return;
+//		if (!p.nodeExists(PrefConstants.groups))return;
+//		
+//		Preferences groupNode = p.node(PrefConstants.groups);
+//		for (String groupName : groupNode.childrenNames()){
+//			Preferences group = groupNode.node(groupName);
+//			String type = group.get(PrefConstants.type, null);
+//			if (type == null)throw new IllegalStateException(ValMessages.ErrGroupNoType);
+//			FilterGroup fg = FilterGroup.create(type);
+//			if (fg == null)throw new IllegalStateException(NLS.bind(ValMessages.ErrGroupInvalidType, type));
+//			v2.add(fg);
+//			
+//			if (group.nodeExists(PrefConstants.rules)){
+//				Preferences ruleNode = group.node(PrefConstants.rules);
+//				for (String ruleName : ruleNode.childrenNames()){
+//					Preferences rule = ruleNode.node(ruleName);
+//					FilterRule fr = FilterRule.create(rule.get(PrefConstants.ruleType, null));
+//					if (fr != null){
+//						fr.load(rule);
+//						fg.add(fr);
+//					}
+//				}
+//			}
+//		}		
+//	}
+	
+	/**
+	 * Save the validator into the preference store.
+	 * 
+	 * @param validator
+	 *            The validator being saved.
+	 * 
+	 * @param root
+	 *            The top of the preference tree for validators, i.e.
+	 *            /instance/validator-framework-id/vals for workspace validators
+	 *            and /vals for project validators.
+	 *            
+	 * @param baseValidators
+	 *            A map of the validators that are one level higher in the
+	 *            storage hierarchy. So if we are updating the preference page
+	 *            validators, then this map would be the extension point
+	 *            validators. If we are updating a project's validators, then
+	 *            this map would be the preference page validators.
+	 */
+	static void save(Validator validator, PreferencesWrapper root, Map<String, Validator> baseValidators) throws BackingStoreException {
+		Validator.V2 v2 = validator.asV2Validator();
+		if (v2 == null)return;
+		
+		final String id = validator.getId();
+		boolean hasNode = root.nodeExists(id);
+		
+		if (validator.sameConfig(baseValidators.get(id))){
+			if (hasNode){
+				PreferencesWrapper vp = root.node(id);
+				vp.removeNode();
+			}
+			return;
+		}
+		if (!validator.isChanged())return;
+		PreferencesWrapper vp = root.node(id);
+		if (validator.hasGlobalChanges()){
+			Global g = new Global(validator.isManualValidation(), validator.isBuildValidation(), validator.getVersion(),
+				validator.getDelegatingId());
+			vp.put(PrefConstants.global, g.serialize());
+			Friend.setMigrated(validator, false);
+		}
+		
+		if (validator.getChangeCountMessages() > 0){
+			Collection<MessageSeveritySetting> msgs = validator.getMessageSettings().values();
+			if (msgs.size() > 0){
+				vp.put(PrefConstants.msgs, Msgs.serialize(msgs));
+			}
+		}
+		
+		if (v2.getChangeCountGroups() > 0){
+			FilterGroup[] groups = v2.getGroups();
+			if (groups.length > 0){
+				Serializer ser = new Serializer(500);
+				for (FilterGroup group : groups)group.save(ser);
+				vp.put(PrefConstants.groups, ser.toString());
+			}
+		}
+	}
+	/**
+	 * Save the validator into the preference store.
+	 * 
+	 * @param validator
+	 *            The validator being saved.
+	 * 
+	 * @param root
+	 *            The top of the preference tree for validators, i.e.
+	 *            /instance/validator-framework-id/vals for workspace validators
+	 *            and /vals for project validators.
+	 *            
+	 * @param baseValidators
+	 *            A map of the validators that are one level higher in the
+	 *            storage hierarchy. So if we are updating the preference page
+	 *            validators, then this map would be the extension point
+	 *            validators. If we are updating a project's validators, then
+	 *            this map would be the preference page validators.
+	 */
+	static void save(ValidatorMutable validator, PreferencesWrapper root, Map<String, Validator> baseValidators) throws BackingStoreException {
+		if (!validator.isV2Validator())return;
+		
+		PreferencesWrapper vp = root.node(validator.getId());
+		if (validator.sameConfig(baseValidators.get(validator.getId()))){
+			vp.removeNode();
+			return;
+		}
+		if (!validator.isChanged())return;
+		if (validator.hasGlobalChanges()){
+			Global g = new Global(validator.isManualValidation(), validator.isBuildValidation(), validator.getVersion(),
+				validator.getDelegatingId());
+			vp.put(PrefConstants.global, g.serialize());
+//			Friend.setMigrated(validator, false);
+		}
+				
+		if (validator.getChangeCountGroups() > 0){
+			FilterGroup[] groups = validator.getGroups();
+			if (groups.length > 0){
+				Serializer ser = new Serializer(500);
+				for (FilterGroup group : groups)group.save(ser);
+				vp.put(PrefConstants.groups, ser.toString());
+			}
+		}
+	}
+	
+	public void saveAsPrefs(Validator[] val) {
+		try {
+			PreferencesWrapper pref = PreferencesWrapper.getPreferences(null, null);
+			PreferencesWrapper vals = pref.node(PrefConstants.vals);
+			Map<String, Validator> base = ExtensionValidators.instance().getMapV2();
+			for (Validator v : val)save(v, vals, base);
+			pref.flush();
+			_validators.set(null);
+			updateListeners(true);
+		}
+		catch (BackingStoreException e){
+			throw new RuntimeException(e);
+		}
+	}
+
+	
+	/**
+	 * Save the global preferences and the validators.
+	 */
+	public synchronized void savePreferences(GlobalPreferences gp, Validator[] validators){
+		try {
+			PreferencesWrapper prefs = PreferencesWrapper.getPreferences(null, null);
+			savePreferences(prefs, gp);
+			PreferencesWrapper vals = prefs.node(PrefConstants.vals);
+
+			Map<String, Validator> base = ExtensionValidators.instance().getMapV2();
+			for (Validator v : validators)save(v, vals, base);
+			prefs.flush();
+			_validators.set(null);
+			updateListeners(true);
+		}
+		catch (BackingStoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+	}
+	
+	/**
+	 * Save the global preferences and the validators.
+	 */
+	public synchronized void savePreferences(GlobalPreferences gp, ValidatorMutable[] validators, Boolean persist){
+		try {
+			PreferencesWrapper prefs = PreferencesWrapper.getPreferences(null, persist);
+			savePreferences(prefs, gp);
+			PreferencesWrapper vals = prefs.node(PrefConstants.vals);
+			Map<String, Validator> base = ExtensionValidators.instance().getMapV2();
+			for (ValidatorMutable v : validators)save(v, vals, base);
+
+			prefs.flush();
+			_validators.set(null);
+			updateListeners(true);
+		}
+		catch (BackingStoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+	}
+		
+	/**
+	 * Save the V1 preferences, so that the old validators continue to work.
+	 */
+	public static void saveV1Preferences(ValidatorMutable[] validators, Boolean persistent){
+		try {
+			GlobalConfiguration gc = ConfigurationManager.getManager().getGlobalConfiguration();
+			gc.setEnabledManualValidators(getEnabledManualValidators(validators));				
+			gc.setEnabledBuildValidators(getEnabledBuildValidators(validators));
+
+			gc.passivate();
+			gc.store(persistent);
+		}
+		catch (InvocationTargetException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}			
+	}
+
+	/**
+	 * Answer all the V1 validators that are manually enabled.
+	 * @return
+	 */
+	private static ValidatorMetaData[] getEnabledManualValidators(ValidatorMutable[] validators) {
+		List<ValidatorMetaData> list = new LinkedList<ValidatorMetaData>();
+		for (ValidatorMutable v : validators){
+			if (v.isManualValidation() && v.isV1Validator())list.add(v.getVmd());
+		}
+		ValidatorMetaData[] result = new ValidatorMetaData[list.size()];
+		list.toArray(result);
+		return result;
+	}
+
+	/**
+	 * Answer all the V1 validators that are enabled for build.
+	 * @return
+	 */
+	private static ValidatorMetaData[] getEnabledBuildValidators(ValidatorMutable[] validators) {
+		List<ValidatorMetaData> list = new LinkedList<ValidatorMetaData>();
+		for (ValidatorMutable v : validators){
+			if (v.isBuildValidation() && v.isV1Validator())list.add(v.getVmd());
+		}
+		ValidatorMetaData[] result = new ValidatorMetaData[list.size()];
+		list.toArray(result);
+		return result;
+	}
+
+	
+	/**
+	 * Save the global preferences and the validators.
+	 */
+	public synchronized void savePreferences(){
+		try {
+			GlobalPreferences gp = ValManager.getDefault().getGlobalPreferences();
+			PreferencesWrapper prefs = PreferencesWrapper.getPreferences(null, null);
+			savePreferences(prefs, gp);
+			prefs.flush();
+			updateListeners(true);
+		}
+		catch (BackingStoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+	}
+	
+	/**
+	 * Save the global preferences and the validators.
+	 */
+	private void savePreferences(PreferencesWrapper prefs, GlobalPreferences gp){
+		prefs.putBoolean(PrefConstants.saveAuto, gp.getSaveAutomatically());
+		prefs.putBoolean(PrefConstants.suspend, gp.getDisableAllValidation());
+		prefs.putLong(PrefConstants.stateTS, gp.getStateTimeStamp());
+		prefs.putBoolean(PrefConstants.confirmDialog, gp.getConfirmDialog());
+		prefs.putBoolean(PrefConstants.override, gp.getOverride());
+		prefs.putInt(PrefConstants.frameworkVersion, ValPrefManagerGlobal.frameworkVersion);
+	}
+
+	/**
+	 * Update any message preferences in the map.
+	 * @param validator
+	 * @param settings
+	 */
+	public void loadMessages(Validator validator, Map<String, MessageSeveritySetting> settings) {
+		PreferencesWrapper pref = PreferencesWrapper.getPreferences(null, null);
+		try {
+			loadMessageSettings(validator, settings, pref);
+		}
+		catch (BackingStoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+	}
+		
+	/**
+	 * Load the message preferences for the validator into the map.
+	 * 
+	 * @param val
+	 * @param settings
+	 * @param root the root of the preference store
+	 */
+	static void loadMessageSettings(Validator val, Map<String, MessageSeveritySetting> settings, PreferencesWrapper root) 
+		throws BackingStoreException {
+		if (!root.nodeExists(PrefConstants.vals))return;
+		
+		PreferencesWrapper vals = root.node(PrefConstants.vals); 
+		if (!vals.nodeExists(val.getId()))return;
+		
+		PreferencesWrapper valPrefs = vals.node(val.getId());
+		String msgs = valPrefs.get(PrefConstants.msgs, ""); //$NON-NLS-1$
+		if (msgs.length() == 0)return;
+		
+		Map<String, MessageSeveritySetting.Severity> map = Msgs.deserialize(msgs);
+		
+		for (Map.Entry<String, MessageSeveritySetting.Severity> me : map.entrySet()){
+			MessageSeveritySetting ms = settings.get(me.getKey());
+			if (ms != null)ms.setCurrent(me.getValue());
+		}		
+	}
+
+	/**
+	 * Save whether the validator is enabled or not. 
+	 * @param validator
+	 * @param prefs up to the filter part of the preference tree
+	 */
+//	private void saveShallowPreference(Validator validator, Preferences prefs) {
+//		if (validator.asV2Validator() == null)return;
+//		Preferences val = prefs.node(validator.getId());
+//		val.putBoolean(PrefConstants.build, validator.isBuildValidation());
+//		val.putBoolean(PrefConstants.manual, validator.isManualValidation());
+//		val.putInt(PrefConstants.version, validator.getVersion());
+//	}
+	
+//	/**
+//	 * Load the customized message settings from the preference store.
+//	 * @param messageSettings
+//	 */
+//	public void loadMessageSettings(Validator val, MessageCategory[] messageSettings) {
+//		try {
+//			loadMessageSettings(val, messageSettings, ValidationFramework.getDefault().getPreferenceStore());
+//		}
+//		catch (Exception e){
+//			ValidationPlugin.getPlugin().handleException(e);
+//		}
+//	}
+	
+	private final static class Global {
+		private final boolean 	_manual;
+		private final boolean 	_build;
+		private final int		_version;
+		private final String	_delegating;
+		
+		public Global(String value){
+			Deserializer d = new Deserializer(value);
+			_manual = d.getBoolean();
+			_build = d.getBoolean();
+			_version = d.getInt();
+			_delegating = d.hasNext() ? d.getString() : null;
+		}
+		
+		public Global(boolean manual, boolean build, int version, String delegating){
+			_manual = manual;
+			_build = build;
+			_version = version;
+			_delegating = delegating;
+		}
+		
+		public String serialize(){
+			Serializer s = new Serializer(50);
+			s.put(_manual);
+			s.put(_build);
+			s.put(_version);
+			if (_delegating != null)s.put(_delegating);
+			return s.toString();
+		}
+
+		public boolean isManual() {
+			return _manual;
+		}
+
+		public boolean isBuild() {
+			return _build;
+		}
+
+		public int getVersion() {
+			return _version;
+		}
+
+		public String getDelegating() {
+			return _delegating;
+		}
+	}
+	
+	private final static class Msgs {
+		public static String serialize(Collection<MessageSeveritySetting> messages){
+			Serializer s = new Serializer(100);
+			for (MessageSeveritySetting ms : messages){
+				s.put(ms.getId());
+				s.put(ms.getCurrent().ordinal());
+			}
+			return s.toString();	
+		}
+		
+		/**
+		 * Answer a map for all the messages.
+		 * The key is the message id and the value is the current setting for that message
+		 * @param v
+		 * @return
+		 */
+		public static Map<String, MessageSeveritySetting.Severity> deserialize(String v){
+			Map<String, MessageSeveritySetting.Severity> map = new HashMap<String, MessageSeveritySetting.Severity>(10);
+			Deserializer d = new Deserializer(v);
+			while(d.hasNext()){
+				String id = d.getString();
+				int sev = d.getInt();
+				map.put(id, MessageSeveritySetting.Severity.values()[sev]);
+			}
+			return map;
+		}
+	}
+	
+	/**
+	 * Store the singleton for the ValPrefManagerGlobal. This approach is used to avoid having to synchronize the
+	 * ValPrefManagerGlobal.getDefault() method.
+	 * 
+	 * @author karasiuk
+	 *
+	 */
+	private final static class Singleton {
+		final static ValPrefManagerGlobal valPrefManagerGlobal = new ValPrefManagerGlobal();
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValPrefManagerProject.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValPrefManagerProject.java
new file mode 100644
index 0000000..c28b031
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValPrefManagerProject.java
@@ -0,0 +1,388 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.wst.validation.Friend;
+import org.eclipse.wst.validation.IMutableValidator;
+import org.eclipse.wst.validation.MessageSeveritySetting;
+import org.eclipse.wst.validation.MutableProjectSettings;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.Validator.V2;
+import org.eclipse.wst.validation.internal.model.ProjectPreferences;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+import org.osgi.service.prefs.BackingStoreException;
+
+/**
+ * A class that knows how to manage the project level persisted validation settings.
+ * @author karasiuk
+ *
+ */
+public final class ValPrefManagerProject {
+	
+	private final IProject	_project;
+	private final static List<IValChangedListener> _listeners = new LinkedList<IValChangedListener>();
+	
+	/**
+	 * The validators that are in the project preference file, but have
+	 * only been configured to the global preference level. That is they have not had
+	 * any project level customizations applied yet.
+	 */
+	private List<Validator> _validators;
+	
+	public ValPrefManagerProject(IProject project){
+		assert project != null;
+		_project = project;
+	}
+	
+	public static void addListener(IValChangedListener listener){
+		if (_listeners.contains(listener))return;
+		_listeners.add(listener);
+	}
+	
+	public static void removeListener(IValChangedListener listener){
+		_listeners.remove(listener);
+	}
+	
+	private static void updateListeners(IProject project){
+		for (IValChangedListener cl : _listeners)cl.validatorsForProjectChanged(project, true); 
+	}
+
+	
+	/**
+	 * Answer whether or not this project has validation settings.
+	 *   
+	 * @return true if it has settings. This does not mean that the settings are enabled, only that it
+	 * has settings.
+	 * 
+	 * @deprecated
+	 */
+	public boolean hasProjectSpecificSettings(){
+		PreferencesWrapper pref = getPreferences(null);
+		
+		if (pref == null)return false;
+		return true;
+	}
+	
+	/**
+	 * Answer the v2 validators that have been overridden by the project
+	 * preferences. The validators will not have the preference store's
+	 * customizations applied yet. The purpose of this method, is to identify the subset of validators 
+	 * that may later be configured.
+	 * 
+	 * @param baseValidators
+	 *            V2 validators from the extension points, and customized by any
+	 *            global preferences.
+	 */
+	public List<Validator> getValidators(Map<String, Validator> baseValidators) throws BackingStoreException {
+		List<Validator> vals = _validators;
+		if (vals == null){
+			vals = loadValidators(baseValidators);
+			_validators = vals;
+		}
+		return vals;
+	}
+	
+	/**
+	 * Load the validators from the preference store. The validators will not have the preference store's
+	 * customizations applied yet. The purpose of this method, is to identify the subset of validators 
+	 * that may later be configured.
+	 * 
+	 * @param baseValidators
+	 *            V2 validators from the extension points, and customized by any
+	 *            global preferences.
+	 * @return the validators that are in the project preference file, but have
+	 *         only been configured to the global preference level. That is they have not had
+	 *         any project level customizations applied yet.
+	 */
+	private List<Validator> loadValidators(Map<String, Validator> baseValidators) throws BackingStoreException {
+		List<Validator> list = new LinkedList<Validator>();
+		PreferencesWrapper pref = getPreferences(null);
+		if (pref.nodeExists(PrefConstants.vals)){
+			PreferencesWrapper vals = pref.node(PrefConstants.vals);
+			for (String id : vals.childrenNames()){
+				Validator base = baseValidators.get(id);
+				Validator v = ValPrefManagerGlobal.loadValidator(id, vals, base);
+				if (v != null){
+					V2 v2 = v.asV2Validator();
+					if (v2 != null)v2.setLevel(Validator.Level.Project);					
+					list.add(v);
+				}
+			}
+		}
+		return list;
+	}
+		
+	/**
+	 * Answer the setting of the getOverride field.
+	 */
+	public boolean getOverride(){
+		PreferencesWrapper pref = getPreferences(null);
+		
+		if (!pref.nodeExists())return ProjectPreferences.DefaultOverride;
+		
+		int version = pref.getInt(PrefConstants.frameworkVersion, 0);
+		if (version == 0){
+			try {
+				ProjectConfiguration pc = ConfigurationManager.getManager().getProjectConfiguration(_project);
+				return pc.getDoesProjectOverride();
+			}
+			catch (InvocationTargetException e){
+				// eat it, if it fails we just go with the defaults
+			}
+		}
+		return pref.getBoolean(PrefConstants.override, ProjectPreferences.DefaultOverride);
+	}
+
+	private ProjectPreferences migrateFromBeforeWTP30(IProject project, Map<String, Validator> baseValidators) {
+		try {
+			ProjectConfiguration pc = ConfigurationManager.getManager().getProjectConfiguration(project);
+			
+			List<Validator> list = migrateFromBeforeWTP30(baseValidators, pc);
+			Validator[] vals = new Validator[list.size()];
+			list.toArray(vals);
+			return new ProjectPreferences(project, pc.getDoesProjectOverride(), pc.isDisableAllValidation(), vals);
+		}
+		catch (InvocationTargetException e){
+			// eat it, if it fails we just go with the defaults
+		}
+		return new ProjectPreferences(project);
+	}
+
+	private List<Validator> migrateFromBeforeWTP30(Map<String, Validator> baseValidators, ProjectConfiguration pc)
+			throws InvocationTargetException {
+				
+		Set<String> build = pc.getEnabledBuildlValidators();
+		Set<String> manual = pc.getEnabledManualValidators();
+		
+		List<Validator> list = new LinkedList<Validator>();
+		for (Validator v : baseValidators.values()){
+			V2 v2 = v.asV2Validator();
+			if (v2 != null){
+				boolean isBuild = build == null || build.contains(v2.getValidatorClassname());
+				boolean isManual = manual == null || manual.contains(v2.getValidatorClassname());
+				if ((v.isBuildValidation() != isBuild) || (v.isManualValidation() != isManual)){
+					V2 copy = v2.copy().asV2Validator();
+					copy.setBuildValidation(isBuild);
+					copy.setManualValidation(isManual);
+					copy.setLevel(Validator.Level.Project);
+					Friend.setMigrated(copy, true);
+					list.add(copy);
+				}
+			}
+		}
+		return list;
+	}
+	
+	
+	/**
+	 * Answer the project preferences from the preference store.
+	 * @return null if the project does not have any specific preferences.
+	 */
+	public ProjectPreferences loadProjectPreferences(IProject project, Map<String, Validator> baseValidators) 
+		throws BackingStoreException {
+		
+		PreferencesWrapper pref = getPreferences(null);
+
+		if (pref == null)return null;
+		int version = pref.getInt(PrefConstants.frameworkVersion, 0);
+		if (version == 0){
+			// This means that we have a project that is before WTP 3.0
+			return migrateFromBeforeWTP30(project, baseValidators);
+		}
+		
+		if (version != ValPrefManagerGlobal.frameworkVersion)ValPrefManagerGlobal.migrate(version, pref);
+
+		if (!pref.nodeExists(PrefConstants.vals)){
+			return new ProjectPreferences(project, pref.getBoolean(PrefConstants.override, ProjectPreferences.DefaultOverride),
+				pref.getBoolean(PrefConstants.suspend, ProjectPreferences.DefaultSuspend), new Validator[0]);
+		}
+		
+		PreferencesWrapper vp = pref.node(PrefConstants.vals);
+		List<Validator> list = new LinkedList<Validator>();
+		for (String id : vp.childrenNames()){
+			Validator base = baseValidators.get(id);
+			Validator v = ValPrefManagerGlobal.loadValidator(id, vp, base);
+			if (v != null){
+				V2 v2 = v.asV2Validator();
+				if (v2 != null)v2.setLevel(Validator.Level.Project);
+				list.add(v);
+			}
+		}
+		Validator[] vals = new Validator[list.size()];
+		list.toArray(vals);
+		return new ProjectPreferences(project, pref.getBoolean(PrefConstants.override, ProjectPreferences.DefaultOverride),
+			pref.getBoolean(PrefConstants.suspend, ProjectPreferences.DefaultSuspend), vals);
+	}
+
+	private PreferencesWrapper getPreferences(Boolean persist) {
+		return PreferencesWrapper.getPreferences(_project, persist);
+	}
+
+	public void savePreferences(ProjectPreferences projectPreferences) {
+		Validator[] validators = projectPreferences.getValidators();
+		PreferencesWrapper pref = getPreferences(null);
+		pref.putBoolean(PrefConstants.suspend, projectPreferences.getSuspend());
+		pref.putBoolean(PrefConstants.override, projectPreferences.getOverride());
+		pref.putInt(PrefConstants.frameworkVersion, ValPrefManagerGlobal.frameworkVersion);
+		PreferencesWrapper vals = pref.node(PrefConstants.vals);
+		try {
+			Validator[] workspaceVals = ValManager.getDefault().getValidators();
+			Map<String, Validator> base = new HashMap<String, Validator>(workspaceVals.length);
+			for (Validator v : workspaceVals)base.put(v.getId(), v);
+			for (Validator v : validators)ValPrefManagerGlobal.save(v, vals, base);
+			pref.flush();
+			ProjectConfiguration pc = ConfigurationManager.getManager()
+				.getProjectConfiguration(projectPreferences.getProject());
+			pc.setEnabledBuildValidators(getEnabledBuildValidators(validators));
+			pc.setEnabledManualValidators(getEnabledManualValidators(validators));
+			pc.passivate();
+			pc.store();
+			updateListeners(_project);
+		}
+		catch (Exception e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}		
+	}
+
+	public void savePreferences(ProjectPreferences projectPreferences, ValidatorMutable[] validators) {
+		PreferencesWrapper pref = getPreferences(null);
+		pref.putBoolean(PrefConstants.suspend, projectPreferences.getSuspend());
+		pref.putBoolean(PrefConstants.override, projectPreferences.getOverride());
+		pref.putInt(PrefConstants.frameworkVersion, ValPrefManagerGlobal.frameworkVersion);
+		try {
+			savePreferences(validators, false, null);
+			pref.flush();
+			updateListeners(_project);
+		}
+		catch (Exception e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}		
+	}
+	
+	public void savePreferences(MutableProjectSettings settings, Boolean persist){
+		IProject project = settings.getProject();
+		PreferencesWrapper pref = PreferencesWrapper.getPreferences(project, persist);
+		pref.putBoolean(PrefConstants.suspend, settings.getSuspend());
+		pref.putBoolean(PrefConstants.override, settings.getOverride());
+		pref.putInt(PrefConstants.frameworkVersion, ValPrefManagerGlobal.frameworkVersion);
+		
+		IMutableValidator[] vms = settings.getValidators();
+		ValidatorMutable[] validators = new ValidatorMutable[vms.length];
+		for (int i=0; i<vms.length;i++)validators[i] = (ValidatorMutable)vms[i];
+		
+		try {
+			savePreferences(validators, false, persist);
+			pref.flush();
+			updateListeners(project);
+		}
+		catch (Exception e){
+			if (project.isAccessible())ValidationPlugin.getPlugin().handleException(e);
+		}
+	}
+	
+	public void savePreferences(ValidatorMutable[] validators, boolean flush, Boolean persist){
+		PreferencesWrapper pref = getPreferences(persist);
+		pref.putInt(PrefConstants.frameworkVersion, ValPrefManagerGlobal.frameworkVersion);
+		PreferencesWrapper vals = pref.node(PrefConstants.vals);
+		try {
+			Validator[] workspaceVals = ValManager.getDefault().getValidators();
+			Map<String, Validator> base = new HashMap<String, Validator>(workspaceVals.length);
+			for (Validator v : workspaceVals)base.put(v.getId(), v);
+			for (ValidatorMutable v : validators)ValPrefManagerGlobal.save(v, vals, base);
+			ProjectConfiguration pc = ConfigurationManager.getManager().getProjectConfiguration(_project);
+			pc.setEnabledBuildValidators(getEnabledBuildValidators(validators));
+			pc.setEnabledManualValidators(getEnabledManualValidators(validators));
+			pc.passivate();
+			pc.store();
+			if (flush){
+				pref.flush();
+				updateListeners(_project);
+			}
+		}
+		catch (Exception e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}		
+		
+	}
+	
+	/**
+	 * Answer all the V1 validators that are enabled for build.
+	 * @return
+	 */
+	private Set<ValidatorMetaData> getEnabledBuildValidators(Validator[] validators) {
+		Set<ValidatorMetaData> set = new HashSet<ValidatorMetaData>(50);
+		for (Validator v : validators){
+			if (v.isBuildValidation()){
+				Validator.V1 v1 = v.asV1Validator();
+				if (v1 != null)set.add(v1.getVmd());
+			}
+		}
+		return set;
+	}
+	
+	/**
+	 * Answer all the V1 validators that are enabled for build.
+	 * @return
+	 */
+	private Set<ValidatorMetaData> getEnabledBuildValidators(ValidatorMutable[] validators) {
+		Set<ValidatorMetaData> set = new HashSet<ValidatorMetaData>(50);
+		for (ValidatorMutable v : validators){
+			if (v.isBuildValidation() && v.isV1Validator())set.add(v.getVmd());
+		}
+		return set;
+	}
+	
+	/**
+	 * Answer all the V1 validators that are enabled for manual validation.
+	 * @return
+	 */
+	private Set<ValidatorMetaData> getEnabledManualValidators(Validator[] validators) {
+		Set<ValidatorMetaData> set = new HashSet<ValidatorMetaData>(50);
+		for (Validator v : validators){
+			if (v.isManualValidation()){
+				Validator.V1 v1 = v.asV1Validator();
+				if (v1 != null)set.add(v1.getVmd());
+			}
+		}
+		return set;
+	}
+	
+	/**
+	 * Answer all the V1 validators that are enabled for manual validation.
+	 * @return
+	 */
+	private Set<ValidatorMetaData> getEnabledManualValidators(ValidatorMutable[] validators) {
+		Set<ValidatorMetaData> set = new HashSet<ValidatorMetaData>(50);
+		for (ValidatorMutable v : validators){
+			if (v.isManualValidation() && v.isV1Validator())set.add(v.getVmd());
+		}
+		return set;
+	}
+	
+	public void loadMessages(Validator validator, Map<String, MessageSeveritySetting> settings) {
+		try {
+			ValPrefManagerGlobal.loadMessageSettings(validator, settings, getPreferences(null));
+		}
+		catch (BackingStoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}		
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValProperty.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValProperty.java
new file mode 100644
index 0000000..fd001dc
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValProperty.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.BitSet;
+
+/**
+ * A resource session property, that is used to improve the performance of the validation framework. This is placed
+ * on each resource and it enables the framework to quickly determine if the resource needs to be processed.
+ * @author karasiuk
+ *
+ */
+public class ValProperty {
+/*
+ * I did some performance measurements on the IResource#setSessionProperty() and IResource#getSessionProperty()
+ * methods, and they were very fast. I used a very large workspace (over 17,000) resources, and you could set (or get)
+ * a property on all the resources in under 100ms. 
+ */
+	
+	private int 	_configNumber;
+	private BitSet	_configSet = new BitSet(100);
+	
+	private int		_validationNumber;
+	private BitSet	_validationSet = new BitSet(100);
+	
+	public int getConfigNumber() {
+		return _configNumber;
+	}
+	public void setConfigNumber(int configNumber) {
+		_configNumber = configNumber;
+	}
+	public BitSet getConfigSet() {
+		return _configSet;
+	}
+	public int getValidationNumber() {
+		return _validationNumber;
+	}
+	public void setValidationNumber(int validationNumber) {
+		_validationNumber = validationNumber;
+	}
+	public BitSet getValidationSet() {
+		return _validationSet;
+	}
+	
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValType.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValType.java
new file mode 100644
index 0000000..8a97136
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValType.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+/**
+ * Type of validation. Build or Manual?
+ * @author karasiuk
+ *
+ */
+public enum ValType {
+	/** The validation is triggered via a resource change and the build process. */
+	Build, 
+	
+	/** The user manually requested the validation. */
+	Manual,
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidationResultSummary.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidationResultSummary.java
new file mode 100644
index 0000000..9e91217
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidationResultSummary.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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;
+
+/**
+ * An immutable object that holds a summary of the validation.
+ * @author karasiuk
+ *
+ */
+public final class ValidationResultSummary {
+	
+	private final int 	_error;
+	private final int 	_warning;
+	private final int	_info;
+	
+	public ValidationResultSummary(int error, int warning, int info){
+		_error = error;
+		_warning = warning;
+		_info = info;
+	}
+
+	public int getSeverityError() {
+		return _error;
+	}
+
+	public int getSeverityWarning() {
+		return _warning;
+	}
+
+	public int getSeverityInfo() {
+		return _info;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidationRunner.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidationRunner.java
new file mode 100644
index 0000000..01bf297
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidationRunner.java
@@ -0,0 +1,151 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+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.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.internal.model.IValidatorVisitor;
+
+/**
+ * Run the validators on a selected set of resources.
+ * <p>
+ * This is used to run manual validations (i.e. the user selects the Validate menu item), 
+ * or it is invoked programmatically by a third party through the ValidationFramework API.
+ * It is not used for the build based invocation.
+ * </p> 
+ * @author karasiuk
+ *
+ */
+public final class ValidationRunner implements IWorkspaceRunnable {
+	
+	private Map<IProject, Set<IResource>>		_projects;
+	private	ValType			_valType;
+	private ValOperation	_valOperation;
+	
+	/**
+	 * Validate the selected projects and/or resources.
+	 * 
+	 * @param projects
+	 *            The selected projects. The key is an IProject and the value is
+	 *            the Set of IResources that were selected. Often this will be
+	 *            every resource in the project.
+	 * 
+	 * @param valType
+	 *            The type of validation that has been requested.
+	 * 
+	 * @param monitor
+	 *            Progress monitor.
+	 * 
+	 * @param atomic
+	 *            Run as an atomic workspace operation?
+	 */
+	public static ValOperation validate(Map<IProject, Set<IResource>> projects, ValType valType, 
+		IProgressMonitor monitor, boolean atomic) throws CoreException{
+		ValidationRunner me = new ValidationRunner(projects, valType);
+		if (atomic)ResourcesPlugin.getWorkspace().run(me, null, IWorkspace.AVOID_UPDATE, monitor);
+		else me.execute(monitor);
+		return me._valOperation;
+	}
+	
+	/**
+	 * Validate the selected file. This is a convenience method, it simply calls the more flexible 
+	 * validate with Map method. 
+	 * 
+	 * @param file
+	 *            The file to be validated.
+	 * 
+	 * @param valType
+	 *            The type of validation that has been requested.
+	 * 
+	 * @param monitor
+	 *            Progress monitor.
+	 * 
+	 * @param atomic
+	 *            Run as an atomic workspace operation?
+	 */
+	public static ValOperation validate(IFile file, ValType valType, IProgressMonitor monitor, boolean atomic) throws CoreException{
+	    final Map<IProject, Set<IResource>> map = new HashMap<IProject, Set<IResource>>(1);
+	      
+	    Set<IResource> set = new HashSet<IResource>(1);
+	    set.add(file);
+	    map.put(file.getProject(), set);
+	    return validate(map, valType, monitor, atomic);		
+	}
+	
+	private ValidationRunner(Map<IProject, Set<IResource>> projects, ValType valType){
+		_projects = projects;
+		_valType = valType;
+		
+	}
+	
+	private ValOperation execute(IProgressMonitor monitor){
+		_valOperation = new ValOperation();
+		ValManager manager = ValManager.getDefault();
+		
+		IValidatorVisitor startingVisitor = new IValidatorVisitor(){
+			public void visit(Validator validator, IProject project, ValType valType,
+				ValOperation operation, IProgressMonitor monitor) {
+				validator.validationStarting(project, operation.getState(), monitor);
+			}			
+		};
+		
+		IValidatorVisitor finishedVisitor = new IValidatorVisitor(){
+
+			public void visit(Validator validator, IProject project, ValType valType,
+				ValOperation operation, IProgressMonitor monitor) {
+
+				validator.validationFinishing(project, operation.getState(), monitor);				
+			}			
+		};
+		
+		manager.accept(startingVisitor, null, _valType, _valOperation, monitor);
+				
+		for (Map.Entry<IProject, Set<IResource>> me : _projects.entrySet()){
+			if (monitor.isCanceled()){
+				_valOperation.setCanceled(true);
+				return _valOperation;
+			}
+			IProject project = me.getKey();
+			manager.accept(startingVisitor, project, _valType, _valOperation, monitor);
+			for (IResource resource : me.getValue()){
+				try {
+					manager.validate(project, resource, IResourceDelta.NO_CHANGE, _valType, 
+							IncrementalProjectBuilder.AUTO_BUILD, _valOperation, monitor);
+				}
+				catch (ResourceUnavailableError error){
+					// if the resource is no longer available, we can't validate it, so we should just move on. 
+				}
+			}
+			manager.accept(finishedVisitor, project, _valType, _valOperation, monitor);
+		}
+		manager.accept(finishedVisitor, null, _valType, _valOperation, monitor);
+		return _valOperation;
+	}
+
+	public void run(IProgressMonitor monitor) throws CoreException {
+		execute(monitor);		
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidatorExtensionReader.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidatorExtensionReader.java
new file mode 100644
index 0000000..c897cfc
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidatorExtensionReader.java
@@ -0,0 +1,374 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.Collection;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+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.IContributor;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.validation.MessageSeveritySetting;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.Validator.V2;
+import org.eclipse.wst.validation.internal.model.FilterGroup;
+import org.eclipse.wst.validation.internal.model.FilterRule;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+/**
+ * Process the validator (version 2) extension point.
+ * 
+ * @author karasiuk
+ *
+ */
+public class ValidatorExtensionReader {
+	
+	private static ValidatorExtensionReader _me = new ValidatorExtensionReader();
+	
+	public  static ValidatorExtensionReader getDefault(){
+		return _me;
+	}
+	
+	private ValidatorExtensionReader(){}
+	
+	/**
+	 * Process the v2 extensions, returning all the v2 validators.
+	 */
+	Collection<Validator> process() {
+		Map<String,Validator> map = new HashMap<String, Validator>(100);
+		IExtensionPoint extensionPoint = getExtensionPoint();
+		if (extensionPoint == null)return map.values();
+				
+		for (IExtension ext : extensionPoint.getExtensions()){
+			for (IConfigurationElement validator : ext.getConfigurationElements()){
+				String id = ext.getUniqueIdentifier();
+				if (Tracing.isEnabled(id)){
+					Validator v = processValidator(validator, id, ext.getLabel(), null);
+					if (v != null)map.put(v.getId(),v);
+				}
+			}
+		}
+		
+		extensionPoint = getExtensionPointExclude();
+		if (extensionPoint != null){
+			for (IExtension ext : extensionPoint.getExtensions()){
+				for (IConfigurationElement validator : ext.getConfigurationElements()){
+					String id = validator.getAttribute(ExtensionConstants.Exclude.id);
+					Validator v = map.get(id);
+					V2 v2 = null;
+					if (v != null)v2 = v.asV2Validator();
+
+					if (v2 == null){
+						String msg = NLS.bind("Plug-in configuration error, extension {0} references validator id {1} but this id does not exist.",  //$NON-NLS-1$
+							extensionPoint.getUniqueIdentifier(), id);
+						CoreException ex = new CoreException(new Status(IStatus.ERROR, ValidationPlugin.PLUGIN_ID, msg));
+						ValidationPlugin.getPlugin().handleException(ex);
+					}
+					else {
+						for (IConfigurationElement exclude : validator.getChildren()){
+							FilterGroup fg = null;
+							try {
+								fg = createFilterGroup(exclude);
+							}
+							catch (Exception e){
+								ValidationPlugin.getPlugin().handleException(e);
+								IContributor contrib = validator.getContributor();
+								String message = NLS.bind(ValMessages.ErrConfig, contrib.getName());
+								ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, message);								
+							}
+							if (fg != null && fg.isExclude()){
+								mergeExcludeGroup(v2, fg);
+							}
+						}
+					}					
+				}
+			}
+			
+		}
+		return map.values();
+		
+	}
+	
+	/**
+	 * Merge the rules from the filter group into the current exclude group, creating a current exclude
+	 * group if need be.
+	 * @param v2
+	 * @param fg
+	 */
+	private void mergeExcludeGroup(V2 v2, FilterGroup fg){
+		FilterGroup existing = null;
+		for (FilterGroup group : v2.getGroups()){
+			if (group.isExclude()){
+				existing = group;
+				break;
+			}
+		}
+		if (existing == null)v2.add(fg);
+		else {
+			List<FilterRule> rules = new LinkedList<FilterRule>();
+			for (FilterRule rule : existing.getRules())rules.add(rule);
+			
+			for (FilterRule rule : fg.getRules())rules.add(rule);
+			
+			FilterRule[] filterRules = new FilterRule[rules.size()];
+			rules.toArray(filterRules);
+			FilterGroup merged = FilterGroup.create(existing.isExclude(), filterRules);
+			
+			v2.replaceFilterGroup(existing, merged);
+		}
+	}
+	
+	/**
+	 * Process the validator element in a validator extension.
+	 * 
+	 * @param validator
+	 *            The validator element.
+	 * 
+	 * @param deep
+	 *            If true load all the configuration elements for each
+	 *            validator, if false do a shallow load, where only the
+	 *            validator class, id and name's are loaded.
+	 * 
+	 * @param project
+	 *            The project that you are defined in. This can be null which
+	 *            means that you are a global validator.
+	 * 
+	 * @return a configured validator or null if there was an error.
+	 */
+	private Validator processValidator(IConfigurationElement validator, String id, String label, IProject project) {
+		Validator.V2 v = null;
+		try {
+			v = Validator.create(validator, project).asV2Validator();
+			v.setLevel(Validator.Level.Extension);
+			v.setId(id);
+			v.setName(label);
+			v.setBuildValidation(getAttribute(validator, ExtensionConstants.build, true));
+			v.setManualValidation(getAttribute(validator, ExtensionConstants.manual, true));
+			v.setMarkerId(validator.getAttribute(ExtensionConstants.markerId));
+			v.setVersion(getAttribute(validator, ExtensionConstants.version, 1));
+			v.setSourceId(validator.getAttribute(ExtensionConstants.sourceId));
+			IConfigurationElement[] children = validator.getChildren();
+			for (IConfigurationElement child : children)processIncludeAndExcludeElement(v, child);
+		}
+		catch (Exception e){
+			ValidationPlugin.getPlugin().handleException(e);
+			IContributor contrib = validator.getContributor();
+			String message = NLS.bind(ValMessages.ErrConfig, contrib.getName());
+			ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, message);
+		}
+		return v;
+	}
+	
+	/**
+	 * Answer all the messages that this validator has defined.
+	 * @param v
+	 * @return an empty list if the validator did not define any messages.
+	 */
+	public List<MessageSeveritySetting> addMessages(Validator v){
+		List<MessageSeveritySetting> list = new LinkedList<MessageSeveritySetting>();
+		IExtensionPoint extensionPoint = getExtensionPoint();
+		if (extensionPoint == null)return list;
+		IExtension ext = extensionPoint.getExtension(v.getId());
+		if (ext == null)return list;
+		
+		for (IConfigurationElement elem : ext.getConfigurationElements()){
+			for (IConfigurationElement ce : elem.getChildren(ExtensionConstants.MessageCategory.name)){
+				list.add(processMessage(ce));
+			}
+		}
+
+		return list;
+	}
+
+	/**
+	 * Answer the extension point for the v2 validators.
+	 * 
+	 * @return null if there is a problem or no extensions.
+	 */
+	private IExtensionPoint getExtensionPoint() {
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		return registry.getExtensionPoint(ValidationPlugin.PLUGIN_ID, ExtensionConstants.validator);
+	}
+
+	/**
+	 * Answer the extension point for adding exclusion filters. This is where another validator can
+	 * further restrict an existing validator.
+	 * 
+	 * @return null if there is a problem or no extensions.
+	 */
+	private IExtensionPoint getExtensionPointExclude() {
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		return registry.getExtensionPoint(ValidationPlugin.PLUGIN_ID, ExtensionConstants.excludeExtension);
+	}
+	
+	/**
+	 * Process a message element for the validator, by creating a MessageCategory for it.
+	 * 
+	 * @param ce a MessageCategory element.
+	 */
+	private MessageSeveritySetting processMessage(IConfigurationElement ce) {
+		String s = ce.getAttribute(ExtensionConstants.MessageCategory.severity);
+		MessageSeveritySetting.Severity sev = null;
+		if (ExtensionConstants.MessageCategory.sevError.equals(s))sev = MessageSeveritySetting.Severity.Error;
+		else if (ExtensionConstants.MessageCategory.sevWarning.equals(s))sev = MessageSeveritySetting.Severity.Warning;
+		else if (ExtensionConstants.MessageCategory.sevIgnore.equals(s))sev = MessageSeveritySetting.Severity.Ignore;
+		
+		return new MessageSeveritySetting(ce.getAttribute(ExtensionConstants.MessageCategory.id), 
+			ce.getAttribute(ExtensionConstants.MessageCategory.label), sev);		
+	}
+
+	/** 
+	 * Process the include and exclude elements.
+	 * 
+	 *  @param v The validator that we are building up.
+	 *  @param group The children of the validator tag. This may included include and exclude elements.
+	 *  Other elements are ignored. 
+	 */
+	private void processIncludeAndExcludeElement(Validator.V2 v, IConfigurationElement group) {
+		FilterGroup fg = createFilterGroup(group);
+		if (fg != null)v.add(fg);
+	}
+	
+	/**
+	 * Process an include or exclude element, returning a filter group for it.
+	 * 
+	 * @param group
+	 *            An include, exclude or some other element. Only include and
+	 *            exclude elements are processed, other types are ignored.
+	 *            
+	 * @return a filter group that corresponds to the include or exclude
+	 *         element, or null if the element was not an include or exclude
+	 *         element.
+	 */
+	private FilterGroup createFilterGroup(IConfigurationElement group){
+		String name = group.getName();
+		if (!FilterGroup.isKnownName(name))return null; 
+		
+		
+		IConfigurationElement[] rules = group.getChildren(ExtensionConstants.rules);
+		// there should only be one
+		List<FilterRule> list = new LinkedList<FilterRule>();
+		for (int i=0; i<rules.length; i++){
+			IConfigurationElement[] r = rules[i].getChildren();
+			for(int j=0; j<r.length; j++){
+				list.add(processRule(r[j]));
+			}
+		}
+		FilterRule[] filterRules = new FilterRule[list.size()];
+		list.toArray(filterRules);
+		return FilterGroup.create(name, filterRules);
+	}
+
+	/**
+	 * Process a rule in one of the rule groups.
+	 * 
+	 * @param rule a rule in the group, like fileext.
+	 */
+	private FilterRule processRule(IConfigurationElement rule) {
+		FilterRule fr = FilterRule.create(rule);
+		if (fr == null){
+			String contributor = ""; //$NON-NLS-1$
+			String name = ""; //$NON-NLS-1$
+			try {
+				contributor = rule.getDeclaringExtension().getContributor().getName();
+				name = rule.getName();
+			}
+			catch (Exception e){
+				// eat it
+			}
+			throw new IllegalStateException(ValMessages.ErrFilterRule + " : " + //$NON-NLS-1$
+					contributor	 + " : " + name); //$NON-NLS-1$
+		}
+		return fr;
+	}
+	
+	/**
+	 * Determine if any of the validators need to be migrated, and if so answer a new
+	 * Validator array.
+	 * 
+	 * @param validators the existing validators (from the preferences).
+	 *  
+	 * @return null if no validators needed to be migrated.
+	 */
+	Validator[] migrate(Validator[] validators, IProject project) {
+		int count = 0;
+		Map<String, Validator> map = new HashMap<String, Validator>(validators.length);
+		for (Validator v : validators)map.put(v.getId(), v);
+		
+		IExtensionPoint extensionPoint = getExtensionPoint();
+		if (extensionPoint == null)return null;
+				
+		for (IExtension ext : extensionPoint.getExtensions()){
+			for (IConfigurationElement validator : ext.getConfigurationElements()){
+				Validator v = processValidator(validator, ext.getUniqueIdentifier(), ext.getLabel(), project);
+				if (v == null)continue;
+				Validator old = map.get(v.getId());
+				if (old == null || old.getVersion() < v.getVersion()){
+					//TODO we may be replacing user preferences, at some point we may want to do a real migration.
+					map.put(v.getId(), v);
+					count++;
+				}
+			}
+		}
+		
+		if (count > 0){
+			Validator[] vals = new Validator[map.size()];
+			map.values().toArray(vals);
+			return vals;
+		}
+		return null;
+	}
+	
+	private boolean getAttribute(IConfigurationElement element, String name, boolean dft){
+		String v = element.getAttribute(name);
+		if (v == null)return dft;
+		if ("true".equalsIgnoreCase(v))return true; //$NON-NLS-1$
+		if ("false".equalsIgnoreCase(v))return false; //$NON-NLS-1$
+		return dft;
+	}
+	
+	private int getAttribute(IConfigurationElement element, String name, int dft){
+		String v = element.getAttribute(name);
+		if (v == null)return dft;
+		try {
+			return Integer.parseInt(v);
+		}
+		catch (Exception e){
+			// eat it.
+		}
+		return dft;
+	}
+	
+//	/**
+//	 * This method is only used for debugging.
+//	 * @param elem
+//	 */
+//	private static void dump(IConfigurationElement elem){
+//		String name = elem.getName();
+//		String[] attribs = elem.getAttributeNames();
+//		String[] vals = new String[attribs.length];
+//		for (int i=0; i<vals.length; i++)vals[i] = elem.getAttribute(attribs[i]);
+//		String v = elem.getValue();
+//		IConfigurationElement[] children = elem.getChildren();
+//		for (int i=0; i<children.length; i++)dump(children[i]);
+//	}
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidatorGroupExtensionReader.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidatorGroupExtensionReader.java
new file mode 100644
index 0000000..62543f7
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidatorGroupExtensionReader.java
@@ -0,0 +1,140 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+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.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.validation.IValidatorGroupListener;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+/**
+ * Process the validator group (for use with validator version 2 only) extension point.
+ * 
+ * @author nitin
+ * 
+ */
+public class ValidatorGroupExtensionReader {
+
+	private static final String DOT = "."; //$NON-NLS-1$
+	private static ValidatorGroupExtensionReader _instance;
+
+	public static ValidatorGroupExtensionReader getDefault() {
+		if (_instance == null)_instance = new ValidatorGroupExtensionReader();
+		return _instance;
+	}
+
+	/**
+	 * Map of group IDs to configuration elements
+	 */
+	private Map<String, List<IConfigurationElement>> _map;
+	
+	/**
+	 * Map of group ID's to resolved configuration elements.
+	 */
+	private Map<String, IValidatorGroupListener[]> _resolved;
+
+	private ValidatorGroupExtensionReader() {
+		init();
+	}
+
+	/**
+	 * Answer the listeners with this group id.
+	 * @param groupID
+	 * @return an empty array there are no listeners for this group id.
+	 */
+	IValidatorGroupListener[] createListeners(String groupID) throws CoreException {
+		IValidatorGroupListener[] result = _resolved.get(groupID);
+		if (result != null)return result;
+				
+		List<IConfigurationElement> elements = _map.get(groupID);
+		if (elements == null){
+			_resolved.put(groupID, new IValidatorGroupListener[0]);
+			String msg = NLS.bind("Configuration error, there is no validation listener group with id: {0}", groupID); //$NON-NLS-1$
+			Status status = new Status(IStatus.ERROR, ValidationPlugin.PLUGIN_ID, msg);
+			throw new CoreException(status);
+		}
+		
+		List<IValidatorGroupListener> listeners = new ArrayList<IValidatorGroupListener>(elements.size());
+		for (IConfigurationElement element : elements) {
+			IValidatorGroupListener listener;
+			try {
+				listener = (IValidatorGroupListener) element.createExecutableExtension(ExtensionConstants.Group.attClass);
+				listeners.add(listener);
+			}
+			catch (Exception e) {
+				ValidationPlugin.getPlugin().handleException(e);
+				listeners = new ArrayList<IValidatorGroupListener>();
+			}
+		}
+
+		result = listeners.toArray(new IValidatorGroupListener[listeners.size()]);
+		_resolved.put(groupID, result);
+		return result;
+	}
+
+	/**
+	 * Answer the extension point for the validatorGroups.
+	 * 
+	 * @return null if there is a problem or no extensions.
+	 */
+	private IExtensionPoint getExtensionPoint() {
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		return registry.getExtensionPoint(ValidationPlugin.PLUGIN_ID, ExtensionConstants.group);
+	}
+
+	private void init() {
+		_map = new HashMap<String, List<IConfigurationElement>>(4);
+		_resolved = new HashMap<String, IValidatorGroupListener[]>(4);
+
+		IExtensionPoint extensionPoint = getExtensionPoint();
+		if (extensionPoint != null) {
+			for (IExtension ext : extensionPoint.getExtensions()) {
+				for (IConfigurationElement group : ext.getConfigurationElements()) {
+					processGroupElement(group);
+				}
+			}
+		}
+	}
+
+	private void processGroupElement(IConfigurationElement element) {
+		if (!ExtensionConstants.Group.elementGroup.equals(element.getName()))return;
+		
+		String id = element.getAttribute(ExtensionConstants.Group.attId);
+		if (id == null)throw new IllegalStateException("Configuration error, the " +  //$NON-NLS-1$
+			ExtensionConstants.Group.attId + " is required"); //$NON-NLS-1$
+		// force the use of a qualified ID
+		if (id.indexOf(DOT) < 0) {
+			id = element.getContributor().getName() + DOT + id;
+		}
+		IConfigurationElement[] newElements = element.getChildren(ExtensionConstants.Group.elementListener);
+		if (newElements.length > 0) {
+			List<IConfigurationElement> elements = _map.get(id);
+			if (elements == null) {
+				elements = new ArrayList<IConfigurationElement>();
+				_map.put(id, elements);
+			}
+			elements.addAll(Arrays.asList(newElements));
+		}
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidatorMutable.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidatorMutable.java
new file mode 100644
index 0000000..d18b0c5
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidatorMutable.java
@@ -0,0 +1,258 @@
+package org.eclipse.wst.validation.internal;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.wst.validation.IMutableValidator;
+import org.eclipse.wst.validation.MessageSeveritySetting;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.Validator.V1;
+import org.eclipse.wst.validation.Validator.V2;
+import org.eclipse.wst.validation.internal.model.FilterGroup;
+
+/**
+ * The mutable fields that a user can change through the preference or property page.
+ * @author karasiuk
+ *
+ */
+public final class ValidatorMutable implements IAdaptable, IMutableValidator {
+	
+	private boolean _build;
+	private boolean	_manual;
+	private String _delegatingId;
+	
+	private int _changeCountGroups;
+	private int _changeCountMessages;
+	
+	private final String	_name;
+	private final String 	_sourceId;
+	private final boolean _isV1;
+	private final boolean _isV2;
+	private final ValidatorMetaData _vmd;
+	private final String _id;
+	private final int	_version;
+
+	private FilterGroup[] _groups;
+	private final Map<String, MessageSeveritySetting> _messageSettings;
+	private final String _validatorClassname;
+	
+	private final boolean 	_origBuild;
+	private final boolean 	_origManual;
+	private final String	_origDelegating;
+
+	public ValidatorMutable(Validator validator) {
+		_name = validator.getName();
+		_sourceId = validator.getSourceId();
+		_manual = validator.isManualValidation();
+		_build = validator.isBuildValidation();
+		V2 v2 = validator.asV2Validator();
+		_isV2 = v2 != null;
+		_delegatingId = validator.getDelegatingId();
+		
+		V1 v1 = validator.asV1Validator();
+		_isV1 = v1 != null;
+		_vmd = _isV1 ? v1.getVmd() : null;
+		_id = validator.getId();
+		
+		_origBuild = _build;
+		_origDelegating = _delegatingId;
+		_origManual = _manual;
+		_version = validator.getVersion();
+		_validatorClassname = validator.getValidatorClassname();
+		_messageSettings = new HashMap<String, MessageSeveritySetting>(10); 
+		for (Map.Entry<String, MessageSeveritySetting> me : validator.getMessageSettings().entrySet()){
+			_messageSettings.put(me.getKey(), me.getValue().copy());
+		}
+		
+		if (v2 != null){
+			FilterGroup[] groups = v2.getGroups();
+			_groups = new FilterGroup[groups.length];
+			System.arraycopy(groups, 0, _groups, 0, groups.length);
+		}
+	}
+
+	public ValidatorMutable(ValidatorMutable val) {
+		_build = val._build;
+		_delegatingId = val._delegatingId;
+		FilterGroup[] groups = val.getGroups();
+		_groups = new FilterGroup[groups.length];
+		System.arraycopy(groups, 0, _groups, 0, groups.length);
+		
+		_id = val._id;
+		_isV1 = val._isV1;
+		_isV2 = val._isV2;
+		_manual = val._manual;
+		_messageSettings = new HashMap<String, MessageSeveritySetting>(10); 
+		for (Map.Entry<String, MessageSeveritySetting> me : val.getMessageSettings().entrySet()){
+			_messageSettings.put(me.getKey(), me.getValue().copy());
+		}
+
+		_name = val._name;
+		_origBuild = val._origBuild;
+		_origDelegating = val._origDelegating;
+		_origManual = val._origManual;
+		_sourceId = val._sourceId;
+		_validatorClassname = val._validatorClassname;
+		_version = val._version;
+		_vmd = val._vmd;
+	}
+
+	public void setBuildValidation(boolean build) {
+		_build = build;		
+	}
+
+	public void setManualValidation(boolean manual) {
+		_manual = manual;
+	}
+
+	public String getName() {
+		return _name;
+	}
+
+	public boolean isManualValidation() {
+		return _manual;
+	}
+
+	public boolean isBuildValidation() {
+		return _build;
+	}
+
+	public boolean isV2Validator() {
+		return _isV2;
+	}
+
+	public String getDelegatingId() {
+		return _delegatingId;
+	}
+
+	/**
+	 * The caller of this method must not change the ValidatorMetaData.
+	 */
+	public ValidatorMetaData getVmd() {
+		return _vmd;
+	}
+
+	public boolean isV1Validator() {
+		return _isV1;
+	}
+
+	public String getId() {
+		return _id;
+	}
+
+	/**
+	 * Answer true if any of your settings have changed.
+	 */
+	public boolean isChanged() {
+		if (hasGlobalChanges())return true;
+		if (_changeCountGroups > 0 || _changeCountMessages > 0)return true;
+		return false;
+	}
+
+	public boolean hasGlobalChanges() {
+		if (_origBuild != _build)return true;
+		if (_origManual != _manual)return true;
+		if (!Misc.same(_origDelegating, _delegatingId))return true;
+		return false;
+	}
+
+	public int getVersion() {
+		return _version;
+	}
+
+	public void replaceFilterGroup(FilterGroup existing, FilterGroup merged) {
+		int i = find(existing);
+		if (i == -1)add(merged);  // this should never happen
+		else {
+			_groups[i] = merged;
+			bumpChangeCountGroups();
+		}
+	}
+	
+	public void remove(FilterGroup group) {
+		int i = find(group);
+		if (i == -1)return;
+		
+		FilterGroup[] groups = new FilterGroup[_groups.length-1];
+		if (i > 0)System.arraycopy(_groups, 0, groups, 0, i);
+		if (i < groups.length)System.arraycopy(_groups, i+1, groups, i, groups.length-i);
+		_groups = groups;
+		bumpChangeCountGroups();
+	}
+	
+	private int find(FilterGroup group) {
+		for (int i=0; i<_groups.length; i++)if (group == _groups[i])return i;
+		return -1;
+	}
+
+	public void add(FilterGroup fg) {
+		assert fg != null;
+		FilterGroup[] groups = new FilterGroup[_groups.length+1];
+		System.arraycopy(_groups, 0, groups, 0, _groups.length);
+		groups[_groups.length] = fg;
+		_groups = groups;
+		bumpChangeCountGroups();
+	}
+	
+	private void bumpChangeCountGroups(){
+		_changeCountGroups++;
+	}
+
+	public int getChangeCountGroups() {
+		return _changeCountGroups;
+	}
+	
+	public FilterGroup[] getGroups(){
+		return _groups;
+	}
+
+	public void setDelegatingId(String id) {
+		_delegatingId = id;	
+	}
+
+	public Map<String, MessageSeveritySetting> getMessageSettings() {
+		return _messageSettings;
+	}
+	
+	public void bumpChangeCountMessages(){
+		_changeCountMessages++;
+	}
+
+	public String getValidatorClassname() {
+		return _validatorClassname;
+	}
+
+	@SuppressWarnings("unchecked")
+	public Object getAdapter(Class adapter) {
+		return Platform.getAdapterManager().getAdapter(this, adapter);
+	}
+
+	public boolean sameConfig(Validator validator) {
+		if (validator == null)return false;
+		return hashCodeForConfig() == validator.hashCodeForConfig();
+	}
+
+	private int hashCodeForConfig() {
+		int h = 0;
+		if (_build)h += 101;
+		if (_delegatingId != null)h += _delegatingId.hashCode();
+		if (_manual)h += 201;
+		if (_messageSettings != null){
+			for (MessageSeveritySetting ms : _messageSettings.values())h += ms.hashCode();
+		}
+		if (_sourceId != null)h += _sourceId.hashCode();
+		h += _version;
+		if (_id != null)h += _id.hashCode();
+		for (FilterGroup fg : _groups)h += fg.hashCodeForConfig();
+		return h;
+	}
+
+	@Override
+	public String toString() {
+		return _name;
+	}
+
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/FilterGroup.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/FilterGroup.java
new file mode 100644
index 0000000..6d20dd5
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/FilterGroup.java
@@ -0,0 +1,253 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.model;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.wst.validation.internal.ContentTypeWrapper;
+import org.eclipse.wst.validation.internal.Deserializer;
+import org.eclipse.wst.validation.internal.ExtensionConstants;
+import org.eclipse.wst.validation.internal.Serializer;
+import org.eclipse.wst.validation.internal.ValMessages;
+
+/**
+ * An immutable group of filter rules.
+ * @author karasiuk
+ *
+ */
+public abstract class FilterGroup implements IAdaptable {
+	
+	private final FilterRule[] _rules;
+	
+	/** The version number of the serialization (in case we ever need to change this) */
+	private static final int SerializationVersion = 1;
+
+	/**
+	 * Answer a filter group based on the type of the group.
+	 * 
+	 * @param name either "include" or "exclude"
+	 * 
+	 * @return null if the name parameter isn't correct.
+	 */
+	public static FilterGroup create(String name, FilterRule[] rules) {
+		if (ExtensionConstants.include.equals(name))return new FilterIncludeGroup(rules);
+		if (ExtensionConstants.exclude.equals(name))return new FilterExcludeGroup(rules);
+		return null;
+	}
+	
+	/**
+	 * Answer a filter group from a deserializer.
+	 * @param des
+	 * 
+	 * @see FilterGroup#save(Serializer)
+	 */
+	public static FilterGroup create(Deserializer des){
+		des.getInt(); // get the version
+		String type = des.getString();
+		
+		int numberRules = des.getInt();
+		List<FilterRule> list = new LinkedList<FilterRule>();
+		for (int i=0; i<numberRules; i++)list.add(FilterRule.create(des));
+		FilterRule[] rules = new FilterRule[list.size()];
+		list.toArray(rules);
+
+		return create(type, rules);
+	}
+
+	/**
+	 * Answer a new filter group.
+	 * 
+	 * @param exclude if true an exclusion group is returned, otherwise an inclusion group is returned.
+	 */
+	public static FilterGroup create(boolean exclude, FilterRule[] rules){
+		if (exclude) return new FilterExcludeGroup(rules);
+		return new FilterIncludeGroup(rules);
+	}
+
+	/**
+	 * Answer true if this is a supported type of group.
+	 * @param name Type of group that is being tested.
+	 * @return
+	 */
+	public static boolean isKnownName(String name) {
+		if (ExtensionConstants.include.equals(name))return true;
+		if (ExtensionConstants.exclude.equals(name))return true;
+		return false;
+	}
+
+	
+	private FilterGroup(FilterRule[] rules){
+		_rules = rules;
+	}
+		
+	/**
+	 * The rules in the group.
+	 */
+	public final FilterRule[] getRules(){
+		FilterRule[] rules = new FilterRule[_rules.length];
+		System.arraycopy(_rules, 0, rules, 0, _rules.length);
+		return rules;
+	}
+		
+	/**
+	 * Answer the internal type of group, e.g. "include" or "exclude".
+	 */
+	public abstract String getType();
+	
+	/** Answer the type as a type that can be displayed to a user, that is it has been localized. */
+	public abstract String getDisplayableType();
+	
+	@SuppressWarnings("unchecked")
+	public Object getAdapter(Class adapter) {
+		return Platform.getAdapterManager().getAdapter(this, adapter);
+	}
+	
+	public static final class FilterIncludeGroup extends FilterGroup {
+		
+		private FilterIncludeGroup(FilterRule[] rules){
+			super(rules);
+		}
+
+		public String getType() {
+			return ExtensionConstants.include;
+		}
+		
+		public String getDisplayableType() {
+			return ValMessages.GroupInclude;
+		}
+		
+		public boolean isInclude() {
+			return true;
+		}
+		
+	}
+	
+	
+	public static final class FilterExcludeGroup extends FilterGroup {
+		
+		private FilterExcludeGroup(FilterRule[] rules){
+			super(rules);
+		}
+		public String getType() {
+			return ExtensionConstants.exclude;
+		}
+		
+		public String getDisplayableType() {
+			return ValMessages.GroupExclude;
+		}
+		
+		public boolean isExclude() {
+			return true;
+		}		
+	}
+		
+	/**
+	 * Save your settings into the serializer.
+	 * @param ser
+	 */
+	public void save(Serializer ser){
+		ser.put(SerializationVersion);
+		ser.put(getType());
+		ser.put(_rules.length);
+		for (FilterRule rule : _rules)rule.save(ser);		
+	}
+
+	/**
+	 * Answer whether or not we should validate the resource based on the filters in this group.
+	 * 
+	 * @param project the project that is being validated.
+	 * @param resource the resource that is being validated. This can be null, in which case
+	 * only the project level checks are performed.
+	 */
+	public boolean shouldValidate(IProject project, IResource resource, ContentTypeWrapper contentTypeWrapper) {
+		boolean exclude = isExclude();
+		boolean include = isInclude();
+		int count = 0;
+		for (FilterRule rule : _rules){
+			if (resource != null){
+				Boolean match = rule.matchesResource(resource, contentTypeWrapper);
+				if (match != null)count++;
+				if (exclude && match != null && match)return false;
+				if (include && match != null && match)return true;
+			}
+			
+			Boolean match = rule.matchesProject(project);
+			if (match != null)count++;
+			if (exclude && match != null && match)return false;
+			if (include && match != null && match)return true;
+		}
+		if (exclude)return true;
+		if (count == 0)return true;
+		return false;
+	}
+
+	/** 
+	 * Answer true if this is an inclusion filter, that is at least one of the rules must
+	 * match in order to validate the resource.
+	 */
+	public boolean isInclude() {
+		return false;
+	}
+
+	/**
+	 * Answer true if this is an exclusion filter, that is if any of the rules match the 
+	 * resource is not validated.
+	 */
+	public boolean isExclude() {
+		return false;
+	}
+	
+	public int hashCodeForConfig() {
+		int h = 0;
+		if (isExclude())h += 13;
+		for (FilterRule fr : _rules)h += fr.hashCodeForConfig();
+		return h;
+	}
+
+	/**
+	 * Create a new group by adding a rule to an existing group.
+	 * @param baseGroup The group that holds the existing rules.
+	 * @param rule The new rule that is being added
+	 * @return
+	 */
+	public static FilterGroup addRule(FilterGroup baseGroup, FilterRule rule) {
+		List<FilterRule> list = new LinkedList<FilterRule>();
+		for (FilterRule r : baseGroup._rules)list.add(r);
+		list.add(rule);
+		
+		FilterRule[] rules = new FilterRule[list.size()];
+		list.toArray(rules);
+		return FilterGroup.create(baseGroup.isExclude(), rules);
+	}
+
+	/**
+	 * Create a new group by removing a rule from an existing group.
+	 * @param baseGroup The group that holds the existing rules.
+	 * @param rule The rule that is being removed
+	 * @return
+	 */
+	public static FilterGroup removeRule(FilterGroup baseGroup,	FilterRule rule) {
+		List<FilterRule> list = new LinkedList<FilterRule>();
+		for (FilterRule r : baseGroup._rules){
+			if (!r.equals(rule))list.add(r);
+		}
+		
+		FilterRule[] rules = new FilterRule[list.size()];
+		list.toArray(rules);
+		return FilterGroup.create(baseGroup.isExclude(), rules);
+	}	
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/FilterRule.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/FilterRule.java
new file mode 100644
index 0000000..04cf0c2
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/FilterRule.java
@@ -0,0 +1,536 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.model;
+
+import java.util.regex.Pattern;
+
+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.IAdaptable;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.content.IContentType;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.common.project.facet.core.FacetedProjectFramework;
+import org.eclipse.wst.validation.internal.ContentTypeWrapper;
+import org.eclipse.wst.validation.internal.Deserializer;
+import org.eclipse.wst.validation.internal.ExtensionConstants;
+import org.eclipse.wst.validation.internal.Serializer;
+import org.eclipse.wst.validation.internal.Tracing;
+import org.eclipse.wst.validation.internal.ValMessages;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+/**
+ * A rule that is used to filter out (or in) validation on a resource.
+ * The concrete classes are all immutable.
+ * @author karasiuk
+ *
+ */
+public abstract class FilterRule implements IAdaptable {
+	
+	protected final String _pattern;
+	
+	protected static final String PortableFileDelim = "/"; //$NON-NLS-1$
+	
+	/**
+	 * Create a rule based on a configuration element.
+	 * 
+	 * @param rule
+	 *            The configuration element, see the extension point for details.
+	 * @return null if there is a problem.
+	 */
+	public static FilterRule create(IConfigurationElement rule){
+		String name = rule.getName();
+		if (ExtensionConstants.Rule.fileext.equals(name))return new FileExt(rule);
+		if (ExtensionConstants.Rule.projectNature.equals(name))return new ProjectNature(rule);
+		if (ExtensionConstants.Rule.file.equals(name))return File.createFile(rule);
+		if (ExtensionConstants.Rule.contentType.equals(name))return ContentType.createContentType(rule);
+		if (ExtensionConstants.Rule.facet.equals(name))return new Facet(rule);
+		if (ExtensionConstants.Rule.pattern.equals(name))return FilePattern.createFilePattern(rule);
+		return null;
+	}
+	
+	static FilterRule create(Deserializer des) {
+		String type = des.getString();
+		if (ExtensionConstants.Rule.fileext.equals(type)){
+			String pattern = des.getString();
+			boolean caseSensitive = des.getBoolean();
+			return new FileExt(pattern, caseSensitive);
+		}
+		
+		if (ExtensionConstants.Rule.projectNature.equals(type)){
+			String pattern = des.getString();
+			return new ProjectNature(pattern);
+		}
+		
+		if (ExtensionConstants.Rule.file.equals(type)){
+			String pattern = des.getString();
+			boolean caseSensitive = des.getBoolean();
+			int fileType = des.getInt();
+			return new File(pattern, caseSensitive, fileType);
+		}
+		
+		if (ExtensionConstants.Rule.contentType.equals(type)){
+			String pattern = des.getString();
+			boolean exactMatch = des.getBoolean();
+			return new ContentType(pattern, exactMatch);
+		}
+		
+		if (ExtensionConstants.Rule.facet.equals(type)){
+			String pattern = des.getString();
+			return new Facet(pattern, null);
+		}
+		
+		if (ExtensionConstants.Rule.pattern.equals(type)){
+			String pattern = des.getString();
+			boolean caseSensitive = des.getBoolean();
+			return new FilePattern(pattern, caseSensitive);
+		}
+		return null;
+	}
+
+	
+	public static FilterRule createFile(String pattern, boolean caseSensitive, int type){
+		return new File(pattern, caseSensitive, type);
+	}
+	
+	public static FilterRule createFileExt(String pattern, boolean caseSensitive){
+		FileExt ext = new FileExt(pattern, caseSensitive);
+		return ext;
+	}
+	
+	public static FilterRule createFacet(String facetId){
+		return new Facet(facetId, null);
+	}
+	
+	public static FilterRule createProject(String projectNature){
+		return new ProjectNature(projectNature);
+	}
+	
+	public static FilterRule createContentType(String contentType, boolean exactMatch){
+		return new ContentType(contentType, exactMatch);
+	}
+		
+	protected FilterRule(String pattern){
+		_pattern = pattern;
+	}
+
+	/** 
+	 * Answer true if the rule matches the resource, false if it doesn't, and
+	 * null if the rule does not apply to resources.
+	 * 
+	 * 	@param resource the resource that is being validated.
+	 */
+	public Boolean matchesResource(IResource resource, ContentTypeWrapper contentTypeWrapper){
+		return null;
+	}
+
+	/** 
+	 * Answer true if the rule matches the project, false if it doesn't, and null if the
+	 * rule does not apply.
+	 * 
+	 * 	@param project the project that is being validated.
+	 */
+	public Boolean matchesProject(IProject project){
+		return null;
+	}
+		
+	public String toString() {
+		return getDisplayableType() + ": " + _pattern; //$NON-NLS-1$
+	}
+	
+	/** Answer a name of the rule, that can be displayed to a user. */
+	public String getName(){
+		return toString();
+	}
+	
+	public String getPattern(){
+		return _pattern;
+	}
+	
+	/** Answer the type of rule. */
+	public abstract String getType();
+	
+	/** Answer a type that can be displayed to an end user. */
+	public abstract String getDisplayableType();
+	
+	public static boolean asBoolean(String value, boolean aDefault){
+		if (value == null)return aDefault;
+		if (value.equals(ExtensionConstants.True))return true;
+		if (value.equals(ExtensionConstants.False))return false;
+		return aDefault;
+	}
+	
+	@SuppressWarnings("unchecked")
+	public Object getAdapter(Class adapter) {
+		return Platform.getAdapterManager().getAdapter(this, adapter);
+	}
+	
+	public static abstract class FilterRuleCaseSensitive extends FilterRule {
+				
+		public FilterRuleCaseSensitive(String pattern, boolean caseSensitive) {
+			super(pattern);
+			_caseSensitive = caseSensitive;
+		}
+		
+		private final boolean _caseSensitive;
+				
+		@Override
+		public int hashCodeForConfig() {
+			int h =  super.hashCodeForConfig();
+			if (_caseSensitive)h += 401;
+			return h;
+		}
+				
+		@Override
+		public void save(Serializer ser) {
+			super.save(ser);
+			ser.put(_caseSensitive);
+		}
+						
+		public boolean isCaseSensitive() {
+			return _caseSensitive;
+		}
+				
+	}
+	
+	public static final class ProjectNature extends FilterRule {
+		
+		private ProjectNature(IConfigurationElement rule) {
+			super(rule.getAttribute(ExtensionConstants.RuleAttrib.id));
+			
+		}
+		
+		public ProjectNature(String projectNature) {
+			super(projectNature);
+		}
+
+		public String getDisplayableType() {
+			return ValMessages.RuleProjectNature;
+		}
+		
+		public String getType() {
+			return ExtensionConstants.Rule.projectNature;
+		}
+		
+		public Boolean matchesProject(IProject project) {
+			try {
+				return project.hasNature(_pattern);
+			}
+			catch (CoreException e){
+			}
+			return Boolean.FALSE;
+		}
+		
+	}
+	
+	public static final class FileExt extends FilterRuleCaseSensitive {
+		
+		private FileExt(IConfigurationElement rule){
+			super(rule.getAttribute(ExtensionConstants.RuleAttrib.ext), 
+				asBoolean(rule.getAttribute(ExtensionConstants.RuleAttrib.caseSensitive), false));
+		}
+				
+		private FileExt(String pattern, boolean caseSensitive) {
+			super(pattern, caseSensitive);
+		}
+
+		public String getType() {
+			return ExtensionConstants.Rule.fileext;
+		}
+		
+		public String getDisplayableType() {
+			return ValMessages.RuleFileExt;
+		}
+		
+		public String getName() {
+			return toString();
+		}
+		
+		public String toString() {
+			if (isCaseSensitive())return NLS.bind(ValMessages.FileExtWithCase, getDisplayableType(), _pattern);
+			return NLS.bind(ValMessages.FileExtWithoutCase, getDisplayableType(), _pattern);
+		}
+
+		public Boolean matchesResource(IResource resource, ContentTypeWrapper contentTypeWrapper) {
+			String ext = resource.getFileExtension();
+			if (isCaseSensitive())return _pattern.equals(ext);
+			return _pattern.equalsIgnoreCase(ext);
+		}
+	}
+	
+	/**
+	 * A rule that is used to filter based on file or folder names.
+	 * @author karasiuk
+	 *
+	 */
+	public static final class File extends FilterRuleCaseSensitive {
+		
+		private final String	_patternAsLowercase;
+		
+		/** One of the FileTypeXX constants. */
+		private final int		_type;
+		
+		public static final int FileTypeFile = 1;
+		public static final int FileTypeFolder = 2;
+		public static final int FileTypeFull = 3;
+		
+		private static File createFile(IConfigurationElement rule){
+			String pattern = rule.getAttribute(ExtensionConstants.RuleAttrib.name);
+			if (pattern == null)throw new IllegalStateException(ValMessages.ErrPatternAttrib);
+			String type = rule.getAttribute(ExtensionConstants.RuleAttrib.fileType);
+			if (type == null)throw new IllegalStateException(ValMessages.ErrTypeReq);
+			
+			int myType = -1;
+			if (ExtensionConstants.FileType.file.equals(type))myType = FileTypeFile;
+			else if (ExtensionConstants.FileType.folder.equals(type)){
+				myType = FileTypeFolder;
+				if (!pattern.endsWith(PortableFileDelim))pattern += PortableFileDelim;
+			}
+			else if (ExtensionConstants.FileType.full.equals(type))myType = FileTypeFull;
+			else {
+				Object[] parms = {type, ExtensionConstants.FileType.file, ExtensionConstants.FileType.folder, 
+					ExtensionConstants.FileType.full};
+				throw new IllegalStateException(NLS.bind(ValMessages.ErrType, parms));
+			}
+			boolean caseSensitive = asBoolean(rule.getAttribute(ExtensionConstants.RuleAttrib.caseSensitive), false);
+			return new File(pattern, caseSensitive, myType);
+		}
+		
+		private  File(String pattern, boolean caseSensitive, int type){			
+			super(pattern, caseSensitive);
+			_type = type;
+			_patternAsLowercase = pattern == null ? null : pattern.toLowerCase();
+		}
+				
+		public String getType() {
+			return ExtensionConstants.Rule.file;
+		}
+		
+		public String getDisplayableType() {
+			if (_type == FileTypeFolder)return ValMessages.RuleFolder;
+			if (_type == FileTypeFull)return ValMessages.RuleFull;
+			return ValMessages.RuleFile;
+		}
+		
+		public void setData(IConfigurationElement rule) {
+		}
+		
+		public String toString() {
+			if (isCaseSensitive())return NLS.bind(ValMessages.FileExtWithCase, getDisplayableType(), _pattern);
+			return NLS.bind(ValMessages.FileExtWithoutCase, getDisplayableType(), _pattern);
+		}
+		
+		public Boolean matchesResource(IResource resource, ContentTypeWrapper contentTypeWrapper) {
+			String name = null;
+			switch (_type){
+			case FileTypeFile:
+				name = resource.getName();
+				break;
+				
+			case FileTypeFolder:
+				name = resource.getProjectRelativePath().removeLastSegments(1).toString() + PortableFileDelim;
+				break;
+				
+			case FileTypeFull:
+				name = resource.getProjectRelativePath().toPortableString();
+				break;
+			}
+			
+			if (name == null)return Boolean.FALSE;
+			if (isCaseSensitive())return name.startsWith(_pattern);
+			return name.toLowerCase().startsWith(_patternAsLowercase);
+		}
+								
+		@Override
+		public void save(Serializer ser) {
+			super.save(ser);
+			ser.put(_type);
+		}
+		
+	}
+	
+	public static final class Facet extends FilterRule {
+		
+		private final String _versionExpression;
+		
+		private Facet(IConfigurationElement rule){
+			super(rule.getAttribute(ExtensionConstants.RuleAttrib.id));
+			_versionExpression = rule.getAttribute(ExtensionConstants.RuleAttrib.version);
+			
+		}
+				
+		public Facet(String facetId, String versionExpression) {
+			super(facetId);
+			_versionExpression = versionExpression;
+		}
+
+		public String getType() {
+			return ExtensionConstants.Rule.facet;
+		}
+		
+		public String getDisplayableType() {
+			return ValMessages.RuleFacet;
+		}
+		
+		@Override
+		public Boolean matchesProject(IProject project) {
+			try {
+				if (_versionExpression == null)return FacetedProjectFramework.hasProjectFacet(project, _pattern);
+				return FacetedProjectFramework.hasProjectFacet(project, _pattern, _versionExpression);
+			}
+			catch (CoreException e){
+				if (Tracing.isLogging())ValidationPlugin.getPlugin().handleException(e);
+			}
+			return Boolean.FALSE;
+		}
+		
+		@Override
+		public String toString() {
+			StringBuffer b = new StringBuffer(200);
+			b.append(getDisplayableType());
+			b.append(": "); //$NON-NLS-1$
+			b.append(_pattern);
+			
+			if (_versionExpression !=  null){
+				b.append(" ("); //$NON-NLS-1$
+				b.append(_versionExpression);
+				b.append(")"); //$NON-NLS-1$
+			}
+			return b.toString();
+		}
+		
+	}
+	
+	public static final class ContentType extends FilterRule {
+		
+		private final IContentType 	_type;
+		private final boolean		_exactMatch;
+		
+		private ContentType(String pattern, boolean exactMatch){
+			super(pattern);
+			_type = Platform.getContentTypeManager().getContentType(pattern);
+			_exactMatch = exactMatch;
+		}
+		
+		private static ContentType createContentType(IConfigurationElement rule){
+			String pattern = rule.getAttribute(ExtensionConstants.RuleAttrib.id);
+			boolean exactMatch = true;
+			String exact = rule.getAttribute(ExtensionConstants.RuleAttrib.exactMatch);
+			if (ExtensionConstants.False.equals(exact)) exactMatch = false;
+			
+			return new ContentType(pattern, exactMatch);
+		}
+				
+		public String getType() {
+			return ExtensionConstants.Rule.contentType;
+		}
+		
+		@Override
+		public int hashCodeForConfig() {
+			int h =  super.hashCodeForConfig();
+			if (_exactMatch)h += 301;
+			return h;
+		}
+		
+		public String getDisplayableType() {
+			return ValMessages.RuleContentType;
+		}
+								
+		@Override
+		public void save(Serializer ser) {
+			super.save(ser);
+			ser.put(_exactMatch);
+		}
+
+		public void setData(IConfigurationElement rule) {
+		}
+				
+		public Boolean matchesResource(IResource resource, ContentTypeWrapper contentTypeWrapper) {
+			if (_type == null)return Boolean.FALSE;
+			if (resource instanceof IFile) {
+				IFile file = (IFile) resource;
+				IContentType ct = contentTypeWrapper.getContentType(file);
+				if (ct == null)return Boolean.FALSE;
+				boolean match = false;
+				if (_exactMatch)match = ct.getId().equals(_type.getId());
+				else match = ct.isKindOf(_type);
+				
+				if (match && Tracing.isTraceMatches())
+					Tracing.log("FilterRule-01: ", toString() + " has matched " + resource); //$NON-NLS-1$ //$NON-NLS-2$
+				return match;
+			}
+			return Boolean.FALSE;
+		}
+		
+		@Override
+		public String toString() {
+			if (_exactMatch)return NLS.bind(ValMessages.ContentTypeExact, getDisplayableType(), _pattern);
+			return NLS.bind(ValMessages.ContentTypeNotExact, getDisplayableType(), _pattern);
+		}
+		
+	}
+	
+	public static final class FilePattern extends FilterRuleCaseSensitive {
+		
+		private final Pattern _compiledPattern;
+		
+		private static FilePattern createFilePattern(IConfigurationElement rule){
+			String pattern = rule.getAttribute(ExtensionConstants.RuleAttrib.regex);
+			boolean caseSensitive = asBoolean(rule.getAttribute(ExtensionConstants.RuleAttrib.caseSensitive), false);
+			return new FilePattern(pattern, caseSensitive);
+		}
+		
+		private FilePattern(String pattern, boolean caseSensitive){
+			super(pattern, caseSensitive);
+			int flags = 0;
+			if (caseSensitive)flags = Pattern.CASE_INSENSITIVE;
+			Pattern compiledPattern = Pattern.compile(pattern, flags);				
+			_compiledPattern = compiledPattern;
+		}
+
+		@Override
+		public String getDisplayableType() {
+			// FIXME this should be replaced as soon as we are allowed to change the UI.
+			return ValMessages.RuleFile;
+		}
+
+		@Override
+		public String getType() {
+			return ExtensionConstants.Rule.pattern;
+		}
+		
+		@Override
+		public Boolean matchesResource(IResource resource, ContentTypeWrapper wrapper) {
+			String name = PortableFileDelim + resource.getProjectRelativePath().toPortableString();
+			if (name == null)return Boolean.FALSE;
+			return _compiledPattern.matcher(name).matches();
+		}		
+	}
+	
+	/**
+	 * Save your settings into the serializer.
+	 * @param ser
+	 */
+	public void save(Serializer ser) {
+		ser.put(getType());
+		ser.put(getPattern());		
+	}
+
+	public int hashCodeForConfig() {
+		int h = getType().hashCode();
+		if (_pattern != null)h += _pattern.hashCode();
+		return h;
+	}
+	
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/GlobalPreferences.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/GlobalPreferences.java
new file mode 100644
index 0000000..2989c2c
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/GlobalPreferences.java
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.model;
+
+/**
+ * This class represents the global Preferences as set on the Validation Preferences page. It doesn't
+ * hold any of the individual validator settings, just the global check boxes. It is an immutable object.
+ */
+public final class GlobalPreferences {
+	
+	/** false - Default setting for the should all the validation be suspended setting. */ 
+	public static final boolean DefaultSuspend = false;
+	
+	/** false - Default setting for the auto save setting. */ 
+	public static final boolean DefaultAutoSave = false;
+	
+	/** false - Default setting for the confirm dialog setting. */ 
+	public static final boolean DefaultConfirm = true;
+	
+	/** false - Default setting for letting projects override the global settings. */
+	public static final boolean DefaultOverride = true;
+	
+	/** 2 - The version of the framework meta data, if an explicit version isn't found. */
+	public static final int DefaultFrameworkVersion = 2;
+	
+	/** Bit masks for what has changed. */
+	public final static int ConfirmDialogMask = 1;
+	public final static int DisableAllValidationMask = 2;
+	public final static int OverrideMask = 4;
+	public final static int SaveAutomaticallyMask = 8;
+	public final static int StateTimeStampMask = 16;
+	public final static int VersionMask = 32;
+	
+	/**
+	 * The changes that could affect what gets validated.
+	 */
+	public final static int BuildChangeMask = DisableAllValidationMask | OverrideMask;
+	
+
+	private final boolean _confirmDialog;
+	private final boolean _disableAllValidation;
+	private final boolean _override;
+	private final boolean _saveAutomatically;
+	
+	/** The plug-in state time stamp. */
+	private final long	_stateTimeStamp;
+	
+	/** The incoming version of the framework. This is used to determine if a migration is needed.*/
+	private final int		_version;
+			
+	/**
+	 * The only valid way to get the global preferences is through the ValManager.
+	 * 
+	 * @see org.eclipse.wst.validation.internal.ValManager#getGlobalPreferences()
+	 */
+	public GlobalPreferences(GlobalPreferencesValues gp) {
+		_confirmDialog = gp.confirmDialog;
+		_disableAllValidation = gp.disableAllValidation;
+		_override = gp.override;
+		_saveAutomatically = gp.saveAutomatically;
+		_stateTimeStamp = gp.stateTimeStamp;
+		_version = gp.version;
+	}
+	
+	/**
+	 * Answer a copy of the values.
+	 * @return
+	 */
+	public GlobalPreferencesValues asValues(){
+		GlobalPreferencesValues gp = new GlobalPreferencesValues();
+		gp.confirmDialog = _confirmDialog;
+		gp.disableAllValidation = _disableAllValidation;
+		gp.override = _override;
+		gp.saveAutomatically = _saveAutomatically;
+		gp.stateTimeStamp = _stateTimeStamp;
+		gp.version = _version;
+		return gp;
+	}
+
+	public boolean getSaveAutomatically() {
+		return _saveAutomatically;
+	}
+
+
+	/**
+	 * Answer if all validation has been disabled.
+	 */
+	public boolean getDisableAllValidation() {
+		return _disableAllValidation;
+	}
+
+	public boolean getConfirmDialog() {
+		return _confirmDialog;
+	}
+
+	public long getStateTimeStamp() {
+		return _stateTimeStamp;
+	}
+
+	/** Answer whether or not projects are allowed to override the global preferences. */
+	public boolean getOverride() {
+		return _override;
+	}
+
+	public int getVersion() {
+		return _version;
+	}
+
+	/**
+	 * Compare yourself to the other global preferences and answer a bitmask with the differences.
+	 * @param gp
+	 * @return bit mask of the changes. See the xxxMask constants for the values of the bits. A zero means that they are the same.
+	 */
+	public int compare(GlobalPreferences gp) {
+		int changes = 0;
+		if (_confirmDialog != gp.getConfirmDialog())changes |= ConfirmDialogMask;
+		if (_disableAllValidation != gp.getDisableAllValidation())changes |= DisableAllValidationMask;
+		if (_override != gp.getOverride())changes |= OverrideMask;
+		if (_saveAutomatically != gp.getSaveAutomatically())changes |= SaveAutomaticallyMask;
+		if (_stateTimeStamp != gp.getStateTimeStamp())changes |= StateTimeStampMask;
+		if (_version != gp.getVersion())changes |= VersionMask;
+		return changes;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/GlobalPreferencesValues.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/GlobalPreferencesValues.java
new file mode 100644
index 0000000..cdf8345
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/GlobalPreferencesValues.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.model;
+
+/**
+ * A mutable object that is used to initialize a GlobalPreference.
+ * @author karasiuk
+ *
+ */
+public class GlobalPreferencesValues {
+	public boolean disableAllValidation = GlobalPreferences.DefaultSuspend;
+	public boolean saveAutomatically = GlobalPreferences.DefaultAutoSave;
+	public boolean confirmDialog = GlobalPreferences.DefaultConfirm;
+	public boolean override = GlobalPreferences.DefaultOverride;
+	
+	/** The plug-in state time stamp. */
+	public long	stateTimeStamp;
+	
+	/** The incoming version of the framework. This is used to determine if a migration is needed.*/
+	public int		version;
+	
+	public GlobalPreferencesValues(){
+		
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/IValidatorVisitor.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/IValidatorVisitor.java
new file mode 100644
index 0000000..8c74736
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/IValidatorVisitor.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.model;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.internal.ValOperation;
+import org.eclipse.wst.validation.internal.ValType;
+
+/**
+ * This interface is implemented by objects that visit enabled validators.
+ * <p> 
+ * Usage:
+ * <pre>
+ * class Visitor implements IValidatorVisitor {
+ *    public void visit(Validator validator, IProgressMonitor monitor) {
+ *       // your code here
+ *    }
+ * }
+ * ValidatorManager vm = ValidatorManager.getDefault();
+ * vm.accept(new Visitor(), ...);
+ * </pre>
+ * </p> 
+ * <p>
+ * Clients may implement this interface.
+ * </p>
+ */
+public interface IValidatorVisitor {
+	
+	/**
+	 * Visits the given validator.
+	 * @param validator
+	 */
+	void visit(Validator validator, IProject project, ValType valType, 
+		ValOperation operation, IProgressMonitor monitor);
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/ProjectPreferences.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/ProjectPreferences.java
new file mode 100644
index 0000000..dd26add
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/ProjectPreferences.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.model;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.wst.validation.Validator;
+
+/**
+ * Validation preferences for a particular project.
+ * @author karasiuk
+ *
+ */
+public final class ProjectPreferences {
+	/*
+	 * Before this object can be considered immutable, the mutable validators need to be addressed.
+	 */
+	/** false - Default setting for the "should all the validation be suspended" setting. */ 
+	public static final boolean DefaultSuspend = false;
+	
+	/** false - Default setting for letting projects override the global settings. */
+	public static final boolean DefaultOverride = false;
+	
+	private final IProject	_project;
+
+	private final boolean 	_override;
+	private final boolean	_suspend;
+	
+	private final Validator[]	_validators;
+	
+	public ProjectPreferences(IProject project){
+		_project = project;
+		_override = DefaultOverride;
+		_suspend  = DefaultSuspend;
+		_validators = new Validator[0];
+	}
+	
+	public ProjectPreferences(IProject project, boolean override, boolean suspend, Validator[] validators){
+		_project = project;
+		_override = override;
+		_suspend = suspend;
+		_validators = validators;
+	}
+	
+	public boolean getOverride() {
+		return _override;
+	}
+	public boolean getSuspend() {
+		return _suspend;
+	}
+	
+	/**
+	 * Answer the validators that have been registered for this project.
+	 * @return an empty array if there are no validators.
+	 */
+	public Validator[] getValidators() {
+		return _validators;
+	}
+	
+	public IProject getProject() {
+		return _project;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/ValidatorHelper.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/ValidatorHelper.java
new file mode 100644
index 0000000..288f226
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/ValidatorHelper.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.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.model;
+
+import org.eclipse.wst.validation.internal.ValidatorMutable;
+
+/**
+ * Implement some common validator methods, that don't need to be part of the API.
+ * 
+ * @author karasiuk
+ *
+ */
+public final class ValidatorHelper {
+	
+	/**
+	 * Answer true if this validator already has an exclude filter.
+	 */
+	public static boolean hasExcludeGroup(ValidatorMutable v){
+		for (FilterGroup group : v.getGroups())if (group.isExclude())return true;
+		return false;		
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/package.html b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/package.html
new file mode 100644
index 0000000..4b88f6b
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/package.html
@@ -0,0 +1,10 @@
+<html>
+<body>
+<h1>Validation Framework</h1>
+<h3>Build Based Validation</h3>
+The main class for build based validation is the 
+<a href="ValBuilderJob.html">ValBuilderJob</a>. This gets triggered as part of the
+build mechanism. It reacts to resource change events, and from that determines what needs to be 
+validated.
+</body>
+</html>
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/package.html b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/package.html
new file mode 100644
index 0000000..caa9b25
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/package.html
@@ -0,0 +1,51 @@
+<html>
+<head>
+<title>Validation Framework</title>
+</head>
+<body>
+<p>A framework for calling validators that are build based.</p>
+<p>
+There are two main types of validation, <b>build based</b> and 
+<b>as you type</b>. This framework supports build based
+validation. If auto build is turned on then the validators are called
+when the user saves their file. If auto build is not turned on then
+the validators are called when the user starts a build.</p>
+<p>This framework was added to WTP in version 3.0.</p>
+<h3>Dependency Support</h3>
+<p>Sometimes resources depend on other resources, to determine whether they are 
+valid or not. An example would be that an XML resource could depend on a DTD. If at some 
+point in the future the DTD changes, then the dependent XML resource should be 
+revalidated to ensure that it still meets the requirements of the changed DTD 
+file. In order to do this efficiently, there needs to be an association between 
+the DTD and all the resources that depend on it.<p>To be as efficient as possible, the validation framework allows 
+this dependency information to be returned as part of a
+<a href="AbstractValidator.html#validate(org.eclipse.core.resources.IResource, int, ValidationState, org.eclipse.core.runtime.IProgressMonitor)">
+validate operation</a>. Since the validator needed to figure this out anyways, 
+why not pass this information back to the framework, so that it can be saved. 
+This saves the cost of having to parse the file at some later point in time 
+(when the file is probably sitting cold on disk). The fewer times that we need 
+to open, read and/or parse the same file, will improve the performance of the 
+product.
+<p>In particular when the validate method returns, a
+<a href="ValidationResult.html">ValidationResult</a> must be returned, inside of 
+this result, all your dependencies need to be specified with the
+<a href="ValidationResult.html#setDependsOn(org.eclipse.core.resources.IResource[])">
+setDependsOn</a> method.<p>In addition to keeping the dependency information 
+up-to-date through the normal course of validation, direct access is also 
+provided to the dependency support through the
+<a href="ValidationFramework.html#getDependencyIndex()">getDependencyIndex</a> 
+method. The <a href="IDependencyIndex.html">IDependencyIndex</a> allows you to 
+directly manipulate the dependency information for a validator.
+<h3>Entry Points into the Validation Framework</h3>
+<p>Here are some of the points where the platform calls into the framework:</p>
+<ul>
+<li><b>Builder</b> - ValidationBuilder</li>
+<li><b>IFacetedProjectListener</b> - ValManager</li>
+<li><b>IJobChangeListener</b> - ValidationOperation, ValidationOperation.ValidationLauncherJob</li>
+<li><b>IProjectChangeListener</b> - ValManager</li>
+<li><b>IPropertyChangeListener</b> - ValidationConfiguration, DisabledResourceManager</li>
+<li><b>IResourceChangeListener</b> - EventManger</li>
+<li><b>IValChangedListener</b> - ValManager, DisabledValidatorManager</li>
+</ul>
+</body>
+</html>
diff --git a/plugins/org.eclipse.wst.validation/xsds/exclude.exsd b/plugins/org.eclipse.wst.validation/xsds/exclude.exsd
new file mode 100644
index 0000000..92d7647
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/xsds/exclude.exsd
@@ -0,0 +1,281 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.wst.validation" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.wst.validation" id="exclude" name="Validator Exclusion"/>
+      </appinfo>
+      <documentation>
+         A way to add additional exclusion filters to a V2 validator.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="validator" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A short id that is unique within the plug-in, so that this set of extra exclusion filters can be identified.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  The short user friendly name for the exclusion.
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="validator">
+      <annotation>
+         <documentation>
+            Identifies the validator that is being extended.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="exclude"/>
+         </sequence>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The fully qualifed validator id that is being extended.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="identifier"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="exclude">
+      <annotation>
+         <documentation>
+            This contains a set of exclusion rules, used in filtering which resources get validated. If any of these rules are matched, then the validator is not called on this resource.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="rules"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="fileext">
+      <annotation>
+         <documentation>
+            A file extension, for example html.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="ext" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The file extension, for example html.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="caseSensitive" type="boolean">
+            <annotation>
+               <documentation>
+                  If the file extension is case sensitive, then this needs to be set to true.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="projectNature">
+      <annotation>
+         <documentation>
+            Used to filter on project natures.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The fully qualified project nature id, for example &quot;org.eclipse.jdt.core.javanature&quot;.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="file">
+      <complexType>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The file or folder name. The file name can be fully qualified, that is it starts with a leading slash (&quot;/&quot;), or it can be a relative name. Folder names are separated with the forward slash (&quot;/&quot;) character.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="caseSensitive" type="boolean">
+            <annotation>
+               <documentation>
+                  If the file name is not case senstitive, then this needs to be set to false.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="type" use="required">
+            <annotation>
+               <documentation>
+                  Type of name, there are three choices. &lt;ul&gt;&lt;li&gt;folder - specifies a project relative folder name.&lt;/li&gt;&lt;li&gt;file - a simple file name (i.e. no path information).&lt;/li&gt;&lt;li&gt;full - a fully qualified (project relative) file name.&lt;/li&gt;&lt;/ul&gt;
+               </documentation>
+            </annotation>
+            <simpleType>
+               <restriction base="string">
+                  <enumeration value="folder">
+                  </enumeration>
+                  <enumeration value="file">
+                  </enumeration>
+                  <enumeration value="full">
+                  </enumeration>
+               </restriction>
+            </simpleType>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="rules">
+      <annotation>
+         <documentation>
+            A set of rules for determining if a resource is passed to this validator or not. The rules are OR&apos;ed together.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="fileext" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="file" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="projectNature" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="facet" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="contentType" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="pattern" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="facet">
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The facet id.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="contentType">
+      <annotation>
+         <documentation>
+            Used to filter based on content types.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The content type id.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="exactMatch" type="boolean">
+            <annotation>
+               <documentation>
+                  Set to true if the content type needs to match exactly. Set to false if sub types are considered matches as well.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+   <element name="pattern">
+      <annotation>
+         <documentation>
+            Holds a regualr expression, that matches the resource&apos;s project relative name.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="regex" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Holds a Java regular expression. See the class java.util.regex.Pattern for more details. This regular expression is matched against a resource&apos;s project relative path, after that path has been converted into a portable path.
+&lt;p&gt;The path will always start with a forward slash (/) so that folder names can be more easily matched.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="caseSensitive" type="boolean">
+            <annotation>
+               <documentation>
+                  If the file name is not case senstitive, then this needs to be set to false.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         WebTools 3.0
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         &lt;!-- A plug-in is turning off the T1A validator for projects that have the ModuleCoreNature --&gt;
+ &lt;extension
+       id=&quot;exclude1&quot;
+       point=&quot;org.eclipse.wst.validation.exclude&quot;&gt;
+    &lt;validator
+          id=&quot;org.eclipse.wst.common.tests.validation.T1A&quot;&gt;
+       &lt;exclude&gt;
+          &lt;rules&gt;
+             &lt;projectNature
+                   id=&quot;org.eclipse.jst.j2ee.ModuleCoreNature&quot;&gt;
+             &lt;/projectNature&gt;
+          &lt;/rules&gt;
+       &lt;/exclude&gt;
+    &lt;/validator&gt;
+ &lt;/extension&gt;
+
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiInfo"/>
+      </appinfo>
+      <documentation>
+         Provisional API.
+      </documentation>
+   </annotation>
+
+
+
+
+</schema>
diff --git a/plugins/org.eclipse.wst.validation/xsds/referencialFileExtSchema.exsd b/plugins/org.eclipse.wst.validation/xsds/referencialFileExtSchema.exsd
index a30b719..fcfe873 100644
--- a/plugins/org.eclipse.wst.validation/xsds/referencialFileExtSchema.exsd
+++ b/plugins/org.eclipse.wst.validation/xsds/referencialFileExtSchema.exsd
@@ -59,7 +59,7 @@
          <attribute name="class" type="string" use="required">
             <annotation>
                <documentation>
-                  
+                  This class must implement org.eclipse.wst.validation.internal.operations.ReferencialFileValidator. 
                </documentation>
             </annotation>
          </attribute>
diff --git a/plugins/org.eclipse.wst.validation/xsds/validationHelper.exsd b/plugins/org.eclipse.wst.validation/xsds/validationHelper.exsd
index d6aece6..fd854dc 100644
--- a/plugins/org.eclipse.wst.validation/xsds/validationHelper.exsd
+++ b/plugins/org.eclipse.wst.validation/xsds/validationHelper.exsd
@@ -47,7 +47,7 @@
          <attribute name="helperClass" type="string" use="required">
             <annotation>
                <documentation>
-                  
+                  The class must implement org.eclipse.wst.validation.internal.IProjectValidationHelper.
                </documentation>
             </annotation>
          </attribute>
diff --git a/plugins/org.eclipse.wst.validation/xsds/validationSelectionHandler.exsd b/plugins/org.eclipse.wst.validation/xsds/validationSelectionHandler.exsd
index 9e20f4a..acffbfa 100644
--- a/plugins/org.eclipse.wst.validation/xsds/validationSelectionHandler.exsd
+++ b/plugins/org.eclipse.wst.validation/xsds/validationSelectionHandler.exsd
@@ -51,7 +51,7 @@
          <attribute name="handlerClass" type="string" use="required">
             <annotation>
                <documentation>
-                  
+                  The class must implement the IValidationSelectionHandler interface.
                </documentation>
             </annotation>
          </attribute>
diff --git a/plugins/org.eclipse.wst.validation/xsds/validator.exsd b/plugins/org.eclipse.wst.validation/xsds/validator.exsd
new file mode 100644
index 0000000..fcb4818
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/xsds/validator.exsd
@@ -0,0 +1,420 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.wst.validation" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.wst.validation" id="validator-v2" name="Validator V2"/>
+      </appinfo>
+      <documentation>
+         This is used to register a validator to the validation framework (version 2). In addition to specifying the validator to invoke, it registers a set of default filter rules, to control which resources are passsed to the validator.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="validator"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A short id that is unique within the plug-in, so that this validator can be identified.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The short user friendly name of the validator.
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="validator">
+      <annotation>
+         <documentation>
+            Defines a validator to the validation framework.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="include" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="exclude" minOccurs="0" maxOccurs="1"/>
+            <element ref="messageCategory" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="group" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The class that implements the validator.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.wst.validation.AbstractValidator"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="build" type="boolean">
+            <annotation>
+               <documentation>
+                  Is this validator enabled by default for build based validations? The default is true.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="manual" type="boolean">
+            <annotation>
+               <documentation>
+                  Is this validator enabled by default for manual based validations? The default is true.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="version" type="string">
+            <annotation>
+               <documentation>
+                  The version of the definition. It is a simple integer. If not specified the version is assumed to be 1.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="sourceid" type="string">
+            <annotation>
+               <documentation>
+                  If this validator also serves as an as-you-type validator (also know as an ISourceValidator) then it&apos;s source id is specified here, so that the two validators can be associated with one another.
+By source id, we mean the id that is used in the org.eclipse.wst.sse.ui.sourceValidation extension point
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="markerId" type="string">
+            <annotation>
+               <documentation>
+                  If your validator wishes to use it&apos;s own marker, it can do so by supplying that marker id here.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="include">
+      <annotation>
+         <documentation>
+            This contains a set of inclusion rules, which are used in filtering which resources get validated. At least one of these rules must be satisfied in order for the validator to be called on the particular resource.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="rules"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="exclude">
+      <annotation>
+         <documentation>
+            This contains a set of exclusion rules, used in filtering which resources get validated. If any of these rules are matched, then the validator is not called on this resource.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="rules"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="fileext">
+      <annotation>
+         <documentation>
+            A file extension, for example html.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="ext" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The file extension, for example html.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="caseSensitive" type="boolean">
+            <annotation>
+               <documentation>
+                  If the file extension is case sensitive, then this needs to be set to true.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="projectNature">
+      <annotation>
+         <documentation>
+            Used to filter on project natures.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The fully qualified project nature id, for example &quot;org.eclipse.jdt.core.javanature&quot;.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="file">
+      <complexType>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The file or folder name. The file name can be fully qualified, that is it starts with a leading slash (&quot;/&quot;), or it can be a relative name. Folder names are separated with the forward slash (&quot;/&quot;) character.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="caseSensitive" type="boolean">
+            <annotation>
+               <documentation>
+                  If the file name is not case senstitive, then this needs to be set to false.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="type" use="required">
+            <annotation>
+               <documentation>
+                  Type of name, there are three choices. &lt;ul&gt;&lt;li&gt;folder - specifies a project relative folder name.&lt;/li&gt;&lt;li&gt;file - a simple file name (i.e. no path information).&lt;/li&gt;&lt;li&gt;full - a fully qualified (project relative) file name.&lt;/li&gt;&lt;/ul&gt;
+               </documentation>
+            </annotation>
+            <simpleType>
+               <restriction base="string">
+                  <enumeration value="folder">
+                  </enumeration>
+                  <enumeration value="file">
+                  </enumeration>
+                  <enumeration value="full">
+                  </enumeration>
+               </restriction>
+            </simpleType>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="rules">
+      <annotation>
+         <documentation>
+            A set of rules for determining if a resource is passed to this validator or not. The rules are OR&apos;ed together.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="fileext" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="file" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="projectNature" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="facet" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="contentType" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="pattern" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="facet">
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The facet id.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="version" type="string">
+            <annotation>
+               <documentation>
+                  A version expression that can be used to futher qualify the match. If not specifed, then versions are not used as a criteria for selecting the facet. The syntax of this expression, is the same syntax that is used by the facet framework.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="group">
+      <annotation>
+         <documentation>
+            Declares that this validator belongs to this validation group.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The fully qualified ID of the validation group to which this validator belongs.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="identifier"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="contentType">
+      <annotation>
+         <documentation>
+            Used to filter based on content types.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The content type id.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="exactMatch" type="boolean">
+            <annotation>
+               <documentation>
+                  Set to true if the content type needs to match exactly. Set to false if sub types are considered matches as well.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="messageCategory">
+      <annotation>
+         <documentation>
+            Used to group together a set of messages, where the user can change the message severity of all the messages in the group. This is similar to the support in the JDT, where for example a user can specify whether used methods should be errors, warnings or ignored.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A simple id that is unique within the scope of this validator.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="label" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A short, one line label that is displayed to the end user, that describes the message category.
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="severity">
+            <annotation>
+               <documentation>
+                  The default severity for this category.
+               </documentation>
+            </annotation>
+            <simpleType>
+               <restriction base="string">
+                  <enumeration value="error">
+                  </enumeration>
+                  <enumeration value="warning">
+                  </enumeration>
+                  <enumeration value="ignore">
+                  </enumeration>
+               </restriction>
+            </simpleType>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="pattern">
+      <annotation>
+         <documentation>
+            Holds a regualr expression, that matches the resource&apos;s project relative name.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="regex" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Holds a Java regular expression. See the class java.util.regex.Pattern for more details. This regular expression is matched against a resource&apos;s project relative path, after that path has been converted into a portable path.
+&lt;p&gt;The path will always start with a forward slash (/) so that folder names can be more easily matched.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="caseSensitive" type="boolean">
+            <annotation>
+               <documentation>
+                  If the file name is not case senstitive, then this needs to be set to false.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiInfo"/>
+      </appinfo>
+      <documentation>
+         Provisional API.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         WebTools 3.0.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         An example of a validator that will be called on resources that have html or htm file extensions.
+&lt;pre&gt;
+   &lt;extension
+         point=&quot;org.eclipse.wst.validation.validator&quot;
+         id=&quot;Test&quot; name=&quot;%Validator.Name&quot;&gt;
+      &lt;validator class=&quot;org.eclipse.wst.validation.test.TestValidator&quot;&gt;
+         &lt;include&gt;
+            &lt;rules&gt;
+               &lt;fileext ext=&quot;html&quot;/&gt;
+               &lt;fileext ext=&quot;htm&quot;/&gt;
+            &lt;/rules&gt;
+         &lt;/include&gt;
+      &lt;/validator&gt;
+   &lt;/extension&gt;
+&lt;/pre&gt;
+      </documentation>
+   </annotation>
+
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         Copyright (c) 2007,2008 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
index d97b916..25d2602 100644
--- a/plugins/org.eclipse.wst.validation/xsds/validatorExtSchema.exsd
+++ b/plugins/org.eclipse.wst.validation/xsds/validatorExtSchema.exsd
@@ -20,22 +20,25 @@
          <attribute name="point" type="string" use="required">

             <annotation>

                <documentation>

-                  a fully qualified identifier of the target extension point

+                  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

+                  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

+                  An optional name of the extension instance

                </documentation>

+               <appInfo>

+                  <meta.attribute translatable="true"/>

+               </appInfo>

             </annotation>

          </attribute>

       </complexType>

@@ -44,15 +47,15 @@
    <element name="validator">

       <complexType>

          <sequence>

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

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

-            <element ref="enablement"/>

+            <element ref="projectNature" minOccurs="0" maxOccurs="unbounded"/>

+            <element ref="filter" minOccurs="0" maxOccurs="unbounded"/>

+            <element ref="enablement" minOccurs="0" maxOccurs="unbounded"/>/>

             <element ref="helper"/>

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

             <element ref="run"/>

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

             <element ref="facet" minOccurs="0" maxOccurs="unbounded"/>

-            

+            <element ref="contentTypeBinding" minOccurs="0" maxOccurs="unbounded"/>

          </sequence>

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

             <annotation>

@@ -91,6 +94,30 @@
          </attribute>

       </complexType>

    </element>

+   

+   

+   <element name="contentTypeBinding">

+      <annotation>

+         <appInfo>

+            <meta.element labelAttribute="contentTypeId"/>

+         </appInfo>

+         <documentation>

+                        Associates a particular content type with the current validator, and enables the validator to be run on resources of the specified content 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>

+   

+   

+   

 

    <element name="filter">

       <complexType>

diff --git a/plugins/org.eclipse.wst.validation/xsds/validatorgroup.exsd b/plugins/org.eclipse.wst.validation/xsds/validatorgroup.exsd
new file mode 100644
index 0000000..df05cb1
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/xsds/validatorgroup.exsd
@@ -0,0 +1,161 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.wst.validation" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.wst.validation" id="validatorGroup" name="Validator Group"/>
+      </appinfo>
+      <documentation>
+         Defines a grouping for validators with listeners notified of group members&apos; activites.  Useful for pre-caching common information used by multiple validators and disposing of that information when they&apos;re all done.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="group" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="identifier">
+            <annotation>
+               <documentation>
+                  A unique identifier for this extension
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  A name for this extension
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="listener">
+      <annotation>
+         <documentation>
+            A listener for activities in this group.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The listener&apos;s class.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.wst.validation.IValidatorGroupListener"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="group">
+      <annotation>
+         <documentation>
+            Declares a validator group.  A group may have multiple listeners.
+         </documentation>
+      </annotation>
+      <complexType>
+         <choice>
+            <element ref="listener" minOccurs="1" maxOccurs="unbounded"/>
+         </choice>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="identifier"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         WebTools 3.0
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         Define a listener that simply prints that it has been called.
+&lt;pre&gt;
+&lt;extension point=&quot;org.eclipse.wst.validation.validatorGroup&quot;&gt;
+   &lt;group id=&quot;validatorGroup&quot;&gt;
+     &lt;listener class=&quot;org.eclipse.wst.validation.example.ValidatorGroupListener&quot;/&gt;
+   &lt;/group&gt;
+&lt;/extension&gt;
+
+public class org.eclipse.wst.validation.example.ValidatorGroupListener implements IValidatorGroupListener {
+
+  public ValidatorGroupListener() {
+  }
+
+  public void validationFinishing(IResource resource, IProgressMonitor monitor, ValType valType, ValOperation operation) {
+   System.out.println(&quot;Finishing:&quot; + resource.getFullPath());
+  }
+
+  public void validationStarting(IResource resource, IProgressMonitor monitor, ValType valType, ValOperation operation) {
+   System.out.println(&quot;Starting:&quot; + resource.getFullPath());
+  }
+}
+ 
+&lt;extension id=&quot;id&quot; name=&quot;name&quot; point=&quot;org.eclipse.wst.validation.validatorV2&quot;&gt;
+  &lt;validator class=&quot;org.eclipse.wst.validation.example.Validator&quot;&gt;
+    &lt;group id=&quot;org.eclipse.wst.validation.example.validatorGroup&quot;/&gt;
+  &lt;/validator&gt;
+&lt;/extension&gt;
+&lt;/pre&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         Provisional API.
+      </documentation>
+   </annotation>
+
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         Copyright (c) 2008 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>