Index: editor/_source/classes/fckdomrangeiterator.js
===================================================================
--- editor/_source/classes/fckdomrangeiterator.js	(revision 1434)
+++ editor/_source/classes/fckdomrangeiterator.js	(working copy)
@@ -258,22 +258,39 @@
 				// block.
 				if ( !range.CheckStartOfBlock() || !range.CheckEndOfBlock() )
 				{
-					// The resulting block will be a clone of the current one.
-					block = block.cloneNode( false ) ;
+					// Extract the range contents, move it to a new block if the extracted contents aren't empty.
+					var contentsFragment = range.ExtractContents() ;
 
-					// Extract the range contents, moving it to the new block.
-					range.ExtractContents().AppendTo( block ) ;
-					FCKDomTools.TrimNode( block ) ;
+					// Examine the extracted contents, see if there's any visible content in it.
+					var contentsRoot = contentsFragment.RootNode ;
+					var editStartNode = contentsRoot, editEndNode = contentsRoot, child ;
+					while ( ( child = editStartNode.firstChild ) && child.nodeType == 1 && 
+							FCKListsLib.InlineNonEmptyElements[ child.nodeName.toLowerCase() ] )
+						editStartNode = child ;
+					while ( ( child = editEndNode.firstChild ) && child.nodeType == 1 &&
+							FCKListsLib.InlineNonEmptyElements[ child.nodeName.toLowerCase() ] )
+						editEndNode = child ;
 
-					// Split the block. At this point, the range will be in the
-					// right position for our intents.
-					var splitInfo = range.SplitBlock() ;
+					// Check if the extracted contents if visibly empty by checking if there's any editable
+					// contents.
+					if ( editStartNode != editEndNode || editStartNode.firstChild )
+					{
+						// The resulting block will be a clone of the current one.
+						block = block.cloneNode( false ) ;
 
-					removePreviousBr = !splitInfo.WasStartOfBlock ;
-					removeLastBr = !splitInfo.WasEndOfBlock ;
+						contentsFragment.AppendTo( block ) ;
+						FCKDomTools.TrimNode( block ) ;
 
-					// Insert the new block into the DOM.
-					range.InsertNode( block ) ;
+						// Split the block. At this point, the range will be in the
+						// right position for our intents.
+						var splitInfo = range.SplitBlock() ;
+
+						removePreviousBr = !splitInfo.WasStartOfBlock ;
+						removeLastBr = !splitInfo.WasEndOfBlock ;
+
+						// Insert the new block into the DOM.
+						range.InsertNode( block ) ;
+					}
 				}
 			}
 			else if ( !isLast )
