anchor.diff:  
  -/obj/machinery/anomaly/artifact_harvester
  +/obj/machinery/artifact_harvester
   	name = "Anomaly Power Collector"
   	icon = 'virology.dmi'
   	icon_state = "incubator"	//incubator_on
   	anchored = 1
   	density = 1
  +	idle_power_usage = 50
  +	active_power_usage = 750
  +	use_power = 1
   	var/harvesting = 0
   	var/obj/item/weapon/anobattery/inserted_battery
   	var/obj/machinery/artifact/cur_artifact
   	var/obj/machinery/scanner/owned_scanner = null
   
  -/obj/machinery/anomaly/artifact_harvester/New()
  +/obj/machinery/artifact_harvester/New()
   	..()
  -
   	//connect to a nearby scanner pad
   	owned_scanner = locate(/obj/machinery/scanner) in get_step(src, dir)
   	if(!owned_scanner)
   		owned_scanner = locate(/obj/machinery/scanner) in orange(1, src)
   
  -/obj/machinery/anomaly/artifact_harvester/attackby(var/obj/I as obj, var/mob/user as mob)
  +/obj/machinery/artifact_harvester/attackby(var/obj/I as obj, var/mob/user as mob)
   	if(istype(I,/obj/item/weapon/anobattery))
   		if(!inserted_battery)
  -			user << "You insert the battery."
  +			user << "\blue You insert [I] into [src]."
   			user.drop_item()
   			I.loc = src
   			src.inserted_battery = I
  -			return
  +			updateDialog()
  +		else
  +			user << "\red There is already a battery in [src]."
   	else
   		return..()
   
  -/obj/machinery/anomaly/artifact_harvester/process()
  +/obj/machinery/artifact_harvester/attack_hand(var/mob/user as mob)
  +	src.add_fingerprint(user)
  +	interact(user)
  +
  +/obj/machinery/artifact_harvester/interact(var/mob/user as mob)
   	if(stat & (NOPOWER|BROKEN))
   		return
  -	use_power(350)
  -
  -	if(harvesting)
  -		use_power(250)
  -		inserted_battery.stored_charge += 10
  -		if(inserted_battery.stored_charge >= inserted_battery.capacity)
  -			inserted_battery.stored_charge = inserted_battery.capacity
  -			harvesting = 0
  -			cur_artifact.anchored = 0
  -			src.visible_message("<b>[name]</b> states, \"Battery is full.\"")
  -			icon_state = "incubator"
  -	return
  -
  -/obj/machinery/anomaly/artifact_harvester/interact(var/mob/user as mob)
  -	if(stat & (NOPOWER|BROKEN))
  -		return
  -	user.machine = src
  +	user.set_machine(src)
   	var/dat = "<B>Artifact Power Harvester</B><BR>"
   	dat += "<HR><BR>"
   	//
   	if(owned_scanner)
   		if(harvesting)
  -			dat += "Please wait. Harvesting in progress ([(inserted_battery.stored_charge/inserted_battery.capacity)*100]%).<br>"
  +			if(harvesting > 0)
  +				dat += "Please wait. Harvesting in progress ([(inserted_battery.stored_charge/inserted_battery.capacity)*100]%).<br>"
  +			else
  +				dat += "Please wait. Energy dump in progress ([(inserted_battery.stored_charge/inserted_battery.capacity)*100]%).<br>"
   			dat += "<A href='?src=\ref[src];stopharvest=1'>Halt early</A><BR>"
   		else
   			if(inserted_battery)
  
