Index: /CKEditor/trunk/_source/plugins/styles/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/styles/plugin.js	(revision 5342)
+++ /CKEditor/trunk/_source/plugins/styles/plugin.js	(revision 5343)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -142,18 +142,20 @@
 
 		// Removes any conflicting styles from within the specified range..
-		removeConflictsFromRange : function ( range )
+		removeConflictsFromRange : function ( range, nodeToPreserve )
 		{
 			var style = this,
-					overrides = getOverrides( style ),
-					styleCandidates = [],
-					overrideCandidates = [];
+				overrides = getOverrides( style ),
+				styleCandidates = [],
+				overrideCandidates = [];
 
 			var walker = new CKEDITOR.dom.walker( range );
 			walker.evaluator = function( node )
 			{
-				if ( node.type == CKEDITOR.NODE_ELEMENT )
+				if ( node.type == CKEDITOR.NODE_ELEMENT
+						&& ( !nodeToPreserve || !node.equals( nodeToPreserve ) ) )
 				{
 					if ( node.is( style.element ) )
 						styleCandidates.push( node );
+
 					if ( node.getName() in overrides )
 						overrideCandidates.push( node );
@@ -408,10 +410,4 @@
 		range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
 		range.trim();
-
-		// Remove all style conflictions within the range,
-		// e.g. style="color:red" is conflicting with style="color:blue".
-		var enlargedBookmark = range.createBookmark();
-		this.removeConflictsFromRange( range );
-		range.moveToBookmark( enlargedBookmark );
 
 		// Get the first node to be processed and the last, which concludes the
@@ -580,6 +576,11 @@
 
 					// Insert it into the range position (it is collapsed after
-					// extractContents.
+					// extractContents).
 					styleRange.insertNode( styleNode );
+
+					// Remove all style conflicts within the range, including
+					// parents boundaries touched by styleNode.
+					styleRange.enlarge( CKEDITOR.ENLARGE_ELEMENT );
+					this.removeConflictsFromRange( styleRange, styleNode );
 
 					// Let's merge our new style with its neighbors, if possible.
