Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 5289)
+++ /CKEditor/trunk/CHANGES.html	(revision 5290)
@@ -101,4 +101,5 @@
 		<li><a href="http://dev.fckeditor.net/ticket/4898">#4898</a> : Can't navigate outside table inside the last paragraph of document.</li>
 		<li><a href="http://dev.fckeditor.net/ticket/4950">#4950</a> : List commands could compromise list item attribute and styles.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5018">#5018</a> : Find result highlight remove normal font color styles unintentionally.</li>
 	</ul>
 	<h3>
Index: /CKEditor/trunk/_source/plugins/find/dialogs/find.js
===================================================================
--- /CKEditor/trunk/_source/plugins/find/dialogs/find.js	(revision 5289)
+++ /CKEditor/trunk/_source/plugins/find/dialogs/find.js	(revision 5290)
@@ -68,6 +68,9 @@
 	var findDialog = function( editor, startupPage )
 	{
-		// Style object for highlights.
-		var highlightStyle = new CKEDITOR.style( editor.config.find_highlight );
+		// Style object for highlights: (#5018)
+		// 1. Defined as full match style to avoid compromising ordinary text color styles.
+		// 2. Must be apply onto inner-most text to avoid conflicting with ordinary text color styles visually.
+		var highlightStyle = new CKEDITOR.style( CKEDITOR.tools.extend( { fullMatch : true, childRule : function(){ return false; } },
+			editor.config.find_highlight ) );
 
 		/**
Index: /CKEditor/trunk/_source/plugins/styles/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/styles/plugin.js	(revision 5289)
+++ /CKEditor/trunk/_source/plugins/styles/plugin.js	(revision 5290)
@@ -938,5 +938,6 @@
 		{
 			// The 'class' element value must match (#1318).
-			if ( attName == 'class' && element.getAttribute( attName ) != attributes[ attName ] )
+			if ( ( attName == 'class' || style._.definition.fullMatch )
+				&& element.getAttribute( attName ) != normalizeProperty( attName, attributes[ attName ] ) )
 				continue;
 			removeEmpty = element.hasAttribute( attName );
@@ -946,4 +947,9 @@
 		for ( var styleName in styles )
 		{
+			// Full match style insist on having fully equivalence. (#5018)
+			if ( style._.definition.fullMatch
+				&& element.getStyle( styleName ) != normalizeProperty( styleName, styles[ styleName ], true ) )
+				continue;
+
 			removeEmpty = removeEmpty || !!element.getStyle( styleName );
 			element.removeStyle( styleName );
@@ -1210,4 +1216,11 @@
 	}
 
+	function normalizeProperty( name, value, isStyle )
+	{
+		var temp = new CKEDITOR.dom.element( 'span' );
+		temp [ isStyle ? 'setStyle' : 'setAttribute' ]( name, value );
+		return temp[ isStyle ? 'getStyle' : 'getAttribute' ]( name );
+	}
+	
 	function normalizeCssText( unparsedCssText, nativeNormalize )
 	{
