                 if (foundInstance)
                 {
                     // Decrement the indexNumber for each button after the removed button.
-                    rb.indexNumber--;
+                    rb.mx_internal::indexNumber = rb.mx_internal::indexNumber - 1;
                 }
                 else if (rb == instance)
                 {
-                	rb.group = null;
-
+                    // During a state transition, called when rb is added back 
+                    // to display list.
+                    instance.addEventListener(Event.ADDED, radioButton_addedHandler);
+        
+                    // Don't set the group to null.  If this is being removed
+                    // because the state changed, the group will be needed
+                    // if the radio button is readded later because of another
+                    // state transition.
+                	//rb.group = null;
+
+                    // If the rb is selected, leave the button itself selected
+                    // but clear the selection for the group.
                     if (instance == _selection)
-                    {
                         _selection = null;
-                    }
+
+                    instance.mx_internal::radioButtonGroup = null;
+                    instance.mx_internal::invalidateRadioButtonState();
+
                     // Remove the radio button from the internal array.
                     radioButtons.splice(i,1);
                     foundInstance = true;
+
                     // redo the same index because we removed the previous item at this index
                     i--;
                 }


    /**
     *  @private
     *  Add a radio button to the group.
     */
    mx_internal function addInstance(instance:FxRadioButton):void
    {
        instance.addEventListener(Event.REMOVED, radioButton_removedHandler);
        radioButtons.push(instance);

        // Apply group indices in "breadth-first" order.
        radioButtons.sort(breadthOrderCompare);
        for (var i:int = 0; i < radioButtons.length; i++)
            radioButtons[i].indexNumber = i;

        if (_selectedValue != null)
            selectedValue = _selectedValue;

		dispatchEvent(new Event("numRadioButtonsChanged"));
    }

    /**
     *  @private
     *  Remove a radio button from the group.
     */
    mx_internal function removeInstance(instance:FxRadioButton):void
    {
        if (instance)
        {

            var foundInstance:Boolean = false;
            for (var i:int = 0; i < numRadioButtons; i++)
            {

    public function set selection(value:FxRadioButton):void
    {
        // Going through the selection setter should never fire a change event.
        mx_internal::setSelection(value, false);
    }

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