diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index ea4fd8907385a13cf10014e42364b71912fecab1..37f130fceba6289862f68db56a89463bb3c05403 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -3147,7 +3147,9 @@ function _M:on_set_temporary_effect(eff_id, e, p)
 		p.minimum = p.min_dur or 0 --Default minimum duration is 0. Can specify something else by putting min_dur=foo in p when calling setEffect()
 		save = self[p.apply_save or save_for_effects[e.type]](self)
 		--local duration = p.maximum - math.max(0, math.floor((save - p.apply_power) / 5))
-		local duration = p.maximum - math.max(0, (math.floor(save/5) - math.floor(p.apply_power/5)))
+		--local duration = p.maximum - math.max(0, (math.floor(save/5) - math.floor(p.apply_power/5)))
+		local percentage = 1 - ((save - p.apply_power)/20)
+		local duration = math.min(p.maximum, math.ceil(p.maximum * percentage))
 		p.dur = util.bound(duration, p.minimum or 0, p.maximum)
 		p.amount_decreased = p.maximum - p.dur
 		local save_type = nil
@@ -3163,7 +3165,7 @@ function _M:on_set_temporary_effect(eff_id, e, p)
 
 		if e.status == "detrimental" and self:checkHit(save, p.apply_power, 0, 95) then
 			game.logSeen(self, "#ORANGE#%s shrugs off the effect '%s'!", self.name:capitalize(), e.desc)
-			p.dur = p.minimum
+			p.dur = 0
 		end
 
 		p.apply_power = nil
diff --git a/game/modules/tome/class/interface/Archery.lua b/game/modules/tome/class/interface/Archery.lua
index a4b4db788c0fff2f727b6cdfc0154632775992f0..b987ec925a9d24af5595e58b0afd1f1107fef6d1 100644
--- a/game/modules/tome/class/interface/Archery.lua
+++ b/game/modules/tome/class/interface/Archery.lua
@@ -164,6 +164,12 @@ local function archery_projectile(tx, ty, tg, self)
 		game.logSeen(target, "%s misses %s.", srcname, target.name)
 	end
 
+	-- cross-tier effect for accuracy vs. defense
+	local tier_diff = self:getTierDiff(atk, def)
+	if hitted and not target.dead and tier_diff > 0 then
+		target:setEffect(target.EFF_OFFGUARD, tier_diff, {})
+	end
+	
 	-- Ranged project
 	if hitted and not target.dead then for typ, dam in pairs(self.ranged_project) do
 		if dam > 0 then
diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua
index 6613d4f3594d470959dab2bb64fbdfb71487be3f..ca415912375f01ec3ecf2b480a1035a36b1eba93 100644
--- a/game/modules/tome/class/interface/Combat.lua
+++ b/game/modules/tome/class/interface/Combat.lua
@@ -262,7 +262,7 @@ function _M:checkHit(atk, def, min, max, factor, p)
 		max = 100
 	end --ensures predictable combat for the tutorial
 	print("checkHit", atk, def)
-	local hit = 50 + 5 * (atk - def)
+	local hit = math.ceil(50 + 2.5 * (atk - def))
 	hit = util.bound(hit, min, max)
 	print("=> chance to hit", hit)
 	return rng.percent(hit), hit
@@ -348,6 +348,12 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 		game.logSeen(target, "%s misses %s.", srcname, target.name)
 	end
 
+	-- cross-tier effect for accuracy vs. defense
+	local tier_diff = self:getTierDiff(atk, def)
+	if hitted and not target.dead and tier_diff > 0 then
+		target:setEffect(target.EFF_OFFGUARD, tier_diff, {})
+	end
+	
 	-- handle stalk targeting for hits (also handled in Actor for turn end effects)
 	if hitted and target ~= self then
 		if effStalker then
@@ -972,7 +978,9 @@ function _M:physicalCrit(dam, weapon, target, atk, def)
 			chance = chance + p.power
 		end
 	end
-
+	if target:hasEffect(target.EFF_OFFGUARD) then
+		chance = chance + 10
+	end
 
 	if target:hasHeavyArmor() and target:knowTalent(target.T_ARMOUR_TRAINING) then
 		chance = chance - target:getTalentLevel(target.T_ARMOUR_TRAINING) * 1.9
@@ -982,11 +990,8 @@ function _M:physicalCrit(dam, weapon, target, atk, def)
 
 	print("[PHYS CRIT %]", chance)
 	if rng.percent(chance) then
-		if tier_diff > 0 then
-			target:crossTierEffect(target.EFF_OFFBALANCE, atk, "combatDefense")
-		end
-		if target:hasEffect(target.EFF_OFFBALANCE) then
-			crit_power_add = 0.25
+		if target:hasEffect(target.EFF_OFFGUARD) then
+			crit_power_add = crit_power_add + 0.1
 		end
 		dam = dam * (1.5 + crit_power_add + (self.combat_critical_power or 0) / 100)
 		crit = true
