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 f6f691d..954d52f 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
@@ -13,11 +13,6 @@
 
 <h2>org.eclipse.wst.common_core.feature</h2>
 
-<p>Bug <a href='https://bugs.eclipse.org/267367'>267367</a>. should disable deferred DOM expansion in parser used by DOMUtilities</p>
 <p>Bug <a href='https://bugs.eclipse.org/279175'>279175</a>. An internal error occurred during: "Validation TestEJB".</p>
-<p>Bug <a href='https://bugs.eclipse.org/283634'>283634</a>. ProjectResourceSetImpl getResources() cause deadlock with call to SynchronizedResourcesEList</p>
-<p>Bug <a href='https://bugs.eclipse.org/284041'>284041</a>. EOF in Validation Framework</p>
-<p>Bug <a href='https://bugs.eclipse.org/285071'>285071</a>. ComponentResolver does not resolve absolute references to the context root</p>
-<p>Bug <a href='https://bugs.eclipse.org/286403'>286403</a>. Validation Framework doesn't work after facet change</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 eff5744..96a51e0 100644
--- a/features/org.eclipse.wst.common_core.feature.patch/feature.properties
+++ b/features/org.eclipse.wst.common_core.feature.patch/feature.properties
@@ -27,12 +27,7 @@
 description=\
 Contains fixes described in the following bugillia(s):\n\
 \n\
-Bug https://bugs.eclipse.org/267367 should disable deferred DOM expansion in parser used by DOMUtilities\n\
 Bug https://bugs.eclipse.org/279175 An internal error occurred during: "Validation TestEJB".\n\
-Bug https://bugs.eclipse.org/283634 ProjectResourceSetImpl getResources() cause deadlock with call to SynchronizedResourcesEList\n\
-Bug https://bugs.eclipse.org/284041 EOF in Validation Framework\n\
-Bug https://bugs.eclipse.org/285071 ComponentResolver does not resolve absolute references to the context root\n\
-Bug https://bugs.eclipse.org/286403 Validation Framework doesn't work after facet change\n\
 \n\
 # "copyright" property - text of the "Feature Update Copyright"
 copyright=\
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 8955033..bed7d12 100644
--- a/features/org.eclipse.wst.common_core.feature.patch/feature.xml
+++ b/features/org.eclipse.wst.common_core.feature.patch/feature.xml
@@ -22,31 +22,10 @@
    </requires>
 
    <plugin
-         id="org.eclipse.wst.common.emf"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.common.modulecore"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
          id="org.eclipse.wst.validation"
          download-size="0"
          install-size="0"
          version="0.0.0"
          unpack="false"/>
 
-   <plugin
-         id="org.eclipse.jem.util"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
 </feature>
diff --git a/plugins/org.eclipse.jem.util/META-INF/MANIFEST.MF b/plugins/org.eclipse.jem.util/META-INF/MANIFEST.MF
index 3609c55..9e05ebc 100644
--- a/plugins/org.eclipse.jem.util/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jem.util/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jem.util; singleton:=true
-Bundle-Version: 2.0.102.qualifier
+Bundle-Version: 2.0.101.qualifier
 Bundle-Activator: org.eclipse.jem.util.plugin.JEMUtilPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/internal/util/emf/workbench/ProjectResourceSetImpl.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/internal/util/emf/workbench/ProjectResourceSetImpl.java
index 7ad24b3..d6473fc 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/internal/util/emf/workbench/ProjectResourceSetImpl.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/internal/util/emf/workbench/ProjectResourceSetImpl.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 /*
  *  $$RCSfile: ProjectResourceSetImpl.java,v $$
- *  $$Revision: 1.21.2.1.2.1 $$  $$Date: 2009/08/06 22:48:54 $$ 
+ *  $$Revision: 1.21.2.1 $$  $$Date: 2009/05/14 00:17:56 $$ 
  */
 package org.eclipse.jem.internal.util.emf.workbench;
 
@@ -20,8 +20,6 @@
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.content.IContentDescription;
-import org.eclipse.core.runtime.jobs.ILock;
-import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.impl.NotificationImpl;
 import org.eclipse.emf.common.util.EList;
@@ -52,290 +50,197 @@
 		 * 
 		 */
 		private static final long serialVersionUID = 1L;
-		private final ILock lock = Job.getJobManager().newLock();
+		private final Object lock = new Object();
 
 		public void move(int newPosition, E object) {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				super.move(newPosition, object);
-			} finally {
-				lock.release();
 			}
