diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 464edd9927b..f4859ed3755 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -935,6 +935,20 @@ proc/isobserver(A)
usr << "\blue You successfully remove your handcuffs."
usr:handcuffed:loc = usr:loc
usr:handcuffed = null
+
+ if(usr:handcuffed && (usr.last_special <= world.time) && usr:buckled)
+ usr.next_move = world.time + 100
+ usr.last_special = world.time + 100
+ usr << "\red You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stand still)"
+ for(var/mob/O in viewers(usr))
+ O.show_message(text("\red [] attempts to unbuckle themself!", usr), 1)
+ spawn(0)
+ if(do_after(usr, 1200))
+ if(!usr:buckled) return
+ for(var/mob/O in viewers(usr))
+ O.show_message(text("\red [] manages to unbuckle themself!", usr), 1)
+ usr << "\blue You successfully unbuckle yourself."
+ usr:buckled.manual_unbuckle_all(usr)
if("module")
if(istype(usr, /mob/living/silicon/robot)||istype(usr, /mob/living/silicon/hivebot))
if(usr:module)