diff --git a/game/engines/default/engine/interface/ActorTemporaryEffects.lua b/game/engines/default/engine/interface/ActorTemporaryEffects.lua
index 08da07ba604d5b8c5cc97932942243cbdeb2f168..be6d0936277b27eeb0bae9cc568a496534dc6470 100644
--- a/game/engines/default/engine/interface/ActorTemporaryEffects.lua
+++ b/game/engines/default/engine/interface/ActorTemporaryEffects.lua
@@ -106,7 +106,7 @@ function _M:setEffect(eff_id, dur, p, silent)
 	end
 	p.dur = dur
 	p.effect_id = eff_id
-	self:check("on_set_temporary_effect", eff_id, _M.tempeffect_def[eff_id], p)
+	if self:check("on_set_temporary_effect", eff_id, _M.tempeffect_def[eff_id], p) then return end
 	if p.dur <= 0 then return self:removeEffect(eff_id) end
 
 	-- If we already have it, we check if it knows how to "merge", or else we remove it and re-add it
@@ -182,7 +182,7 @@ function _M:copyEffect(eff_id)
 	param.__tmpvals = nil
 
 	return param
-end 
+end
 
 --- Removes the effect
 function _M:removeAllEffects()
diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index 4b9fd321d45c9b08d1f5f8d8bf3484cb6b2320da..c53f7925bfa2de1c4ad699192a54df5850eba7ea 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -3158,11 +3158,11 @@ function _M:die(src, death_note)
 			end
 		end)
 	end
-	
+
 	if self:hasEffect(self.EFF_TRIM_THREADS) then
 		local p = self:hasEffect(self.EFF_TRIM_THREADS)
 		p.src:incParadox(-p.reduction)
-	end	
+	end
 
 	if self:hasEffect(self.EFF_GHOUL_ROT) then
 		local p = self:hasEffect(self.EFF_GHOUL_ROT)
@@ -5850,12 +5850,17 @@ function _M:on_set_temporary_effect(eff_id, e, p)
 		if not p.no_ct_effect and not e.no_ct_effect and e.status == "detrimental" then self:crossTierEffect(eff_id, p.apply_power, p.apply_save or save_for_effects[e.type]) end
 		p.total_dur = p.dur
 
-		if e.status == "detrimental" and self:checkHit(save, p.apply_power, 0, 95) and p.dur > 0 then
-			game.logSeen(self, "#ORANGE#%s shrugs off the effect '%s'!", self.name:capitalize(), e.desc)
-			p.dur = 0
+		if p.dur > 0 and e.status == "detrimental" then
+			local saved = self:checkHit(save, p.apply_power, 0, 95)
+			local hd = {"Actor:effectSave", saved = saved, save_type = save_type, eff_id = eff_id, e = e, p = p,}
+			self:triggerHook(hd)
+			self:fireTalentCheck("callbackOnEffectSave", hd)
+			saved, eff_id, e, p = hd.saved, hd.eff_id, hd.e, hd.p
+			if saved then
+				game.logSeen(self, "#ORANGE#%s shrugs off the effect '%s'!", self.name:capitalize(), e.desc)
+				return true
+			end
 		end
-
-		p.apply_power = nil
 	end
 
 	if e.status == "detrimental" and self:knowTalent(self.T_RESILIENT_BONES) then