diff --git a/dist/game/data/scripts/handlers/effecthandlers/Backstab.java b/dist/game/data/scripts/handlers/effecthandlers/Backstab.java
index bb5c0491457fff50dda99bdbb58177a2e78e12f4..d98f5c9c0f8a8dbe2fc9d1c340dcbfa50494cc1a 100644
--- a/dist/game/data/scripts/handlers/effecthandlers/Backstab.java
+++ b/dist/game/data/scripts/handlers/effecthandlers/Backstab.java
@@ -74,9 +74,9 @@ public final class Backstab extends AbstractEffect
 			return;
 		}
 		
-		L2Character target = info.getEffected();
-		L2Character activeChar = info.getEffector();
-		Skill skill = info.getSkill();
+		final L2Character target = info.getEffected();
+		final L2Character activeChar = info.getEffector();
+		final Skill skill = info.getSkill();
 		boolean ss = skill.useSoulShot() && activeChar.isChargedShot(ShotType.SOULSHOTS);
 		byte shld = Formulas.calcShldUse(activeChar, target, skill);
 		double damage = Formulas.calcBackstabDamage(activeChar, target, skill, shld, ss, _power);
diff --git a/dist/game/data/scripts/handlers/effecthandlers/CpDamPercent.java b/dist/game/data/scripts/handlers/effecthandlers/CpDamPercent.java
index 757eb8097f455dcc69b12407c9790cccc44dba62..65bf202f5b221d8f33fa787514f066a09883bc90 100644
--- a/dist/game/data/scripts/handlers/effecthandlers/CpDamPercent.java
+++ b/dist/game/data/scripts/handlers/effecthandlers/CpDamPercent.java
@@ -19,6 +19,7 @@
 package handlers.effecthandlers;
 
 import com.l2jserver.gameserver.model.StatsSet;
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.conditions.Condition;
 import com.l2jserver.gameserver.model.effects.AbstractEffect;
 import com.l2jserver.gameserver.model.skills.BuffInfo;
@@ -53,22 +54,23 @@ public final class CpDamPercent extends AbstractEffect
 			return;
 		}
 		
-		if (info.getEffected().isPlayer() && info.getEffected().getActingPlayer().isFakeDeath())
+		final L2Character target = info.getEffected();
+		if (target.isPlayer() && target.getActingPlayer().isFakeDeath())
 		{
-			info.getEffected().stopFakeDeath(true);
+			target.stopFakeDeath(true);
 		}
 		
-		int damage = (int) ((info.getEffected().getCurrentCp() * _power) / 100);
+		double damage = (target.getCurrentCp() * _power) / 100;
 		// Manage attack or cast break of the target (calculating rate, sending message)
-		if (!info.getEffected().isRaid() && Formulas.calcAtkBreak(info.getEffected(), damage))
+		if (!target.isRaid() && Formulas.calcAtkBreak(target, damage))
 		{
-			info.getEffected().breakAttack();
-			info.getEffected().breakCast();
+			target.breakAttack();
+			target.breakCast();
 		}
 		
 		if (damage > 0)
 		{
-			info.getEffected().setCurrentCp(info.getEffected().getCurrentCp() - damage);
+			target.setCurrentCp(target.getCurrentCp() - damage);
 		}
 	}
 }
\ No newline at end of file
diff --git a/dist/game/data/scripts/handlers/effecthandlers/Heal.java b/dist/game/data/scripts/handlers/effecthandlers/Heal.java
index 040e2183154f60fdca020fdc921c37e9a839cc03..e184d9ae3bc4d40d4202ba53c82367ef0a61cf5d 100644
--- a/dist/game/data/scripts/handlers/effecthandlers/Heal.java
+++ b/dist/game/data/scripts/handlers/effecthandlers/Heal.java
@@ -27,6 +27,7 @@ import com.l2jserver.gameserver.model.effects.L2EffectType;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.items.type.CrystalType;
 import com.l2jserver.gameserver.model.skills.BuffInfo;
