Index: _source/plugins/bidi/plugin.js
===================================================================
--- _source/plugins/bidi/plugin.js	(revision 5885)
+++ _source/plugins/bidi/plugin.js	(revision )
@@ -18,19 +18,22 @@
 
 		useComputedState = useComputedState === undefined || useComputedState;
 
-		if ( useComputedState )
+		// We can use computedState provided by the browser or traverse parents manually.
+		if ( !useComputedState )
 		{
-			var selection = editor.getSelection(),
-				ranges = selection.getRanges();
+			selectedElement = path.elements[ 0 ];
 
-			selectedElement = ranges && ranges[ 0 ].getEnclosedNode();
-
-			// If this is not our element of interest, apply to fully selected elements from guardElements.
-			if ( !selectedElement || selectedElement
-					&& !( selectedElement.type == CKEDITOR.NODE_ELEMENT && selectedElement.getName() in directSelectionGuardElements )
+			while ( !selectedElement.hasAttribute ||
+				!( selectedElement.hasAttribute( 'dir' ) || selectedElement.getStyle( 'direction' ) ) ||
+				!( selectedElement.getName() in directSelectionGuardElements )
-				)
+			)
-				selectedElement = getFullySelected( selection, guardElements );
+			{
+				var parent = selectedElement.getParent();
+				if ( !parent )
+					break;
+				selectedElement = parent;
-		}
+			}
+		}
 
 		selectedElement = selectedElement || path.block || path.blockLimit;
 
