diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index bcf13c7b2d9c0c6a6b4596ade95a8458abcd53b1..5f5b476c26357ebebbe9fc74ec7ef592bf208aae 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -138,6 +138,7 @@ end
 
 --- Reveals location surrounding the actor
 function _M:magicMap(radius)
+	radius = math.floor(radius)
 	for i = self.x - radius, self.x + radius do for j = self.y - radius, self.y + radius do
 		if game.level.map:isBound(i, j) and core.fov.distance(self.x, self.y, i, j) < radius then
 			game.level.map.remembers(i, j, true)
diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index d350399c7b0e435578678d6671559a16aa8d8e19..ed8fe9ab3c9f9377aac62c84061c35cc7a8e3e8c 100644
--- a/game/modules/tome/class/Game.lua
+++ b/game/modules/tome/class/Game.lua
@@ -137,7 +137,7 @@ end
 function _M:save()
 	return class.save(self, {w=true, h=true, zone=true, player=true, level=true, entities=true,
 		energy_to_act=true, energy_per_tick=true, turn=true, paused=true, save_name=true,
-		always_target=true, gfxmode=true, uniques=true
+		always_target=true, gfxmode=true, uniques=true, object_known_types=true,
 	}, true)
 end
 
diff --git a/game/modules/tome/data/general/objects/scrolls.lua b/game/modules/tome/data/general/objects/scrolls.lua
index e37320230fe1bb79581eb3b3583fbf77231666ee..9192f09babd3718b76d2375072fee33e87c49bd0 100644
--- a/game/modules/tome/data/general/objects/scrolls.lua
+++ b/game/modules/tome/data/general/objects/scrolls.lua
@@ -1,7 +1,7 @@
 newEntity{
 	define_as = "BASE_SCROLL",
 	type = "scroll", subtype="scroll",
-	unided_name = "scroll",
+	unided_name = "scroll",, id_by_type = true,
 	display = "?", color=colors.WHITE, image="object/scroll-0x0.png",
 	encumber = 0.1,
 	stacking = true,
@@ -30,7 +30,9 @@ newEntity{ base = "BASE_SCROLL",
 	cost = 3,
 
 	use_simple = { name="teleport you randomly over a short distance", use = function(self, who)
+		game.level.map:particleEmitter(who.x, who.y, 1, "teleport")
 		who:teleportRandom(who.x, who.y, 15)
+		game.level.map:particleEmitter(who.x, who.y, 1, "teleport")
 		game.logSeen(who, "%s reads a %s!", who.name:capitalize(), self:getName())
 		return "destroy", true
 	end}
@@ -43,7 +45,9 @@ newEntity{ base = "BASE_SCROLL",
 	cost = 4,
 
 	use_simple = { name="teleport you anywhere and the level, randomly", use = function(self, who)
+		game.level.map:particleEmitter(who.x, who.y, 1, "teleport")
 		who:teleportRandom(who.x, who.y, 200)
+		game.level.map:particleEmitter(who.x, who.y, 1, "teleport")
 		game.logSeen(who, "%s reads a %s!", who.name:capitalize(), self:getName())
 		return "destroy", true
 	end}
diff --git a/game/modules/tome/data/talents/spells/conveyance.lua b/game/modules/tome/data/talents/spells/conveyance.lua
index 162649ec6bf1dba6d9a403b0a2ba6c3ec662d5ff..530aeff124f3fc7e059f1b6c4aef23589a5194ae 100644
--- a/game/modules/tome/data/talents/spells/conveyance.lua
+++ b/game/modules/tome/data/talents/spells/conveyance.lua
@@ -26,9 +26,13 @@ newTalent{
 			-- Target code doesnot restrict the target coordinates to the range, it lets the poject function do it
 			-- but we cant ...
 			x, y = game.target:pointAtRange(self.x, self.y, x, y, 10 + self:combatSpellpower(0.1))
+			game.level.map:particleEmitter(target.x, target.y, 1, "teleport")
 			target:teleportRandom(x, y, 7 - self:getTalentLevel(t))
+			game.level.map:particleEmitter(target.x, target.y, 1, "teleport")
 		else
+			game.level.map:particleEmitter(target.x, target.y, 1, "teleport")
 			target:teleportRandom(x, y, 10 + self:combatSpellpower(0.1))
+			game.level.map:particleEmitter(target.x, target.y, 1, "teleport")
 		end
 		return true
 	end,
@@ -68,9 +72,13 @@ newTalent{
 			-- Target code doesnot restrict the target coordinates to the range, it lets the poject function do it
 			-- but we cant ...
 			x, y = game.target:pointAtRange(self.x, self.y, x, y, 10 + self:combatSpellpower(0.1))
+			game.level.map:particleEmitter(target.x, target.y, 1, "teleport")
 			target:teleportRandom(x, y, 20 - self:getTalentLevel(t))
+			game.level.map:particleEmitter(target.x, target.y, 1, "teleport")
 		else
+			game.level.map:particleEmitter(target.x, target.y, 1, "teleport")
 			target:teleportRandom(x, y, 100 + self:combatSpellpower(1))
+			game.level.map:particleEmitter(target.x, target.y, 1, "teleport")
 		end
 		return true
 	end,