diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
index 703fe8fcb56cad398c88672ca1a6a8bcc1cbea3e..cf6931b9504454c0d1c96ce04ea6828edc3fb297 100644
--- a/.settings/org.eclipse.core.resources.prefs
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -1,5 +1,4 @@
 eclipse.preferences.version=1
 encoding//src/main/java=UTF-8
 encoding//src/main/resources=UTF-8
-encoding//src/main/resources/data=UTF-8
 encoding/<project>=UTF-8
diff --git a/pom.xml b/pom.xml
index 02cf2d38834b008dc8b79b25fafd13672bdafc1a..d7d5049eaffcc517ef9b33ac47cde8d9d57be854 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,19 +4,15 @@
 	<groupId>com.l2jserver</groupId>
 	<artifactId>l2j-server-datapack</artifactId>
 	<version>2.6.1.0-SNAPSHOT</version>
-	<name>L2J DataPack Server</name>
+	<name>L2J DataPack</name>
 	<properties>
 		<maven.compiler.source>11</maven.compiler.source>
 		<maven.compiler.target>11</maven.compiler.target>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<slf4j.version>1.7.25</slf4j.version>
-		<log4j.version>2.11.1</log4j.version>
-		<InMemoryJavaCompiler.version>1.3.0</InMemoryJavaCompiler.version>
-		<gson.version>2.8.5</gson.version>
-		<weupnp.version>0.1.4</weupnp.version>
-		<!-- Test -->
-		<testng.version>6.14.3</testng.version>
-		<mockito-core.version>2.24.5</mockito-core.version>
+		<slf4j.version>1.7.26</slf4j.version>
+		<!-- Plugins -->
+		<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
+		<maven-assembly-plugin.version>3.1.1</maven-assembly-plugin.version>
 	</properties>
 	<dependencies>
 		<dependency>
@@ -24,48 +20,49 @@
 			<artifactId>slf4j-api</artifactId>
 			<version>${slf4j.version}</version>
 		</dependency>
