anchor.diff:  
           member this.Disjunction<'t, 'w when 't : struct and 't :> Component>
               (junctions : Dictionary<string, 'w System>) (entityId : Guid) =
  -            this.DisjunctionPlus<'t, 'w> typeof<'t>.Name junctions entityId+            this.DisjunctionPlus<'t, 'w> typeof<'t>.Name junctions entityId
  +
  +/// An Ecs system that stores multiple components per entity id.
  +type [<AbstractClass>] SystemMultiplexed<'t, 'w when 't : struct and 't :> Component> () =
  +    inherit SystemCorrelated<'t ComponentMultiplexed, 'w> ()
  +
  +    member this.QualifyMultiplexed multiId entityId =
  +        if this.QualifyCorrelated entityId then
  +            let comp = this.IndexCorrelated entityId
  +            comp.Entries.ContainsKey multiId
  +        else false
  +
  +    member this.IndexMultiplexed multiId entityId =
  +        let componentMultiplexed = &this.IndexCorrelated entityId
  +        componentMultiplexed.Entries.[multiId]
  +
  +    member this.RegisterMultiplexed multiId entityId comp ecs =
  +        let _ = this.RegisterCorrelated entityId ecs
  +        let componentMultiplexed = &this.IndexCorrelated entityId
  +        do componentMultiplexed.RegisterMultiplexed (multiId, comp)
  +        multiId
  +
  +    member this.UnregisterMultiplexed multiId entityId ecs =
  +        let componentMultiplexed = &this.IndexCorrelated entityId
  +        let _ = componentMultiplexed.UnregisterMultiplexed multiId
  +        this.UnregisterCorrelated entityId ecs
  +
  +    type 'w Ecs with
  +
  +        member this.QualifyMultiplexed<'t when 't : struct and 't :> Component> systemName multiId entityId =
  +            let systemOpt = this.TryIndexSystem<SystemMultiplexed<'t, 'w>> systemName
  +            if Option.isNone systemOpt then failwith ("Could not find expected system '" + systemName + "'.")
  +            let system = Option.get systemOpt
  +            system.QualifyMultiplexed multiId entityId
  +
  +        member this.IndexMultiplexed<'t when 't : struct and 't :> Component> systemName multiId entityId =
  +            let systemOpt = this.TryIndexSystem<SystemMultiplexed<'t, 'w>> systemName
  +            if Option.isNone systemOpt then failwith ("Could not find expected system '" + systemName + "'.")
  +            let system = Option.get systemOpt
  +            let simplex = system.IndexMultiplexed multiId entityId
  +            &simplex.Simplex
  +
  +        member this.RegisterMultiplexed<'t when 't : struct and 't :> Component> systemName entityId comp =
  +            match this.TryIndexSystem<SystemMultiplexed<'t, 'w>> systemName with
  +            | Some system ->
  +                let _ = system.RegisterMultiplexed entityId comp
  +                match this.Correlations.TryGetValue entityId with
  +                | (true, correlation) -> correlation.Add systemName
  +                | (false, _) -> this.Correlations.Add (entityId, List [systemName])
  +            | None -> failwith ("Could not find expected system '" + systemName + "'.")
  +
  +        member this.UnregisterMultiplexed<'t when 't : struct and 't :> Component> systemName multiId entityId =
  +            match this.TryIndexSystem<SystemMultiplexed<'t, 'w>> systemName with
  +            | Some system ->
  +                if system.UnregisterMultiplexed multiId entityId this then
  +                    match this.Correlations.TryGetValue entityId with
  +                    | (true, correlation) -> correlation.Add systemName
  +                    | (false, _) -> this.Correlations.Add (entityId, List [systemName])
  +            | _ -> failwith ("Could not find expected system '" + systemName + "'.")
positive.code:             and set value = this.RefCount <- value
      member this.Components
          with get () = this.Entries.Values :> 't Simplex IEnumerable
      member this.RegisterComponent (multiId, comp) =
          this.Entries.Add (multiId, { Simplex = comp })
      member this.UnregisterComponent multiId =
          this.Entries.Remove multiId
  
  /// A base system type of an Ecs.
  
negative.code: 
      type 'w Ecs with
  
          member this.CorrelateSystems entityId =
              this.Correlations.[entityId] |>
              Seq.map (fun systemName -> (systemName, this.IndexSystem<'w System> systemName)) |>
              dictPlus
  
          member this.CorrelateEntities<'t when 't : struct and 't :> Component> systemName =
              match this.TryIndexSystem<SystemCorrelated<'t, 'w>> systemName with
              | Some system -> system.CorrelateEntities ()
              | _ -> failwith ("Could not find expected system '" + systemName + "'.")
  
          member this.QualifyCorrelated<'t when 't : struct and 't :> Component> systemName entityId =
              let systemOpt = this.TryIndexSystem<SystemCorrelated<'t, 'w>> systemName
              if Option.isNone systemOpt then failwith ("Could not find expected system '" + systemName + "'.")
              let system = Option.get systemOpt
              system.QualifyCorrelated entityId
  
          member this.IndexCorrelated<'t when 't : struct and 't :> Component> systemName entityId =
              let systemOpt = this.TryIndexSystem<SystemCorrelated<'t, 'w>> systemName
              if Option.isNone systemOpt then failwith ("Could not find expected system '" + systemName + "'.")
              let system = Option.get systemOpt
              &system.IndexCorrelated entityId
  
          member this.RegisterCorrelated<'t when 't : struct and 't :> Component> systemName entityId comp =
              match this.TryIndexSystem<SystemCorrelated<'t, 'w>> systemName with
  