         if ($transformProperty == null)
             $transformProperty = new QName(mx_internal, "$transform");
         
-        while (displayObject && displayObject.transform.matrix && (!excludingRootSprite || displayObject != root))
+        while (displayObject && displayObject.transform.matrix && displayObject != topParent)
         {            
             var scrollRect:Rectangle = displayObject.scrollRect;
             if (scrollRect != null)

        
        // Note, root will be "null" if the displayObject is off the display list. In particular,
        // during start-up, before applicationComplete is dispatched, root will be null.
        // Note that getConcatenatedMatrixHelper() with excludeRootSprite == true will still work
        // correctly in those cases as we use ".$parent" to walk up the parent chain and during start-up
        // $parent will be null for the application before applicationComplete has been dispatched.
        var root:DisplayObject = displayObject.root;
        
        if (fakeDollarParent == null)
            fakeDollarParent = new QName(mx_internal, "$parent");

     * 
     *  @param displayObject Calculate the concatenatedMatrix for this displayObject
     * 
     *  @param topParent <p>When specified, the matrix is computed up to the topParent, 
     *  excluding topParent's concatenated matrix.  This is useful when computing a transform
     *  in order to move an object to a different parent but the object's transform needs
     *  to be adjusted in order to keep its original position on screen.</p>
     * 
     *  @return The concatenatedMatrix for the displayObject
     * 
