diff --git a/game/engine/interface/ActorInventory.lua b/game/engine/interface/ActorInventory.lua
index cd93501518efc87638a757229785c71ff5229d94..e960d57752b221eab82e86fe8ba426deaf49c8b3 100644
--- a/game/engine/interface/ActorInventory.lua
+++ b/game/engine/interface/ActorInventory.lua
@@ -105,10 +105,6 @@ function _M:addObject(inven_id, o)
 	return true
 end
 
---- Called upon adding an object
-function _M:onAddObject(o)
-end
-
 --- Rerturns the position of an item in the given inventory, or nil
 function _M:itemPosition(inven, o)
 	inven = self:getInven(inven)
@@ -176,8 +172,25 @@ function _M:removeObject(inven, item, no_unstack)
 	return o, finish
 end
 
+--- Called upon adding an object
+function _M:onAddObject(o)
+	-- Apply carrier properties
+	if o.carrier then
+		o.carried = {}
+		for k, e in pairs(o.carrier) do
+			o.carried[k] = self:addTemporaryValue(k, e)
+		end
+	end
+end
+
 --- Called upon removing an object
 function _M:onRemoveObject(o)
+	if o.carried then
+		for k, id in pairs(o.carried) do
+			self:removeTemporaryValue(k, id)
+		end
+	end
+	o.carried = nil
 end
 
 --- Drop an object on the floor
diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index a210930e70c87771411cb9f68acb37c32e44d0d8..64d9da091fdd1b06a3f6aee509f22ee5da28f8c4 100644
--- a/game/modules/tome/class/Game.lua
+++ b/game/modules/tome/class/Game.lua
@@ -483,6 +483,18 @@ function _M:setupCommands()
 --				self.player:grantQuest("escort-duty")
 			end
 		end,
