[104152] interpreting "*+xml" mime type as XML now
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/text/StructuredTextPartitionerForJSP.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/text/StructuredTextPartitionerForJSP.java
index d9b7695..3e46977 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/text/StructuredTextPartitionerForJSP.java
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/text/StructuredTextPartitionerForJSP.java
@@ -258,7 +258,7 @@
 			result = new StructuredTextPartitionerForHTML();
 			result.connect(structuredDocument);
 		}
-		else if (contentType.equalsIgnoreCase(XML_MIME_TYPE)) {
+		else if (contentType.equalsIgnoreCase(XML_MIME_TYPE) || contentType.endsWith("+xml")) {
 			result = new StructuredTextPartitionerForXML();
 			result.connect(structuredDocument);
 		}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/modelhandler/EmbeddedHTML.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/modelhandler/EmbeddedHTML.java
index 5e37727..e000a05 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/modelhandler/EmbeddedHTML.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/modelhandler/EmbeddedHTML.java
@@ -160,4 +160,8 @@
 	public boolean isDefault() {
 		return true;
 	}
+
+	public boolean canHandleMimeType(String mimeType) {
+		return getSupportedMimeTypes().contains(mimeType);
+	}
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/ltk/modelhandler/EmbeddedTypeHandler.java b/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/ltk/modelhandler/EmbeddedTypeHandler.java
index 77ea862..4e37d5c 100644
--- a/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/ltk/modelhandler/EmbeddedTypeHandler.java
+++ b/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/ltk/modelhandler/EmbeddedTypeHandler.java
@@ -34,14 +34,28 @@
 	 * Returns the unique identifier for the content type family this
 	 * ContentTypeDescription belongs to.
 	 */
-	public String getFamilyId();
+	String getFamilyId();
 
 	/**
-	 * Returns a list of mime tyeps (as Strings) this handler is appropriate
+	 * Returns a list of mime types (as Strings) this handler is appropriate
 	 * for
 	 */
 	List getSupportedMimeTypes();
-
+	
+	/**
+	 * If this hander can handle a given mimeType.
+	 * 
+	 * This is a looser check than simply checking if a give mimeType
+	 * in the list of supported types, so it should be used with that
+	 * in mind.  That is, the supported mimeType list should ideally be
+	 * checked first.
+	 * 
+	 * eg. if a mime type ends with "+xml", like voice+xml
+	 *     the EmbeddedXML handler should be able to handle it
+	 *     
+	 * @return true if this handler thinks can handle the given mimeType
+	 */
+	boolean canHandleMimeType(String mimeType);
 	/**
 	 * This method is to give the EmbeddedContentType an opportunity to add
 	 * factories directly to the IStructuredModel's IAdapterFactory registry.
@@ -55,7 +69,7 @@
 
 	boolean isDefault();
 
-	public EmbeddedTypeHandler newInstance();
+	EmbeddedTypeHandler newInstance();
 
 	void uninitializeFactoryRegistry(FactoryRegistry registry);
 
diff --git a/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/modelhandler/EmbeddedTypeRegistryImpl.java b/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/modelhandler/EmbeddedTypeRegistryImpl.java
index e2d7548..cfa88ae 100644
--- a/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/modelhandler/EmbeddedTypeRegistryImpl.java
+++ b/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/modelhandler/EmbeddedTypeRegistryImpl.java
@@ -110,7 +110,19 @@
 					break;
 				}
 			}
+			// if no exact match, do the "looser" check
+			if(found == null) {
+				it = hashSet.iterator();
+				while ((found == null) && (it.hasNext())) { 
+					EmbeddedTypeHandler item = (EmbeddedTypeHandler) it.next();
+					if ((item != null) && (item.canHandleMimeType(mimeType))) {
+						found = item;
+						break;
+					}
+				}
+			}
 		}
+		// no matches, use default
 		if (found == null) {
 			found = getRegistryDefault();
 		}
diff --git a/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/modelhandler/EmbeddedXML.java b/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/modelhandler/EmbeddedXML.java
index f121474..823a357 100644
--- a/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/modelhandler/EmbeddedXML.java
+++ b/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/modelhandler/EmbeddedXML.java
@@ -86,4 +86,12 @@
 	public void uninitializeParser(JSPCapableParser parser) {
 		// need to undo anything we did in initialize
 	}
+
+	public boolean canHandleMimeType(String mimeType) {
+		boolean canHandle = getSupportedMimeTypes().contains(mimeType);
+		if(!canHandle) {
+			canHandle = mimeType.endsWith("+xml");
+		}
+		return canHandle;
+	}
 }