-		<dependency>
-			<groupId>org.apache.logging.log4j</groupId>
-			<artifactId>log4j-slf4j-impl</artifactId>
-			<version>${log4j.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.logging.log4j</groupId>
-			<artifactId>log4j-core</artifactId>
-			<version>${log4j.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.mdkt.compiler</groupId>
-			<artifactId>InMemoryJavaCompiler</artifactId>
-			<version>${InMemoryJavaCompiler.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>com.google.code.gson</groupId>
-			<artifactId>gson</artifactId>
-			<version>${gson.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.bitlet</groupId>
-			<artifactId>weupnp</artifactId>
-			<version>${weupnp.version}</version>
-		</dependency>
 		<dependency>
 			<groupId>com.l2jserver</groupId>
 			<artifactId>l2j-server-game</artifactId>
 			<version>2.6.1.0-SNAPSHOT</version>
 		</dependency>
-		<!-- Test -->
-		<dependency>
-			<groupId>org.testng</groupId>
-			<artifactId>testng</artifactId>
-			<version>${testng.version}</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.mockito</groupId>
-			<artifactId>mockito-core</artifactId>
-			<version>${mockito-core.version}</version>
-			<scope>test</scope>
-		</dependency>
 	</dependencies>
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-jar-plugin</artifactId>
+				<version>${maven-jar-plugin.version}</version>
+				<executions>
+					<execution>
+						<id>default-jar</id>
+						<phase>never</phase>
+						<configuration>
+							<finalName>unwanted</finalName>
+							<classifier>unwanted</classifier>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-assembly-plugin</artifactId>
+				<version>${maven-assembly-plugin.version}</version>
+				<executions>
+					<execution>
+						<phase>package</phase>
+						<goals>
+							<goal>single</goal>
+						</goals>
+						<configuration>
+							<finalName>${project.artifactId}-${project.version}</finalName>
+							<appendAssemblyId>false</appendAssemblyId>
+							<descriptors>
+								<descriptor>src/main/assembly/zip.xml</descriptor>
+							</descriptors>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
 </project>
\ No newline at end of file
diff --git a/src/main/assembly/zip.xml b/src/main/assembly/zip.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6a6292c6510524ed8c1a2a1d5fe6fa44984e5197
--- /dev/null
+++ b/src/main/assembly/zip.xml
@@ -0,0 +1,24 @@
+<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
+	<id>zip</id>
+	<includeBaseDirectory>false</includeBaseDirectory>
+	<formats>
+		<format>zip</format>
+	</formats>
+	<fileSets>
+		<fileSet>
+			<directory>src/main/java/</directory>
+			<includes>
+				<include>**</include>
+			</includes>
+			<outputDirectory>./script</outputDirectory>
+		</fileSet>
+		<fileSet>
+			<directory>src/main/resources/</directory>
+			<includes>
+				<include>**</include>
+			</includes>
+			<outputDirectory>.</outputDirectory>
+		</fileSet>
+	</fileSets>
+</assembly>
\ No newline at end of file
diff --git a/src/main/java/com/l2jserver/datapack/gracia/GraciaLoader.java b/src/main/java/com/l2jserver/datapack/gracia/GraciaLoader.java
index 8ef7d87615b0610f66997584299b9d69e9bb8161..874359949589ac9f60b960bdf15f09aaca0149b5 100644
--- a/src/main/java/com/l2jserver/datapack/gracia/GraciaLoader.java
+++ b/src/main/java/com/l2jserver/datapack/gracia/GraciaLoader.java
@@ -18,8 +18,8 @@
  */
 package com.l2jserver.datapack.gracia;
 
-import java.util.logging.Level;
-import java.util.logging.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.l2jserver.datapack.gracia.AI.EnergySeeds;
 import com.l2jserver.datapack.gracia.AI.Lindvior;
@@ -46,12 +46,11 @@ import com.l2jserver.datapack.gracia.vehicles.SoIController.SoIController;
  * Gracia class-loader.
  * @author Pandragon
  */
-public final class GraciaLoader
-{
-	private static final Logger _log = Logger.getLogger(GraciaLoader.class.getName());
+public final class GraciaLoader {
 	
-	private static final Class<?>[] SCRIPTS =
-	{
+	private static final Logger LOG = LoggerFactory.getLogger(GraciaLoader.class);
+	
+	private static final Class<?>[] SCRIPTS = {
 		// AIs
 		EnergySeeds.class,
 		Lindvior.class,
@@ -79,18 +78,13 @@ public final class GraciaLoader
 		SoDController.class,
 	};
 	
-	public static void main(String[] args)
-	{
-		_log.info(GraciaLoader.class.getSimpleName() + ": Loading Gracia related scripts.");
-		for (Class<?> script : SCRIPTS)
-		{
-			try
-			{
+	public static void main(String[] args) {
+		LOG.info("Loading Gracia scripts...");
+		for (Class<?> script : SCRIPTS) {
+			try {
 				script.getDeclaredConstructor().newInstance();
-			}
-			catch (Exception e)
-			{
-				_log.log(Level.SEVERE, GraciaLoader.class.getSimpleName() + ": Failed loading " + script.getSimpleName() + ":", e);
+			} catch (Exception ex) {
+				LOG.error("Failed loading {}!", script.getSimpleName(), ex);
 			}
 		}
 	}
diff --git a/src/main/java/com/l2jserver/datapack/handlers/MasterHandler.java b/src/main/java/com/l2jserver/datapack/handlers/MasterHandler.java
index eb003206a73fb49e891ad18f025da7c3bdc0c753..3faf74417580d1342b73d55a4f545b5f38b269eb 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/MasterHandler.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/MasterHandler.java
@@ -21,6 +21,7 @@ package com.l2jserver.datapack.handlers;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.l2jserver.commons.util.Util;
 import com.l2jserver.datapack.handlers.actionhandlers.L2ArtefactInstanceAction;
 import com.l2jserver.datapack.handlers.actionhandlers.L2DecoyAction;
 import com.l2jserver.datapack.handlers.actionhandlers.L2DoorInstanceAction;
@@ -282,12 +283,10 @@ import com.l2jserver.gameserver.handler.VoicedCommandHandler;
  * @author UnAfraid
  * @author Zoey76
  */
-public class MasterHandler
-{
+public class MasterHandler {
 	private static final Logger LOG = LoggerFactory.getLogger(MasterHandler.class);
 	
-	private static final Class<?>[] ACTION_HANDLERS =
-	{
+	private static final Class<?>[] ACTION_HANDLERS = {
 		L2ArtefactInstanceAction.class,
 		L2DecoyAction.class,
 		L2DoorInstanceAction.class,
@@ -300,8 +299,7 @@ public class MasterHandler
 		L2TrapAction.class,
 	};
 	
-	private static final Class<?>[] ACTION_SHIFT_HANDLERS =
-	{
+	private static final Class<?>[] ACTION_SHIFT_HANDLERS = {
 		L2DoorInstanceActionShift.class,
 		L2ItemInstanceActionShift.class,
 		L2NpcActionShift.class,
@@ -310,8 +308,7 @@ public class MasterHandler
 		L2SummonActionShift.class,
 	};
 	
-	private static final Class<?>[] ADMIN_HANDLERS =
-	{
+	private static final Class<?>[] ADMIN_HANDLERS = {
 		AdminAdmin.class,
 		AdminAnnouncements.class,
 		AdminBBS.class,
@@ -386,8 +383,7 @@ public class MasterHandler
 		AdminZone.class,
 	};
 	
-	private static final Class<?>[] BYPASS_HANDLERS =
-	{
+	private static final Class<?>[] BYPASS_HANDLERS = {
 		Augment.class,
 		Buy.class,
 		BuyShadowItem.class,
@@ -421,8 +417,7 @@ public class MasterHandler
 		Wear.class,
 	};
 	
-	private static final Class<?>[] CHAT_HANDLERS =
-	{
+	private static final Class<?>[] CHAT_HANDLERS = {
 		ChatAll.class,
 		ChatAlliance.class,
 		ChatBattlefield.class,
@@ -438,8 +433,7 @@ public class MasterHandler
 		ChatTrade.class,
 	};
 	
-	private static final Class<?>[] COMMUNITY_HANDLERS =
-	{
+	private static final Class<?>[] COMMUNITY_HANDLERS = {
 		ClanBoard.class,
 		FavoriteBoard.class,
 		FriendsBoard.class,
@@ -450,8 +444,7 @@ public class MasterHandler
 		RegionBoard.class,
 	};
 	
-	private static final Class<?>[] ITEM_HANDLERS =
-	{
+	private static final Class<?>[] ITEM_HANDLERS = {
 		BeastSoulShot.class,
 		BeastSpiritShot.class,
 		BlessedSpiritShot.class,
@@ -485,15 +478,13 @@ public class MasterHandler
 		TeleportBookmark.class,
 	};
 	
-	private static final Class<?>[] PUNISHMENT_HANDLERS =
-	{
+	private static final Class<?>[] PUNISHMENT_HANDLERS = {
 		BanHandler.class,
 		ChatBanHandler.class,
 		JailHandler.class,
 	};
 	
-	private static final Class<?>[] USER_COMMAND_HANDLERS =
-	{
+	private static final Class<?>[] USER_COMMAND_HANDLERS = {
 		ClanPenalty.class,
 		ClanWarsList.class,
 		Dismount.class,
@@ -511,8 +502,7 @@ public class MasterHandler
 		SiegeStatus.class,
 	};
 	
-	private static final Class<?>[] TARGET_HANDLERS =
-	{
+	private static final Class<?>[] TARGET_HANDLERS = {
 		Area.class,
 		AreaCorpseMob.class,
 		AreaFriendly.class,
@@ -552,8 +542,7 @@ public class MasterHandler
 		Unlockable.class,
 	};
 	
-	private static final Class<?>[] TELNET_HANDLERS =
-	{
+	private static final Class<?>[] TELNET_HANDLERS = {
 		ChatsHandler.class,
 		DebugHandler.class,
 		HelpHandler.class,
@@ -564,8 +553,7 @@ public class MasterHandler
 		ThreadHandler.class,
 	};
 	
-	private static final Class<?>[] VOICED_COMMAND_HANDLERS =
-	{
+	private static final Class<?>[] VOICED_COMMAND_HANDLERS = {
 		StatsVCmd.class,
 		// TODO: Add configuration options for this voiced commands:
 		// CastleVCmd.class,
@@ -584,8 +572,7 @@ public class MasterHandler
 	// CustomAnnouncePkPvP.class
 	// };
 	
-	public static void main(String[] args)
-	{
+	public static void main(String[] args) {
 		LOG.info("Loading Handlers...");
 		loadHandlers(VoicedCommandHandler.getInstance(), VOICED_COMMAND_HANDLERS);
 		loadHandlers(ActionHandler.getInstance(), ACTION_HANDLERS);
@@ -602,24 +589,18 @@ public class MasterHandler
 		LOG.info("Handlers Loaded...");
 	}
 	
-	private static void loadHandlers(IHandler<?, ?> handler, Class<?>[] classes)
-	{
-		for (Class<?> c : classes)
-		{
-			if (c == null)
-			{
+	private static void loadHandlers(IHandler<?, ?> handler, Class<?>[] classes) {
+		for (Class<?> c : classes) {
+			if (c == null) {
 				continue;
 			}
 			
-			try
-			{
+			try {
 				handler.registerByClass(c);
-			}
-			catch (Exception ex)
-			{
+			} catch (Exception ex) {
 				LOG.error("Failed loading handler {}!", c.getSimpleName(), ex);
 			}
 		}
-		LOG.info("{}: Loaded {} handlers.", handler.getClass().getSimpleName(), handler.size());
+		LOG.info("Loaded {} {}.", handler.size(), Util.splitWords(handler.getClass().getSimpleName()));
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminPForge.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminPForge.java
index 57783d7820b936761771813cd34192461b9fb81b..3dbaba7fb2506779e4a8910a667666a842aebd0c 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminPForge.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminPForge.java
@@ -208,7 +208,7 @@ public final class AdminPForge implements IAdminCommandHandler
 	private void showValuesPage(L2PcInstance activeChar, String[] opCodes, String format)
 	{
 		String sendBypass = null;
-		String valuesHtml = HtmCache.getInstance().getHtmForce(activeChar.getHtmlPrefix(), "data/html/admin/pforge/values.htm");
+		String valuesHtml = HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), "data/html/admin/pforge/values.htm");
 		if (opCodes.length == 3)
 		{
 			valuesHtml = valuesHtml.replace("%opformat%", "chd");
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminQuest.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminQuest.java
index 28ea8b389c70f237cb1713ab0c7553df33698882..29fc44955fb9192d1b81dacf5d114b0117aae1ff 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminQuest.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminQuest.java
@@ -28,6 +28,7 @@ import javax.script.ScriptException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.instancemanager.QuestManager;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -122,14 +123,14 @@ public class AdminQuest implements IAdminCommandHandler
 			}
 			else
 			{
-				File file = new File(ScriptEngineManager.SCRIPT_FOLDER, parts[1]);
+				File file = new File(Config.SCRIPT_ROOT, "com/l2jserver/datapack/" + parts[1]);
 				// Trying to reload by script name.
 				if (!file.exists())
 				{
 					Quest quest = QuestManager.getInstance().getQuest(parts[1]);
 					if (quest != null)
 					{
-						file = new File(ScriptEngineManager.SCRIPT_FOLDER, quest.getClass().getName().replaceAll("\\.", "/") + ".java");
+						file = new File(Config.SCRIPT_ROOT, "com/l2jserver/datapack/" + quest.getClass().getName().replaceAll("\\.", "/") + ".java");
 					}
 				}
 				
diff --git a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminReload.java b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminReload.java
index a934b15f158ca0d15dc7bca6464f5ef83f3b68b2..3d94b8b201bc6596a28e490b4ddf7d05f6246384 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminReload.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/admincommandhandlers/AdminReload.java
@@ -205,14 +205,14 @@ public class AdminReload implements IAdminCommandHandler
 				}
 				case "effect":
 				{
-					final File file = new File(ScriptEngineManager.SCRIPT_FOLDER, "handlers/EffectMasterHandler.java");
+					final File file = new File(Config.SCRIPT_ROOT, "com/l2jserver/datapack/handlers/EffectMasterHandler.java");
 					ScriptEngineManager.getInstance().compileScript(file);
 					AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Effects.");
 					break;
 				}
 				case "handler":
 				{
-					final File file = new File(ScriptEngineManager.SCRIPT_FOLDER, "handlers/MasterHandler.java");
+					final File file = new File(Config.SCRIPT_ROOT, "com/l2jserver/datapack/handlers/MasterHandler.java");
 					ScriptEngineManager.getInstance().compileScript(file);
 					AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Handlers.");
 					break;
diff --git a/src/main/java/com/l2jserver/datapack/handlers/telnethandlers/ReloadHandler.java b/src/main/java/com/l2jserver/datapack/handlers/telnethandlers/ReloadHandler.java
index 89a861b9c729723a3142892e535d0eeea8c86e0d..11989a94204cfe40cd07d91cee8e2543dd2e411f 100644
--- a/src/main/java/com/l2jserver/datapack/handlers/telnethandlers/ReloadHandler.java
+++ b/src/main/java/com/l2jserver/datapack/handlers/telnethandlers/ReloadHandler.java
@@ -24,6 +24,7 @@ import java.net.Socket;
 import java.util.StringTokenizer;
 
 import com.l2jserver.gameserver.cache.HtmCache;
+import com.l2jserver.gameserver.config.Config;
 import com.l2jserver.gameserver.data.sql.impl.TeleportLocationTable;
 import com.l2jserver.gameserver.data.xml.impl.MultisellData;
 import com.l2jserver.gameserver.data.xml.impl.NpcData;
@@ -118,7 +119,7 @@ public class ReloadHandler implements ITelnetHandler
 					{
 						String questPath = st.hasMoreTokens() ? st.nextToken() : "";
 						
-						File file = new File(ScriptEngineManager.SCRIPT_FOLDER, questPath);
+						File file = new File(Config.SCRIPT_ROOT, "com/l2jserver/datapack/" + questPath);
 						if (file.isFile())
 						{
 							try
diff --git a/src/main/java/com/l2jserver/datapack/hellbound/HellboundLoader.java b/src/main/java/com/l2jserver/datapack/hellbound/HellboundLoader.java
index 9dc438251a52450fe2b847474d1ea3504014cf8b..c35f22227b13c333e4613cc0ed32a795677470f4 100644
--- a/src/main/java/com/l2jserver/datapack/hellbound/HellboundLoader.java
+++ b/src/main/java/com/l2jserver/datapack/hellbound/HellboundLoader.java
@@ -18,7 +18,8 @@
  */
 package com.l2jserver.datapack.hellbound;
 
-import java.util.logging.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.l2jserver.datapack.handlers.admincommandhandlers.AdminHellbound;
 import com.l2jserver.datapack.handlers.voicedcommandhandlers.Hellbound;
@@ -66,12 +67,11 @@ import com.l2jserver.gameserver.handler.VoicedCommandHandler;
  * Hellbound class-loader.
  * @author Zoey76
  */
-public final class HellboundLoader
-{
-	private static final Logger _log = Logger.getLogger(HellboundLoader.class.getName());
+public final class HellboundLoader {
 	
-	private static final Class<?>[] SCRIPTS =
-	{
+	private static final Logger LOG = LoggerFactory.getLogger(HellboundLoader.class);
+	
+	private static final Class<?>[] SCRIPTS = {
 		// Commands
 		AdminHellbound.class,
 		Hellbound.class,
@@ -116,31 +116,23 @@ public final class HellboundLoader
 		Q00133_ThatsBloodyHot.class,
 	};
 	
-	public static void main(String[] args)
-	{
-		_log.info(HellboundLoader.class.getSimpleName() + ": Loading Hellbound related scripts:");
+	public static void main(String[] args) {
+		LOG.info("Loading Hellbound scripts...");
 		// Data
 		HellboundPointData.getInstance();
 		HellboundSpawns.getInstance();
 		// Engine
 		HellboundEngine.getInstance();
-		for (Class<?> script : SCRIPTS)
-		{
-			try
-			{
+		for (Class<?> script : SCRIPTS) {
+			try {
 				final Object instance = script.getDeclaredConstructor().newInstance();
-				if (instance instanceof IAdminCommandHandler)
-				{
+				if (instance instanceof IAdminCommandHandler) {
 					AdminCommandHandler.getInstance().registerHandler((IAdminCommandHandler) instance);
-				}
-				else if (Config.L2JMOD_HELLBOUND_STATUS && (instance instanceof IVoicedCommandHandler))
-				{
+				} else if (Config.L2JMOD_HELLBOUND_STATUS && (instance instanceof IVoicedCommandHandler)) {
 					VoicedCommandHandler.getInstance().registerHandler((IVoicedCommandHandler) instance);
 				}
-			}
-			catch (Exception e)
-			{
-				_log.severe(HellboundLoader.class.getSimpleName() + ": Failed loading " + script.getSimpleName() + ":" + e.getMessage());
+			} catch (Exception ex) {
+				LOG.error("Failed loading {}!", script.getSimpleName(), ex);
 			}
 		}
 	}