[237467] Edit Model throws exception when closing unsaved file
[238160] Not finding adapter after target object removed
diff --git a/bundles/org.eclipse.wst.xml.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.xml.core/META-INF/MANIFEST.MF
index 452fd52..af632b8 100644
--- a/bundles/org.eclipse.wst.xml.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.wst.xml.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.xml.core; singleton:=true
-Bundle-Version: 1.1.300.qualifier
+Bundle-Version: 1.1.301.qualifier
 Bundle-Activator: org.eclipse.wst.xml.core.internal.XMLCorePlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.wst.xml.core/src-emfModelSynch/org/eclipse/wst/xml/core/internal/emf2xml/EMF2DOMSSEAdapter.java b/bundles/org.eclipse.wst.xml.core/src-emfModelSynch/org/eclipse/wst/xml/core/internal/emf2xml/EMF2DOMSSEAdapter.java
index 83d6f5e..95e4f3c 100644
--- a/bundles/org.eclipse.wst.xml.core/src-emfModelSynch/org/eclipse/wst/xml/core/internal/emf2xml/EMF2DOMSSEAdapter.java
+++ b/bundles/org.eclipse.wst.xml.core/src-emfModelSynch/org/eclipse/wst/xml/core/internal/emf2xml/EMF2DOMSSEAdapter.java
@@ -11,10 +11,8 @@
 
 package org.eclipse.wst.xml.core.internal.emf2xml;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
-import java.util.List;
 
 import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.ecore.EObject;
@@ -277,7 +275,7 @@
 		//Assert.isNotNull(childMap.getChildAdapterClass());
 		Assert.isNotNull(node);
 
