     mx_internal function set phase(value:String):void
     {
         _phase = value;
+        phaseChanged = true;
         
         invalidateSize();
+        invalidateProperties();
         invalidateDisplayList();
     }
 

        // If we don't have a skin, show focus around the icon.
        super.adjustFocusRect(!currentSkin ? DisplayObject(currentIcon) : this);
    }

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

        return newIcon;
    }

    /**
     *  @private
     *  Storage for the most recent button state.
     */
    protected var _currentButtonState:String;
    
    /**
     *  @private
     *  Computes the current button state based on whether this button is 
     *  enabled or disabled, whether it is selected or unselected, and how it 
     *  is currently interacting with the mouse (i.e. the up/over/down state).
     */
    mx_internal function getCurrentButtonState():String
    {
        _currentButtonState = "";
        
        if (!enabled)
            _currentButtonState = selected ? "selectedDisabled" : "disabled";
        else if (phase == ButtonPhase.UP)
            _currentButtonState = selected ? "selectedUp" : "up";
        else if (phase == ButtonPhase.OVER)
            _currentButtonState = selected ? "selectedOver" : "over";
        else if (phase == ButtonPhase.DOWN)
            _currentButtonState = selected ? "selectedDown" : "down";
        
        return _currentButtonState;
    }
    
   /**
     *  @private
     *  Controls the layout of the icon and the label within the button.
