diff --git a/game/modules/tome/data/general/objects/staves.lua b/game/modules/tome/data/general/objects/staves.lua
index 65eba5c8fdf563c55ff4b5cf0ef3da745490f357..4047bf2bca621a8c535759a45b04c2e7d08a0548 100644
--- a/game/modules/tome/data/general/objects/staves.lua
+++ b/game/modules/tome/data/general/objects/staves.lua
@@ -22,6 +22,7 @@ newEntity{
 	slot = "MAINHAND",
 	slot_forbid = "OFFHAND",
 	type = "weapon", subtype="staff",
+	twohanded = true,
 	add_name = " (#COMBAT_DAMTYPE#)",
 	display = "\\", color=colors.LIGHT_RED, image = resolvers.image_material("staff", "wood"),
 	encumber = 5,
diff --git a/game/modules/tome/data/quests/east-portal.lua b/game/modules/tome/data/quests/east-portal.lua
index 88e36c1a1a241000525e6497ce57578c137976a8..7c90b9f1cead2ffaeb1a3b5548b0a12729276da5 100644
--- a/game/modules/tome/data/quests/east-portal.lua
+++ b/game/modules/tome/data/quests/east-portal.lua
@@ -112,7 +112,7 @@ remove_materials = function(self, player)
 end
 
 open_orthanc = function(self, player)
-	self:removeMaterials(player)
+	self:remove_materials(player)
 
 	-- Reveal entrances
 	local g = mod.class.Grid.new{
@@ -131,7 +131,7 @@ open_orthanc = function(self, player)
 end
 
 ask_east = function(self, player)
-	self:removeMaterials(player)
+	self:remove_materials(player)
 
 	-- Swap the orbs! Tricky bastard!
 	local orb_o, orb_item, orb_inven_id = player:findInAllInventories("Orb of Many Ways")
@@ -146,6 +146,6 @@ ask_east = function(self, player)
 end
 
 tannen_tower = function(self, player)
-	game:changeLevel(1, "tannen-tower")
+	game:changeLevel(4, "tannen-tower")
 	player:setQuestStatus(self.id, engine.Quest.COMPLETED, "trapped")
 end
diff --git a/game/modules/tome/data/talents/misc/misc.lua b/game/modules/tome/data/talents/misc/misc.lua
index e93b03542922fd7669354af738bf37d370c429fd..cfebd0fb75bbc6ec6969b70774f6dc6843dae5fd 100644
--- a/game/modules/tome/data/talents/misc/misc.lua
+++ b/game/modules/tome/data/talents/misc/misc.lua
@@ -143,12 +143,13 @@ newTalent{
 			return
 		end
 
-		game:changeLevel(1, "town-angolwen")
+		self:setEffect(self.EFF_TELEPORT_ANGOLWEN, 40, {})
 		return true
 	end,
 	info = [[Allows a mage to teleport to the secret town of Angolwen.
 	You have studied the magic arts there and have been granted a special portal spell to teleport there.
-	Nobody must learn about this spell and so it should never be used while seen by any creatures.]]
+	Nobody must learn about this spell and so it should never be used while seen by any creatures.
+	The spell will take time to activate, you must be out of sight of any creature when you cast it and when the teleportation takes effect.]]
 }
 
 -- Dunadan's power, a "weak" regeneration
diff --git a/game/modules/tome/data/timed_effects.lua b/game/modules/tome/data/timed_effects.lua
index 7168e25d2c234beba4c41a075c827a66be4773bf..026d339805fde1022173e1e542bf03527a8026cb 100644
--- a/game/modules/tome/data/timed_effects.lua
+++ b/game/modules/tome/data/timed_effects.lua
@@ -1764,6 +1764,36 @@ newEffect{
 	end,
 }
 