+		[{"_f","ctrl"}] = function()
+			if config.settings.tome.cheat then
+				for i, e in ipairs(self.zone.object_list) do
+					if e.unique and e.rarity then
+						local a = self.zone:finishEntity(self.level, "object", e)
+						a:identify(true)
+						self.zone:addEntity(self.level, a, "object", self.player.x, self.player.y)
+					end
+				end
+				self.logPlayer(self.player, "All world artifacts created.")
+			end
+		end,
 	}
 	self.key:addBinds
 	{
@@ -555,8 +567,8 @@ function _M:setupCommands()
 				if self.player:attr("never_move") then self.log("You can not currently leave the level.") return end
 
 				local stop = {}
-				for eff_id, p in pairs(game.player.tmp) do
-					local e = game.player.tempeffect_def[eff_id]
+				for eff_id, p in pairs(self.player.tmp) do
+					local e = self.player.tempeffect_def[eff_id]
 					if e.status == "detrimental" then stop[#stop+1] = e.desc end
 				end
 
diff --git a/game/modules/tome/data/general/objects/world-artifacts.lua b/game/modules/tome/data/general/objects/world-artifacts.lua
index c85d8bbd8f1d05b8e0c78dba9cffe5b26f4a2cab..1aea25624cb15976c43b5f1ddace6c6e8583dcd0 100644
--- a/game/modules/tome/data/general/objects/world-artifacts.lua
+++ b/game/modules/tome/data/general/objects/world-artifacts.lua
@@ -18,6 +18,7 @@
 -- darkgod@te4.org
 
 local Stats = require "engine.interface.ActorStats"
+local Talents = require "engine.interface.ActorTalents"
 
 -- This file describes artifacts not bound to a special location, they can be found anywhere
 newEntity{ base = "BASE_STAFF",
@@ -244,6 +245,27 @@ newEntity{ base = "BASE_LONGBOW",
 	},
 }
 
+newEntity{ base = "BASE_SLING",
+	unique = true,
+	name = "Gift to the Shire",
+	unided_name = "well-made sling",
+	desc = [[A sling with an inscription on its handle 'Given in honour of the Friendship between the King of Men and the Mayor of the Shire, and token of the alliance shared thencefrom.']],
+	level_range = {15, 25},
+	rarity = 200,
+	require = { stat = { dex=26 }, },
+	cost = 350,
+	material_level = 3,
+	combat = {
+		range = 18,
+		physspeed = 0.7,
+	},
+	wielder = {
+		inc_stats = { [Stats.STAT_DEX] = 4, [Stats.STAT_CUN] = 3,  },
+		inc_damage={ [DamageType.PHYSICAL] = 15 },
+		talent_cd_reduction={[Talents.T_STEADY_SHOT]=1, [Talents.T_EYE_SHOT]=2},
+	},
+}
+
 newEntity{ base = "BASE_LONGSWORD",
 	unique = true,
 	name = "Glamdring, the Long Sword 'Foe-Hammer'",
@@ -275,3 +297,122 @@ newEntity{ base = "BASE_LONGSWORD",
 		esp = {["humanoid/orc"]=1},
 	},
 }
+
+newEntity{ base = "BASE_LEATHER_BOOT",
+	unique = true,
+	name = "Boots of Tom Bombadil",
+	uided_name = "pair of yellow boots",
+	desc = [[Old Tom Bombadil is a merry fellow.
+Bright blue his jacket is, and his boots are yellow.]],
+	color = colors.YELLOW,
+	level_range = {1, 20},
+	rarity = 200,
+	cost = 100,
+	material_level = 2,
+	wielder = {
+		combat_armor = 1,
+		combat_def = 2,
+		fatigue = 2,
+		talents_types_mastery = { ["cunning/survival"] = 0.2 },
+		inc_stats = { [Stats.STAT_CUN] = 3, },
+	},
+
+	max_power = 50, power_regen = 1,
+	use_power = { name = "speed boost", power = 50,
+		use = function(self, who)
+			who:setEffect(who.EFF_SPEED, 8, {power=0.20 + who:getCun() / 80})
+			game.logSeen(who, "%s speeds up!", who.name:capitalize())
+		end
+	},
+}
+
+newEntity{ base = "BASE_SHIELD",
+	unique = true,
+	name = "Dragon Shield of Smaug",
+	unided_name = "dragon shield",
+	desc = [[This large shield was made using scales of the dragon Smaug, killed in the Third Age by Bard I of Esgaroth.]],
+	color = colors.LIGHT_RED,
+	metallic = false,
+	level_range = {27, 35},
+	rarity = 300,
+	require = { stat = { str=28 }, },
+	cost = 350,
+	material_level = 5,
+	special_combat = {
+		dam = 58,
+		physcrit = 4.5,
+		dammod = {str=1},
+		damtype = DamageType.FIRE,
+	},
+	wielder = {
+		resists={[DamageType.FIRE] = 35},
+		on_melee_hit={[DamageType.FIRE] = 17},
+		combat_armor = 4,
+		combat_def = 16,
+		combat_def_ranged = 15,
+		fatigue = 20,
+	},
+}
+
+newEntity{ base = "BASE_LIGHT_ARMOR",
+	unique = true,
+	name = "Leather Armour of Eowen Nazgul-bane",
+	unided_name = "blackened leather armour",
+	level_range = {25, 40},
+	rarity = 270,
+	cost = 200,
+	require = { stat = { str=22 }, },
+	material_level = 4,
+	wielder = {
+		combat_def = 6,
+		combat_armor = 7,
+		fatigue = 7,
+		stun_immune = 0.7,
+		knockback_immune = 0.7,
+		inc_stats = { [Stats.STAT_WIL] = 5, [Stats.STAT_CON] = 4, },
+		resists={[DamageType.BLIGHT] = 35},
+	},
+}
+
+newEntity{
+	unique = true,
+	type = "misc", subtype="egg",
+	unided_name = "dark egg",
+	name = "Mummified Egg-sac of Ungoliant",
+	level_range = {20, 35},
+	rarity = 190,
+	display = "*", color=colors.DARK_GREY, image = "object/bloodstone.png",
+	encumber = 2,
+	desc = [[By what strange fate this survived, you cannot imagine. Dry and dusty to the touch, it still seems to retain some of its foul mother's unending hunger.]],
+
+	carrier = {
+		lite = -2,
+	},
+	max_power = 100, power_regen = 1,
+	use_power = { name = "summon spiders", power = 80, use = function(self, who)
+		local NPC = require "mod.class.NPC"
+		local list = NPC:loadList("/data/general/npcs/spider.lua")
+
+		for i = 1, 2 do
+			-- Find space
+			local x, y = util.findFreeGrid(who.x, who.y, 5, true, {[engine.Map.ACTOR]=true})
+			if not x then break end
+
+			local e
+			repeat e = rng.tableRemove(list)
+			until not e.unique and e.rarity
+
+			local spider = game.zone:finishEntity(game.level, "actor", e)
+			spider.faction = who.faction
+			spider.ai = "summoned"
+			spider.ai_real = "dumb_talented_simple"
+			spider.summoner = who
+			spider.summon_time = 10
+
+			game.zone:addEntity(game.level, spider, "actor", x, y)
+			game.level.map:particleEmitter(x, y, 1, "slime")
+
+			game:playSoundNear(who, "talents/slime")
+		end
+	end },
+}
diff --git a/game/modules/tome/data/zones/trollshaws/objects.lua b/game/modules/tome/data/zones/trollshaws/objects.lua
index aa836bbfc49da4beb82fcf1e2638d61877530775..ffee2c398b4a519cd4e59f497b5912742eea82d6 100644
--- a/game/modules/tome/data/zones/trollshaws/objects.lua
+++ b/game/modules/tome/data/zones/trollshaws/objects.lua
@@ -26,6 +26,7 @@ newEntity{ base = "BASE_GREATMAUL",
 	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 }, },
+	rarity = false,
 	cost = 5,
 	combat = {
 		dam = 30,