diff --git a/L2J_DataPack_BETA/dist/game/data/scripts.cfg b/L2J_DataPack_BETA/dist/game/data/scripts.cfg
index 5095922d241755789587c8e029370893e2dd381e..304219a667f46a9de16d5f3543d3d52ed2685671 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts.cfg
+++ b/L2J_DataPack_BETA/dist/game/data/scripts.cfg
@@ -36,10 +36,8 @@ ai/npc/MercenaryCaptain/MercenaryCaptain.java
 ai/npc/Minigame/Minigame.java
 ai/npc/MonumentOfHeroes/MonumentOfHeroes.java
 ai/npc/Nottingale/Nottingale.java
-ai/npc/NpcBuffers/BirthdayCake.java
-ai/npc/NpcBuffers/CabaleBuffer.java
-ai/npc/NpcBuffers/ChristmasTree.java
-ai/npc/NpcBuffers/Totems.java
+ai/npc/NpcBuffers/NpcBuffers.java
+ai/npc/NpcBuffers/impl/CabaleBuffer.java
 ai/npc/PriestOfBlessing/PriestOfBlessing.java
 ai/npc/Rafforty/Rafforty.java
 ai/npc/SubclassCertification/SubclassCertification.java
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/BirthdayCake.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/BirthdayCake.java
deleted file mode 100644
index c2ca84179735be84db9cf95e6393d2dcd55570ba..0000000000000000000000000000000000000000
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/BirthdayCake.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2004-2013 L2J DataPack
- * 
- * This file is part of L2J DataPack.
- * 
- * L2J DataPack 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.
- * 
- * L2J DataPack 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/>.
- */
-package ai.npc.NpcBuffers;
-
-import ai.npc.AbstractNpcAI;
-
-import com.l2jserver.gameserver.ThreadPoolManager;
-import com.l2jserver.gameserver.model.actor.L2Npc;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.holders.SkillHolder;
-import com.l2jserver.gameserver.model.skills.L2Skill;
-import com.l2jserver.gameserver.model.zone.ZoneId;
-
-/**
- * @author UnAfraid
- */
-public class BirthdayCake extends AbstractNpcAI
-{
-	private static final int BIRTHDAY_CAKE_24 = 106;
-	private static final int BIRTHDAY_CAKE = 139;
-	
-	protected BirthdayCake(String name, String descr)
-	{
-		super(name, descr);
-		addFirstTalkId(BIRTHDAY_CAKE, BIRTHDAY_CAKE_24);
-		addSpawnId(BIRTHDAY_CAKE, BIRTHDAY_CAKE_24);
-	}
-	
-	@Override
-	public String onFirstTalk(L2Npc npc, L2PcInstance player)
-	{
-		return null;
-	}
-	
-	@Override
-	public String onSpawn(L2Npc npc)
-	{
-		addTask(npc);
-		return super.onSpawn(npc);
-	}
-	
-	private void addTask(L2Npc npc)
-	{
-		final SkillHolder holder;
-		switch (npc.getId())
-		{
-			case BIRTHDAY_CAKE:
-			{
-				holder = new SkillHolder(22035, 1);
-				break;
-			}
-			case BIRTHDAY_CAKE_24:
-			{
-				holder = new SkillHolder(22250, 1);
-				break;
-			}
-			default:
-			{
-				return;
-			}
-		}
-		
-		ThreadPoolManager.getInstance().scheduleGeneral(new BirthdayCakeAI(npc, holder), 1000);
-	}
-	
-	protected class BirthdayCakeAI implements Runnable
-	{
-		private final L2Npc _npc;
-		private final SkillHolder _holder;
-		
-		protected BirthdayCakeAI(L2Npc npc, SkillHolder holder)
-		{
-			_npc = npc;
-			_holder = holder;
-		}
-		
-		@Override
-		public void run()
-		{
-			if ((_npc == null) || !_npc.isVisible() || (_holder == null) || (_holder.getSkill() == null))
-			{
-				return;
-			}
-			
-			if (!_npc.isInsideZone(ZoneId.PEACE))
-			{
-				L2Skill skill = _holder.getSkill();
-				switch (_npc.getId())
-				{
-					case BIRTHDAY_CAKE:
-					{
-						for (L2PcInstance player : _npc.getKnownList().getKnownPlayersInRadius(skill.getAffectRange()))
-						{
-							skill.getEffects(_npc, player);
-						}
-						break;
-					}
-					case BIRTHDAY_CAKE_24:
-					{
-						final L2PcInstance player = _npc.getSummoner().getActingPlayer();
-						if (player == null)
-						{
-							ThreadPoolManager.getInstance().scheduleGeneral(this, 1000);
-							return;
-						}
-						
-						if (!player.isInParty())
-						{
-							if (player.isInsideRadius(_npc, skill.getAffectRange(), true, true))
-							{
-								skill.getEffects(_npc, player);
-							}
-						}
-						else
-						{
-							for (L2PcInstance member : player.getParty().getMembers())
-							{
-								if ((member != null) && member.isInsideRadius(_npc, skill.getAffectRange(), true, true))
-								{
-									skill.getEffects(_npc, member);
-								}
-							}
-						}
-						break;
-					}
-				}
-			}
-			ThreadPoolManager.getInstance().scheduleGeneral(this, 1000);
-		}
-	}
-	
-	public static void main(String[] args)
-	{
-		new BirthdayCake(BirthdayCake.class.getSimpleName(), "ai/npc");
-	}
-}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/ChristmasTree.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/ChristmasTree.java
deleted file mode 100644
index a1e117ef482d7002c6150d2a24c8d9757fdb9734..0000000000000000000000000000000000000000
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/ChristmasTree.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2004-2013 L2J DataPack
- * 
- * This file is part of L2J DataPack.
- * 
- * L2J DataPack 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.
- * 
- * L2J DataPack 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/>.
- */
-package ai.npc.NpcBuffers;
-
-import ai.npc.AbstractNpcAI;
-
-import com.l2jserver.gameserver.ThreadPoolManager;
-import com.l2jserver.gameserver.model.actor.L2Npc;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.holders.SkillHolder;
-import com.l2jserver.gameserver.model.skills.L2Skill;
-import com.l2jserver.gameserver.model.zone.ZoneId;
-
-/**
- * @author Drunkard, Zabb0x
- */
-public class ChristmasTree extends AbstractNpcAI
-{
-	private static final int CHRISTMAS_TREE = 13007;
-	
-	protected ChristmasTree(String name, String descr)
-	{
-		super(name, descr);
-		addFirstTalkId(CHRISTMAS_TREE);
-		addSpawnId(CHRISTMAS_TREE);
-	}
-	
-	@Override
-	public String onFirstTalk(L2Npc npc, L2PcInstance player)
-	{
-		return null;
-	}
-	
-	@Override
-	public String onSpawn(L2Npc npc)
-	{
-		addTask(npc);
-		return super.onSpawn(npc);
-	}
-	
-	private void addTask(L2Npc npc)
-	{
-		final SkillHolder holder = new SkillHolder(2139, 1);
-		ThreadPoolManager.getInstance().scheduleGeneral(new ChristmasTreeAI(npc, holder), 1000);
-	}
-	
-	protected class ChristmasTreeAI implements Runnable
-	{
-		private final L2Npc _npc;
-		private final SkillHolder _holder;
-		
-		protected ChristmasTreeAI(L2Npc npc, SkillHolder holder)
-		{
-			_npc = npc;
-			_holder = holder;
-		}
-		
-		@Override
-		public void run()
-		{
-			if ((_npc == null) || !_npc.isVisible() || (_holder == null) || (_holder.getSkill() == null))
-			{
-				return;
-			}
-			
-			if (!_npc.isInsideZone(ZoneId.PEACE))
-			{
-				L2Skill skill = _holder.getSkill();
-				
-				if ((_npc.getSummoner() == null) || !_npc.getSummoner().isPlayer())
-				{
-					ThreadPoolManager.getInstance().scheduleGeneral(this, 1000);
-					return;
-				}
-				
-				final L2PcInstance player = _npc.getSummoner().getActingPlayer();
-				
-				if (!player.isInParty())
-				{
-					if (player.isInsideRadius(_npc, skill.getAffectRange(), true, true))
-					{
-						skill.getEffects(_npc, player);
-					}
-				}
-				else
-				{
-					for (L2PcInstance member : player.getParty().getMembers())
-					{
-						if ((member != null) && member.isInsideRadius(_npc, skill.getAffectRange(), true, true))
-						{
-							skill.getEffects(_npc, member);
-						}
-					}
-				}
-			}
-			ThreadPoolManager.getInstance().scheduleGeneral(this, 1000);
-		}
-	}
-	
-	public static void main(String[] args)
-	{
-		new ChristmasTree(ChristmasTree.class.getSimpleName(), "ai/npc");
-	}
-}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferAI.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferAI.java
new file mode 100644
index 0000000000000000000000000000000000000000..8fb3ab1d8c3c7c018c8ff2c32bffd6e041d12d4e
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferAI.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2004-2013 L2J Server
+ * 
+ * This file is part of L2J Server.
+ * 
+ * L2J Server 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.
+ * 
+ * L2J Server 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/>.
+ */
+package ai.npc.NpcBuffers;
+
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.model.L2Party;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.skills.L2Skill;
+import com.l2jserver.gameserver.util.Util;
+
+/**
+ * @author UnAfraid
+ */
+public class NpcBufferAI implements Runnable
+{
+	private final L2Npc _npc;
+	private final NpcBufferSkillData _skillData;
+	
+	protected NpcBufferAI(L2Npc npc, NpcBufferSkillData skill)
+	{
+		_npc = npc;
+		_skillData = skill;
+	}
+	
+	@Override
+	public void run()
+	{
+		if ((_npc == null) || !_npc.isVisible() || _npc.isDecayed() || _npc.isDead() || (_skillData == null) || (_skillData.getSkill() == null))
+		{
+			return;
+		}
+		
+		final L2Skill skill = _skillData.getSkill();
+		if ((_npc.getSummoner() == null) || !_npc.getSummoner().isPlayer())
+		{
+			return;
+		}
+		final L2PcInstance player = _npc.getSummoner().getActingPlayer();
+		switch (_skillData.getAffectScope())
+		{
+			case PARTY:
+			{
+				if (!player.isInParty())
+				{
+					if (Util.checkIfInRange(Config.ALT_PARTY_RANGE, _npc, player, true))
+					{
+						skill.getEffects(player, player);
+					}
+				}
+				else
+				{
+					for (L2PcInstance member : player.getParty().getMembers())
+					{
+						if (Util.checkIfInRange(Config.ALT_PARTY_RANGE, _npc, member, true))
+						{
+							skill.getEffects(player, member);
+						}
+					}
+				}
+				break;
+			}
+			case RANGE:
+			{
+				for (L2Character target : _npc.getKnownList().getKnownCharactersInRadius(skill.getAffectRange()))
+				{
+					switch (_skillData.getAffectObject())
+					{
+						case FRIEND:
+						{
+							if (isFriendly(player, target))
+							{
+								skill.getEffects(target, target);
+							}
+							break;
+						}
+						case NOT_FRIEND:
+						{
+							if (!isFriendly(player, target))
+							{
+								skill.getEffects(target, target);
+							}
+							break;
+						}
+					}
+				}
+				break;
+			}
+		}
+		ThreadPoolManager.getInstance().scheduleGeneral(this, _skillData.getDelay());
+	}
+	
+	private boolean isFriendly(L2PcInstance player, L2Character target)
+	{
+		if (target.isPlayable())
+		{
+			final L2PcInstance targetPlayer = target.getActingPlayer();
+			if (targetPlayer == null)
+			{
+				return false;
+			}
+			
+			if (player.isInParty())
+			{
+				final L2Party party = player.getParty();
+				
+				// Same party.
+				if (party.containsPlayer(targetPlayer))
+				{
+					return true;
+				}
+				
+				// Same command channel.
+				if (party.isInCommandChannel() && party.getCommandChannel().containsPlayer(targetPlayer))
+				{
+					return true;
+				}
+			}
+			
+			// Same clan.
+			if ((player.getClanId() > 0) && (player.getClanId() == target.getClanId()))
+			{
+				return true;
+			}
+			
+			// Same ally.
+			if ((player.getAllyId() > 0) && (player.getAllyId() == target.getAllyId()))
+			{
+				return true;
+			}
+		}
+		return false;
+	}
+}
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferData.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferData.java
new file mode 100644
index 0000000000000000000000000000000000000000..c0421e04fd1e8b735316dff67b1d0c99232fa3bd
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferData.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2004-2013 L2J Server
+ * 
+ * This file is part of L2J Server.
+ * 
+ * L2J Server 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.
+ * 
+ * L2J Server 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/>.
+ */
+package ai.npc.NpcBuffers;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author UnAfraid
+ */
+public class NpcBufferData
+{
+	private final int _id;
+	private final List<NpcBufferSkillData> _skills = new ArrayList<>();
+	
+	public NpcBufferData(int id)
+	{
+		_id = id;
+	}
+	
+	public int getId()
+	{
+		return _id;
+	}
+	
+	public void addSkill(NpcBufferSkillData skill)
+	{
+		_skills.add(skill);
+	}
+	
+	public List<NpcBufferSkillData> getSkills()
+	{
+		return _skills;
+	}
+}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferSkillData.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferSkillData.java
new file mode 100644
index 0000000000000000000000000000000000000000..209433c33b005df307d3d2f947188dddc7b8e577
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferSkillData.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2004-2013 L2J Server
+ * 
+ * This file is part of L2J Server.
+ * 
+ * L2J Server 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.
+ * 
+ * L2J Server 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/>.
+ */
+package ai.npc.NpcBuffers;
+
+import com.l2jserver.gameserver.model.StatsSet;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
+import com.l2jserver.gameserver.model.skills.L2Skill;
+import com.l2jserver.gameserver.model.skills.targets.AffectObject;
+import com.l2jserver.gameserver.model.skills.targets.AffectScope;
+
+/**
+ * @author UnAfraid
+ */
+public class NpcBufferSkillData
+{
+	private final SkillHolder _skill;
+	private final int _initialDelay;
+	private final int _delay;
+	private final AffectScope _affectScope;
+	private final AffectObject _affectObject;
+	
+	public NpcBufferSkillData(StatsSet set)
+	{
+		_skill = new SkillHolder(set.getInt("id"), set.getInt("level"));
+		_initialDelay = set.getInt("skillInitDelay", 0) * 1000;
+		_delay = set.getInt("delay") * 1000;
+		_affectScope = set.getEnum("affectScope", AffectScope.class);
+		_affectObject = set.getEnum("affectObject", AffectObject.class);
+	}
+	
+	public L2Skill getSkill()
+	{
+		return _skill.getSkill();
+	}
+	
+	public int getInitialDelay()
+	{
+		return _initialDelay;
+	}
+	
+	public int getDelay()
+	{
+		return _delay;
+	}
+	
+	public AffectScope getAffectScope()
+	{
+		return _affectScope;
+	}
+	
+	public AffectObject getAffectObject()
+	{
+		return _affectObject;
+	}
+}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffers.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffers.java
new file mode 100644
index 0000000000000000000000000000000000000000..e017fe3f64d85327697a9021dc8d5bc80277c290
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffers.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2004-2013 L2J Server
+ * 
+ * This file is part of L2J Server.
+ * 
+ * L2J Server 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.
+ * 
+ * L2J Server 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/>.
+ */
+package ai.npc.NpcBuffers;
+
+import ai.npc.AbstractNpcAI;
+
+import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+
+/**
+ * @author UnAfraid
+ */
+public final class NpcBuffers extends AbstractNpcAI
+{
+	private final NpcBuffersData _npcBuffers = new NpcBuffersData();
+	
+	private NpcBuffers(String name, String descr)
+	{
+		super(name, descr);
+		
+		for (int npcId : _npcBuffers.getNpcBufferIds())
+		{
+			// TODO: Cleanup once npc rework is finished and default html is configurable.
+			addFirstTalkId(npcId);
+			addSpawnId(npcId);
+		}
+	}
+	
+	// TODO: Cleanup once npc rework is finished and default html is configurable.
+	@Override
+	public String onFirstTalk(L2Npc npc, L2PcInstance player)
+	{
+		return null;
+	}
+	
+	@Override
+	public String onSpawn(L2Npc npc)
+	{
+		final NpcBufferData data = _npcBuffers.getNpcBuffer(npc.getId());
+		for (NpcBufferSkillData skill : data.getSkills())
+		{
+			ThreadPoolManager.getInstance().scheduleAi(new NpcBufferAI(npc, skill), skill.getInitialDelay());
+		}
+		return super.onSpawn(npc);
+	}
+	
+	public static void main(String[] args)
+	{
+		new NpcBuffers(NpcBuffers.class.getSimpleName(), "npc");
+	}
+}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffersData.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffersData.java
new file mode 100644
index 0000000000000000000000000000000000000000..44200980f2d98c6c51197ad3c738c662bcd03c2f
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffersData.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2004-2013 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack 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.
+ * 
+ * L2J DataPack 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/>.
+ */
+package ai.npc.NpcBuffers;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Level;
+
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+
+import com.l2jserver.gameserver.engines.DocumentParser;
+import com.l2jserver.gameserver.model.StatsSet;
+
+/**
+ * @author UnAfraid
+ */
+public class NpcBuffersData extends DocumentParser
+{
+	private final Map<Integer, NpcBufferData> _npcBuffers = new HashMap<>();
+	
+	protected NpcBuffersData()
+	{
+		load();
+	}
+	
+	@Override
+	public void load()
+	{
+		parseDatapackFile("data/scripts/ai/npc/NpcBuffers/NpcBuffersData.xml");
+		_log.log(Level.INFO, getClass().getSimpleName() + ": Loaded: " + _npcBuffers.size() + " buffers data.");
+	}
+	
+	@Override
+	protected void parseDocument()
+	{
+		StatsSet set;
+		Node attr;
+		NamedNodeMap attrs;
+		for (Node n = getCurrentDocument().getFirstChild(); n != null; n = n.getNextSibling())
+		{
+			if ("list".equalsIgnoreCase(n.getNodeName()))
+			{
+				for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
+				{
+					if ("npc".equalsIgnoreCase(d.getNodeName()))
+					{
+						attrs = d.getAttributes();
+						final int npcId = parseInt(attrs, "id");
+						final NpcBufferData npc = new NpcBufferData(npcId);
+						for (Node c = d.getFirstChild(); c != null; c = c.getNextSibling())
+						{
+							switch (c.getNodeName())
+							{
+								case "skill":
+								{
+									attrs = c.getAttributes();
+									set = new StatsSet();
+									for (int i = 0; i < attrs.getLength(); i++)
+									{
+										attr = attrs.item(i);
+										set.set(attr.getNodeName(), attr.getNodeValue());
+									}
+									npc.addSkill(new NpcBufferSkillData(set));
+									break;
+								}
+							}
+						}
+						_npcBuffers.put(npcId, npc);
+					}
+				}
+			}
+		}
+	}
+	
+	public NpcBufferData getNpcBuffer(int npcId)
+	{
+		return _npcBuffers.get(npcId);
+	}
+	
+	public Collection<NpcBufferData> getNpcBuffers()
+	{
+		return _npcBuffers.values();
+	}
+	
+	public Set<Integer> getNpcBufferIds()
+	{
+		return _npcBuffers.keySet();
+	}
+}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffersData.xml b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffersData.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6bc5566ec7abb5f3e2b76fb8bd945b4a047e14f3
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffersData.xml
@@ -0,0 +1,101 @@
+<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="NpcBuffersData.xsd">
+	<npc id="106"> <!-- Birthday Cake -->
+		<skill id="22250" level="1" initialDelay="1" delay="60" affectScope="PARTY" affectObject="FRIEND" /> <!-- Birthday Cake Vitality Buff -->
+	</npc>
+	<npc id="139"> <!-- Birthday Cake -->
+		<skill id="22035" level="1" initialDelay="1" delay="60" affectScope="PARTY" affectObject="FRIEND" /> <!-- Birthday Cake Vitality Buff -->
+	</npc>
+	<npc id="143"> <!-- Totem of Body -->
+		<skill id="23308" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Totem's Energy - Body -->
+	</npc>
+	<npc id="144"> <!-- Totem of Spirit -->
+		<skill id="23309" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Totem's Energy - Spirit -->
+	</npc>
+	<npc id="145"> <!-- Totem of Bravery -->
+		<skill id="23310" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Totem's Energy - Courage -->
+	</npc>
+	<npc id="146"> <!-- Totem of Fortitude -->
+		<skill id="23311" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Totem's Energy - Fortitude -->
+	</npc>
+	<npc id="13007"> <!-- Special Christmas Tree -->
+		<skill id="2139" level="1" initialDelay="1" delay="10" affectScope="RANGE" affectObject="FRIEND" /> <!-- Special Tree Recovery Bonus -->
+	</npc>
+	<npc id="13018">
+		<skill id="5123" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Maximum Defense -->
+	</npc>
+	<npc id="13019">
+		<skill id="5124" level="1" initialDelay="1" delay="2" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Anti-Music -->
+	</npc>
+	<npc id="13020">
+		<skill id="5125" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Maximum Resist Status -->
+	</npc>
+	<npc id="13021">
+		<skill id="5126" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Maximum Recovery -->
+	</npc>
+	<npc id="13022">
+		<skill id="5127" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Recover Force -->
+	</npc>
+	<npc id="13023">
+		<skill id="5128" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Maximize long-range weapon use -->
+	</npc>
+	<npc id="13024">
+		<skill id="5129" level="1" initialDelay="1" delay="5" affectScope="RANGE" affectObject="FRIEND" /> <!-- Smokescreen -->
+	</npc>
+	<npc id="13025">
+		<skill id="5145" level="1" initialDelay="1" delay="2" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Day of Doom -->
+	</npc>
+	<npc id="13030">
+		<skill id="5134" level="1" initialDelay="1" delay="2" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Anti-Summoning Field -->
+	</npc>
+	<npc id="13071"> <!-- Virtual Image -->
+		<skill id="5272" level="1" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation -->
+	</npc>
+	<npc id="13072"> <!-- Virtual Image -->
+		<skill id="5272" level="2" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation -->
+	</npc>
+	<npc id="13073"> <!-- Virtual Image -->
+		<skill id="5272" level="3" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation -->
+	</npc>
+	<npc id="13074"> <!-- Virtual Image -->
+		<skill id="5272" level="4" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation -->
+	</npc>
+	<npc id="13075"> <!-- Virtual Image -->
+		<skill id="5272" level="5" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation -->
+	</npc>
+	<npc id="13076"> <!-- Virtual Image -->
+		<skill id="5272" level="6" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation -->
+	</npc>
+	<npc id="13257"> <!-- Virtual Image -->
+		<skill id="5272" level="7" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation -->
+	</npc>
+	<npc id="13258"> <!-- Virtual Image -->
+		<skill id="5272" level="8" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation -->
+	</npc>
+	<npc id="13259"> <!-- Virtual Image -->
+		<skill id="5272" level="9" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation -->
+	</npc>
+	<npc id="13260"> <!-- Virtual Image -->
+		<skill id="5272" level="10" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation -->
+	</npc>
+	<npc id="13261"> <!-- Virtual Image -->
+		<skill id="5272" level="11" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation -->
+	</npc>
+	<npc id="13262"> <!-- Virtual Image -->
+		<skill id="5272" level="12" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation -->
+	</npc>
+	<npc id="13263"> <!-- Virtual Image -->
+		<skill id="5272" level="13" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation -->
+	</npc>
+	<npc id="13264"> <!-- Virtual Image -->
+		<skill id="5272" level="14" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation -->
+	</npc>
+	<npc id="13265"> <!-- Virtual Image -->
+		<skill id="5272" level="15" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation -->
+	</npc>
+	<npc id="13266"> <!-- Virtual Image -->
+		<skill id="5272" level="16" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation -->
+	</npc>
+	<npc id="13267"> <!-- Virtual Image -->
+		<skill id="5272" level="17" delay="5" affectScope="RANGE" affectObject="NOT_FRIEND" /> <!-- Decoy Provocation -->
+	</npc>
+</list>
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffersData.xsd b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffersData.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..4d7f9ae9a406d0f2a626d4988033e615b101b9ec
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBuffersData.xsd
@@ -0,0 +1,25 @@
+<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+	<xs:element name="list">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="npc" maxOccurs="unbounded" minOccurs="0">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="skill">
+								<xs:complexType>
+									<xs:attribute type="xs:positiveInteger" name="id" use="required" />
+									<xs:attribute type="xs:short" name="level" use="required" />
+									<xs:attribute type="xs:positiveInteger" name="initialDelay" use="optional" />
+									<xs:attribute type="xs:positiveInteger" name="delay" use="required" />
+									<xs:attribute type="xs:string" name="affectScope" use="optional" />
+									<xs:attribute type="xs:string" name="affectObject" use="optional" />
+								</xs:complexType>
+							</xs:element>
+						</xs:sequence>
+						<xs:attribute type="xs:positiveInteger" name="id" use="required" />
+					</xs:complexType>
+				</xs:element>
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+</xs:schema>
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/Totems.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/Totems.java
deleted file mode 100644
index d132cca552af6ba42306530803085f9c471ab9f2..0000000000000000000000000000000000000000
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/Totems.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2004-2013 L2J DataPack
- * 
- * This file is part of L2J DataPack.
- * 
- * L2J DataPack 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.
- * 
- * L2J DataPack 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/>.
- */
-package ai.npc.NpcBuffers;
-
-import ai.npc.AbstractNpcAI;
-
-import com.l2jserver.gameserver.ThreadPoolManager;
-import com.l2jserver.gameserver.model.actor.L2Npc;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.holders.SkillHolder;
-import com.l2jserver.gameserver.model.skills.L2Skill;
-
-/**
- * @author UnAfraid
- */
-public class Totems extends AbstractNpcAI
-{
-	private static final int TOTEM_OF_BODY = 143;
-	private static final int TOTEM_OF_SPIRIT = 144;
-	private static final int TOTEM_OF_BRAVERY = 145;
-	private static final int TOTEM_OF_FORTITUDE = 146;
-	
-	protected Totems(String name, String descr)
-	{
-		super(name, descr);
-		addFirstTalkId(TOTEM_OF_BODY, TOTEM_OF_SPIRIT, TOTEM_OF_BRAVERY, TOTEM_OF_FORTITUDE);
-		addSpawnId(TOTEM_OF_BODY, TOTEM_OF_SPIRIT, TOTEM_OF_BRAVERY, TOTEM_OF_FORTITUDE);
-	}
-	
-	@Override
-	public String onFirstTalk(L2Npc npc, L2PcInstance player)
-	{
-		return null;
-	}
-	
-	@Override
-	public String onSpawn(L2Npc npc)
-	{
-		addTask(npc);
-		return super.onSpawn(npc);
-	}
-	
-	private void addTask(L2Npc npc)
-	{
-		final SkillHolder holder;
-		switch (npc.getId())
-		{
-			case TOTEM_OF_BODY:
-			{
-				holder = new SkillHolder(23308, 1);
-				break;
-			}
-			case TOTEM_OF_SPIRIT:
-			{
-				holder = new SkillHolder(23309, 1);
-				break;
-			}
-			case TOTEM_OF_BRAVERY:
-			{
-				holder = new SkillHolder(23310, 1);
-				break;
-			}
-			case TOTEM_OF_FORTITUDE:
-			{
-				holder = new SkillHolder(23311, 1);
-				break;
-			}
-			default:
-			{
-				return;
-			}
-		}
-		
-		ThreadPoolManager.getInstance().scheduleGeneral(new TotemAI(npc, holder), 1000);
-	}
-	
-	protected class TotemAI implements Runnable
-	{
-		private final L2Npc _npc;
-		private final SkillHolder _holder;
-		
-		protected TotemAI(L2Npc npc, SkillHolder holder)
-		{
-			_npc = npc;
-			_holder = holder;
-		}
-		
-		@Override
-		public void run()
-		{
-			if ((_npc == null) || !_npc.isVisible() || (_holder == null) || (_holder.getSkill() == null))
-			{
-				return;
-			}
-			
-			L2Skill skill = _holder.getSkill();
-			for (L2PcInstance player : _npc.getKnownList().getKnownPlayersInRadius(skill.getAffectRange()))
-			{
-				if (player.getFirstEffect(skill.getId()) == null)
-				{
-					skill.getEffects(player, player);
-				}
-			}
-			ThreadPoolManager.getInstance().scheduleGeneral(this, 1000);
-		}
-	}
-	
-	public static void main(String[] args)
-	{
-		new Totems(Totems.class.getSimpleName(), "ai/npc");
-	}
-}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/CabaleBuffer.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/impl/CabaleBuffer.java
similarity index 96%
rename from L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/CabaleBuffer.java
rename to L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/impl/CabaleBuffer.java
index 260f4471b21140ef52aceedc6a33c74cc3856e42..d1b38359928c3068e6d0d8755a9210f47362173e 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/CabaleBuffer.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/impl/CabaleBuffer.java
@@ -16,7 +16,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
-package ai.npc.NpcBuffers;
+package ai.npc.NpcBuffers.impl;
 
 import java.util.Collection;
 
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java
index 0738a5e71909757550ee3efdcdad955baae47e3e..10e0cfd68aabe1edf2b9b795b4e1432e9865eb8c 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java
@@ -94,7 +94,6 @@ public final class EffectMasterHandler
 		Flag.class,
 		FocusMaxEnergy.class,
 		FocusSouls.class,
