diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index 93ec5410fbfa0b0e1832d4f8586555c3a5a62302..d28fdb1e135e8988c7920d6db26624be431966b0 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -533,7 +533,7 @@ function _M:breakStealth()
 	if self:isTalentActive(self.T_STEALTH) then
 		local chance = 0
 		if self:knowTalent(self.T_UNSEEN_ACTIONS) then
-			chance = 10 + self:getTalentLevel(self.T_UNSEEN_ACTIONS) * 9
+			chance = 10 + self:getTalentLevel(self.T_UNSEEN_ACTIONS) * 9 + (self:getLck() - 50) * 0.2
 		end
 
 		-- Do not break stealth
diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua
index 682b0bbab22f035d3d2481cfe6d7ef51e09aee14..b06a0e14908d6b362f0fd93ca29faf863f4be345 100644
--- a/game/modules/tome/class/interface/Combat.lua
+++ b/game/modules/tome/class/interface/Combat.lua
@@ -270,7 +270,7 @@ function _M:combatDefense()
 	if self:hasDualWeapon() and self:knowTalent(self.T_DUAL_WEAPON_DEFENSE) then
 		add = add + 4 + (self:getTalentLevel(self.T_DUAL_WEAPON_DEFENSE) * self:getDex()) / 12
 	end
-	return self.combat_def + (self:getDex() - 10) * 0.35 + add
+	return self.combat_def + (self:getDex() - 10) * 0.35 + add + (self:getLck() - 50) * 0.4
 end
 
 --- Gets the armor
@@ -288,19 +288,19 @@ end
 --- Gets the attack
 function _M:combatAttack(weapon)
 	weapon = weapon or self.combat
-	return self.combat_atk + self:getTalentLevel(Talents.T_WEAPON_COMBAT) * 5 + (weapon.atk or 0) + (self:getStr(50) - 5) + (self:getDex(50) - 5)
+	return self.combat_atk + self:getTalentLevel(Talents.T_WEAPON_COMBAT) * 5 + (weapon.atk or 0) + (self:getStr(50) - 5) + (self:getDex(50) - 5) + (self:getLck() - 50) * 0.4
 end
 
 --- Gets the attack using only strength
 function _M:combatAttackStr(weapon)
 	weapon = weapon or self.combat
-	return self.combat_atk + self:getTalentLevel(Talents.T_WEAPON_COMBAT) * 5 + (weapon.atk or 0) + (self:getStr(100) - 10)
+	return self.combat_atk + self:getTalentLevel(Talents.T_WEAPON_COMBAT) * 5 + (weapon.atk or 0) + (self:getStr(100) - 10) + (self:getLck() - 50) * 0.4
 end
 
 --- Gets the attack using only dexterity
 function _M:combatAttackDex(weapon)
 	weapon = weapon or self.combat
-	return self.combat_atk + self:getTalentLevel(Talents.T_WEAPON_COMBAT) * 5 + (weapon.atk or 0) + (self:getDex(100) - 10)
+	return self.combat_atk + self:getTalentLevel(Talents.T_WEAPON_COMBAT) * 5 + (weapon.atk or 0) + (self:getDex(100) - 10) + (self:getLck() - 50) * 0.4
 end
 
 --- Gets the armor penetration
@@ -322,7 +322,7 @@ function _M:combatCrit(weapon)
 	if weapon.talented and weapon.talented == "knife" and self:knowTalent(Talents.T_LETHALITY) then
 		addcrit = 1 + self:getTalentLevel(Talents.T_LETHALITY) * 1.3
 	end
-	return self.combat_physcrit + (self:getCun() - 10) * 0.3 + (weapon.physcrit or 1) + addcrit
+	return self.combat_physcrit + (self:getCun() - 10) * 0.3 + (self:getLck() - 50) * 0.30 + (weapon.physcrit or 1) + addcrit
 end
 
 --- Gets the damage range
@@ -357,7 +357,7 @@ end
 
 --- Gets spellcrit
 function _M:combatSpellCrit()
-	return self.combat_spellcrit + (self:getCun() - 10) * 0.3 + 1
+	return self.combat_spellcrit + (self:getCun() - 10) * 0.3 + (self:getLck() - 50) * 0.30 + 1
 end
 
 --- Gets spellspeed
@@ -395,19 +395,24 @@ function _M:spellCrit(dam)
 	return dam, crit
 end
 
+--- Do we get hit by our own AOE ?
+function _M:spellFriendlyFire()
+	return rng.chance(self:getTalentLevelRaw(self.T_SPELL_SHAPING) * 20 + (self:getLck() - 50) * 0.2)
+end
+
 --- Computes physical resistance
 function _M:combatPhysicalResist()
-	return self.combat_physresist + (self:getCon() + self:getStr()) * 0.25
+	return self.combat_physresist + (self:getCon() + self:getStr() + (self:getLck() - 50) * 0.5) * 0.25
 end
 
 --- Computes spell resistance
 function _M:combatSpellResist()
-	return self.combat_spellresist + (self:getMag() + self:getWil()) * 0.25
+	return self.combat_spellresist + (self:getMag() + self:getWil() + (self:getLck() - 50) * 0.5) * 0.25
 end
 
 --- Computes mental resistance
 function _M:combatMentalResist()
