diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/instances/IceQueensCastle/IceQueensCastle.java b/L2J_DataPack_BETA/dist/game/data/scripts/instances/IceQueensCastle/IceQueensCastle.java
index 0adbfb404b12002c70815c3b2ba4e7fcf284655e..d340d880624caad7e6f4725631480b7f7b1ef06c 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/instances/IceQueensCastle/IceQueensCastle.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/instances/IceQueensCastle/IceQueensCastle.java
@@ -19,6 +19,7 @@
 package instances.IceQueensCastle;
 
 import quests.Q10285_MeetingSirra.Q10285_MeetingSirra;
+import ai.npc.AbstractNpcAI;
 
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
@@ -29,31 +30,27 @@ 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.instancezone.InstanceWorld;
-import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.network.NpcStringId;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
-import com.l2jserver.gameserver.network.serverpackets.NpcSay;
 
 /**
  * Ice Queen's Castle instance zone.
  * @author Adry_85
  */
-public final class IceQueensCastle extends Quest
+public final class IceQueensCastle extends AbstractNpcAI
 {
 	protected class IQCWorld extends InstanceWorld
 	{
-		long storeTime = 0;
+		L2PcInstance player = null;
 	}
 	
-	private static final int INSTANCEID = 137;
 	// NPCs
 	private static final int FREYA = 18847;
 	private static final int BATTALION_LEADER = 18848;
 	private static final int LEGIONNAIRE = 18849;
-	private static final int INVISIBLE_NPC = 18919;
 	private static final int MERCENARY_ARCHER = 18926;
 	private static final int ARCHERY_KNIGHT = 22767;
 	private static final int JINIA = 32781;
@@ -63,12 +60,14 @@ public final class IceQueensCastle extends Quest
 	private static final Location FREYA_LOC = new Location(114730, -114805, -11200, 50, 0);
 	// Skill
 	private static SkillHolder ETHERNAL_BLIZZARD = new SkillHolder(6276, 1);
-	// Door
+	// Misc
+	private static final int INSTANCEID = 137;
 	private static final int ICE_QUEEN_DOOR = 23140101;
+	private static final int MIN_LV = 82;
 	
 	private IceQueensCastle()
 	{
-		super(-1, IceQueensCastle.class.getSimpleName(), "instances");
+		super(IceQueensCastle.class.getSimpleName(), "instances");
 		addStartNpc(JINIA);
 		addTalkId(JINIA);
 		addSeeCreatureId(BATTALION_LEADER, LEGIONNAIRE, MERCENARY_ARCHER);
@@ -105,7 +104,7 @@ public final class IceQueensCastle extends Quest
 			}
 			case "TIMER_BLIZZARD":
 			{
-				npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), NpcStringId.I_CAN_NO_LONGER_STAND_BY));
+				broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.I_CAN_NO_LONGER_STAND_BY);
 				npc.stopMove(null);
 				npc.setTarget(player);
 				npc.doCast(ETHERNAL_BLIZZARD.getSkill());
@@ -155,9 +154,7 @@ public final class IceQueensCastle extends Quest
 					startQuestTimer("ATTACK_KNIGHT", 5000, npc, null);
 				}
 			}
-			NpcSay ns = new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), NpcStringId.S1_MAY_THE_PROTECTION_OF_THE_GODS_BE_UPON_YOU);
-			ns.addStringParameter(creature.getName());
-			npc.broadcastPacket(ns);
+			broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.S1_MAY_THE_PROTECTION_OF_THE_GODS_BE_UPON_YOU, creature.getName());
 		}
 		return super.onSeeCreature(npc, creature, isSummon);
 	}
@@ -173,9 +170,16 @@ public final class IceQueensCastle extends Quest
 	@Override
 	public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill)
 	{
-		if (skill == ETHERNAL_BLIZZARD.getSkill())
+		final InstanceWorld tmpworld = InstanceManager.getInstance().getWorld(npc.getInstanceId());
+		
+		if ((tmpworld != null) && (tmpworld instanceof IQCWorld))
 		{
-			startQuestTimer("TIMER_SCENE_21", 1000, npc, player);
+			final IQCWorld world = (IQCWorld) tmpworld;
+			
+			if ((skill == ETHERNAL_BLIZZARD.getSkill()) && (world.player != null))
+			{
+				startQuestTimer("TIMER_SCENE_21", 1000, npc, world.player);
+			}
 		}
 		return super.onSpellFinished(npc, player, skill);
 	}
@@ -183,39 +187,48 @@ public final class IceQueensCastle extends Quest
 	@Override
 	public String onTalk(L2Npc npc, L2PcInstance talker)
 	{
-		enterInstance(talker, "IceQueensCastle.xml", START_LOC);
+		enterInstance(talker, "IceQueensCastle.xml");
 		return super.onTalk(npc, talker);
 	}
 	
-	protected int enterInstance(L2PcInstance player, String template, Location loc)
+	private void enterInstance(L2PcInstance player, String template)
 	{
-		// check for existing instances for this player
 		InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(player);
-		// existing instance
+		
 		if (world != null)
 		{
-			if (!(world instanceof IQCWorld))
+			if (world instanceof IQCWorld)
 			{
-				player.sendPacket(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER);
-				return 0;
+				teleportPlayer(player, START_LOC, world.getInstanceId(), false);
+				return;
 			}
-			teleportPlayer(player, loc, world.getInstanceId(), false);
-			return 0;
+			player.sendPacket(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER);
+			return;
+		}
+		
+		if (checkConditions(player))
+		{
+			world = new IQCWorld();
+			world.setInstanceId(InstanceManager.getInstance().createDynamicInstance(template));
+			world.setTemplateId(INSTANCEID);
+			world.setStatus(0);
+			InstanceManager.getInstance().addWorld(world);
+			_log.info("Ice Queen's Castle started " + template + " Instance: " + world.getInstanceId() + " created by player: " + player.getName());
+			teleportPlayer(player, START_LOC, world.getInstanceId(), false);
+			world.addAllowed(player.getObjectId());
+			((IQCWorld) world).player = player;
+			openDoor(ICE_QUEEN_DOOR, world.getInstanceId());
+		}
+	}
+	
+	private boolean checkConditions(L2PcInstance player)
+	{
+		if (player.getLevel() < MIN_LV)
+		{
+			player.sendPacket(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
+			return false;
 		}
-		// New instance
-		world = new IQCWorld();
-		world.setInstanceId(InstanceManager.getInstance().createDynamicInstance(template));
-		world.setTemplateId(INSTANCEID);
-		world.setStatus(0);
-		((IQCWorld) world).storeTime = System.currentTimeMillis();
-		InstanceManager.getInstance().addWorld(world);
-		_log.info("Ice Queen's Castle started " + template + " Instance: " + world.getInstanceId() + " created by player: " + player.getName());
-		// teleport players
-		teleportPlayer(player, loc, world.getInstanceId(), false);
-		world.addAllowed(player.getObjectId());
-		openDoor(ICE_QUEEN_DOOR, world.getInstanceId());
-		addSpawn(INVISIBLE_NPC, 114394, -112383, -11200, 0, false, 0, false, INSTANCEID);
-		return world.getInstanceId();
+		return true;
 	}
 	
 	public static void main(String[] args)