      */
     override protected function commitProperties():void
     {
-        var oldDisplayObject:DisplayObject;
-        
         super.commitProperties();
         
-        if (decoratorClassChanged)
-        {
-            decoratorClassChanged = false;
+        if (decoratorChanged)
+        {
+            decoratorChanged = false;
             
             // let's see if we need to create or remove it
-            if (decoratorClass && !decoratorDisplay)
-            {
-                // need to create it
-                
-                decoratorDisplay = new decoratorDisplayClass();
-                decoratorDisplay.parentChanged(this);
-                decoratorDisplay.source = decoratorClass;
-                
-                decoratorNeedsDisplayObjectAssignment = true;
-            }
-            else if (!decoratorClass && decoratorDisplay)
-            {
-                // need to remove the display object
-                oldDisplayObject = decoratorDisplay.displayObject;
-                if (oldDisplayObject)
-                { 
-                    // If the element created the display object
-                    if (iconDisplay.displayObjectSharingMode != DisplayObjectSharingMode.USES_SHARED_OBJECT &&
-                        oldDisplayObject.parent == this)
-                    {
-                        removeChild(oldDisplayObject);
-                    }
-                }
-                
-                decoratorDisplay.parentChanged(null);
-                decoratorDisplay = null;
+            if (decorator && !decoratorDisplay)
+            {
+                createDecoratorDisplay();
+            }
+            else if (!decorator && decoratorDisplay)
+            {
+                destroyDecoratorDisplay();
             }
             
             invalidateSize();

        super.invalidateDisplayList();
    }
    
    /**
     *  @private
     */

            // let's see if we need to create or remove it
            if ((messageField || (messageFunction != null)) && !messageDisplay)
            {
                createMessageDisplay();
            }
            else if (!(messageField || (messageFunction != null)) && messageDisplay)
            {
                destroyMessageDisplay();
            }
            
            invalidateSize();
