diff --git a/game/modules/tome/class/interface/Archery.lua b/game/modules/tome/class/interface/Archery.lua
index 9d42bb1211ac2f0353f952eec4344fea20ea6f13..a4b4db788c0fff2f727b6cdfc0154632775992f0 100644
--- a/game/modules/tome/class/interface/Archery.lua
+++ b/game/modules/tome/class/interface/Archery.lua
@@ -176,6 +176,7 @@ local function archery_projectile(tx, ty, tg, self)
 		local t = self:getTalentFromId(self.T_WEAPON_FOLDING)
 		local dam = t.getDamage(self, t)
 		DamageType:get(DamageType.TEMPORAL).projector(self, target.x, target.y, DamageType.TEMPORAL, dam)
+		self:incParadox(- t.getParadoxReduction(self, t))
 	end
 
 	-- Conduit (Psi)
diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua
index 8601142593cf5bcc01c5d5d08725b0941fbc41f1..6613d4f3594d470959dab2bb64fbdfb71487be3f 100644
--- a/game/modules/tome/class/interface/Combat.lua
+++ b/game/modules/tome/class/interface/Combat.lua
@@ -411,6 +411,7 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 		local t = self:getTalentFromId(self.T_WEAPON_FOLDING)
 		local dam = t.getDamage(self, t)
 		DamageType:get(DamageType.TEMPORAL).projector(self, target.x, target.y, DamageType.TEMPORAL, dam)
+		self:incParadox(- t.getParadoxReduction(self, t))
 	end
 
 	-- Ruin
@@ -741,10 +742,6 @@ end
 function _M:combatAPR(weapon)
 	weapon = weapon or self.combat or {}
 	local addapr = 0
-	if self:knowTalent(Talents.T_WEAPON_FOLDING) and self:isTalentActive(self.T_WEAPON_FOLDING) then
-		local t = self:getTalentFromId(self.T_WEAPON_FOLDING)
-		addapr = t.getArmorPen(self, t)
-	end
 	return self.combat_apr + (weapon.apr or 0) + addapr
 end
 
diff --git a/game/modules/tome/data/birth/classes/chronomancer.lua b/game/modules/tome/data/birth/classes/chronomancer.lua
index 4d0940b5e512fabd5aed65ff40dc18dff19387ab..3f16b03c1911f45126439f8042cde187d1fdef22 100644
--- a/game/modules/tome/data/birth/classes/chronomancer.lua
+++ b/game/modules/tome/data/birth/classes/chronomancer.lua
@@ -102,11 +102,11 @@ newBirthDescriptor{
 	},
 	stats = { str=2, wil=2, dex=3, mag=2},
 	talents_types = {
-		["technique/archery-bow"]={true, 0.1},
-		["technique/archery-utility"]={false, 0.1},
-		["technique/dualweapon-attack"]={true, 0.1},
-		["technique/dualweapon-training"]={false, 0.1},
-		["technique/combat-training"]={true, 0.2},
+		["technique/archery-bow"]={true, 0},
+		["technique/archery-utility"]={false, 0},
+		["technique/dualweapon-attack"]={true, 0},
+		["technique/dualweapon-training"]={false, 0},
+		["technique/combat-training"]={true, 0.1},
 		["cunning/survival"]={false, 0},
 		["chronomancy/chronomancy"]={true, 0.1},
 		["chronomancy/speed-control"]={true, 0.1},
diff --git a/game/modules/tome/data/talents/chronomancy/age-manipulation.lua b/game/modules/tome/data/talents/chronomancy/age-manipulation.lua
index 0c830b262eba26878042849f61ff7607bdca8623..00c66ca5bf01e5380e0bcd93d132a74734a3cbe1 100644
--- a/game/modules/tome/data/talents/chronomancy/age-manipulation.lua
+++ b/game/modules/tome/data/talents/chronomancy/age-manipulation.lua
@@ -29,7 +29,7 @@ newTalent{
 	reflectable = true,
 	requires_target = true,
 	proj_speed = 5,
-	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 20, 200)*getParadoxModifier(self, pm) end,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 15, 150)*getParadoxModifier(self, pm) end,
 	getDamageStat = function(self, t) return 2 + math.ceil(t.getDamage(self, t) / 15) end,
 	action = function(self, t)
 		local tg = {type="bolt", range=self:getTalentRange(t), talent=t, display={particle="temporal_bolt"}}
