anchor.diff:              | Some system -> system.UnregisterUncorrelated index
               | None -> failwith ("Could not find expected system '" + systemName + "'.")
   
  -        member this.ReadUncorrelated (readers : Dictionary<string, StreamReader>) (count : int) =
  +        member this.ReadUncorrelated<'c when 'c : struct and 'c :> Component> (readers : Dictionary<string, StreamReader>) (count : int) =
               for readerEntry in readers do
                   let (systemName, reader) = (readerEntry.Key, readerEntry.Value)
  -                match this.TryIndexSystem<'w SystemMany> systemName with
  +                match this.TryIndexSystem<SystemUncorrelated<'c, 'w>> systemName with
                   | Some system ->
  -                    let length = system.ComponentsLength
                       system.PadComponents count
                       let bytes = system.ComponentsToBytes ()
  -                    let _ = reader.ReadBlock (bytes, system.SizeOfComponent * length, system.SizeOfComponent * count)
  +                    let _ = reader.ReadBlock (bytes, system.SizeOfComponent * system.Components.Length, system.SizeOfComponent * count)
                       system.BytesToComponents bytes
                   | None -> failwith ("Could not find expected system '" + systemName + "'.")
   
  
positive.code:         let liveCount = freeIndex - freeList.Count
          let liveArray = Array.zeroCreate liveCount
          while j < freeIndex do
              if components.[i].RefCount = 0 then
                  while components.[j].RefCount = 0 &&
                        j < freeIndex do
                        j <- inc j
  
negative.code:     override this.SizeOfComponent with get () =
          sizeof<'c>
  
      override this.ComponentsCount with get () =
          freeIndex - 1 - freeList.Count
  
      override this.ComponentsToBytes () =
          let byteArrays = Array.map this.ComponentToBytes components.Array
  