diff --git a/game/engine/Entity.lua b/game/engine/Entity.lua
index a45ff5672f858d99b06d4bb1839e7b1ce1205a8c..085ac21fa0e71ed10beaddd1db23523a5adea07c 100644
--- a/game/engine/Entity.lua
+++ b/game/engine/Entity.lua
@@ -128,8 +128,8 @@ end
 -- @param file the file to load from
 -- @param no_default if true then no default values will be assigned
 -- @usage MyEntityClass:loadList("/data/my_entities_def.lua")
-function _M:loadList(file, no_default)
-	local res = {}
+function _M:loadList(file, no_default, res)
+	res = res or {}
 
 	print("Loading entities file", file)
 	local f, err = loadfile(file)
@@ -157,8 +157,7 @@ function _M:loadList(file, no_default)
 			if t.define_as then res[t.define_as] = e end
 		end,
 		load = function(f)
-			local ret = self:loadList(f, no_default)
-			for i, e in ipairs(ret) do res[#res+1] = e end
+			self:loadList(f, no_default, res)
 		end,
 		loadList = function(f)
 			return self:loadList(f, no_default)
diff --git a/game/engine/ai/talented.lua b/game/engine/ai/talented.lua
index ed61c6166ab589f702e64d850cf46fff40865092..033ef537608b3f452da2a075afc6e1dd0eb2e4b9 100644
--- a/game/engine/ai/talented.lua
+++ b/game/engine/ai/talented.lua
@@ -4,8 +4,8 @@
 newAI("dumb_talented", function(self)
 	-- Find available talents
 	local avail = {}
-	local target_dist = core.fov.distance(self.x, self.y, self.ai_target.actor.x, self.ai_target.actor.y)
-	for i, tid in ipairs(self.talents) do
+	local target_dist = math.floor(core.fov.distance(self.x, self.y, self.ai_target.actor.x, self.ai_target.actor.y))
+	for tid, _ in pairs(self.talents) do
 		local t = self:getTalentFromId(tid)
 		if not self:isTalentCoolingDown(t) and target_dist <= self:getTalentRange(t) and self:preUseTalent(t, true) then
 			avail[#avail+1] = tid
diff --git a/game/engine/interface/ActorAI.lua b/game/engine/interface/ActorAI.lua
index e4a39faaeacafce8d94cadac30c769c4ba850382..bfcea37f31dc417ddd385f52f5d86a5d491f1975 100644
--- a/game/engine/interface/ActorAI.lua
+++ b/game/engine/interface/ActorAI.lua
@@ -93,3 +93,8 @@ end
 function _M:runAI(ai)
 	return _M.ai_def[ai](self)
 end
+
+--- Returns the current target
+function _M:getTarget(typ)
+	return self.ai_target.actor.x, self.ai_target.actor.y, self.ai_target.actor
+end
diff --git a/game/engine/interface/ActorTalents.lua b/game/engine/interface/ActorTalents.lua
index 7a63e5e5ae53a2cb509c32cdb7cbc75aedb2223c..2ca5556a278f8cb0048a7d7febf29413142a375e 100644
--- a/game/engine/interface/ActorTalents.lua
+++ b/game/engine/interface/ActorTalents.lua
@@ -58,6 +58,7 @@ function _M:newTalent(t)
 	table.insert(self.talents_def, t)
 	t.id = #self.talents_def
 	self["T_"..t.short_name] = #self.talents_def
+	print("[TALENT]", t.name, t.short_name, #self.talents_def)
 
 	-- Register in the type
 	table.insert(self.talents_types_def[t.type[1]].talents, t)
@@ -175,7 +176,7 @@ function _M:learnTalent(t_id, force)
 	end
 
 	-- Auto assign to hotkey
-	if t.mode ~= "passive" then
+	if t.mode ~= "passive" and self.hotkey then
 		for i = 1, 12 do
 			if not self.hotkey[i] then
 				self.hotkey[i] = t_id
@@ -197,8 +198,10 @@ end
 function _M:unlearnTalent(t_id)
 	local t = _M.talents_def[t_id]
 
-	for i, known_t_id in pairs(self.hotkey) do
-		if known_t_id == t_id then self.hotkey[i] = nil end
+	if self.hotkey then
+		for i, known_t_id in pairs(self.hotkey) do
+			if known_t_id == t_id then self.hotkey[i] = nil end
+		end
 	end
 
 	if t.on_unlearn then t.on_unlearn(self, t) end
diff --git a/game/engine/resolvers.lua b/game/engine/resolvers.lua
index 0544a009e3fd6702cfe6415525b93f3bbb8deabf..ce34bf7c62130364c6be98d42d2d9f825fd324d0 100644
--- a/game/engine/resolvers.lua
+++ b/game/engine/resolvers.lua
@@ -25,3 +25,13 @@ end
 function resolvers.calc.mbonus(t)
 	return rng.mbonus(t[1], resolvers.current_level, 50) + (t[2] or 0)
 end
+
+--- Talents resolver
+function resolvers.talents(list)
+	return {__resolver="talents", list}
+end
+function resolvers.calc.talents(t, e)
+	local ts = {}
+	for i, tid in ipairs(t[1]) do ts[tid] = true end
+	return ts
+end
diff --git a/game/modules/tome/class/NPC.lua b/game/modules/tome/class/NPC.lua
index 27354504903528091fb08859ea26d7e39a4ba74d..0ac3d99e2104cd04d7f7842f3e2d79e7d3bbb704 100644
--- a/game/modules/tome/class/NPC.lua
+++ b/game/modules/tome/class/NPC.lua
@@ -31,9 +31,3 @@ function _M:tooltip()
 	local str = mod.class.Actor.tooltip(self)
 	return str..("\nTarget: %s\nUID: %d"):format(self.ai_target.actor and self.ai_target.actor.name or "none", self.uid)
 end
-
---- Tries to get a target from the NPC
--- This simple returns current AI target for NPCs
-function _M:getTarget(typ)
-	return self.ai_target.actor.x, self.ai_target.actor.y
-end
diff --git a/game/modules/tome/class/Player.lua b/game/modules/tome/class/Player.lua
index c03ac1e86090476ba013e01820a7f6eb7a25cde1..8991bf678bf84a12a525d794c35a7c0a3d8efa64 100644
--- a/game/modules/tome/class/Player.lua
+++ b/game/modules/tome/class/Player.lua
@@ -112,7 +112,7 @@ function _M:getTarget(typ)
 		game:targetMode("exclusive", msg, coroutine.running(), typ)
 		return coroutine.yield()
 	end
-	return game.target.target.x, game.target.target.y
+	return game.target.target.x, game.target.target.y, game.level.map(game.target.target.x, game.target.target.y, Map.ACTOR)
 end
 
 --- Quick way to check if the player can see the target
diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua
index 1225dabdd430d2d52562b98b9515aa3a36e13720..0110f82114b8a2b57ef552495bca8ef43519e3d9 100644
--- a/game/modules/tome/class/interface/Combat.lua
+++ b/game/modules/tome/class/interface/Combat.lua
@@ -38,14 +38,16 @@ The ToME combat system has the following attributes:
 - armor penetration: reduction of target's armor
 - damage: raw damage done
 ]]
-function _M:attackTarget(target)
+function _M:attackTarget(target, damtype, mult)
+	damtype = damtype or DamageType.PHYSICAL
+	mult = mult or 1
 	local speed = nil
 
 	-- All weaponsin main hands
 	if self:getInven(self.INVEN_MAINHAND) then
 		for i, o in ipairs(self:getInven(self.INVEN_MAINHAND)) do
 			if o.combat then
-				local s = self:attackTargetWith(target, o.combat)
+				local s = self:attackTargetWith(target, o.combat, damtype, mult)
 				speed = math.max(speed or 0, s)
 			end
 		end
@@ -54,7 +56,7 @@ function _M:attackTarget(target)
 	if self:getInven(self.INVEN_OFFHAND) then
 		for i, o in ipairs(self:getInven(self.INVEN_OFFHAND)) do
 			if o.combat then
-				local s = self:attackTargetWith(target, o.combat)
+				local s = self:attackTargetWith(target, o.combat, damtype, mult)
 				speed = math.max(speed or 0, s)
 			end
 		end
@@ -62,7 +64,7 @@ function _M:attackTarget(target)
 
 	-- Barehanded ?
 	if not speed then
-		speed = self:attackTargetWith(target, self.combat)
+		speed = self:attackTargetWith(target, self.combat, damtype, mult)
 	end
 
 	-- We use up our own energy
@@ -90,9 +92,7 @@ print("=> chance to hit", hit)
 end
 
 --- Attacks with one weapon
-function _M:attackTargetWith(target, weapon)
-	local damtype = DamageType.PHYSICAL
-
+function _M:attackTargetWith(target, weapon, damtype, mult)
 	-- Does the blow connect? yes .. complex :/
 	local atk, def = self:combatAttack(weapon), target:combatDefense()
 	local dam, apr, armor = self:combatDamage(weapon), self:combatAPR(weapon), target:combatArmor()
@@ -100,6 +100,7 @@ function _M:attackTargetWith(target, weapon)
 	-- If hit is over 0 it connects, if it is 0 we still have 50% chance
 	if self:checkHit(atk, def) then
 		local dam = dam - math.max(0, armor - apr)
+		dam = dam * mult
 		dam = self:physicalCrit(dam, weapon)
 		DamageType:get(damtype).projector(self, target.x, target.y, damtype, math.max(0, dam))
 	else
diff --git a/game/modules/tome/data/damage_types.lua b/game/modules/tome/data/damage_types.lua
index 22b07a2403df6804b9a212a9506f318667f7cfeb..8d33baccbc9db2277de2b5c453f44c44e3bab988 100644
--- a/game/modules/tome/data/damage_types.lua
+++ b/game/modules/tome/data/damage_types.lua
@@ -117,3 +117,17 @@ newDamageType{
 		end
 	end,
 }
+
+-- Poisoning damage
+newDamageType{
+	name = "poison", type = "POISON",
+	projector = function(src, x, y, type, dam)
+		DamageType:get(DamageType.NATURE).projector(src, x, y, DamageType.NATURE, dam / 6)
+		dam = dam - dam / 6
+		local target = game.level.map(x, y, Map.ACTOR)
+		if target then
+			-- Set on fire!
+			target:setEffect(target.EFF_POISONED, 5, {src=src, power=dam / 5})
+		end
+	end,
+}
diff --git a/game/modules/tome/data/zones/ancient_ruins/grids.lua b/game/modules/tome/data/general/grids/basic.lua
similarity index 100%
rename from game/modules/tome/data/zones/ancient_ruins/grids.lua
rename to game/modules/tome/data/general/grids/basic.lua
diff --git a/game/modules/tome/data/general/npcs/vermin.lua b/game/modules/tome/data/general/npcs/vermin.lua
new file mode 100644
index 0000000000000000000000000000000000000000..88f092f397920ba0675f9fe9cb7c4529b54eae67
--- /dev/null
+++ b/game/modules/tome/data/general/npcs/vermin.lua
@@ -0,0 +1,40 @@
+local Talents = require("engine.interface.ActorTalents")
+
+newEntity{
+	define_as = "BASE_NPC_VERMIN",
+	group = "vermins",
+	display = "w", color=colors.WHITE,
+	can_multiply = 2,
+	body = { INVEN = 10 },
+}
+
+newEntity{ base = "BASE_NPC_VERMIN",
+	name = "white worm mass", color=colors.WHITE,
+	level_range = {1, 15}, exp_worth = 1,
+	rarity = 4,
+	autolevel = "warrior",
+	ai = "dumb_talented_simple", ai_state = { talent_in=3, },
+	max_life = resolvers.rngavg(5,9),
+	energy = { mod=0.9 },
+	combat = { dam=5, atk=15, apr=10 },
+	stats = { str=10, dex=15, mag=3, con=3 },
+	combat_armor = 1, combat_def = 1,
+
+	talents = resolvers.talents{ Talents.T_CRAWL_POISON },
+}
+
+
+newEntity{ base = "BASE_NPC_VERMIN",
+	name = "green worm mass", color=colors.GREEN,
+	level_range = {2, 15}, exp_worth = 1,
+	rarity = 5,
+	autolevel = "warrior",
+	ai = "dumb_talented_simple", ai_state = { talent_in=3, },
+	max_life = resolvers.rngavg(5,9),
+	energy = { mod=0.9 },
+	combat = { dam=5, atk=15, apr=10 },
+	stats = { str=10, dex=15, mag=3, con=3 },
+	combat_armor = 1, combat_def = 1,
+
+	talents = resolvers.talents{ Talents.T_CRAWL_POISON },
+}
diff --git a/game/modules/tome/data/general/egos.lua b/game/modules/tome/data/general/objects/egos.lua
similarity index 100%
rename from game/modules/tome/data/general/egos.lua
rename to game/modules/tome/data/general/objects/egos.lua
diff --git a/game/modules/tome/data/general/massive-armor.lua b/game/modules/tome/data/general/objects/massive-armor.lua
similarity index 100%
rename from game/modules/tome/data/general/massive-armor.lua
rename to game/modules/tome/data/general/objects/massive-armor.lua
diff --git a/game/modules/tome/data/general/objects.lua b/game/modules/tome/data/general/objects/objects.lua
similarity index 63%
rename from game/modules/tome/data/general/objects.lua
rename to game/modules/tome/data/general/objects/objects.lua
index 9e1f2de4481affac789f18821b9f8a962d42b539..29bcdc18c15cbc0b1140944031ed52c5d0b31771 100644
--- a/game/modules/tome/data/general/objects.lua
+++ b/game/modules/tome/data/general/objects/objects.lua
@@ -1,7 +1,7 @@
-load("/data/general/staves.lua")
-load("/data/general/swords.lua")
-load("/data/general/shields.lua")
-load("/data/general/massive-armor.lua")
+load("/data/general/objects/staves.lua")
+load("/data/general/objects/swords.lua")
+load("/data/general/objects/shields.lua")
+load("/data/general/objects/massive-armor.lua")
 
 newEntity{
 	name = "& Staff of Olorin",
diff --git a/game/modules/tome/data/general/shields.lua b/game/modules/tome/data/general/objects/shields.lua
similarity index 100%
rename from game/modules/tome/data/general/shields.lua
rename to game/modules/tome/data/general/objects/shields.lua
diff --git a/game/modules/tome/data/general/staves.lua b/game/modules/tome/data/general/objects/staves.lua
similarity index 95%
rename from game/modules/tome/data/general/staves.lua
rename to game/modules/tome/data/general/objects/staves.lua
index 8b9616177f6b9d7bd7489cde76442e8405215396..3b22d9e95bc97f884d79c170ba8b3917f5617b8f 100644
--- a/game/modules/tome/data/general/staves.lua
+++ b/game/modules/tome/data/general/objects/staves.lua
@@ -6,7 +6,7 @@ newEntity{
 	encumber = 5,
 	rarity = 3,
 	desc = [[Staves designed for wielders of magic, by the greats of the art.]],
-	egos = "/data/general/egos.lua", egos_chance = resolvers.mbonus(40, 5),
+	egos = "/data/general/objects/egos.lua", egos_chance = resolvers.mbonus(40, 5),
 }
 
 newEntity{ base = "BASE_STAFF",
diff --git a/game/modules/tome/data/general/swords.lua b/game/modules/tome/data/general/objects/swords.lua
similarity index 94%
rename from game/modules/tome/data/general/swords.lua
rename to game/modules/tome/data/general/objects/swords.lua
index 9c9e7a7b0d1ae3da0817d220049e5f87a8e0c525..9d62bfb4cdbc1116e32c465aacc86995582dd034 100644
--- a/game/modules/tome/data/general/swords.lua
+++ b/game/modules/tome/data/general/objects/swords.lua
@@ -6,7 +6,7 @@ newEntity{
 	encumber = 3,
 	rarity = 3,
 	desc = [[Sharp, long, and deadly.]],
-	egos = "/data/general/egos.lua", egos_chance = resolvers.mbonus(40, 5),
+	egos = "/data/general/objects/egos.lua", egos_chance = resolvers.mbonus(40, 5),
 }
 
 newEntity{ base = "BASE_LONGSWORD",
diff --git a/game/modules/tome/data/talents.lua b/game/modules/tome/data/talents.lua
index 0a7400032ea08dee73b7aaa551b8158fcf0256e1..367577b5b918ee245609d9aae5f0e70e250aef64 100644
--- a/game/modules/tome/data/talents.lua
+++ b/game/modules/tome/data/talents.lua
@@ -1,3 +1,4 @@
 load("/data/talents/misc/misc.lua")
 load("/data/talents/spells/spells.lua")
 load("/data/talents/physical/physical.lua")
+load("/data/talents/misc/npcs.lua")
diff --git a/game/modules/tome/data/talents/misc/npcs.lua b/game/modules/tome/data/talents/misc/npcs.lua
new file mode 100644
index 0000000000000000000000000000000000000000..640833b4e9dc0538f8550fa04ed17fd337ac9810
--- /dev/null
+++ b/game/modules/tome/data/talents/misc/npcs.lua
@@ -0,0 +1,55 @@
+-- race & classes
+newTalentType{ type="physical/other", name = "other", hide = true, description = "Talents of the various entities of the world." }
+newTalentType{ type="spell/other", name = "other", hide = true, description = "Talents of the various entities of the world." }
+newTalentType{ type="other/other", name = "other", hide = true, description = "Talents of the various entities of the world." }
+
+-- Multiply!!!
+newTalent{
+	name = "Multiply",
+	type = {"other/other", 1},
+	cooldown = 3,
+	range = 20,
+	action = function(self, t)
+		print("Multiply *****BROKEN***** Fix it!")
+		return nil
+--[[
+		if not self.can_multiply or self.can_multiply <= 0 then return nil end
+		-- Find a place around to clone
+		for i = -1, 1 do for j = -1, 1 do
+			if not game.level.map:checkAllEntities(self.x + i, self.y + j, "block_move") then
+				self.can_multiply = self.can_multiply - 1
+				local a = self:clone()
+				a.energy.val = 0
+				a.exp_worth = 0.1
+				a.inven = {}
+				if a.can_multiply <= 0 then a:unlearnTalent(t.id) end
+				print("multiplied", a.can_multiply, "uids", self.uid,"=>",a.uid, "::", self.player, a.player)
+				a:move(self.x + i, self.y + j, true)
+				game.level:addEntity(a)
+				return true
+			end
+		end end
+		return nil
+]]
+	end,
+	info = function(self)
+		return ([[Multiply yourself!]])
+	end,
+}
+
+newTalent{
+	short_name = "CRAWL_POISON",
+	name = "Poisonous Crawl",
+	type = {"physical/other", 1},
+	cooldown = 2,
+	range = 1,
+	action = function(self, t)
+		local x, y, target = self:getTarget()
+		if math.floor(core.fov.distance(self.x, self.y, x, y)) > 1 then return nil end
+		self:attackTarget(target, DamageType.POISON, 1)
+		return true
+	end,
+	info = function(self)
+		return ([[Multiply yourself!]])
+	end,
+}
diff --git a/game/modules/tome/data/timed_effects.lua b/game/modules/tome/data/timed_effects.lua
index 2af1bb3d0b543ec398baaf52d43f0fa336f4bc6e..7228408203a3d0be2f03f53c4c574364695429f6 100644
--- a/game/modules/tome/data/timed_effects.lua
+++ b/game/modules/tome/data/timed_effects.lua
@@ -56,6 +56,19 @@ newEffect{
 	end,
 }
 
+newEffect{
+	name = "POISONED",
+	desc = "Poisoned",
+	type = "magical",
+	status = "detrimental",
+	parameters = { power=10 },
+	on_gain = function(self, err) return "#Target# is poisoned!", "+Poison" end,
+	on_lose = function(self, err) return "#Target# stops beign poisoned.", "-Poison" end,
+	on_timeout = function(self, eff)
+		DamageType:get(DamageType.NATURE).projector(eff.src, self.x, self.y, DamageType.NATURE, eff.power)
+	end,
+}
+
 newEffect{
 	name = "FROZEN",
 	desc = "Frozen",
diff --git a/game/modules/tome/data/zones/ancient_ruins/npcs.lua b/game/modules/tome/data/zones/ancient_ruins/npcs.lua
deleted file mode 100644
index 1815be123556012817833a0df59d6105fe566f60..0000000000000000000000000000000000000000
--- a/game/modules/tome/data/zones/ancient_ruins/npcs.lua
+++ /dev/null
@@ -1,80 +0,0 @@
-local Talents = require("engine.interface.ActorTalents")
-
-newEntity{
-	group = "dragon",
-	name = "dragon of death",
-	display = "D", color_r=255,
-	level_range = {3, 10}, exp_worth = 1,
-	rarity = 4,
-	autolevel = "warrior",
-	ai = "simple",
-	max_life = 100,
-	life_rating = 10,
-	max_mana = 1000,
-	max_stamina = 1000,
-	energy = { mod=0.5 },
-	has_blood = true,
-	stats = { str=15, dex=8, mag=12, con=14 },
-	combat = { dam=8, atk=10, apr=2, def=4, armor=6},
-}
---[[
-newEntity{
-	group = "dragon",
-	name = "baby dragon",
-	display = "d", color_r=128,
---	faction = "poorsods",
-	level_range = {1, 4}, exp_worth = 100,
-	rarity = 2,
-	autolevel = "caster",
-	ai = "simple",
-	max_life = resolvers.rngavg(20,30),
-	max_mana = 1000,
-	max_stamina = 1000,
-	energy = { mod=0.3 },
-	has_blood = {nb=3, color={50,255,120}},
-	combat = { dam=5, atk=6, def=2, apr=1, armor=2},
-}
-]]
-newEntity{
-	group = "icky things",
-	name = "white icky",
-	display = "i", color=colors.YELLOW,
-	level_range = {1, 7}, exp_worth = 1,
-	rarity = 1,
-	autolevel = "caster",
-	ai = "dumb_talented_simple",
-	ai_state = { talent_in=12, },
-	max_life = resolvers.rngavg(10,20),
-	max_mana = resolvers.rngavg(50,60),
-	energy = { mod=0.3 },
-	has_blood = {nb=3, color={50,255,120}},
-	combat = { dam=5, atk=6, def=2, apr=1, armor=2 },
-	stats = { str=10, dex=7, mag=14, con=10 },
-	talents = { Talents.T_MANATHRUST, Talents.T_FREEZE, Talents.T_FLAME }
-}
-newEntity{
-	group = "goblin",
-	name = "small goblin",
-	display = "g", color=colors.GREEN,
-	level_range = {1, 7}, exp_worth = 1,
-	rarity = 1,
-	autolevel = "warrior",
-	ai = "dumb_talented_simple",
-	ai_state = { talent_in=6, },
-	max_life = resolvers.rngavg(10,20),
-	max_stamina = resolvers.rngavg(50,60),
-	energy = { mod=0.3 },
-	has_blood = true,
-
-	body = {
-		INVEN = 1000, MAINHAND = 1, OFFHAND = 1,
-		FINGER = 2, NECK = 1, LITE = 1,
-		BODY = 1, HEAD = 1, HANDS = 1, FEET = 1,
-		TOOL = 1,
-	},
-	equipment = resolvers.equip{ {type="weapon", subtype="longsword"}, {type="armor", subtype="massive"}, {type="armor", subtype="shield"}, },
-	drops = resolvers.drops{chance=100, nb=3, {ego_chance=100} },
-
-	stats = { str=14, dex=12, mag=8, con=13 },
-	talents = { },
-}
diff --git a/game/modules/tome/data/zones/ancient_ruins/objects.lua b/game/modules/tome/data/zones/ancient_ruins/objects.lua
deleted file mode 100644
index 6e9e5075c3bb87e916daec28104361c33b6006c6..0000000000000000000000000000000000000000
--- a/game/modules/tome/data/zones/ancient_ruins/objects.lua
+++ /dev/null
@@ -1 +0,0 @@
-load("/data/general/objects.lua")
diff --git a/game/modules/tome/data/zones/ancient_ruins/zone.lua b/game/modules/tome/data/zones/ancient_ruins/zone.lua
deleted file mode 100644
index ba5d139cfef139182aa83193526c0e75d0baa62b..0000000000000000000000000000000000000000
--- a/game/modules/tome/data/zones/ancient_ruins/zone.lua
+++ /dev/null
@@ -1,41 +0,0 @@
-return {
-	name = "ancient ruins",
-	level_range = {1, 5},
-	level_scheme = "player",
-	max_level = 5,
-	width = 50, height = 50,
-	all_remembered = true,
-	all_lited = true,
---	persistant = true,
-	generator =  {
-		map = {
-			class = "engine.generator.map.Roomer",
-			nb_rooms = 10,
-			rooms = {"simple", "pilar"},
-			['.'] = "FLOOR",
-			['#'] = "WALL",
-			up = "UP",
-			down = "DOWN",
-			door = "DOOR",
-		},
-		actor = {
-			class = "engine.generator.actor.Random",
-			nb_npc = {20, 30},
-			ood = {chance=5, range={1, 10}},
-			adjust_level = {-1, 2},
-		},
-		object = {
-			class = "engine.generator.object.Random",
-			nb_object = {100, 100},
-			ood = {chance=5, range={1, 10}},
-		},
-	},
-	levels =
-	{
-		[1] = {
-			generator = { map = {
-				up = "UP_WILDERNESS",
-			}, },
-		},
-	},
-}
diff --git a/game/modules/tome/data/zones/tower-amon-sul/grids.lua b/game/modules/tome/data/zones/tower-amon-sul/grids.lua
index 66de5a3213ff19e6a224d33bc1838fe102f2089c..bc1ca76f543260a51f0280590cab61eeed6ddf42 100644
--- a/game/modules/tome/data/zones/tower-amon-sul/grids.lua
+++ b/game/modules/tome/data/zones/tower-amon-sul/grids.lua
@@ -1,52 +1 @@
-newEntity{
-	define_as = "UP_WILDERNESS",
-	name = "exit to the wilds",
-	display = '<', color_r=255, color_g=0, color_b=255,
-	change_level = 1,
-	change_zone = "wilderness",
-}
-
-newEntity{
-	define_as = "UP",
-	name = "previous level",
-	display = '<', color_r=255, color_g=255, color_b=0,
-	change_level = -1,
-}
-
-newEntity{
-	define_as = "DOWN",
-	name = "next level",
-	display = '>', color_r=255, color_g=255, color_b=0,
-	change_level = 1,
-}
-
-newEntity{
-	define_as = "FLOOR",
-	name = "floor",
-	display = '.', color_r=255, color_g=255, color_b=255,
-}
-
-newEntity{
-	define_as = "WALL",
-	name = "wall",
-	display = '#', color_r=255, color_g=255, color_b=255,
-	block_move = true,
-	block_sight = true,
-}
-
-newEntity{
-	define_as = "DOOR",
-	name = "door",
-	display = '+', color_r=238, color_g=154, color_b=77,
-	block_sight = true,
-	door_opened = "DOOR_OPEN",
-}
-
-newEntity{
-	define_as = "DOOR_OPEN",
-	name = "open door",
-	display = "'", color_r=238, color_g=154, color_b=77,
-	block_move = false,
-	block_sight = false,
-	door_closed = "DOOR",
-}
+load("/data/general/grids/basic.lua")
diff --git a/game/modules/tome/data/zones/tower-amon-sul/npcs.lua b/game/modules/tome/data/zones/tower-amon-sul/npcs.lua
index 1815be123556012817833a0df59d6105fe566f60..319130dec6de3b4769f15e726a6cacbeae1e0f22 100644
--- a/game/modules/tome/data/zones/tower-amon-sul/npcs.lua
+++ b/game/modules/tome/data/zones/tower-amon-sul/npcs.lua
@@ -1,3 +1,8 @@
+load("/data/general/npcs/vermin.lua")
+--load("/data/general/npcs/skeleton.lua")
+--load("/data/general/npcs/.lua")
+
+--[[
 local Talents = require("engine.interface.ActorTalents")
 
 newEntity{
@@ -17,24 +22,6 @@ newEntity{
 	stats = { str=15, dex=8, mag=12, con=14 },
 	combat = { dam=8, atk=10, apr=2, def=4, armor=6},
 }
---[[
-newEntity{
-	group = "dragon",
-	name = "baby dragon",
-	display = "d", color_r=128,
---	faction = "poorsods",
-	level_range = {1, 4}, exp_worth = 100,
-	rarity = 2,
-	autolevel = "caster",
-	ai = "simple",
-	max_life = resolvers.rngavg(20,30),
-	max_mana = 1000,
-	max_stamina = 1000,
-	energy = { mod=0.3 },
-	has_blood = {nb=3, color={50,255,120}},
-	combat = { dam=5, atk=6, def=2, apr=1, armor=2},
-}
-]]
 newEntity{
 	group = "icky things",
 	name = "white icky",
@@ -78,3 +65,4 @@ newEntity{
 	stats = { str=14, dex=12, mag=8, con=13 },
 	talents = { },
 }
+]]
diff --git a/game/modules/tome/data/zones/tower-amon-sul/objects.lua b/game/modules/tome/data/zones/tower-amon-sul/objects.lua
index 6e9e5075c3bb87e916daec28104361c33b6006c6..5e3421492348e0c9f54c25ad85a4a1c323c12a21 100644
--- a/game/modules/tome/data/zones/tower-amon-sul/objects.lua
+++ b/game/modules/tome/data/zones/tower-amon-sul/objects.lua
@@ -1 +1 @@
-load("/data/general/objects.lua")
+load("/data/general/objects/objects.lua")