diff --git a/code/game/objects/items/weapons/powerfist.dm b/code/game/objects/items/weapons/powerfist.dm
index 33c96483d5b..5e86f27a5d0 100644
--- a/code/game/objects/items/weapons/powerfist.dm
+++ b/code/game/objects/items/weapons/powerfist.dm
@@ -101,7 +101,13 @@
user.do_attack_animation(target)
- target.apply_damage(force * fisto_setting, BRUTE)
+ var/obj/item/organ/external/affecting = target.get_organ(ran_zone(user.zone_selected))
+ if(!affecting)
+ affecting = target.get_organ("chest")
+
+ var/armor_block = target.run_armor_check(affecting, MELEE)
+ target.apply_damage(force * fisto_setting, BRUTE, affecting, armor_block)
+
target.visible_message("[user]'s powerfist lets out a loud hiss as [user.p_they()] punch[user.p_es()] [target.name]!", \
"You cry out in pain as [user]'s punch flings you backwards!")
new /obj/effect/temp_visual/kinetic_blast(target.loc)
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 3d11a5dff23..05f3bbb5d02 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -275,12 +275,19 @@
if(mob_hurt) //Density check probably not needed, one should only bump into something if it is dense, and blob tiles are not dense, because of course they are not.
return
C.visible_message("[C] slams into [src]!", "You slam into [src]!")
- C.take_organ_damage(damage)
if(!self_hurt)
take_damage(damage, BRUTE)
+
if(issilicon(C))
C.Weaken(3 SECONDS)
+ C.adjustBruteLoss(damage)
else
+ var/obj/item/organ/external/affecting = C.get_organ(ran_zone(throwingdatum.target_zone))
+ if(affecting)
+ var/armor_block = C.run_armor_check(affecting, MELEE)
+ C.apply_damage(damage, BRUTE, affecting, armor_block)
+ else
+ C.take_organ_damage(damage)
C.KnockDown(3 SECONDS)
/obj/handle_ricochet(obj/item/projectile/P)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index ae668c0605d..45717aef732 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1126,8 +1126,15 @@
C.adjustBruteLoss(damage)
C.Weaken(3 SECONDS)
else
- C.take_organ_damage(damage)
+ var/obj/item/organ/external/affecting = C.get_organ(ran_zone(throwingdatum.target_zone))
+ if(affecting)
+ var/armor_block = C.run_armor_check(affecting, MELEE)
+ C.apply_damage(damage, BRUTE, affecting, armor_block)
+ else
+ C.take_organ_damage(damage)
+
C.KnockDown(3 SECONDS)
+
C.visible_message("[C] crashes into [src], knocking them both over!", "You violently crash into [src]!")
/**