Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 5962)
+++ /CKEditor/trunk/CHANGES.html	(revision 5963)
@@ -75,4 +75,5 @@
 		<li><a href="http://dev.ckeditor.com/ticket/5931">#5931</a> : Unable to apply inline style because of nested elements with same style name.</li>
 		<li><a href="http://dev.ckeditor.com/ticket/6083">#6083</a> : Dialog close sometimes cause collapsed editor selection before the insertion.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6253">#6253</a> : BIDI: creating a Numbered/Bulleted list causing improper behavior on bidi.</li>
 		<li>Updated the following language files:<ul>
 			<li><a href="http://dev.ckeditor.com/ticket/6427">#6427</a> : Ukrainian;</li>
Index: /CKEditor/trunk/_source/core/dom/element.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/element.js	(revision 5962)
+++ /CKEditor/trunk/_source/core/dom/element.js	(revision 5963)
@@ -1553,4 +1553,12 @@
 					}
 				};
-		})()
+		})(),
+
+		/**
+		 * Gets element's direction. Supports both CSS 'direction' prop and 'dir' attr.
+		 */
+		getDirection : function( useComputed )
+		{
+			return useComputed ? this.getComputedStyle( 'direction' ) : this.getStyle( 'direction' ) || this.getAttribute( 'dir' );
+		}
 	});
Index: /CKEditor/trunk/_source/plugins/list/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/list/plugin.js	(revision 5962)
+++ /CKEditor/trunk/_source/plugins/list/plugin.js	(revision 5963)
@@ -276,4 +276,9 @@
 			commonParent = commonParent.getCommonAncestor( contents[i].getParent() );
 
+		var useComputedState = editor.config.useComputedState,
+			listDir, explicitDirection;
+
+		useComputedState = useComputedState === undefined || useComputedState;
+
 		// We want to insert things that are in the same tree level only, so calculate the contents again
 		// by expanding the selected blocks to the same tree level.
@@ -287,4 +292,20 @@
 				{
 					listContents.push( contentNode );
+
+					// Determine the lists's direction. 
+					if ( !explicitDirection && contentNode.getDirection() )
+						explicitDirection = 1;
+
+					var itemDir = contentNode.getDirection( useComputedState );
+
+					if ( listDir !== null )
+					{
+						// If at least one LI have a different direction than current listDir, we can't have listDir.
+						if ( listDir && listDir != itemDir )
+							listDir = null;
+						else
+							listDir = itemDir;
+					}
+
 					break;
 				}
@@ -298,12 +319,14 @@
 		// Insert the list to the DOM tree.
 		var insertAnchor = listContents[ listContents.length - 1 ].getNext(),
-			listNode = doc.createElement( this.type ),
-			dir;
+			listNode = doc.createElement( this.type );
 
 		listsCreated.push( listNode );
+
+		var contentBlock, listItem;
+
 		while ( listContents.length )
 		{
-			var contentBlock = listContents.shift(),
-				listItem = doc.createElement( 'li' );
+			contentBlock = listContents.shift();
+			listItem = doc.createElement( 'li' );
 
 			// Preserve preformat block and heading structure when converting to list item. (#5335) (#5271)
@@ -312,9 +335,11 @@
 			else
 			{
-				if ( contentBlock.hasAttribute( 'dir' ) )
-				{
-					dir = dir || contentBlock.getAttribute( 'dir' );
+				// Remove DIR attribute if it was merged into list root.
+				if ( listDir && contentBlock.getDirection() )
+				{
+					contentBlock.removeStyle( 'direction' );
 					contentBlock.removeAttribute( 'dir' );
 				}
+				
 				contentBlock.copyAttributes( listItem );
 				contentBlock.moveChildren( listItem );
@@ -325,6 +350,7 @@
 		}
 
-		if ( dir )
-			listNode.setAttribute( 'dir', dir );
+		// Apply list root dir only if it has been explicitly declared.
+		if ( listDir && explicitDirection )
+			listNode.setAttribute( 'dir', listDir );
 
 		if ( insertAnchor )
