anchor.diff:            toHero: toHeroes[tag],
             createRectTween: createRectTween,
           );
  -
           if (_flights[tag] != null)
  -            _flights[tag].restart(manifest);
  +          _flights[tag].divert(manifest);
           else
             _flights[tag] = new _HeroFlight(_handleFlightEnded)..start(manifest);
         } else if (_flights[tag] != null) {
  
positive.code:       assert(manifest.fromHero != newManifest.fromHero);
        assert(manifest.toHero != newManifest.toHero);
  
        heroRect = new RectTween(
          begin: heroRect.evaluate(_proxyAnimation),
          end: _globalRect(newManifest.toHero.context),
        );
  
        if (newManifest.type == _HeroFlightType.pop)
          _proxyAnimation.parent = new ReverseAnimation(newManifest.animation);
  
negative.code: 
    // While this flight's hero was in transition a push or a pop occurred for
    // routes with the same hero. Redirect the in-flight hero to the new toRoute.
    void divert(_HeroFlightManifest newManifest) {
      assert(manifest.tag == newManifest.tag);
  
      if (manifest.type == _HeroFlightType.push && newManifest.type == _HeroFlightType.pop) {
  