diff --git a/L2J_DataPack_BETA/dist/game/data/scripts.cfg b/L2J_DataPack_BETA/dist/game/data/scripts.cfg
index df3d41387ff860b8489f760bcfb8ec310fde6af6..238441472f968be910ababe017d3dcea887f39ea 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts.cfg
+++ b/L2J_DataPack_BETA/dist/game/data/scripts.cfg
@@ -7,7 +7,6 @@
 
 # Load Handlers
 handlers/MasterHandler.java
-handlers/admincommandhandlers/AdminScan.js
 
 # AI Section
 
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/MasterHandler.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/MasterHandler.java
index 11d948fe05961e8d8645771fac8bfa457fed0659..134e2bd0b40f65222ac49c959dca3b793b520c76 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/MasterHandler.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/MasterHandler.java
@@ -108,6 +108,7 @@ import handlers.admincommandhandlers.AdminReload;
 import handlers.admincommandhandlers.AdminRepairChar;
 import handlers.admincommandhandlers.AdminRes;
 import handlers.admincommandhandlers.AdminRide;
+import handlers.admincommandhandlers.AdminScan;
 import handlers.admincommandhandlers.AdminShop;
 import handlers.admincommandhandlers.AdminShowQuests;
 import handlers.admincommandhandlers.AdminShutdown;
@@ -374,6 +375,7 @@ public class MasterHandler
 			AdminRepairChar.class,
 			AdminRes.class,
 			AdminRide.class,