@@ -69,7 +69,7 @@ newTalent{
 	require = chrono_req2,
 	points = 5,
 	paradox = 15,
-	cooldown = 12,
+	cooldown = 14,
 	tactical = { ATTACKAREA = 2, DISABLE= 2 },
 	range = 0,
 	radius = function(self, t)
@@ -81,7 +81,7 @@ newTalent{
 		return {type="cone", range=self:getTalentRange(t), radius=self:getTalentRadius(t), selffire=false, talent=t}
 	end,
 	getConfuseDuration = function(self, t) return math.floor((self:getTalentLevel(t) + 2) * getParadoxModifier(self, pm)) end,
-	getConfuseEfficency = function(self, t) return (50 + self:getTalentLevelRaw(t) * 10) * getParadoxModifier(self, pm) end,
+	getConfuseEfficency = function(self, t) return 30 + (self:getTalentLevelRaw(t) * 10) end,
 	action = function(self, t)
 		local tg = self:getTalentTarget(t)
 		local x, y = self:getTarget(tg)
@@ -99,7 +99,7 @@ newTalent{
 		local duration = t.getConfuseDuration(self, t)
 		local radius = self:getTalentRadius(t)
 		return ([[Reverts the minds of all creatures in a %d radius cone to an infantile state, in effect confusing them for %d turns.
-		The duration and power of the confusion effect will scale with your Paradox.]]):
+		The duration will scale with your Paradox.]]):
 		format(radius, duration)
 	end,
 }
