                 this.removeChild(iconInstance as DisplayObject);
         }
         iconInstance = null;
-        
+
         // Set-up the iconHolder
         var needsHolder:Boolean = icon && !(icon is Class) && !(icon is DisplayObject);
         if (needsHolder && !iconHolder)

            {
                iconX += ((viewWidth - iconWidth - layoutPaddingLeft - layoutPaddingRight) / 2) + layoutPaddingLeft;
            }
            
            if (iconPlacement == IconPlacement.BOTTOM)
            {
                labelY += ((viewHeight - labelHeight - iconHeight - 
                    layoutPaddingTop - layoutPaddingBottom - verticalGap) / 2) + layoutPaddingTop;
                iconY += labelY + labelHeight + verticalGap;
            }

            iconChanged = false;
            setIcon(getStyle("icon"));
        }

        if (enabledChanged)
        {
            commitDisabled();
            enabledChanged = false;
        }
    }

    /**
     *  @private
     */
    override protected function measure():void
    {
        super.measure();
        
        // FIXME (jasonsj): icon-only button should not change with font size
        //                  changes. use LabelAndIconLayout#measure(). adjust
        //                  for ascent height

        var labelWidth:Number = 0;
        var labelHeight:Number = 0;
        var iconDisplay:DisplayObject = getIconDisplay();

        // reset text if it was truncated before.
        if (hostComponent && labelDisplay.isTruncated)
            labelDisplay.text = hostComponent.label;
        labelDisplay.commitStyles();

        if (labelDisplay.text)
        {
            // FIXME (jasonsj): was previously textWidth + UITextField.TEXT_WIDTH_PADDING + 1;
            //                  +1 originates from MX Button without explaination
            var textSize:Point = labelDisplay.measuredTextSize;
            labelWidth = textSize.x + 1;
            labelHeight = textSize.y;
        }
        else if (!iconDisplay)
        {
            // only get empty label height when there no icon is present
            labelHeight = measureText("Wj").height + UITextField.TEXT_HEIGHT_PADDING;
        }
        
        var w:Number = layoutPaddingLeft + layoutPaddingRight;
        var h:Number = layoutPaddingTop + layoutPaddingBottom;
        
        var iconWidth:Number = 0;
        var iconHeight:Number = 0;

        if (iconDisplay is ILayoutElement)
        {
            // why postLayoutTransform=false vs. true in desktop skin?
            iconWidth = ILayoutElement(iconDisplay).getPreferredBoundsWidth(false);
            iconHeight = ILayoutElement(iconDisplay).getPreferredBoundsHeight(false);
        }
        else if (iconDisplay)
        {
            iconWidth = iconDisplay.width;
            iconHeight = iconDisplay.height;
        }
        
        var iconPlacement:String = getStyle("iconPlacement");

        if (iconPlacement == IconPlacement.LEFT ||
            iconPlacement == IconPlacement.RIGHT)
        {
            w += labelWidth + iconWidth;
            if (labelWidth && iconWidth)
                w += layoutGap;
            h += Math.max(labelHeight, iconHeight);
        }
        else
        {
            w += Math.max(labelWidth, iconWidth);
            h += labelHeight + iconHeight;
            if (labelHeight && iconHeight)
                h += layoutGap;
        }

        // minimums
        measuredMinWidth = w
        measuredMinHeight = h;

        // measured sizes are no smaller than spec for touch-based sizes
        measuredWidth = Math.max(w, layoutMeasuredWidth);
        measuredHeight = Math.max(h, layoutMeasuredHeight);
    }

    /**
     *  @private
     */
    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
    {
        var labelWidth:Number = 0;
        var labelHeight:Number = 0;

        var labelX:Number = 0;
        var labelY:Number = 0;

        var iconWidth:Number = 0;
        var iconHeight:Number = 0;

        var iconX:Number = 0;
        var iconY:Number = 0;

        var horizontalGap:Number = 0;
        var verticalGap:Number = 0;

        var iconPlacement:String = getStyle("iconPlacement");

        var textWidth:Number = 0;
        var textHeight:Number = 0;
        var textDescent:Number = 0;

        // reset text if it was truncated before.
        if (hostComponent && labelDisplay.isTruncated)
            labelDisplay.text = hostComponent.label;
        labelDisplay.commitStyles();

        if (hostComponent && hostComponent.label != "")
        {
            // FIXME (jasonsj): was previously textWidth + UITextField.TEXT_WIDTH_PADDING + 1;
