diff --git a/game/modules/tome/data/talents/corruptions/shadowflame.lua b/game/modules/tome/data/talents/corruptions/shadowflame.lua
index 61194386df198daca76b7a4cff03b9108d859241..fcca631e4128854eef4c94c0c6d625ea445929e5 100644
--- a/game/modules/tome/data/talents/corruptions/shadowflame.lua
+++ b/game/modules/tome/data/talents/corruptions/shadowflame.lua
@@ -33,6 +33,7 @@ newTalent{
 	info = function(self, t)
 		return ([[Turn into a wraith, allowing you to walk through walls (but not preventing suffocation) for %d turns.
 		Also increases your Defense and Armour by %d and %d, respectively.
+		If you are still in a wall when the effect ends you will randomly teleport.
 		The bonuses will increase with your Spellpower.]]):
 		format(t.getDuration(self, t), self:combatTalentSpellDamage(t, 5, 19), self:combatTalentSpellDamage(t, 5, 15))
 	end,
diff --git a/game/modules/tome/data/timed_effects/magical.lua b/game/modules/tome/data/timed_effects/magical.lua
index 963931d1af5fc083b09a0e770a31746999d690d9..b2563f4ad086260129f918b5c3c29c20acd80fe6 100644
--- a/game/modules/tome/data/timed_effects/magical.lua
+++ b/game/modules/tome/data/timed_effects/magical.lua
@@ -954,6 +954,9 @@ newEffect{
 		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
+			self:teleportRandom(self.x, self.y, 50)
+		end
 	end,
 }
 
diff --git a/src/particles.c b/src/particles.c
index 3482b2fffe6b8bf105137b87123ac7285a6ba57c..f84515aff52d402c9714849ebeb2121ad21c6a23 100644
--- a/src/particles.c
+++ b/src/particles.c
@@ -204,6 +204,7 @@ static int particles_die(lua_State *L)
 // Runs into main thread
 static void particles_draw(particles_type *ps, float x, float y, float zoom) 
 {
+	if (!ps->alive || !ps->vertices || !ps->colors || !ps->texcoords) return;
 	GLfloat *vertices = ps->vertices;
 	GLfloat *colors = ps->colors;
 	GLshort *texcoords = ps->texcoords;