     
     /**
      *  @private
+     *  Return the original height if the soft keyboard is active. This height
+     *  is used to stabilize AUTO positioning so that the position is based
+     *  on the original height of the Callout instead of a possibly shorter
+     *  height due to soft keyboard effects.
+     */
+    mx_internal function get calloutHeight():Number
+    {
+        return (isSoftKeyboardEffectActive) ? softKeyboardEffectCachedHeight : getLayoutBoundsHeight();
+    }
+    
+    /**
+     *  @private
      *  Compute max width and max height. Uses the the owner and screen bounds 
      *  as well as preferred positions to determine max width and max height  
      *  for all possible exterior and interior positions.

        // If preferred position was AUTO, then allow maxHeight to grow to
        // fit the interior position if the owner is tall
        if ((verticalPosition == CalloutPosition.AUTO) && 
            (ownerBounds.height > calloutMaxHeight))
            calloutMaxHeight += ownerBounds.height;
    }

    /**

        var ownerRight:Number = ownerBounds.right;
        var ownerTop:Number = ownerBounds.top;
        var ownerBottom:Number = ownerBounds.bottom;
        var maxW:Number;
        var maxH:Number;
        
        switch (actualHorizontalPosition)
        {
            case CalloutPosition.MIDDLE:
            {
                // Callout matches screen width
                maxW = screen.width - (margin * 2);
                break;
            }
            case CalloutPosition.START:
