             
             dataGroupProperties = newDataGroupProperties;
             
-            dataGroup.addEventListener(
-                PropertyChangeEvent.PROPERTY_CHANGE, dataGroup_propertyChangeHandler);
+            if (hasEventListener(PropertyChangeEvent.PROPERTY_CHANGE))
+            {
+                // the only reason we have this listener is to re-dispatch events.  So only add it here
+                // if someone's listening on us.
+                dataGroup.addEventListener(
+                    PropertyChangeEvent.PROPERTY_CHANGE, dataGroup_propertyChangeHandler);
+            }
+            
+            if (hasEventListener(RendererExistenceEvent.RENDERER_ADD))
+            {
+                // the only reason we have this listener is to re-dispatch events.  So only add it here
+                // if someone's listening on us.
+                dataGroup.addEventListener(
+                    RendererExistenceEvent.RENDERER_ADD, dispatchEvent);
+            }
+            
+            if (hasEventListener(RendererExistenceEvent.RENDERER_REMOVE))
+            {
+                // the only reason we have this listener is to re-dispatch events.  So only add it here
+                // if someone's listening on us.
+                dataGroup.addEventListener(
+                    RendererExistenceEvent.RENDERER_REMOVE, dispatchEvent);
+            }
         }
     }
     

        }
    }
    
    //--------------------------------------------------------------------------
    //
    //  Event Handlers
    //
    //--------------------------------------------------------------------------
    
   /**
    * @private
    */
    private function dataGroup_propertyChangeHandler(event:PropertyChangeEvent):void
    {
        // Re-dispatch the event if it's one other people are binding too

    }
    
    //----------------------------------
    //  typicalItem
    //----------------------------------

    /**
     *  @copy mx.components.DataGroup#typicalItem
     */
    public function get typicalItem():Object
    {
        return (dataGroup) 
            ? dataGroup.typicalItem 
            : dataGroupProperties.typicalItem;
    }

    /**
     *  @private
     */
    public function set typicalItem(value:Object):void
    {
        if (dataGroup)
        {
            dataGroup.typicalItem = value;
            dataGroupProperties = BitFlagUtil.update(dataGroupProperties as uint, 
                                                     TYPICAL_ITEM_PROPERTY_FLAG, true);
        }
        else
            dataGroupProperties.typicalItem = value;
    }
    
    //----------------------------------
    //  verticalScrollPosition
    //----------------------------------
    