diff --git a/game/modules/tome/data/damage_types.lua b/game/modules/tome/data/damage_types.lua
index 1970dda2935109d4a7d36e560bb0f907f98d1938..0c37d4a4704f96e9cf2dab036374cd1be1e9e77e 100644
--- a/game/modules/tome/data/damage_types.lua
+++ b/game/modules/tome/data/damage_types.lua
@@ -1058,7 +1058,7 @@ newDamageType{
 		DamageType:get(DamageType.NATURE).projector(src, x, y, DamageType.NATURE, dam)
 		local target = game.level.map(x, y, Map.ACTOR)
 		if target then
-			target:setEffect(target.EFF_SLOW, 3, {power=0.3, no_ct_effect=true})
+			target:setEffect(target.EFF_SLOW, 3, {power=0.15, no_ct_effect=true})
 		end
 	end,
 }
diff --git a/game/modules/tome/data/general/objects/egos/staves.lua b/game/modules/tome/data/general/objects/egos/staves.lua
index 64f889ff1d4587fc23adc7ab1a07c6d403ffcea7..a0afc02c13b3f1e859f00655a02f020cf77485cb 100644
--- a/game/modules/tome/data/general/objects/egos/staves.lua
+++ b/game/modules/tome/data/general/objects/egos/staves.lua
@@ -354,15 +354,13 @@ newEntity{
 	rarity = 40,
 	cost = 80,
 	wielder = {
-		resource_leech_chance = resolvers.mbonus_material(4, 1, function(e, v) v=v*10 return 0, v end),
-		resource_leech_value = resolvers.mbonus_material(15, 5),
 		inc_damage = {
-			[DamageType.COLD] = resolvers.mbonus_material(10, 5),
-			[DamageType.DARKNESS] = resolvers.mbonus_material(10, 5),
+			[DamageType.COLD] = resolvers.mbonus_material(25, 5),
+			[DamageType.DARKNESS] = resolvers.mbonus_material(25, 5),
 		},
 		resists_pen = {
-			[DamageType.COLD] = resolvers.mbonus_material(10, 5),
-			[DamageType.DARKNESS] = resolvers.mbonus_material(10, 5),
+			[DamageType.COLD] = resolvers.mbonus_material(15, 5),
+			[DamageType.DARKNESS] = resolvers.mbonus_material(15, 5),
 		},
 	},
 }
diff --git a/game/modules/tome/data/timed_effects/physical.lua b/game/modules/tome/data/timed_effects/physical.lua
index 395d79e6be5c3fec12989d1ae8ae4a782a1e8e2c..8568b379954619459f084bf79fd9ab60bac6921b 100644
--- a/game/modules/tome/data/timed_effects/physical.lua
+++ b/game/modules/tome/data/timed_effects/physical.lua
@@ -1430,7 +1430,7 @@ newEffect{
 newEffect{
 	name = "OFFBALANCE",
 	desc = "Off-balance",
-	long_desc = function(self, eff) return ("Badly off balance. Attackers gain a 25% bonus to physical critical strike power and movement speed is reduced by 20%%.") end,
+	long_desc = function(self, eff) return ("Badly off balance. Global speed is reduced by 15%%.") end,
 	type = "physical",
 	subtype = { ["cross tier"]=true },
 	status = "detrimental",
@@ -1438,10 +1438,26 @@ newEffect{
 	on_gain = function(self, err) return nil, "+Off-balance" end,
 	on_lose = function(self, err) return nil, "-Off-balance" end,
 	activate = function(self, eff)
-		eff.speedid = self:addTemporaryValue("movement_speed", -0.2)
+		eff.speedid = self:addTemporaryValue("global_speed_add", -0.15)
+	end,
+	deactivate = function(self, eff)
+		self:removeTemporaryValue("global_speed_add", eff.speedid)
+	end,
+}
+
+newEffect{
+	name = "OFFGUARD",
+	desc = "Off-guard", image = "talents/precise_strikes.png",
+	long_desc = function(self, eff) return ("Badly off guard. Attackers gain a 10% bonus to physical critcal strike chance and physical critcal strike power.") end,
+	type = "physical",
+	subtype = { ["cross tier"]=true },
+	status = "detrimental",
+	parameters = {power = 1},
+	on_gain = function(self, err) return nil, "+Off-guard" end,
+	on_lose = function(self, err) return nil, "-Off-guard" end,
+	activate = function(self, eff)
 	end,
 	deactivate = function(self, eff)
-		self:removeTemporaryValue("movement_speed", eff.speedid)
 	end,
 }