 
     /**
      *  @private
-     */
-    private function breadthOrderCompare(a:DisplayObject, b:DisplayObject):Number
+	 *  Comparison function used to sort items as they are added to the radioButtons array.
+	 *  Compares by tabIndex or if neither item defines a tabIndex, by "breadthOrder."
+	 * 
+	 *  Returns -1 if a is before b in sort order, 0 if a and b have same
+     *  sort order and 1 if a after b in sort order.
+     */
+    private function readOrderCompare(a:DisplayObject, b:DisplayObject):Number
     {
         var aParent:DisplayObject = (a is UIComponent) ? UIComponent(a).$parent : a.parent;
         var bParent:DisplayObject = (b is UIComponent) ? UIComponent(b).$parent : b.parent;
 
         if (!aParent || !bParent)
             return 0;
-
-        var aNestLevel:int = (a is UIComponent) ? UIComponent(a).nestLevel : -1;
+		
+		// first check to see if we can compare by tabIndex
+		var aTabIndex:int = (a is InteractiveObject) ? InteractiveObject(a).tabIndex : -1;
+		var bTabIndex:int = (b is InteractiveObject) ? InteractiveObject(b).tabIndex : -1;
+		
+		// if one of the items being compared has a defined tabIndex, compare by tabIndex
+		if(aTabIndex > -1 || bTabIndex > -1)
+		{
+			if (aTabIndex > bTabIndex)
+				return (bTabIndex == -1) ? -1 : 1; // items with assigned tabIndex come before those without
+			if (aTabIndex < bTabIndex)
+				return (aTabIndex == -1) ? 1 : -1; // items without assigned tabIndex come after those without
+			if (a == b)
+				return 0;
+		}
+		
+		// if neither item has a defined tabIndex we compare by "breadthOrder"
+		var aNestLevel:int = (a is UIComponent) ? UIComponent(a).nestLevel : -1;
         var bNestLevel:int = (b is UIComponent) ? UIComponent(b).nestLevel : -1;
 
         var aIndex:int = DisplayObjectContainer(aParent).getChildIndex(a);

        else if (a == b)
            return 0;
        else // Nest levels are identical, compare ancestors.
            return breadthOrderCompare(aParent, bParent);
    }

    //--------------------------------------------------------------------------


import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flash.display.InteractiveObject;
import flash.events.Event;
import flash.events.EventDispatcher;

import mx.core.FlexGlobals;
import mx.core.IFlexDisplayObject;
import mx.core.IMXMLObject;
import mx.core.IRawChildrenContainer;
import mx.core.UIComponent;
import mx.core.mx_internal;
import mx.events.FlexEvent;
import mx.events.ItemClickEvent;