positive.code: 
  		var/mundane = 0
  		for(var/obj/O in get_turf(owned_scanner))
  			if(!istype(O, /obj/machinery/artifact) && !istype(O, /obj/machinery/scanner))
  				mundane++
  				break
  		for(var/mob/O in get_turf(owned_scanner))
  			if(!istype(O, /obj/machinery/artifact))
  				mundane++
  				break
  
  		if(articount == 1 && !mundane)
  			cur_artifact = analysed
  			//check to see if the battery is compatible
  			if(inserted_battery)
  				if(inserted_battery.battery_effect.artifact_id == cur_artifact.my_effect.artifact_id || inserted_battery.stored_charge == 0)
  					harvesting = 1
  					cur_artifact.anchored = 1
  					cur_artifact.being_used = 1
  					icon_state = "incubator_on"
  					var/message = "<b>[src]</b> states, \"Beginning artifact energy harvesting.\""
  					src.visible_message(message, message)
  					//
  					inserted_battery.battery_effect = cur_artifact.my_effect
  				else
  					var/message = "<b>[src]</b> states, \"Cannot harvest. Incompatible energy signatures detected.\""
  					src.visible_message(message, message)
  			else if(cur_artifact)
  				var/message = "<b>[src]</b> states, \"Cannot harvest. No battery inserted.\""
  				src.visible_message(message, message)
  		else if(articount > 1 || mundane)
  			var/message = "<b>[src]</b> states, \"Cannot harvest. Error isolating energy signature.\""
  			src.visible_message(message, message)
  		else if(!articount)
  			var/message = "<b>[src]</b> states, \"Cannot harvest. No noteworthy energy signature isolated.\""
  			src.visible_message(message, message)
  		else if (cur_artifact.being_used)
  			var/message = "<b>[src]</b> states, \"Cannot harvest. Too much interferance from energy scan.\""
  			src.visible_message(message, message)
  
  	if (href_list["stopharvest"])
  		if(harvesting)
  			harvesting = 0
  			cur_artifact.anchored = 0
  			cur_artifact.being_used = 0
  			src.visible_message("<b>[name]</b> states, \"Harvesting interrupted.\"")
  			icon_state = "incubator"
  
  
  	if (href_list["ejectbattery"])
  		src.inserted_battery.loc = src.loc
  		src.inserted_battery = null
  
  	if (href_list["drainbattery"])
  		use_power(100)
  		src.inserted_battery.battery_effect.artifact_id = ""
  		src.inserted_battery.stored_charge = 0
  		var/message = "<b>[src]</b> states, \"Battery drained of all charge.\""
  		src.visible_message(message, message)
  
  	if(href_list["close"])
  		usr << browse(null, "window=artharvester")
  		usr.machine = null
  
  	src.updateDialog()
  	return
  
negative.code: 	user << browse(dat, "window=artharvester;size=450x500")
  	onclose(user, "artharvester")
  
  /obj/machinery/artifact_harvester/process()
  	if(stat & (NOPOWER|BROKEN))
  		return
  
  	if(harvesting > 0)
  		//gain a bit of charge
  		inserted_battery.stored_charge += 0.5
  
  		//check if we've finished
  		if(inserted_battery.stored_charge >= inserted_battery.capacity)
  			use_power = 1
  			harvesting = 0
  			cur_artifact.anchored = 0
  			cur_artifact.being_used = 0
  			src.visible_message("<b>[name]</b> states, \"Battery is full.\"")
  			icon_state = "incubator"
  
  	else if(harvesting < 0)
  		//dump some charge
  		inserted_battery.stored_charge -= 2
  
  		//do the effect
  		if(inserted_battery.battery_effect)
  			inserted_battery.battery_effect.process()
  
  			//if the effect works by touch, activate it on anyone viewing the console
  			if(inserted_battery.battery_effect.effect == 0)
  				var/list/nearby = viewers(1, src)
  				for(var/mob/M in nearby)
  					if(M.machine == src)
  						inserted_battery.battery_effect.DoEffectTouch(M)
  
  		//if there's no charge left, finish
  		if(inserted_battery.stored_charge <= 0)
  			use_power = 1
  			inserted_battery.stored_charge = 0
  			harvesting = 0
  			if(inserted_battery.battery_effect && inserted_battery.battery_effect.activated)
  				inserted_battery.battery_effect.ToggleActivate()
  			src.visible_message("<b>[name]</b> states, \"Battery dump completed.\"")
  			icon_state = "incubator"
  
  /obj/machinery/artifact_harvester/Topic(href, href_list)
  
  	if (href_list["harvest"])
  		//locate artifact on analysis pad
  