+import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.model.stats.Formulas;
 import com.l2jserver.gameserver.model.stats.Stats;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -62,8 +63,9 @@ public final class Heal extends AbstractEffect
 	@Override
 	public void onStart(BuffInfo info)
 	{
-		L2Character target = info.getEffected();
-		L2Character activeChar = info.getEffector();
+		final L2Character target = info.getEffected();
+		final L2Character activeChar = info.getEffector();
+		final Skill skill = info.getSkill();
 		if ((target == null) || target.isDead() || target.isDoor() || target.isInvul())
 		{
 			return;
@@ -72,18 +74,18 @@ public final class Heal extends AbstractEffect
 		double amount = _power;
 		double staticShotBonus = 0;
 		int mAtkMul = 1;
-		boolean sps = info.getSkill().isMagic() && activeChar.isChargedShot(ShotType.SPIRITSHOTS);
-		boolean bss = info.getSkill().isMagic() && activeChar.isChargedShot(ShotType.BLESSED_SPIRITSHOTS);
+		boolean sps = skill.isMagic() && activeChar.isChargedShot(ShotType.SPIRITSHOTS);
+		boolean bss = skill.isMagic() && activeChar.isChargedShot(ShotType.BLESSED_SPIRITSHOTS);
 		
 		if (((sps || bss) && (activeChar.isPlayer() && activeChar.getActingPlayer().isMageClass())) || activeChar.isSummon())
 		{
-			staticShotBonus = info.getSkill().getMpConsume2(); // static bonus for spiritshots
+			staticShotBonus = skill.getMpConsume2(); // static bonus for spiritshots
 			mAtkMul = bss ? 4 : 2;
 			staticShotBonus *= bss ? 2.4 : 1.0;
 		}
 		else if ((sps || bss) && activeChar.isNpc())
 		{
-			staticShotBonus = 2.4 * info.getSkill().getMpConsume2(); // always blessed spiritshots
+			staticShotBonus = 2.4 * skill.getMpConsume2(); // always blessed spiritshots
 			mAtkMul = 4;
 		}
 		else
@@ -99,12 +101,12 @@ public final class Heal extends AbstractEffect
 			mAtkMul = bss ? mAtkMul * 4 : mAtkMul + 1;
 		}
 		
-		if (!info.getSkill().isStatic())
+		if (!skill.isStatic())
 		{
 			amount += staticShotBonus + Math.sqrt(mAtkMul * activeChar.getMAtk(activeChar, null));
 			amount = target.calcStat(Stats.HEAL_EFFECT, amount, null, null);
 			// Heal critic, since CT2.3 Gracia Final
-			if (info.getSkill().isMagic() && Formulas.calcMCrit(activeChar.getMCriticalHit(target, info.getSkill())))
+			if (skill.isMagic() && Formulas.calcMCrit(activeChar.getMCriticalHit(target, skill)))
 			{
 				amount *= 3;
 			}
@@ -119,7 +121,7 @@ public final class Heal extends AbstractEffect
 		
 		if (target.isPlayer())
 		{
-			if (info.getSkill().getId() == 4051)
+			if (skill.getId() == 4051)
 			{
 				target.sendPacket(SystemMessageId.REJUVENATING_HP);
 			}
diff --git a/dist/game/data/scripts/handlers/effecthandlers/HpByLevel.java b/dist/game/data/scripts/handlers/effecthandlers/HpByLevel.java
index 801b7eda2b027b892308211a3f19c42524c75186..ab29210597e685edc8480485475402d506282691 100644
--- a/dist/game/data/scripts/handlers/effecthandlers/HpByLevel.java
+++ b/dist/game/data/scripts/handlers/effecthandlers/HpByLevel.java
@@ -19,6 +19,7 @@
 package handlers.effecthandlers;
 
 import com.l2jserver.gameserver.model.StatsSet;
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.conditions.Condition;
 import com.l2jserver.gameserver.model.effects.AbstractEffect;
 import com.l2jserver.gameserver.model.effects.L2EffectType;
@@ -61,14 +62,16 @@ public final class HpByLevel extends AbstractEffect
 			return;
 		}
 		
+		final L2Character activeChar = info.getEffector();
+		
 		// Calculation
 		final double abs = _power;
-		final double absorb = ((info.getEffector().getCurrentHp() + abs) > info.getEffector().getMaxHp() ? info.getEffector().getMaxHp() : (info.getEffector().getCurrentHp() + abs));
-		final int restored = (int) (absorb - info.getEffector().getCurrentHp());
-		info.getEffector().setCurrentHp(absorb);
+		final double absorb = ((activeChar.getCurrentHp() + abs) > activeChar.getMaxHp() ? activeChar.getMaxHp() : (activeChar.getCurrentHp() + abs));
+		final int restored = (int) (absorb - activeChar.getCurrentHp());
+		activeChar.setCurrentHp(absorb);
 		// System message
 		final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_HP_RESTORED);
 		sm.addInt(restored);
-		info.getEffector().sendPacket(sm);
+		activeChar.sendPacket(sm);
 	}
 }