-	return self.combat_mentalresist + (self:getCun() + self:getWil()) * 0.25
+	return self.combat_mentalresist + (self:getCun() + self:getWil() + (self:getLck() - 50) * 0.5) * 0.25
 end
 
 
diff --git a/game/modules/tome/data/general/objects/egos/weapon.lua b/game/modules/tome/data/general/objects/egos/weapon.lua
index 2bfd503da2e4074cf2bd32f83e854288640212cc..61e9f62e36c21e004727cfc78c938e3868bc7c45 100644
--- a/game/modules/tome/data/general/objects/egos/weapon.lua
+++ b/game/modules/tome/data/general/objects/egos/weapon.lua
@@ -53,9 +53,7 @@ newEntity{
 	level_range = {1, 50},
 	rarity = 3,
 	cost = 4,
-	wielder = {
-		combat={atk = resolvers.mbonus(20, 2)},
-	},
+	combat={atk = resolvers.mbonus(20, 2)},
 }
 
 newEntity{
@@ -63,9 +61,7 @@ newEntity{
 	level_range = {1, 50},
 	rarity = 3,
 	cost = 6,
-	wielder = {
-		combat={apr = resolvers.mbonus(15, 1)},
-	},
+	combat={apr = resolvers.mbonus(15, 1)},
 }
 
 newEntity{
diff --git a/game/modules/tome/data/talents/spells/air.lua b/game/modules/tome/data/talents/spells/air.lua
index ff023a370f3b630d5aca0fb1cc6d8372b60194e1..16aec72165c661bdacbe9d4599a592d68c201ec0 100644
--- a/game/modules/tome/data/talents/spells/air.lua
+++ b/game/modules/tome/data/talents/spells/air.lua
@@ -48,7 +48,8 @@ newTalent{
 			DamageType.NATURE, dam,
 			radius,
 			5, nil,
-			engine.Entity.new{alpha=100, display='', color_br=30, color_bg=180, color_bb=60}
+			engine.Entity.new{alpha=100, display='', color_br=30, color_bg=180, color_bb=60},
+			nil, self:spellFriendlyFire()
 		)
 		return true
 	end,
diff --git a/game/modules/tome/data/talents/spells/fire.lua b/game/modules/tome/data/talents/spells/fire.lua
index fdfed1352f03dc5c135e6b7fb811d303fdd92b54..f45b7725572a31b12d3a7799c92c97512ef1c27d 100644
--- a/game/modules/tome/data/talents/spells/fire.lua
+++ b/game/modules/tome/data/talents/spells/fire.lua
@@ -59,7 +59,7 @@ newTalent{
 	},
 	range = 15,
 	action = function(self, t)
-		local tg = {type="ball", range=self:getTalentRange(t), radius=1 + self:getTalentLevelRaw(t), talent=t}
+		local tg = {type="ball", range=self:getTalentRange(t), radius=1 + self:getTalentLevelRaw(t), friendlyfire=self:spellFriendlyFire(), talent=t}
 		local x, y = self:getTarget(tg)
 		if not x or not y then return nil end
 		self:project(tg, x, y, DamageType.FIRE, self:spellCrit(28 + self:combatSpellpower(0.4) * self:getTalentLevel(t)), {type="flame"})
@@ -96,7 +96,8 @@ newTalent{
 			DamageType.NETHERFLAME, dam,
 			radius,
 			5, nil,
-			engine.Entity.new{alpha=100, display='', color_br=180, color_bg=30, color_bb=60}
+			engine.Entity.new{alpha=100, display='', color_br=180, color_bg=30, color_bb=60},
+			nil, self:spellFriendlyFire()
 		)
 		game.level.map:particleEmitter(x, y, radius, "static_fire", nil, nil, {radius=radius})
 		return true
diff --git a/game/modules/tome/data/talents/spells/meta.lua b/game/modules/tome/data/talents/spells/meta.lua
index 4c352e99268035daa856b6834ef0ff23411c7d3f..2fdcf37953eac9404f7dad1d2bb78f7d42912a13 100644
--- a/game/modules/tome/data/talents/spells/meta.lua
+++ b/game/modules/tome/data/talents/spells/meta.lua
@@ -71,10 +71,22 @@ newTalent{
 }
 
 newTalent{
-	name = "Quicken Spells",
+	name = "Spell Shaping",
 	type = {"spell/meta",3},
 	require = spells_req3,
 	points = 5,
+	mode = "passive",
+	info = function(self, t)
+		return ([[You learn to shape your area spells, allowing you to carve a hole in them to not get hit with a chance of %d%%.]]):
+		format(self:getTalentLevelRaw(t) * 20)
+	end,
+}
+
+newTalent{
+	name = "Quicken Spells",
+	type = {"spell/meta",4},
+	require = spells_req4,
+	points = 5,
 	mode = "sustained",
 	sustain_mana = 150,
 	cooldown = 30,
diff --git a/ideas/spells.ods b/ideas/spells.ods
index 7615d0f390dd3006d95017dd576b2d65a9e9dee8..326d6a05777925e454fc0f60dbf2bae357bbbd6e 100644
Binary files a/ideas/spells.ods and b/ideas/spells.ods differ