diff --git a/game/modules/tome/data/talents/misc/npcs.lua b/game/modules/tome/data/talents/misc/npcs.lua
index 437f5e4215808d13c1203c8ebe280b2e316da890..e1d7d9cc0aaa222bb7a07218d71b73903e2ec0df 100644
--- a/game/modules/tome/data/talents/misc/npcs.lua
+++ b/game/modules/tome/data/talents/misc/npcs.lua
@@ -1728,7 +1728,7 @@ newTalent{
 				game:playSoundNear(game.player, "talents/fireflash")
 
 				for i = x-1, x+1 do for j = y-1, y+1 do
-					local oe = game.level.map(x + i, y + j, Map.TERRAIN)
+					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()
diff --git a/game/modules/tome/data/talents/psionic/slumber.lua b/game/modules/tome/data/talents/psionic/slumber.lua
index 4daaff3d42719ac4c43cfcd108fefb917f8b71d2..db4e4467c9ae9b9ede2b2a4ab4448803e89b73c6 100644
--- a/game/modules/tome/data/talents/psionic/slumber.lua
+++ b/game/modules/tome/data/talents/psionic/slumber.lua
@@ -153,6 +153,10 @@ newTalent{
 			game.logPlayer(self, "Your target must be sleeping in order to enter it's dreamscape.")
 			return nil
 		end
+		if self:reactionToward(target) >= 0 then
+			game.logPlayer(self, "You can't cast this on friendly targets.")
+			return nil
+		end
 
 		game:onTickEnd(function()
 			if self:attr("dead") then return end
diff --git a/game/modules/tome/data/talents/spells/air.lua b/game/modules/tome/data/talents/spells/air.lua
index 0f7fa27cd2c6a0f70b15ab533d3f8ed35dbfad5b..1ba732e34dc943c1c9a4e52ce4936d59b85bcfcd 100644
--- a/game/modules/tome/data/talents/spells/air.lua
+++ b/game/modules/tome/data/talents/spells/air.lua
@@ -198,10 +198,8 @@ newTalent{
 	getTargetCount = function(self, t) return math.floor(self:getTalentLevel(t)) end,
 	getManaDrain = function(self, t) return -1.5 * self:getTalentLevelRaw(t) end,
 	do_storm = function(self, t)
-		if self:getMana() <= 0 then
-			self:forceUseTalent(t.id, {ignore_energy=true})
-			return
-		end
+		local mana = t.getManaDrain(self, t)
+		if self:getMana() <= mana + 1 then return end
 
 		local tgts = {}
 		local grids = core.fov.circle_grids(self.x, self.y, 6, true)
@@ -222,7 +220,7 @@ newTalent{
 			self:project(tg, a.x, a.y, DamageType.LIGHTNING, rng.avg(1, self:spellCrit(t.getDamage(self, t)), 3))
 			game.level.map:particleEmitter(a.x, a.y, tg.radius, "ball_lightning", {radius=tg.radius, tx=x, ty=y})
 			game:playSoundNear(self, "talents/lightning")
-			self:incMana(t.getManaDrain(self, t))
+			self:incMana(mana)
 		end
 	end,
 	activate = function(self, t)
diff --git a/game/modules/tome/data/timed_effects/floor.lua b/game/modules/tome/data/timed_effects/floor.lua
index 7940c49b60e65ee6486c15475a47b7d67274b090..8ca77067dff948011599e8d30a825bd3e405e81b 100644
--- a/game/modules/tome/data/timed_effects/floor.lua
+++ b/game/modules/tome/data/timed_effects/floor.lua
@@ -53,7 +53,7 @@ floorEffect{
 	desc = "Font of Life", image = "talents/grand_arrival.png",
 	long_desc = function(self, eff) return ("The target is near a font of life, granting +%0.2f life regeneration, -%0.2f equilibrium regeneration, +%0.2f stamina regeneration and +%0.2f psi regeneration. Undeads are not affected."):format(eff.power, eff.power, eff.power, eff.power) end,
 	activate = function(self, eff)
-		if self:attr("undead") then return end
+		if self:attr("undead") then eff.power = 0 return end
 		eff.power = 3 + game.zone:level_adjust_level(game.level, game.zone, "object") / 2
 		self:effectTemporaryValue(eff, "life_regen", eff.power)
 		self:effectTemporaryValue(eff, "stamina_regen", eff.power)
diff --git a/game/modules/tome/dialogs/ShowStore.lua b/game/modules/tome/dialogs/ShowStore.lua
index 7c6c03f8e65ceb6fd2a7cf0c9362dbdd0d1c552f..038cc4b9479522edeb15d9e5e1727ee5a60f003a 100644
--- a/game/modules/tome/dialogs/ShowStore.lua
+++ b/game/modules/tome/dialogs/ShowStore.lua
@@ -53,7 +53,7 @@ function _M:init(title, store_inven, actor_inven, store_filter, actor_filter, ac
 
 	local direct_draw= function(item, x, y, w, h, total_w, total_h, loffset_x, loffset_y, dest_area)
 		-- if there is object and is withing visible bounds
-		if item.object and total_h + h > loffset_y and total_h < loffset_y + dest_area.h then
+		if core.display.FBOActive() and item.object and total_h + h > loffset_y and total_h < loffset_y + dest_area.h then
 			local clip_y_start, clip_y_end = 0, 0
 			-- if it started before visible area then compute its top clip
 			if total_h < loffset_y then