anchor.diff:                        IsVisible = true
                         EntitySemantic = Gui testTextBoxGui }
           
  -                refRefWorld.Value := addScreen testScreen testScreenAddress refRefWorld.Value.Value
  -                refRefWorld.Value := setP (Some testScreenAddress) World.optActiveScreenAddress refRefWorld.Value.Value
  -                refRefWorld.Value := addGroup testGroup testGroupAddress refRefWorld.Value.Value
  -                refRefWorld.Value := addEntityGuiTextBox (testTextBoxGuiEntity, testTextBoxGui, testTextBox) testTextBoxAddress refRefWorld.Value.Value
  +                refWorld := addScreen testScreen testScreenAddress refWorld.Value
  +                refWorld := setP (Some testScreenAddress) World.optActiveScreenAddress refWorld.Value
  +                refWorld := addGroup testGroup testGroupAddress refWorld.Value
  +                refWorld := addEntityGuiTextBox (testTextBoxGuiEntity, testTextBoxGui, testTextBox) testTextBoxAddress refWorld.Value
   
  -                let testTypeSource = { Address = testTextBoxAddress; RefRefWorld = refRefWorld }
  +                let testTypeSource = { Address = testTextBoxAddress; RefWorld = refWorld }
                   form.propertyGrid.SelectedObject <- testTypeSource
   
                   form.exitToolStripMenuItem.Click.Add (fun _ -> form.Close ())
                   form.Show ()
  -                Right refRefWorld.Value.Value)
  +                Right refWorld.Value)
           (fun world ->
  -            refRefWorld.Value := applyEntityChanges gEntityChanges world
  -            (not form.IsDisposed, refRefWorld.Value.Value))
  +            // NOTE: the old refWorld will be blown away here!
  +            refWorld := applyEntityChanges gEntityChanges world
  +            (not form.IsDisposed, refWorld.Value))
           (fun world ->
               form.displayPanel.Invalidate ()
               world)
  
positive.code:     override this.GetValue source =
          let entityTds = source :?> EntityTypeDescriptorSource
          let entityLens = World.entity entityTds.Address
          let entity = get entityTds.RefRefWorld.Value.Value entityLens
          fieldInfo.GetValue entity
      override this.SetValue (source, value) =
          let entityTds = source :?> EntityTypeDescriptorSource
          let entityChange = { Address = entityTds.Address; FieldInfo = fieldInfo; Value = value }
          entityTds.RefRefWorld.Value := applyEntityChange entityTds.RefRefWorld.Value.Value entityChange
          gEntityChanges.Add entityChange
  
  and EntityTypeDescriptor () =
      inherit CustomTypeDescriptor ()
      let Pdc =
          let ty = typeof<Entity>
          let fields = ty.GetFields (BindingFlags.Instance ||| BindingFlags.NonPublic)
          let propertyDescriptors = Array.map (fun field -> new EntityPropertyDescriptor (field) :> PropertyDescriptor) fields
          PropertyDescriptorCollection propertyDescriptors
      override this.GetProperties optAttributes = Pdc
  
negative.code: let applyEntityChange world (change : EntityPropertyChange) =
      let entityLens = World.entity change.Address
      let entity = get world entityLens
      let entity2 = { entity with Id = entity.Id } // NOTE: this is just a hacky way to copy an entity without reflection
      change.FieldInfo.SetValue (entity2, change.Value)
      set entity2 world entityLens
  
  