diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index afbc8a7dd3a5373befa1e86072c8c8b37316908e..ea60de902833c363c8b966a5445dd7e7c5cca0b1 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -7630,6 +7630,7 @@ function _M:on_set_temporary_effect(eff_id, e, p)
 	p.getName = e.getName
 	p.resolveSource = e.resolveSource
 
+	local old = self.tmp[eff_id]
 	local olddur = old and not e.on_merge and old.dur or 0 -- let mergable effects handle their own duration
 	-- Adjust duration based on saves
 	if p.apply_power and (save_for_effects[e.type] or p.apply_save) then
diff --git a/game/modules/tome/data/general/objects/random-artifacts/ranged.lua b/game/modules/tome/data/general/objects/random-artifacts/ranged.lua
index fdc4ddf9e3058bf48b4ebd18fb29031748c30140..bff73ab0948116ec61d810da985656cf650daa72 100644
--- a/game/modules/tome/data/general/objects/random-artifacts/ranged.lua
+++ b/game/modules/tome/data/general/objects/random-artifacts/ranged.lua
@@ -30,6 +30,9 @@ load("/data/general/objects/random-artifacts/melee.lua", function(e)
 		e.wielder.ranged_project = table.clone(e.wielder.melee_project)
 		e.wielder.melee_project = nil
 	end
+	if e.combat and e.combat.dam then -- bows & slings should not have base damage
+		e.rarity = nil
+	end
 end)
 
 ----------------------------------------------------------------
diff --git a/game/modules/tome/data/talents/misc/inscriptions.lua b/game/modules/tome/data/talents/misc/inscriptions.lua
index 3aaa87c5f0942eea00925d9eb58aaed2ef98f6ac..ff7f4e6f62c9cfe1879535e750f1e177c6035451 100644
--- a/game/modules/tome/data/talents/misc/inscriptions.lua
+++ b/game/modules/tome/data/talents/misc/inscriptions.lua
@@ -751,11 +751,11 @@ newInscription{
 	end,
 	getThreshold = function(self, t) 
 		local data = self:getInscriptionData(t.short_name)
-		return data.threshold
+		return math.ceil(data.threshold)
 	end,
 	getBlocks = function(self, t) 
 		local data = self:getInscriptionData(t.short_name)
-		return data.blocks + data.inc_stat
+		return math.ceil(data.blocks + data.inc_stat)
 	end,
 	action = function(self, t)
 		local data = self:getInscriptionData(t.short_name)
diff --git a/game/modules/tome/data/talents/spells/energy-alchemy.lua b/game/modules/tome/data/talents/spells/energy-alchemy.lua
index 025deb5d4247c3e2ed924978faf8da5efbca38c1..e9fa2c03bbb9f7c4c9a61a1868177f97ae1a01c3 100644
--- a/game/modules/tome/data/talents/spells/energy-alchemy.lua
+++ b/game/modules/tome/data/talents/spells/energy-alchemy.lua
@@ -152,7 +152,7 @@ newTalent{
 	target = function(self, t) return{type="hit", range=self:getTalentRange(t), talent=t, friendlyblock=false, friendlyfire=false} end,
 	callbackOnActBase = function(self, t)
 		local tgts = {}
-		local grids = core.fov.circle_grids(self.x, self.y, 6, true)
+		local grids = core.fov.circle_grids(self.x, self.y, self:getTalentRange(t), true)
 		for x, yy in pairs(grids) do for y, _ in pairs(grids[x]) do
 			local a = game.level.map(x, y, Map.ACTOR)
 			if a and self:reactionToward(a) < 0 then