     {
         super.removingChild(child);
 
-        child.dispatchEvent(new FlexEvent(FlexEvent.REMOVE));
-
-        var event:ChildExistenceChangedEvent =
-            new ChildExistenceChangedEvent(
-            ChildExistenceChangedEvent.CHILD_REMOVE);
-        event.relatedObject = child;
-        dispatchEvent(event);
+        if (hasEventListener(FlexEvent.REMOVE))
+            child.dispatchEvent(new FlexEvent(FlexEvent.REMOVE));
+
+        if (hasEventListener(ChildExistenceChangedEvent.CHILD_REMOVE))
+        {
+            var event:ChildExistenceChangedEvent =
+                new ChildExistenceChangedEvent(
+                ChildExistenceChangedEvent.CHILD_REMOVE);
+            event.relatedObject = child;
+            dispatchEvent(event);
+        }
     }
 
     /**

                FlexEvent.UPDATE_COMPLETE, layoutCompleteHandler, false, 0, true);
        }

        dispatchEvent(new Event("childrenChanged"));
    }

    [Bindable("childrenChanged")]

     */
    override mx_internal function childAdded(child:DisplayObject):void
    {
        if (hasEventListener("childrenChanged"))
            dispatchEvent(new Event("childrenChanged"));

        if (hasEventListener(ChildExistenceChangedEvent.CHILD_ADD))
        {
            var event:ChildExistenceChangedEvent =
                new ChildExistenceChangedEvent(
                ChildExistenceChangedEvent.CHILD_ADD);
            event.relatedObject = child;
            dispatchEvent(event);
        }

        if (hasEventListener(FlexEvent.ADD))
            child.dispatchEvent(new FlexEvent(FlexEvent.ADD));
                
        super.childAdded(child); // calls createChildren()
    }