+			AdminScan.class,
 			AdminShop.class,
 			AdminShowQuests.class,
 			AdminShutdown.class,
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminScan.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminScan.java
new file mode 100644
index 0000000000000000000000000000000000000000..71fe33056eb7b405b1e6f378759d4cf3eeabe644
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminScan.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2004-2014 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.admincommandhandlers;
+
+import java.util.StringTokenizer;
+
+import com.l2jserver.gameserver.datatables.SpawnTable;
+import com.l2jserver.gameserver.handler.IAdminCommandHandler;
+import com.l2jserver.gameserver.instancemanager.RaidBossSpawnManager;
+import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.L2Spawn;
+import com.l2jserver.gameserver.model.L2World;
+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.network.serverpackets.NpcHtmlMessage;
+
+/**
+ * @author Nos
+ */
+public class AdminScan implements IAdminCommandHandler
+{
+	private static final String[] ADMIN_COMMANDS =
+	{
+		"admin_scan",
+		"admin_deleteNpcByObjectId"
+	};
+	
+	private static final int DEFAULT_RADIUS = 500;
+	
+	@Override
+	public boolean useAdminCommand(String command, L2PcInstance activeChar)
+	{
+		final StringTokenizer st = new StringTokenizer(command, " ");
+		final String actualCommand = st.nextToken();
+		switch (actualCommand.toLowerCase())
+		{
+			case "admin_scan":
+			{
+				int radius = DEFAULT_RADIUS;
+				if (st.hasMoreElements())
+				{
+					try
+					{
+						radius = Integer.parseInt(st.nextToken());
+					}
+					catch (NumberFormatException e)
+					{
+						activeChar.sendMessage("Usage: //scan [radius]");
+						return false;
+					}
+				}
+				
+				sendNpcList(activeChar, radius);
+				break;
+			}
+			case "admin_deletenpcbyobjectid":
+			{
+				if (!st.hasMoreElements())
+				{
+					activeChar.sendMessage("Usage: //deletenpcbyobjectid <object_id>");
+					return false;
+				}
+				
+				try
+				{
+					int objectId = Integer.parseInt(st.nextToken());
+					
+					final L2Object target = L2World.getInstance().findObject(objectId);
+					final L2Npc npc = target instanceof L2Npc ? (L2Npc) target : null;
+					if (npc == null)
+					{
+						activeChar.sendMessage("NPC does not exist or object_id does not belong to an NPC");
+						return false;
+					}
+					
+					npc.deleteMe();
+					
+					final L2Spawn spawn = npc.getSpawn();
+					if (spawn != null)
+					{
+						spawn.stopRespawn();
+						
+						if (RaidBossSpawnManager.getInstance().isDefined(spawn.getId()))
+						{
+							RaidBossSpawnManager.getInstance().deleteSpawn(spawn, true);
+						}
+						else
+						{
+							SpawnTable.getInstance().deleteSpawn(spawn, true);
+						}
+					}
+					
+					activeChar.sendMessage(npc.getName() + " have been deleted.");
+				}
+				catch (NumberFormatException e)
+				{
+					activeChar.sendMessage("object_id must be a number.");
+					return false;
+				}
+				
+				sendNpcList(activeChar, DEFAULT_RADIUS);
+				break;
+			}
+		}
+		return true;
+	}
+	
+	private void sendNpcList(L2PcInstance activeChar, int radius)
+	{
+		final NpcHtmlMessage html = new NpcHtmlMessage();
+		html.setFile(activeChar.getHtmlPrefix(), "data/html/admin/scan.htm");
+		final StringBuilder sb = new StringBuilder();
+		for (L2Character character : activeChar.getKnownList().getKnownCharactersInRadius(radius))
+		{
+			if (character instanceof L2Npc)
+			{
+				sb.append("<tr>");
+				sb.append("<td width=\"54\">" + character.getId() + "</td>");
+				sb.append("<td width=\"54\">" + character.getName() + "</td>");
+				sb.append("<td width=\"54\">" + Math.round(activeChar.calculateDistance(character, false, false)) + "</td>");
+				sb.append("<td width=\"54\"><a action=\"bypass -h admin_deleteNpcByObjectId " + character.getObjectId() + "\"><font color=\"LEVEL\">Delete</font></a></td>");
+				sb.append("<td width=\"54\"><a action=\"bypass -h admin_move_to " + character.getX() + " " + character.getY() + " " + character.getZ() + "\"><font color=\"LEVEL\">Go to</font></a></td>");
+				sb.append("</tr>");
+			}
+		}
+		html.replace("%data%", sb.toString());
+		activeChar.sendPacket(html);
+	}
+	
+	@Override
+	public String[] getAdminCommandList()
+	{
+		return ADMIN_COMMANDS;
+	}
+}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminScan.js b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminScan.js
deleted file mode 100644
index 301fa3408d40aa7735e132cef25f19bfe60093f3..0000000000000000000000000000000000000000
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminScan.js
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2004-2014 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/>.
- */
-importPackage(java.util);
-importPackage(java.lang);
-importPackage(com.l2jserver.gameserver.cache);
-importPackage(com.l2jserver.gameserver.datatables);
-importPackage(com.l2jserver.gameserver.handler);
-importPackage(com.l2jserver.gameserver.instancemanager);
-importPackage(com.l2jserver.gameserver.model);
-importPackage(com.l2jserver.gameserver.model.actor);
-importPackage(com.l2jserver.gameserver.model.actor.instance);
-importPackage(com.l2jserver.gameserver.network.serverpackets);
-importPackage(com.l2jserver.gameserver.util);
-
-/**
- * @author UnAfraid
- */
-AdminCommandHandler.getInstance().registerHandler(new JavaAdapter(IAdminCommandHandler,
-{
-	// Override useAdminCommand() method.
-	useAdminCommand : function(command, player)
-	{
-		var st = new StringTokenizer(command, " ");
-		if (st.hasMoreTokens())
-		{
-			var cmd = st.nextToken();
-			if (cmd == 'admin_scan')
-			{
-				var radius = 500;
-				if (st.hasMoreTokens())
-				{
-					var obj = st.nextToken();
-					if (Util.isDigit(obj))
-					{
-						radius = obj;
-					}
-				}
-				
-				var htm = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), "data/html/admin/scan.htm");
-				var sb = new StringBuilder();
-				var it = player.getKnownList().getKnownCharactersInRadius(radius).iterator();
-				while (it.hasNext())
-				{
-					var character = it.next();
-					if (character instanceof L2Npc)
-					{
-						sb.append("<tr>");
-						sb.append("<td width=\"54\">" + character.getId() + "</td>");
-						sb.append("<td width=\"54\">" + character.getName() + "</td>");
-						sb.append("<td width=\"54\">" + Math.round(player.calculateDistance(character, false, false)) + "</td>");
-						sb.append("<td width=\"54\"><a action=\"bypass -h admin_deleteNpcByObjectId " + character.getObjectId() + "\"><font color=\"LEVEL\">Delete</font></a></td>");
-						sb.append("<td width=\"54\"><a action=\"bypass -h admin_move_to " + character.getX() + " " + character.getY() + " " + character.getZ() + "\"><font color=\"LEVEL\">Go to</font></a></td>");
-						sb.append("</tr>");
-					}
-				}
-				htm = htm.replaceAll("%data%", sb.toString());
-				player.sendPacket(new NpcHtmlMessage(0, htm));
-			}
-			else if (cmd = 'admin_deleteNpcByObjectId' && st.hasMoreTokens())
-			{
-				var objectId = st.nextToken();
-				if (Util.isDigit(objectId))
-				{
-					var it = player.getKnownList().getKnownCharacters().iterator();
-					while (it.hasNext())
-					{
-						var character = it.next();
-						if ((character instanceof L2Npc) && (character.getObjectId() == objectId))
-						{
-							character.deleteMe();
-							var spawn = character.getSpawn();
-							if (spawn != null)
-							{
-								spawn.stopRespawn();
-								
-								if (RaidBossSpawnManager.getInstance().isDefined(spawn.getId()))
-								{
-									RaidBossSpawnManager.getInstance().deleteSpawn(spawn, true);
-								}
-								else
-								{
-									SpawnTable.getInstance().deleteSpawn(spawn, true);
-								}
-							}
-							player.sendMessage(character.getName() + " have been deleted.");
-							this.useAdminCommand("admin_scan", player);
-						}
-					}
-				}
-			}
-		}
-		return true;
-	},
-	
-	// Override getAdminCommandList() method.
-	getAdminCommandList : function()
-	{
-		return new Array("admin_scan", "admin_deleteNpcByObjectId");
-	}
-}));
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00382_KailsMagicCoin/Q00382_KailsMagicCoin.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00382_KailsMagicCoin/Q00382_KailsMagicCoin.java
index 5e6209c6ae745b9b1d66f04e2a4a7a834225b372..ba076a4b5de1385204e3249ca1cebe79ccd68080 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00382_KailsMagicCoin/Q00382_KailsMagicCoin.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00382_KailsMagicCoin/Q00382_KailsMagicCoin.java
@@ -134,4 +134,9 @@ public final class Q00382_KailsMagicCoin extends Quest
 		}
 		return super.onKill(npc, killer, isSummon);
 	}
+	
+	public static void main(String[] args)
+	{
+		new Q00382_KailsMagicCoin();
+	}
 }