anchor.diff:  	set waitfor = FALSE
   	return
   
  -/datum/component/proc/_GetInverseTypeList(current_type)
  -	. = list(current_type)
  +/datum/component/proc/_GetInverseTypeList(our_type = type)
  +	//we can do this one simple trick
  +	var/current_type = parent_type
  +	. = list(our_type, current_type)
  +	//and since most components are root level + 1, this won't even have to run
   	while (current_type != /datum/component)
   		current_type = type2parent(current_type)
   		. += current_type
  
positive.code: 	var/datum/parent
  
  /datum/component/New(datum/P, ...)
  	parent = P
  	var/list/arguments = args.Copy()
  	arguments.Cut(1, 2)
  
negative.code: /datum/component/proc/_RemoveFromParent()
  	var/datum/P = parent
  	var/list/dc = P.datum_components
  	for(var/I in _GetInverseTypeList())
  		var/list/components_of_type = dc[I]
  		if(islist(components_of_type))	//
  			var/list/subtracted = components_of_type - src
  