             }
         }
 
-        return _subjects[subject] as Array;
+        // NOTE: It's important the the parent declarations come before this style
+        // manager's styles because the order here is the order they are added to the 
+        // prototype chain.
+        var theSubjects:Array = null;
+
+        if (parent)
+            theSubjects = parent.getStyleDeclarations(subject);
+
+        if (!theSubjects)
+        {
+            theSubjects = _subjects[subject] as Array;
+        }
+        else
+        {
+            var subjectsArray:Array = _subjects[subject] as Array;
+            if (subjectsArray)
+                theSubjects = theSubjects.concat(subjectsArray);
+        }
+        
+        return theSubjects;
+    }
+
+    private function isUnique(element:*, index:int, arr:Array):Boolean {
+        return (arr.indexOf(element) >= 0);
     }
 
     /**

    {
		if (!stylesRoot)
		{
			if (_selectors["global"] != null)
			{
			    stylesRoot = _selectors["global"].addStyleToProtoChain({}, null);
			}
		}
    }

     */
    public function isInheritingStyle(styleName:String):Boolean
    {
        if (inheritingStyles[styleName] == true)
            return true;
        
        if (parent && parent.isInheritingStyle(styleName))
            return true;
        
        return false;
    }

    /**
