function Projector(universeName, dbOptions) {
  // in the absence of establishing db references in funds and actors,
  // nulling that out in toJSON override and providing a custom 
  // inflater to lokijs, i will just force singleton pattern for now
  singletonContinuum = this;

	this.universeName = universeName;
    
  this.enums = {
    BalanceType: BalanceTypeEnum,
    FundClass: FundClassEnum,
    ActorPeriodicity: ActorPeriodicityEnum,
    ActivityType: ActivityTypeEnum
  };
  
  this.MAX_DATE = MAX_DATE;
  this.MIN_DATE = MIN_DATE;

  this.AddDate = AddDate;

  dbOptions.actors = { proto: Actor };
  dbOptions.funds = { proto: Fund };

	this.db = new loki(universeName, dbOptions); 
	this.vol = null;
	this.activities = new loki.Collection("activities");
  
  // Add a parameterized transform to our disconnected collection to determine set of activities affecting a given fundId (sorted by activityDate ascending)

  // If this were a filter function it would read as :
  // ( (obj.activityType === ActivityTypeEnum.FundReconcile) && (obj.affectingFund === fundId) ) || 
  // ( (obj.activityType === ActivityTypeEnum.Actor) && ( (obj.affectingActor.fundPrimary === fundId) || (obj.affectingActor.fundSecondary === fundId) ) )
  
  this.activities.addTransform("DoesAffectFund", [
    { 
      type: 'find',
      value : {
        $or : [
          { activityType: ActivityTypeEnum.FundReconcile, affectingFund : '[%lktxp]fundId' },
          { activityType: ActivityTypeEnum.Actor, $or: [{"affectingActor.fundPrimary": '[%lktxp]fundId'}, {"affectingActor.fundSecondary": '[%lktxp]fundId'}] }
        ]
      }
    },
    {
      type: 'simplesort',
      property: 'activityDate',
      desc: false
    }
  ]);
  
}
Projector - this class is the top level interface to Continuum,
    facilitating access to Actors and Funds and a loki database in which is stores them.