+newEffect{
+	name = "TELEPORT_ANGOLWEN",
+	desc = "Teleport: Angolwen",
+	long_desc = function(self, eff) return "The target is awaiting to be recalled back to Angolwen." end,
+	type = "magical",
+	status = "beneficial",
+	parameters = { },
+	activate = function(self, eff)
+	end,
+	deactivate = function(self, eff)
+		local seen = false
+		-- Check for visible monsters, only see LOS actors, so telepathy wont prevent it
+		core.fov.calc_circle(self.x, self.y, 20, function(_, x, y) return game.level.map:opaque(x, y) end, function(_, x, y)
+			local actor = game.level.map(x, y, game.level.map.ACTOR)
+			if actor and actor ~= self then seen = true end
+		end, nil)
+		if seen then
+			game.log("There are creatures that could be watching you; you cannot take the risk to teleport to Angolwen.")
+			return
+		end
+
+		if self:canBe("worldport") then
+			game.logPlayer(self, "You are yanked out of this place!")
+			game:changeLevel(1, "town-angolwen")
+		else
+			game.logPlayer(self, "Space restabilizes around you.")
+		end
+	end,
+}
+
 newEffect{
 	name = "RESOLVE",
 	desc = "Resolve",
diff --git a/game/modules/tome/data/zones/demon-plane/grids.lua b/game/modules/tome/data/zones/demon-plane/grids.lua
index 73b06c17aa5fc9aee9e2cf050641ca079cb305e7..16f93f3b0b6d0071748b799252727d60be31bbb0 100644
--- a/game/modules/tome/data/zones/demon-plane/grids.lua
+++ b/game/modules/tome/data/zones/demon-plane/grids.lua
@@ -57,12 +57,12 @@ newEntity{
 	on_move = function(self, x, y, who)
 		if who == game.player then
 			require("engine.ui.Dialog"):yesnoPopup("Back and there again", "Enter the portal back to Middle-earth? (Warning loot Draebor first)", function(ret)
-				if ret then
+				if not ret then
 					who.wild_x, who.wild_y = 72, 23
 					game:changeLevel(1, "wilderness")
 					game.logPlayer(who, "#VIOLET#You enter the swirling portal and in the blink of an eye you are back to Middle-earth, on the eastern side of the Mirkwood forest.")
 				end
-			end, "Enter", "Stay")
+			end, "Stay", "Enter")
 		end
 	end,
 }
