         
         super.validateSize(recursive);
     }
+	
+	/**
+	 *  @private
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.0
+	 *  @productversion Flex 4.5
+	 */
+	override public function setEstimatedSize(estimatedWidth:Number = NaN, 
+											  estimatedHeight:Number = NaN,
+											  invalidateSizeAllowed:Boolean = true):void
+	{
+		var oldcw:Number = this.estimatedWidth;
+		var oldch:Number = this.estimatedHeight;
+		
+		super.setEstimatedSize(estimatedWidth, estimatedHeight, invalidateSizeAllowed);
+		
+		var sameWidth:Boolean = isNaN(estimatedWidth) && isNaN(oldcw) || estimatedWidth == oldcw;
+		var sameHeight:Boolean = isNaN(estimatedHeight) && isNaN(oldch) || estimatedHeight == oldch;
+		if (!(sameHeight && sameWidth))
+		{
+			if (!isNaN(explicitWidth) &&
+				!isNaN(explicitHeight))
+				return;
+			
+			if (invalidateSizeAllowed)
+				invalidateSize();
+		}
+	}
     
     /**
      *  @private

            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();
        }


                positionElement(messageDisplay, labelComponentsX, labelComponentsY + labelHeight + verticalGap);
        }
        
        // see if we have an icon that needs to be validated
        if (iconDisplay && 
            iconDisplay.displayObject is ISharedDisplayObject && 
