anchor.diff:        try {
           var linkMapTimer;
           assert((linkTimer = _perf.startTimer('ng.view.link', ref.type)) != false);
  -        var controller = nodeInjector.get(ref.type);
  -        probe.directives.add(controller);
  +        var directive = nodeInjector.get(ref.type);
  +        probe.directives.add(directive);
           assert((linkMapTimer = _perf.startTimer('ng.view.link.map', ref.type)) != false);
   
           if (ref.annotation is Controller) {
  -          scope.context[(ref.annotation as Controller).publishAs] = controller;
  -        }
  -
  -        var tasks = new _TaskList(controller is AttachAware ? () {
  -          if (scope.isAttached) controller.attach();
  +          scope.context[(ref.annotation as Controller).publishAs] = directive;
  +        }
  +
  +        var tasks = new _TaskList(directive is AttachAware ? () {
  +          if (scope.isAttached) directive.attach();
           } : null);
   
           if (ref.mappings.isNotEmpty) {
             if (nodeAttrs == null) nodeAttrs = new _AnchorAttrs(ref);
  -          _createAttrMappings(controller, scope, ref.mappings, nodeAttrs, formatters, tasks);
  -        }
  -
  -        if (controller is AttachAware) {
  +          _createAttrMappings(directive, scope, ref.mappings, nodeAttrs, formatters, tasks);
  +        }
  +
  +        if (directive is AttachAware) {
             var taskId = tasks.registerTask();
             Watch watch;
             watch = scope.watch('1', // Cheat a bit.
  
positive.code:       if (bindAttr != null) {
          if (p.mode == '<=>') {
            _bindTwoWay(tasks, bindAttr, scope, dstPathFn,
                controller, formatters, dstExpression);
          } else if(p.mode == '&') {
            _bindCallback(dstPathFn, controller, bindAttr, scope);
          } else {
            _bindOneWay(tasks, bindAttr, scope, dstPathFn, controller, formatters);
          }
          return;
        }
  
negative.code:     dstPathFn.assign(controller, _parser(expression).bind(scope.context, ScopeLocals.wrapper));
    }
  
    _createAttrMappings(directive, scope, List<MappingParts> mappings, nodeAttrs, formatters, tasks) {
      mappings.forEach((MappingParts p) {
        var attrName = p.attrName;
        var dstExpression = p.dstExpression;
  