anchor.diff:  
       let systemTree = ListTree.makeEmpty<SystemCorrelated<'c, 'w>> ()
       let systemDict = dictPlus<Guid, SystemCorrelated<'c, 'w>> HashIdentity.Structural []
  +    let mutable componentsRegistered = hashSetPlus<Guid> HashIdentity.Structural []
  +    let mutable componentsUnregistered = hashSetPlus<Guid> HashIdentity.Structural []
   
       new (ecs) = SystemHierarchical (false, ecs)
   
       member this.Components with get () = systemTree |> ListTree.map (fun system -> system.Correlateds)
       member this.WithComponentsBuffered fn worldOpt = systemTree |> ListTree.map (fun system -> system.WithCorrelatedsBuffered fn worldOpt)
  +
  +    member this.PopComponentStates () =
  +        let (registered, unregistered) = (componentsRegistered, componentsUnregistered)
  +        componentsRegistered <- hashSetPlus<Guid> HashIdentity.Structural []
  +        componentsUnregistered <- hashSetPlus<Guid> HashIdentity.Structural []
  +        (registered, unregistered)
   
       member this.IndexNode nodeId =
           match systemDict.TryGetValue nodeId with
  
positive.code:             | (true, system) -> system.UnregisterCorrelated entityId
              | (false, _) -> false
  
          // unregister correlation
          if unregistered then
              match ecs.Correlations.TryGetValue entityId with
  
negative.code:                 true
              | (false, _) -> false
  
          // track registration
          if registered then
              componentsRegistered.Add entityId |> ignore<bool>
              componentsUnregistered.Remove entityId |> ignore<bool>
  
          // register correlation
          if registered then
              match ecs.Correlations.TryGetValue entityId with
  