         if (messageDisplay)
         {
             // handle message
-            // don't use the measured text width or height because that only takes the first line in to account
             messageWidth = Math.max(labelComponentsViewWidth, 0);
             messageHeight = Math.max(viewHeight - labelHeight - verticalGap, 0);
-            // FIXME (rfrishbe): we should check to see if this causes textHeight to change because then we 
-            // might need to remeasure
+            
+            // grab old messageDisplay height before resizing it
+            var oldMessageMeasuredHeight:Number = getElementPreferredHeight(messageDisplay);
+            
             resizeElement(messageDisplay, messageWidth, messageHeight);
             
-            // FIXME (rfrishbe): figure out if this is right with regards to multi-line text.
-            // For instance, if the text component spans to 2 lines but only shows one line, then textHeight here 
-            // is the size of the two line text.  We take the minimum with messageHeight to make sure 
-            // we don't position it outside of the item renderer's bounds later on, but this 
-            // calculation still isn't correct.  We basically want the textHeight for the number of 
-            // displayed lines.
-            messageHeight = Math.min(messageHeight, messageDisplay.textHeight + UITextField.TEXT_HEIGHT_PADDING);
+            // 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)

            if (labelDisplay.isTruncated)
                labelDisplay.text = labelText;
            
            // commit styles to get an accurate measurement
            labelDisplay.commitStyles();
            labelTextHeight = labelDisplay.textHeight + UITextField.TEXT_HEIGHT_PADDING;
        }
        
        if (messageDisplay && messageText != "")
        {
            // commit styles to get an accurate measurement
            messageDisplay.commitStyles();
        }


     *  The source to set iconDisplay to, after waiting an appropriate delay period
     */
    private var loadingIconSource:Object;
	
    //--------------------------------------------------------------------------
    //
    //  Public Properties: Overridden
