diff --git a/game/modules/tome/data/birth/classes/corrupted.lua b/game/modules/tome/data/birth/classes/corrupted.lua
index 9518dcee4b9603936fbc4006a1ebd2bac7ef4252..b522ebca062c10b2395e4e78bbc1b979cf770426 100644
--- a/game/modules/tome/data/birth/classes/corrupted.lua
+++ b/game/modules/tome/data/birth/classes/corrupted.lua
@@ -48,18 +48,18 @@ newBirthDescriptor{
 	stats = { str=5, mag=3, dex=1, },
 	talents_types = {
 		["technique/combat-training"]={true, 0.3},
+		["cunning/survival"]={false, 0.1},
 		["corruption/sanguisuge"]={true, 0.3},
 		["corruption/reaving-combat"]={true, 0.3},
 		["corruption/scourge"]={true, 0.3},
 		["corruption/plague"]={true, 0.3},
-		["corruption/hexes"]={true, 0.3},
-		["corruption/curses"]={true, 0.3},
+		["corruption/hexes"]={false, 0.3},
+		["corruption/curses"]={false, 0.3},
 		["corruption/bone"]={true, 0.3},
 	},
 	talents = {
 		[ActorTalents.T_CORRUPTED_STRENGTH] = 1,
 		[ActorTalents.T_WEAPON_COMBAT] = 1,
-		[ActorTalents.T_VIRULENT_DISEASE] = 1,
 		[ActorTalents.T_BLOOD_SACRIFICE] = 1,
 		[ActorTalents.T_REND] = 1,
 	},
diff --git a/game/modules/tome/data/birth/classes/mage.lua b/game/modules/tome/data/birth/classes/mage.lua
index d9c6a9d1e5d3b8dd425e13a546d04ce29f27cb68..1c5227e7b6f0327957a95c7533d079350dd94ae9 100644
--- a/game/modules/tome/data/birth/classes/mage.lua
+++ b/game/modules/tome/data/birth/classes/mage.lua
@@ -36,8 +36,6 @@ newBirthDescriptor{
 		},
 	},
 	copy = {
-		-- All mages are of angolwen faction
-		faction = "angolwen",
 		mana_regen = 0.5,
 		mana_rating = 7,
 		resolvers.generic(function(e)
@@ -79,6 +77,8 @@ newBirthDescriptor{
 		[ActorTalents.T_TELEPORT_ANGOLWEN]=1,
 	},
 	copy = {
+		-- All mages are of angolwen faction
+		faction = "angolwen",
 		max_life = 90,
 		life_rating = 10,
 		resolvers.equip{ id=true,
@@ -182,6 +182,8 @@ newBirthDescriptor{
 		[ActorTalents.T_TELEPORT_ANGOLWEN]=1,
 	},
 	copy = {
+		-- All mages are of angolwen faction
+		faction = "angolwen",
 		max_life = 90,
 		life_rating = 10,
 		resolvers.equip{ id=true,
@@ -227,6 +229,8 @@ newBirthDescriptor{
 		[ActorTalents.T_TELEPORT_ANGOLWEN]=1,
 	},
 	copy = {
+		-- All mages are of angolwen faction
+		faction = "angolwen",
 		max_life = 90,
 		life_rating = 10,
 		resolvers.equip{ id=true,
@@ -268,6 +272,8 @@ newBirthDescriptor{
 		[ActorTalents.T_TELEPORT_ANGOLWEN]=1,
 	},
 	copy = {
+		-- All mages are of angolwen faction
+		faction = "angolwen",
 		max_life = 90,
 		life_rating = 10,
 		resolvers.equip{ id=true,
diff --git a/game/modules/tome/data/talents/corruptions/bone.lua b/game/modules/tome/data/talents/corruptions/bone.lua
index aac3547802f10e1bebacd8df7c7b82a9d54ed0ae..32aa99c7fe161b312905b37c2d84939b642c6cd1 100644
--- a/game/modules/tome/data/talents/corruptions/bone.lua
+++ b/game/modules/tome/data/talents/corruptions/bone.lua
@@ -25,6 +25,7 @@ newTalent{
 	vim = 13,
 	cooldown = 4,
 	range = 20,
+	random_ego = "attack",
 	action = function(self, t)
 		local tg = {type="beam", range=self:getTalentRange(t), talent=t}
 		local x, y = self:getTarget(tg)
@@ -89,6 +90,7 @@ newTalent{
 	points = 5,
 	vim = 25,
 	cooldown = 12,
+	random_ego = "attack",
 	range = function(self, t) return self:getTalentLevelRaw(t) end,
 	action = function(self, t)
 		local tg = {type="ball", radius=self:getTalentRange(t), friendlyfire=false}
diff --git a/game/modules/tome/data/talents/corruptions/corruptions.lua b/game/modules/tome/data/talents/corruptions/corruptions.lua
index cb22bd0568106f96f1cedf8fe2babe948aec1ae9..93b2bf783c951db96b640a9e572a833b85a1e96e 100644
--- a/game/modules/tome/data/talents/corruptions/corruptions.lua
+++ b/game/modules/tome/data/talents/corruptions/corruptions.lua
@@ -73,3 +73,4 @@ load("/data/talents/corruptions/scourge.lua")
 load("/data/talents/corruptions/plague.lua")
 load("/data/talents/corruptions/reaving-combat.lua")
 load("/data/talents/corruptions/bone.lua")
+load("/data/talents/corruptions/curses.lua")
diff --git a/game/modules/tome/data/talents/corruptions/curses.lua b/game/modules/tome/data/talents/corruptions/curses.lua
new file mode 100644
index 0000000000000000000000000000000000000000..c36be2053fccbe6f650040ac5d55a8886400cef8
--- /dev/null
+++ b/game/modules/tome/data/talents/corruptions/curses.lua
@@ -0,0 +1,130 @@
+-- ToME - Tales of Middle-Earth
+-- Copyright (C) 2009, 2010 Nicolas Casalini
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-- Nicolas Casalini "DarkGod"
+-- darkgod@te4.org
+
+newTalent{
+	name = "Curse of Defenselessness",
+	type = {"corruption/curses", 1},
+	require = corrs_req1,
+	points = 5,
+	cooldown = 20,
+	vim = 20,
+	range = 20,
+	action = function(self, t)
+		local tg = {type="hit", range=self:getTalentRange(t), talent=t}
+		local x, y = self:getTarget(tg)
+		if not x or not y then return nil end
+		self:project(tg, x, y, function(tx, ty)
+			local target = game.level.map(tx, ty, Map.ACTOR)
+			if not target then return end
+			if target:checkHit(self:combatSpellpower(), target:combatSpellResist(), 0, 95, 15) then
+				target:setEffect(target.EFF_CURSE_DEFENSELESSNESS, 10, {power=self:combatTalentSpellDamage(t, 30, 60)})
+			end
+		end)
+		game:playSoundNear(self, "talents/slime")
+		return true
+	end,
+	info = function(self, t)
+		return ([[Curses your target, decreasing its defense and saves by %d.
+		The defense and saves will decrease with Magic stat.]]):format(self:combatTalentSpellDamage(t, 10, 30))
+	end,
+}
+
+newTalent{
+	name = "Curse of Impotence",
+	type = {"corruption/curses", 2},
+	require = corrs_req2,
+	points = 5,
+	cooldown = 20,
+	vim = 20,
+	range = 20,
+	action = function(self, t)
+		local tg = {type="hit", range=self:getTalentRange(t), talent=t}
+		local x, y = self:getTarget(tg)
+		if not x or not y then return nil end
+		self:project(tg, x, y, function(tx, ty)
+			local target = game.level.map(tx, ty, Map.ACTOR)
+			if not target then return end
+			if target:checkHit(self:combatSpellpower(), target:combatSpellResist(), 0, 95, 15) then
+				target:setEffect(target.EFF_CURSE_IMPOTENCE, 10, {power=self:combatTalentSpellDamage(t, 10, 30)})
+			end
+		end)
+		game:playSoundNear(self, "talents/slime")
+		return true
+	end,
+	info = function(self, t)
+		return ([[Curses your target, decreasing all damage done by %d%%.
+		The damage will decrease with Magic stat.]]):format(self:combatTalentSpellDamage(t, 10, 30))
+	end,
+}
+
+newTalent{
+	name = "Curse of Death",
+	type = {"corruption/curses", 3},
+	require = corrs_req3,
+	points = 5,
+	cooldown = 20,
+	vim = 20,
+	range = 20,
+	action = function(self, t)
+		local tg = {type="hit", range=self:getTalentRange(t), talent=t}
+		local x, y = self:getTarget(tg)
+		if not x or not y then return nil end
+		self:project(tg, x, y, function(tx, ty)
+			local target = game.level.map(tx, ty, Map.ACTOR)
+			if not target then return end
+			if target:checkHit(self:combatSpellpower(), target:combatSpellResist(), 0, 95, 15) then
+				target:setEffect(target.EFF_CURSE_DEATH, 10, {src=self, dam=self:combatTalentSpellDamage(t, 10, 70)})
+			end
+		end)
+		game:playSoundNear(self, "talents/slime")
+		return true
+	end,
+	info = function(self, t)
+		return ([[Curses your target, stopping any natural healing and dealing %0.2f darkness damage each turn.
+		The resistances will decrease with Magic stat.]]):format(self:combatTalentSpellDamage(t, 10, 70))
+	end,
+}
+
+newTalent{
+	name = "Curse of Vulnerability",
+	type = {"corruption/curses", 4},
+	require = corrs_req4,
+	points = 5,
+	cooldown = 20,
+	vim = 20,
+	range = 20,
+	action = function(self, t)
+		local tg = {type="hit", range=self:getTalentRange(t), talent=t}
+		local x, y = self:getTarget(tg)
+		if not x or not y then return nil end
+		self:project(tg, x, y, function(tx, ty)
+			local target = game.level.map(tx, ty, Map.ACTOR)
+			if not target then return end
+			if target:checkHit(self:combatSpellpower(), target:combatSpellResist(), 0, 95, 15) then
+				target:setEffect(target.EFF_CURSE_VULNERABILITY, 10, {power=self:combatTalentSpellDamage(t, 10, 60)})
+			end
+		end)
+		game:playSoundNear(self, "talents/slime")
+		return true
+	end,
+	info = function(self, t)
+		return ([[Curses your target, decreasing all its resistances by %d%%.
+		The resistances will decrease with Magic stat.]]):format(self:combatTalentSpellDamage(t, 10, 60))
+	end,
+}
diff --git a/game/modules/tome/data/talents/corruptions/plague.lua b/game/modules/tome/data/talents/corruptions/plague.lua
index 0bd62915a2b60953998f167fb129aa8ec2e4ef42..4d0bfe819ef8bad91eb7b52d8cf543ad19afb11a 100644
--- a/game/modules/tome/data/talents/corruptions/plague.lua
+++ b/game/modules/tome/data/talents/corruptions/plague.lua
@@ -24,6 +24,7 @@ newTalent{
 	points = 5,
 	vim = 8,
 	cooldown = 3,
+	random_ego = "attack",
 	range = function(self, t) return 5 + math.floor(self:getTalentLevel(t) * 1.3) end,
 	action = function(self, t)
 		local tg = {type="bolt", range=self:getTalentRange(t)}
diff --git a/game/modules/tome/data/talents/misc/npcs.lua b/game/modules/tome/data/talents/misc/npcs.lua
index ab18d115df92a0695ef87cb0ea0ad6d1807f07ea..7eabd18d62820d8a574e01858dc915952f54b4ad 100644
--- a/game/modules/tome/data/talents/misc/npcs.lua
+++ b/game/modules/tome/data/talents/misc/npcs.lua
@@ -951,31 +951,3 @@ newTalent{
 		The damage will increase with Magic stat.]]):format(self:combatTalentSpellDamage(t, 10, 170), 20 + self:getTalentLevel(t) * 10, self:combatTalentSpellDamage(t, 10, 220))
 	end,
 }
-
-newTalent{
-	name = "Curse of Vulnerability",
-	type = {"corruption/other", 1},
-	points = 5,
-	cooldown = 20,
-	vim = 20,
-	range = 20,
-	random_ego = "utility",
-	action = function(self, t)
-		local tg = {type="hit", range=self:getTalentRange(t), talent=t}
-		local x, y = self:getTarget(tg)
-		if not x or not y then return nil end
-		self:project(tg, x, y, function(tx, ty)
-			local target = game.level.map(tx, ty, Map.ACTOR)
-			if not target then return end
-			if target:checkHit(self:combatSpellpower(), target:combatSpellResist(), 0, 95, 15) then
-				target:setEffect(target.EFF_CURSE_VULNERABILITY, 10, {power=self:combatTalentSpellDamage(t, 10, 85)})
-			end
-		end)
-		game:playSoundNear(self, "talents/slime")
-		return true
-	end,
-	info = function(self)
-		return ([[Curses your target,
-		The resistances will decrease with Magic stat.]]):format(self:combatTalentSpellDamage(t, 10, 85))
-	end,
-}
diff --git a/game/modules/tome/data/timed_effects.lua b/game/modules/tome/data/timed_effects.lua
index 1df06e1f66f00e730021022e46eed5beec765c94..f70dafa29fda1226528dbb3605ef65b99a257992 100644
--- a/game/modules/tome/data/timed_effects.lua
+++ b/game/modules/tome/data/timed_effects.lua
@@ -1014,6 +1014,66 @@ newEffect{
 	end,
 }
 
+newEffect{
+	name = "CURSE_IMPOTENCE",
+	desc = "Curse of Impotence",
+	type = "curse",
+	status = "detrimental",
+	parameters = { power=10 },
+	on_gain = function(self, err) return "#Target# is cursed.", "+Curse" end,
+	on_lose = function(self, err) return "#Target# is no longer cursed.", "-Curse" end,
+	activate = function(self, eff)
+		eff.tmpid = self:addTemporaryValue("inc_damage", {
+			all = -eff.power,
+		})
+	end,
+	deactivate = function(self, eff)
+		self:removeTemporaryValue("inc_damage", eff.tmpid)
+	end,
+}
+
+newEffect{
+	name = "CURSE_DEFENSELESSNESS",
+	desc = "Curse of Defenselessness",
+	type = "curse",
+	status = "detrimental",
+	parameters = { power=10 },
+	on_gain = function(self, err) return "#Target# is cursed.", "+Curse" end,
+	on_lose = function(self, err) return "#Target# is no longer cursed.", "-Curse" end,
+	activate = function(self, eff)
+		eff.def = self:addTemporaryValue("combat_def", eff.power)
+		eff.mental = self:addTemporaryValue("combat_mentalresist", eff.power)
+		eff.spell = self:addTemporaryValue("combat_spellresist", eff.power)
+		eff.physical = self:addTemporaryValue("combat_physresist", eff.power)
+	end,
+	deactivate = function(self, eff)
+		self:removeTemporaryValue("combat_def", eff.def)
+		self:removeTemporaryValue("combat_mentalresist", eff.mental)
+		self:removeTemporaryValue("combat_spellresist", eff.spell)
+		self:removeTemporaryValue("combat_physresist", eff.physical)
+	end,
+}
+
+newEffect{
+	name = "CURSE_DEATH",
+	desc = "Curse of Death",
+	type = "curse",
+	status = "detrimental",
+	parameters = { power=10 },
+	on_gain = function(self, err) return "#Target# is cursed.", "+Curse" end,
+	on_lose = function(self, err) return "#Target# is no longer cursed.", "-Curse" end,
+	-- Damage each turn
+	on_timeout = function(self, eff)
+		DamageType:get(DamageType.DARKNESS).projector(eff.src, self.x, self.y, DamageType.DARKNESS, eff.dam)
+	end,
+	activate = function(self, eff)
+		eff.tmpid = self:addTemporaryValue("life_regen", -self.life_regen)
+	end,
+	deactivate = function(self, eff)
+		self:removeTemporaryValue("life_regen", eff.tmpid)
+	end,
+}
+
 newEffect{
 	name = "CONTINUUM_DESTABILIZATION",
 	desc = "Continuum Destabilization",
diff --git a/ideas/blight.ods b/ideas/blight.ods
index e7555b1e25832ed7d0df40f893d1d241caf14fad..f418d00bdb5459417c4a20a77359f5b4c5d9d55e 100644
Binary files a/ideas/blight.ods and b/ideas/blight.ods differ
diff --git a/ideas/classes.ods b/ideas/classes.ods
index 510e4c6cbb25c102bb566395953945349f16bf29..229ca095f1bdf6e146cd66ba1cfca99cfe5006bf 100644
Binary files a/ideas/classes.ods and b/ideas/classes.ods differ