anchor.diff:      rootPanel.add(image);
   
       var stage = new Stage(canvas, rootPanel);
  -    final cm = new ClickManager(stage);
  -    var dragger = new Dragger(canvas);
   
  -    return new DraggerDemo._internal(canvas, stage, tx, dragger);
  +    return new DraggerDemo._internal(canvas, stage, tx, image);
     }
   
  -  DraggerDemo._internal(this._canvas, this._stage, this._tx, this._dragger) :
  +  DraggerDemo._internal(this._canvas, this._stage, this._tx, this._thing) :
       _demoMapper = new _DemoValue() {
  -    _canvas.on.mouseMove.add(_canvas_mouseMove);
  -    _canvas.on.mouseOut.add(_canvas_mouseOut);
  -    _dragger.dragDelta.add(_onDrag);
  -    _dragger.dragStart.add(_onDragStart);
   
       _demoMapper.outputChanged.add((e) => requestFrame());
   
       _stage.invalidated.add(_onStageInvalidated);
  +
  +    final cm = new ClickManager(_stage);
  +
  +    ClickManager.setDraggable(_thing, true);
  +    ClickManager.addDragHandler(_thing, _onDrag);
     }
   
     void requestFrame(){
  
positive.code:     final arrayValue = [_tx.translateX, _tx.translateY];
      _demoMapper.input = arrayValue;
      requestFrame();
    }
  
    void _onDragStart(CancelableEventArgs e) {
      if(!_overShape) {
        e.cancel();
      }
    }
  
    void _onFrame(double highResTime){
  
negative.code:   final CanvasElement _canvas;
    final Stage _stage;
    final AffineTransform _tx;
    final _DemoValue _demoMapper;
  
    Coordinate _mouseLocation;
    bool _frameRequested = false;
    final Thing _thing;
  
    factory DraggerDemo(CanvasElement canvas){
  
  