diff --git a/game/modules/tome/data/talents/chronomancy/chronomancy.lua b/game/modules/tome/data/talents/chronomancy/chronomancy.lua
index 39303bc25ff2f626836c8b10ed43f63f1cea1f33..a86f76c2774cb2cfcca2b52bb4cce9a07f6da802 100644
--- a/game/modules/tome/data/talents/chronomancy/chronomancy.lua
+++ b/game/modules/tome/data/talents/chronomancy/chronomancy.lua
@@ -65,7 +65,7 @@ newTalent{
 	require = temporal_req1,
 	points = 5,
 	paradox = 5,
-	cooldown = 10,
+	cooldown = 1,
 	no_npc_use = true,
 	getDuration = function(self, t) return 4 + math.ceil((self:getTalentLevel(t) * 2)) end,
 	action = function(self, t)
@@ -78,53 +78,16 @@ newTalent{
 	end,
 	info = function(self, t)
 		local duration = t.getDuration(self, t)
-		return ([[You peer into the future, allowing you to explore your surroundings for %d turns.  When precognition expires you'll return to the point in time you first cast the spell.  Note that visions of your own death will still be fatal.
+		return ([[You peer into the future, allowing you to explore your surroundings for %d turns.  When precognition expires you'll return to the point in time you first cast the spell.  Dying with precognition active will end the spell prematurely.
 		This spell splits the timeline.  Attempting to use another spell that also splits the timeline while this effect is active will be unsuccessful.]]):format(duration)
 	end,
 }
 
-newTalent{
-	name = "Spin Fate",
-	type = {"chronomancy/chronomancy", 2},
-	require = temporal_req2,
-	mode = "passive",
-	points = 5,
-	getDuration = function(self, t) return 1 + math.ceil(self:getTalentLevel(t)) end,
-	getSaveBonus = function(self, t) return self:getTalentLevel(t) end,
-	do_spin_fate = function(self, t, type)
-		local save_bonus = t.getSaveBonus(self, t)
-		if self:hasEffect(self.EFF_PRECOGNITION) then
-			save_bonus = save_bonus * 2
-		end
-		if not self:hasEffect(self.EFF_SPIN_FATE) then
-			game:playSoundNear(self, "talents/spell_generic")
-		end
-
-		local mental_save, physical_save, spell_save, defense_bonus = 0
-		if type == "mental" then mental_save = save_bonus end
-		if type == "physical" then physical_save = save_bonus end
-		if type == "spell" then spell_save = save_bonus end
-		if type == "defense" then defense_bonus = save_bonus end
-		print("Spin Fate", type, mental_save, physical_save, spell_save, defense_bonus)
-
-		self:setEffect(self.EFF_SPIN_FATE, t.getDuration(self, t), {max_bonus = t.getSaveBonus(self, t) * 10, defense = defense_bonus, mental = mental_save, physical = physical_save, spell = spell_save})
-		return true
-	end,
-	info = function(self, t)
-		local save = t.getSaveBonus(self, t)
-		local duration = t.getDuration(self, t)
-		return ([[You've learned to make minor corrections in how future events unfold.  Each time an attacker makes a check against your defense or saves the respective value is increased by %d (stacking up to a maximum increase of %d for each value).
-		The effect will last %d turns but the duration will refresh everytime it's reapplied.
-		The defense or saving throw increase is doubled while Precognition is active (but the cap remains the same).]]):
-		format(save, save * 10, duration)
-	end,
-}
-
 newTalent{
 	name = "Foresight",
-	type = {"chronomancy/chronomancy",3},
+	type = {"chronomancy/chronomancy",2},
 	mode = "passive",
-	require = temporal_req3,
+	require = temporal_req2,
 	points = 5,
 	getRadius = function(self, t) return 3 + math.floor(self:getTalentLevel(t) * 2) end,
 	do_precog_foresight = function(self, t)
@@ -138,57 +101,80 @@ newTalent{
 	end,
 	info = function(self, t)
 		local radius = t.getRadius(self, t)
-		return ([[When the duration of your Precognition expires (or is cancelled with Moment of Prescience) you'll be given a vision of your surroundings, sensing terrain, enemies, objects, and traps in a %d radius.]]):
+		return ([[When the duration of your Precognition expires you'll be given a vision of your surroundings, sensing terrain, enemies, objects, and traps in a %d radius.]]):
 		format(radius)
 	end,
 }
 
 newTalent{
 	name = "Moment of Prescience",
-	type = {"chronomancy/chronomancy", 4},
-	require = temporal_req4,
+	type = {"chronomancy/chronomancy", 3},
+	require = temporal_req3,
 	points = 5,
 	paradox = 10,
-	cooldown = 24,
-	getDuration = function(self, t) return 2 + math.floor(self:getTalentLevel(t)) end,
-	getPercentage = function(self, t) return self:getTalentLevel(t) * 10 end,
+	cooldown = 18,
+	getDuration = function(self, t) return math.ceil(self:getTalentLevel(t) * 2) end,
 	getDetection = function(self, t) return self:getTalentLevel(t) * 5 end,
-	on_pre_use = function(self, t, silent) if not self:hasEffect(self.EFF_PRECOGNITION) then if not silent then game.logPlayer(self, "Precognition must be active to use this talent.") end return false end return true end,
+	getDefense = function(self, t) return self:getTalentLevel(t) * 4 end,
 	tactical = { BUFF = 4 },
 	no_energy = true,
 	no_npc_use = true,
 	action = function(self, t)
-		game:playSoundNear(self, "talents/spell_generic")
-		-- clear the chronoworlds and the timed effect
-		if game._chronoworlds then game._chronoworlds = nil end
-		game.player.tmp[self.EFF_PRECOGNITION] = nil
-
+		local defense_power = t.getDefense(self, t)
+		local detect_power = t.getDetection(self, t)
 		-- check for Spin Fate
 		local eff = self:hasEffect(self.EFF_SPIN_FATE)
-		local mental_power, physical_power, spell_power, accuracy = 0
-		local percentage = t.getPercentage(self, t)/100
 		if eff then
-			mental_power = (eff.cur_mental or eff.mental) * percentage
-			physical_power = (eff.cur_physical or eff.physical) * percentage
-			spell_power = (eff.cur_spell or eff.spell) * percentage
-			accuracy_power = (eff.cur_defense or eff.defense) * percentage
+			local bonus = math.max(0, (eff.cur_mental or eff.mental), (eff.cur_physical or eff.physical), (eff.cur_spell or eff.spell))/2
+			defense_power = defense_power + bonus
+			detect_power = detect_power + bonus
 		end
 
-		self:setEffect(self.EFF_PRESCIENCE, t.getDuration(self, t), {detect=t.getDetection(self, t), mental=mental_power, physical=physical_power, spell=spell_power, accuracy=accuracy_power})
-		if self:knowTalent(self.T_FORESIGHT) then
-			local t = self:getTalentFromId(self.T_FORESIGHT)
-			t.do_precog_foresight(self, t)
-		end
+		self:setEffect(self.EFF_PRESCIENCE, t.getDuration(self, t), {detect=detect_power, defense=defense_power})
 		return true
 	end,
 	info = function(self, t)
 		local detect = t.getDetection(self, t)
+		local defense = t.getDefense(self, t)
 		local duration = t.getDuration(self, t)
-		local percent = t.getPercentage(self, t)
-		return ([[While under the affects of Precognition you may use Moment of Prescience to cancel it, walking the timeline exactly as you did before to reach the present.
-		Doing so will pull your awareness fully into the moment, increasing your stealth detection and see invisibility by %d for %d turns.
-		If you have Spin Fate going when you cast this spell you'll gain %d%% of your spin as accuracy, attack power, spell power, or mind power as appropriate.
+		return ([[You pull your awareness fully into the moment, increasing your stealth detection and see invisibility by %d and your defense by %d for %d turns.
+		If you have Spin Fate going when you cast this spell you'll gain a bonus to these values equal to 50%% of your highest active spin.
 		This spell takes no time to cast.]]):
-		format(detect, duration, percent)
+		format(detect, defense, duration)
+	end,
+}
+
+newTalent{
+	name = "Spin Fate",
+	type = {"chronomancy/chronomancy", 4},
+	require = temporal_req4,
+	mode = "passive",
+	points = 5,
+	getDuration = function(self, t) return 1 + math.ceil(self:getTalentLevel(t)) end,
+	getSaveBonus = function(self, t) return self:getTalentLevel(t) end,
+	do_spin_fate = function(self, t, type)
+		local save_bonus = t.getSaveBonus(self, t)
+
+		local mental_save, physical_save, spell_save = 0
+		if type == "mental" then mental_save = save_bonus end
+		if type == "physical" then physical_save = save_bonus end
+		if type == "spell" then spell_save = save_bonus end
+		print("Spin Fate", type, mental_save, physical_save, spell_save)
+		
+		if type ~= "defense" then
+			if not self:hasEffect(self.EFF_SPIN_FATE) then
+				game:playSoundNear(self, "talents/spell_generic")
+			end
+			self:setEffect(self.EFF_SPIN_FATE, t.getDuration(self, t), {max_bonus = t.getSaveBonus(self, t) * 5, mental = mental_save, physical = physical_save, spell = spell_save})
+		end
+		
+		return true
+	end,
+	info = function(self, t)
+		local save = t.getSaveBonus(self, t)
+		local duration = t.getDuration(self, t)
+		return ([[You've learned to make minor corrections in how future events unfold.  Each time an attacker makes a check against one of your saving throws the respective value is increased by %d (stacking up to a maximum increase of %d for each value).
+		The effect will last %d turns but the duration will refresh everytime it's reapplied.]]):
+		format(save, save * 5, duration)
 	end,
 }
\ No newline at end of file
diff --git a/game/modules/tome/data/talents/chronomancy/energy.lua b/game/modules/tome/data/talents/chronomancy/energy.lua
index 42920c25a523a48e5e8ebf6d3e46582777f0bc15..ecacff1552b251d20a64e2379b881bc8a0f08835 100644
--- a/game/modules/tome/data/talents/chronomancy/energy.lua
+++ b/game/modules/tome/data/talents/chronomancy/energy.lua
@@ -94,8 +94,8 @@ newTalent{
 	direct_hit = true,
 	requires_target = true,
 	range = 6,
-	getTalentCount = function(self, t) return 2 + math.floor(self:getTalentLevel(t) * getParadoxModifier(self, pm)/2) end,
-	getCooldown = function(self, t) return math.ceil(self:getTalentLevel(t)) end,
+	getTalentCount = function(self, t) return 1 + math.floor(self:getTalentLevel(t) * getParadoxModifier(self, pm)/2) end,
+	getCooldown = function(self, t) return 1 + math.ceil(self:getTalentLevel(t)/3) end,
 	action = function(self, t)
 		local tg = {type="hit", range=self:getTalentRange(t)}
 		local tx, ty = self:getTarget(tg)
diff --git a/game/modules/tome/data/talents/chronomancy/spacetime-folding.lua b/game/modules/tome/data/talents/chronomancy/spacetime-folding.lua
index 8dfba9e4d4da81905dbcde3ee4b8c239b0bf6647..7a9adb750af5161518e75387226af144461dbef8 100644
--- a/game/modules/tome/data/talents/chronomancy/spacetime-folding.lua
+++ b/game/modules/tome/data/talents/chronomancy/spacetime-folding.lua
@@ -26,8 +26,8 @@ newTalent{
 	cooldown = 10,
 	tactical = { BUFF = 2 },
 	points = 5,
-	getDamage = function(self, t) return (2 * self:getTalentLevel(t)) + self:combatTalentSpellDamage(t, 10, 70) end,
-	getArmorPen = function(self, t) return (1 * self:getTalentLevel(t)) + self:combatTalentSpellDamage(t, 5, 15) end,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 15, 40) end,
+	getParadoxReduction = function(self, t) return self:getTalentLevel(t) end,
 	activate = function(self, t)
 		return {}
 	end,
@@ -36,9 +36,9 @@ newTalent{
 	end,
 	info = function(self, t)
 		local damage = t.getDamage(self, t)
-		local ap = t.getArmorPen(self, t)
-		return ([[Folds a single dimension of your weapons (or ammo), allowing them to penetrate %d armor and adding %0.2f temporal damage to your strikes.
-		The armor penetration and damage will increase with your Spellpower.]]):format(ap, damDesc(self, DamageType.TEMPORAL, damage))
+		local paradox_reduction = t.getParadoxReduction(self, t)
+		return ([[Folds a single dimension of your weapons (or ammo), adding %0.2f temporal damage to your strikes and reducing your Paradox by %0.1f every time you land an attack.
+		The damage will increase with your Spellpower.]]):format(damDesc(self, DamageType.TEMPORAL, damage), paradox_reduction)
 	end,
 }
 
@@ -56,7 +56,7 @@ newTalent{
 		return 4 + math.floor(self:getTalentLevel(t))
 	end,
 	getConfuseDuration = function(self, t) return math.floor((self:getTalentLevel(t) + 2) * getParadoxModifier(self, pm)) end,
-	getConfuseEfficency = function(self, t) return (50 + self:getTalentLevelRaw(t) * 10) end,
+	getConfuseEfficency = function(self, t) return (30 + self:getTalentLevelRaw(t) * 10) end,
 	action = function(self, t)
 		local tg = {type="hit", range=self:getTalentRange(t)}
 		local tx, ty, target = self:getTarget(tg)
diff --git a/game/modules/tome/data/talents/chronomancy/spacetime-weaving.lua b/game/modules/tome/data/talents/chronomancy/spacetime-weaving.lua
index 0f3665c70d50e5bc5fcb4055ea63fc1f6038bce7..c82a74d56b2441da016b244e02148a22734d7430 100644
--- a/game/modules/tome/data/talents/chronomancy/spacetime-weaving.lua
+++ b/game/modules/tome/data/talents/chronomancy/spacetime-weaving.lua
@@ -26,7 +26,7 @@ newTalent{
 	cooldown = 10,
 	tactical = { CLOSEIN = 2, ESCAPE = 2 },
 	range = function(self, t)
-		return 4 + math.floor(self:getTalentLevel(t))
+		return 2 + math.floor(self:getTalentLevel(t))
 	end,
 	requires_target = true,
 	target = function(self, t)
@@ -148,7 +148,7 @@ newTalent{
 		return 10 + math.floor(self:getTalentLevel(t)/2)
 	end,
 	radius = function(self, t)
-		return math.floor(7 - self:getTalentLevel(t))
+		return 7 - math.floor(self:getTalentLevel(t))
 	end,
 	requires_target = true,
 	getDuration = function (self, t) return 5 + math.floor(self:getTalentLevel(t)*getParadoxModifier(self, pm)) end,
diff --git a/game/modules/tome/data/talents/chronomancy/temporal-combat.lua b/game/modules/tome/data/talents/chronomancy/temporal-combat.lua
index 457a71f5e045bbdf488b7b8fecfa034835e8abaa..709c3e11c4f55d8d43bd5a03cd70620acfb90de2 100644
--- a/game/modules/tome/data/talents/chronomancy/temporal-combat.lua
+++ b/game/modules/tome/data/talents/chronomancy/temporal-combat.lua
@@ -23,6 +23,7 @@ newTalent{
 	require = temporal_req1,
 	mode = "sustained",
 	points = 5,
+	sustain_stamina = 50,
 	sustain_paradox = 100,
 	cooldown = 18,
 	tactical = { BUFF = 2 },
@@ -31,19 +32,17 @@ newTalent{
 		game:playSoundNear(self, "talents/arcane")
 		return {
 			stats = self:addTemporaryValue("inc_stats", {[self.STAT_STR] = t.getPower(self, t)}),
-			phys = self:addTemporaryValue("combat_physresist", t.getPower(self, t)),
 			particle = self:addParticles(Particles.new("temporal_focus", 1)),
 		}
 	end,
 	deactivate = function(self, t, p)
 		self:removeParticles(p.particle)
 		self:removeTemporaryValue("inc_stats", p.stats)
-		self:removeTemporaryValue("combat_physresist", p.phys)
 		return true
 	end,
 	info = function(self, t)
 		local power = t.getPower(self, t)
-		return ([[You've learned to boost your strength through your control of the spacetime continuum.  Increases your strength and your physical saves by %d.
+		return ([[You've learned to boost your strength through your control of the spacetime continuum.  Increases your strength by %d.
 		The effect will scale with your Willpower stat.]]):format(power)
 	end
 }
@@ -74,6 +73,7 @@ newTalent{
 	require = temporal_req3,
 	mode = "sustained",
 	points = 5,
+	sustain_stamina = 50,
 	sustain_paradox = 100,
 	cooldown = 18,
 	tactical = { BUFF = 2 },
@@ -82,19 +82,17 @@ newTalent{
 		game:playSoundNear(self, "talents/arcane")
 		return {
 			stats = self:addTemporaryValue("inc_stats", {[self.STAT_MAG] = t.getPower(self, t)}),
-			spell = self:addTemporaryValue("combat_spellresist", t.getPower(self, t)),
 			particle = self:addParticles(Particles.new("arcane_power", 1)),
 		}
 	end,
 	deactivate = function(self, t, p)
 		self:removeTemporaryValue("inc_stats", p.stats)
-		self:removeTemporaryValue("combat_spellresist", p.spell)
 		self:removeParticles(p.particle)
 		return true
 	end,
 	info = function(self, t)
 		local power = t.getPower(self, t)
-		return ([[You've learned to boost your magic through your control over the spacetime continuum.  Increases your magic and your spell saves by %d.
+		return ([[You've learned to boost your magic through your control over the spacetime continuum.  Increases your magic by %d.
 		The effect will scale with your Willpower stat.]]):format(power)
 	end
 }
diff --git a/game/modules/tome/data/talents/chronomancy/timeline-threading.lua b/game/modules/tome/data/talents/chronomancy/timeline-threading.lua
index 8443021f6f6a6614726a0c66f5de54385b0aad30..364da50c5e91a9ecca3e3580d994e25bf65727f5 100644
--- a/game/modules/tome/data/talents/chronomancy/timeline-threading.lua
+++ b/game/modules/tome/data/talents/chronomancy/timeline-threading.lua
@@ -47,7 +47,7 @@ newTalent{
 	require = chrono_req_high2,
 	points = 5,
 	paradox = 5,
-	cooldown = 6,
+	cooldown = 4,
 	tactical = { ATTACK = {TEMPORAL = 2} },
 	range = 10,
 	direct_hit = true,
diff --git a/game/modules/tome/data/talents/gifts/antimagic.lua b/game/modules/tome/data/talents/gifts/antimagic.lua
index cdf3c200ed1f988d482cf1d21263b110f513f3dc..958805d4bac87dd77ffa80d80846514000cf1eaa 100644
--- a/game/modules/tome/data/talents/gifts/antimagic.lua
+++ b/game/modules/tome/data/talents/gifts/antimagic.lua
@@ -39,7 +39,7 @@ newTalent{
 		return ([[You stand in the way of magical damage. That which does not kill you makes you stronger.
 		Each time you are hit by a magical damage you get a %d%% resistance to this elemental for 7 turns.
 		If antimagic shield is not active you also absorb part of the impact and use it to fuel your own powers, decreasing your equilibrium by %d and increasing your stamina by %d.
-		The effects will increase with your Willpower stat.]]):
+		The effects will increase with your Mindpower.]]):
 		format(
 			self:combatTalentMindDamage(t, 10, 40),
 			1 + self:combatTalentMindDamage(t, 10, 5),
@@ -113,7 +113,7 @@ newTalent{
 	info = function(self, t)
 		return ([[Surround yourself with a shield that will absorb at most %d magical or elemental damage per attack.
 		Each time damage is absorbed your equilibrium increases by 1 for every 30 points of damage and a check is made, if it fails the shield will crumble.
-		Damage shield can absorb will increase with your Willpower stat.]]):
+		Damage shield can absorb will increase with your Mindpower.]]):
 		format(self:combatTalentMindDamage(t, 20, 80))
 	end,
 }
@@ -166,7 +166,7 @@ newTalent{
 
 		return ([[Drain %d mana, %d vim, %d positive and negative energies from your target, triggering a chain reaction that explodes in a burst of arcane damage.
 		The damage done is 130%% of the mana drained, 260%% of the vim drained, 520%% of the positive or negative energy drained, whichever is higher.
-		The effect will increase with your Willpower stat.]]):
+		The effect will increase with your Mindpower.]]):
 		format(mana, vim, positive, negative)
 	end,
 }
diff --git a/game/modules/tome/data/talents/gifts/cold-drake.lua b/game/modules/tome/data/talents/gifts/cold-drake.lua
index 2aba8fe1a67d53301461607ea9b293d937f491a0..68a2637df7c9080c1c3417a1c8c507be658da713 100644
--- a/game/modules/tome/data/talents/gifts/cold-drake.lua
+++ b/game/modules/tome/data/talents/gifts/cold-drake.lua
@@ -74,7 +74,8 @@ newTalent{
 	end,
 	info = function(self, t)
 		return ([[Your skin forms icy scales, damaging all that hit you for %0.2f cold damage and increasing your armor by %d.
-		Each point in cold drake talents also increases your cold resistance by 1%%.]]):format(damDesc(self, DamageType.COLD, t.getDamage(self, t)), t.getArmor(self, t))
+		Each point in cold drake talents also increases your cold resistance by 1%%.
+		The damage and defense will scale with your Willpower stat.]]):format(damDesc(self, DamageType.COLD, t.getDamage(self, t)), t.getArmor(self, t))
 	end,
 }
 
diff --git a/game/modules/tome/data/talents/gifts/storm-drake.lua b/game/modules/tome/data/talents/gifts/storm-drake.lua
index 458eb464281ed75e88db25d2c4cacf399615cd08..c735c49ed0420dcf011d6b1a0895b444b6398cb7 100644
--- a/game/modules/tome/data/talents/gifts/storm-drake.lua
+++ b/game/modules/tome/data/talents/gifts/storm-drake.lua
@@ -92,7 +92,7 @@ newTalent{
 		local percent = t.getPercent(self, t)
 		return ([[Generate an electrical field around you in a radius of 1. Any creature caught inside will lose %d%% of its current life (effect decreased for higher creature ranks).
 		This effect can not kill creatures.
-		Life loss will increase with the Willpower stat.
+		Life loss will increase with your Mindpower.
 		Each point in storm drake talents also increases your lightning resistance by 1%%.]]):format(percent)
 	end,
 }
@@ -163,7 +163,7 @@ newTalent{
 		Any foe caught in its path take %0.2f lightning damage.
 		When it reaches its target it explodes in a radius of 1 for %0.2f lightning damage, %0.2f physical damage. All affected creatures will be knocked back and the targeted creature will be stunned for 4 turns.
 		The tornado will last for %d turns or until it reaches its target.
-		Damage will increase with your Willpower.
+		Damage will increase with your Mindpower.
 		Each point in storm drake talents also increases your lightning resistance by 1%%.]]):format(
 			damDesc(self, DamageType.LIGHTNING, self:combatTalentMindDamage(t, 10, 110)),
 			damDesc(self, DamageType.LIGHTNING, self:combatTalentMindDamage(t, 15, 190)),
diff --git a/game/modules/tome/data/timed_effects/magical.lua b/game/modules/tome/data/timed_effects/magical.lua
index 78b37874a2a83b557d17a33490cd69b4d135cf74..3d3b7d427073521ce2e1518d78a6cd4c67cf947b 100644
--- a/game/modules/tome/data/timed_effects/magical.lua
+++ b/game/modules/tome/data/timed_effects/magical.lua
@@ -1017,29 +1017,22 @@ newEffect{
 newEffect{
 	name = "PRESCIENCE", image = "talents/premonition.png",
 	desc = "Prescience",
-	long_desc = function(self, eff) return ("The target's awareness is fully in the present, increasing stealth detection and see invisibility by %d, accuracy by %d, attack power by %d, spell power by %d, and mindpower by %d.")
-	:format(eff.detect, eff.accuracy, eff.physical, eff.spell, eff.mental) end,
+	long_desc = function(self, eff) return ("The target's awareness is fully in the present, increasing stealth detection and see invisibility by %d and defense by %d."):format(eff.detect, eff.defense) end,
 	type = "magical",
 	subtype = { sense=true, temporal=true },
 	status = "beneficial",
-	parameters = { detect = 10, mental=1, physical=1, spell=1, accuracy=1 },
+	parameters = { detect = 10, defense=1},
 	on_gain = function(self, err) return "#Target# has found the present moment!", "+Prescience" end,
 	on_lose = function(self, err) return "#Target#'s awareness returns to normal.", "-Prescience" end,
 	activate = function(self, eff)
-		eff.atkid = self:addTemporaryValue("combat_atk", eff.accuracy)
-		eff.physid = self:addTemporaryValue("combat_dam", eff.physical)
-		eff.spellid = self:addTemporaryValue("combat_spellpower", eff.spell)
-		eff.mentid = self:addTemporaryValue("combat_mindpower", eff.mental)
+		eff.defid = self:addTemporaryValue("combat_def", eff.defense)
 		eff.invis = self:addTemporaryValue("see_invisible", eff.detect)
 		eff.stealth = self:addTemporaryValue("see_stealth", eff.detect)
 	end,
 	deactivate = function(self, eff)
 		self:removeTemporaryValue("see_invisible", eff.invis)
 		self:removeTemporaryValue("see_stealth", eff.stealth)
-		self:removeTemporaryValue("combat_atk", eff.atkid)
-		self:removeTemporaryValue("combat_dam", eff.physid)
-		self:removeTemporaryValue("combat_spellpower", eff.spellid)
-		self:removeTemporaryValue("combat_mindpower", eff.mentid)
+		self:removeTemporaryValue("combat_def", eff.defid)
 	end,
 }
 
@@ -1375,12 +1368,12 @@ newEffect{
 newEffect{
 	name = "SPIN_FATE", image = "talents/spin_fate.png",
 	desc = "Spin Fate",
-	long_desc = function(self, eff) return ("The target's defense has been increased by %d, physical save by %d, spell saves by %d, and mental saves by %d."):
-	format(eff.cur_defense or eff.defense, eff.cur_physical or eff.physical, eff.cur_spell or eff.spell, eff.cur_mental or eff.mental) end,
+	long_desc = function(self, eff) return ("The target's physical save has been increased by %d, spell saves by %d, and mental saves by %d."):
+	format(eff.cur_physical or eff.physical, eff.cur_spell or eff.spell, eff.cur_mental or eff.mental) end,
 	type = "magical",
 	subtype = { temporal=true },
 	status = "beneficial",
-	parameters = { physical=0, mental=0, spell=0, defense=0, max = 10},
+	parameters = { physical=0, mental=0, spell=0, max = 10},
 	on_gain = function(self, err) return "#Target# takes fate by the hand.", "+Spin Fate" end,
 	on_lose = function(self, err) return "#Target#'s fate is no longer being spun.", "-Spin Fate" end,
 	on_merge = function(self, old_eff, new_eff)
@@ -1388,18 +1381,15 @@ newEffect{
 		self:removeTemporaryValue("combat_physresist", old_eff.physid)
 		self:removeTemporaryValue("combat_spellresist", old_eff.spellid)
 		self:removeTemporaryValue("combat_mentalresist", old_eff.mentalid)
-		self:removeTemporaryValue("combat_def", old_eff.defenseid)
 		-- combine the old and new values
 		old_eff.cur_physical = math.min(new_eff.max_bonus, old_eff.cur_physical + new_eff.physical)
 		old_eff.cur_spell = math.min(new_eff.max_bonus, old_eff.cur_spell + new_eff.spell)
 		old_eff.cur_mental = math.min(new_eff.max_bonus, old_eff.cur_mental + new_eff.mental)
-		old_eff.cur_defense = math.min(new_eff.max_bonus, old_eff.cur_defense + new_eff.defense)
 		-- and apply the current values
 		old_eff.physid = self:addTemporaryValue("combat_physresist", old_eff.cur_physical)
 		old_eff.spellid = self:addTemporaryValue("combat_spellresist", old_eff.cur_spell)
 		old_eff.mentalid = self:addTemporaryValue("combat_mentalresist", old_eff.cur_mental)
-		old_eff.defenseid = self:addTemporaryValue("combat_def", old_eff.cur_defense)
-
+		
 		old_eff.dur = new_eff.dur
 		return old_eff
 	end,
@@ -1408,19 +1398,16 @@ newEffect{
 		eff.cur_physical = eff.physical
 		eff.cur_spell = eff.spell
 		eff.cur_mental = eff.mental
-		eff.cur_defense = eff.defense
 		-- apply current values
 		eff.physid = self:addTemporaryValue("combat_physresist", eff.physical)
 		eff.spellid = self:addTemporaryValue("combat_spellresist", eff.spell)
 		eff.mentalid = self:addTemporaryValue("combat_mentalresist", eff.mental)
-		eff.defenseid = self:addTemporaryValue("combat_def", eff.defense)
 		eff.particle = self:addParticles(Particles.new("arcane_power", 1))
 	end,
 	deactivate = function(self, eff)
 		self:removeTemporaryValue("combat_physresist", eff.physid)
 		self:removeTemporaryValue("combat_spellresist", eff.spellid)
 		self:removeTemporaryValue("combat_mentalresist", eff.mentalid)
-		self:removeTemporaryValue("combat_def", eff.defenseid)
 		self:removeParticles(eff.particle)
 	end,
 }
diff --git a/game/modules/tome/data/timed_effects/other.lua b/game/modules/tome/data/timed_effects/other.lua
index 414244f1a2a20295cd71c3a42f0d79d250896b64..f5a293a33d84a1aadf453cec6ec884c093be4332 100644
--- a/game/modules/tome/data/timed_effects/other.lua
+++ b/game/modules/tome/data/timed_effects/other.lua
@@ -338,6 +338,8 @@ newEffect{
 				local t = game.player:getTalentFromId(game.player.T_FORESIGHT)
 				t.do_precog_foresight(self, t)
 			end
+			game.player.energy.value = game.energy_to_act
+			game.paused = true
 		end)
 	end,
 }
diff --git a/game/modules/tome/dialogs/DeathDialog.lua b/game/modules/tome/dialogs/DeathDialog.lua
index c6570ba0e61f885238417a5b0ca0edc06ec4d308..a5b40917134c0afc5ce33f1f53590466727c25a1 100644
--- a/game/modules/tome/dialogs/DeathDialog.lua
+++ b/game/modules/tome/dialogs/DeathDialog.lua
@@ -202,6 +202,9 @@ function _M:use(item)
 		self:cleanActor(self.actor)
 		self:resurrectBasic(self.actor)
 		self:restoreResources(self.actor)
+	elseif act == "precognition" then
+		self:resurrectBasic(self.actor)
+		self.actor:removeEffect(self.actor.EFF_PRECOGNITION)
 	elseif act == "blood_life" then
 		self.actor.blood_life = false
 		game.logPlayer(self.actor, "#LIGHT_RED#The Blood of Life rushes through your dead body. You come back to life!")
@@ -244,7 +247,7 @@ end
 function _M:generateList()
 	local list = {}
 	local allow_res = true
-
+	
 	-- Pause the game
 	game:onTickEnd(function()
 		game.paused = true
@@ -259,6 +262,11 @@ function _M:generateList()
 
 	if config.settings.cheat then list[#list+1] = {name="Resurrect by cheating", action="cheat"} end
 	if not self.actor.no_resurrect and allow_res then
+		if self.actor:hasEffect(self.actor.EFF_PRECOGNITION) then
+			self:use{action="precognition"}
+			self.dont_show = true
+			return
+		end
 		if self.actor:isTalentActive(self.actor.T_LICHFORM) then
 			self:use{action="lichform"}
 			self.dont_show = true