             
             if (iconInstance)
             {
-                if (iconInstance is UIComponent)
-                {
-                    iconWidth = UIComponent(iconInstance).getExplicitOrMeasuredWidth();
-                    iconHeight = UIComponent(iconInstance).getExplicitOrMeasuredHeight();
+                if (iconInstance is ILayoutElement)
+                {
+                    iconWidth = ILayoutElement(iconInstance).getPreferredBoundsWidth();
+                    iconHeight = ILayoutElement(iconInstance).getPreferredBoundsHeight();
                 }
                 else
                 {

            }
            
            labelDisplayShadow.commitStyles();
            labelDisplayShadow.x = Math.max(0, Math.round(labelX));
            labelDisplayShadow.y = Math.max(0, Math.round(labelY + 1));
            labelDisplayShadow.height = labelHeight;
            labelDisplayShadow.width = labelWidth;
            
            // if labelDisplay is truncated, then push it down here as well.
            // otherwise, it would have gotten pushed in the labelDisplay_valueCommitHandler()

            var iconHeight:Number = iconInstance ? iconInstance.height : 0;
            var w:Number = 0;
            var h:Number = 0;

            // FIXME (egeorgie): should be checking for & using ILayoutElement interface, IFlexDisplayObject
            if (iconInstance is UIComponent)
            {
                iconWidth = UIComponent(iconInstance).getExplicitOrMeasuredWidth();
                iconHeight = UIComponent(iconInstance).getExplicitOrMeasuredHeight();
            }

            if (iconPlacement == IconPlacement.LEFT ||
                iconPlacement == IconPlacement.RIGHT)
            {
