diff --git a/game/engine/Zone.lua b/game/engine/Zone.lua
index a9525baedf4df9a8c2926b1167dcd16008d8686f..61190f239c2d7dca4dd3adabe4023f2bbd8736f2 100644
--- a/game/engine/Zone.lua
+++ b/game/engine/Zone.lua
@@ -237,7 +237,7 @@ function _M:finishEntity(level, type, e, ego_chance)
 			local picked_etype = {}
 			local etype = rng.tableIndex(e.egos_chance, picked_etype)
 			local echance = etype and e.egos_chance[etype]
-			while etype and rng.percent(util.bound(echance + (ego_chance or 0), 100, 100)) do
+			while etype and rng.percent(util.bound(echance + (ego_chance or 0), 0, 100)) do
 				picked_etype[etype] = true
 				if _G.type(etype) == "number" then etype = "" end
 				local egos = level:getEntitiesList(type.."/"..e.egos..":"..etype)
diff --git a/game/engine/generator/actor/Random.lua b/game/engine/generator/actor/Random.lua
index b31e1e177c02330f18f227639681b429ae5a2a1f..0668fdd2167fe51a903c7e986ab1d4b20693c6d7 100644
--- a/game/engine/generator/actor/Random.lua
+++ b/game/engine/generator/actor/Random.lua
@@ -33,6 +33,7 @@ function _M:init(zone, map, level, spots)
 	end
 	self.filters = data.filters
 	self.nb_npc = data.nb_npc or {10, 20}
+	self.area = data.area or {x1=0, x2=self.map.w-1, y1=0, y2=self.map.h-1}
 	self.guardian = data.guardian
 	self.post_generation = data.post_generation
 end
@@ -45,10 +46,10 @@ function _M:generate()
 	if self.guardian then
 		local m = self.zone:makeEntityByName(self.level, "actor", self.guardian)
 		if m then
-			local x, y = rng.range(0, self.map.w-1), rng.range(0, self.map.h-1)
+			local x, y = rng.range(self.area.x1, self.area.x2), rng.range(self.area.y1, self.area.y2)
 			local tries = 0
 			while (not m:canMove(x, y) or self.map.room_map[x][y].special) and tries < 100 do
-				x, y = rng.range(0, self.map.w-1), rng.range(0, self.map.h-1)
+				x, y = rng.range(self.area.x1, self.area.x2), rng.range(self.area.y1, self.area.y2)
 				tries = tries + 1
 			end
 			if tries < 100 then
