Index: /FCKeditor/trunk/editor/_source/commandclasses/fcklistcommands.js
===================================================================
--- /FCKeditor/trunk/editor/_source/commandclasses/fcklistcommands.js	(revision 1001)
+++ /FCKeditor/trunk/editor/_source/commandclasses/fcklistcommands.js	(revision 1002)
@@ -39,6 +39,12 @@
 		// If the starting block is a descendant of an <ol> or <ul> node, then we're in a list.
 		var startContainer = FCKSelection.GetBoundaryParentElement( true ) ;
-		var listNode = FCKTools.GetElementAscensor( startContainer, this.TagName ) ;
-		if ( listNode )
+		var listNode = startContainer ;
+		while ( listNode )
+		{
+			if ( listNode.nodeName.IEquals( [ 'ul', 'ol' ] ) )
+				break ;
+			listNode = listNode.parentNode ;
+		}
+		if ( listNode && listNode.nodeName.IEquals( this.TagName ) )
 			return FCK_TRISTATE_ON ;
 		else
@@ -50,6 +56,23 @@
 		FCKUndo.SaveUndoStep() ;
 
+		var doc = FCK.EditorDocument ;
 		var range = new FCKDomRange( FCK.EditorWindow ) ;
 		range.MoveToSelection() ;
+		var state = this.GetState() ;
+
+		// Midas lists rule #1 says we can create a list even in an empty document.
+		// But FCKDomRangeIterator wouldn't run if the document is really empty.
+		// So create a paragraph if the document is empty and we're going to create a list.
+		if ( state == FCK_TRISTATE_OFF )
+		{
+			FCKDomTools.TrimNode( doc.body ) ;
+			if ( ! doc.body.firstChild )
+			{
+				var paragraph = doc.createElement( 'p' ) ;
+				doc.body.appendChild( paragraph ) ;
+				range.MoveToNodeContents( paragraph ) ;
+			}
+		}
+
 		var bookmark = range.CreateBookmark() ;
 
@@ -60,5 +83,5 @@
 		var iterator = new FCKDomRangeIterator( range ) ;
 		var block ;
-		var state = this.GetState() ;
+
 		iterator.ForceBrBreak = ( state == FCK_TRISTATE_OFF ) ;
 		var nextRangeExists = true ;
@@ -133,5 +156,5 @@
 				else
 				{
-					var internalRange = FCKW3CRange.CreateFromRange( FCK.EditorDocument, rangeQueue.shift() ) ;
+					var internalRange = FCKW3CRange.CreateFromRange( doc, rangeQueue.shift() ) ;
 					range._Range = internalRange ;
 					range._UpdateElementInfo() ;
@@ -237,6 +260,9 @@
 		}
 		var newList = FCKDomTools.ArrayToList( listArray, markerObj ) ;
-		if ( newList.listNode.lastChild.nodeName.IEquals( this.TagName) )
-			listsCreated.push( newList.listNode.lastChild ) ;
+		for ( var i = 0 ; i < newList.listNode.childNodes.length ; i++ )
+		{
+			if ( newList.listNode.childNodes[i].nodeName.IEquals( this.TagName ) )
+				listsCreated.push( newList.listNode.childNodes[i] ) ;
+		}
 		groupObj.root.parentNode.replaceChild( newList.listNode, groupObj.root ) ;
 	},
Index: /FCKeditor/trunk/editor/_source/internals/fckdomtools.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fckdomtools.js	(revision 1001)
+++ /FCKeditor/trunk/editor/_source/internals/fckdomtools.js	(revision 1002)
@@ -758,5 +758,11 @@
 					currentListItem.appendChild( item.contents[i].cloneNode( true ) ) ;
 				if ( currentListItem.nodeType == 11 )
+				{
+					if ( currentListItem.lastChild && 
+							currentListItem.lastChild.getAttribute &&
+							currentListItem.lastChild.getAttribute( 'type' ) == '_moz' )
+						currentListItem.removeChild( currentListItem.lastChild );
 					currentListItem.appendChild( doc.createElement( 'br' ) ) ;
+				}
 				if ( currentListItem.nodeName.IEquals( FCKConfig.EnterMode ) && currentListItem.firstChild )
 				{