+
 		}
 
 		public E move(int newPosition, int oldPosition) {
 
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.move(newPosition, oldPosition);
-			} finally {
-				lock.release();
 			}
 		}
 
 		public boolean add(E o) {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.add(o);
-			} finally {
-				lock.release();
 			}
 		}
 
 		public void add(int index, E element) {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				super.add(index, element);
-			} finally {
-				lock.release();
 			}
+
 		}
 
 		public boolean addAll(Collection<? extends E> c) {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.addAll(c);
-			} finally {
-				lock.release();
 			}
 		}
 
 		public boolean addAll(int index, Collection<? extends E> c) {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.addAll(index, c);
-			} finally {
-				lock.release();
 			}
 		}
 
 		public void clear() {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				super.clear();
-			} finally {
-				lock.release();
 			}
+
 		}
 
 		public boolean contains(Object o) {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.contains(o);
-			} finally {
-				lock.release();
 			}
 		}
 
 		public boolean containsAll(Collection<?> c) {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.containsAll(c);
-			} finally {
-				lock.release();
 			}
 		}
 
 		public boolean equals(Object o) {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.equals(o);
-			} finally {
-				lock.release();
 			}
 		}
 
 		public E get(int index) {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.get(index);
-			} finally {
-				lock.release();
 			}
 		}
 
 		public int hashCode() {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.hashCode();
-			} finally {
-				lock.release();
 			}
 		}
 
 		public int indexOf(Object o) {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.indexOf(o);
-			} finally {
-				lock.release();
 			}
 		}
 
 		public boolean isEmpty() {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.isEmpty();
-			} finally {
-				lock.release();
 			}
 		}
 
 		public Iterator<E> iterator() {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.iterator();
-			} finally {
-				lock.release();
 			}
 		}
 
 		public int lastIndexOf(Object o) {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.lastIndexOf(o);
-			} finally {
-				lock.release();
 			}
 		}
 
 		public ListIterator<E> listIterator() {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.listIterator();
-			} finally {
-				lock.release();
 			}
 		}
 
 		public ListIterator<E> listIterator(int index) {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.listIterator(index);
-			} finally {
-				lock.release();
 			}
 		}
 
 		public boolean remove(Object o) {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.remove(o);
-			} finally {
-				lock.release();
 			}
 		}
 
 		public E remove(int index) {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.remove(index);
-			} finally {
-				lock.release();
 			}
 		}
 
 		public boolean removeAll(Collection<?> c) {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.removeAll(c);
-			} finally {
-				lock.release();
 			}
 		}
 
 		public boolean retainAll(Collection<?> c) {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.retainAll(c);
-			} finally {
-				lock.release();
 			}
 		}
 
 		public E set(int index, E element) {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.set(index, element);
-			} finally {
-				lock.release();
 			}
 		}
 
 		public int size() {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.size();
-			} finally {
-				lock.release();
 			}
 		}
 
 		public List<E> subList(int fromIndex, int toIndex) {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.subList(fromIndex, toIndex);
-			} finally {
-				lock.release();
 			}
 		}
 
 		public Object[] toArray() {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.toArray();
-			} finally {
-				lock.release();
 			}
 		}
 
 		public <T> T[] toArray(T[] a) {
 			
-			try {
-				lock.acquire();
+			synchronized(lock) {
 				return super.toArray(a);
-			} finally {
-				lock.release();
-			}
-		}
-
-		// release lock during notifications
-		protected void dispatchNotification(Notification notification) {
-
-			int lockDepth;
-			lockDepth = lock.getDepth();
-			try {
-				for(int i=0; i<lockDepth; i++)
-                    lock.release();
-				super.dispatchNotification(notification);
-			} finally {
-				for(int i=0; i<lockDepth; i++)
-                    lock.acquire();  // Re-acquire lock after notify
 			}
 		}
 
diff --git a/plugins/org.eclipse.wst.common.emf/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.emf/META-INF/MANIFEST.MF
index 4175e36..9328000 100644
--- a/plugins/org.eclipse.wst.common.emf/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.emf/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.common.emf; singleton:=true
-Bundle-Version: 1.1.205.qualifier
+Bundle-Version: 1.1.204.qualifier
 Bundle-Activator: org.eclipse.wst.common.internal.emf.plugin.EcoreUtilitiesPlugin
 Bundle-Vendor: %pluginProvider
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DOMUtilities.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DOMUtilities.java
index e4eca5f..44f9669 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DOMUtilities.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DOMUtilities.java
@@ -502,11 +502,6 @@
 			dbf.setValidating(false);
 			Logger.getLogger().log("Warning: Parser does not support \"http://apache.org/xml/features/validation/schema\". Validation will be disabled."); //$NON-NLS-1$
 		}
