diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm
index 125870797ca..123c60abad2 100644
--- a/code/__DEFINES/antagonists.dm
+++ b/code/__DEFINES/antagonists.dm
@@ -365,3 +365,5 @@ GLOBAL_LIST_INIT(human_invader_antagonists, list(
#define BATON_CUFF 2
#define BATON_PROBE 3
#define BATON_MODES 4
+
+#define FREEDOM_IMPLANT_CHARGES 4
diff --git a/code/game/objects/items/implants/implant_freedom.dm b/code/game/objects/items/implants/implant_freedom.dm
index d010b57e506..1fa61c27510 100644
--- a/code/game/objects/items/implants/implant_freedom.dm
+++ b/code/game/objects/items/implants/implant_freedom.dm
@@ -3,37 +3,45 @@
desc = "Use this to escape from those evil Red Shirts."
icon_state = "freedom"
implant_color = "r"
- uses = 4
+ uses = FREEDOM_IMPLANT_CHARGES
+/obj/item/implant/freedom/implant(mob/living/target, mob/user, silent, force)
+ . = ..()
+ if(!.)
+ return FALSE
+ if(!iscarbon(target)) //This is pretty much useless for anyone else since they can't be cuffed
+ balloon_alert(user, "that would be a waste!")
+ return FALSE
+ return TRUE
/obj/item/implant/freedom/activate()
. = ..()
- uses--
- to_chat(imp_in, span_hear("You feel a faint click."))
- if(iscarbon(imp_in))
- var/mob/living/carbon/C_imp_in = imp_in
- C_imp_in.uncuff()
- if(!uses)
- qdel(src)
+ var/mob/living/carbon/carbon_imp_in = imp_in
+ if(!carbon_imp_in.handcuffed && !carbon_imp_in.legcuffed)
+ balloon_alert(carbon_imp_in, "no restraints!")
+ return
+ uses--
+
+ carbon_imp_in.uncuff()
+ if(!uses)
+ addtimer(CALLBACK(carbon_imp_in, TYPE_PROC_REF(/atom, balloon_alert), carbon_imp_in, "implant degraded!"), 1 SECONDS)
+ qdel(src)
/obj/item/implant/freedom/get_data()
var/dat = {"
-Implant Specifications:
-Name: Freedom Beacon
-Life: optimum 5 uses
-Important Notes: Illegal
-