Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 6086)
+++ /CKEditor/trunk/CHANGES.html	(revision 6087)
@@ -51,4 +51,5 @@
 		<li><a href="http://dev.ckeditor.com/ticket/5404">#5404</a> : Whitespaces (NBSP) were incorrectly added into empty table cells and list items.</li>
 		<li><a href="http://dev.ckeditor.com/ticket/6575">#6575</a> : Tabs disappearing in Link dialog after specific action sequence.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6510">#6510</a> : Margin mirroring doesn't respect style configuration.</li>
 	</ul>
 	<h3>
Index: /CKEditor/trunk/_source/plugins/bidi/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/bidi/plugin.js	(revision 6086)
+++ /CKEditor/trunk/_source/plugins/bidi/plugin.js	(revision 6087)
@@ -124,5 +124,11 @@
 		// like a mirror. (#5910)
 		if ( dir != dirBefore )
-			editor.fire( 'dirChanged', element );
+		{
+			editor.fire( 'dirChanged',
+				{
+					node : element,
+					dir : dir
+				} );
+		}
 
 		editor.forceNextSelectionCheck();
Index: /CKEditor/trunk/_source/plugins/indent/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/indent/plugin.js	(revision 6086)
+++ /CKEditor/trunk/_source/plugins/indent/plugin.js	(revision 6087)
@@ -393,6 +393,6 @@
 			{
 				var range = new CKEDITOR.dom.range( editor.document );
-				range.setStartBefore( e.data );
-				range.setEndAfter( e.data );
+				range.setStartBefore( e.data.node );
+				range.setEndAfter( e.data.node );
 
 				var walker = new CKEDITOR.dom.walker( range ),
@@ -404,9 +404,24 @@
 					{
 						// A child with the defined dir is to be ignored.
-						if ( !node.equals( e.data ) && node.getDirection() )
+						if ( !node.equals( e.data.node ) && node.getDirection() )
 						{
 							range.setStartAfter( node );
 							walker = new CKEDITOR.dom.walker( range );
 							continue;
+						}
+
+						// Switch alignment classes.
+						var classes = editor.config.indentClasses;
+						if ( classes )
+						{
+							var suffix = ( e.data.dir == 'ltr' ) ? [ '_rtl', '' ] : [ '', '_rtl' ];
+							for ( var i = 0; i < classes.length; i++ )
+							{
+								if ( node.hasClass( classes[ i ] + suffix[ 0 ] ) )
+								{
+									node.removeClass( classes[ i ] + suffix[ 0 ] );
+									node.addClass( classes[ i ] + suffix[ 1 ] );
+								}
+							}
 						}
 
Index: /CKEditor/trunk/_source/plugins/justify/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/justify/plugin.js	(revision 6086)
+++ /CKEditor/trunk/_source/plugins/justify/plugin.js	(revision 6087)
@@ -88,6 +88,6 @@
 
 		var range = new CKEDITOR.dom.range( editor.document );
-		range.setStartBefore( e.data );
-		range.setEndAfter( e.data );
+		range.setStartBefore( e.data.node );
+		range.setEndAfter( e.data.node );
 
 		var walker = new CKEDITOR.dom.walker( range ),
@@ -99,5 +99,5 @@
 			{
 				// A child with the defined dir is to be ignored.
-				if ( !node.equals( e.data ) && node.getDirection() )
+				if ( !node.equals( e.data.node ) && node.getDirection() )
 				{
 					range.setStartAfter( node );
@@ -107,4 +107,22 @@
 
 				// Switch the alignment.
+				var classes = editor.config.justifyClasses;
+				if ( classes )
+				{
+					// The left align class.
+					if ( node.hasClass( classes[ 0 ] ) )
+					{
+						node.removeClass( classes[ 0 ] );
+						node.addClass( classes[ 2 ] );
+					}
+					// The right align class.
+					else if ( node.hasClass( classes[ 2 ] ) )
+					{
+						node.removeClass( classes[ 2 ] );
+						node.addClass( classes[ 0 ] );
+					}
+				}
+
+				// Always switch CSS margins.
 				var style = 'text-align';
 				var align = node.getStyle( style );