-		try {
-			dbf.setAttribute("http://apache.org/xml/features/dom/defer-node-expansion", Boolean.FALSE);
-		} catch (IllegalArgumentException ignore) {
-			Logger.getLogger().log("Warning: Parser does not support \"http://apache.org/xml/features/dom/defer-node-expansion\"."); //$NON-NLS-1$
-		}
 		dbf.setExpandEntityReferences(options.isExpandEntityRefererences());
 		DocumentBuilder result = dbf.newDocumentBuilder();
 		result.setErrorHandler(new ErrorHandler() {
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 c8f6188..522a71f 100644
--- a/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name.0
 Bundle-Vendor: %provider
 Bundle-SymbolicName: org.eclipse.wst.common.modulecore; singleton:=true
-Bundle-Version: 1.1.207.qualifier
+Bundle-Version: 1.1.206.qualifier
 Bundle-Activator: org.eclipse.wst.common.componentcore.internal.ModulecorePlugin
 Bundle-Localization: plugin
 Export-Package: org.eclipse.wst.common.componentcore,
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 cab5bf3..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,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2009 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
@@ -191,9 +191,6 @@
 				IPath resolvedRuntimePath = null;
 				if (systemId.startsWith(ROOT_PATH_STRING)) {
 					resolvedRuntimePath = new Path(systemId);
-					if (resolvedRuntimePath.segmentCount() > 1 && resolvedRuntimePath.segment(0).equals(ComponentUtilities.getServerContextRoot(file.getProject()))) {
-						resolvedRuntimePath = resolvedRuntimePath.removeFirstSegments(1);
-					}
 				}
 				else {
 					resolvedRuntimePath = new Path(virtualResources[i].getRuntimePath().removeLastSegments(1).append(systemId).toString());
diff --git a/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF
index dd1631f..8fb0e19 100644
--- a/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name.0
 Bundle-SymbolicName: org.eclipse.wst.validation; singleton:=true
-Bundle-Version: 1.2.11.qualifier
+Bundle-Version: 1.2.10.qualifier
 Bundle-Activator: org.eclipse.wst.validation.internal.plugin.ValidationPlugin
 Bundle-Vendor: %Bundle-Vendor.0
 Bundle-Localization: plugin
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 6b26bf6..90da739 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
@@ -337,7 +337,6 @@
 				return true;
 			IContainer[] outputContainers = helper.getOutputContainers(project);
 			IContainer[] sourceContainers = helper.getSourceContainers(project);
-			if(outputContainers != null && sourceContainers != null){
 			for (int i=0; i<outputContainers.length; i++) {
 				String outputPath = outputContainers[i].getProjectRelativePath().makeAbsolute().toString();
                 String filePath = file.getProjectRelativePath().makeAbsolute().toString();
@@ -353,7 +352,6 @@
 				}
 			}
 		}
-		}
 		return true;
 	}
 		
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
index 279f2fb..388738c 100644
--- 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
@@ -12,7 +12,6 @@
 
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
-import java.io.EOFException;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
@@ -157,9 +156,6 @@
 					}					
 				}				
 			}
-			catch (EOFException e){
-				Tracing.log("Unable to read the dependency index file because of EOF exception"); 
-			}
 			catch (IOException e){
 				error = true;
 				ValidationPlugin.getPlugin().handleException(e);
@@ -251,11 +247,10 @@
 	public synchronized void saving(ISaveContext context) throws CoreException {
 		if (!_dirty)return;
 		_dirty = false;
-		boolean error = false;
+		
 		DataOutputStream out = null;
-		File f = null;
 		try {
-			f = getIndexLocation();
+			File f = getIndexLocation();
 			out = new DataOutputStream(new FileOutputStream(f));
 			out.writeInt(CurrentVersion);
 			Map<String, Set<DependsResolved>> map = compress(_dependsOn);
@@ -274,12 +269,10 @@
 			}
 		}
 		catch (IOException e){
-			error = true;
 			ValidationPlugin.getPlugin().handleException(e);
 		}
-		finally {		
+		finally {
 			Misc.close(out);
-			if (error)f.delete();
 		}
 	}
 
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
index 2c3a4bd..9214a19 100644
--- 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
@@ -1224,7 +1224,6 @@
 	}
 
 	public void handleEvent(IFacetedProjectEvent event) {
-		_configNumber.incrementAndGet();
 		projectChanged(event.getProject().getProject());
 	}
 
