Index: editor/_source/internals/fck_ie.js
===================================================================
--- editor/_source/internals/fck_ie.js	(revision 3845)
+++ editor/_source/internals/fck_ie.js	(working copy)
@@ -172,7 +172,12 @@
 	oSel.createRange().pasteHTML( html ) ;
 
 	// Remove the fake node
-	FCK.EditorDocument.getElementById('__fakeFCKRemove__').removeNode( true ) ;
+	var fake = FCK.EditorDocument.getElementById('__fakeFCKRemove__') ;
+	// If the span is the only child of a node (so the inserted HTML is beyond that),
+	// remove also that parent that isn't needed. #1537
+	if (fake.parentNode.childNodes.length == 1) 
+		fake = fake.parentNode ;
+	fake.removeNode( true ) ;
 
 	FCKDocumentProcessor.Process( FCK.EditorDocument ) ;
 
Index: editor/_source/internals/fck_gecko.js
===================================================================
--- editor/_source/internals/fck_gecko.js	(revision 3845)
+++ editor/_source/internals/fck_gecko.js	(working copy)
@@ -375,6 +375,16 @@
 
 		range = new FCKDomRange( this.EditorWindow ) ;
 		range.MoveToSelection() ;
+
+		// If the first element (if exists) of the document fragment is a block
+		// element, then split the current block. (#1537)
+		var currentNode = docFrag.RootNode.firstChild ;
+		while ( currentNode && currentNode.nodeType != 1 )
+			currentNode = currentNode.nextSibling ;
+		
+		if ( currentNode && FCKListsLib.BlockElements[ currentNode.nodeName.toLowerCase() ] )
+			range.SplitBlock() ;
+
 		range.DeleteContents() ;
 		range.InsertNode( docFrag.RootNode ) ;
 
