                 uiComponentClass = Class(ApplicationDomain.currentDomain.getDefinition("mx.core.UIComponent"));
         }
         
+        // 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");
         
         if (useComputedMatrix && computedMatrixProperty == null)
             computedMatrixProperty = new QName(mx_internal, "computedMatrix");
         
-        while (displayObject && displayObject.transform.matrix)
+        while (displayObject && displayObject.transform.matrix && (!excludingRootSprite || displayObject != root))
         {            
             var scrollRect:Rectangle = displayObject.scrollRect;
             if (scrollRect != null)

     *  hierarchy. Walk the parent tree manually, calculating the matrix manually.
     *  
     *  @param displayObject Calculate the concatenatedMatrix for this displayObject
     * 
     *  @return The concatenatedMatrix for the displayObject
     * 

     * 
     *  @param displayObject Calculate the concatenatedMatrix for this displayObject
     * 
     *  @param excludingRootSprite Whether to exclude the root's transformation in the calculations.
     * 
     *  @return The concatenatedMatrix for the displayObject
     * 
     *  @langversion 3.0
