anchor.diff:      
       // remove callbacks
       if(drag != null) {
  -      document.on.mouseMove.remove(_mouseMove);
  +      // TODO this can just be paused
  +      // TODO as Element?
  +      _cancel("mouseMove", document);
       }
       if(dragOver != null) {
         for(Element e in _targets) {
  -        e.on.mouseOver.remove(_mouseOver, true);
  +        _cancel("mouseOver", e);
         }
       }
       if(dragOut != null) {
         for(Element e in _targets) {
  -        e.on.mouseOut.remove(_mouseOut, true);
  +        _cancel("mouseOut", e);
         }
       }
       
  
positive.code:     int index = _targets.indexOf(element);
      if(index != -1) {
        // remove down handler
        _targets[index].on.mouseDown.remove(_mouseDown);
        _targets.removeAt(index);
        if(dragOver != null) {
          element.on.mouseOver.remove(_mouseOver, true);
        }
        if(dragOut != null) {
          element.on.mouseOut.remove(_mouseOut, true);
        }
      }
    }
  
negative.code:     _targets.add(element);
      // if size is bigger, the element is new, so add down handler
      if(_targets.length > oldSize && enabled) {
        _listen("mouseDown", element);
        // if dragging or pending, add event handlers to the new element
        if(_dragging || _dragStartPending) {
          if(dragOver != null) {
            _listen("mouseOver", element, true);
          }
          if(dragOut != null) {
            _listen("mouseOut", element, true);
          }
        }
      }
  