anchor.diff:  
   ///finalizes objects in the spawned list
   /obj/machinery/computer/holodeck/proc/finish_spawn()
  -	//this is used for holodeck effects (like spawners). otherwise they dont do shit
  -	//holo effects are taken out of the spawned list and added to the effects list
  -	//turfs and overlay objects are taken out of the spawned list
  -	//objects get resistance flags added to them
  -	for (var/atom/atoms in spawned)
  -		RegisterSignal(atoms, COMSIG_PARENT_PREQDELETED, .proc/remove_from_holo_lists)
  -		atoms.flags_1 |= HOLOGRAM_1
  -
  -		if (isholoeffect(atoms))//activates holo effects and transfers them from the spawned list into the effects list
  -			var/obj/effect/holodeck_effect/holo_effect = atoms
  +	for(var/atom/holo_atom as anything in spawned)
  +		if(QDELETED(holo_atom))
  +			spawned -= holo_atom
  +			continue
  +
  +		RegisterSignal(holo_atom, COMSIG_PARENT_PREQDELETED, .proc/remove_from_holo_lists)
  +		holo_atom.flags_1 |= HOLOGRAM_1
  +
  +		if(isholoeffect(holo_atom))//activates holo effects and transfers them from the spawned list into the effects list
  +			var/obj/effect/holodeck_effect/holo_effect = holo_atom
   			effects += holo_effect
   			spawned -= holo_effect
  -			var/atom/active_effect = holo_effect.activate(src)
  -			if(istype(active_effect) || islist(active_effect))
  -				spawned += active_effect // we want mobs or objects spawned via holoeffects to be tracked as objects
  +			var/atom/holo_effect_product = holo_effect.activate(src)//change name
  +			if(istype(holo_effect_product) || islist(holo_effect_product))
  +				spawned += holo_effect_product // we want mobs or objects spawned via holoeffects to be tracked as objects
   			continue
   
  -		if (isobj(atoms))
  -			var/obj/holo_object = atoms
  +		if(isobj(holo_atom))
  +			var/obj/holo_object = holo_atom
   			holo_object.resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
   
  -			if (isstructure(holo_object))
  +			if(isstructure(holo_object))
   				holo_object.flags_1 |= NODECONSTRUCT_1
   				continue
   
  -			if (ismachinery(holo_object))
  -				var/obj/machinery/machines = holo_object
  -				machines.flags_1 |= NODECONSTRUCT_1
  -				machines.power_change()
  -
  -				if(istype(machines, /obj/machinery/button))
  -					var/obj/machinery/button/buttons = machines
  -					buttons.setup_device()
  +			if(ismachinery(holo_object))
  +				var/obj/machinery/holo_machine = holo_object
  +				holo_machine.flags_1 |= NODECONSTRUCT_1
  +				holo_machine.power_change()
  +
  +				if(istype(holo_machine, /obj/machinery/button))
  +					var/obj/machinery/button/holo_button = holo_machine
  +					holo_button.setup_device()
  +
   	spawning_simulation = FALSE
   
   ///this qdels holoitems that should no longer exist for whatever reason
  -/obj/machinery/computer/holodeck/proc/derez(obj/object, silent = TRUE, forced = FALSE)
  -	spawned -= object
  -	if(!object)
  -		return
  -	UnregisterSignal(object, COMSIG_PARENT_PREQDELETED)
  -	var/turf/target_turf = get_turf(object)
  -	for(var/c in object) //make sure that things inside of a holoitem are moved outside before destroying it
  -		var/atom/movable/object_contents = c
  -		object_contents.forceMove(target_turf)
  +/obj/machinery/computer/holodeck/proc/derez(atom/movable/holo_atom, silent = TRUE, forced = FALSE)
  +	spawned -= holo_atom
  +	if(!holo_atom)
  +		return
  +	UnregisterSignal(holo_atom, COMSIG_PARENT_PREQDELETED)
  +	var/turf/target_turf = get_turf(holo_atom)
  +	for(var/atom/movable/atom_contents as anything in holo_atom) //make sure that things inside of a holoitem are moved outside before destroying it
  +		atom_contents.forceMove(target_turf)
   
   	if(!silent)
  -		visible_message("<span class='notice'>[object] fades away!</span>")
  -
  -	qdel(object)
  +		visible_message("<span class='notice'>[holo_atom] fades away!</span>")
  +
  +	qdel(holo_atom)
   
   /obj/machinery/computer/holodeck/proc/remove_from_holo_lists(datum/to_remove, _forced)
   	SIGNAL_HANDLER
  
positive.code: 
  ///this is what makes the holodeck not spawn anything on broken tiles (space and non engine plating / non holofloors)
  /datum/map_template/holodeck/update_blacklist(turf/placement, list/input_blacklist)
  	for (var/_turf in get_affected_turfs(placement))
  		var/turf/possible_blacklist = _turf
  		if (possible_blacklist.holodeck_compatible)
  			continue
  		input_blacklist += possible_blacklist
  
negative.code: 				checked |= emag_programs
  			var/valid = FALSE //dont tell security about this
  
  			//checks if program_to_load is any one of the loadable programs, if it isnt then it rejects it
  			for(var/list/check_list as anything in checked)
  				if(check_list["id"] == program_to_load)
  					valid = TRUE
  					break
  			if(!valid)
  				return FALSE
  			//load the map_template that program_to_load represents
  			if(program_to_load)
  