         var textWidth:Number = 0;
         var textHeight:Number = 0;
         var textDescent:Number = 0;
-
+		var textLeading:Number = 0;
+		
         // reset text if it was truncated before.
         if (hostComponent && labelDisplay.isTruncated)
             labelDisplay.text = hostComponent.label;
         labelDisplay.commitStyles();
-
-        if (hostComponent && hostComponent.label != "")
-        {
-            // +1 originates from MX Button without explaination
-            var textSize:Point = labelDisplay.measuredTextSize;
-            textWidth = textSize.x + 1;
-            textHeight = textSize.y;
-            textDescent = labelDisplay.getLineMetrics(0).descent;
-        }
-        else
-        {
-            var metrics:TextLineMetrics = measureText("Wj");
-            textHeight = metrics.height + UITextField.TEXT_HEIGHT_PADDING;
+		
+		
+        if (hostComponent)
+        {
+			var metrics:TextLineMetrics = labelDisplay.getLineMetrics(0);
+            textWidth = getElementPreferredWidth(labelDisplay);
+            textHeight = getElementPreferredHeight(labelDisplay);
             textDescent = metrics.descent;
+			textLeading = metrics.leading;
         }
 
         var viewWidth:Number = unscaledWidth;

            labelDisplay.text = hostComponent.label;
        labelDisplay.commitStyles();

        if (labelDisplay.text)
        {
            // +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;

            labelX = layoutPaddingLeft;
            iconX += ((viewWidth - iconWidth - layoutPaddingLeft - layoutPaddingRight) / 2) + layoutPaddingLeft;

			// If there's text, when positioning the icon on the top or the bottom the text should 
			// be positioned according to its full height (including descent), not just the baseline
			// if there's text
			var alignmentLabelHeight:Number = labelHeight;
			if (labelDisplay.text != "")
				alignmentLabelHeight += textDescent;

            if (iconPlacement == IconPlacement.BOTTOM)
            {
                labelY += ((viewHeight - alignmentLabelHeight - iconHeight -
                    layoutPaddingTop - layoutPaddingBottom - verticalGap) / 2) + layoutPaddingTop;
                iconY += labelY + alignmentLabelHeight + verticalGap;
            }
            else
            {
                // label bottom is constrained by layoutPaddingBottom
                labelY = viewHeight - layoutPaddingBottom - alignmentLabelHeight;

                // icon is vertically centered in the space above the label
                iconY = Math.max(((labelY - iconHeight - verticalGap) / 2), layoutPaddingTop);