-		EMF2DOMAdapter adapter = primGetExistingAdapterForCreate(node);
+		EMF2DOMAdapter adapter = primGetExistingAdapter(node);
 
 		if (adapter != null) {
 			if (adapter.isMOFProxy() || adapter.getTarget() == null) {
@@ -298,7 +296,7 @@
 		// adapted. For instance a subtree that maps to a MOF attribute
 		// setting.
 		if (childNode.getNodeType() == Node.ELEMENT_NODE) {
-			EMF2DOMAdapter attrAdapter = primGetExistingAdapterForCreate(childNode);
+			EMF2DOMAdapter attrAdapter = primGetExistingAdapter(childNode);
 
 			if (attrAdapter == null || attrAdapter.getNode() != getNode()) {
 				// If the node is adapted, but not by this adapter then remove
@@ -314,62 +312,19 @@
 			}
 		}
 	}
-
+	
 	protected EMF2DOMAdapter primGetExistingAdapter(Node aNode) {
 		INodeNotifier sseNode = (INodeNotifier) aNode;
 		Collection adapters = sseNode.getAdapters();
-		List sse2domAdapters = new ArrayList();
 		for (Iterator iterator = adapters.iterator(); iterator.hasNext();) {
 			INodeAdapter adapter = (INodeAdapter) iterator.next();
 			// First Check if it's an EMF2DOMAdapter
 			if (adapter != null && adapter.isAdapterForType(EMF2DOMAdapter.ADAPTER_CLASS)) {
 				// Cast to EMF2DOMAdapter
 				EMF2DOMAdapter e2DAdapter = (EMF2DOMAdapter) adapter;
-				// Check if targets are the resources
-				if (getTarget() instanceof Resource) {
-					/*
-					 * Now check if it's the right one (Multiple resources
-					 * could be attached)
-					 */
-					if (e2DAdapter.getTarget() == getTarget()) {
-						return e2DAdapter;
-					}
-					else {
-						sse2domAdapters.add(e2DAdapter);
-						continue;
-					}
-				} else {
-					// Check if targets are EObjects with the same resources
-					EObject myTarget = (EObject) getTarget();
-					EObject adapterTarget = (EObject) e2DAdapter.getTarget();
-					/*
-					 * Now check if it's the right one (Multiple resources could
-					 * be attached)
-					 */
-					if (adapterTarget != null && myTarget != null && adapterTarget.eResource() == myTarget.eResource()) {
-						return e2DAdapter;
-					}
-					sse2domAdapters.add(e2DAdapter);
-				}
-			}
-		}
-		if (sse2domAdapters.size() == 1) {
-			return (EMF2DOMAdapter) sse2domAdapters.get(0);
-		}
-			
-		//return (EMF2DOMAdapter) ((IDOMNode) aNode).getExistingAdapter(EMF2DOMAdapter.ADAPTER_CLASS);
-		return null;
-	}
-	
-	protected EMF2DOMAdapter primGetExistingAdapterForCreate(Node aNode) {
-		INodeNotifier sseNode = (INodeNotifier) aNode;
-		Collection adapters = sseNode.getAdapters();
-		for (Iterator iterator = adapters.iterator(); iterator.hasNext();) {
-			INodeAdapter adapter = (INodeAdapter) iterator.next();
-			// First Check if it's an EMF2DOMAdapter
-			if (adapter != null && adapter.isAdapterForType(EMF2DOMAdapter.ADAPTER_CLASS)) {
-				// Cast to EMF2DOMAdapter
-				EMF2DOMAdapter e2DAdapter = (EMF2DOMAdapter) adapter;
+				if (getTarget() == null || e2DAdapter.getTarget() == null)
+					return e2DAdapter;
+				
 				// Check if target is an EMF resource
 				if (getTarget() instanceof Resource) {
 					/*
@@ -379,18 +334,24 @@
 					if (e2DAdapter.getTarget() == getTarget()) {
 						return e2DAdapter;
 					}
-					else
-						continue;
 				}
-				// Check if targets are EObjects with the same resources
-				EObject myTarget = (EObject) getTarget();
-				EObject adapterTarget = (EObject) e2DAdapter.getTarget();
-				/*
-				 * Now check if it's the right one (Multiple resources could
-				 * be attached)
-				 */
-				if (adapterTarget != null && myTarget != null && adapterTarget.eResource() == myTarget.eResource()) {
-					return e2DAdapter;
+				else {
+					// Check if targets are EObjects with the same resources
+					EObject myTarget = (EObject) getTarget();
+					EObject adapterTarget = (EObject) e2DAdapter.getTarget();
+					/*
+					 * Now check if it's the right one (Multiple resources could
+					 * be attached)
+					 */
+					if (adapterTarget.eResource() == myTarget.eResource()) {
+						return e2DAdapter;
+					}
+				}
+				
+				if (e2DAdapter.getTarget() instanceof EObject) {
+					if (((EObject) e2DAdapter.getTarget()).eResource() == null) {
+						return e2DAdapter;
+					}
 				}
 			}
 		}
diff --git a/bundles/org.eclipse.wst.xml.core/src-emfModelSynch/org/eclipse/wst/xml/core/internal/emf2xml/EMF2DOMSSERenderer.java b/bundles/org.eclipse.wst.xml.core/src-emfModelSynch/org/eclipse/wst/xml/core/internal/emf2xml/EMF2DOMSSERenderer.java
index ccf8de7..18ef17b 100644
--- a/bundles/org.eclipse.wst.xml.core/src-emfModelSynch/org/eclipse/wst/xml/core/internal/emf2xml/EMF2DOMSSERenderer.java
+++ b/bundles/org.eclipse.wst.xml.core/src-emfModelSynch/org/eclipse/wst/xml/core/internal/emf2xml/EMF2DOMSSERenderer.java
@@ -267,7 +267,6 @@
 		//return (EMF2DOMSSEAdapter) xNode.getAdapterFor(EMF2DOMAdapter.ADAPTER_CLASS);
 
 		INodeNotifier sseNode = (INodeNotifier) node;
-		List sse2domAdapters = new ArrayList();
 		Collection adapters = sseNode.getAdapters();
 		for (Iterator iterator = adapters.iterator(); iterator.hasNext();) {
 			INodeAdapter adapter = (INodeAdapter) iterator.next();
@@ -275,8 +274,11 @@
 			if (adapter != null && adapter.isAdapterForType(EMF2DOMAdapter.ADAPTER_CLASS)) {
 				// Cast to EMF2DOMAdapter
 				EMF2DOMAdapter e2DAdapter = (EMF2DOMAdapter) adapter;
+				if (getResource() == null || e2DAdapter.getTarget() == null)
+					return e2DAdapter;
+				
 				// First check if targets are resources
-				if (e2DAdapter.getTarget() != null && e2DAdapter.getTarget() instanceof Resource) {
+				if (e2DAdapter.getTarget() instanceof Resource) {
 					/*
 					 * Now check if it's the right one (Multiple resources
 					 * could be attached)
@@ -284,10 +286,6 @@
 					if (e2DAdapter.getTarget() == getResource()) {
 						return e2DAdapter;
 					}
-					else {
-						sse2domAdapters.add(e2DAdapter);
-						continue;
-					}
 				} else {
 					// Check if targets are EObjects with the same resources
 					TranslatorResource myTarget = getResource();
@@ -296,16 +294,12 @@
 					 * Now check if it's the right one (Multiple resources could
 					 * be attached)
 					 */
-					if (adapterTarget != null && myTarget != null && adapterTarget.eResource() == myTarget) {
+					if (adapterTarget.eResource() == myTarget || adapterTarget.eResource() == null) {
 						return e2DAdapter;
 					}
-					sse2domAdapters.add(e2DAdapter);
 				}
 			}
 		}
-		if (sse2domAdapters.size() == 1) {
-			return (EMF2DOMAdapter) sse2domAdapters.get(0);
-		}
 		return null;
 	
 	}
@@ -434,26 +428,24 @@
 		if (isBatchChanges)
 			return;
 		try {
-			if (aboutToChangeNode != null && model.getStructuredDocument() != null && model.getStructuredDocument().getFirstStructuredDocumentRegion() != aboutToChangeNode) {
-				String id = getModelManagerId();
-				IStructuredModel tempModel = null;
+			if (aboutToChangeNode != null
+					&& model.getStructuredDocument() != null
+					&& model.getStructuredDocument()
+							.getFirstStructuredDocumentRegion() != aboutToChangeNode) {
+				modelAccessForWrite();
 				try {
-					tempModel = getModelManager().getExistingModelForEdit(id);
 					xmlModelReverted = true;
 					resource.unload();
-				}
-				finally {
-					if (tempModel != null) {
-						tempModel.releaseFromEdit();
-					}
+				} finally {
+					if (getXMLModel() != null)
+						getXMLModel().releaseFromEdit();
 				}
 			}
-		}
-		finally {
+		} finally {
 			aboutToChangeNode = null;
 		}
-	}
-
+	} 
+	
 	public void modelDirtyStateChanged(IStructuredModel model, boolean isDirty) {
 		if (!isDirty && resource.isModified()) { // The XMLModel was saved
 			resource.setModified(false);