anchor.diff:      _stage._canvas.on.mouseDown.add(_mouseDown);
     }
   
  +  static void setCursor(Thing thing, String value) {
  +    assert(thing != null);
  +    if(value == null) {
  +      _cursorProperty.clear(thing);
  +    } else {
  +      _cursorProperty.set(thing, value);
  +    }
  +  }
  +
  +  static String getCursor(Thing thing) {
  +    assert(thing != null);
  +    return _cursorProperty.get(thing);
  +  }
  +
     static void setClickable(Thing thing, bool value) {
       assert(thing != null);
       assert(value != null);
  
positive.code: 
    static final AttachedEvent _mouseOutEvent =
        new AttachedEvent('mouseOut');
  
    final Stage _stage;
  
  
negative.code: 
    void _mouseMove(MouseEvent e) {
      final items = _updateMouseLocation(getMouseEventCoordinate(e));
  
      String cursor = null;
      if(items.length > 0) {
        final args = new ThingMouseEventArgs(items[0], e);
  
        for(final e in items) {
          _mouseMoveEvent.fireEvent(e, args);
          if(cursor == null) {
            cursor = getCursor(e);
          }
        }
      }
      _updateCursor(cursor);
    }
  
    void _mouseOut(MouseEvent e) {
      _updateMouseLocation(null);
      _mouseOutEvent.fireEvent(_stage, EventArgs.empty);
      _updateCursor(null);
    }
  
    void _mouseUp(MouseEvent e) {
  