         // TODO: Send notification
     }
     
-    /**
-     *  The instantiated skin object. This property should not be set directly.
-     */
-    [Bindable]
-    protected var skinObject:Skin;
+    // we need all these getters/setters around skinObject so it
+    // can be a public read-only Bindable variable and a protected
+    // read/write variable.
+    private var __skinObject:Skin;
+    
+    [Bindable("skinObjectChanged")]
+    
+    /**
+     *  The instantiated skin object. This property should not be set 
+     *  directly but should be set using loadSkin().
+     */
+    protected function get _skinObject():Skin
+    {
+        return __skinObject;
+    }
+    
+    protected function set _skinObject(value:Skin):void
+    {
+    	if (value === __skinObject)
+    	   return;
+        
+        __skinObject = value;
+        dispatchEvent(new Event("skinObjectChanged"));
+    }
+    
+    [Bindable("skinObjectChanged")]
+    
+    /**
+     *  The instantiated skin object.
+     */
+    public function get skinObject():Skin
+    {
+        return _skinObject;
+    }
     
     /**
      *  @private

            var skinClass:Class = getStyle("skinZZ") as Class;
            
            if (skinClass)
                skinObject = new skinClass();
        }
        
        if (skinObject)

     */
    protected function invalidateSkinState():void
    {
        if (skinStateIsDirty)
            return; // State is already invalidated

        skinStateIsDirty = true;
        invalidateProperties();
    }

    /**
