Index: /FCKeditor/trunk/editor/_source/internals/fck.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fck.js	(revision 715)
+++ /FCKeditor/trunk/editor/_source/internals/fck.js	(revision 716)
@@ -779,4 +779,20 @@
 {
 	FCKDomTools.EnforcePaddingNode( FCK.EditorDocument, FCKConfig.EnterMode ) ;
+
+	if ( ! FCKBrowserInfo.IsIE && FCKDomTools.PaddingNode )
+	{
+		var sel = FCK.EditorWindow.getSelection() ;
+		if ( sel && sel.rangeCount == 1 )
+		{
+			var range = sel.getRangeAt( 0 ) ;
+			if ( range.collapsed && range.startContainer == FCK.EditorDocument.body && range.startOffset == 0 )
+			{
+				range.selectNodeContents( FCKDomTools.PaddingNode ) ;
+				range.collapse( true ) ;
+				sel.removeAllRanges() ;
+				sel.addRange( range ) ;
+			}
+		}
+	}
 }
 
Index: /FCKeditor/trunk/editor/_source/internals/fck_gecko.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fck_gecko.js	(revision 715)
+++ /FCKeditor/trunk/editor/_source/internals/fck_gecko.js	(revision 716)
@@ -351,36 +351,10 @@
 	html = html.replace( FCKRegexLib.EmOpener, '<i$1' ) ;
 	html = html.replace( FCKRegexLib.EmCloser, '<\/i>' ) ;
-	
+
 	// Save an undo snapshot first.
 	FCKUndo.SaveUndoStep() ;
 
-	// Delete the actual selection.
-	var oSel = FCKSelection.Delete() ;
-
-	// Get the first available range.
-	var oRange = oSel.getRangeAt(0) ;
-
-	// If a range is not available ( occurs under Safari )
-	// Append to the end of the editor document.
-	if ( ! oRange )
-	{
-		oRange = this.EditorDocument.createRange() ;
-		oRange.selectNodeContents( this.EditorDocument.body ) ;
-		oRange.collapse( false ) ;
-	}
-
-	// Create a fragment with the input HTML.
-	var oFragment = oRange.createContextualFragment( html ) ;
-
-	// Get the last available node.
-	var oLastNode = oFragment.lastChild ;
-
-	// Insert the fragment in the range.
-	oRange.insertNode(oFragment) ;
-
-	// Set the cursor after the inserted fragment.
-	FCKSelection.SelectNode( oLastNode ) ;
-	FCKSelection.Collapse( false ) ;
-
+	// Insert the HTML code.
+	this.EditorDocument.execCommand( 'inserthtml', false, html ) ;
 	this.Focus() ;
 
Index: /FCKeditor/trunk/editor/_source/internals/fckdomtools.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fckdomtools.js	(revision 715)
+++ /FCKeditor/trunk/editor/_source/internals/fckdomtools.js	(revision 716)
@@ -320,8 +320,7 @@
 	{
 		this.CheckAndRemovePaddingNode( doc, tagName, true ) ;
-		if ( ! doc.body.lastChild 
-				|| doc.body.lastChild.nodeType != 1 
-				|| doc.body.lastChild.tagName.toLowerCase() == tagName.toLowerCase() )
-			return ;
+		if ( doc.body.lastChild && ( doc.body.lastChild.nodeType != 1 
+				|| doc.body.lastChild.tagName.toLowerCase() == tagName.toLowerCase() ) )
+			return null ;
 		var node = doc.createElement( tagName ) ;
 		if ( FCKBrowserInfo.IsGecko && FCKListsLib.NonEmptyBlockElements[ tagName ] )
