// Define angular-meteor and its dependencies
var angularMeteor = angular.module('angular-meteor', [
  'angular-meteor.subscribe',
  'angular-meteor.collections',
  'angular-meteor.meteor-collection',
  'angular-meteor.object',
  'angular-meteor.template',
  'angular-meteor.user',
  'angular-meteor.methods',
  'angular-meteor.session',
  'angular-meteor.reactive-scope',
  'angular-meteor.utils',
  'hashKeyCopier'
]);

angularMeteor.run(['$compile', '$document', '$rootScope', function ($compile, $document, $rootScope) {
    // Recompile after iron:router builds page
    if(typeof Router != 'undefined') {
      Router.onAfterAction(function(req, res, next) {
        Tracker.nonreactive(function() {
          if (Router.current().ready()) {
            Tracker.afterFlush(function() {
                if (!Router.current()._docCompiled) {
                  $compile($document)($rootScope);
                  Router.current()._docCompiled = true;
                }
                if (!$rootScope.$$phase) $rootScope.$apply();  
            });
          } else {
            Tracker.afterFlush(function() {
              $compile($document)($rootScope);
              if (!$rootScope.$$phase) $rootScope.$apply();
              Router.current()._docCompiled = true;
            });
          }
        });
      });
    }
  }]);

// Putting all services under $meteor service for syntactic sugar
angularMeteor.service('$meteor', ['$meteorCollection', '$meteorObject', '$meteorMethods', '$meteorSession', '$meteorSubscribe', '$meteorUtils',
  function($meteorCollection, $meteorObject, $meteorMethods, $meteorSession, $meteorSubscribe, $meteorUtils){
    this.collection = $meteorCollection;
    this.object = $meteorObject;
    this.subscribe = $meteorSubscribe.subscribe;
    this.call = $meteorMethods.call;
    this.session = $meteorSession;
    this.autorun = $meteorUtils.autorun;
    this.getCollectionByName = $meteorUtils.getCollectionByName;
}]);

@@ -670,404 +670,1182 @@
     
-Tracker.nonreactive(function() %7B%0A          if (Router.current().ready()) %7B%0A            Tracker.afterFlush(function() %7B%0A                if (!Router.current()._docCompiled) %7B%0A                  $compile($document)($rootScope);%0A                  Router.current()._docCompiled = true;%0A                %7D%0A                if (!$rootScope.$$phase) $rootScope.$apply();  %0A            %7D);%0A          %7D else %7B
+// Since Router.current().ready() is reactive we wrap it in Tracker.nonreactive to avoid re-runs.%0A        Tracker.nonreactive(function() %7B%0A          if (Router.current().ready()) %7B%0A            // Again since Router.current().ready() is reactive we cant wrap it in Tracker.afterFlush%0A            // therefor we use it twice for ready and not ready cases (see below).%0A            Tracker.afterFlush(function() %7B%0A                // Checks if document's been compiled to the moment which happens when%0A                // no loading template has been used and route is ready instantly (no waitOn in the route).%0A                if (!Router.current()._docCompiled) %7B%0A                  $compile($document)($rootScope);%0A                  Router.current()._docCompiled = true;%0A                %7D%0A                // Document should have been compiled to that moment in all cases which means it's%0A                // enough to apply scope to make it work (even if new expressions appeared there).%0A                if (!$rootScope.$$phase) $rootScope.$apply();  %0A            %7D);%0A          %7D else %7B%0A            // Compiles and applies scope for the first time when current route is not ready.
 %0A   

Update angular-meteor.js