Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 5272)
+++ /CKEditor/trunk/CHANGES.html	(revision 5273)
@@ -88,4 +88,5 @@
 		<li><a href="http://dev.fckeditor.net/ticket/5242">#5242</a> : Apply 'automatic' color option of text color incorrectly removes background-color style.</li>
 		<li><a href="http://dev.fckeditor.net/ticket/4719">#4719</a> : IE does not escape attribute values properly.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5170">#5170</a> : Firefox does not insert  text into element properly.</li>
 	</ul>
 	<h3>
Index: /CKEditor/trunk/_source/plugins/specialchar/dialogs/specialchar.js
===================================================================
--- /CKEditor/trunk/_source/plugins/specialchar/dialogs/specialchar.js	(revision 5272)
+++ /CKEditor/trunk/_source/plugins/specialchar/dialogs/specialchar.js	(revision 5273)
@@ -12,4 +12,28 @@
 	var dialog,
 		lang = editor.lang.specialChar;
+	
+	var insertSpecialChar = function ( specialChar )
+	{
+		var selection = editor.getSelection(),
+			ranges	  = selection.getRanges(),
+			range, textNode;
+				
+		editor.fire( 'saveSnapshot' );
+		
+		for ( var i = 0, len = ranges.length ; i < len ; i++ )
+		{
+			range = ranges[ i ];
+			range.deleteContents();
+			
+			textNode =  CKEDITOR.dom.element.createFromHtml( specialChar );
+			range.insertNode( textNode );
+		}
+		
+		range.moveToPosition( textNode, CKEDITOR.POSITION_AFTER_END );
+		range.select();
+		
+		editor.fire( 'saveSnapshot' );
+	};
+	
 	var onChoice = function( evt )
 	{
@@ -24,5 +48,10 @@
 			target.removeClass( "cke_light_background" );
 			dialog.hide();
-			editor.insertHtml( value );
+			
+			// Firefox has bug on insert chars into a element use its own API. (#5170)
+			if ( CKEDITOR.env.gecko )
+				insertSpecialChar( value );
+			else
+				editor.insertHtml( value );
 		}
 	};