diff --git a/dist/game/data/scripts/handlers/effecthandlers/HpDrain.java b/dist/game/data/scripts/handlers/effecthandlers/HpDrain.java
index 0279136c07e253dadb64390fd3bf9832359207ea..6e6183c79d7c80776f977f22545f221ad5fd32ce 100644
--- a/dist/game/data/scripts/handlers/effecthandlers/HpDrain.java
+++ b/dist/game/data/scripts/handlers/effecthandlers/HpDrain.java
@@ -25,6 +25,7 @@ import com.l2jserver.gameserver.model.conditions.Condition;
 import com.l2jserver.gameserver.model.effects.AbstractEffect;
 import com.l2jserver.gameserver.model.effects.L2EffectType;
 import com.l2jserver.gameserver.model.skills.BuffInfo;
+import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.model.stats.Formulas;
 
 /**
@@ -59,20 +60,21 @@ public final class HpDrain extends AbstractEffect
 	@Override
 	public void onStart(BuffInfo info)
 	{
-		L2Character target = info.getEffected();
-		L2Character activeChar = info.getEffector();
+		final L2Character target = info.getEffected();
+		final L2Character activeChar = info.getEffector();
+		final Skill skill = info.getSkill();
 		
 		// TODO: Unhardcode Cubic Skill to avoid double damage
-		if (activeChar.isAlikeDead() || (info.getSkill().getId() == 4050))
+		if (activeChar.isAlikeDead() || (skill.getId() == 4050))
 		{
 			return;
 		}
 		
-		boolean sps = info.getSkill().useSpiritShot() && activeChar.isChargedShot(ShotType.SPIRITSHOTS);
-		boolean bss = info.getSkill().useSpiritShot() && activeChar.isChargedShot(ShotType.BLESSED_SPIRITSHOTS);
-		boolean mcrit = Formulas.calcMCrit(activeChar.getMCriticalHit(target, info.getSkill()));
-		byte shld = Formulas.calcShldUse(activeChar, target, info.getSkill());
-		double damage = Formulas.calcMagicDam(activeChar, target, info.getSkill(), shld, sps, bss, mcrit, _power);
+		boolean sps = skill.useSpiritShot() && activeChar.isChargedShot(ShotType.SPIRITSHOTS);
+		boolean bss = skill.useSpiritShot() && activeChar.isChargedShot(ShotType.BLESSED_SPIRITSHOTS);
+		boolean mcrit = Formulas.calcMCrit(activeChar.getMCriticalHit(target, skill));
+		byte shld = Formulas.calcShldUse(activeChar, target, skill);
+		double damage = Formulas.calcMagicDam(activeChar, target, skill, shld, sps, bss, mcrit, _power);
 		
 		double drain = 0;
 		double cp = target.getCurrentCp();
@@ -104,8 +106,8 @@ public final class HpDrain extends AbstractEffect
 				target.breakCast();
 			}
 			activeChar.sendDamageMessage(target, (int) damage, mcrit, false, false);
-			target.reduceCurrentHp(damage, activeChar, info.getSkill());
-			target.notifyDamageReceived(damage, activeChar, info.getSkill(), mcrit, false, false);
+			target.reduceCurrentHp(damage, activeChar, skill);
+			target.notifyDamageReceived(damage, activeChar, skill, mcrit, false, false);
 		}
 	}
 }
\ No newline at end of file
diff --git a/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java b/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java
index 50e99eaa641e3a0d889ec504f63d7b3af57bc401..62804f88628723ea63f4c70d188ddb775b941ca3 100644
--- a/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java
+++ b/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java
@@ -60,15 +60,14 @@ public final class MagicalAttackByAbnormal extends AbstractEffect
 	@Override
 	public void onStart(BuffInfo info)
 	{
-		final L2Character target = info.getEffected();
-		final L2Character activeChar = info.getEffector();
-		final Skill skill = info.getSkill();
-		
-		if (activeChar.isAlikeDead())
+		if (info.getEffector().isAlikeDead())
 		{
 			return;
 		}
 		
+		final L2Character target = info.getEffected();
+		final L2Character activeChar = info.getEffector();
+		final Skill skill = info.getSkill();
 		if (target.isPlayer() && target.getActingPlayer().isFakeDeath())
 		{
 			target.stopFakeDeath(true);
diff --git a/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackMp.java b/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackMp.java
index 310fff845b30d0db1f35922779e65924b3dd337c..cf1b90cb00669849cd401669e70265dcbd09f0c5 100644
--- a/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackMp.java
+++ b/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackMp.java
@@ -25,6 +25,7 @@ import com.l2jserver.gameserver.model.conditions.Condition;
 import com.l2jserver.gameserver.model.effects.AbstractEffect;
 import com.l2jserver.gameserver.model.effects.L2EffectType;
 import com.l2jserver.gameserver.model.skills.BuffInfo;
+import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.model.stats.Formulas;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -84,19 +85,20 @@ public final class MagicalAttackMp extends AbstractEffect
 	@Override
 	public void onStart(BuffInfo info)
 	{
-		L2Character target = info.getEffected();
-		L2Character activeChar = info.getEffector();
-		
-		if (activeChar.isAlikeDead())
+		if (info.getEffector().isAlikeDead())
 		{
 			return;
 		}
 		
-		boolean sps = info.getSkill().useSpiritShot() && activeChar.isChargedShot(ShotType.SPIRITSHOTS);
-		boolean bss = info.getSkill().useSpiritShot() && activeChar.isChargedShot(ShotType.BLESSED_SPIRITSHOTS);
-		final byte shld = Formulas.calcShldUse(activeChar, target, info.getSkill());
-		final boolean mcrit = Formulas.calcMCrit(activeChar.getMCriticalHit(target, info.getSkill()));
-		double damage = Formulas.calcManaDam(activeChar, target, info.getSkill(), shld, sps, bss, mcrit, _power);
+		final L2Character target = info.getEffected();
+		final L2Character activeChar = info.getEffector();
+		final Skill skill = info.getSkill();
+		
+		boolean sps = skill.useSpiritShot() && activeChar.isChargedShot(ShotType.SPIRITSHOTS);
+		boolean bss = skill.useSpiritShot() && activeChar.isChargedShot(ShotType.BLESSED_SPIRITSHOTS);
+		final byte shld = Formulas.calcShldUse(activeChar, target, skill);
+		final boolean mcrit = Formulas.calcMCrit(activeChar.getMCriticalHit(target, skill));
+		double damage = Formulas.calcManaDam(activeChar, target, skill, shld, sps, bss, mcrit, _power);
 		double mp = (damage > target.getCurrentMp() ? target.getCurrentMp() : damage);
 		
 		if (damage > 0)
diff --git a/dist/game/data/scripts/handlers/effecthandlers/MagicalSoulAttack.java b/dist/game/data/scripts/handlers/effecthandlers/MagicalSoulAttack.java
index 035918dcce2a88a92473fc8bde76105814a0d459..3ef40aafac778895ffb86d19488c1ca18288106c 100644
--- a/dist/game/data/scripts/handlers/effecthandlers/MagicalSoulAttack.java
+++ b/dist/game/data/scripts/handlers/effecthandlers/MagicalSoulAttack.java
@@ -60,15 +60,15 @@ public final class MagicalSoulAttack extends AbstractEffect
 	@Override
 	public void onStart(BuffInfo info)
 	{
-		final L2Character target = info.getEffected();
-		final L2Character activeChar = info.getEffector();
-		final Skill skill = info.getSkill();
-		
-		if (activeChar.isAlikeDead())
+		if (info.getEffector().isAlikeDead())
 		{
 			return;
 		}
 		
+		final L2Character target = info.getEffected();
+		final L2Character activeChar = info.getEffector();
+		final Skill skill = info.getSkill();
+		
 		if (target.isPlayer() && target.getActingPlayer().isFakeDeath())
 		{
 			target.stopFakeDeath(true);