diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index b1cb49bb47abf1d4beb6e81e35d2ae788c5b0faf..094fa936137c98ff2c311529c1335426f25a475c 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -1025,6 +1025,8 @@ function _M:knockback(srcx, srcy, dist, recursive, on_terrain)
 		self:resetMoveAnim()
 		self:setMoveAnim(ox, oy, 9, 5)
 	end
+
+	self:attr("knockback_times", 1)
 end
 
 --- Pull in the actor
@@ -3462,6 +3464,7 @@ function _M:postUseTalent(ab, ret)
 	game:onTickEnd(function()
 		if ab.type[1] == "inscriptions/infusions" then
 			self:setEffect(self.EFF_INFUSION_COOLDOWN, 10, {power=1})
+			if self:knowTalent(self.T_FUNGAL_BLOOD) then self:triggerTalent(self.T_FUNGAL_BLOOD) end
 		elseif ab.type[1] == "inscriptions/runes" then
 			self:setEffect(self.EFF_RUNE_COOLDOWN, 10, {power=1})
 		elseif ab.type[1] == "inscriptions/taints" then
diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index 2e32f15e2508e639e34d7edd008717f6e78ddec5..009129c8080b33a539b2ce40c917c51800167312 100644
--- a/game/modules/tome/class/Game.lua
+++ b/game/modules/tome/class/Game.lua
@@ -928,6 +928,8 @@ end
 
 --- Clones the game world for chronomancy spells
 function _M:chronoClone(name)
+	self:getPlayer(true):attr("time_travel_times", 1)
+
 	local d = Dialog:simpleWaiter("Chronomancy", "Folding the space time structure...")
 
 	local to_reload = {}
diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua
index 192bd80b86568cd255d6a8007a58dc0d3579a1e3..c2f80174421b0c42b61c844a9fd02c7ea82f7bf3 100644
--- a/game/modules/tome/class/interface/Combat.lua
+++ b/game/modules/tome/class/interface/Combat.lua
@@ -749,6 +749,13 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 		target:knockback(self.x, self.y, math.ceil(math.log(dam)))
 	end
 
+	-- Roll with it
+	if hitted and target:attr("knockback_on_hit") and not target.turn_procs.roll_with_it and rng.percent(util.bound(dam, 0, 100)) then
+		local ox, oy = self.x, self.y
+		game:onTickEnd(function() target:knockback(ox, oy, 1) end)
+		target.turn_procs.roll_with_it = true
+	end
+
 	-- Weakness hate bonus
 	if hitted and effGloomWeakness and effGloomWeakness.hateBonus or 0 > 0 then
 		self:incHate(effGloomWeakness.hateBonus)
diff --git a/game/modules/tome/data/talents/misc/npcs.lua b/game/modules/tome/data/talents/misc/npcs.lua
index 0f741be750b8a45a22c7c033b7be2d70b0fa4775..191aa2499fa7b24c8f1401a300b43c28af6b753c 100644
--- a/game/modules/tome/data/talents/misc/npcs.lua
+++ b/game/modules/tome/data/talents/misc/npcs.lua
@@ -731,13 +731,15 @@ newTalent{
 		local tg = {type="bolt", range=self:getTalentRange(t)}
 		local x, y = self:getTarget(tg)
 		if not x or not y then return nil end
-		self:project(tg, x, y, DamageType.POISON, 20 + (self:getDex() * self:getTalentLevel(t)) * 0.8, {type="slime"})
+		local s = math.max(self:getDex(), self:getStr())
+		self:project(tg, x, y, DamageType.POISON, 20 + (s * self:getTalentLevel(t)) * 0.8, {type="slime"})
 		game:playSoundNear(self, "talents/slime")
 		return true
 	end,
 	info = function(self, t)
+		local s = math.max(self:getDex(), self:getStr())
 		return ([[Spit poison at your target doing %0.2f poison damage.
-		The damage will increase with the Dexterity stat]]):format(20 + (self:getDex() * self:getTalentLevel(t)) * 0.8)
+		The damage will increase with the Strength or Dexterity stat (whichever is higher)]]):format(20 + (s * self:getTalentLevel(t)) * 0.8)
 	end,
 }
 
