         _object = object;
         _field = field;
         _refreshFields = refreshFields;
-        _attrListener = new AttributeChangeAdapter(attrChanged);
-        _setListener = new SetAdapter(entryAdded, entryUpdated, entryRemoved);
-        _object.addListener(_attrListener);
-        _object.addListener(_setListener);
+        _object.addListener(this);
 
         setEntries(_object[_field] as DSet);
     }

import com.threerings.util.Util;

import com.threerings.presents.dobj.AttributeChangedEvent;
import com.threerings.presents.dobj.AttributeChangeAdapter;
import com.threerings.presents.dobj.DObject;
import com.threerings.presents.dobj.DSet;
import com.threerings.presents.dobj.DSet_Entry;
import com.threerings.presents.dobj.EntryAddedEvent;
import com.threerings.presents.dobj.EntryUpdatedEvent;
import com.threerings.presents.dobj.EntryRemovedEvent;
import com.threerings.presents.dobj.SetAdapter;

/**
 * A list that renders the contents of a DSet.
 */
public class DSetList extends List
{
    public function DSetList (
        renderer :IFactory, sortFn :Function = null, filterFn :Function = null)

     */
    public function shutdown () :void
    {
        if (_object != null) {
            _object.removeListener(this);
            _object = null;
            _field = null;
            _refreshFields = null;
