anchor.diff:                  let oldWorld = world
                   let world = World.setEntityState entityState entity world
                   let world = World.updateEntityInEntityTree entity oldWorld world
  +                let world = World.publishEntityChanges entity oldWorld world
                   Right world
               | Left error -> Left error
   
  -        static member applyEntityOverlay oldOverlayer overlayer world entity =
  -            let entityState = World.getEntityState entity world
  -            match entityState.OptOverlayName with
  -            | Some overlayName ->
  -                let oldFacetNames = entityState.FacetNames
  -                let entityState = Overlayer.applyOverlayToFacetNames EntityState.copy overlayName overlayName entityState oldOverlayer overlayer
  -                match World.trySynchronizeFacetsToNames oldFacetNames entityState (Some entity) world with
  -                | Right (entityState, world) ->
  -                    let oldWorld = world
  -                    let facetNames = World.getEntityFacetNamesReflectively entityState
  -                    let entityState = Overlayer.applyOverlay6 EntityState.copy overlayName overlayName facetNames entityState oldOverlayer overlayer
  -                    let world = World.setEntityState entityState entity world
  -                    World.updateEntityInEntityTree entity oldWorld world
  -                | Left error -> Log.info ^ "There was an issue in applying a reloaded overlay: " + error; world
  -            | None -> world
  -
  -        static member viewEntityMemberProperties entity world =
  +        static member internal updateEntityPublishingFlags eventAddress world =
  +            let eventNames = Address.getNames eventAddress
  +            match eventNames with
  +            | head :: tail when Name.getNameStr head = "Update" ->
  +                let publishUpdates =
  +                    match Vmap.tryFind eventAddress (EventWorld.getSubscriptions world) with
  +                    | Some [] -> failwithumf () // NOTE: implementation of event system should clean up all empty subscription entries, AFAIK
  +                    | Some (_ :: _) -> true
  +                    | None -> false
  +                let entity = Entity.proxy ^ ltoa<Entity> tail
  +                let world = if World.containsEntity entity world then World.setEntityPublishUpdatesNp publishUpdates entity world else world
  +                world
  +            | _ -> world
  +
  +        static member internal viewEntityMemberProperties entity world =
               let state = World.getEntityState entity world
               World.getMemberProperties state
   
  -        static member viewEntityXProperties entity world =
  +        static member internal viewEntityXProperties entity world =
               let state = World.getEntityState entity world
               World.getXProperties state
   
  -        static member viewEntity entity world =
  +        static member internal viewEntity entity world =
               let state = World.getEntityState entity world
               World.getProperties state
   
  
positive.code:             let world = World.publishEntityChange Property? Rotation entity oldWorld world
              World.publishEntityChange Property? Depth entity oldWorld world
  
          static member internal attachEntityProperty name value entity world =
              World.setEntityState (EntityState.attachProperty name value ^ World.getEntityState entity world) entity world
  
          static member internal detachEntityProperty name entity world =
              World.setEntityState (EntityState.detachProperty name ^ World.getEntityState entity world) entity world
  
          static member internal getEntityProperty propertyName entity world =
              match propertyName with // NOTE: string match for speed
  
negative.code:         static member internal addScreen mayReplace screenState screen world =
              let isNew = not ^ World.containsScreen screen world
              if isNew || mayReplace then
                  let oldWorld = world
                  let world = World.addScreenState screenState screen world
                  let world =
                      if isNew then
                          let dispatcher = World.getScreenDispatcherNp screen world
                          let world = dispatcher.Register (screen, world)
                          let eventTrace = EventTrace.record "World" "addScreen" EventTrace.empty
                          World.publish () (ftoa<unit> !!"Screen/Add" ->- screen) eventTrace screen world
                      else world
                  World.publishScreenChanges screen oldWorld world
              else failwith ^ "Adding a screen that the world already contains at address '" + scstring screen.ScreenAddress + "'."
  
          static member internal removeScreen3 removeGroups screen world =
  