diff --git a/game/engines/default/engine/Map.lua b/game/engines/default/engine/Map.lua
index 26de64c35f3ec2340be77aa9862fdf6b1f0f71c0..d0a09200ce184829fe5d5d66c09b98b580bbcd84 100644
--- a/game/engines/default/engine/Map.lua
+++ b/game/engines/default/engine/Map.lua
@@ -388,6 +388,11 @@ function _M:redisplay()
 	end end
 end
 
+-- Schedules a redisplay, use this in places where multiple redisplays might happen on the same tick
+function _M:scheduleRedisplay()
+	game:onTickEnd(function() self:redisplay() end, "map_redisplay")
+end
+
 --- Closes things in the object to allow it to be garbage collected
 -- Map objects are NOT automatically garbage collected because they contain FOV C structure, which themselves have a reference
 -- to the map. Cyclic references! BAD BAD BAD !<br/>
diff --git a/game/modules/tome/data/talents/chronomancy/anomalies.lua b/game/modules/tome/data/talents/chronomancy/anomalies.lua
index 270b3e9c16f89bf1d25c142c3a050ae630832dcc..394a0254dc5531e14d1371d3f8f34f4edad21c10 100644
--- a/game/modules/tome/data/talents/chronomancy/anomalies.lua
+++ b/game/modules/tome/data/talents/chronomancy/anomalies.lua
@@ -1078,12 +1078,12 @@ newTalent{
 							game.level.map(self.x, self.y, engine.Map.TERRAIN, self.old_feat)
 							game.nicer_tiles:updateAround(game.level, self.x, self.y)
 							game.level:removeEntity(self)
---							game.level.map:redisplay()
+							game.level.map:scheduleRedisplay()
 						end
 					end,
 					dig = function(src, x, y, old)
 						game.level:removeEntity(old)
---						game.level.map:redisplay()
+						game.level.map:scheduleRedisplay()
 						return nil, old.old_feat
 					end,
 					summoner_gain_exp = true,
diff --git a/game/modules/tome/data/talents/cursed/darkness.lua b/game/modules/tome/data/talents/cursed/darkness.lua
index 18550c01a6ad74ced18ecb86ca77146cbc2b657d..13f37c0070d57ca2e807560d88a96ef1acba7dbd 100644
--- a/game/modules/tome/data/talents/cursed/darkness.lua
+++ b/game/modules/tome/data/talents/cursed/darkness.lua
@@ -236,7 +236,7 @@ newTalent{
 					game.level.map:remove(self.x, self.y, Map.TERRAIN+3)
 					game.level:removeEntity(self, true)
 					self.creepingDark = nil
-					--game.level.map:redisplay()
+					game.level.map:scheduleRedisplay()
 				else
 					self.duration = self.duration - 1
 
diff --git a/game/modules/tome/data/talents/spells/earth.lua b/game/modules/tome/data/talents/spells/earth.lua
index 498efd4b484f6cb63200eeb019099f987f442632..a6ec4cc911e5d881219a52fd78e211acdbe5f35e 100644
--- a/game/modules/tome/data/talents/spells/earth.lua
+++ b/game/modules/tome/data/talents/spells/earth.lua
@@ -179,12 +179,12 @@ newTalent{
 							game.level.map(self.x, self.y, engine.Map.TERRAIN, self.old_feat)
 							game.nicer_tiles:updateAround(game.level, self.x, self.y)
 							game.level:removeEntity(self)
---							game.level.map:redisplay()
+							game.level.map:scheduleRedisplay()
 						end
 					end,
 					dig = function(src, x, y, old)
 						game.level:removeEntity(old)
---						game.level.map:redisplay()
+						game.level.map:scheduleRedisplay()
 						return nil, old.old_feat
 					end,
 					summoner_gain_exp = true,
diff --git a/game/modules/tome/data/talents/spells/fire-alchemy.lua b/game/modules/tome/data/talents/spells/fire-alchemy.lua
index bef2597da6219fbafc8ae2806c8018fee578b198..bba4e110c048e605e699cf172146913ed9c2d75e 100644
--- a/game/modules/tome/data/talents/spells/fire-alchemy.lua
+++ b/game/modules/tome/data/talents/spells/fire-alchemy.lua
@@ -82,7 +82,7 @@ newTalent{
 						if self.temporary <= 0 then
 							game.level.map:remove(self.x, self.y, engine.Map.TERRAIN+2)
 							game.level:removeEntity(self)
-							game.level.map:redisplay()
+							game.level.map:scheduleRedisplay()
 						end
 					end,
 					summoner_gain_exp = true,
@@ -100,6 +100,7 @@ newTalent{
 			end)
 		end
 		game:playSoundNear(self, "talents/breath")
+		game.level.map:redisplay()
 		return true
 	end,
 	info = function(self, t)