docs: function (query, queryOptions, callback) {
      if (typeof query === 'function') {
        callback = query;
        query = {};
        queryOptions = {};
      }
      if (typeof queryOptions === 'function') {
        callback = queryOptions;
        queryOptions = {};
      }
      var self = this;
      var localFoundVms = {};
      if (this.isReplaying) {
        var replVms = _.map(this.replayingVms, function (vm) {
          // return vm.toJSON();
          // We just read, so this is ok and faster!
          return vm.attributes;
        });
        _.each(sift(query, replVms), function (vm) {
          localFoundVms[vm.id] = self.replayingVms[vm.id];
        });
      }
      this.repository.find(query, queryOptions, function (err, vms) {
        if (err) {
          debug(err);
          return callback(err);
        }
        vms.forEach(function (vm) {
          if (localFoundVms[vm.id]) return; // optimize a bit
  
          var clonedInitValues = _.cloneDeep(self.modelInitValues);
          for (var prop in clonedInitValues) {
            if (!vm.has(prop)) {
              vm.set(prop, clonedInitValues[prop]);
            }
          }
        });
        if (self.isReplaying) {
          var mergedVmsFromRepo = _.map(vms, function (vm) {
            return localFoundVms[vm.id] || vm;
          });
          mergedVmsFromRepo = _.reject(mergedVmsFromRepo, function (vm) {
            return !!self.replayingVmsToDelete[vm.id];
          });
          mergedVmsFromRepo = _.union(mergedVmsFromRepo, _.values(localFoundVms));
          mergedVmsFromRepo.forEach(function (vm) {
            if (!self.replayingVms[vm.id]) {
              self.replayingVms[vm.id] = vm;
            }
          });
          return callback(null, mergedVmsFromRepo);
        }
        callback(null, vms);
      });
    }