diff --git a/game/engines/default/engine/Entity.lua b/game/engines/default/engine/Entity.lua
index ed9bb3c97f2a5fff32846db89198ee231c763402..dad642e16ff379ef1d53988cc627054477143b0b 100644
--- a/game/engines/default/engine/Entity.lua
+++ b/game/engines/default/engine/Entity.lua
@@ -324,6 +324,8 @@ function _M:makeMapObject(tiles, idx)
 		end
 	end
 
+	self._mo, self.z, last_mo = self:alterMakeMapObject(tiles, self._mo, self.z, last_mo)
+
 	-- Setup shader
 	if tiles.use_images and core.shader.active() and self.shader then
 		local shad = Shader.new(self.shader, self.shader_args)
@@ -333,8 +335,6 @@ function _M:makeMapObject(tiles, idx)
 		end
 	end
 
-	self._mo, self.z, last_mo = self:alterMakeMapObject(tiles, self._mo, self.z, last_mo)
-
 	return self._mo, self.z, last_mo
 end
 
diff --git a/game/modules/tome/class/FortressPC.lua b/game/modules/tome/class/FortressPC.lua
index fc1c16a956f26e707797d4a005e1923062e5326d..f5c41a39751a493cf230fed325cd2f17f3b87fca 100644
--- a/game/modules/tome/class/FortressPC.lua
+++ b/game/modules/tome/class/FortressPC.lua
@@ -64,7 +64,7 @@ function _M:init(t, no_default)
 
 	self:addParticles(Particles.new("shertul_fortress_orbiters", 1, {}))
 	if core.shader.active(4) then
-		self:addParticles(Particles.new("shader_shield", 1, {size_factor=1.8, img="shield4"}, {type="shield", ellipsoidalFactor=1.5, shieldIntensity=0.18, color={0xbe/255, 0x3e/255, 0xf9/255}}))
+		self:addParticles(Particles.new("shader_shield", 1, {size_factor=1.8, img="shield5"}, {type="shield", ellipsoidalFactor=1.5, shieldIntensity=0.18, color={0xbe/255, 0x3e/255, 0xf9/255}}))
 	end
 	if core.shader.allow("distort") then self:addParticles(Particles.new("shertul_fortress_engine", 1, {})) end
 end
diff --git a/game/modules/tome/data/gfx/shaders/moving_transparency.lua b/game/modules/tome/data/gfx/shaders/moving_transparency.lua
index df58ab1f5d0620725bf0d0450e956f17b3321505..0cac4f29e70702a1e60825ea2dc8c4495899145d 100644
--- a/game/modules/tome/data/gfx/shaders/moving_transparency.lua
+++ b/game/modules/tome/data/gfx/shaders/moving_transparency.lua
@@ -21,8 +21,8 @@ return {
 	frag = "moving_transparency",
 	vert = nil,
 	args = {
-		a_min = 0.4,
-		a_max = 1.5,
+		a_min = a_min or 0.4,
+		a_max = a_max or 1.5,
 		base = base or 0.3,
 		time_factor = time_factor or 3000,
 		p2 = p2 or {1,1},
diff --git a/game/modules/tome/data/timed_effects/magical.lua b/game/modules/tome/data/timed_effects/magical.lua
index 16d8e1a01e49af44ca06795b9f02c87ad0b4f535..75195c986daedc852e32aed40383b45a76e68623 100644
--- a/game/modules/tome/data/timed_effects/magical.lua
+++ b/game/modules/tome/data/timed_effects/magical.lua
@@ -975,12 +975,24 @@ newEffect{
 		eff.tmpid = self:addTemporaryValue("can_pass", {pass_wall=20})
 		eff.defid = self:addTemporaryValue("combat_def", eff.def)
 		eff.armid = self:addTemporaryValue("combat_armor", eff.armor)
+		if not self.shader then
+			eff.set_shader = true
+			self.shader = "moving_transparency"
+			self.shader_args = { a_min=0.3, a_max=0.8, time_factor = 3000 }
+			self:removeAllMOs()
+			game.level.map:updateMap(self.x, self.y)
+		end
 	end,
 	deactivate = function(self, eff)
+		if eff.set_shader then
+			self.shader = nil
+			self:removeAllMOs()
+			game.level.map:updateMap(self.x, self.y)
+		end
 		self:removeTemporaryValue("can_pass", eff.tmpid)
 		self:removeTemporaryValue("combat_def", eff.defid)
 		self:removeTemporaryValue("combat_armor", eff.armid)
-		if not self:canMove(self.x, self.y) then
+		if not self:canMove(self.x, self.y, true) then
 			self:teleportRandom(self.x, self.y, 50)
 		end
 	end,