-		Fusion.class,
 		GetAgro.class,
 		GiveSp.class,
 		Grow.class,
@@ -147,10 +146,6 @@ public final class EffectMasterHandler
 		Root.class,
 		ServitorShare.class,
 		SetSkill.class,
-		Signet.class,
-		SignetAntiSummon.class,
-		SignetMDam.class,
-		SignetNoise.class,
 		SilentMove.class,
 		SkillTurning.class,
 		Sleep.class,
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Fusion.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Fusion.java
deleted file mode 100644
index eb2eb9b6614b4fe706b1d7d762d8c5b11fb6e939..0000000000000000000000000000000000000000
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Fusion.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2004-2013 L2J DataPack
- * 
- * This file is part of L2J DataPack.
- * 
- * L2J DataPack 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.
- * 
- * L2J DataPack 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/>.
- */
-package handlers.effecthandlers;
-
-import com.l2jserver.gameserver.datatables.SkillTable;
-import com.l2jserver.gameserver.model.effects.EffectTemplate;
-import com.l2jserver.gameserver.model.effects.L2Effect;
-import com.l2jserver.gameserver.model.effects.L2EffectType;
-import com.l2jserver.gameserver.model.stats.Env;
-
-/**
- * Fusion effect implementation.
- * @author Kerberos
- */
-public class Fusion extends L2Effect
-{
-	public int _effect;
-	public int _maxEffect;
-	
-	public Fusion(Env env, EffectTemplate template)
-	{
-		super(env, template);
-		_effect = getSkill().getLevel();
-		_maxEffect = SkillTable.getInstance().getMaxLevel(getSkill().getId());
-	}
-	
-	@Override
-	public void decreaseForce()
-	{
-		_effect--;
-		if (_effect < 1)
-		{
-			exit();
-		}
-		else
-		{
-			updateBuff();
-		}
-	}
-	
-	@Override
-	public L2EffectType getEffectType()
-	{
-		return L2EffectType.FUSION;
-	}
-	
-	@Override
-	public void increaseEffect()
-	{
-		if (_effect < _maxEffect)
-		{
-			_effect++;
-			updateBuff();
-		}
-	}
-	
-	private void updateBuff()
-	{
-		exit();
-		SkillTable.getInstance().getInfo(getSkill().getId(), _effect).getEffects(getEffector(), getEffected());
-	}
-}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Signet.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Signet.java
deleted file mode 100644
index 32319d989654c448d41252be46458cb8446aa3dc..0000000000000000000000000000000000000000
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Signet.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2004-2013 L2J DataPack
- * 
- * This file is part of L2J DataPack.
- * 
- * L2J DataPack 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.
- * 
- * L2J DataPack 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/>.
- */
-package handlers.effecthandlers;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.l2jserver.gameserver.datatables.SkillTable;
-import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.effects.EffectTemplate;
-import com.l2jserver.gameserver.model.effects.L2Effect;
-import com.l2jserver.gameserver.model.effects.L2EffectType;
-import com.l2jserver.gameserver.model.skills.L2Skill;
-import com.l2jserver.gameserver.model.skills.l2skills.L2SkillSignet;
-import com.l2jserver.gameserver.model.skills.l2skills.L2SkillSignetCasttime;
-import com.l2jserver.gameserver.model.stats.Env;
-import com.l2jserver.gameserver.model.zone.ZoneId;
-import com.l2jserver.gameserver.network.SystemMessageId;
-import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
-
-/**
- * Signet effect implementation.
- * @author Forsaiken, Sami
- */
-public class Signet extends L2Effect
-{
-	private L2Skill _skill;
-	private boolean _srcInArena;
-	
-	public Signet(Env env, EffectTemplate template)
-	{
-		super(env, template);
-	}
-	
-	@Override
-	public L2EffectType getEffectType()
-	{
-		return L2EffectType.SIGNET_EFFECT;
-	}
-	
-	@Override
-	public boolean onActionTime()
-	{
-		if (_skill == null)
-		{
-			return false;
-		}
-		
-		int mpConsume = _skill.getMpConsume();
-		if (mpConsume > getEffector().getCurrentMp())
-		{
-			getEffector().sendPacket(SystemMessageId.SKILL_REMOVED_DUE_LACK_MP);
-			return false;
-		}
-		getEffector().reduceCurrentMp(mpConsume);
-		
-		List<L2Character> targets = new ArrayList<>();
-		for (L2Character cha : getEffected().getKnownList().getKnownCharactersInRadius(getSkill().getAffectRange()))
-		{
-			if (cha == null)
-			{
-				continue;
-			}
-			
-			if (_skill.isBad() && !L2Skill.checkForAreaOffensiveSkills(getEffector(), cha, _skill, _srcInArena))
-			{
-				continue;
-			}
-			
-			getEffected().broadcastPacket(new MagicSkillUse(getEffected(), cha, _skill.getId(), _skill.getLevel(), 0, 0));
-			targets.add(cha);
-		}
-		
-		if (!targets.isEmpty())
-		{
-			getEffector().callSkill(_skill, targets.toArray(new L2Character[targets.size()]));
-		}
-		return false;
-	}
-	
-	@Override
-	public void onExit()
-	{
-		if (getEffected() != null)
-		{
-			getEffected().deleteMe();
-		}
-	}
-	
-	@Override
-	public boolean onStart()
-	{
-		if (getSkill() instanceof L2SkillSignet)
-		{
-			_skill = SkillTable.getInstance().getInfo(getSkill().getEffectId(), getSkill().getLevel());
-		}
-		else if (getSkill() instanceof L2SkillSignetCasttime)
-		{
-			_skill = SkillTable.getInstance().getInfo(getSkill().getEffectId(), getSkill().getLevel());
-		}
-		_srcInArena = (getEffector().isInsideZone(ZoneId.PVP) && !getEffector().isInsideZone(ZoneId.SIEGE));
-		return true;
-	}
-}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SignetAntiSummon.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SignetAntiSummon.java
deleted file mode 100644
index 80a11b82da20e99df5defbaaf5aa1c6ee8cb15ea..0000000000000000000000000000000000000000
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SignetAntiSummon.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2004-2013 L2J DataPack
- * 
- * This file is part of L2J DataPack.
- * 
- * L2J DataPack 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.
- * 
- * L2J DataPack 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/>.
- */
-package handlers.effecthandlers;
-
-import com.l2jserver.gameserver.ai.CtrlEvent;
-import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.actor.L2Summon;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.effects.EffectTemplate;
-import com.l2jserver.gameserver.model.effects.L2Effect;
-import com.l2jserver.gameserver.model.effects.L2EffectType;
-import com.l2jserver.gameserver.model.stats.Env;
-import com.l2jserver.gameserver.network.SystemMessageId;
-
-/**
- * Signet Anti Summon effect implementation.
- * @author Forsaiken
- */
-public class SignetAntiSummon extends L2Effect
-{
-	public SignetAntiSummon(Env env, EffectTemplate template)
-	{
-		super(env, template);
-	}
-	
-	@Override
-	public L2EffectType getEffectType()
-	{
-		return L2EffectType.SIGNET_GROUND;
-	}
-	
-	@Override
-	public boolean onActionTime()
-	{
-		int mpConsume = getSkill().getMpConsume();
-		L2PcInstance caster = getEffector().getActingPlayer();
-		for (L2Character cha : getEffected().getKnownList().getKnownCharactersInRadius(getSkill().getAffectRange()))
-		{
-			if (cha == null)
-			{
-				continue;
-			}
-			
-			if (cha.isPlayable())
-			{
-				if (caster.canAttackCharacter(cha))
-				{
-					L2PcInstance owner = null;
-					if (cha.isSummon())
-					{
-						owner = ((L2Summon) cha).getOwner();
-					}
-					else
-					{
-						owner = cha.getActingPlayer();
-					}
-					
-					if ((owner != null) && owner.hasSummon())
-					{
-						if (mpConsume > getEffector().getCurrentMp())
-						{
-							getEffector().sendPacket(SystemMessageId.SKILL_REMOVED_DUE_LACK_MP);
-							return false;
-						}
-						
-						getEffector().reduceCurrentMp(mpConsume);
-						owner.getSummon().unSummon(owner);
-						owner.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, getEffector());
-					}
-				}
-			}
-		}
-		return false;
-	}
-	
-	@Override
-	public void onExit()
-	{
-		if (getEffected() != null)
-		{
-			getEffected().deleteMe();
-		}
-	}
-	
-	@Override
-	public boolean onStart()
-	{
-		return true;
-	}
-}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SignetMDam.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SignetMDam.java
deleted file mode 100644
index d20d97dced34bc391854755130b07f6bca47ff91..0000000000000000000000000000000000000000
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SignetMDam.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (C) 2004-2013 L2J DataPack
- * 
- * This file is part of L2J DataPack.
- * 
- * L2J DataPack 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.
- * 
- * L2J DataPack 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/>.
- */
-
-/**
- * @author Forsaiken
- */
-package handlers.effecthandlers;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.l2jserver.gameserver.ai.CtrlEvent;
-import com.l2jserver.gameserver.datatables.NpcTable;
-import com.l2jserver.gameserver.enums.ShotType;
-import com.l2jserver.gameserver.idfactory.IdFactory;
-import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.actor.instance.L2EffectPointInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
-import com.l2jserver.gameserver.model.effects.EffectTemplate;
-import com.l2jserver.gameserver.model.effects.L2Effect;
-import com.l2jserver.gameserver.model.effects.L2EffectType;
-import com.l2jserver.gameserver.model.skills.targets.L2TargetType;
-import com.l2jserver.gameserver.model.stats.Env;
-import com.l2jserver.gameserver.model.stats.Formulas;
-import com.l2jserver.gameserver.network.SystemMessageId;
-import com.l2jserver.gameserver.network.serverpackets.MagicSkillLaunched;
-import com.l2jserver.gameserver.util.Point3D;
-
-/**
- * Signet MDam effect implementation.
- */
-public class SignetMDam extends L2Effect
-{
-	private L2EffectPointInstance _actor;
-	
-	public SignetMDam(Env env, EffectTemplate template)
-	{
-		super(env, template);
-	}
-	
-	@Override
-	public L2EffectType getEffectType()
-	{
-		return L2EffectType.SIGNET_GROUND;
-	}
-	
-	@Override
-	public boolean onActionTime()
-	{
-		if (_actor == null)
-		{
-			return false;
-		}
-		
-		final int mpConsume = getSkill().getMpConsume();
-		final L2PcInstance activeChar = getEffector().getActingPlayer();
-		activeChar.rechargeShots(getSkill().useSoulShot(), getSkill().useSpiritShot());
-		boolean sps = getSkill().useSpiritShot() && getEffector().isChargedShot(ShotType.SPIRITSHOTS);
-		boolean bss = getSkill().useSpiritShot() && getEffector().isChargedShot(ShotType.BLESSED_SPIRITSHOTS);
-		final List<L2Character> targets = new ArrayList<>();
-		for (L2Character cha : _actor.getKnownList().getKnownCharactersInRadius(getSkill().getAffectRange()))
-		{
-			if ((cha == null) || (cha == activeChar))
-			{
-				continue;
-			}
-			
-			if (cha.isL2Attackable() || cha.isPlayable())
-			{
-				if (cha.isAlikeDead())
-				{
-					continue;
-				}
-				
-				if (mpConsume > activeChar.getCurrentMp())
-				{
-					activeChar.sendPacket(SystemMessageId.SKILL_REMOVED_DUE_LACK_MP);
-					return false;
-				}
-				
-				activeChar.reduceCurrentMp(mpConsume);
-				if (cha.isPlayable())
-				{
-					if (activeChar.canAttackCharacter(cha))
-					{
-						targets.add(cha);
-						activeChar.updatePvPStatus(cha);
-					}
-				}
-				else
-				{
-					targets.add(cha);
-				}
-			}
-		}
-		
-		if (!targets.isEmpty())
-		{
-			activeChar.broadcastPacket(new MagicSkillLaunched(activeChar, getSkill().getId(), getSkill().getLevel(), targets.toArray(new L2Character[targets.size()])));
-			for (L2Character target : targets)
-			{
-				final boolean mcrit = Formulas.calcMCrit(activeChar.getMCriticalHit(target, getSkill()));
-				final byte shld = Formulas.calcShldUse(activeChar, target, getSkill());
-				final int mdam = (int) Formulas.calcMagicDam(activeChar, target, getSkill(), shld, sps, bss, mcrit);
-				
-				if (target.isSummon())
-				{
-					target.broadcastStatusUpdate();
-				}
-				
-				if (mdam > 0)
-				{
-					if (!target.isRaid() && Formulas.calcAtkBreak(target, mdam))
-					{
-						target.breakAttack();
-						target.breakCast();
-					}
-					activeChar.sendDamageMessage(target, mdam, mcrit, false, false);
-					target.reduceCurrentHp(mdam, activeChar, getSkill());
-					target.notifyDamageReceived(mdam, activeChar, getSkill(), mcrit);
-				}
-				target.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, activeChar);
-			}
-		}
-		activeChar.setChargedShot(bss ? ShotType.BLESSED_SPIRITSHOTS : ShotType.SPIRITSHOTS, false);
-		return false;
-	}
-	
-	@Override
-	public void onExit()
-	{
-		if (_actor != null)
-		{
-			_actor.deleteMe();
-		}
-	}
-	
-	@Override
-	public boolean onStart()
-	{
-		final L2NpcTemplate template = NpcTable.getInstance().getTemplate(getSkill().getNpcId());
-		_actor = new L2EffectPointInstance(IdFactory.getInstance().getNextId(), template, getEffector());
-		_actor.setCurrentHp(_actor.getMaxHp());
-		_actor.setCurrentMp(_actor.getMaxMp());
-		int x = getEffector().getX();
-		int y = getEffector().getY();
-		int z = getEffector().getZ();
-		if (getEffector().isPlayer() && (getSkill().getTargetType() == L2TargetType.GROUND))
-		{
-			final Point3D wordPosition = getEffector().getActingPlayer().getCurrentSkillWorldPosition();
-			if (wordPosition != null)
-			{
-				x = wordPosition.getX();
-				y = wordPosition.getY();
-				z = wordPosition.getZ();
-			}
-		}
-		_actor.setIsInvul(true);
-		_actor.spawnMe(x, y, z);
-		return true;
-	}
-}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SignetNoise.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SignetNoise.java
deleted file mode 100644
index 3b52a6a95d1cd7c9a7e076646cca41685765ffaa..0000000000000000000000000000000000000000
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SignetNoise.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2004-2013 L2J DataPack
- * 
- * This file is part of L2J DataPack.
- * 
- * L2J DataPack 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.
- * 
- * L2J DataPack 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/>.
- */
-package handlers.effecthandlers;
-
-import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.effects.EffectTemplate;
-import com.l2jserver.gameserver.model.effects.L2Effect;
-import com.l2jserver.gameserver.model.effects.L2EffectType;
-import com.l2jserver.gameserver.model.stats.Env;
-
-/**
- * Signet Noise effect implementation.
- * @author Forsaiken, Sami
- */
-public class SignetNoise extends L2Effect
-{
-	public SignetNoise(Env env, EffectTemplate template)
-	{
-		super(env, template);
-	}
-	
-	@Override
-	public L2EffectType getEffectType()
-	{
-		return L2EffectType.SIGNET_GROUND;
-	}
-	
-	@Override
-	public boolean onActionTime()
-	{
-		L2PcInstance caster = getEffector().getActingPlayer();
-		for (L2Character target : getEffected().getKnownList().getKnownCharactersInRadius(getSkill().getAffectRange()))
-		{
-			if ((target == null) || (target == caster))
-			{
-				continue;
-			}
-			
-			if (caster.canAttackCharacter(target))
-			{
-				for (L2Effect effect : target.getAllEffects())
-				{
-					if (effect.getSkill().isDance())
-					{
-						effect.exit();
-					}
-				}
-			}
-		}
-		return false;
-	}
-	
-	@Override
-	public void onExit()
-	{
-		if (getEffected() != null)
-		{
-			getEffected().deleteMe();
-		}
-	}
-	
-	@Override
-	public boolean onStart()
-	{
-		return true;
-	}
-}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SummonNpc.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SummonNpc.java
index 7adb7ac764c042a86a9edde441c1c1cd5f6c7364..3c43260e7d867e0e93cef19864a5a32874618bd0 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SummonNpc.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/SummonNpc.java
@@ -104,6 +104,7 @@ public class SummonNpc extends L2Effect
 				decoy.setCurrentMp(decoy.getMaxMp());
 				decoy.setHeading(player.getHeading());
 				decoy.setInstanceId(player.getInstanceId());
