anchor.diff:              let world = Seq.fold (fun world child -> effect entity child world) world children
               Seq.fold (fun world child -> World.traverseEntityDescendants effect child world) world children
   
  +        static member internal addEntityToHierarchy parentOpt entity world =
  +            match Option.map (resolve entity) parentOpt with
  +            | Some newParent when World.getEntityExists newParent world ->
  +                match world.EntityHierarchy.TryGetValue newParent with
  +                | (true, children) ->
  +                    let children = USet.add entity children
  +                    let world = { world with EntityHierarchy = UMap.add newParent children world.EntityHierarchy }
  +                    world
  +                | (false, _) ->
  +                    let children = USet.singleton HashIdentity.Structural (World.getCollectionConfig world) entity
  +                    let world = World.choose { world with EntityHierarchy = UMap.add newParent children world.EntityHierarchy }
  +                    let world = if World.getEntityExists newParent world then World.setEntityIsParent true newParent world |> snd' else world
  +                    world
  +            | _ -> world
  +
  +        static member internal removeEntityFromHierarchy parentOpt entity world =
  +            match Option.map (resolve entity) parentOpt with
  +            | Some oldParent when World.getEntityExists oldParent world ->
  +                match world.EntityHierarchy.TryGetValue oldParent with
  +                | (true, children) ->
  +                    let children = USet.remove entity children
  +                    if USet.isEmpty children then
  +                        let world = World.choose { world with EntityHierarchy = UMap.remove oldParent world.EntityHierarchy }
  +                        let world = if World.getEntityExists oldParent world then World.setEntityIsParent false oldParent world |> snd' else world
  +                        world
  +                    else World.choose { world with EntityHierarchy = UMap.add oldParent children world.EntityHierarchy }
  +                | (false, _) -> world
  +            | _ -> world
  +
  +        static member internal propagateEntityProperties3 parentOpt entity world =
  +            match Option.map (resolve entity) parentOpt with
  +            | Some newParent when World.getEntityExists newParent world ->
  +                let world = World.propagateEntityPosition3 newParent entity world
  +                let world = World.propagateEntityElevation3 newParent entity world
  +                let world = World.propagateEntityEnabled3 newParent entity world
  +                let world = World.propagateEntityVisible3 newParent entity world
  +                world
  +            | _ -> world
  +
           static member internal setEntityParentOpt value entity world =
               let newParentOpt = value
               let oldParentOpt = World.getEntityParentOpt entity world
  
positive.code:                             else Unchecked.defaultof<_>)
                              Property? ParentOpt newParentOpt entity world
  
                      // remove from entity hierarchy
                      let world =
                          match Option.map (resolve entity) oldParentOpt with
                          | Some oldParent when World.getEntityExists oldParent world ->
                              match world.EntityHierarchy.TryGetValue oldParent with
                              | (true, children) ->
                                  let children = USet.remove entity children
                                  if USet.isEmpty children then
                                      let world = World.choose { world with EntityHierarchy = UMap.remove oldParent world.EntityHierarchy }
                                      let world = if World.getEntityExists oldParent world then World.setEntityIsParent false oldParent world |> snd' else world
                                      world
                                  else World.choose { world with EntityHierarchy = UMap.add oldParent children world.EntityHierarchy }
                              | (false, _) -> world
                          | _ -> world
  
                      // add to entity hierarchy
                      let world =
                          match Option.map (resolve entity) newParentOpt with
                          | Some newParent when World.getEntityExists newParent world ->
                              match world.EntityHierarchy.TryGetValue newParent with
                              | (true, children) ->
                                  let children = USet.add entity children
                                  let world = { world with EntityHierarchy = UMap.add newParent children world.EntityHierarchy }
                                  world
                              | (false, _) ->
                                  let children = USet.singleton HashIdentity.Structural (World.getCollectionConfig world) entity
                                  let world = World.choose { world with EntityHierarchy = UMap.add newParent children world.EntityHierarchy }
                                  let world = if World.getEntityExists newParent world then World.setEntityIsParent true newParent world |> snd' else world
                                  world
                          | _ -> world
  
                      // propagate properties from parent
                      let world =
                          match Option.map (resolve entity) newParentOpt with
                          | Some newParent when World.getEntityExists newParent world ->
                              let world = World.propagateEntityPosition3 newParent entity world
                              let world = World.propagateEntityElevation3 newParent entity world
                              let world = World.propagateEntityEnabled3 newParent entity world
                              let world = World.propagateEntityVisible3 newParent entity world
                              world
                          | _ -> world
                      world
                  else world
              struct (changed, world)
  
  
negative.code: 
                  // get old world for entity tree rebuild
                  let oldWorld = world
  
                  // remove entity from hierarchy
                  let parentOpt = World.getEntityParentOpt entity world
                  let world = World.removeEntityFromHierarchy parentOpt entity world
                  
                  // mutate entity tree if entity is selected
                  let world =
  