anchor.diff:  
   /obj/structure/table/proc/del_reqs(datum/table_recipe/R)
   	var/list/Deletion = list()
  -	var/AP
  -	var/BP
   	var/amt
   	for(var/A in R.reqs)
   		amt = R.reqs[A]
  -		AP = text2path(A)
  -		if(ispath(AP, /obj/item/stack))
  +		if(ispath(A, /obj/item/stack))
   			var/obj/item/stack/S
   			stack_loop:
   				for(var/B in table_contents)
  -					BP = text2path(B)
  -					if(ispath(BP, AP))
  +					if(ispath(B, A))
   						while(amt > 0)
  -							S = locate(BP) in loc
  +							S = locate(B) in loc
   							if(S.amount >= amt)
   								S.use(amt)
   								break stack_loop
   							else
   								amt -= S.amount
   								del(S)
  -		else if(ispath(AP, /obj/item))
  +		else if(ispath(A, /obj/item))
   			var/obj/item/I
   			item_loop:
   				for(var/B in table_contents)
  -					BP = text2path(B)
  -					if(ispath(BP, AP))
  +					if(ispath(B, A))
   						while(amt > 0)
  -							I = locate(BP) in loc
  +							I = locate(B) in loc
   							Deletion.Add(I)
   							amt--
   						break item_loop
   		else
  -			var/datum/reagent/RG = new AP
  +			var/datum/reagent/RG = new A
   			reagent_loop:
   				for(var/B in table_contents)
  -					BP = text2path(B)
  -					if(ispath(BP, /obj/item/weapon/reagent_containers))
  -						var/obj/item/RC = locate(BP) in loc
  +					if(ispath(B, /obj/item/weapon/reagent_containers))
  +						var/obj/item/RC = locate(B) in loc
   						if(RC.reagents.has_reagent(RG.id, amt))
   							RC.reagents.remove_reagent(RG.id, amt)
   							RG.volume = amt
  
positive.code: 							RC.reagents.del_reagent(RG.id)
  
  	for(var/A in R.parts)
  		AP = text2path(A)
  		for(var/B in Deletion)
  			if(!istype(B, AP))
  				Deletion.Remove(B)
  				del(B)
  	return Deletion
  
negative.code: 
  /obj/structure/table/proc/check_contents(datum/table_recipe/R)
  	check_table()
  	main_loop:
  		for(var/A in R.reqs)
  			for(var/B in table_contents)
  				if(ispath(B, A))
  					if(table_contents[B] >= R.reqs[A])
  						continue main_loop
  			return 0
  	for(var/A in R.chem_catalists)
  		if(table_contents[A] < R.chem_catalists[A])
  			return 0
  	return 1
  
  /obj/structure/table/proc/check_table()
  	table_contents = list()
  	for(var/obj/item/I in loc)
  		if(istype(I, /obj/item/stack))
  			var/obj/item/stack/S = I
  			table_contents[I.type] += S.amount
  		else
  			if(istype(I, /obj/item/weapon/reagent_containers))
  				for(var/datum/reagent/R in I.reagents.reagent_list)
  					table_contents[R.type] += R.volume
  
  			table_contents[I.type] += 1
  
  /obj/structure/table/proc/check_tools(mob/user, datum/table_recipe/R)
  	if(!R.tools.len)
  		return 1
  	var/list/possible_tools = list()
  	for(var/obj/item/I in user.contents)
  		if(istype(I, /obj/item/weapon/storage))
  			for(var/obj/item/SI in I.contents)
  				possible_tools += SI.type
  		else
  			possible_tools += I.type
  	possible_tools += table_contents
  	var/i = R.tools.len
  	var/I
  	for(var/A in R.tools)
  		I = possible_tools.Find(A)
  		if(I)
  			possible_tools.Cut(I, I+1)
  