diff --git a/game/modules/tome/data/talents/uber/const.lua b/game/modules/tome/data/talents/uber/const.lua
index 734dbf4e093023c57aab38537b27acb8ba77397c..965263acc0bba233d9e5bd62f2e37673a54fcefb 100644
--- a/game/modules/tome/data/talents/uber/const.lua
+++ b/game/modules/tome/data/talents/uber/const.lua
@@ -96,7 +96,7 @@ uberTalent{
 uberTalent{
 	name = "Armour of Shadows",
 	mode = "passive",
-	require = { special={desc="Dealt over 50000 darkness damage", fct=function(self) return 
+	require = { special={desc="Dealt over 50000 darkness damage", fct=function(self) return
 		self.damage_log and (
 			(self.damage_log[DamageType.DARKNESS] and self.damage_log[DamageType.DARKNESS] >= 50000)
 		)
@@ -106,7 +106,7 @@ uberTalent{
 	end,
 	on_unlearn = function(self, t)
 		self:attr("darkness_darkens", -1)
-	end,	
+	end,
 	info = function(self, t)
 		return ([[You know how to meld in the shadows. As long as you stand on an unlit tile you gain 30 armour and 50%% armour hardiness.
 		Also all darkness damage you deal will unlight the target terrain.]])
@@ -125,4 +125,26 @@ uberTalent{
 		return ([[Your back is has hard as stone. Each time you are affected by a physical effect your body hardens, for 5 turns wil become immune to all physical effects.]])
 		:format()
 	end,
-}
\ No newline at end of file
+}
+
+uberTalent{
+	name = "Fungal Blood",
+	require = { special={desc="Do not be undead.", fct=function(self) return not self:attr("undead") end} },
+	on_pre_use = function(self, t) return self:hasEffect(self.EFF_FUNGAL_BLOOD) and self:hasEffect(self.EFF_FUNGAL_BLOOD).power > 0 and not self:attr("undead") end,
+	trigger = function(self, t)
+		if self:attr("undead") then return end
+		self:setEffect(self.EFF_FUNGAL_BLOOD, 10, {power=self:getCon() * 1.5})
+	end,
+	action = function(self, t)
+		local eff = self:hasEffect(self.EFF_FUNGAL_BLOOD)
+		self:heal(eff.power)
+		return true
+	end,
+	info = function(self, t)
+		return ([[Fungal spores colonize your blood, each time you use an infusion you store %d fungal power.
+		When you use this prodigy the power is released as a heal.
+		Fungal power is stored for 8 turns and loses 10 potency each turn.
+		Fungal power generated increases with Constituion]])
+		:format(self:getCon() * 1.5)
+	end,
+}
diff --git a/game/modules/tome/data/talents/uber/dex.lua b/game/modules/tome/data/talents/uber/dex.lua
index 6d8599914ff51272a3f4ddef3ea42f4059cbd19a..0e4c30b478a63579b619544123474f028807b7b4 100644
--- a/game/modules/tome/data/talents/uber/dex.lua
+++ b/game/modules/tome/data/talents/uber/dex.lua
@@ -159,3 +159,24 @@ uberTalent{
 		:format()
 	end,
 }
+
+uberTalent{
+	name = "Roll With It",
+	mode = "sustained",
+	cooldown = 10,
+	require = { special={desc="Having been knocked around at least 50 times.", fct=function(self) return self:attr("knockback_times") and self:attr("knockback_times") >= 50 end} },
+	activation = function(self, t)
+		local ret = {}
+		self:talentTemporaryValue(ret, "knockback_on_hit", 1)
+		self:talentTemporaryValue(ret, "resists", {[DamageType.PHYSICAL] = 10})
+		return ret
+	end,
+	deactivation = function(self, t, p)
+		return true
+	end,
+	info = function(self, t)
+		return ([[You have learnt to take a few hits when needed, you know how to flow with them, reducing all physical damage by 10%%.
+		When you get hit by melee or archery you go back one tile (this can only happen once per turn) for free.]])
+		:format()
+	end,
+}
diff --git a/game/modules/tome/data/talents/uber/mag.lua b/game/modules/tome/data/talents/uber/mag.lua
index f7a1d4192aabc9e4b66bdb9479dca58bc6368c5a..de046e8ccdfd616e05d7c22cf31b21a3ad89bba1 100644
--- a/game/modules/tome/data/talents/uber/mag.lua
+++ b/game/modules/tome/data/talents/uber/mag.lua
@@ -99,10 +99,11 @@ uberTalent{
 uberTalent{
 	name = "Temporal Form",
 	cooldown = 30,
-	require = { special={desc="Dealt over 50000 temporal damage and visited an out-of-time zone", fct=function(self) return 
-		self.damage_log and (self.damage_log[DamageType.TEMPORAL] and self.damage_log[DamageType.TEMPORAL] >= 50000) and self:attr("temporal_touched", 1)
+	require = { special={desc="Dealt over 50000 temporal damage and visited an out-of-time zone", fct=function(self) return
+		self.damage_log and (self.damage_log[DamageType.TEMPORAL] and self.damage_log[DamageType.TEMPORAL] >= 50000) and self:attr("temporal_touched")
 	end} },
 	no_energy = true,
+	is_spell = true,
 	action = function(self, t)
 		self:setEffect(self.EFF_TEMPORAL_FORM, 7, {})
 		return true
@@ -148,3 +149,32 @@ uberTalent{
 		]]):format()
 	end,
 }
+
+uberTalent{
+	name = "Revisionist History",
+	cooldown = 40,
+	no_energy = true,
+	is_spell = true,
+	require = { special={desc="Have time-travelled at least once", fct=function(self) return self:attr("time_travel_times") >= 1 end} },
+	action = function(self, t)
+		if game._chronoworlds and game._chronoworlds.revisionist_history then
+			self:hasEffect(self.EFF_REVISIONIST_HISTORY).back_in_time = true
+			self:removeEffect(self.EFF_REVISIONIST_HISTORY)
+			return nil -- the effect removal starts the cooldown
+		end
+
+		if checkTimeline(self) == true then return end
+
+		game:onTickEnd(function()
+			game:chronoClone("revisionist_history")
+			self:setEffect(self.EFF_REVISIONIST_HISTORY, 9, {})
+		end)
+		return nil -- We do not start the cooldown!
+	end,
+	info = function(self, t)
+		return ([[You can now control the near-past, upon using this prodigy you gain a temporal effect for 10 turns.
+		While his effect holds you can use the prodigy again to rewrite history.
+		This prodigy splits the timeline. Attempting to use another spell that also splits the timeline while this effect is active will be unsuccessful.]])
+		:format()
+	end,
+}
diff --git a/game/modules/tome/data/talents/uber/str.lua b/game/modules/tome/data/talents/uber/str.lua
index 67d1c534767a1438bedd56ca83516b1e11d25b4f..6184dc4e9e483d7a73825ec944fc331eb33118f5 100644
--- a/game/modules/tome/data/talents/uber/str.lua
+++ b/game/modules/tome/data/talents/uber/str.lua
@@ -70,7 +70,7 @@ uberTalent{
 }
 
 uberTalent{
-	name = "Massive Blow", 
+	name = "Massive Blow",
 	mode = "activated",
 	require = { special={desc="Dug at least 30 walls/trees/... and know at least 20 talent levels of stamina using talents.", fct=function(self) return self.dug_times and self.dug_times >= 30 and knowRessource(self, "stamina", 20) end} },
 	cooldown = 10,
@@ -100,7 +100,7 @@ uberTalent{
 }
 
 uberTalent{
-	name = "Steamroller", 
+	name = "Steamroller",
 	mode = "passive",
 	require = { special={desc="Know the Rush talent.", fct=function(self) return self:knowTalent(self.T_RUSH) end} },
 	info = function(self, t)
@@ -112,7 +112,7 @@ uberTalent{
 uberTalent{
 	name = "Irresistible Sun",
 	cooldown = 25,
-	require = { special={desc="Dealt over 50000 light or fire damage", fct=function(self) return 
+	require = { special={desc="Dealt over 50000 light or fire damage", fct=function(self) return
 		self.damage_log and (
 			(self.damage_log[DamageType.FIRE] and self.damage_log[DamageType.FIRE] >= 50000) or
 			(self.damage_log[DamageType.L] and self.damage_log[DamageType.LIGHT] >= 50000)
@@ -140,3 +140,19 @@ uberTalent{
 		:format()
 	end,
 }
+
+uberTalent{
+	name = "Legacy of the Naloren",
+	mode = "passive",
+	on_learn = function(self, t)
+		self:learnTalent(self.T_SPIT_POISON, true, 5)
+		self:learnTalent(self.T_EXOTIC_WEAPON_MASTERY, true, 5)
+		self.can_breath = self.can_breath or {}
+		self.can_breath.water = (self.can_breath.water or 0) + 1
+	end,
+	info = function(self, t)
+		return ([[You sided with Slasul ad helped him vanquish Ukllmswwik. You are now able to breathe underwater with ease.
+		You also learnt to use tridents and other exotic weapons easily (gains 5 levels of exotic weapon mastery) and Spit Poison as nagas do.]])
+		:format()
+	end,
+}
diff --git a/game/modules/tome/data/timed_effects/other.lua b/game/modules/tome/data/timed_effects/other.lua
index 5048bd7bf23ffe61cd378614e6ec0e242eb77cff..0c916d08309e1e05d1863b368371715564168507 100644
--- a/game/modules/tome/data/timed_effects/other.lua
+++ b/game/modules/tome/data/timed_effects/other.lua
@@ -1817,3 +1817,32 @@ newEffect{
 	parameters = { },
 	no_stop_enter_worlmap = true, no_stop_resting = true,
 }
+
+newEffect{
+	name = "REVISIONIST_HISTORY", image = "talents/revisionist_history.png",
+	desc = "Revisionist History",
+	long_desc = function(self, eff) return "While this effect holds you can decide recent history did not happen this way it did." end,
+	type = "other",
+	subtype = { time=true },
+	status = "beneficial",
+	parameters = { },
+	activate = function(self, eff)
+	end,
+	deactivate = function(self, eff)
+		if eff.back_in_time then game:onTickEnd(function()
+			-- Update the shader of the original player
+			self:updateMainShader()
+			if game._chronoworlds == nil then
+				game.logSeen(self, "#LIGHT_RED#The spell fizzles.")
+				self:startTalentCooldown(self.T_REVISIONIST_HISTORY)
+				return
+			end
+			game.logPlayer(game.player, "#LIGHT_BLUE#You go back in time to rewrite history!")
+			game:chronoRestore("revisionist_history", true)
+			game._chronoworlds = nil
+			game.player:startTalentCooldown(self.T_REVISIONIST_HISTORY)
+		end) else
+			self:startTalentCooldown(self.T_REVISIONIST_HISTORY)
+		end
+	end,
+}
diff --git a/game/modules/tome/data/timed_effects/physical.lua b/game/modules/tome/data/timed_effects/physical.lua
index 725a91da190f2ef54f8527f4ac0033b66c787c9e..be15fce19a9db9955a52bed018623cf94e7084e7 100644
--- a/game/modules/tome/data/timed_effects/physical.lua
+++ b/game/modules/tome/data/timed_effects/physical.lua
@@ -88,9 +88,7 @@ newEffect{
 
 		if self:knowTalent(self.T_ANCESTRAL_LIFE) then
 			local t = self:getTalentFromId(self.T_ANCESTRAL_LIFE)
-			print("=====<", self.energy.value)
 			self.energy.value = self.energy.value + (t.getTurn(self, t) * game.energy_to_act / 100)
-			print("=====>", self.energy.value)
 		end
 	end,
 	on_timeout = function(self, eff)
@@ -1943,10 +1941,30 @@ newEffect{
 	subtype = { status=true },
 	status = "beneficial",
 	parameters = { },
-	on_gain = function(self, err) return "#Target# become impreviosu to physical effects.", "+Spine of the World" end,
+	on_gain = function(self, err) return "#Target# become imprevious to physical effects.", "+Spine of the World" end,
 	on_lose = function(self, err) return "#Target# is less imprevious to physical effects.", "-Spine of the World" end,
 	activate = function(self, eff)
 		self:effectTemporaryValue(eff, "physical_negative_status_effect_immune", 1)
 	end,
 }
 
+
+newEffect{
+	name = "FUNGAL_BLOOD", image = "talents/fungal_blood.png",
+	desc = "Fungal Blood",
+	long_desc = function(self, eff) return ("You have %d fungal energies stored. Release them to heal by using the Fungal Blood prodigy.") end,
+	type = "physical",
+	subtype = { heal=true },
+	status = "beneficial",
+	parameters = { power = 10 },
+	on_gain = function(self, err) return nil, "+Fungal Blood" end,
+	on_lose = function(self, err) return nil, "-Fungal Blood" end,
+	on_merge = function(self, old_eff, new_eff)
+		new_eff.power = new_eff.power + old_eff.power
+		return new_eff
+	end,
+	on_timeout = function(self, eff)
+		eff.power = math.max(0, eff.power - 10)
+	end,
+}
+