     private var _selector:CSSSelector;
 
     /**
-     *  A potential chain of rules used to match components to this style
-     *  declaration. 
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 9
-     *  @playerversion AIR 1.1
-     *  @productversion Flex 3
-     */
-    mx_internal function get selector():CSSSelector
+     *  This property is the base selector of a potential chain of selectors
+     *  and conditions that are used to match CSS style declarations to
+     *  components.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
+    public function get selector():CSSSelector
     {
         return _selector; 
     }
 
+    public function set selector(value:CSSSelector):void
+    {
+        _selector = value;
+        _selectorString = null;
+    }
+
     //----------------------------------
     //  selectorString
     //----------------------------------

        return _selectorString; 
    }

    /**
     *  Legacy support for setting a Flex 3 styled selector string after 
     *  the construction of a style declaration. Only global class selectors or
     *  simple type selectors are supported. Note that this style declaration is
     *  not automatically registered with the StyleManager when using this API.
     *  
     *  @langversion 3.0
     *  @playerversion Flash 9
     *  @playerversion AIR 1.1
     *  @productversion Flex 3
     */ 
    mx_internal function set selectorString(value:String):void
    {
        // For the legacy API, the first arugment is either a simple
        // type selector or a global class selector
        if (value.charAt(0) == ".")
        {
            var condition:CSSCondition = new CSSCondition(CSSConditionKind.CLASS_CONDITION, value.substr(1));
            _selector = new CSSSelector(CSSSelectorKind.CONDITIONAL_SELECTOR, "", [condition]);
            _subject = "global";
        }
        else
        {
            _subject = value;
            _selector = new CSSSelector(CSSSelectorKind.TYPE_SELECTOR, value);
        }

        _specificity = _selector.specificity;
        _selectorString = value;
    }

    //----------------------------------
    //  specificity
    //----------------------------------

    private var _specificity:uint;

    /**
     *  Determines the order of precedence when applying multiple style

    //  Methods
    //
    //--------------------------------------------------------------------------

    /**
     *  @private
     *  Determines whether the selector chain for this style declaration makes
     *  use of a pseudo condition.
     */  
    mx_internal function getPseudoCondition():String
    {
        return (selector != null) ? selector.getPseudoCondition() : null;
    }

    /**
     * @private
     * Determines whether this style declaration has an advanced selector.
     */  
    mx_internal function isAdvanced():Boolean
    {
        if (selector != null)
        {
            if (selector.ancestor)
            {
                return true;
            }
            else if (selector.conditions)
            {
                if (subject != "*" && subject != "global")
                {
                    return true;
                }

                for each (var condition:CSSCondition in selector.conditions)
                {
                    if (condition.kind != CSSConditionKind.CLASS)
                    {
                        return true;
                    }
                }
            }
