 
     /**
      *  @private
-     *  Returns an ordered map of unqualified class names, starting with the
-     *  object's class name and then each super class name until we hit a stop
-     *  class, such as mx.core::UIComponent.
-     */
-    private static function getUnqualifiedTypeHierarchy(object:IStyleClient):OrderedObject
+     *  @param object - the IStyleClient to be introspected  
+     *  @param qualified - whether qualified type names should be used
+     *  @return an ordered map of class names, starting with the object's class
+     *  name and then each super class name until we hit a stop class, such as
+     *  mx.core::UIComponent.
+     */
+    private static function getTypeHierarchy(object:IStyleClient, qualified:Boolean=true):OrderedObject
     {
         var className:String = getQualifiedClassName(object);
-        var hierarchy:OrderedObject = StyleManager.typeHierarchyCache[className];
+        var hierarchy:OrderedObject = StyleManager.typeHierarchyCache[className] as OrderedObject;
         if (hierarchy == null)
         {
             hierarchy = new OrderedObject();

     *  @return An unsorted Array of matching style declarations for the given
     *  subject.
     */
    private static function matchStyleDeclarations(declarations:Object,
            object:IAdvancedStyleClient):Array // of CSSStyleDeclaration
    {
        var matchingDecls:Array = [];

        // Find the subset of declarations that match this component
        for (var selector:String in declarations)
        {
            var decl:CSSStyleDeclaration = declarations[selector];
            if (decl.isMatch(object))
                matchingDecls.push(decl);
        }

        var className:String = object.className;
        var advancedObject:IAdvancedStyleClient = object as IAdvancedStyleClient;

        var typeHierarchy:OrderedObject = getTypeHierarchy(object, false);
        var types:Array = typeHierarchy.propertyList;
        var typeCount:int = types.length;
        var classDecls:Array = null;
