anchor.diff:      // do actual start in case we were pending before
       _pendingToDrag();
       
  -    // call the drag in callback
  -    if(dragOver != null) {
  -      dragOver(this, event.currentTarget, event);
  -    }
  +    // send over event
  +    _dragOverStreamController.add(new DragEvent(this, event.currentTarget, event));
     }
     void _mouseOutHandler(MouseEvent event) {
       // only respond to this event when the element we're going to is
  
positive.code:     // signal that we are no longer dragging
      _dragging = false;
      
      // TODO if callbacks are set to null during a drag,
      // they will never be removed. we should define a setter that checks
      
      // TODO if elements are changed during a drag, they won't be removed either
      
      // remove callbacks
      if(drag != null) {
        // TODO this can just be paused
        // TODO as Element?
        _cancel("mouseMove", document);
      }
      if(dragOver != null) {
        for(Element e in _targets) {
          _cancel("mouseOver", e);
        }
      }
      if(dragOut != null) {
        for(Element e in _targets) {
          _cancel("mouseOut", e);
        }
      }
      
      // call the end callback
      // only do callback if we weren't just pending
      if(dragEnd != null && !_dragStartPending) {
        dragEnd(this, _currentTarget, event);
      }
      
      // clear current target
  
negative.code:     //print("mouse down, enabled: $enabled");
      // TODO if(!_dragging)?
      
      // store the current target
      // TODO should we get the element explicitly from our own list?
      // TODO or is event.currentTarget safely the same?
      _currentTarget = event.currentTarget;
      
      // set dragging flag
      _dragStartPending = true;
      _startEvent = event;
      
      // register for a move event if the callback exists
      // TODO if streams have subscribers?
      _listen("mouseMove", document);
      // register for mouse over event on all elements
      for(Element e in _targets) {
        _listen("mouseOver", e, true);
      }
      // register for mouse out event on all elements
      for(Element e in _targets) {
        _listen("mouseOut", e, true);
      }
    }
    
    void _pendingToDrag() {
      if(_dragStartPending) {
        
        // send start event
        _dragStartStreamController.add(new DragEvent(this, _currentTarget, _startEvent));
        
        // switch from pending to dragging
        _dragStartPending = false;
  