+				decoy.setSummoner(player);
 				decoy.spawnMe(player.getX(), player.getY(), player.getZ());
 				player.setDecoy(decoy);
 				break;
@@ -127,9 +128,13 @@ public class SummonNpc extends L2Effect
 						z = wordPosition.getZ();
 					}
 				}
-				getSkill().getEffects(player, effectPoint);
 				effectPoint.setIsInvul(true);
+				effectPoint.setSummoner(player);
 				effectPoint.spawnMe(x, y, z);
+				if (_despawnDelay > 0)
+				{
+					effectPoint.scheduleDespawn(_despawnDelay);
+				}
 				break;
 			}
 			default:
@@ -160,9 +165,9 @@ public class SummonNpc extends L2Effect
 				spawn.stopRespawn();
 				
 				final L2Npc npc = spawn.doSpawn(_isSummonSpawn);
+				npc.setSummoner(player);
 				npc.setName(npcTemplate.getName());
 				npc.setTitle(npcTemplate.getName());
-				npc.setSummoner(player);
 				if (_despawnDelay > 0)
 				{
 					npc.scheduleDespawn(_despawnDelay);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/Continuous.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/Continuous.java
index f6a972b4fe644f3bd70e16c2a2941b274906989f..204089357259fe95728fa500924abc2b2e44f4d0 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/Continuous.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/Continuous.java
@@ -20,7 +20,6 @@ package handlers.skillhandlers;
 
 import java.util.List;
 
-import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.enums.ShotType;
 import com.l2jserver.gameserver.handler.ISkillHandler;
 import com.l2jserver.gameserver.instancemanager.DuelManager;
@@ -43,7 +42,6 @@ public class Continuous implements ISkillHandler
 		L2SkillType.BUFF,
 		L2SkillType.DEBUFF,
 		L2SkillType.CONT,
-		L2SkillType.FUSION
 	};
 	
 	@Override