@@ -67,10 +68,10 @@ function _M:generateOne()
 	if self.filters then f = self.filters[rng.range(1, #self.filters)] end
 	local m = self.zone:makeEntity(self.level, "actor", f)
 	if m then
-		local x, y = rng.range(0, self.map.w-1), rng.range(0, self.map.h-1)
+		local x, y = rng.range(self.area.x1, self.area.x2), rng.range(self.area.y1, self.area.y2)
 		local tries = 0
 		while (not m:canMove(x, y) or self.map.room_map[x][y].special) and tries < 100 do
-			x, y = rng.range(0, self.map.w-1), rng.range(0, self.map.h-1)
+			x, y = rng.range(self.area.x1, self.area.x2), rng.range(self.area.y1, self.area.y2)
 			tries = tries + 1
 		end
 		if tries < 100 then
diff --git a/game/engine/generator/map/Static.lua b/game/engine/generator/map/Static.lua
index 9a58d193b98734868696605e24b13817ca727979..849def51d26bef528de651b06c5e4dbfd7cdecd0 100644
--- a/game/engine/generator/map/Static.lua
+++ b/game/engine/generator/map/Static.lua
@@ -49,8 +49,8 @@ function _M:loadMap(file)
 		subGenerator = function(g)
 			self.subgen[#self.subgen+1] = g
 		end,
-		defineTile = function(char, grid, obj, actor, trap)
-			t[char] = {grid=grid, obj=obj, actor=actor, trap=trap}
+		defineTile = function(char, grid, obj, actor, trap, status)
+			t[char] = {grid=grid, obj=obj, actor=actor, trap=trap, status=status}
 		end,
 		quickEntity = function(char, e)
 			if type(e) == "table" then
@@ -132,6 +132,7 @@ function _M:generate(lev, old_lev)
 		local actor = self.tiles[c] and self.tiles[c].actor
 		local trap = self.tiles[c] and self.tiles[c].trap
 		local object = self.tiles[c] and self.tiles[c].object
+		local status = self.tiles[c] and self.tiles[c].status
 
 		if object then
 			local o = type(object) == "string" and self.zone:makeEntityByName(self.level, "object", object) or self.zone:finishEntity(self.level, "object", object)
@@ -158,6 +159,11 @@ function _M:generate(lev, old_lev)
 				self.zone:addEntity(self.level, m, "actor", i-1, j-1)
 			end
 		end
+
+		if status then
+			if status.lite then self.level.map.lites(i-1, j-1, true) end
+			if status.remember then self.level.map.remembers(i-1, j-1, true) end
+		end
 	end end
 
 	for i = 1, #self.subgen do
diff --git a/game/engine/interface/ActorFOV.lua b/game/engine/interface/ActorFOV.lua
index 59eda67a937be891f2dd0bc60540c6634c5fc83a..0102cc6b9cf977d5e787bc0c6157df7af3ce71ee 100644
--- a/game/engine/interface/ActorFOV.lua
+++ b/game/engine/interface/ActorFOV.lua
@@ -78,6 +78,7 @@ function _M:computeFOV(radius, block, apply, force, no_store, cache)
 				local t = {x=x,y=y, dx=dx, dy=dy, sqdist=sqdist}
 				fov.actors[a] = t
 				fov.actors_dist[#fov.actors_dist+1] = a
+				a:check("seen_by", self)
 				a:updateFOV(self, t.sqdist)
 			end
 		end, cache and game.level.map._fovcache[block])
diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index 2b093308c923d9c8c00bd5f1fd326e126a41b9d1..188ad374a5731ac601adeb7cb59e0fed6de88ec7 100644
--- a/game/modules/tome/class/Game.lua
+++ b/game/modules/tome/class/Game.lua
@@ -529,7 +529,7 @@ function _M:setupCommands()
 	self.key:addCommands{
 		[{"_d","ctrl"}] = function()
 			if config.settings.tome.cheat then
-				self:changeLevel(1, "carn-dum")
+				self:changeLevel(1, "unremarkable-cave")
 			end
 		end,
 	}
diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua
index b98db48edab9067779d7925faeb34bf1ea9c07c6..e10b1e12582c903d1c180b0991ec7153130ca760 100644
--- a/game/modules/tome/class/interface/Combat.lua
+++ b/game/modules/tome/class/interface/Combat.lua
@@ -43,11 +43,11 @@ function _M:bumpInto(target)
 			chat:invoke()
 		elseif self.move_others then
 			-- Displace
-			game.level.map:remove(self.x, self.y, Map.ACTOR)
-			game.level.map:remove(target.x, target.y, Map.ACTOR)
-			game.level.map(self.x, self.y, Map.ACTOR, target)
-			game.level.map(target.x, target.y, Map.ACTOR, self)
-			self.x, self.y, target.x, target.y = target.x, target.y, self.x, self.y
+			local tx, ty, sx, sy = target.x, target.y, self.x, self.y
+			target.x = nil target.y = nil
+			self.x = nil self.y = nil
+			target:move(sx, sy, true)
+			self:move(tx, ty, true)
 		end
 	end
 end
diff --git a/game/modules/tome/data/birth/classes/divine.lua b/game/modules/tome/data/birth/classes/divine.lua
index b3686083cd4b757783a1d00e6bc92aa8809c195c..9874bc1feaab8a37582f4b53f2fdc4669d79dbdf 100644
--- a/game/modules/tome/data/birth/classes/divine.lua
+++ b/game/modules/tome/data/birth/classes/divine.lua
@@ -44,6 +44,7 @@ newBirthDescriptor{
 	name = "Sun Paladin",
 	desc = {
 		"Sun Paladins hail from the Gates of Morning, the last bastion of the free people in the Far East.",
+		"Their way of life is well represented by their motto 'We walk in the dark places no others will enter. We stand on the bridge, and no one may pass.'",
 		"They can channel the power of the Sun to smite all who seek to destroy the Sunwall.",
 		"Competent in both weapon and shield combat and magic they usually burn their foes from afar before engaging in melee.",
 		"Their most important stats are: Strength and Magic",
diff --git a/game/modules/tome/data/chats/lost-merchant.lua b/game/modules/tome/data/chats/lost-merchant.lua
new file mode 100644
index 0000000000000000000000000000000000000000..04b1fc2be73f1368d14d2d2ebeb44f3c43123b6d
--- /dev/null
+++ b/game/modules/tome/data/chats/lost-merchant.lua
@@ -0,0 +1,27 @@
+-- ToME - Tales of Middle-Earth
+-- Copyright (C) 2009, 2010 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
+
+newChat{ id="welcome",
+	text = [[Please save me! I will make it worth your ti..
+*#LIGHT_GREEN#The assasin lord hits him in the mouth.#WHITE#*Shut up!]],
+	answers = {
+		{"Sorry I have to go!"},
+	}
+}
+return "welcome"
diff --git a/game/modules/tome/data/chats/unremarkable-cave-bosses.lua b/game/modules/tome/data/chats/unremarkable-cave-bosses.lua
new file mode 100644
index 0000000000000000000000000000000000000000..055dccca0f607504bb8b45fa773bcf4adac938f5
--- /dev/null
+++ b/game/modules/tome/data/chats/unremarkable-cave-bosses.lua
@@ -0,0 +1,56 @@
+-- ToME - Tales of Middle-Earth
+-- Copyright (C) 2009, 2010 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
+
+local function attack_krogar(npc, player)
+	local fillarel, krogar
+	for uid, e in pairs(game.level.entities) do
+		if e.define_as == "FILLAREL" and not e.dead then fillarel = e
+		elseif e.define_as == "CORRUPTOR" and not e.dead then krogar = e end
+	end
+	krogar.faction = "enemies"
+	fillarel.inc_damage = {all=-80}
+	fillarel:setTarget(krogar)
+	krogar:setTarget(filarel)
+end
+
+local function attack_fillarel(npc, player)
+	local fillarel, krogar
+	for uid, e in pairs(game.level.entities) do
+		if e.define_as == "FILLAREL" and not e.dead then fillarel = e
+		elseif e.define_as == "CORRUPTOR" and not e.dead then krogar = e end
+	end
+	fillarel.faction = "enemies"
+	krogar.inc_damage = {all=-80}
+	fillarel:setTarget(krogar)
+	krogar:setTarget(filarel)
+end
+
+newChat{ id="welcome",
+	text = [[#LIGHT_GREEN#*A beautiful elven woman in golden robes stands before you, she faces an orc clad in mail armour.*#WHITE#
+Fillarel: "Abandon this fight Orc! You can not win, I stand with the power of the sun and the shadows of the moon."
+Krogar: "Ah! It's only been one hour and you already look tired, my 'lady'."
+#LIGHT_GREEN#*As you enter the room they notice you.*#WHITE#
+Fillarel: "You! @playerdescriptor.race@! help me defeat this monster or be gone with him!"
+Krogar: "Ah looking for help? Bah. @playerdescriptor.race@, kill this bitch for me and I shall reward you!"]],
+	answers = {
+		{"[attack Krogar]", action=attack_krogar},
+		{"[attack Fillarel]", action=attack_fillarel},
+	}
+}
+return "welcome"
diff --git a/game/modules/tome/data/chats/unremarkable-cave-fillarel.lua b/game/modules/tome/data/chats/unremarkable-cave-fillarel.lua
new file mode 100644
index 0000000000000000000000000000000000000000..03b315b6f03e3e7606a7e62330ee787971752384
--- /dev/null
+++ b/game/modules/tome/data/chats/unremarkable-cave-fillarel.lua
@@ -0,0 +1,36 @@
+-- ToME - Tales of Middle-Earth
+-- Copyright (C) 2009, 2010 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
+
+newChat{ id="welcome",
+	text = [[Thanks @playername@, I hate to admit it, but you saved my life.]],
+	answers = {
+		{"At your service. But may I ask what where you doing in this dark place?", jump="what"},
+		{"It was only natural my lady."},
+	}
+}
+
+newChat{ id="what",
+	text = [[I am an Anorithil, a mage of the Sun and Moon, we fight all that is evil. I was there with a group of sun paladins, we came from the Gates of Morning to the east.
+They got ... slaughtered by orcs and I nearly died too, thank you again for your help.]],
+	answers = {
+		{"It was only natural my lady.", action=function(npc, player) game:setAllowedBuild("divine") game:setAllowedBuild("divine_anorithil", true) end},
+	}
+}
+
+return "welcome"
diff --git a/game/modules/tome/data/factions.lua b/game/modules/tome/data/factions.lua
index e07175ae7fbfe34fc1b87f17632ed142b98ed4d1..63eaf7e1c5049df8fc77a59852f2900a726e3338 100644
--- a/game/modules/tome/data/factions.lua
+++ b/game/modules/tome/data/factions.lua
@@ -58,7 +58,7 @@ for i, line in ipairs(lines) do
 			end
 		else
 			local n = tonumber(d)
-			if n then
+			if n then print(j, i, factsid[j], factsid[i], n*100)
 				facts[factsid[j]].reactions[factsid[i]] = n * 100
 			end
 		end
@@ -71,3 +71,6 @@ for f1, data in pairs(facts) do
 		engine.Faction:setInitialReaction(f1, f2, v, true)
 	end
 end
+
+engine.Faction:add{ name="Neutral", reaction={}, }
+engine.Faction:setInitialReaction("neutral", "enemies", -100, true)
diff --git a/game/modules/tome/data/maps/quests/lost-merchant.lua b/game/modules/tome/data/maps/quests/lost-merchant.lua
index 1b2f8573e539f59280bf89c0dcd30e27f04d53e9..c05ae1d23145482342bfd779b72c350073a8dff8 100644
--- a/game/modules/tome/data/maps/quests/lost-merchant.lua
+++ b/game/modules/tome/data/maps/quests/lost-merchant.lua
@@ -72,6 +72,7 @@ defineTile('@', "FLOOR", nil, mod.class.NPC.new{
 	size_category = 3,
 	ai = "simple",
 	faction = "reunited-kingdom",
+	can_talk = "lost-merchant",
 	is_merchant = true,
 })
 
diff --git a/game/modules/tome/data/maps/zones/unremarkable-cave.lua b/game/modules/tome/data/maps/zones/unremarkable-cave.lua
new file mode 100644
index 0000000000000000000000000000000000000000..48504f5a720a80ccdcfcf97ea8c099577d285439
--- /dev/null
+++ b/game/modules/tome/data/maps/zones/unremarkable-cave.lua
@@ -0,0 +1,96 @@
+-- ToME - Tales of Middle-Earth
+-- Copyright (C) 2009, 2010 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
+
+defineTile('.', "FLOOR", nil, nil, nil, {lite=true})
+defineTile('#', "WALL", nil, nil, nil, {lite=true})
+defineTile('+', "DOOR", nil, nil, nil, {lite=true})
+defineTile('@', "FLOOR", nil, "FILLAREL", nil, {lite=true})
+defineTile('M', "FLOOR", nil, "CORRUPTOR", nil, {lite=true})
+
+subGenerator{
+	x = 0, y = 0, w = 86, h = 50,
+	generator = "engine.generator.map.Roomer",
+	data = {
+		edge_entrances = {4,6},
+		nb_rooms = 13,
+		rooms = {"simple", "pilar"},
+		['.'] = "FLOOR",
+		['#'] = "WALL",
+		up = "UP",
+		door = "DOOR",
+		force_tunnels = {
+			{"random", {85, 25}, id=-500},
+		},
+	},
+	define_up = true,
+}
+
+checkConnectivity({87,25}, "entrance", "boss-area", "boss-area")
+
+return [[
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      #######.######
+                                                                                      #####.....####
+                                                                                      ###.........##
+                                                                                      ##...........#
+                                                                                      #............#
+                                                                                      #............#
+                                                                                      #............#
+                                                                                      #......@.....#
+                                                                                      #............#
+                                                                                      #............#
+                                                                                      #............#
+                                                                                      #............#
+                                                                                      +............#
+                                                                                      #............#
+                                                                                      #............#
+                                                                                      #............#
+                                                                                      #............#
+                                                                                      #......M.....#
+                                                                                      #............#
+                                                                                      #............#
+                                                                                      ##...........#
+                                                                                      ####.......###
+                                                                                      #####.....####
+                                                                                      #######.######
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############
+                                                                                      ##############]]
diff --git a/game/modules/tome/data/talents/cunning/dirty.lua b/game/modules/tome/data/talents/cunning/dirty.lua
index c3b1e41777a3e37dd81b36ef4dc77fe0382e2a01..485aa0977efbd9d38e0a5e44dd5b4540318ee7f2 100644
--- a/game/modules/tome/data/talents/cunning/dirty.lua
+++ b/game/modules/tome/data/talents/cunning/dirty.lua
@@ -79,11 +79,11 @@ newTalent{
 			self:setEffect(self.EFF_EVASION, dur, {chance=50})
 
 			-- Displace
-			game.level.map:remove(self.x, self.y, Map.ACTOR)
-			game.level.map:remove(target.x, target.y, Map.ACTOR)
-			game.level.map(self.x, self.y, Map.ACTOR, target)
-			game.level.map(target.x, target.y, Map.ACTOR, self)
-			self.x, self.y, target.x, target.y = target.x, target.y, self.x, self.y
+			local tx, ty, sx, sy = target.x, target.y, self.x, self.y
+			target.x = nil target.y = nil
+			self.x = nil self.y = nil
+			target:move(sx, sy, true)
+			self:move(tx, ty, true)
 		end
 
 		return true
diff --git a/game/modules/tome/data/texts/unlock-divine_anorithil.lua b/game/modules/tome/data/texts/unlock-divine_anorithil.lua
index fb1c73e3a17f17d216d860c25f98ab7012cb59bc..d305a049d674cc0df7e2afb0d88716185aef6631 100644
--- a/game/modules/tome/data/texts/unlock-divine_anorithil.lua
+++ b/game/modules/tome/data/texts/unlock-divine_anorithil.lua
@@ -23,8 +23,9 @@ In the uttermost east of Arda, on the continent known as the Far East, dwells th
 
 Anorithil are elven mages who are trained in special magic to manipulate the Sun and Moon powers.
 They have learned to harness the powers of both shadows and light in their battle against the Pride.
+Their motto is: "I am Grey. I stand between the candle and the star. We are Grey. We stand between the darkness and the light."
 
-You have discovered the Gates of Morning and can now create new characters with the #LIGHT_GREEN#Anorithil class#WHITE#.
+You have helped one of them and can now create new characters with the #LIGHT_GREEN#Anorithil class#WHITE#.
 
 Anorithil are pure spellcasters that rely on posivite and negative energies.
 Class features:#YELLOW#
diff --git a/game/modules/tome/data/texts/unlock-divine_sun_paladin.lua b/game/modules/tome/data/texts/unlock-divine_sun_paladin.lua
index 479258e65823e4a58cde7f23ffd63b36b45b987f..7a392ede1e8d8435e8c11b462f782f6771ab192a 100644
--- a/game/modules/tome/data/texts/unlock-divine_sun_paladin.lua
+++ b/game/modules/tome/data/texts/unlock-divine_sun_paladin.lua
@@ -23,6 +23,7 @@ In the uttermost east of Arda, on the continent known as the Far East, dwells th
 
 Sun Paladins are humans warriors who are trained in special magic to manipulate the Sun powers.
 Paragons of all that is good they are nonetheless terrible in their battle against the Pride.
+Their motto is: "We walk in the dark places no others will enter. We stand on the bridge, and no one may pass."
 
 You have discovered the Gates of Morning and can now create new characters with the #LIGHT_GREEN#Sun Paladin class#WHITE#.
 
diff --git a/game/modules/tome/data/zones/unremarkable-cave/grids.lua b/game/modules/tome/data/zones/unremarkable-cave/grids.lua
new file mode 100644
index 0000000000000000000000000000000000000000..14dc047df0c83b59498fb0f62c673df2fbc8ca70
--- /dev/null
+++ b/game/modules/tome/data/zones/unremarkable-cave/grids.lua
@@ -0,0 +1,20 @@
+-- ToME - Tales of Middle-Earth
+-- Copyright (C) 2009, 2010 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
+
+load("/data/general/grids/basic.lua")
diff --git a/game/modules/tome/data/zones/unremarkable-cave/npcs.lua b/game/modules/tome/data/zones/unremarkable-cave/npcs.lua
new file mode 100644
index 0000000000000000000000000000000000000000..c8c2724f8414c10bca4d498fe59f884ec4557338
--- /dev/null
+++ b/game/modules/tome/data/zones/unremarkable-cave/npcs.lua
@@ -0,0 +1,121 @@
+-- ToME - Tales of Middle-Earth
+-- Copyright (C) 2009, 2010 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
+
+load("/data/general/npcs/rodent.lua")
+load("/data/general/npcs/vermin.lua")
+load("/data/general/npcs/molds.lua")
+load("/data/general/npcs/skeleton.lua")
+load("/data/general/npcs/snake.lua")
+
+local Talents = require("engine.interface.ActorTalents")
+
+newEntity{ define_as = "FILLAREL",
+	type = "humanoid", subtype = "elf", unique = true,
+	name = "Fillarel Aldaren", faction = "neutral",
+	display = "@", color=colors.GOLD,
+	desc = [[An elven women. She wears a tight robe decorated with symbols of the sun and the moon and wields a staff.]],
+	level_range = {25, 35}, exp_worth = 2,
+	max_life = 120, life_rating = 15, fixed_rating = true,
+	positive_regen = 10,
+	negative_regen = 10,
+	rank = 4,
+	size_category = 3,
+	stats = { str=10, dex=22, cun=25, mag=20, con=12 },
+
+	body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
+	equipment = resolvers.equip{
+		{type="weapon", subtype="staff", ego_chance=100, autoreq=true},
+		{type="armor", subtype="cloth", ego_chance=100, autoreq=true},
+	},
+	drops = resolvers.drops{chance=100, nb=3, {ego_chance=100} },
+
+	resolvers.talents{
+		[Talents.T_MOONLIGHT_RAY]=4,
+		[Talents.T_STARFALL]=5,
+		[Talents.T_SHADOW_BLAST]=3,
+		[Talents.T_SEARING_LIGHT]=4,
+		[Talents.T_FIREBEAM]=4,
+		[Talents.T_SUNBURST]=3,
+		[Talents.T_HYMN_OF_SHADOWS]=2,
+		[Talents.T_CHANT_OF_FORTITUDE]=2,
+	},
+
+	autolevel = "caster",
+	ai = "dumb_talented_simple", ai_state = { talent_in=1, ai_move="move_astar" },
+
+	on_added = function(self)
+		self.energy.value = game.energy_to_act self:useTalent(self.T_HYMN_OF_SHADOWS)
+		self.energy.value = game.energy_to_act self:useTalent(self.T_CHANT_OF_FORTITUDE)
+	end,
+
+	seen_by = function(self, who)
+		if not self.has_been_seen and who.player then
+			local Chat = require("engine.Chat")
+			local chat = Chat.new("unremarkable-cave-bosses", self, who)
+			chat:invoke()
+			self.has_been_seen = true
+		end
+	end,
+
+	can_talk = "unremarkable-cave-fillarel",
+
+	on_die = function(self, who)
+--		game.player:resolveSource():setQuestStatus("start-dunadan", engine.Quest.COMPLETED, "amon-sul")
+	end,
+}
+
+newEntity{ define_as = "CORRUPTOR",
+	type = "humanoid", subtype = "orc", unique = true,
+	name = "Krogar", faction = "neutral",
+	display = "@", color=colors.GREEN,
+	desc = [[An orc clad in mail armour, he wields a staff and looks menacing.]],
+	level_range = {25, 35}, exp_worth = 2,
+	max_life = 120, life_rating = 15, fixed_rating = true,
+	positive_regen = 10,
+	negative_regen = 10,
+	rank = 4,
+	size_category = 3,
+	stats = { str=10, dex=22, cun=25, mag=20, con=12 },
+
+	body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
+	equipment = resolvers.equip{
+		{type="weapon", subtype="staff", ego_chance=100, autoreq=true},
+		{type="armor", subtype="heavy", ego_chance=100, autoreq=true},
+	},
+	drops = resolvers.drops{chance=100, nb=3, {ego_chance=100} },
+
+	resolvers.talents{
+		[Talents.T_HEAVY_ARMOUR_TRAINING]=3,
+		[Talents.T_MOONLIGHT_RAY]=4,
+		[Talents.T_STARFALL]=5,
+		[Talents.T_SHADOW_BLAST]=3,
+		[Talents.T_SEARING_LIGHT]=4,
+		[Talents.T_FIREBEAM]=4,
+		[Talents.T_SUNBURST]=3,
+		[Talents.T_HYMN_OF_SHADOWS]=2,
+		[Talents.T_CHANT_OF_FORTITUDE]=2,
+	},
+
+	autolevel = "caster",
+	ai = "dumb_talented_simple", ai_state = { talent_in=1, ai_move="move_astar" },
+
+	on_die = function(self, who)
+--		game.player:resolveSource():setQuestStatus("start-dunadan", engine.Quest.COMPLETED, "amon-sul")
+	end,
+}
diff --git a/game/modules/tome/data/zones/unremarkable-cave/objects.lua b/game/modules/tome/data/zones/unremarkable-cave/objects.lua
new file mode 100644
index 0000000000000000000000000000000000000000..b5facd63f5b34e95c1aab209db0f312a8aef3e91
--- /dev/null
+++ b/game/modules/tome/data/zones/unremarkable-cave/objects.lua
@@ -0,0 +1,20 @@
+-- ToME - Tales of Middle-Earth
+-- Copyright (C) 2009, 2010 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
+
+load("/data/general/objects/objects.lua")
diff --git a/game/modules/tome/data/zones/unremarkable-cave/traps.lua b/game/modules/tome/data/zones/unremarkable-cave/traps.lua
new file mode 100644
index 0000000000000000000000000000000000000000..3cd3173e45699446c9ad0526d8ce04b7690a2b32
--- /dev/null
+++ b/game/modules/tome/data/zones/unremarkable-cave/traps.lua
@@ -0,0 +1,20 @@
+-- ToME - Tales of Middle-Earth
+-- Copyright (C) 2009, 2010 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
+
+load("/data/general/traps/elemental.lua")
diff --git a/game/modules/tome/data/zones/unremarkable-cave/zone.lua b/game/modules/tome/data/zones/unremarkable-cave/zone.lua
new file mode 100644
index 0000000000000000000000000000000000000000..5241447d714f98b2cdcc6d6acc54ea5d5d2d871b
--- /dev/null
+++ b/game/modules/tome/data/zones/unremarkable-cave/zone.lua
@@ -0,0 +1,59 @@
+-- ToME - Tales of Middle-Earth
+-- Copyright (C) 2009, 2010 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
+
+return {
+	name = "Unremarkable Cave",
+	level_range = {25, 35},
+	level_scheme = "player",
+	max_level = 1,
+	decay = {300, 800},
+	actor_adjust_level = function(zone, level, e) return zone.base_level + e:getRankLevelAdjust() + level.level-1 + rng.range(-1,2) end,
+	width = 100, height = 50,
+--	all_remembered = true,
+--	all_lited = true,
+	persistant = "zone",
+	ambiant_music = "Swashing the buck.ogg",
+	generator =  {
+		map = {
+			class = "engine.generator.map.Static",
+			map = "zones/unremarkable-cave",
+		},
+		actor = {
+			class = "engine.generator.actor.Random",
+			area = {x1=0, x2=85, y1=0, y2=49},
+			nb_npc = {10, 30},
+		},
+		object = {
+			class = "engine.generator.object.Random",
+			nb_object = {6, 9},
+		},
+		trap = {
+			class = "engine.generator.trap.Random",
+			nb_trap = {10, 15},
+		},
+	},
+	levels =
+	{
+		[1] = {
+			generator = { map = {
+				up = "UP_WILDERNESS",
+			}, },
+		},
+	},
+}
diff --git a/ideas/factions.ods b/ideas/factions.ods
index 86b32aa3649613da1b374ecde6a9cea99c4a7802..25557fce511f6a763b0dc52493b319bd673f8fbd 100644
Binary files a/ideas/factions.ods and b/ideas/factions.ods differ
diff --git a/ideas/zones.ods b/ideas/zones.ods
index 53408e66a3892b3c8a04df4f7690e2cc5f40f01a..9f1342564a8d0b4cae22815f96901683382d3e04 100644
Binary files a/ideas/zones.ods and b/ideas/zones.ods differ