diff --git a/mode/jsx/jsx.js b/mode/jsx/jsx.js
index 45c3024aba3038ad2e172f6641d0cc26b4c1c870..039e37bb5e1523d4b97a41f67c72672a93f772de 100644
--- a/mode/jsx/jsx.js
+++ b/mode/jsx/jsx.js
@@ -26,7 +26,7 @@
   }
 
   CodeMirror.defineMode("jsx", function(config, modeConfig) {
-    var xmlMode = CodeMirror.getMode(config, {name: "xml", allowMissing: true, multilineTagIndentPastTag: false})
+    var xmlMode = CodeMirror.getMode(config, {name: "xml", allowMissing: true, multilineTagIndentPastTag: false, allowMissingTagName: true})
     var jsMode = CodeMirror.getMode(config, modeConfig && modeConfig.base || "javascript")
 
     function flatXMLIndent(state) {
diff --git a/mode/jsx/test.js b/mode/jsx/test.js
index 61f84ebe82c48e9872077fa9615616c96c4caa9d..891f98830d889e3a38d1ec91602d0d7168c38b19 100644
--- a/mode/jsx/test.js
+++ b/mode/jsx/test.js
@@ -11,6 +11,9 @@
   MT("openclose",
      "([bracket&tag <][tag foo][bracket&tag >]hello [atom &amp;][bracket&tag </][tag foo][bracket&tag >][operator ++])")
 
+  MT("openclosefragment",
+     "([bracket&tag <><][tag foo][bracket&tag >]hello [atom &amp;][bracket&tag </][tag foo][bracket&tag ></>][operator ++])")
+
   MT("attr",
      "([bracket&tag <][tag foo] [attribute abc]=[string 'value'][bracket&tag >]hello [atom &amp;][bracket&tag </][tag foo][bracket&tag >][operator ++])")
 
diff --git a/mode/xml/xml.js b/mode/xml/xml.js
index f987a3a3ce9c16571801d27819d21d975119eeb5..0f1c9b175ef74cc1cb98d8b3412b1d9d80c8d622 100644
--- a/mode/xml/xml.js
+++ b/mode/xml/xml.js
@@ -52,6 +52,7 @@ var xmlConfig = {
   doNotIndent: {},
   allowUnquoted: false,
   allowMissing: false,
+  allowMissingTagName: false,
   caseFold: false
 }
 
@@ -226,6 +227,9 @@ CodeMirror.defineMode("xml", function(editorConf, config_) {
       state.tagName = stream.current();
       setStyle = "tag";
       return attrState;
+    } else if (config.allowMissingTagName && type == "endTag") {
+      setStyle = "tag bracket";
+      return attrState(type, stream, state);
     } else {
       setStyle = "error";
       return tagNameState;
@@ -244,6 +248,9 @@ CodeMirror.defineMode("xml", function(editorConf, config_) {
         setStyle = "tag error";
         return closeStateErr;
       }
+    } else if (config.allowMissingTagName && type == "endTag") {
+      setStyle = "tag bracket";
+      return closeState(type, stream, state);
     } else {
       setStyle = "error";
       return closeStateErr;