diff --git a/game/engines/default/engine/Module.lua b/game/engines/default/engine/Module.lua
index c3e116b94c6512ab165973628ffe9d8a2bb8877c..d7f25006460e7af1bc5546deeea95b3b1e976eb7 100644
--- a/game/engines/default/engine/Module.lua
+++ b/game/engines/default/engine/Module.lua
@@ -406,7 +406,7 @@ function _M:selectFunFact(ffdata)
 		if ffdata.nb_players then l[#l+1] = ("There is currently %d people playing online"):format(ffdata.nb_players) end
 		if ffdata.total_deaths then l[#l+1] = ("The character's vault has registered a total of #RED#%d#WHITE# character's deaths"):format(ffdata.total_deaths) end
 		if ffdata.wins_this_version then l[#l+1] = ("The character's vault has registered a total of #LIGHT_BLUE#%d#WHITE# winners for the current version"):format(ffdata.wins_this_version) end
-		if ffdata.latest_donator then l[#l+1] = ("The latest donator is #LIGHT_GREEN#%s#WHITE#. Many thanks to all donators, you are keepign this game alive!"):format(ffdata.latest_donator) end
+		if ffdata.latest_donator then l[#l+1] = ("The latest donator is #LIGHT_GREEN#%s#WHITE#. Many thanks to all donators, you are keeping this game alive!"):format(ffdata.latest_donator) end
 
 	end))
 	table.print(l)
diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index 291c1238102be0f44bf231b7153e232ffc078ee3..077418dbfdd09d1ccd1a45f50eba90338a4b5775 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -610,7 +610,7 @@ function _M:act()
 		end
 	end
 	if self:attr("stoned") then self.energy.value = 0 end
-	if self:attr("dazed") then self.energy.value = 0 end
+--	if self:attr("dazed") then self.energy.value = 0 end
 	if self:attr("sleep") and not self:attr("lucid_dreamer") then self.energy.value = 0 end
 	if self:attr("time_stun") then self.energy.value = 0 end
 	if self:attr("time_prison") then self.energy.value = 0 end
@@ -1550,10 +1550,6 @@ function _M:onTakeHit(value, src)
 	if self:hasEffect(self.EFF_DAZED) then
 		self:removeEffect(self.EFF_DAZED)
 	end
-	-- Un-meditate
-	if self:hasEffect(self.EFF_MEDITATION) then
-		self:removeEffect(self.EFF_MEDITATION)
-	end
 	if self:hasEffect(self.EFF_SPACETIME_TUNING) then
 		self:removeEffect(self.EFF_SPACETIME_TUNING)
 	end
diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua
index 3e8208cba46ef06ed155786203aba61fa8f9f357..e20f11a772eaeb77666c8ddf00cf1d7c7e677ccb 100644
--- a/game/modules/tome/class/interface/Combat.lua
+++ b/game/modules/tome/class/interface/Combat.lua
@@ -933,6 +933,7 @@ function _M:combatDefense(fake, add)
 	local base_defense = self:combatDefenseBase(true)
 	if not fake then base_defense = self:combatDefenseBase() end
 	local d = math.max(0, base_defense + (add or 0))
+	if self:attr("dazed") then d = d / 2 end
 	return self:rescaleCombatStats(d)
 end
 
@@ -941,6 +942,7 @@ function _M:combatDefenseRanged(fake, add)
 	local base_defense = self:combatDefenseBase(true)
 	if not fake then base_defense = self:combatDefenseBase() end
 	local d = math.max(0, base_defense + (self.combat_def_ranged or 0) + (add or 0))
+	if self:attr("dazed") then d = d / 2 end
 	return self:rescaleCombatStats(d)
 end
 
@@ -1135,7 +1137,8 @@ function _M:combatPhysicalpower(mod, weapon, add)
 
 	add = add + 10 * self:combatCheckTraining(weapon)
 
-	return self:rescaleCombatStats((self.combat_dam > 0 and self.combat_dam or 0) + add + self:getStr()) * mod
+	local d = (self.combat_dam > 0 and self.combat_dam or 0) + add + self:getStr()
+	return self:rescaleCombatStats(d) * mod
 end
 
 --- Gets damage based on talent
@@ -1163,7 +1166,8 @@ function _M:combatSpellpower(mod, add)
 	local am = 1
 	if self:attr("spellpower_reduction") then am = 1 / (1 + self:attr("spellpower_reduction")) end
 
-	return self:rescaleCombatStats((self.combat_spellpower > 0 and self.combat_spellpower or 0) + add + self:getMag()) * mod * am
+	local d = (self.combat_spellpower > 0 and self.combat_spellpower or 0) + add + self:getMag()
+	return self:rescaleCombatStats(d) * mod * am
 end
 
 --- Gets damage based on talent
@@ -1423,7 +1427,8 @@ function _M:combatMindpower(mod, add)
 		add = add + self:attr("psychometry_power")
 	end
 
-	return self:rescaleCombatStats((self.combat_mindpower > 0 and self.combat_mindpower or 0) + add + self:getWil() * 0.7 + self:getCun() * 0.4) * mod
+	local d = (self.combat_mindpower > 0 and self.combat_mindpower or 0) + add + self:getWil() * 0.7 + self:getCun() * 0.4
+	return self:rescaleCombatStats(d) * mod
 end
 
 --- Gets damage based on talent
@@ -1473,7 +1478,9 @@ function _M:combatPhysicalResist(fake)
 	end
 
 	-- To return later
-	local total = self:rescaleCombatStats(self.combat_physresist + (self:getCon() + self:getStr() + (self:getLck() - 50) * 0.5) * 0.35 + add)
+	local d = self.combat_physresist + (self:getCon() + self:getStr() + (self:getLck() - 50) * 0.5) * 0.35 + add
+	if self:attr("dazed") then d = d / 2 end
+	local total = self:rescaleCombatStats(d)
 
 	-- Psionic Balance
 	if self:knowTalent(self.T_BALANCE) then
@@ -1496,7 +1503,9 @@ function _M:combatSpellResist(fake)
 	end
 
 	-- To return later
-	local total = self:rescaleCombatStats(self.combat_spellresist + (self:getMag() + self:getWil() + (self:getLck() - 50) * 0.5) * 0.35 + add)
+	local d = self.combat_spellresist + (self:getMag() + self:getWil() + (self:getLck() - 50) * 0.5) * 0.35 + add
+	if self:attr("dazed") then d = d / 2 end
+	local total = self:rescaleCombatStats(d)
 
 	-- Psionic Balance
 	if self:knowTalent(self.T_BALANCE) then
@@ -1521,7 +1530,10 @@ function _M:combatMentalResist(fake)
 	if self:knowTalent(self.T_POWER_IS_MONEY) then
 		add = add + util.bound(self.money / (90 - self:getTalentLevelRaw(self.T_POWER_IS_MONEY) * 5), 0, self:getTalentLevelRaw(self.T_POWER_IS_MONEY) * 7)
 	end
-	return self:rescaleCombatStats(self.combat_mentalresist + (self:getCun() + self:getWil() + (self:getLck() - 50) * 0.5) * 0.35 + add)
+
+	local d = self.combat_mentalresist + (self:getCun() + self:getWil() + (self:getLck() - 50) * 0.5) * 0.35 + add
+	if self:attr("dazed") then d = d / 2 end
+	return self:rescaleCombatStats(d)
 end
 
 -- Called when a Save or Defense is checked
diff --git a/game/modules/tome/data/damage_types.lua b/game/modules/tome/data/damage_types.lua
index c74b43b6a0608c47ff0230d855fcc767fe74e094..9e592c1ed38f7776a755b5c7d54ca1ae03633124 100644
--- a/game/modules/tome/data/damage_types.lua
+++ b/game/modules/tome/data/damage_types.lua
@@ -57,6 +57,11 @@ setDefaultProjector(function(src, x, y, type, dam, tmp, no_martyr)
 		end
 		print("[PROJECTOR] after difficulty dam", dam)
 
+		-- Daze
+		if target:attr("dazed") then
+			dam = dam * 0.5
+		end
+
 		-- Preemptive shielding
 		if target.isTalentActive and target:isTalentActive(target.T_PREMONITION) then
 			local t = target:getTalentFromId(target.T_PREMONITION)
diff --git a/game/modules/tome/data/timed_effects/mental.lua b/game/modules/tome/data/timed_effects/mental.lua
index 98ace90874ed1bb0daf37596fb68a36f41667302..af5b60487391ffd99608e3159095042a3c8bc570 100644
--- a/game/modules/tome/data/timed_effects/mental.lua
+++ b/game/modules/tome/data/timed_effects/mental.lua
@@ -43,28 +43,6 @@ newEffect{
 	end,
 }
 
-newEffect{
-	name = "MEDITATION", image = "talents/meditation.png",
-	desc = "Meditation",
-	long_desc = function(self, eff) return "The target is meditating. Any damage will stop it." end,
-	type = "mental",
-	subtype = { focus=true },
-	status = "detrimental",
-	parameters = {},
-	on_timeout = function(self, eff)
-		self:incEquilibrium(-eff.per_turn)
-	end,
-	activate = function(self, eff)
-		eff.tmpid = self:addTemporaryValue("dazed", 1)
-	end,
-	deactivate = function(self, eff)
-		self:removeTemporaryValue("dazed", eff.tmpid)
-		if eff.dur <= 0 then
-			self:incEquilibrium(-eff.final)
-		end
-	end,
-}
-
 newEffect{
 	name = "SUMMON_CONTROL", image = "talents/summon_control.png",
 	desc = "Summon Control",
diff --git a/game/modules/tome/data/timed_effects/physical.lua b/game/modules/tome/data/timed_effects/physical.lua
index e6009f8db2f4f3437b644d4c5a3a1a6e3b0f273b..4321566de92814dc7d3dbc3bd18653ef356b31b6 100644
--- a/game/modules/tome/data/timed_effects/physical.lua
+++ b/game/modules/tome/data/timed_effects/physical.lua
@@ -386,7 +386,7 @@ newEffect{
 newEffect{
 	name = "DAZED", image = "effects/dazed.png",
 	desc = "Dazed",
-	long_desc = function(self, eff) return "The target is dazed, rendering it unable to act. Any damage will remove the daze." end,
+	long_desc = function(self, eff) return "The target is dazed, rendering it unable to move, halving all damage done, defense and saves. Any damage will remove the daze." end,
 	type = "physical",
 	subtype = { stun=true },
 	status = "detrimental",
@@ -394,10 +394,10 @@ newEffect{
 	on_gain = function(self, err) return "#Target# is dazed!", "+Dazed" end,
 	on_lose = function(self, err) return "#Target# is not dazed anymore.", "-Dazed" end,
 	activate = function(self, eff)
-		eff.tmpid = self:addTemporaryValue("dazed", 1)
+		self:effectTemporaryValue(eff, "dazed", 1)
+		self:effectTemporaryValue(eff, "never_move", 1)
 	end,
 	deactivate = function(self, eff)
-		self:removeTemporaryValue("dazed", eff.tmpid)
 	end,
 }
 
diff --git a/game/modules/tome/data/zones/high-peak/grids.lua b/game/modules/tome/data/zones/high-peak/grids.lua
index 6015b64e6bfb6acec47e90e8cd1a65aa6117fc09..0693d04a049729c00c3302524b47d2e81f6a7808 100644
--- a/game/modules/tome/data/zones/high-peak/grids.lua
+++ b/game/modules/tome/data/zones/high-peak/grids.lua
@@ -21,6 +21,7 @@ load("/data/general/grids/basic.lua")
 load("/data/general/grids/water.lua")
 load("/data/general/grids/forest.lua")
 load("/data/general/grids/lava.lua")
+load("/data/general/grids/cave.lua")
 
 newEntity{
 	define_as = "FAR_EAST_PORTAL",
@@ -211,3 +212,12 @@ newEntity{
 	always_remember = true,
 	change_level = 1,
 }
+
+newEntity{
+	define_as = "CAVE_HIGH_PEAK_UP", image = "terrain/cave/cave_floor_1_01.png", add_displays = {class.new{image="terrain/cave/cave_stairs_up_2_01.png"}},
+	name = "next level",
+	display = '>', color_r=255, color_g=255, color_b=0,
+	notice = true,
+	always_remember = true,
+	change_level = 1,
+}
diff --git a/game/modules/tome/data/zones/high-peak/zone.lua b/game/modules/tome/data/zones/high-peak/zone.lua
index 853431289176d9c623b154018fc6df13eaf96acf..062147f7fee2232521b9f7b1588b4e36d3732fdf 100644
--- a/game/modules/tome/data/zones/high-peak/zone.lua
+++ b/game/modules/tome/data/zones/high-peak/zone.lua
@@ -90,6 +90,56 @@ return {
 	end,
 	levels =
 	{
+		[1] = {
+			generator = {
+				map = {
+					class = "engine.generator.map.Cavern",
+					zoom = 16,
+					min_floor = 1200,
+					floor = "CAVEFLOOR",
+					wall = "CAVEWALL",
+					up = "CAVEFLOOR",
+					down = "CAVE_HIGH_PEAK_UP",
+					door = "CAVEFLOOR",
+				},
+			},
+		},
+		[2] = {
+			generator = {
+				map = {
+					['+'] = "CAVEFLOOR",
+					['.'] = "CAVEFLOOR",
+					['#'] = "CAVEWALL",
+					up = "CAVEFLOOR",
+					down = "CAVE_HIGH_PEAK_UP",
+					door = "CAVEFLOOR",
+				},
+			},
+		},
+		[3] = {
+			generator = {
+				map = {
+					['+'] = "CAVEFLOOR",
+					['.'] = "CAVEFLOOR",
+					['#'] = "CAVEWALL",
+					up = "CAVEFLOOR",
+					down = "CAVE_HIGH_PEAK_UP",
+					door = "CAVEFLOOR",
+				},
+			},
+		},
+		[4] = {
+			generator = {
+				map = {
+					['+'] = "CAVEFLOOR",
+					['.'] = "CAVEFLOOR",
+					['#'] = "CAVEWALL",
+					up = "CAVEFLOOR",
+					down = "CAVE_HIGH_PEAK_UP",
+					door = "CAVEFLOOR",
+				},
+			},
+		},
 		[10] = {
 			generator = {
 				map = {