diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index c38715116f844357f115ce24d770576413d87a62..a6d153c1f17843b588bafdbf03412e8448b99178 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -8002,6 +8002,12 @@ function _M:checkStillInCombat()
 
 	-- Ok no more in combat!
 	self.in_combat = nil
+	for tid, _ in pairs(self.sustain_talents) do
+		local t = self:getTalentFromId(tid)
+		if t.deactivate_on and t.deactivate_on.no_combat then
+			self:forceUseTalent(tid, {ignore_energy=true})
+		end
+	end
 	self:updateInCombatStatus()
 end
 
diff --git a/game/modules/tome/class/Player.lua b/game/modules/tome/class/Player.lua
index d0d94e9741aa50ada2eb680dfc7797dba1051679..9a070bbc53a38c164f68a81cb0f12b4578e1f9a3 100644
--- a/game/modules/tome/class/Player.lua
+++ b/game/modules/tome/class/Player.lua
@@ -1151,6 +1151,14 @@ function _M:restStep()
 		self:useEnergy()
 		self.resting.cnt = self.resting.cnt + 1
 		self:fireTalentCheck("callbackOnWait")
+
+		-- Disable sustains that deactivate on rest
+		for tid, _ in pairs(self.sustain_talents) do
+			local t = self:getTalentFromId(tid)
+			if t.deactivate_on and t.deactivate_on.rest then
+				self:forceUseTalent(tid, {ignore_energy=true, ignore_cd=true})
+			end
+		end
 		return true
 	end
 end
@@ -1227,8 +1235,16 @@ function _M:runCheck(ignore_memory)
 		if game.level.map:checkAllEntities(x, y, "store") then noticed = "store entrance spotted" ; return false, noticed end
 	end)
 	if noticed then return false, noticed end
-
-	return engine.interface.PlayerRun.runCheck(self)
+	local can, noticed = engine.interface.PlayerRun.runCheck(self)
+	if can then
+		for tid, _ in pairs(self.sustain_talents) do
+			local t = self:getTalentFromId(tid)
+			if t.deactivate_on and t.deactivate_on.run then
+				self:forceUseTalent(tid, {ignore_energy=true, ignore_cd=true})
+			end
+		end
+	end
+	return can, noticed
 end
 
 --- Move with the mouse