diff --git a/game/modules/tome/data/general/npcs/orc-rak-shor.lua b/game/modules/tome/data/general/npcs/orc-rak-shor.lua
index 7f34508e080083f24871ac1f86049a4c32e83cfb..ba76a7ce6f5f49fb1a67897bb2250e324e477ee1 100644
--- a/game/modules/tome/data/general/npcs/orc-rak-shor.lua
+++ b/game/modules/tome/data/general/npcs/orc-rak-shor.lua
@@ -91,13 +91,14 @@ newEntity{ base = "BASE_NPC_ORC_RAK_SHOR",
 		[Talents.T_BLOOD_GRASP]=5,
 		[Talents.T_CURSE_OF_VULNERABILITY]=5,
 	},
+	resolvers.sustains_at_birth(),
 }
 
 newEntity{ base = "BASE_NPC_ORC_RAK_SHOR",
 	name = "orc corruptor", color=colors.GREY,
 	desc = [[An orc dressed in black robes. He mumbles is a harsh tongue.]],
 	level_range = {27, nil}, exp_worth = 1,
-	rarity = 1,
+	rarity = 4,
 	rank = 3,
 	max_life = resolvers.rngavg(160,180), life_rating = 15,
 	resolvers.equip{
diff --git a/game/modules/tome/data/gfx/particles/bone_shield.lua b/game/modules/tome/data/gfx/particles/bone_shield.lua
index 341b302cb4c13effcdaf20f6acf850b7ca99e136..1a8b765d1ecd13434e8d8d218fe14ed58b6983ba 100644
--- a/game/modules/tome/data/gfx/particles/bone_shield.lua
+++ b/game/modules/tome/data/gfx/particles/bone_shield.lua
@@ -19,17 +19,24 @@
 
 local ad = rng.range(0, 360)
 local a = math.rad(ad)
+local dir = math.rad(ad + 90)
 local r = 18
+local speed = rng.range(33, 99)
+local dirv = math.pi * 2 / speed
+local vel = math.pi * 2 * r / speed
+local first = true
 
 return { generator = function()
+	local dr = rng.range(0, 2)
+	local da = math.rad(rng.range(0, 360))
 	return {
-		life = 20,
-		size = 4, sizev = 0, sizea = 0,
+		life = core.particles.ETERNAL,
+		size = rng.range(3,8), sizev = 0, sizea = 0,
 
-		x = r * math.cos(a), xv = 0, xa = 0,
-		y = r * math.sin(a), yv = 0, ya = 0,
-		dir = 0, dirv = 0, dira = 0,
-		vel = 0, velv = 0, vela = 0,
+		x = r * math.cos(a) + dr * math.cos(da), xv = 0, xa = 0,
+		y = r * math.sin(a) + dr * math.cos(da), yv = 0, ya = 0,
+		dir = dir, dirv = dirv, dira = 0,
+		vel = vel, velv = 0, vela = 0,
 
 		r = rng.range(220, 255)/255,   rv = 0, ra = 0,
 		g = rng.range(220, 255)/255,   gv = 0, ga = 0,
@@ -38,6 +45,6 @@ return { generator = function()
 	}
 end, },
 function(self)
-	self.ps:emit(1)
+	if first then self.ps:emit(10) first = false end
 end,
-1
+10
diff --git a/game/modules/tome/data/zones/rak-shor-pride/npcs.lua b/game/modules/tome/data/zones/rak-shor-pride/npcs.lua
index 34dfab3d4ab2df51da5c9cc34beb670e2e426249..6c2bbc57dbaa8570478c97b407caf6cc7157b1bb 100644
--- a/game/modules/tome/data/zones/rak-shor-pride/npcs.lua
+++ b/game/modules/tome/data/zones/rak-shor-pride/npcs.lua
@@ -20,7 +20,7 @@
 load("/data/general/npcs/bone-giant.lua", rarity(0))
 load("/data/general/npcs/ghoul.lua", rarity(5))
 load("/data/general/npcs/skeleton.lua", rarity(5))
-load("/data/general/npcs/orc.lua", rarity(2))
+load("/data/general/npcs/orc.lua", rarity(3))
 load("/data/general/npcs/orc-rak-shor.lua", rarity(0))
 
 load("/data/general/npcs/all.lua", rarity(4, 35))
@@ -38,12 +38,14 @@ newEntity{ base="BASE_NPC_ORC_RAK_SHOR", define_as = "RAK_SHOR",
 	move_others=true,
 
 	instakill_immune = 1,
+	disease_immune = 1,
+	confusion_immune = 1,
 	combat_armor = 10, combat_def = 10,
 
 	open_door = true,
 
 	autolevel = "caster",
-	ai = "dumb_talented_simple", ai_state = { talent_in=2, ai_move="move_astar", },
+	ai = "dumb_talented_simple", ai_state = { talent_in=1, ai_move="move_astar", },
 
 	body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
 
@@ -61,8 +63,17 @@ newEntity{ base="BASE_NPC_ORC_RAK_SHOR", define_as = "RAK_SHOR",
 		{type="undead", no_subescort=true, number=resolvers.mbonus(4, 4)},
 	},
 
+	inc_damage = { [DamageType.BLIGHT] = 30 },
+	talent_cd_reduction={[Talents.T_SOUL_ROT]=1, [Talents.T_BLOOD_GRASP]=3, },
+
 	resolvers.talents{
 		[Talents.T_SUMMON]=1,
+
+		[Talents.T_SOUL_ROT]=5,
+		[Talents.T_BLOOD_GRASP]=5,
+		[Talents.T_CURSE_OF_VULNERABILITY]=5,
+		[Talents.T_BONE_SHIELD]=8,
+		[Talents.T_BLOOD_SPRAY]=5,
 	},
 	resolvers.sustains_at_birth(),
 
diff --git a/src/particles.c b/src/particles.c
index eec823187a07009deef87b76afe9aadb8f97fb0c..72659605b2257fceeca01c640078ad3e1b5b235b 100644
--- a/src/particles.c
+++ b/src/particles.c
@@ -31,6 +31,8 @@
 
 #define rng(x, y) (x + rand_div(1 + y - x))
 
+#define PARTICLE_ETERNAL 999999
+
 static void getinitfield(lua_State *L, const char *key, int *min, int *max)
 {
 	lua_pushstring(L, key);
@@ -322,7 +324,7 @@ static int particles_to_screen(lua_State *L)
 				glEnd();
 			}
 
-			p->life--;
+			if (p->life != PARTICLE_ETERNAL) p->life--;
 
 			p->ox = p->x;
 			p->oy = p->y;
@@ -382,5 +384,8 @@ int luaopen_particles(lua_State *L)
 {
 	auxiliar_newclass(L, "core{particles}", particles_reg);
 	luaL_openlib(L, "core.particles", particleslib, 0);
+	lua_pushstring(L, "ETERNAL");
+	lua_pushnumber(L, PARTICLE_ETERNAL);
+	lua_settable(L, -3);
 	return 1;
 }