diff --git a/game/modules/tome/data/zones/demon-plane/npcs.lua b/game/modules/tome/data/zones/demon-plane/npcs.lua
index 15286008f58de155eba516aaed22772e98ed9e07..6d9520099781f407a1b9b0d1bc17d5ba6aae3279 100644
--- a/game/modules/tome/data/zones/demon-plane/npcs.lua
+++ b/game/modules/tome/data/zones/demon-plane/npcs.lua
@@ -49,7 +49,7 @@ newEntity{ define_as = "DRAEBOR",
 
 	body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
 	resolvers.drops{chance=100, nb=4, {ego_chance=100} },
---	resolvers.drops{chance=100, nb=1, {defined="ATHAME_WEST"} },
+	resolvers.drops{chance=100, nb=1, {defined="BOOTS_OF_PHASING"} },
 
 	summon = {
 		{type="demon", number=1, hasxp=false},
diff --git a/game/modules/tome/data/zones/demon-plane/objects.lua b/game/modules/tome/data/zones/demon-plane/objects.lua
index 60dbf0e2416c5cef3c404aa7e9d4fb15f2f5cf3d..192c693a54a64900fc53974ce76be4b53863fd64 100644
--- a/game/modules/tome/data/zones/demon-plane/objects.lua
+++ b/game/modules/tome/data/zones/demon-plane/objects.lua
@@ -21,56 +21,30 @@ load("/data/general/objects/objects.lua")
 
 local Stats = require "engine.interface.ActorStats"
 
--- Artifact, droped (and used!) by Bill the Stone Troll
-
-newEntity{ base = "BASE_GREATMAUL",
-	define_as = "GREATMAUL_BILL_TRUNK",
-	name = "Bill's Tree Trunk", unique=true,
-	desc = [[This is a big nasty looking tree trunk that Bill was using as a weapon. It could still serve this purpose, should you be strong enough to wield it!]],
-	require = { stat = { str=25 }, },
+newEntity{ base = "BASE_LEATHER_BOOT",
+	define_as = "BOOTS_OF_PHASING",
+	unique = true,
+	name = "Shifting Boots",
+	unided_name = "pair of shifting boots",
+	desc = [[Those leather boots can make anybody as annoying as their former possessor, Draebor.]],
+	color = colors.BLUE,
 	rarity = false,
-	metallic = false,
-	cost = 5,
-	combat = {
-		dam = 30,
-		apr = 7,
-		physcrit = 1.5,
-		dammod = {str=1.3},
-		damrange = 1.7,
-	},
-
+	cost = 200,
+	material_level = 5,
 	wielder = {
+		combat_armor = 1,
+		combat_def = 7,
+		fatigue = 2,
+		talents_types_mastery = { ["spell/temporal"] = 0.1 },
+		inc_stats = { [Stats.STAT_CUN] = 8, [Stats.STAT_DEX] = 4, },
 	},
-}
 
-for i = 1, 5 do
-newEntity{ base = "BASE_SCROLL",
-	define_as = "NOTE"..i,
-	name = "tattered paper scrap", lore="trollshaws-note-"..i,
-	desc = [[A paper scrap, left by an adventurer.]],
-	rarity = false,
-	is_magic_device = false,
-	encumberance = 0,
-}
-end
-
-newEntity{ base = "BASE_SHIELD",
-	define_as = "SANGUINE_SHIELD",
-	unided_name = "bloody shield",
-	name = "Sanguine Shield", unique=true,
-	desc = [["Though tarnished and spattered with blood, the emblem of the sun still manages to shine through on this shield.]],
-	require = { stat = { str=39 }, },
-	cost = 120,
-
-	special_combat = {
-		dam = 40,
-		physcrit = 9,
-		dammod = {str=1.2},
-	},
-	wielder = {
-		inc_stats = { [Stats.STAT_CON] = 5, },
-		fatigue = 19,
-		resists = { [DamageType.BLIGHT] = 25, },
-		life_regen = 5,
-	},
+	max_power = 40, power_regen = 1,
+	use_power = { name = "blink to a nearby random location", power = 22, use = function(self, who)
+		game.level.map:particleEmitter(who.x, who.y, 1, "teleport")
+		who:teleportRandom(who.x, who.y, 10 + who:getMag(5))
+		game.level.map:particleEmitter(who.x, who.y, 1, "teleport")
+		game.logSeen(who, "%s uses %s!", who.name:capitalize(), self:getName{no_count=true})
+		return nil, true
+	end}
 }
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 7fa9c98f8aaf58f8971050ee245b1479a2afbe01..aa33c74eda930357c92333807a8f54ccea124734 100644
--- a/game/modules/tome/data/zones/tower-amon-sul/npcs.lua
+++ b/game/modules/tome/data/zones/tower-amon-sul/npcs.lua
@@ -40,6 +40,7 @@ newEntity{ define_as = "SHADE_OF_ANGMAR",
 	max_stamina = 85,
 	rank = 4,
 	size_category = 3,
+	undead = 1,
 	infravision = 20,
 	stats = { str=16, dex=12, cun=14, mag=25, con=16 },
 	instakill_immune = 1,
@@ -77,6 +78,7 @@ newEntity{ define_as = "ANGMAR_FURY",
 	infravision = 20,
 	stats = { str=16, dex=12, cun=14, mag=25, con=16 },
 
+	undead = 1,
 	no_breath = 1,
 	stone_immune = 1,
 	confusion_immune = 1,