diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index eccc30fd3888cb17d85d74acbfebbfdbadb61756..44eaf8756106af66787c5e6f204e7aed917039de 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -1582,7 +1582,7 @@ function _M:onHeal(value, src)
 	end
 
 --	print("[HEALING]", self.uid, self.name, "for", value)
-	if (not self.resting and (not game.party:hasMember(self) or not game:getPlayer(true).resting)) and value + psi_heal >= 1 then
+	if (not self.resting and (not game.party:hasMember(self) or not game:getPlayer(true).resting)) and value + psi_heal >= 1 and not self:attr("silent_heal") then
 		if game.level.map.seens(self.x, self.y) then
 			local sx, sy = game.level.map:getTileToScreen(self.x, self.y)
 			game.flyers:add(sx, sy, 30, rng.float(-3, -2), (rng.range(0,2)-1) * 0.5, tostring(math.ceil(value)), {255,255,0})
diff --git a/game/modules/tome/data/damage_types.lua b/game/modules/tome/data/damage_types.lua
index efd2c5d824f13e16e7441fdad2d8e4925b643ce5..12c19416b9411e9fc2b02757621e48f580fa49ab 100644
--- a/game/modules/tome/data/damage_types.lua
+++ b/game/modules/tome/data/damage_types.lua
@@ -1752,9 +1752,9 @@ newDamageType{
 	projector = function(src, x, y, type, dam)
 		local target = game.level.map(x, y, Map.ACTOR)
 		if target and not target:attr("undead") then
-			if dam >= 100 then target:attr("allow_on_heal", 1) end
+			if dam >= 100 then target:attr("allow_on_heal", 1) else target:attr("silent_heal", 1) end
 			target:heal(dam, src)
-			if dam >= 100 then target:attr("allow_on_heal", -1) end
+			if dam >= 100 then target:attr("allow_on_heal", -1) else target:attr("silent_heal", -1) end
 		elseif target then
 			DamageType:get(DamageType.NATURE).projector(src, x, y, DamageType.NATURE, dam)
 		end