Index: /FCKeditor/trunk/editor/_source/internals/fck.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fck.js	(revision 218)
+++ /FCKeditor/trunk/editor/_source/internals/fck.js	(revision 219)
@@ -290,20 +290,33 @@
 	ProtectTags : function( html )
 	{
-		// <meta> tags get executed, so if you have a redirect meta, the content
-		// will move to the target page.
-		var sTags = 'META' ;
-
-		if ( FCKConfig.ProtectedTags.length > 0 )
-			sTags += '|' + FCKConfig.ProtectedTags ;
+		var sTags = FCKConfig.ProtectedTags ;
 
 		// IE doesn't support <abbr> and it breaks it. Let's protect it.
 		if ( FCKBrowserInfo.IsIE )
-			sTags += '|ABBR|HR' ;
-
-		var oRegex = new RegExp( '<(' + sTags + ')(?!\w|:)', 'gi' ) ;
-		html = html.replace( oRegex, '<FCK:$1' ) ;
-
-		oRegex = new RegExp( '<\/(' + sTags + ')>', 'gi' ) ;
-		html = html.replace( oRegex, '<\/FCK:$1>' ) ;
+			sTags += sTags.length > 0 ? '|ABBR' : 'ABBR' ;
+		
+		var oRegex ;
+		if ( sTags.length > 0 )
+		{
+			oRegex = new RegExp( '<(' + sTags + ')(?!\w|:)', 'gi' ) ;
+			html = html.replace( oRegex, '<FCK:$1' ) ;
+
+			oRegex = new RegExp( '<\/(' + sTags + ')>', 'gi' ) ;
+			html = html.replace( oRegex, '<\/FCK:$1>' ) ;
+		}
+		
+		// Protect some empty elements. We must do it separately becase the
+		// original tag may not contain the closing slash, like <hr>:
+		//		- <meta> tags get executed, so if you have a redirect meta, the
+		//		  content will move to the target page.
+		//		- <hr> may destroy the document structure if not well
+		//		  positioned. The trick is protect it here and restore them in
+		//		  the FCKDocumentProcessor.
+		sTags = 'META' ;
+		if ( FCKBrowserInfo.IsIE )
+			sTags += '|HR' ;
+
+		oRegex = new RegExp( '<((' + sTags + ')(?=\s|>)[\s\S]*?)/?>', 'gi' ) ;
+		html = html.replace( oRegex, '<FCK:$1 />' ) ;
 
 		return html ;
