Index: /FCKeditor/trunk/_whatsnew.html
===================================================================
--- /FCKeditor/trunk/_whatsnew.html	(revision 2069)
+++ /FCKeditor/trunk/_whatsnew.html	(revision 2070)
@@ -45,5 +45,6 @@
 		Fixed Bugs:</p>
 	<ul>
-		<li></li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2248">#2248</a>] Calling FCK.InsertHtml( 'nbsp;') was inserting a plain space instead of a non breaking space
+			character.</li>
 	</ul>
 	<p>
Index: /FCKeditor/trunk/editor/_source/internals/fck_gecko.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fck_gecko.js	(revision 2069)
+++ /FCKeditor/trunk/editor/_source/internals/fck_gecko.js	(revision 2070)
@@ -350,4 +350,6 @@
 FCK.InsertHtml = function( html )
 {
+	var doc = FCK.EditorDocument ;
+
 	html = FCKConfig.ProtectedSource.Protect( html ) ;
 	html = FCK.ProtectEvents( html ) ;
@@ -358,6 +360,21 @@
 	FCKUndo.SaveUndoStep() ;
 
+	if ( FCKBrowserInfo.IsGecko )
+	{
+		// Using the following trick, &nbsp; present at the beginning and at
+		// the end of the HTML are preserved (#2248).
+		html = '<span id="__fakeFCKRemove1__" style="display:none;">fakeFCKRemove</span>' + html + '<span id="__fakeFCKRemove2__" style="display:none;">fakeFCKRemove</span>' ;
+	}
+
 	// Insert the HTML code.
-	this.EditorDocument.execCommand( 'inserthtml', false, html ) ;
+	doc.execCommand( 'inserthtml', false, html ) ;
+
+	if ( FCKBrowserInfo.IsGecko )
+	{
+		// Remove the fake nodes.
+		FCKDomTools.RemoveNode( doc.getElementById('__fakeFCKRemove1__') ) ;
+		FCKDomTools.RemoveNode( doc.getElementById('__fakeFCKRemove2__') ) ;
+	}
+
 	this.Focus() ;
 
@@ -367,5 +384,5 @@
 	var bookmark = range.CreateBookmark() ;
 
-	FCKDocumentProcessor.Process( FCK.EditorDocument ) ;
+	FCKDocumentProcessor.Process( doc ) ;
 
 	// Restore caret position, ignore any errors in case the document
