diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index cc805cf95b..53517d91b0 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -71,7 +71,7 @@
var/uses = 10
/obj/item/weapon/card/emag/resolve_attackby(atom/A, mob/user)
- var/used_uses = A.emag_act(uses, user)
+ var/used_uses = A.emag_act(uses, user, src)
if(used_uses < 0)
return ..(A, user)
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index d0a04358db..4d88414e15 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -251,22 +251,17 @@ emp_act
return 1
return 0
-//*** TODO
-
-/* TODO Reimplement pending cleanup
-if(istype(I,/obj/item/weapon/card/emag))
- if(!(affecting.status & ORGAN_ROBOT))
- user << "\red That limb isn't robotic."
- return
+/mob/living/carbon/human/emag_act(var/remaining_charges, mob/user, var/emag_source)
+ var/obj/item/organ/external/affecting = get_organ(user.zone_sel.selecting)
+ if(!affecting || !(affecting.status & ORGAN_ROBOT))
+ user << "That limb isn't robotic."
+ return -1
if(affecting.sabotaged)
- user << "\red [src]'s [affecting.name] is already sabotaged!"
- else
- user << "\red You sneakily slide [I] into the dataport on [src]'s [affecting.name] and short out the safeties."
- var/obj/item/weapon/card/emag/emag = I
- emag.uses--
- affecting.sabotaged = 1
+ user << "[src]'s [affecting.name] is already sabotaged!"
+ return -1
+ user << "You sneakily slide [emag_source] into the dataport on [src]'s [affecting.name] and short out the safeties."
+ affecting.sabotaged = 1
return 1
-*/
//this proc handles being hit by a thrown atom
/mob/living/carbon/human/hitby(atom/movable/AM as mob|obj,var/speed = THROWFORCE_SPEED_DIVISOR)