anchor.diff:  /datum/element/flavor_text/Detach(atom/A)
   	. = ..()
   	UnregisterSignal(A, COMSIG_PARENT_EXAMINE)
  -	texts_by_mob -= A
  -	LAZYREMOVE(GLOB.mobs_with_editable_flavor_text[A], src)
  -	if(!GLOB.mobs_with_editable_flavor_text[A])
  -		GLOB.mobs_with_editable_flavor_text -= A
  -		if(ismob(A))
  -			var/mob/M = A
  +	texts_by_atom -= A
  +	if(can_edit && ismob(A))
  +		var/mob/M = A
  +		LAZYREMOVE(GLOB.mobs_with_editable_flavor_text[M], src)
  +		if(!GLOB.mobs_with_editable_flavor_text[M])
  +			GLOB.mobs_with_editable_flavor_text -= M
   			M.verbs -= /mob/proc/manage_flavor_tests
   
   /datum/element/flavor_text/proc/show_flavor(atom/target, mob/user, list/examine_list)
  
positive.code: 	element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH
  	id_arg_index = 3
  	var/flavor_name = "Flavor Text"
  	var/list/texts_by_mob = list()
  	var/addendum = "This can also be used for OOC notes and preferences!"
  	var/always_show = FALSE
  	var/max_len = MAX_FAVOR_LEN
  
  /datum/element/flavor_text/Attach(datum/target, text = "", _name = "Flavor Text", _addendum, _max_len = MAX_FAVOR_LEN, _always_show = FALSE, can_edit = TRUE)
  	. = ..()
  
  	if(. == ELEMENT_INCOMPATIBLE || !isatom(target)) //no reason why this shouldn't work on atoms too.
  
negative.code: //subtypes with additional hooks for DNA and preferences.
  /datum/element/flavor_text/carbon
  
  /datum/element/flavor_text/carbon/Attach(datum/target, text = "", _name = "Flavor Text", _addendum, _max_len = MAX_FAVOR_LEN, _always_show = FALSE, _edit = TRUE)
  	if(!iscarbon(target))
  		return ELEMENT_INCOMPATIBLE
  	. = ..()
  