diff --git a/game/modules/tome/data/talents/uber/wil.lua b/game/modules/tome/data/talents/uber/wil.lua
index 1bd3e6c3aee9f0417855ddd26d473584c9287cb3..52bbf5457ae5de9c66e090e21134f5567f8332f1 100644
--- a/game/modules/tome/data/talents/uber/wil.lua
+++ b/game/modules/tome/data/talents/uber/wil.lua
@@ -53,34 +53,40 @@ uberTalent{
 				game.level.map:particleEmitter(x, y, 10, "ball_fire", {radius=2})
 				game:playSoundNear(game.player, "talents/fireflash")
 
+				local grids = {}
 				for i = x-1, x+1 do for j = y-1, y+1 do
 					local oe = game.level.map(i, j, Map.TERRAIN)
 					if oe and not oe:attr("temporary") and
 					(core.fov.distance(x, y, i, j) < 1 or rng.percent(40)) and (game.level.map:checkEntity(i, j, engine.Map.TERRAIN, "dig") or game.level.map:checkEntity(i, j, engine.Map.TERRAIN, "grow")) then
 						local g = terrains.LAVA_FLOOR:clone()
 						g:resolve() g:resolve(nil, true)
-						g.temporary = 8
-						g.x = i g.y = j
-						g.canAct = false
-						g.energy = { value = 0, mod = 1 }
-						g.old_feat = game.level.map(i, j, engine.Map.TERRAIN)
-						g.useEnergy = mod.class.Trap.useEnergy
-						g.act = function(self)
-							self:useEnergy()
-							self.temporary = self.temporary - 1
-							if self.temporary <= 0 then
-								game.level.map(self.x, self.y, engine.Map.TERRAIN, self.old_feat)
-								game.level:removeEntity(self)
-								game.nicer_tiles:updateAround(game.level, self.x, self.y)
-							end
-						end
 						game.zone:addEntity(game.level, g, "terrain", i, j)
-						game.level:addEntity(g)
+						grids[#grids+1] = {x=i,y=j,oe=oe}
 					end
 				end end
 				for i = x-1, x+1 do for j = y-1, y+1 do
 					game.nicer_tiles:updateAround(game.level, i, j)
 				end end
+				for _, spot in ipairs(grids) do
+					local i, j = spot.x, spot.y
+					local g = game.level.map(i, j, Map.TERRAIN)
+					g.temporary = 8
+					g.x = i g.y = j
+					g.canAct = false
+					g.energy = { value = 0, mod = 1 }
+					g.old_feat = spot.oe
+					g.useEnergy = mod.class.Trap.useEnergy
+					g.act = function(self)
+						self:useEnergy()
+						self.temporary = self.temporary - 1
+						if self.temporary <= 0 then
+							game.level.map(self.x, self.y, engine.Map.TERRAIN, self.old_feat)
+							game.level:removeEntity(self)
+							game.nicer_tiles:updateAround(game.level, self.x, self.y)
+						end
+					end
+					game.level:addEntity(g)
+				end
 
 				src:project({type="ball", radius=2, selffire=false}, x, y, engine.DamageType.FIRE, dam/2)
 				src:project({type="ball", radius=2, selffire=false}, x, y, engine.DamageType.PHYSICAL, dam/2)