anchor.diff:  
   	if(_max_len)
   		max_len = _max_len
  -	texts_by_mob[target] = copytext(text, 1, max_len)
  +	texts_by_atom[target] = copytext(text, 1, max_len)
   	if(_name)
   		flavor_name = _name
   	if(!isnull(addendum))
   		addendum = _addendum
   	always_show = _always_show
  +	can_edit = _edit
   
   	RegisterSignal(target, COMSIG_PARENT_EXAMINE, .proc/show_flavor)
   
  
positive.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, can_edit = TRUE)
  	if(!iscarbon(target))
  		return ELEMENT_INCOMPATIBLE
  	. = ..()
  
negative.code: 	element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH
  	id_arg_index = 3
  	var/flavor_name = "Flavor Text"
  	var/list/texts_by_atom = list()
  	var/addendum = "This can also be used for OOC notes and preferences!"
  	var/always_show = FALSE
  	var/max_len = MAX_FAVOR_LEN
  	var/can_edit = TRUE
  
  /datum/element/flavor_text/Attach(datum/target, text = "", _name = "Flavor Text", _addendum, _max_len = MAX_FAVOR_LEN, _always_show = FALSE, _edit = TRUE)
  	. = ..()
  
  	if(. == ELEMENT_INCOMPATIBLE || !isatom(target)) //no reason why this shouldn't work on atoms too.
  