anchor.diff:  	if(P)
   		var/list/dc = P.datum_components
   		var/our_type = type
  -		for(var/I in _GetInverseTypeListExceptRoot(our_type))
  +		for(var/I in _GetInverseTypeList(our_type))
   			var/list/components_of_type = dc[I]
   			if(islist(components_of_type))	//
   				var/list/subtracted = components_of_type - src
  
positive.code: /datum/component/proc/OnTransfer(datum/new_parent)
  	return
  
  /datum/component/proc/_GetInverseTypeListExceptRoot(our_type_cached)
  	var/datum/component/current_type = our_type_cached
  	. = list()
  	while (current_type != /datum/component)
  		. += current_type
  		current_type = type2parent(current_type)
  
  /datum/var/list/datum_components //special typecache of /datum/component
  
  /datum/proc/SendSignal(sigtype, ...)
  	var/list/comps = datum_components
  	. = FALSE
  	for(var/I in comps)
  		var/datum/component/C = I
  		if(!C.enabled)
  			continue
  		if(C.ReceiveSignal(arglist(args)))
  			ComponentActivated(C)
  			. = TRUE
  
  /datum/proc/ComponentActivated(datum/component/C)
  	return
  
negative.code: 	
  	//set up the typecache
  	var/our_type = type
  	for(var/I in _GetInverseTypeList(our_type))
  		var/test = dc[I]
  		if(test)	//already another component of this type here
  			var/list/components_of_type
  