diff --git a/code/datums/components/uplink.dm b/code/datums/components/uplink.dm
index 167d72a0440..fca9caab4ff 100644
--- a/code/datums/components/uplink.dm
+++ b/code/datums/components/uplink.dm
@@ -245,7 +245,7 @@
if(!ispath(item_path, /datum/uplink_item))
return
item = SStraitor.uplink_items_by_type[item_path]
- uplink_handler.purchase_item(ui.user, item)
+ uplink_handler.purchase_item(ui.user, item, parent)
if("lock")
if(!lockable)
return TRUE
diff --git a/code/modules/antagonists/traitor/uplink_handler.dm b/code/modules/antagonists/traitor/uplink_handler.dm
index 47140d8991e..a61a29b71cb 100644
--- a/code/modules/antagonists/traitor/uplink_handler.dm
+++ b/code/modules/antagonists/traitor/uplink_handler.dm
@@ -72,7 +72,7 @@
return TRUE
-/datum/uplink_handler/proc/purchase_item(mob/user, datum/uplink_item/to_purchase)
+/datum/uplink_handler/proc/purchase_item(mob/user, datum/uplink_item/to_purchase, atom/movable/source)
if(!can_purchase_item(user, to_purchase))
return
@@ -80,7 +80,7 @@
item_stock[to_purchase] = to_purchase.limited_stock
telecrystals -= to_purchase.cost
- to_purchase.purchase(user, src)
+ to_purchase.purchase(user, src, source)
if(to_purchase in item_stock)
item_stock[to_purchase] -= 1
diff --git a/code/modules/uplink/uplink_items/device_tools.dm b/code/modules/uplink/uplink_items/device_tools.dm
index 75d4ee732b8..fa3d2de43f8 100644
--- a/code/modules/uplink/uplink_items/device_tools.dm
+++ b/code/modules/uplink/uplink_items/device_tools.dm
@@ -138,9 +138,17 @@
var/datum/component/uplink/uplink = source.GetComponent(/datum/component/uplink)
if(!uplink)
return
+ if(!uplink.unlock_note) //no note means it can't be locked (typically due to being an implant.)
+ to_chat(user, span_warning("This device doesn't support code entry!"))
+ return
+
uplink.failsafe_code = uplink.generate_code()
var/code = "[islist(uplink.failsafe_code) ? english_list(uplink.failsafe_code) : uplink.failsafe_code]"
- to_chat(user, span_warning("The new failsafe code for this uplink is now : [code]. You may check your antagonist info to recall this."))
+ var/datum/antagonist/traitor/traitor_datum = user.mind?.has_antag_datum(/datum/antagonist/traitor)
+ if(traitor_datum)
+ traitor_datum.antag_memory += "Uplink Failsafe Code: [code]" + "
"
+ traitor_datum.update_static_data_for_all_viewers()
+ to_chat(user, span_warning("The new failsafe code for this uplink is now: [code].[traitor_datum ? " You may check your antagonist info to recall this." : null]"))
return source //For log icon
/datum/uplink_item/device_tools/toolbox