         var myMeasuredMinHeight:Number = 0;
         
         // Icon is on left
+		var myIconWidth:Number = 0;
+		var myIconHeight:Number = 0;
         if (iconDisplay)
         {
-            var myIconWidth:Number = (isNaN(iconWidth) ? iconDisplay.getPreferredBoundsWidth() : iconWidth);
-            var myIconHeight:Number = (isNaN(iconHeight) ? iconDisplay.getPreferredBoundsHeight() : iconHeight);
+			myIconWidth = (isNaN(iconWidth) ? getElementPreferredWidth(iconDisplay) : iconWidth);
+			myIconHeight = (isNaN(iconHeight) ? getElementPreferredHeight(iconDisplay) : iconHeight);
             
             myMeasuredWidth += myIconWidth;
-            myMeasuredHeight = Math.max(myMeasuredHeight, myIconHeight);
             myMeasuredMinWidth += myIconWidth;
+			myMeasuredHeight = Math.max(myMeasuredHeight, myIconHeight);
             myMeasuredMinHeight = Math.max(myMeasuredMinHeight, myIconHeight);
         }
-        
+		
+		// Decorator is up next
+		var decoratorWidth:Number = 0;
+		var decoratorHeight:Number = 0;
+		
+		if (decoratorDisplay)
+		{
+			decoratorWidth = getElementPreferredWidth(decoratorDisplay);
+			decoratorHeight = getElementPreferredHeight(decoratorDisplay);
+			
+			myMeasuredWidth += decoratorWidth;
+			myMeasuredMinWidth += decoratorWidth;
+			myMeasuredHeight = Math.max(myMeasuredHeight, decoratorHeight);
+			myMeasuredMinHeight = Math.max(myMeasuredHeight, decoratorHeight);
+		}
+		
         // Text is aligned next to icon
         var labelWidth:Number = 0;
         var labelHeight:Number = 0;

import mx.controls.listClasses.*;
import mx.core.IFlexDisplayObject;
import mx.core.IVisualElement;
import mx.core.UITextField;
import mx.core.UITextFormat;
import mx.core.mx_internal;

        if (messageDisplay)
        {
            // handle message
            messageWidth = Math.max(labelComponentsViewWidth, 0);
            messageHeight = Math.max(viewHeight - labelHeight - verticalGap, 0);
            
            // grab old messageDisplay height before resizing it
            var oldMessageMeasuredHeight:Number = getElementPreferredHeight(messageDisplay);
            
            resizeElement(messageDisplay, messageWidth, messageHeight);
            
            // grab new messageDisplay height after the messageDisplay has taken its final size
            var newMessageMeasuredHeight:Number = getElementPreferredHeight(messageDisplay);
			
            // if the resize caused the messageDisplay's height to change (because of 
            // text reflow), then we need to remeasure ourselves with our new estimatedWidth
            if (oldMessageMeasuredHeight != newMessageMeasuredHeight)
            {
				// if unscaledWidth is 0, we're in an edge case, so let's not invalidateSize() here
				// as we're not really visible anyways, so why do an extra invalidation
				if (unscaledWidth > 0)
	                invalidateSize();
            }
			
            messageHeight = Math.max(0, Math.min(messageHeight, newMessageMeasuredHeight));
            
            // since it's multi-line, no need to truncate
            //if (messageDisplay.isTruncated)
