diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index 15c504800a8..58643157d31 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -49,6 +49,9 @@
/obj/machinery/computer/med_data/attack_hand(mob/user as mob)
if(..())
return
+ ui_interact(user)
+
+/obj/machinery/computer/med_data/ui_interact(mob/user)
var/dat
if (src.temp)
dat = text("[src.temp]
Clear Screen")
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index eba129df262..468c6289194 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -56,6 +56,9 @@
/obj/machinery/computer/secure_data/attack_hand(mob/user as mob)
if(..())
return
+ ui_interact(user)
+
+/obj/machinery/computer/secure_data/ui_interact(user)
if (src.z > 6)
user << "Unable to establish a connection: You're too far away from the station!"
return
diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm
index 8e57548d6e2..f6290591f6f 100644
--- a/code/game/machinery/computer/skills.dm
+++ b/code/game/machinery/computer/skills.dm
@@ -39,6 +39,9 @@
/obj/machinery/computer/skills/attack_hand(mob/user as mob)
if(..())
return
+ ui_interact(user)
+
+/obj/machinery/computer/skills/ui_interact(mob/user as mob)
if (src.z > 6)
user << "Unable to establish a connection: You're too far away from the station!"
return
diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm
index 691214198fb..a2d6026e99c 100644
--- a/code/game/machinery/computer/station_alert.dm
+++ b/code/game/machinery/computer/station_alert.dm
@@ -23,18 +23,18 @@
alarm_monitor.register_alarm(src, /obj/machinery/computer/station_alert/update_icon)
..()
if(monitor_type)
- register(new monitor_type(src))
+ register_monitor(new monitor_type(src))
/obj/machinery/computer/station_alert/Destroy()
. = ..()
- unregister()
+ unregister_monitor()
/obj/machinery/computer/station_alert/proc/register_monitor(var/datum/nano_module/alarm_monitor/monitor)
if(monitor.host != src)
return
alarm_monitor = monitor
- alarm_monitor.register(src, /obj/machinery/computer/station_alert/update_icon)
+ alarm_monitor.register_alarm(src, /obj/machinery/computer/station_alert/update_icon)
/obj/machinery/computer/station_alert/proc/unregister_monitor()
if(alarm_monitor)
@@ -43,23 +43,18 @@
alarm_monitor = null
/obj/machinery/computer/station_alert/attack_ai(mob/user)
- add_fingerprint(user)
- if(stat & (BROKEN|NOPOWER))
- return
- interact(user)
- return
+ ui_interact(user)
/obj/machinery/computer/station_alert/attack_hand(mob/user)
- add_fingerprint(user)
- if(stat & (BROKEN|NOPOWER))
- return
- interact(user)
- return
+ ui_interact(user)
-/obj/machinery/computer/station_alert/interact(mob/user)
+/obj/machinery/computer/station_alert/ui_interact(mob/user)
if(alarm_monitor)
alarm_monitor.ui_interact(user)
+/obj/machinery/computer/station_alert/nano_container()
+ return alarm_monitor
+
/obj/machinery/computer/station_alert/update_icon()
icon_screen = initial(icon_screen)
if(!(stat & (BROKEN|NOPOWER)))
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 8e67bb27554..1efcd0450af 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -45,11 +45,19 @@
return 1
/obj/proc/CouldUseTopic(var/mob/user)
- if(!isAI(user) && src.Adjacent(user))
- // We are -probably- in physical contact with the object, better than how Topics() previously did it and always applied fingerprints.
- add_fingerprint(user)
+ user.AddTopicPrint(src)
+
+/mob/proc/AddTopicPrint(var/obj/target)
+ target.add_hiddenprint(src)
+
+/mob/living/AddTopicPrint(var/obj/target)
+ if(Adjacent(target))
+ target.add_fingerprint(src)
else
- add_hiddenprint(user)
+ target.add_hiddenprint(src)
+
+/mob/living/silicon/ai/AddTopicPrint(var/obj/target)
+ target.add_hiddenprint(src)
/obj/proc/CouldNotUseTopic(var/mob/user)
// Nada