Index: FCKeditor/trunk/_whatsnew.html
===================================================================
--- FCKeditor/trunk/_whatsnew.html	(revision 1950)
+++ FCKeditor/trunk/_whatsnew.html	(revision 1951)
@@ -65,4 +65,6 @@
 		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1633">#1633</a>] External styles should no
 			longer interfere with the appearance of the editor and floating panels now.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2113">#2113</a>] Fixed unneeded &lt;span
+			class=&quot;Apple-style-span&quot;&gt; created after inserting special characters.</li>
 	</ul>
 	<h3>
Index: FCKeditor/trunk/editor/_source/internals/fck_gecko.js
===================================================================
--- FCKeditor/trunk/editor/_source/internals/fck_gecko.js	(revision 1950)
+++ FCKeditor/trunk/editor/_source/internals/fck_gecko.js	(revision 1951)
@@ -362,5 +362,19 @@
 	this.Focus() ;
 
+	// Save the caret position before calling document processor.
+	var range = new FCKDomRange( this.EditorWindow ) ;
+	range.MoveToSelection() ;
+	var bookmark = range.CreateBookmark() ;
+
 	FCKDocumentProcessor.Process( FCK.EditorDocument ) ;
+
+	// Restore caret position, ignore any errors in case the document
+	// processor removed the bookmark <span>s for some reason.
+	try
+	{
+		range.MoveToBookmark( bookmark ) ;
+		range.Select() ;
+	}
+	catch ( e ) {}
 
 	// For some strange reason the SaveUndoStep() call doesn't activate the undo button at the first InsertHtml() call.
Index: FCKeditor/trunk/editor/_source/internals/fckdocumentprocessor.js
===================================================================
--- FCKeditor/trunk/editor/_source/internals/fckdocumentprocessor.js	(revision 1950)
+++ FCKeditor/trunk/editor/_source/internals/fckdocumentprocessor.js	(revision 1951)
@@ -248,2 +248,18 @@
 		fakeImg.setAttribute( '_fckflash', 'true', 0 );
 	} ) ;
+
+// Buggy <span class="Apple-style-span"> tags added by Safari.
+if ( FCKBrowserInfo.IsSafari )
+{
+	FCKDocumentProcessor.AppendNew().ProcessDocument = function( doc )
+	{
+		var spans = doc.getElementsByClassName ?
+			doc.getElementsByClassName( 'Apple-style-span' ) :
+			Array.prototype.filter.call( 
+					doc.getElementsByTagName( 'span' ), 
+					function( item ){ return item.className == 'Apple-style-span' ; } 
+					) ;
+		for ( var i = spans.length - 1 ; i >= 0 ; i-- )
+			FCKDomTools.RemoveNode( spans[i], true ) ;
+	}
+}
