diff --git a/game/modules/tome/data/general/events/damp-cave.lua b/game/modules/tome/data/general/events/damp-cave.lua
index 0d72d513aeeaa214c502ca40acd7319afb9d7545..fa4aff8e3aac40943f1d56229b5f59c69b0a6e42 100644
--- a/game/modules/tome/data/general/events/damp-cave.lua
+++ b/game/modules/tome/data/general/events/damp-cave.lua
@@ -44,6 +44,8 @@ local changer = function(id)
 		ambient_music = "Swashing the buck.ogg",
 		reload_lists = false,
 		persistent = "zone",
+		min_material_level = game.zone.min_material_level,
+		max_material_level = game.zone.max_material_level,
 		generator =  {
 			map = {
 				class = "engine.generator.map.Cavern",
diff --git a/game/modules/tome/data/general/events/drake-cave.lua b/game/modules/tome/data/general/events/drake-cave.lua
new file mode 100644
index 0000000000000000000000000000000000000000..49873fa8059f4b7fad710ca50015cf589fdfe452
--- /dev/null
+++ b/game/modules/tome/data/general/events/drake-cave.lua
@@ -0,0 +1,113 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-- Nicolas Casalini "DarkGod"
+-- darkgod@te4.org
+
+-- Find a random spot
+local x, y = rng.range(1, level.map.w - 2), rng.range(1, level.map.h - 2)
+local tries = 0
+while (not game.player:canMove(x, y) or level.map.attrs(x, y, "no_teleport")) and tries < 100 do
+	x, y = rng.range(1, level.map.w - 2), rng.range(1, level.map.h - 2)
+	tries = tries + 1
+end
+if tries >= 100 then return false end
+
+local kind = rng.table{"fire", "fire", "cold", "cold", "storm", "storm", "multihued"}
+
+local id = kind.."-dragon-cave-"..game.turn
+
+local changer = function(id, kind)
+	local npcs = mod.class.NPC:loadList{"/data/general/npcs/"..kind.."-drake.lua"}
+	local objects = mod.class.Object:loadList("/data/general/objects/objects.lua")
+	local terrains = mod.class.Grid:loadList("/data/general/grids/cave.lua")
+	terrains.CAVE_LADDER_UP_WILDERNESS.change_level_shift_back = true
+	terrains.CAVE_LADDER_UP_WILDERNESS.change_zone_auto_stairs = true
+	local zone = mod.class.Zone.new(id, {
+		name = "Intimidating Cave",
+		level_range = {zone:level_adjust_level(level, zone, "actor"), zone:level_adjust_level(level, zone, "actor")},
+		level_scheme = "player",
+		max_level = 1,
+		actor_adjust_level = function(zone, level, e) return zone.base_level + e:getRankLevelAdjust() + level.level-1 + rng.range(-1,2) end,
+		width = 50, height = 50,
+		ambient_music = "Swashing the buck.ogg",
+		reload_lists = false,
+		persistent = "zone",
+		min_material_level = game.zone.min_material_level,
+		max_material_level = game.zone.max_material_level,
+		generator =  {
+			map = {
+				class = "engine.generator.map.Cavern",
+				zoom = 6,
+				min_floor = 1200,
+				floor = "CAVEFLOOR",
+				wall = "CAVEWALL",
+				up = "CAVE_LADDER_UP_WILDERNESS",
+				door = "CAVEFLOOR",
+			},
+			actor = {
+				class = "mod.class.generator.actor.Random",
+				nb_npc = {25, 25},
+				guardian = {special=function(e) return e.rank and e.rank >= 2 end, random_elite={life_rating=function(v) return v * 1.5 + 4 end, nb_rares=3}},
+			},
+			object = {
+				class = "engine.generator.object.Random",
+				filters = {{type="gem"}},
+				nb_object = {15, 25},
+			},
+			trap = {
+				class = "engine.generator.trap.Random",
+				nb_trap = {6, 9},
+			},
+		},
+--		levels = { [1] = { generator = { map = { up = "CAVEFLOOR", }, }, }, },
+		npc_list = npcs,
+		grid_list = terrains,
+		object_list = objects,
+		trap_list = mod.class.Trap:loadList("/data/general/traps/natural_forest.lua"),
+	})
+	return zone
+end
+
+local g = game.level.map(x, y, engine.Map.TERRAIN):cloneFull()
+g.name = "intimidating cave"
+g.display='>' g.color_r=0 g.color_g=0 g.color_b=255 g.notice = true
+g.change_level=1 g.change_zone=id g.glow=true
+g.add_displays = g.add_displays or {}
+g.add_displays[#g.add_displays+1] = mod.class.Grid.new{image="terrain/crystal_ladder_down.png", z=5}
+g.nice_tiler = nil
+g:initGlow()
+g.dragon_kind = kind
+g.real_change = changer
+g.change_level_check = function(self)
+	game:changeLevel(1, self.real_change(self.change_zone, self.dragon_kind), {temporary_zone_shift=true})
+	self.change_level_check = nil
+	self.real_change = nil
+	return true
+end
+game.zone:addEntity(game.level, g, "terrain", x, y)
+
+local i, j = util.findFreeGrid(x, y, 10, true, {[engine.Map.ACTOR]=true})
+if not i then return end
+
+-- Pop hatchlings at the stairs
+local npcs = mod.class.NPC:loadList{"/data/general/npcs/"..kind.."-drake.lua"}
+local m = game.zone:makeEntity(game.level, "actor", {base_list=npcs, special=function(e) return e.rank and e.rank == 1 end}, nil, true)
+if m then
+	game.zone:addEntity(game.level, m, "actor", i, j)
+end
+
+return true
diff --git a/game/modules/tome/data/general/events/fearscape-portal.lua b/game/modules/tome/data/general/events/fearscape-portal.lua
index ab28cc04fd1c671d3aa35c604cec70eed0087c1f..422e1e09004c89883d17ef760e13f0fd6bf827b5 100644
--- a/game/modules/tome/data/general/events/fearscape-portal.lua
+++ b/game/modules/tome/data/general/events/fearscape-portal.lua
@@ -53,6 +53,8 @@ local changer = function(id)
 		reload_lists = false,
 		projectile_speed_mod = 0.3,
 		persistent = "zone",
+		min_material_level = game.zone.min_material_level,
+		max_material_level = game.zone.max_material_level,
 		generator =  {
 			map = {
 				class = "engine.generator.map.Roomer",
@@ -81,7 +83,7 @@ local changer = function(id)
 				nb_trap = {6, 9},
 			},
 		},
-		post_process = function(level) 
+		post_process = function(level)
 			local Map = require "engine.Map"
 			local Quadratic = require "engine.Quadratic"
 			level.background_particle1 = require("engine.Particles").new("starfield_static", 1, {width=Map.viewport.width, height=Map.viewport.height, nb=300, a_min=0.5, a_max = 0.8, size_min = 1, size_max = 3})
diff --git a/game/modules/tome/data/general/events/groups/outdoor-majeyal-generic.lua b/game/modules/tome/data/general/events/groups/outdoor-majeyal-generic.lua
index 943ddae05cf9fe5eaaa58e4e6e7185f01d4798ce..a8465c86a4ad2e8e97a69b02b8076c530f52998d 100644
--- a/game/modules/tome/data/general/events/groups/outdoor-majeyal-generic.lua
+++ b/game/modules/tome/data/general/events/groups/outdoor-majeyal-generic.lua
@@ -19,4 +19,5 @@
 
 return {
 	{name="damp-cave", percent=10},
+	{name="drake-cave", percent=5},
 }
diff --git a/game/modules/tome/data/general/events/naga-portal.lua b/game/modules/tome/data/general/events/naga-portal.lua
index 490a66e73aa7fce608a66c7859a64138e9c97bb7..8e22c4464e36097ae686b3b0fcc584ec93ab9d33 100644
--- a/game/modules/tome/data/general/events/naga-portal.lua
+++ b/game/modules/tome/data/general/events/naga-portal.lua
@@ -58,6 +58,8 @@ local changer = function(id)
 		color_shown = {0.5, 1, 0.8, 1},
 		color_obscure = {0.5*0.6, 1*0.6, 0.8*0.6, 0.6},
 		persistent = "zone",
+		min_material_level = game.zone.min_material_level,
+		max_material_level = game.zone.max_material_level,
 		generator =  {
 			map = {
 				class = "engine.generator.map.Cavern",
diff --git a/game/modules/tome/data/general/events/old-battle-field.lua b/game/modules/tome/data/general/events/old-battle-field.lua
index 045e9c087677e7afb9c8643c2d32fec137f81351..54e5ac87f306ac6826f153a7de2ef8c6009e6199 100644
--- a/game/modules/tome/data/general/events/old-battle-field.lua
+++ b/game/modules/tome/data/general/events/old-battle-field.lua
@@ -54,6 +54,8 @@ if tries < 100 then
 			ambient_music = "Swashing the buck.ogg",
 			reload_lists = false,
 			persistent = "zone",
+			min_material_level = game.zone.min_material_level,
+			max_material_level = game.zone.max_material_level,
 			generator =  {
 				map = {
 					class = "engine.generator.map.Static",
diff --git a/game/modules/tome/data/zones/old-forest/events.lua b/game/modules/tome/data/zones/old-forest/events.lua
index b1e6d1252f7e7b5ccd932ccef59bba3f5a00d87b..f7e436efd1dcc57cd89a3e085838bbb9fb7f2cc9 100644
--- a/game/modules/tome/data/zones/old-forest/events.lua
+++ b/game/modules/tome/data/zones/old-forest/events.lua
@@ -18,8 +18,6 @@
 -- darkgod@te4.org
 
 return { one_per_level=true,
-	{name="tombstones", percent=10},
-	{name="old-battle-field", percent=5},
 	{group="outdoor-majeyal-gloomy"},
 	{group="outdoor-majeyal-generic"},
 }
\ No newline at end of file