anchor.diff:                          world
                   let world = World.setTickRate 0L world
                   refreshFormOnUndoRedo form world
  -                world)
  +                world
   
       let private handleFormTickingChanged (form : GaiaForm) (_ : EventArgs) =
  -        ignore ^ WorldChangers.Add (fun world ->
  +        addWorldChanger ^ fun world ->
               let tickRate = if form.tickingButton.Checked then 1L else 0L
               let (pastWorld, world) = (world, World.setTickRate tickRate world)
  -            if tickRate = 1L then pushPastWorld pastWorld world else world)
  +            if tickRate = 1L then pushPastWorld pastWorld world else world
   
       let private handleFormResetTickTime (_ : GaiaForm) (_ : EventArgs) =
  -        ignore ^ WorldChangers.Add (fun world ->
  +        addWorldChanger ^ fun world ->
               let (pastWorld, world) = (world, World.resetTickTime world)
  -            pushPastWorld pastWorld world)
  +            pushPastWorld pastWorld world
   
       let private handleFormCopy (form : GaiaForm) (_ : EventArgs) =
  -        ignore ^ WorldChangers.Add (fun world ->
  +        addWorldChanger ^ fun world ->
               match form.propertyGrid.SelectedObject with
               | null -> world
               | :? EntityTypeDescriptorSource as entityTds -> World.copyToClipboard entityTds.DescribedEntity world; world
  -            | _ -> Log.trace ^ "Invalid copy operation (likely a code issue in Gaia)."; world)
  +            | _ -> Log.trace ^ "Invalid copy operation (likely a code issue in Gaia)."; world
   
       let private handleFormCut (form : GaiaForm) (_ : EventArgs) =
  -        ignore ^ WorldChangers.Add (fun world ->
  +        addWorldChanger ^ fun world ->
               match form.propertyGrid.SelectedObject with
               | null -> world
               | :? EntityTypeDescriptorSource as entityTds ->
  
positive.code:                 let world = tryLoadSelectedGroup form form.openFileDialog.FileName world
                  deselectEntity form world
                  world
              | _ -> world)
  
      let private handleFormClose (form : GaiaForm) (_ : EventArgs) =
          ignore ^ WorldChangers.Add (fun world ->
              match form.groupTabs.TabPages.Count with
              | 1 ->
                  ignore ^ MessageBox.Show ("Cannot destroy only remaining group.", "Group destruction error", MessageBoxButtons.OK, MessageBoxIcon.Error)
  
negative.code:             with exn ->
                  let world = World.choose world
                  ignore ^ MessageBox.Show (scstring exn, "Could not create Gaia form", MessageBoxButtons.OK, MessageBoxIcon.Error)
                  world
  
      let private handleFormDelete (form : GaiaForm) (_ : EventArgs) =
          addWorldChanger ^ fun world ->
              let world = pushPastWorld world world
              match form.propertyGrid.SelectedObject with
              | :? EntityTypeDescriptorSource as entityTds ->
                  let world = World.destroyEntity entityTds.DescribedEntity world
                  deselectEntity form world
                  world
              | _ -> world
  
      let private handleFormNew (form : GaiaForm) (_ : EventArgs) =
          use groupNameEntryForm = new NameEntryForm ()
          groupNameEntryForm.StartPosition <- FormStartPosition.CenterParent
          groupNameEntryForm.okButton.Click.Add ^ fun _ ->
              addWorldChanger ^ fun world ->
                  let world = pushPastWorld world world
                  let groupName = groupNameEntryForm.nameTextBox.Text
                  try if groupName.Length = 0 then failwith "Group name cannot be empty in Gaia due to WinForms limitations."
  