@@ -57,16 +55,6 @@ public class Continuous implements ISkillHandler
 			player = activeChar.getActingPlayer();
 		}
 		
-		if (skill.getEffectId() != 0)
-		{
-			L2Skill sk = SkillTable.getInstance().getInfo(skill.getEffectId(), skill.getEffectLvl() == 0 ? 1 : skill.getEffectLvl());
-			
-			if (sk != null)
-			{
-				skill = sk;
-			}
-		}
-		
 		boolean ss = skill.useSoulShot() && activeChar.isChargedShot(ShotType.SOULSHOTS);
 		boolean sps = skill.useSpiritShot() && activeChar.isChargedShot(ShotType.SPIRITSHOTS);
 		boolean bss = skill.useSpiritShot() && activeChar.isChargedShot(ShotType.BLESSED_SPIRITSHOTS);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/PartyNotMe.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/PartyNotMe.java
index 1742c2e814de19363ce554b217e85dc2841e394d..33fec0b10a08283672fe061fec8640e1b51d64e9 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/PartyNotMe.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/PartyNotMe.java
@@ -21,10 +21,10 @@ package handlers.targethandlers;
 import java.util.ArrayList;
 import java.util.List;
 
+import com.l2jserver.Config;
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.skills.targets.L2TargetType;
@@ -38,46 +38,29 @@ public class PartyNotMe implements ITargetTypeHandler
 	@Override
 	public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
 	{
-		List<L2Character> targetList = new ArrayList<>();
-		if (onlyFirst)
-		{
-			return new L2Character[]
-			{
-				activeChar
-			};
-		}
-		
-		L2PcInstance player = null;
-		
-		if (activeChar.isSummon())
-		{
-			player = ((L2Summon) activeChar).getOwner();
-			targetList.add(player);
-		}
-		else if (activeChar.isPlayer())
-		{
-			player = activeChar.getActingPlayer();
-			if (activeChar.getSummon() != null)
-			{
-				targetList.add(activeChar.getSummon());
-			}
-		}
-		
+		final List<L2Character> targetList = new ArrayList<>();
 		if (activeChar.getParty() != null)
 		{
-			List<L2PcInstance> partyList = activeChar.getParty().getMembers();
-			
+			final List<L2PcInstance> partyList = activeChar.getParty().getMembers();
 			for (L2PcInstance partyMember : partyList)
 			{
-				if (partyMember == null)
+				if ((partyMember == null) || partyMember.isDead())
+				{
+					continue;
+				}
+				else if (partyMember == activeChar)
+				{
+					continue;
+				}
+				else if (!Util.checkIfInRange(Config.ALT_PARTY_RANGE, activeChar, partyMember, true))
 				{
 					continue;
 				}
-				else if (partyMember == player)
+				else if ((skill.getAffectRange() > 0) && !Util.checkIfInRange(skill.getAffectRange(), activeChar, partyMember, true))
 				{
 					continue;
 				}
-				else if (!partyMember.isDead() && Util.checkIfInRange(skill.getAffectRange(), activeChar, partyMember, true))
+				else
 				{
 					targetList.add(partyMember);
 					
diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/00400-00499.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/00400-00499.xml
index 8b81423f4084e69ffb14a8c688984a87d62a8a2c..c9d5032a9ffc6d30b45d53beb839015895ef21b9 100644
--- a/L2J_DataPack_BETA/dist/game/data/stats/skills/00400-00499.xml
+++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/00400-00499.xml
@@ -1140,22 +1140,34 @@
 	<skill id="426" levels="1" name="Battle Force">
 		<!-- Not Used Anymore -->
 		<set name="effectPoint" val="1" />
+		<set name="channelingSkillId" val="5104" />
+		<set name="castRange" val="400" />
+		<set name="effectPoint" val="1" />
+		<set name="effectRange" val="600" />
 		<set name="icon" val="icon.skill0426" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="77" />
+		<set name="mpPerChanneling" val="15" />
+		<set name="reuseDelay" val="30000" />
+		<set name="hitTime" val="15000" />
 		<set name="operateType" val="CA5" />
-		<set name="skillType" val="NOTDONE" />
-		<set name="targetType" val="NONE" />
+		<set name="targetType" val="PARTY_NOTME" />
 	</skill>
 	<skill id="427" levels="1" name="Spell Force">
 		<!-- Not Used Anymore -->
 		<set name="effectPoint" val="1" />
+		<set name="channelingSkillId" val="5105" />
+		<set name="castRange" val="400" />
+		<set name="effectPoint" val="1" />
+		<set name="effectRange" val="600" />
 		<set name="icon" val="icon.skill0427" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="77" />
+		<set name="mpPerChanneling" val="15" />
+		<set name="reuseDelay" val="30000" />
+		<set name="hitTime" val="15000" />
 		<set name="operateType" val="CA5" />
-		<set name="skillType" val="NOTDONE" />
-		<set name="targetType" val="NONE" />
+		<set name="targetType" val="PARTY_NOTME" />
 	</skill>
 	<skill id="428" levels="1" name="Inner Rhythm" enchantGroup1="5">
 		<table name="#ench1DanceMpConsumeRate"> 0.89 0.89 0.89 0.89 0.89 0.89 0.89 0.88 0.88 0.88 0.88 0.88 0.88 0.88 0.87 </table>
@@ -1851,8 +1863,6 @@
 		</for>
 	</skill>
 	<skill id="454" levels="1" name="Symbol of Defense">
-		<set name="affectRange" val="180" />
-		<set name="effectId" val="5123" />
 		<set name="hitTime" val="5000" />
 		<set name="icon" val="icon.skill0454" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
@@ -1861,24 +1871,21 @@
 		<set name="magicLvl" val="80" />
 		<set name="mpConsume" val="44" />
 		<set name="mpInitialConsume" val="36" />
-		<set name="npcId" val="13018" />
 		<set name="operateType" val="A1" />
 		<set name="power" val="200" />
 		<set name="reuseDelay" val="1800000" />
-		<set name="skillType" val="SIGNET" />
 		<set name="targetType" val="SELF" />
 		<cond msgId="1509">
 			<player olympiad="false" />
 		</cond>
 		<for>
-			<!-- FIXME: Remove ticks from here -->
-			<effect ticks="24" name="Signet" val="0" />
+			<effect name="SummonNpc" val="0">
+				<param npcId="13018" npcCount="1" />
+			</effect>
 		</for>
 	</skill>
 	<skill id="455" levels="1" name="Symbol of Noise">
-		<set name="affectRange" val="180" />
 		<set name="castRange" val="900" />
-		<set name="effectId" val="5124" />
 		<set name="hitTime" val="5000" />
 		<set name="icon" val="icon.skill0455" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
@@ -1887,23 +1894,20 @@
 		<set name="magicLvl" val="80" />
 		<set name="mpConsume" val="44" />
 		<set name="mpInitialConsume" val="36" />
-		<set name="npcId" val="13025" />
 		<set name="operateType" val="A1" />
 		<set name="power" val="200" />
 		<set name="reuseDelay" val="1800000" />
-		<set name="skillType" val="SIGNET" />
 		<set name="targetType" val="GROUND" />
 		<cond msgId="1509">
 			<player olympiad="false" />
 		</cond>
 		<for>
-			<!-- FIXME: Remove ticks from here -->
-			<effect ticks="6" name="SignetNoise" val="0" />
+			<effect name="SummonNpc" val="0">
+				<param npcId="13025" npcCount="1" />
+			</effect>
 		</for>
 	</skill>
 	<skill id="456" levels="1" name="Symbol of Resistance">
-		<set name="affectRange" val="180" />
-		<set name="effectId" val="5125" />
 		<set name="hitTime" val="5000" />
 		<set name="icon" val="icon.skill0456" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
@@ -1912,23 +1916,20 @@
 		<set name="magicLvl" val="80" />
 		<set name="mpConsume" val="44" />
 		<set name="mpInitialConsume" val="36" />
-		<set name="npcId" val="13018" />
 		<set name="operateType" val="A1" />
 		<set name="power" val="200" />
 		<set name="reuseDelay" val="1800000" />
-		<set name="skillType" val="SIGNET" />
 		<set name="targetType" val="SELF" />
 		<cond msgId="1509">
 			<player olympiad="false" />
 		</cond>
 		<for>
-			<!-- FIXME: Remove ticks from here -->
-			<effect ticks="24" name="Signet" val="0" />
+			<effect name="SummonNpc" val="0">
+				<param npcId="13018" npcCount="1" />
+			</effect>
 		</for>
 	</skill>
 	<skill id="457" levels="1" name="Symbol of Honor">
-		<set name="affectRange" val="180" />
-		<set name="effectId" val="5126" />
 		<set name="hitTime" val="5000" />
 		<set name="icon" val="icon.skill0457" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
@@ -1937,23 +1938,20 @@
 		<set name="magicLvl" val="80" />
 		<set name="mpConsume" val="44" />
 		<set name="mpInitialConsume" val="36" />
-		<set name="npcId" val="13018" />
 		<set name="operateType" val="A1" />
 		<set name="power" val="200" />
 		<set name="reuseDelay" val="1800000" />
-		<set name="skillType" val="SIGNET" />
 		<set name="targetType" val="SELF" />
 		<cond msgId="1509">
 			<player olympiad="false" />
 		</cond>
 		<for>
-			<!-- FIXME: Remove ticks from here -->
-			<effect ticks="24" name="Signet" val="0" />
+			<effect name="SummonNpc" val="0">
+				<param npcId="13018" npcCount="1" />
+			</effect>
 		</for>
 	</skill>
 	<skill id="458" levels="1" name="Symbol of Energy">
-		<set name="affectRange" val="180" />
-		<set name="effectId" val="5127" />
 		<set name="hitTime" val="5000" />
 		<set name="icon" val="icon.skill0458" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
@@ -1962,23 +1960,20 @@
 		<set name="magicLvl" val="80" />
 		<set name="mpConsume" val="44" />
 		<set name="mpInitialConsume" val="36" />
-		<set name="npcId" val="13018" />
 		<set name="operateType" val="A1" />
 		<set name="power" val="200" />
 		<set name="reuseDelay" val="1800000" />
-		<set name="skillType" val="SIGNET" />
 		<set name="targetType" val="SELF" />
 		<cond msgId="1509">
 			<player olympiad="false" />
 		</cond>
 		<for>
-			<!-- FIXME: Remove ticks from here -->
-			<effect ticks="24" name="Signet" val="0" />
+			<effect name="SummonNpc" val="0">
+				<param npcId="13018" npcCount="1" />
+			</effect>
 		</for>
 	</skill>
 	<skill id="459" levels="1" name="Symbol of the Sniper">
-		<set name="affectRange" val="180" />
-		<set name="effectId" val="5128" />
 		<set name="hitTime" val="5000" />
 		<set name="icon" val="icon.skill0459" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
@@ -1987,23 +1982,20 @@
 		<set name="magicLvl" val="80" />
 		<set name="mpConsume" val="44" />
 		<set name="mpInitialConsume" val="36" />
-		<set name="npcId" val="13018" />
 		<set name="operateType" val="A1" />
 		<set name="power" val="200" />
 		<set name="reuseDelay" val="1800000" />
-		<set name="skillType" val="SIGNET" />
 		<set name="targetType" val="SELF" />
 		<cond msgId="1509">
 			<player olympiad="false" />
 		</cond>
 		<for>
-			<!-- FIXME: Remove ticks from here -->
-			<effect ticks="24" name="Signet" val="0" />
+			<effect name="SummonNpc" val="0">
+				<param npcId="13018" npcCount="1" />
+			</effect>
 		</for>
 	</skill>
 	<skill id="460" levels="1" name="Symbol of the Assassin">
-		<set name="affectRange" val="180" />
-		<set name="effectId" val="5129" />
 		<set name="hitTime" val="5000" />
 		<set name="icon" val="icon.skill0460" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
@@ -2012,18 +2004,17 @@
 		<set name="magicLvl" val="80" />
 		<set name="mpConsume" val="44" />
 		<set name="mpInitialConsume" val="36" />
-		<set name="npcId" val="13018" />
 		<set name="operateType" val="A1" />
 		<set name="power" val="200" />
 		<set name="reuseDelay" val="1800000" />
-		<set name="skillType" val="SIGNET" />
 		<set name="targetType" val="SELF" />
 		<cond msgId="1509">
 			<player olympiad="false" />
 		</cond>
 		<for>
-			<!-- FIXME: Remove ticks from here -->
-			<effect ticks="24" name="Signet" val="0" />
+			<effect name="SummonNpc" val="0">
+				<param npcId="13018" npcCount="1" />
+			</effect>
 		</for>
 	</skill>
 	<skill id="461" levels="2" name="Break Duress">
diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/00800-00899.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/00800-00899.xml
index 8a0c6fa90f22909dc28dc53021bfb84590cc8c45..2196d0740ca74f778d68a2eba6c856f82dda6a1c 100644
--- a/L2J_DataPack_BETA/dist/game/data/stats/skills/00800-00899.xml
+++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/00800-00899.xml
@@ -975,8 +975,9 @@
 		</for>
 	</skill>
 	<skill id="847" levels="1" name="Ward Transport">
-		<set name="castRange" val="100" />
-		<set name="effectRange" val="600" />
+		<set name="castRange" val="85" />
+		<set name="effectPoint" val="0" />
+		<set name="effectRange" val="400" />
 		<set name="hitTime" val="180000" />
 		<set name="icon" val="icon.weapon_fort_flag_i00" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml
index 45962e900f9399dcac02f754e592b497d779e25f..4ee570986f922cb3bd10f21261a6d8f9e8c1535e 100644
--- a/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml
+++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml
@@ -648,7 +648,6 @@
 		<set name="affectLimit" val="15-25" />
 		<set name="affectRange" val="180" />
 		<set name="castRange" val="900" />
-		<set name="effectId" val="5130" />
 		<set name="effectPoint" val="-676" />
 		<set name="element" val="0" /> <!-- Fire -->
 		<set name="elementPower" val="20" />
@@ -660,26 +659,24 @@
 		<set name="magicLvl" val="80" />
 		<set name="mpConsume" val="36" />
 		<set name="mpInitialConsume" val="36" />
-		<set name="npcId" val="13025" />
+		<set name="mpPerChanneling" val="80" />
+		<set name="channelingTickInterval" val="2" />
 		<set name="operateType" val="CA1" />
 		<set name="power" val="500" />
 		<set name="reuseDelay" val="1800000" />
-		<set name="skillType" val="SIGNET_CASTTIME" />
 		<set name="staticReuse" val="true" />
 		<set name="targetType" val="GROUND" />
 		<cond msgId="1509">
 			<player olympiad="false" />
 		</cond>
-		<for>
-			<!-- FIXME: Removed ticks from here -->
-			<effect self="1" ticks="9" name="SignetMDam" val="0" />
-		</for>
+		<channelingEffects>
+			<effect name="MagicalAttack" noicon="1" val="0" />
+		</channelingEffects>
 	</skill>
 	<skill id="1420" levels="1" name="Cyclone">
 		<set name="affectLimit" val="15-25" />
 		<set name="affectRange" val="180" />
 		<set name="castRange" val="900" />
-		<set name="effectId" val="5132" />
 		<set name="effectPoint" val="-676" />
 		<set name="element" val="2" /> <!-- Wind -->
 		<set name="elementPower" val="20" />
@@ -691,26 +688,24 @@
 		<set name="magicLvl" val="80" />
 		<set name="mpConsume" val="36" />
 		<set name="mpInitialConsume" val="36" />
-		<set name="npcId" val="13025" />
+		<set name="mpPerChanneling" val="80" />
+		<set name="channelingTickInterval" val="2" />
 		<set name="operateType" val="CA1" />
 		<set name="power" val="500" />
 		<set name="reuseDelay" val="1800000" />
-		<set name="skillType" val="SIGNET_CASTTIME" />
 		<set name="staticReuse" val="true" />
 		<set name="targetType" val="GROUND" />
 		<cond msgId="1509">
 			<player olympiad="false" />
 		</cond>
-		<for>
-			<!-- FIXME: Removed ticks from here -->
-			<effect self="1" ticks="9" name="SignetMDam" val="0" />
-		</for>
+		<channelingEffects>
+			<effect name="MagicalAttack" noicon="1" val="0" />
+		</channelingEffects>
 	</skill>
 	<skill id="1421" levels="1" name="Raging Waves">
 		<set name="affectLimit" val="15-25" />
 		<set name="affectRange" val="180" />
 		<set name="castRange" val="900" />
-		<set name="effectId" val="5131" />
 		<set name="effectPoint" val="-676" />
 		<set name="element" val="1" /> <!-- Water -->
 		<set name="elementPower" val="20" />
@@ -722,25 +717,22 @@
 		<set name="magicLvl" val="80" />
 		<set name="mpConsume" val="36" />
 		<set name="mpInitialConsume" val="36" />
-		<set name="npcId" val="13025" />
+		<set name="mpPerChanneling" val="80" />
+		<set name="channelingTickInterval" val="2" />
 		<set name="operateType" val="CA1" />
 		<set name="power" val="500" />
 		<set name="reuseDelay" val="1800000" />
-		<set name="skillType" val="SIGNET_CASTTIME" />
 		<set name="staticReuse" val="true" />
 		<set name="targetType" val="GROUND" />
 		<cond msgId="1509">
 			<player olympiad="false" />
 		</cond>
-		<for>
-			<!-- FIXME: Removed ticks from here -->
-			<effect self="1" ticks="9" name="SignetMDam" val="0" />
-		</for>
+		<channelingEffects>
+			<effect name="MagicalAttack" noicon="1" val="0" />
+		</channelingEffects>
 	</skill>
 	<skill id="1422" levels="1" name="Day of Doom">
-		<set name="affectRange" val="180" />
 		<set name="castRange" val="900" />
-		<set name="effectId" val="5145" />
 		<set name="hitTime" val="5000" />
 		<set name="icon" val="icon.skill1422" />
 		<set name="isMagic" val="1" /> <!-- Magic Skill -->
@@ -749,25 +741,23 @@
 		<set name="magicLvl" val="80" />
 		<set name="mpConsume" val="58" />
 		<set name="mpInitialConsume" val="15" />
-		<set name="npcId" val="13025" />
 		<set name="operateType" val="A1" />
 		<set name="reuseDelay" val="1800000" />
-		<set name="skillType" val="SIGNET" />
 		<set name="staticReuse" val="true" />
 		<set name="targetType" val="GROUND" />
 		<cond msgId="1509">
 			<player olympiad="false" />
 		</cond>
 		<for>
-			<!-- FIXME: Removed ticks from here -->
-			<effect ticks="5" name="Signet" val="0" />
+			<effect name="SummonNpc" val="0">
+				<param npcId="13028" npcCount="1" />
+			</effect>
 		</for>
 	</skill>
 	<skill id="1423" levels="1" name="Gehenna">
 		<set name="affectLimit" val="15-25" />
 		<set name="affectRange" val="180" />
 		<set name="castRange" val="900" />
-		<set name="effectId" val="5133" />
 		<set name="effectPoint" val="-676" />
 		<set name="element" val="5" /> <!-- Dark -->
 		<set name="elementPower" val="20" />
@@ -779,25 +769,22 @@
 		<set name="magicLvl" val="80" />
 		<set name="mpConsume" val="36" />
 		<set name="mpInitialConsume" val="36" />
-		<set name="npcId" val="13025" />
+		<set name="mpPerChanneling" val="80" />
+		<set name="channelingTickInterval" val="2" />
 		<set name="operateType" val="CA1" />
 		<set name="power" val="500" />
 		<set name="reuseDelay" val="1800000" />
-		<set name="skillType" val="SIGNET_CASTTIME" />
 		<set name="staticReuse" val="true" />
 		<set name="targetType" val="GROUND" />
 		<cond msgId="1509">
 			<player olympiad="false" />
 		</cond>
-		<for>
-			<!-- FIXME: Removed ticks from here -->
-			<effect self="1" ticks="9" name="SignetMDam" val="0" />
-		</for>
+		<channelingEffects>
+			<effect name="MagicalAttack" noicon="1" val="0" />
+		</channelingEffects>
 	</skill>
 	<skill id="1424" levels="1" name="Anti-Summoning Field">
-		<set name="affectRange" val="180" />
 		<set name="castRange" val="900" />
-		<set name="effectId" val="5134" />
 		<set name="hitTime" val="5000" />
 		<set name="icon" val="icon.skill1424" />
 		<set name="isMagic" val="1" /> <!-- Magic Skill -->
@@ -806,19 +793,18 @@
 		<set name="magicLvl" val="80" />
 		<set name="mpConsume" val="70" />
 		<set name="mpInitialConsume" val="70" />
-		<set name="npcId" val="13020" />
 		<set name="operateType" val="A1" />
 		<set name="power" val="200" />
 		<set name="reuseDelay" val="1800000" />
-		<set name="skillType" val="SIGNET" />
 		<set name="staticReuse" val="true" />
 		<set name="targetType" val="GROUND" />
 		<cond msgId="1509">
 			<player olympiad="false" />
 		</cond>
 		<for>
-			<!-- FIXME: Removed ticks from here -->
-			<effect ticks="6" name="SignetAntiSummon" val="0" />
+			<effect name="SummonNpc" val="0">
+				<param npcId="13030" npcCount="1" />
+			</effect>
 		</for>
 	</skill>
 	<skill id="1425" levels="1" name="Purification Field">
@@ -2452,24 +2438,25 @@
 		<!-- Confirmed CT2.5 -->
 		<!-- Kamael Final Form Skill -->
 		<set name="castRange" val="900" />
+		<set name="channelingTickInterval" val="2" />
 		<set name="effectPoint" val="-676" />
 		<set name="effectRange" val="1000" />
 		<set name="element" val="5" /> <!-- Dark -->
 		<set name="elementPower" val="20" />
 		<set name="hitTime" val="15000" />
-		<set name="hitTimings" val="10,15,15,15,15,15,15" />
 		<set name="icon" val="icon.skill1472" />
 		<set name="isMagic" val="1" /> <!-- Magic Skill -->
 		<set name="magicLvl" val="79" />
 		<set name="mpInitialConsume" val="36" />
+		<set name="mpPerChanneling" val="30" />
 		<set name="operateType" val="CA1" />
 		<set name="power" val="30" />
 		<set name="reuseDelay" val="300000" />
 		<set name="staticReuse" val="true" />
 		<set name="targetType" val="ONE" />
-		<for>
+		<channelingEffects>
 			<effect name="MagicalAttack" noicon="1" val="0" />
-		</for>
+		</channelingEffects>
 	</skill>
 	<skill id="1473" levels="1" name="Change Weapon">
 		<!-- Confirmed CT2.5 -->
diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/01500-01599.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/01500-01599.xml
index 676dd16b5dbb7ecfd2565e4c2ba76b18ab535a7e..5b20e3370a6918f769947b62780a5bff493cd11c 100644
--- a/L2J_DataPack_BETA/dist/game/data/stats/skills/01500-01599.xml
+++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/01500-01599.xml
@@ -1366,24 +1366,25 @@
 		<!-- Kamael Final Form Skill -->
 		<!-- TODO: Related with Quest "Long live the Pa'agrio Lord! -->
 		<set name="castRange" val="900" />
+		<set name="channelingTickInterval" val="2" />
 		<set name="effectPoint" val="-676" />
 		<set name="effectRange" val="1000" />
 		<set name="element" val="5" /> <!-- Dark -->
 		<set name="elementPower" val="20" />
 		<set name="hitTime" val="15000" />
-		<set name="hitTimings" val="10,15,15,15,15,15,15" />
 		<set name="icon" val="icon.skill1472" />
 		<set name="isMagic" val="1" /> <!-- Magic Skill -->
 		<set name="magicLvl" val="79" />
 		<set name="mpInitialConsume" val="36" />
+		<set name="mpPerChanneling" val="30" />
 		<set name="operateType" val="CA1" />
 		<set name="power" val="30" />
 		<set name="reuseDelay" val="300000" />
 		<set name="staticReuse" val="true" />
 		<set name="targetType" val="ONE" />
-		<for>
+		<channelingEffects>
 			<effect name="MagicalAttack" noicon="1" val="0" />
-		</for>
+		</channelingEffects>
 	</skill>
 	<skill id="1546" levels="1" name="Strider Fear">
 		<!-- Confirmed CT2.5 -->
diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/03300-03399.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/03300-03399.xml
index 0f364b792ec4edb660be18a307d92cb2d0994dc2..6c02fd202b8655a6ffc65f1ae5739414b39dc45b 100644
--- a/L2J_DataPack_BETA/dist/game/data/stats/skills/03300-03399.xml
+++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/03300-03399.xml
@@ -194,6 +194,7 @@
 	</skill>
 	<skill id="3318" levels="1" name="Flag Display">
 		<!-- Flag Skill -->
+		<set name="effectRange" val="400" />
 		<set name="hitTime" val="180000" />
 		<set name="icon" val="icon.weapon_fort_flag_i00" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/03600-03699.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/03600-03699.xml
index 19af271f879562cfe3ae3b38166c84710cc45eab..3ca2b3846dfe5829fbb3d0871e7ae3c935166aed 100644
--- a/L2J_DataPack_BETA/dist/game/data/stats/skills/03600-03699.xml
+++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/03600-03699.xml
@@ -452,8 +452,10 @@
 	</skill>
 	<skill id="3626" levels="1" name="Kabokula">
 		<set name="castRange" val="300" />
+		<set name="channelingSkillId" val="5106" />
+		<set name="channelingTickInterval" val="2" />
 		<set name="effectPoint" val="-100" />
-		<set name="effectRange" val="900" />
+		<set name="effectRange" val="500" />
 		<set name="hitTime" val="25000" />
 		<set name="icon" val="icon.weapon_seize_mace_i00" />
 		<set name="isDebuff" val="true" />
@@ -463,17 +465,17 @@
 		<set name="magicLvl" val="85" />
 		<set name="operateType" val="CA5" />
 		<set name="reuseDelay" val="1000" />
-		<set name="skillType" val="FUSION" />
 		<set name="targetType" val="ONE" />
-		<set name="triggeredId" val="5106" />
 		<cond msgId="109">
 			<target npcId="22215,22216,22217" />
 		</cond>
 	</skill>
 	<skill id="3627" levels="1" name="Tapirawa">
 		<set name="castRange" val="300" />
+		<set name="channelingSkillId" val="5107" />
+		<set name="channelingTickInterval" val="2" />
 		<set name="effectPoint" val="-100" />
-		<set name="effectRange" val="900" />
+		<set name="effectRange" val="500" />
 		<set name="hitTime" val="25000" />
 		<set name="icon" val="icon.weapon_seize_mace_i00" />
 		<set name="isDebuff" val="true" />
@@ -483,17 +485,17 @@
 		<set name="magicLvl" val="85" />
 		<set name="operateType" val="CA5" />
 		<set name="reuseDelay" val="1000" />
-		<set name="skillType" val="FUSION" />
 		<set name="targetType" val="ONE" />
-		<set name="triggeredId" val="5107" />
 		<cond msgId="109">
 			<target npcId="22215,22216,22217" />
 		</cond>
 	</skill>
 	<skill id="3628" levels="1" name="Shabonoba">
 		<set name="castRange" val="300" />
+		<set name="channelingSkillId" val="5108" />
+		<set name="channelingTickInterval" val="2" />
 		<set name="effectPoint" val="-100" />
-		<set name="effectRange" val="900" />
+		<set name="effectRange" val="500" />
 		<set name="hitTime" val="25000" />
 		<set name="icon" val="icon.weapon_seize_mace_i00" />
 		<set name="isDebuff" val="true" />
@@ -503,9 +505,7 @@
 		<set name="magicLvl" val="85" />
 		<set name="operateType" val="CA5" />
 		<set name="reuseDelay" val="1000" />
-		<set name="skillType" val="FUSION" />
 		<set name="targetType" val="ONE" />
-		<set name="triggeredId" val="5108" />
 		<cond msgId="109">
 			<target npcId="22215,22216,22217" />
 		</cond>
diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/05100-05199.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/05100-05199.xml
index 9acde30627e2a6cbbb7ab488e96b3177773d48cb..ebdb245b95f9f21beb0ba73ba0c572da06c698b6 100644
--- a/L2J_DataPack_BETA/dist/game/data/stats/skills/05100-05199.xml
+++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/05100-05199.xml
@@ -39,6 +39,7 @@
 	</skill>
 	<skill id="5104" levels="3" name="Battle Force">
 		<!-- Not Used Anymore -->
+		<table name="#pAtk"> 1.05 1.10 1.15 </table>
 		<table name="#abnormalLvls"> 1 2 3 </table>
 		<set name="abnormalLvl" val="#abnormalLvls" />
 		<set name="abnormalTime" val="15" />
@@ -48,11 +49,16 @@
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="77" />
 		<set name="operateType" val="A2" />
-		<set name="skillType" val="NOTDONE" />
-		<set name="targetType" val="NONE" />
+		<set name="targetType" val="SELF" />
+		<for>
+			<effect name="Buff" val="0">
+				<mul stat="pAtk" order="0x30" val="#pAtk" />
+			</effect>
+		</for>
 	</skill>
 	<skill id="5105" levels="3" name="Spell Force">
 		<!-- Not Used Anymore -->
+		<table name="#mAtk"> 1.05 1.10 1.15 </table>
 		<table name="#abnormalLvls"> 1 2 3 </table>
 		<set name="abnormalLvl" val="#abnormalLvls" />
 		<set name="abnormalTime" val="15" />
@@ -62,8 +68,12 @@
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="77" />
 		<set name="operateType" val="A2" />
-		<set name="skillType" val="NOTDONE" />
-		<set name="targetType" val="NONE" />
+		<set name="targetType" val="SELF" />
+		<for>
+			<effect name="Buff" val="0">
+				<mul stat="mAtk" order="0x30" val="#mAtk" />
+			</effect>
+		</for>
 	</skill>
 	<skill id="5106" levels="4" name="Capture A State">
 		<table name="#abnormalLvls"> 1 2 3 4 </table>
@@ -411,6 +421,7 @@
 		<set name="abnormalLvl" val="1" />
 		<set name="abnormalTime" val="7" />
 		<set name="abnormalType" val="COMBINATION" />
+		<set name="affectRange" val="200" />
 		<set name="icon" val="icon.skill0454" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="80" />
@@ -426,21 +437,26 @@
 		</for>
 	</skill>
 	<skill id="5124" levels="1" name="Anti-Music">
+		<set name="affectRange" val="200" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="80" />
 		<set name="operateType" val="A1" />
-		<set name="skillType" val="CONT" />
 		<set name="targetType" val="ONE" />
+		<for>
+			<effect name="DispelBySlotProbability" noicon="1" val="0">
+				<param dispel="DANCE_OF_AQUA_GUARD;DANCE_OF_CONCENTRATION;DANCE_OF_CONCENTRATION;DANCE_OF_EARTH_GUARD;DANCE_OF_FIRE;DANCE_OF_FURY;DANCE_OF_INSPIRATION;DANCE_OF_LIGHT;DANCE_OF_MYSTIC;DANCE_OF_PROTECTION;DANCE_OF_SHADOW;DANCE_OF_SIREN;DANCE_OF_VAMPIRE;DANCE_OF_WARRIOR;SONG_OF_CHAMPION;SONG_OF_EARTH;SONG_OF_FLAME_GUARD;SONG_OF_HUNTER;SONG_OF_INVOCATION;SONG_OF_LIFE;SONG_OF_MEDITATION;SONG_OF_RENEWAL;SONG_OF_STORM_GUARD;SONG_OF_VENGEANCE;SONG_OF_VITALITY;SONG_OF_WARDING;SONG_OF_WATER;SONG_OF_WIND;DANCE_OF_BLADESTORM;DANCE_OF_ALIGNMENT;SONG_OF_ELEMENTAL;SONG_OF_WINDSTORM" rate="100" />
+			</effect>
+		</for>
 	</skill>
 	<skill id="5125" levels="1" name="Maximum Resist Status">
 		<set name="abnormalLvl" val="1" />
 		<set name="abnormalTime" val="7" />
 		<set name="abnormalType" val="COMBINATION" />
+		<set name="affectRange" val="200" />
 		<set name="icon" val="icon.skill0456" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="80" />
 		<set name="operateType" val="A2" />
-		<set name="skillType" val="CONT" />
 		<set name="targetType" val="ONE" />
 		<for>
 			<effect name="Buff" val="0">
@@ -452,11 +468,11 @@
 		<set name="abnormalLvl" val="1" />
 		<set name="abnormalTime" val="7" />
 		<set name="abnormalType" val="COMBINATION" />
+		<set name="affectRange" val="200" />
 		<set name="icon" val="icon.skill0457" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="80" />
 		<set name="operateType" val="A2" />
-		<set name="skillType" val="CONT" />
 		<set name="targetType" val="ONE" />
 		<for>
 			<effect name="Buff" val="0">
@@ -487,11 +503,11 @@
 		<set name="abnormalLvl" val="1" />
 		<set name="abnormalTime" val="7" />
 		<set name="abnormalType" val="COMBINATION" />
+		<set name="affectRange" val="200" />
 		<set name="icon" val="icon.skill0459" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="80" />
 		<set name="operateType" val="A2" />
-		<set name="skillType" val="CONT" />
 		<set name="targetType" val="ONE" />
 		<for>
 			<effect name="Buff" val="0">
@@ -508,11 +524,11 @@
 		<set name="abnormalLvl" val="1" />
 		<set name="abnormalTime" val="7" />
 		<set name="abnormalType" val="COMBINATION" />
+		<set name="affectRange" val="200" />
 		<set name="icon" val="icon.skill0460" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="80" />
 		<set name="operateType" val="A2" />
-		<set name="skillType" val="CONT" />
 		<set name="targetType" val="ONE" />
 		<for>
 			<effect name="Buff" val="0">
@@ -550,13 +566,21 @@
 		<set name="targetType" val="ONE" />
 	</skill>
 	<skill id="5134" levels="1" name="Anti-Summoning Field">
+		<!-- TODO: Update to H5! -->
 		<set name="abnormalTime" val="15" />
+		<set name="affectRange" val="200" />
+		<set name="attribute" val="5" />
+		<set name="attributePower" val="20" />
 		<set name="icon" val="icon.skill1424" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="80" />
 		<set name="operateType" val="A1" />
-		<set name="skillType" val="CONT" />
 		<set name="targetType" val="ONE" />
+		<for>
+			<effect name="Unsummon" val="0">
+				<param chance="80" />
+			</effect>
+		</for>
 	</skill>
 	<skill id="5135" levels="1" name="Slash">
 		<!-- CT2.5 retail confirmed -->
@@ -784,8 +808,10 @@
 		<set name="abnormalLvl" val="1" />
 		<set name="abnormalTime" val="120" />
 		<set name="abnormalType" val="MULTI_DEBUFF" />
+		<set name="affectRange" val="200" />
 		<set name="icon" val="icon.skill1422" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
+		<set name="isDebuff" val="1" />
 		<set name="magicLvl" val="80" />
 		<set name="operateType" val="A2" />
 		<set name="skillType" val="DEBUFF" />
diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/05300-05399.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/05300-05399.xml
index 0278a1f1e8c05ad14e59068aae1b93ebde11ce48..c32fee2d555e3f61d1b98f151d270320a9363f03 100644
--- a/L2J_DataPack_BETA/dist/game/data/stats/skills/05300-05399.xml
+++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/05300-05399.xml
@@ -1727,11 +1727,13 @@
 		</for>
 	</skill>
 	<skill id="5396" levels="1" name="NPC - Spell Stance">
+		<set name="castRange" val="400" />
+		<set name="channelingSkillId" val="5397" />
+		<set name="channelingTickInterval" val="2" />
 		<set name="hitTime" val="15000" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="operateType" val="CA5" />
-		<set name="skillType" val="NOTDONE" />
-		<set name="targetType" val="NONE" />
+		<set name="targetType" val="ONE" />
 	</skill>
 	<skill id="5397" levels="3" name="NPC - Spell Force">
 		<table name="#abnormalLvls"> 1 2 3 </table>
diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/05400-05499.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/05400-05499.xml
index 2e3d864b9e2ec0a367b944f4f523501d59446469..8983d4eddc0801e676cf1a1d5f573790aa144a2a 100644
--- a/L2J_DataPack_BETA/dist/game/data/stats/skills/05400-05499.xml
+++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/05400-05499.xml
@@ -1183,14 +1183,20 @@
 		</for>
 	</skill>
 	<skill id="5493" levels="1" name="Naia Production">
+		<set name="channelingSkillId" val="5106" />
+		<set name="channelingSkillId" val="5106" />
+		<set name="castRange" val="800" />
+		<set name="effectRange" val="1000" />
 		<set name="effectPoint" val="1" />
 		<set name="hitTime" val="25000" />
+		<set name="itemConsumeId" val="8764" /> <!-- Trap Stone -->
+		<set name="itemConsumeCount" val="1" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="85" />
+		<set name="mpPerChanneling" val="15" />
 		<set name="operateType" val="CA5" />
 		<set name="reuseDelay" val="1000" />
-		<set name="skillType" val="NOTDONE" />
-		<set name="targetType" val="NONE" />
+		<set name="targetType" val="ONE" />
 	</skill>
 	<skill id="5494" levels="1" name="Gust">
 		<!-- Confirmed CT2.5 -->
diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/22200-22299.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/22200-22299.xml
index 951ef530fa76cd00d9923376da5b1772808f230e..4e4776c7158d4606d99be435229431df8708b379 100644
--- a/L2J_DataPack_BETA/dist/game/data/stats/skills/22200-22299.xml
+++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/22200-22299.xml
@@ -348,8 +348,11 @@
 	<skill id="22250" levels="1" name="Birthday Cake Effect">
 		<!-- Confirmed CT2.5 -->
 		<!-- Birthday Skill -->
+		<set name="abnormalLvl" val="1" />
+		<set name="abnormalTime" val="300" />
+		<set name="abnormalType" val="VP_KEEP" />
 		<set name="affectRange" val="200" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/23300-23399.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/23300-23399.xml
index b0658d7d484e8eed5b3f3c16d4b2331688b81d3a..0e19b6a5d66d92838e59a19b8dd0309e1a51dfcb 100644
--- a/L2J_DataPack_BETA/dist/game/data/stats/skills/23300-23399.xml
+++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/23300-23399.xml
@@ -62,7 +62,7 @@
 		<set name="abnormalTime" val="7" />
 		<set name="affectRange" val="200" />
 		<set name="icon" val="BranchSys2.icon.totem_of_body" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -77,7 +77,7 @@
 		<set name="abnormalTime" val="7" />
 		<set name="affectRange" val="200" />
 		<set name="icon" val="BranchSys2.icon.totem_of_mind" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -91,7 +91,7 @@
 		<set name="abnormalTime" val="7" />
 		<set name="affectRange" val="200" />
 		<set name="icon" val="BranchSys2.icon.totem_of_bravery" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>
@@ -105,7 +105,7 @@
 		<set name="abnormalTime" val="7" />
 		<set name="affectRange" val="200" />
 		<set name="icon" val="BranchSys2.icon.totem_of_fortitude" />
-		<set name="operateType" val="A1" /> <!-- FIXME: value unconfirmed -->
+		<set name="operateType" val="A2" />
 		<set name="skillType" val="BUFF" />
 		<set name="targetType" val="AURA" />
 		<for>