diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index a319e2d2c39..172daf92e1e 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -1266,6 +1266,7 @@ Total SMES charging rate should not exceed total power generation rate, or an ov
var/uses = 10.0
var/selfdestruct = 0.0
var/traitor_frequency = 0.0
+ var/mob/currentUser = null
var/obj/item/device/radio/origradio = null
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
w_class = 2.0
diff --git a/code/game/objects/devices/PDA/uplink.dm b/code/game/objects/devices/PDA/uplink.dm
index 8f1345e6300..15550991425 100644
--- a/code/game/objects/devices/PDA/uplink.dm
+++ b/code/game/objects/devices/PDA/uplink.dm
@@ -40,6 +40,7 @@
menu_message += "Voice-Changer (4)
"
menu_message += "
"
menu_message += "Freedom Implant (with injector) (3)
"
+ menu_message += "Uplink Implant (4 crystals inside) (10)
"
menu_message += "Paralysis Pen (3)
"
menu_message += "Sleepy Pen (5)
"
menu_message += "
"
@@ -121,6 +122,11 @@
uses -= 3
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(get_turf(hostpda))
O.imp = new /obj/item/weapon/implant/freedom(O)
+ if("imp_uplink")
+ if (uses >= 10)
+ uses -= 10
+ var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(get_turf(hostpda))
+ O.imp = new /obj/item/weapon/implant/uplink(O)
if("sleepypen")
if (uses >= 5)
uses -= 5
@@ -170,7 +176,6 @@
if(uses >= 3)
uses -= 3
new /obj/machinery/singularity_beacon/syndicate(get_turf(hostpda))
-
if("toolbox")
if(uses)
uses--
@@ -190,4 +195,4 @@
if (hostpda.mode==1)
hostpda.mode = 0
hostpda.updateDialog()
- return
+ return
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/implants.dm b/code/game/objects/items/weapons/implants.dm
index b7d0e6cb0dc..64d169d399d 100644
--- a/code/game/objects/items/weapons/implants.dm
+++ b/code/game/objects/items/weapons/implants.dm
@@ -310,3 +310,21 @@ the implant may become unstable and either pre-maturely inject the subject or si
src.imp = null
user.show_message("\red You implanted the implant into [M].")
src.icon_state = "implanter0"
+
+
+/obj/item/weapon/implant/uplink
+ var/activation_emote = "chuckle"
+ var/obj/item/weapon/syndicate_uplink/uplink = null
+
+ New()
+ activation_emote = pick("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink")
+ uplink = new /obj/item/weapon/syndicate_uplink/implanted(src)
+ ..()
+
+ implanted(mob/source as mob)
+ source.mind.store_memory("Uplink implant can be activated by using the [activation_emote] emote, say *[activation_emote] to attempt to activate.", 0, 0)
+ source << "The implanted uplink implant can be activated by using the [activation_emote] emote, say *[activation_emote] to attempt to activate."
+
+ trigger(emote, mob/source as mob)
+ if(emote == activation_emote)
+ uplink.attack_self(source)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/uplinks.dm b/code/game/objects/items/weapons/uplinks.dm
index 5539954b521..020bd33eef0 100644
--- a/code/game/objects/items/weapons/uplinks.dm
+++ b/code/game/objects/items/weapons/uplinks.dm
@@ -3,6 +3,9 @@ CONTAINS:
SYNDICATE UPLINK
*/
+/obj/item/weapon/syndicate_uplink/implanted
+ uses = 4
+
/obj/item/weapon/syndicate_uplink/proc/explode()
var/turf/location = get_turf(src.loc)
if(location)
@@ -15,6 +18,7 @@ SYNDICATE UPLINK
return
/obj/item/weapon/syndicate_uplink/attack_self(mob/user as mob)
+ currentUser = user
user.machine = src
var/dat
if (src.selfdestruct)
@@ -54,6 +58,8 @@ SYNDICATE UPLINK
dat += "
"
dat += "Binary Translator (3)
"
dat += "Hacked AI Module (7)
"
+ dat += "
"
+ dat += "Syndicate Toolbox (Includes various tools) (1)
"
dat += "