anchor.diff:  	eat(AM)
   	. = ..()
   
  +/obj/machinery/recycler/proc/eat(atom/movable/AM0, sound=TRUE)
   	if(stat & (BROKEN|NOPOWER))
   		return
  -	if(!anchored)
  -		return
   	if(safety_mode)
   		return
  -
  -	var/move_dir = get_dir(loc, AM.loc)
  -	if(move_dir == eat_dir)
  -		eat(AM)
  -
  -/obj/machinery/recycler/proc/eat(atom/AM0, sound=TRUE)
  -	var/list/to_eat
  -	if(istype(AM0, /obj/item))
  -		to_eat = AM0.GetAllContents()
  -	else
  -		to_eat = list(AM0)
  -
  -	var/items_recycled = 0
  +	if(!isturf(AM0.loc))
  +		return //I don't know how you called Crossed() but stop it.
  +
  +	var/list/to_eat = AM0.GetAllContents()
  +
  +	var/living_detected = FALSE //technically includes silicons as well but eh
  +	var/list/nom = list()
  +	var/list/crunchy_nom = list() //Mobs have to be handled differently so they get a different list instead of checking them multiple times.
   
   	for(var/i in to_eat)
   		var/atom/movable/AM = i
  -		var/obj/item/bodypart/head/as_head = AM
  -		var/obj/item/mmi/as_mmi = AM
  -		var/brain_holder = istype(AM, /obj/item/organ/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain) || istype(AM, /mob/living/brain)
  -		if(brain_holder)
  -			emergency_stop(AM)
  -		else if(isliving(AM))
  -			if((obj_flags & EMAGGED)||((!allowed(AM))&&(!ishuman(AM)))||!istype(AM, /mob/living/simple_animal/hostile/megafauna))
  -				crush_living(AM)
  -			else
  -				emergency_stop(AM)
  -		else if(istype(AM, /obj/item))
  -			recycle_item(AM)
  -			items_recycled++
  -		else
  -			playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 0)
  -			AM.forceMove(loc)
  -
  -	if(items_recycled && sound)
  -		playsound(src, item_recycle_sound, 50, 1)
  +		if(istype(AM, /obj/item))
  +			var/obj/item/bodypart/head/as_head = AM
  +			var/obj/item/mmi/as_mmi = AM
  +			if(istype(AM, /obj/item/organ/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain) || istype(AM, /obj/item/dullahan_relay))
  +				living_detected = TRUE
  +			nom += AM
  +		else if(isliving(AM) && !istype(AM, /mob/living/simple_animal/hostile/megafauna))
  +			living_detected = TRUE
  +			crunchy_nom += AM
  +	var/not_eaten = to_eat.len - nom.len - crunchy_nom.len
  +	if(living_detected) // First, check if we have any living beings detected.
  +		if(obj_flags & EMAGGED)
  +			for(var/CRUNCH in crunchy_nom) // Eat them and keep going because we don't care about safety.
  +				if(isliving(CRUNCH)) // MMIs and brains will get eaten like normal items
  +					crush_living(CRUNCH)
  +		else // Stop processing right now without eating anything.
  +			emergency_stop()
  +			return
  +	for(var/nommed in nom)
  +		recycle_item(nommed)
  +	if(nom.len && sound)
  +		playsound(src, item_recycle_sound, (50 + nom.len*5), TRUE, nom.len, ignore_walls = (nom.len - 10)) // As a substitute for playing 50 sounds at once.
  +	if(not_eaten)
  +		playsound(src, 'sound/machines/buzz-sigh.ogg', (50 + not_eaten*5), FALSE, not_eaten, ignore_walls = (not_eaten - 10)) // Ditto.
  +	if(!ismob(AM0))
  +		AM0.moveToNullspace()
  +		qdel(AM0)
  +	else // Lets not move a mob to nullspace and qdel it, yes?
  +		for(var/i in AM0.contents)
  +			var/atom/movable/content = i
  +			content.moveToNullspace()
  +			qdel(content)
   
   /obj/machinery/recycler/proc/recycle_item(obj/item/I)
   
  -	I.forceMove(loc)
   	var/obj/item/grown/log/L = I
   	if(istype(L))
   		var/seed_modifier = 0
   		if(L.seed)
   			seed_modifier = round(L.seed.potency / 25)
  -		new L.plank_type(src.loc, 1 + seed_modifier)
  -		qdel(L)
  -		return
  +		new L.plank_type(loc, 1 + seed_modifier)
   	else
   		var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
   		var/material_amount = materials.get_item_material_amount(I)
   		if(!material_amount)
  -			qdel(I)
   			return
  -		materials.insert_item(I, multiplier = (amount_produced / 100))
  -		qdel(I)
  +		materials.insert_item(I, material_amount, multiplier = (amount_produced / 100))
   		materials.retrieve_all()
   
   
  -/obj/machinery/recycler/proc/emergency_stop(mob/living/L)
  -	playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 0)
  +/obj/machinery/recycler/proc/emergency_stop()
  +	playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE)
   	safety_mode = TRUE
   	update_icon()
  -	L.forceMove(loc)
   	addtimer(CALLBACK(src, .proc/reboot), SAFETY_COOLDOWN)
   
   /obj/machinery/recycler/proc/reboot()
  -	playsound(src, 'sound/machines/ping.ogg', 50, 0)
  +	playsound(src, 'sound/machines/ping.ogg', 50, FALSE)
   	safety_mode = FALSE
   	update_icon()
   
  
positive.code: 	name = "paper - 'garbage duty instructions'"
  	info = "<h2>New Assignment</h2> You have been assigned to collect garbage from trash bins, located around the station. The crewmembers will put their trash into it and you will collect the said trash.<br><br>There is a recycling machine near your closet, inside maintenance; use it to recycle the trash for a small chance to get useful minerals. Then deliver these minerals to cargo or engineering. You are our last hope for a clean station, do not screw this up!"
  
  #undef SAFETY_COOLDOWN
  
negative.code: 	var/is_powered = !(stat & (BROKEN|NOPOWER))
  	if(safety_mode)
  		is_powered = FALSE
  	icon_state = icon_name + "[is_powered]" + "[(bloody ? "bld" : "")]" // add the blood tag at the end
  
  /obj/machinery/recycler/CanAllowThrough(atom/movable/AM)
  	. = ..()
  