         if (headerIndex == -1)
             return;
 
-        var newColumnIndex:int;
-
-        if (event.keyCode == Keyboard.DOWN)
+		// If rtl layout, need to swap LEFT and RIGHT so correct action
+		// is done.
+		var keyCode:uint = mapKeycodeForLayoutDirection(event);
+		
+		var newColumnIndex:int;
+
+        if (keyCode == Keyboard.DOWN)
         {
             unselectColumnHeader(headerIndex, true);
             headerIndex = -1;
         }
-        else if (event.keyCode == Keyboard.LEFT)
+        else if (keyCode == Keyboard.LEFT)
         {
             newColumnIndex = viewDisplayableColumnAtOffset(headerIndex, -1);
             if (newColumnIndex != -1)

                selectColumnHeader(headerIndex);
            }
        }
        else if (event.keyCode == Keyboard.RIGHT)
        {
            newColumnIndex = viewDisplayableColumnAtOffset(headerIndex, +1);
            if (newColumnIndex != -1)

                selectColumnHeader(headerIndex);
            }
        }
        else if (keyCode == Keyboard.SPACE)
        {
            if (sortableColumns && columns[headerIndex].sortable)
            {
