anchor.diff:  /obj/machinery/computer/teleporter/Topic(href, href_list)
   	if(..())
   		return
  +
  +	if(href_list["eject"])
  +		eject()
  +		updateDialog()
  +		return
  +
  +	if(!check_hub_connection())
  +		usr << "<span class='warning'>Error: Unable to detect hub.</span>"
  +		return
  +	if(calibrating)
  +		usr << "<span class='warning'>Error: Calibration in progress. Stand by.</span>"
  +		return
  +
   	if(href_list["regimeset"])
   		power_station.engaged = 0
   		power_station.teleporter_hub.update_icon()
  +		power_station.teleporter_hub.calibrated = 0
   		reset_regime()
   	if(href_list["settarget"])
   		power_station.engaged = 0
   		power_station.teleporter_hub.update_icon()
  +		power_station.teleporter_hub.calibrated = 0
   		set_target(usr)
   	if(href_list["locked"])
   		power_station.engaged = 0
   		power_station.teleporter_hub.update_icon()
  +		power_station.teleporter_hub.calibrated = 0
   		target = get_turf(locked.locked_location)
  -	if(href_list["eject"])
  -		eject()
  +	if(href_list["calibrate"])
  +		if(!target)
  +			usr << "<span class='warning'>Error: No target set to calibrate to.</span>"
  +			return
  +		if(power_station.teleporter_hub.calibrated || power_station.teleporter_hub.accurate >= 3)
  +			usr << "<span class='notice'>Hub is already calibrated.</span>"
  +			return
  +		src.visible_message("<span class='notice'>Processing hub calibration to target...</span>")
  +
  +		calibrating = 1
  +		spawn(50 * (3 - power_station.teleporter_hub.accurate)) //Better parts mean faster calibration
  +			calibrating = 0
  +			if(check_hub_connection())
  +				power_station.teleporter_hub.calibrated = 1
  +				src.visible_message("<span class='notice'>Calibration complete.</span>")
  +			else
  +				src.visible_message("<span class='warning'>Error: Unable to detect hub.</span>")
  +			updateDialog()
  +
   	updateDialog()
  +
  +/obj/machinery/computer/teleporter/proc/check_hub_connection()
  +	if(!power_station)
  +		return
  +	if(!power_station.teleporter_hub)
  +		return
  +	return 1
   
   /obj/machinery/computer/teleporter/proc/reset_regime()
   	target = null
  
positive.code: 	else if(!power_station.teleporter_hub)
  		data += "<div class='statusDisplay'>No hub linked.</div>"
  	else
  		data += "<div class='statusDisplay'>Current regime: [regime_set]<BR>Current target: [(!target) ? "None" : "[get_area(target)] [(regime_set != "Gate") ? "" : "Teleporter"]"]</div><BR>"
  		data += "<A href='?src=\ref[src];regimeset=1'>Change regime</A><BR>"
  		data += "<A href='?src=\ref[src];settarget=1'>Set target</A><BR>"
  		if(locked)
  			data += "<A href='?src=\ref[src];locked=1'>Get target from memory</A><BR>"
  			data += "<A href='?src=\ref[src];eject=1'>Eject GPS device</A><BR>"
  		else
  			data += "<span class='linkOff'>Get target from memory</span><BR>"
  			data += "<span class='linkOff'>Eject GPS device</span>"
  
  	var/datum/browser/popup = new(user, "teleporter", name, 400, 400)
  	popup.set_content(data)
  
negative.code: 						human.dna.species = new /datum/species/fly()
  						human.regenerate_icons()
  					human.apply_effect((rand(120 - accurate * 40, 180 - accurate * 60)), IRRADIATE, 0)
  			calibrated = 0
  	return
  
  /obj/machinery/teleport/hub/update_icon()
  