             _players.itemUpdated(currentValue);
         } else {
             currentValue = [_labelCreator, value];
-            _values.put(value, currentValue);
+            _values[value] = currentValue;
             _players.addItem(currentValue);
         }
     }
 
-    public function removeItem (value :Hashable) :void
-    {
-        var currentValue :Array = _values.remove(value) as Array;
+    public function removeItem (value :Comparable) :void
+    {
+        var currentValue :Array = _values[value] as Array;
         if (currentValue != null) {
             _players.removeItemAt(_players.getItemIndex(currentValue));
         }
+
+        delete _values[value];
     }
 
     /**
      * Notify the list that this value has changed internally, and the renderer should be told to 
      * redraw its contents.
      */
-    public function itemUpdated (value :Hashable) :void
-    {
-        var currentValue :Array = _values.get(value) as Array;
+    public function itemUpdated (value :Comparable) :void
+    {
+        var currentValue :Array = _values[value] as Array;
         if (currentValue != null) {
             currentValue[1] = value;
             _players.itemUpdated(currentValue);

import mx.core.ScrollPolicy;

import com.threerings.util.Comparable;
import com.threerings.util.Hashable;
import com.threerings.util.HashMap;

public class PlayerList extends VBox
{

    protected var _labelCreator :NameLabelCreator;
    protected var _list :AmbidextrousList;
    protected var _players :ArrayCollection = new ArrayCollection();
    protected var _values :Dictionary = new Dictionary();
}
}

