anchor.diff:  		beaker = null
   	return ..()
   
  -/obj/machinery/chem_dispenser/proc/get_macro_resolution()
  -	. = 5
  -	if (macrotier > 1)
  -		. -= macrotier // 5 for tier1, 3 for 2, 2 for 3, 1 for 4.
  -
   /obj/machinery/chem_dispenser/proc/check_macro(macro)
  -	var/res = get_macro_resolution()
  +	var/res = macroresolution
   	for (var/reagent in splittext(trim(macro), ";"))
   		if (!check_macro_part(reagent, res))
   			return FALSE
   	return TRUE
   
  -/obj/machinery/chem_dispenser/proc/check_macro_part(var/part, var/res = get_macro_resolution())
  +/obj/machinery/chem_dispenser/proc/check_macro_part(var/part, var/res = macroresolution)
   	var/detail = splittext(part, "=")
  -	if (round(text2num(detail[2]), res) != text2num(detail[2]))
  +	if (text2num(detail[2]) < res)
   		return FALSE
   	return TRUE
   
  -/obj/machinery/chem_dispenser/proc/process_recipe_list(var/fucking_hell)
  +/obj/machinery/chem_dispenser/proc/process_recipe_list(var/recipe)
   	var/list/key_list = list()
   	var/list/final_list = list()
  -	var/list/first_process = splittext(fucking_hell, ";")
  +	var/list/first_process = splittext(recipe, ";")
   	for(var/reagents in first_process)
  -		var/list/fuck = splittext(reagents, "=")
  -		final_list += list(avoid_assoc_duplicate_keys(fuck[1],key_list) = text2num(fuck[2]))
  +		var/list/splitreagent = splittext(reagents, "=")
  +		final_list += list(avoid_assoc_duplicate_keys(splitreagent[1],key_list) = text2num(splitreagent[2]))
   	return final_list
   
   /obj/machinery/chem_dispenser/drinks/Initialize()
  
positive.code: 				return
  			var/recipe_to_use = params["recipe"]
  			var/list/chemicals_to_dispense = process_recipe_list(recipe_to_use)
  			var/res = get_macro_resolution()
  			for(var/key in chemicals_to_dispense) // i suppose you could edit the list locally before passing it
  				var/list/keysplit = splittext(key," ")
  				var/r_id = keysplit[1]
  				if(beaker && dispensable_reagents.Find(r_id)) // but since we verify we have the reagent, it'll be fine
  					var/datum/reagents/R = beaker.reagents
  					var/free = R.maximum_volume - R.total_volume
  					var/actual = min(round(chemicals_to_dispense[key], res), (cell.charge * powerefficiency)*10, free)
  					if(actual)
  						if(!cell.use(actual / powerefficiency))
  							say("Not enough energy to complete operation!")
  
negative.code: 	if(panel_open)
  		to_chat(user, "<span class='notice'>[src]'s maintenance hatch is open!</span>")
  	if(in_range(user, src) || isobserver(user))
  		to_chat(user, "<span class='notice'>The status display reads: <br>Recharging <b>[recharge_amount]</b> power units per interval.<br>Power efficiency increased by <b>[round((powerefficiency*1000)-100, 1)]%</b>.<br>Macro granularity at <b>[macroresolution]u</b>.<span>")
  
  /obj/machinery/chem_dispenser/process()
  	if (recharge_counter >= 4)
  		if(!is_operational())
  