Index: /FCKeditor/trunk/editor/_source/classes/fckeditingarea.js
===================================================================
--- /FCKeditor/trunk/editor/_source/classes/fckeditingarea.js	(revision 769)
+++ /FCKeditor/trunk/editor/_source/classes/fckeditingarea.js	(revision 770)
@@ -47,5 +47,9 @@
 	// Remove all child nodes from the target.
 	while( eTargetElement.childNodes.length > 0 )
+	{
+		if ( eTargetElement.childNodes[0].contentWindow )
+			eTargetElement.childNodes[0].contentWindow.document.body.innerHTML = "" ;
 		eTargetElement.removeChild( eTargetElement.childNodes[0] ) ;
+	}
 
 	if ( this.Mode == FCK_EDITMODE_WYSIWYG )
Index: /FCKeditor/trunk/editor/_source/commandclasses/fcklistcommands.js
===================================================================
--- /FCKeditor/trunk/editor/_source/commandclasses/fcklistcommands.js	(revision 769)
+++ /FCKeditor/trunk/editor/_source/commandclasses/fcklistcommands.js	(revision 770)
@@ -36,8 +36,41 @@
 	Execute : function()
 	{
+		/*
 		if ( FCKBrowserInfo.IsIE && this.GetState() == FCK_TRISTATE_OFF )
 		{
 			// IE does not split selected <br> tags when it is making lists. (See #428)
 			// So, pre-split the blocks for IE.
+			var range = new FCKDomRange( FCK.EditorWindow ) ;
+			range.MoveToSelection() ;
+			var terminals = this._GetIETerminalNodes( range ) ;
+			var selectionStartNode = terminals.start ;
+			var selectionEndNode = terminals.end ;
+
+			var brNodes = [] ;
+			var curNode = selectionStartNode ;
+			while ( curNode && curNode != selectionEndNode )
+			{
+				if ( curNode.nodeType == 1 && curNode.tagName.toLowerCase() == 'br' )
+					brNodes.push( curNode ) ;
+				curNode = FCKTools.GetNextNode( curNode ) ;
+			}
+
+			for ( var i = brNodes.length - 1 ; i >= 0 ; i-- )
+			{
+				range.SetStart( brNodes[i], 3 ) ;
+				range.SetEnd( brNodes[i], 3 ) ;
+				brNodes[i].parentNode.removeChild( brNodes[i] ) ;
+				range.SplitBlock() ;
+			}
+
+			range.SetStart( selectionStartNode, 1 ) ;
+			range.SetEnd( selectionEndNode, 4 ) ;
+			range.Select() ;
+		}
+		*/
+		FCK.ExecuteNamedCommand( this.Name ) ;
+		/*
+		if ( FCKBrowserInfo.IsIE && this.GetState() == FCK_TRISTATE_OFF && FCKConfig.EnterMode.IEquals( 'br' ) )
+		{
 			var range = new FCKDomRange( FCK.EditorWindow ) ;
 			range.MoveToSelection() ;
@@ -64,27 +97,54 @@
 				}
 			}
+			var startParents = FCKDomTools.GetParents( startNode ) ;
+			var endParents = FCKDomTools.GetParents( endNode ) ;
+			var commonLength = 0 ;
+			while ( startParents[commonLength] == endParents[commonLength] )
+				commonLength++ ;
+			if ( startParents.length <= commonLength || endParents.length <= commonLength )
+				return ;
+			startNode = startParents[commonLength] ;
+			endNode = endParents[commonLength] ;
+			if ( startNode.parentNode != endNode.parentNode )
+				return ;
+			var removedNode = null ;
+			var curNode = startNode ;
+			while ( curNode && ( removedNode != endNode ) )
+			{
+				if ( curNode != endNode )
+					curNode.appendChild( curNode.ownerDocument.createElement( 'br' ) ) ;
+				var temp = curNode.nextSibling ;
+				removedNode = curNode.removeNode( false ) ;
+				curNode = temp ;
+			}
+		}
+		*/
+	},
 
-			var brNodes = [] ;
-			var curNode = startNode ;
-			while ( curNode && curNode != endNode )
+	_GetIETerminalNodes : function( range )
+	{
+		var startNode = range._Range.startContainer ;
+		var endNode = range._Range.endContainer ;
+		if ( startNode.nodeType == 1 )
+		{
+			if ( startNode.firstChild )
 			{
-				if ( curNode.nodeType == 1 && curNode.tagName.toLowerCase() == 'br' )
-					brNodes.push( curNode ) ;
-				curNode = FCKTools.GetNextNode( curNode ) ;
+				if ( startNode.childNodes.length <= range._Range.startOffset )
+					startNode = startNode.lastChild ;
+				else
+					startNode = startNode.childNodes[ range._Range.startOffset ] ;
 			}
-
-			for ( var i = brNodes.length - 1 ; i >= 0 ; i-- )
+		}
+		if ( endNode.nodeType == 1 )
+		{
+			if ( endNode.firstChild )
 			{
-				range.SetStart( brNodes[i], 3 ) ;
-				range.SetEnd( brNodes[i], 3 ) ;
-				brNodes[i].parentNode.removeChild( brNodes[i] ) ;
-				range.SplitBlock() ;
+				if ( endNode.childNodes.length <= range._Range.endOffset )
+					endNode = endNode.lastChild ;
+				else
+					endNode = endNode.childNodes[ range._Range.endOffset ] ;
 			}
-
-			range.SetStart( startNode, 1 ) ;
-			range.SetEnd( endNode, 4 ) ;
-			range.Select() ;
 		}
-		FCK.ExecuteNamedCommand( this.Name ) ;
+		return { start : startNode, end : endNode } ;
 	}
 };
Index: /FCKeditor/trunk/editor/_source/internals/fckdomtools.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fckdomtools.js	(revision 769)
+++ /FCKeditor/trunk/editor/_source/internals/fckdomtools.js	(revision 770)
@@ -270,5 +270,5 @@
 		while ( node )
 		{
-			parents.splice( 0, 0, node ) ;
+			parents.unshift( node ) ;
 			node = node.parentNode ;
 		}
Index: /FCKeditor/trunk/editor/_source/internals/fcktools.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fcktools.js	(revision 769)
+++ /FCKeditor/trunk/editor/_source/internals/fcktools.js	(revision 770)
@@ -477,4 +477,22 @@
 }
 
+// Perform a one-step DFS walk backwards.
+FCKTools.GetPrevNode = function( node, limitNode )
+{
+	if ( node.previousSibling )
+	{
+		var cursor = node.previousSibling ;
+		while ( cursor.lastChild )
+			cursor = cursor.lastChild ;
+		return cursor ;
+	}
+	else
+	{
+		if ( node.parentNode == limitNode )
+			return null ;
+		return node.parentNode ;
+	}
+}
+
 // Perform a one-step DFS walk.
 FCKTools.GetNextNode = function( node, limitNode )
