Index: /FCKeditor/trunk/editor/_source/classes/fckstyle.js
===================================================================
--- /FCKeditor/trunk/editor/_source/classes/fckstyle.js	(revision 893)
+++ /FCKeditor/trunk/editor/_source/classes/fckstyle.js	(revision 894)
@@ -183,5 +183,12 @@
 				if ( this.CheckElementRemovable( pathElement ) )
 				{
-					if ( isBoundary )
+					if ( isBoundary 
+						&& !FCKDomTools.CheckIsEmptyElement( pathElement, 
+								function( el ) 
+								{ 
+									return ( el != bookmarkStart ) ; 
+								} 
+							) 
+						)
 					{
 						lastBoundaryElement = pathElement ;
Index: /FCKeditor/trunk/editor/_source/internals/fckdomtools.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fckdomtools.js	(revision 893)
+++ /FCKeditor/trunk/editor/_source/internals/fckdomtools.js	(revision 894)
@@ -773,4 +773,35 @@
 
 		return node ;
+	},
+	
+	/**
+	 * Checks if an element has no "useful" content inside of it
+	 * node tree. No "useful" content means empty text node or a signle empty
+	 * inline node.
+	 * elementCheckCallback may point to a function that returns a boolean
+	 * indicating that a child element must be considered in the element check.
+	 */
+	CheckIsEmptyElement : function( element, elementCheckCallback )
+	{
+		var child = element.firstChild ;
+		var elementChild ;
+		
+		while ( child )
+		{
+			if ( child.nodeType == 1 )
+			{
+				if ( elementChild || !FCKListsLib.InlineNonEmptyElements[ child.nodeName.toLowerCase() ] )
+					return false ;
+				
+				if ( !elementCheckCallback || elementCheckCallback( child ) === true )
+					elementChild = child ;
+			}
+			else if ( child.nodeType == 3 && child.nodeValue.length > 0 )
+				return false ;
+			
+			child = child.nextSibling ;
+		}
+		
+		return elementChild ? this.CheckIsEmptyElement( elementChild, elementCheckCallback ) : true ;
 	}
 } ;
