 
     /**
      *  @private
-     *  Static point for use in transformPointToParent
-     */
-    private static var xformPt:Point;
-
-    /**
-     *  @private
      *  Initializes the implementation and storage of some of the less
      *  frequently used advanced layout features of a component.
      *  Call this function before attempting to use any of the
      *  features implemented by the AdvancedLayoutFeatures object.
      */
-    private function initAdvancedLayoutFeatures():void
+    private function initAdvancedLayoutFeatures():AdvancedLayoutFeatures
     {
         var features:AdvancedLayoutFeatures = new AdvancedLayoutFeatures();
 

            _includeInLayout = false;
        }
        
        if (_layoutFeatures == null)
        {
            // TODO (chaase): should provide a way to return to having no
            // layoutFeatures if we call this later with a more trivial
            // situation
            var needAdvancedLayout:Boolean =
                (scale != null && ((!isNaN(scale.x) && scale.x != 1) ||
                    (!isNaN(scale.y) && scale.y != 1) ||
                    (!isNaN(scale.z) && scale.z != 1))) ||
                (rotation != null && ((!isNaN(rotation.x) && rotation.x != 0) ||
                    (!isNaN(rotation.y) && rotation.y != 0) ||
                    (!isNaN(rotation.z) && rotation.z != 0))) ||
                (translation != null && translation.z != 0 && !isNaN(translation.z)) ||
                postLayoutScale != null ||
                postLayoutRotation != null ||
                (postLayoutTranslation != null &&
                    (postLayoutTranslation.x != translation.x ||
                        postLayoutTranslation.y != translation.y ||
                        postLayoutTranslation.z != translation.z));
            if (needAdvancedLayout)
                initAdvancedLayoutFeatures();
        }
        if (_layoutFeatures)
        {
            _layoutFeatures.transformAround(transformCenter, scale, rotation, translation,
                postLayoutScale, postLayoutRotation, postLayoutTranslation);
            invalidateTransform();

            // Will not invalidate parent if we have set _includeInLayout to false
            // in the beginning of the method
            invalidateParentSizeAndDisplayList();
        }
        else
        {
            if (translation == null && transformCenter != null)
            {
                if (xformPt == null)
                    xformPt = new Point();
                xformPt.x = transformCenter.x;
                xformPt.y = transformCenter.y;
                var xformedPt:Point =
                    transform.matrix.transformPoint(xformPt);
            }
            if (rotation != null && !isNaN(rotation.z))
                this.rotation = rotation.z;
            if (scale != null)
            {
                scaleX = scale.x;
                scaleY = scale.y;
            }
            if (transformCenter == null)
            {
                if (translation != null)
                {
                    x = translation.x;
                    y = translation.y;
                }
            }
            else
            {
                if (xformPt == null)
                    xformPt = new Point();
                xformPt.x = transformCenter.x;
                xformPt.y = transformCenter.y;
                var postXFormPoint:Point =
                    transform.matrix.transformPoint(xformPt);
                if (translation != null)
                {
                    x += translation.x - postXFormPoint.x;
                    y += translation.y - postXFormPoint.y;
                }
                else
                {
                    x += xformedPt.x - postXFormPoint.x;
                    y += xformedPt.y - postXFormPoint.y;
                }
            }
        }
        
        if (!invalidateLayout)
            _includeInLayout = oldIncludeInLayout;
    }

    /**
     * A utility method to transform a point specified in the local
     * coordinates of this object to its location in the object's parent's
     * coordinates. The pre-layout and post-layout result will be set on
     * the <code>position</code> and <code>postLayoutPosition</code>
     * parameters, if they are non-null.
     *
     * @param localPosition The point to be transformed, specified in the
     * local coordinates of the object.
     * @param position A Vector3D point that will hold the pre-layout
     * result. If null, the parameter is ignored.
     * @param postLayoutPosition A Vector3D point that will hold the post-layout
     * result. If null, the parameter is ignored.
     *
     *  @langversion 3.0
     *  @playerversion Flash 10

        _layoutFeatures = features;

        invalidateTransform();
        return features;
    }

    /**
