diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index 00767a5b614919ee0cc06e59cde981131791f997..5ed29c2acba1fbcb5a3aa1d85dd9cbe302f6efd4 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -183,6 +183,29 @@ function _M:probabilityTravel(x, y, dist)
 	return true
 end
 
+--- Reveals location surrounding the actor
+function _M:doQuake(tg, x, y)
+	local locs = {}
+	local ms = {}
+	self:project(tg, x, y, function(tx, ty)
+		locs[#locs+1] = {x=tx,y=ty}
+		ms[#ms+1] = game.level.map.map[tx + ty * game.level.map.w]
+	end)
+
+	while #locs > 0 do
+		local l = rng.tableRemove(locs)
+		local m = rng.tableRemove(ms)
+		game.level.map.map[l.x + l.y * game.level.map.w] = m
+		for k, e in pairs(m) do
+			if e.x and e.y and e.move then e:move(l.x, l.y, true)
+			elseif e.x and e.y then e.x, e.ly = l.x, l.y end
+		end
+	end
+	game.level.map:cleanFOV()
+	game.level.map.changed = true
+	game.level.map:redisplay()
+end
+
 --- Reveals location surrounding the actor
 function _M:magicMap(radius)
 	radius = math.floor(radius)
diff --git a/game/modules/tome/data/talents/gifts/cold-drake.lua b/game/modules/tome/data/talents/gifts/cold-drake.lua
index 3e8651cfc458c19798067f0d1180b11342965c7a..f761f251073b1b1c34ceccc1e0e60ec21839ac6c 100644
--- a/game/modules/tome/data/talents/gifts/cold-drake.lua
+++ b/game/modules/tome/data/talents/gifts/cold-drake.lua
@@ -1,3 +1,5 @@
+local Object = require "engine.Object"
+
 newTalent{
 	name = "Ice Claw",
 	type = {"wild-gift/cold-drake", 1},
@@ -14,7 +16,7 @@ newTalent{
 		local x, y, target = self:getTarget(tg)
 		if not x or not y or not target then return nil end
 		if math.floor(core.fov.distance(self.x, self.y, x, y)) > 1 then return nil end
-		self:attackTargetWith(target, DamageType.COLD, 1.4 + self:getTalentLevel(t) / 8, true)
+		self:attackTarget(target, DamageType.COLD, 1.4 + self:getTalentLevel(t) / 8, true)
 		return true
 	end,
 	info = function(self, t)
@@ -59,11 +61,38 @@ newTalent{
 	cooldown = 30,
 	range = 20,
 	action = function(self, t)
+		local tg = {type="bolt", range=self:getTalentRange(t), nolock=true, talent=t}
+		local x, y = self:getTarget(tg)
+		if not x or not y then return nil end
+		local _ _, x, y = self:canProject(tg, x, y)
+		if game.level.map:checkEntity(x, y, Map.TERRAIN, "block_move") then return nil end
+
+		local e = Object.new{
+			old_feat = game.level.map(x, y, Map.TERRAIN),
+			name = "summoned ice wall",
+			display = '#', color=colors.LIGHT_BLUE,
+			always_remember = true,
+			block_move = true,
+			block_sight = false,
+			temporary = 4 + self:getTalentLevel(t),
+			x = x, y = y,
+			canAct = false,
+			act = function(self)
+				self:useEnergy()
+				self.temporary = self.temporary - 1
+				if self.temporary <= 0 then
+					game.level.map(self.x, self.y, Map.TERRAIN, self.old_feat)
+					game.level:removeEntity(self)
+					game.level.map:redisplay()
+				end
+			end
+		}
+		game.level:addEntity(e)
+		game.level.map(x, y, Map.TERRAIN, e)
 		return true
 	end,
 	info = function(self, t)
-		return ([[You slam your foot onto the ground, shaking the area around you in a radius of %d, damage and knocking back your foes.
-		The damage will increase with the Strength stat]]):format(2 + self:getTalentLevel(t) / 2)
+		return ([[Summons an icy wall for %d turns. Ice walls are transparent.]]):format(4 + self:getTalentLevel(t))
 	end,
 }
 
diff --git a/game/modules/tome/data/talents/gifts/fire-drake.lua b/game/modules/tome/data/talents/gifts/fire-drake.lua
index 608da9c6b118815ff6c4bd923cf234303ea8aa26..596a2f0837ed39c748d92c12dc91ee3c6e5f1cf3 100644
--- a/game/modules/tome/data/talents/gifts/fire-drake.lua
+++ b/game/modules/tome/data/talents/gifts/fire-drake.lua
@@ -3,7 +3,7 @@ newTalent{
 	type = {"wild-gift/fire-drake", 1},
 	require = gifts_req1,
 	points = 5,
-	message = "@Source@ burrows into the ground!",
+	message = "@Source@ roars!",
 	equilibrium = 3,
 	cooldown = 20,
 	range = 5,
diff --git a/game/modules/tome/data/talents/gifts/sand-drake.lua b/game/modules/tome/data/talents/gifts/sand-drake.lua
index c9aea813af0dfb95f4b5a27ff56efa59a80a8656..77a698a2373139b55363c28a549af9d1ca068e77 100644
--- a/game/modules/tome/data/talents/gifts/sand-drake.lua
+++ b/game/modules/tome/data/talents/gifts/sand-drake.lua
@@ -52,8 +52,9 @@ newTalent{
 	},
 	range = 20,
 	action = function(self, t)
-		local tg = {type="ball", range=0, friendlyfire=false, radius=2 + self:getTalentLevel(t) / 2, talent=t}
+		local tg = {type="ball", range=0, friendlyfire=false, radius=2 + self:getTalentLevel(t) / 2, talent=t, no_restrict=true}
 		self:project(tg, self.x, self.y, DamageType.PHYSKNOCKBACK, {dam=self:combatDamage() * 0.8, dist=4})
+		self:doQuake(tg, self.x, self.y)
 		return true
 	end,
 	info = function(self, t)
diff --git a/game/modules/tome/data/talents/spells/earth.lua b/game/modules/tome/data/talents/spells/earth.lua
index 6175ebe09d9f45211b70dbb1e2f017e83cc6ebfd..348c7bdb85df8e8e5846d0dfb44fc981daab54df 100644
--- a/game/modules/tome/data/talents/spells/earth.lua
+++ b/game/modules/tome/data/talents/spells/earth.lua
@@ -77,6 +77,7 @@ newTalent{
 newTalent{
 	name = "Stone Wall",
 	type = {"spell/earth",4},
+	require = spells_req4,
 	points = 5,
 	cooldown = 12,
 	mana = 70,
@@ -123,7 +124,6 @@ newTalent{
 
 		return true
 	end,
-	require = { stat = { mag=34 } },
 	info = function(self, t)
 		return ([[Entombs yourself in a wall of stone for %d turns.]]):format(2 + self:combatSpellpower(0.03) * self:getTalentLevel(t))
 	end,