diff --git a/datapack_development/data/lang/ger/sm/SystemMessageLocalisation.xml b/datapack_development/data/lang/ger/sm/SystemMessageLocalisation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..33709409b28841bc32fb4f4301b4ba2321143258
--- /dev/null
+++ b/datapack_development/data/lang/ger/sm/SystemMessageLocalisation.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<list>
+	<sm id="0" text="Verbindung zum Server unterbrochen" /> <!-- YOU_HAVE_BEEN_DISCONNECTED -->
+	<sm name="THE_SERVER_WILL_BE_COMING_DOWN_IN_S1_SECONDS" text="Der Server wird in $s1 Sekunden herrunter gefahren. Bitte suche einen sicheren Ort fĆ¼r den Logout." /> <!-- 1 -->
+</list>
\ No newline at end of file
diff --git a/datapack_development/data/scripts/ai/fantasy_isle/HandysBlockCheckerEvent.java b/datapack_development/data/scripts/ai/fantasy_isle/HandysBlockCheckerEvent.java
index a771b3f36ef43a5f46237d875abbc5d6e28490f2..a4fffa9e48cc09e7e96af814c07fb11b94b6f077 100644
--- a/datapack_development/data/scripts/ai/fantasy_isle/HandysBlockCheckerEvent.java
+++ b/datapack_development/data/scripts/ai/fantasy_isle/HandysBlockCheckerEvent.java
@@ -20,7 +20,7 @@ import com.l2jserver.gameserver.instancemanager.HandysBlockCheckerManager.ArenaP
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
-import com.l2jserver.gameserver.network.SystemMessageId2;
+import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ExCubeGameChangeTimeToStart;
 import com.l2jserver.gameserver.network.serverpackets.ExCubeGameRequestReady;
 import com.l2jserver.gameserver.network.serverpackets.ExCubeGameTeamList;
@@ -67,12 +67,12 @@ public class HandysBlockCheckerEvent extends Quest
 		{
 			if (eventIsFull(arena))
 			{
-				player.sendPacket(new SystemMessage(SystemMessageId2.CANNOT_REGISTER_CAUSE_QUEUE_FULL));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_REGISTER_CAUSE_QUEUE_FULL));
 				return null;
 			}
 			if (HandysBlockCheckerManager.getInstance().arenaIsBeingUsed(arena))
 			{
-				player.sendPacket(new SystemMessage(SystemMessageId2.MATCH_BEING_PREPARED_TRY_LATER));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.MATCH_BEING_PREPARED_TRY_LATER));
 				return null;
 			}
 			if(HandysBlockCheckerManager.getInstance().addPlayerToArena(player, arena))
diff --git a/datapack_development/data/scripts/ai/group_template/BeastFarm.java b/datapack_development/data/scripts/ai/group_template/BeastFarm.java
index f101891f59745d0420dbb49b936cde39ab2471af..48648f47803cee2c60e7b9e16b885812b3afc30e 100644
--- a/datapack_development/data/scripts/ai/group_template/BeastFarm.java
+++ b/datapack_development/data/scripts/ai/group_template/BeastFarm.java
@@ -423,7 +423,7 @@ public class BeastFarm extends L2AttackableAIScript
 		}
 		else
 		{
-			caster.sendPacket(new SystemMessage(SystemMessageId.S1).addString("The beast spit out the feed instead of eating it."));
+			caster.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1).addString("The beast spit out the feed instead of eating it."));
 			((L2Attackable)npc).dropItem(caster, food, 1);
 		}
 		return super.onSkillSee(npc,caster,skill,targets,isPet);
diff --git a/datapack_development/data/scripts/ai/group_template/DenOfEvil.java b/datapack_development/data/scripts/ai/group_template/DenOfEvil.java
index 417dd0b677ec95006bc3d67cb3a658422729fd89..ee2f0accb2e477dd6bd907c213f4d1f7eda83514 100644
--- a/datapack_development/data/scripts/ai/group_template/DenOfEvil.java
+++ b/datapack_development/data/scripts/ai/group_template/DenOfEvil.java
@@ -129,10 +129,10 @@ public class DenOfEvil extends L2AttackableAIScript
 			if (skillLevel == 3) // 3+1=4
 			{
 				ThreadPoolManager.getInstance().scheduleAi(new KashaDestruction(zone), 2*60*1000l);
-				zone.broadcastPacket(new SystemMessage(SystemMessageId.KASHA_EYE_PITCHES_TOSSES_EXPLODE));
+				zone.broadcastPacket(SystemMessage.getSystemMessage(SystemMessageId.KASHA_EYE_PITCHES_TOSSES_EXPLODE));
 			}
 			else if (skillLevel == 2) // 2+1=3
-				zone.broadcastPacket(new SystemMessage(SystemMessageId.I_CAN_FEEL_ENERGY_KASHA_EYE_GETTING_STRONGER_RAPIDLY));
+				zone.broadcastPacket(SystemMessage.getSystemMessage(SystemMessageId.I_CAN_FEEL_ENERGY_KASHA_EYE_GETTING_STRONGER_RAPIDLY));
 		}
 		return null;
 	}
diff --git a/datapack_development/data/scripts/ai/group_template/EnergySeeds.java b/datapack_development/data/scripts/ai/group_template/EnergySeeds.java
index 6e1761b4eaf1d6c4ce327ecf28e187522c1a9c32..53e20aa269420577b126c01c93831395a1d763e1 100644
--- a/datapack_development/data/scripts/ai/group_template/EnergySeeds.java
+++ b/datapack_development/data/scripts/ai/group_template/EnergySeeds.java
@@ -182,12 +182,12 @@ public class EnergySeeds extends L2AttackableAIScript
 				}
 				if (Rnd.get(100) < 33)
 				{
-					caster.sendPacket(new SystemMessage(SystemMessageId.THE_COLLECTION_HAS_SUCCEEDED));
+					caster.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THE_COLLECTION_HAS_SUCCEEDED));
 					caster.addItem("Loot", itemId, Rnd.get(RATE + 1, 2 * RATE), null, true);
 				}
 				else
 				{
-					caster.sendPacket(new SystemMessage(SystemMessageId.THE_COLLECTION_HAS_SUCCEEDED));
+					caster.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THE_COLLECTION_HAS_SUCCEEDED));
 					caster.addItem("Loot", itemId, Rnd.get(1, RATE), null, true);
 				}
 				seedCollectEvent(caster, npc, spawn._seedId);
diff --git a/datapack_development/data/scripts/ai/group_template/StarStones.java b/datapack_development/data/scripts/ai/group_template/StarStones.java
index 6410c5522acc77fffc272426cda8c7d54ec254bf..07f2e01ca802dd68ba679040acdb9ce58ed2e606 100644
--- a/datapack_development/data/scripts/ai/group_template/StarStones.java
+++ b/datapack_development/data/scripts/ai/group_template/StarStones.java
@@ -67,18 +67,18 @@ public class StarStones extends L2AttackableAIScript
 			}
 			if (Rnd.get(100) < 33)
 			{
-				caster.sendPacket(new SystemMessage(SystemMessageId.THE_COLLECTION_HAS_SUCCEEDED));
+				caster.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THE_COLLECTION_HAS_SUCCEEDED));
 				caster.addItem("Loot", itemId, Rnd.get(RATE + 1, 2 * RATE), null, true);
 			}
 			else if ((skill.getLevel() == 1 && Rnd.get(100) < 15) ||
 					(skill.getLevel() == 2 && Rnd.get(100) < 50) ||
 					(skill.getLevel() == 3 && Rnd.get(100) < 75))
 			{
-				caster.sendPacket(new SystemMessage(SystemMessageId.THE_COLLECTION_HAS_SUCCEEDED));
+				caster.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THE_COLLECTION_HAS_SUCCEEDED));
 				caster.addItem("Loot", itemId, Rnd.get(1, RATE), null, true);
 			}
 			else
-				caster.sendPacket(new SystemMessage(SystemMessageId.THE_COLLECTION_HAS_FAILED));
+				caster.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THE_COLLECTION_HAS_FAILED));
 			npc.deleteMe();
 		}
 		return super.onSkillSee(npc, caster, skill, targets, isPet);
diff --git a/datapack_development/data/scripts/ai/individual/Frintezza.java b/datapack_development/data/scripts/ai/individual/Frintezza.java
index 964300b27cd351f33eb1a97718286e2e31c979d8..35d717853aebe9fef7a64d58f7e25b2d0b59c2b6 100644
--- a/datapack_development/data/scripts/ai/individual/Frintezza.java
+++ b/datapack_development/data/scripts/ai/individual/Frintezza.java
@@ -977,7 +977,7 @@ public class Frintezza extends L2AttackableAIScript
 					if (cha instanceof L2PcInstance && Rnd.get(100) < 80)
 					{
 						skill.getEffects(frintezza, cha);
-						cha.sendPacket(new SystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT).addSkillName(5008, 4));
+						cha.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT).addSkillName(5008, 4));
 					}
 				}
 			}
@@ -996,7 +996,7 @@ public class Frintezza extends L2AttackableAIScript
 						cha.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
 						skill.getEffects(frintezza, cha);
 						cha.startAbnormalEffect(AbnormalEffect.DANCE_STUNNED);
-						cha.sendPacket(new SystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT).addSkillName(5008, 5));
+						cha.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT).addSkillName(5008, 5));
 					}
 				}
 				startQuestTimer("stop_effect", 25000, frintezza, null);
diff --git a/datapack_development/data/scripts/custom/8005_SubClassSkills/__init__.py b/datapack_development/data/scripts/custom/8005_SubClassSkills/__init__.py
index a43c4f0eece0114d0f9bc16c29d38019a47bd3a4..21a9b3842c90b784b884ddb594cc9cf90a36e98b 100644
--- a/datapack_development/data/scripts/custom/8005_SubClassSkills/__init__.py
+++ b/datapack_development/data/scripts/custom/8005_SubClassSkills/__init__.py
@@ -64,7 +64,7 @@ class Quest (JQuest) :
          asl.addSkill(j, minLevel+1, maxLevel, 0, 0)
    player.sendPacket(asl)
    if count == 0:
-     player.sendPacket(SystemMessage(SystemMessageId.NO_MORE_SKILLS_TO_LEARN))
+     player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NO_MORE_SKILLS_TO_LEARN))
    return ""
    
  def onAcquireSkill (self, npc, player, skill) :
@@ -85,7 +85,7 @@ class Quest (JQuest) :
                  player.destroyItem(qn,int(qvar), 1, player, 0)
                  st.saveGlobalQuestVar(var+str(j+1),str(skill.getId())+";")
                  return "true"
-   player.sendPacket(SystemMessage(SystemMessageId.ITEM_MISSING_TO_LEARN_SKILL))
+   player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ITEM_MISSING_TO_LEARN_SKILL))
    return "false"
 
  def onAcquireSkillInfo (self, npc, player, skill) :
diff --git a/datapack_development/data/scripts/custom/SkillTransfer/SkillTransfer.java b/datapack_development/data/scripts/custom/SkillTransfer/SkillTransfer.java
index c92cec5ef5fd4fa2b738acb8f06a532633de9333..5afaaa88c00586031975bdc140a071dc46b41bf0 100644
--- a/datapack_development/data/scripts/custom/SkillTransfer/SkillTransfer.java
+++ b/datapack_development/data/scripts/custom/SkillTransfer/SkillTransfer.java
@@ -174,7 +174,7 @@ public class SkillTransfer extends Quest
 			}
 		}
 		
-		player.sendPacket(new SystemMessage(SystemMessageId.NO_MORE_SKILLS_TO_LEARN));
+		player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NO_MORE_SKILLS_TO_LEARN));
 		return null;
 	}
 	
@@ -199,7 +199,7 @@ public class SkillTransfer extends Quest
 						if (player.destroyItemByItemId(qn, itemId, 1, npc, true))
 							return "true";
 					}
-					player.sendPacket(new SystemMessage(SystemMessageId.ITEM_MISSING_TO_LEARN_SKILL));
+					player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ITEM_MISSING_TO_LEARN_SKILL));
 					return "false";
 				}
 			}
@@ -267,7 +267,7 @@ public class SkillTransfer extends Quest
 			}
 			else if (player.getAdena() < RESET_ADENA_COST)
 			{
-				player.sendPacket(new SystemMessage(SystemMessageId.CANNOT_RESET_SKILL_LINK_BECAUSE_NOT_ENOUGH_ADENA));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_RESET_SKILL_LINK_BECAUSE_NOT_ENOUGH_ADENA));
 				return htmltext;
 			}
 			
diff --git a/datapack_development/data/scripts/events/FreyaCelebration/FreyaCelebration.java b/datapack_development/data/scripts/events/FreyaCelebration/FreyaCelebration.java
index f1ddb8e1b934970e7dcdaf7de0d22876b5837d8a..bb76e13006ca68940f1048e84738ee58868a0773 100644
--- a/datapack_development/data/scripts/events/FreyaCelebration/FreyaCelebration.java
+++ b/datapack_development/data/scripts/events/FreyaCelebration/FreyaCelebration.java
@@ -113,7 +113,7 @@ public class FreyaCelebration extends Quest
 					long remainingTime = (_reuse_time - System.currentTimeMillis()) / 1000;
 					int hours = (int) (remainingTime / 3600);
 					int minutes = (int) ((remainingTime % 3600) / 60);
-					SystemMessage sm = new SystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);
 					sm.addItemName(_freya_potion);
 					sm.addNumber(hours);
 					sm.addNumber(minutes);
@@ -122,7 +122,7 @@ public class FreyaCelebration extends Quest
 			}
 			else
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.S2_UNIT_OF_THE_ITEM_S1_REQUIRED);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S2_UNIT_OF_THE_ITEM_S1_REQUIRED);
 				sm.addItemName(57);
 				sm.addNumber(1);
 				player.sendPacket(sm);
diff --git a/datapack_development/data/scripts/events/GiftOfVitality/GiftOfVitality.java b/datapack_development/data/scripts/events/GiftOfVitality/GiftOfVitality.java
index 2d0e3418ef96f99e885aab1594533f85ab5fd9cb..291988b53d658f71b1a5d530cf1a49c4778b1d44 100644
--- a/datapack_development/data/scripts/events/GiftOfVitality/GiftOfVitality.java
+++ b/datapack_development/data/scripts/events/GiftOfVitality/GiftOfVitality.java
@@ -85,7 +85,7 @@ public class GiftOfVitality extends Quest
 				long remainingTime = (_reuse - System.currentTimeMillis()) / 1000;
 				int hours = (int) (remainingTime / 3600);
 				int minutes = (int) ((remainingTime%3600) / 60);
-				SystemMessage sm = new SystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);
 				sm.addSkillName(23179);
 				sm.addNumber(hours);
 				sm.addNumber(minutes);
diff --git a/datapack_development/data/scripts/events/MasterOfEnchanting/MasterOfEnchanting.java b/datapack_development/data/scripts/events/MasterOfEnchanting/MasterOfEnchanting.java
index 792ec61b146346996ba57c224646aeaae00f38a2..dd897eac224c9edbd56133431e4e5ee5ef9c32c8 100644
--- a/datapack_development/data/scripts/events/MasterOfEnchanting/MasterOfEnchanting.java
+++ b/datapack_development/data/scripts/events/MasterOfEnchanting/MasterOfEnchanting.java
@@ -102,7 +102,7 @@ public class MasterOfEnchanting extends Quest
 				int minutes = ((int) _remaining_time % 3600) / 60;
 				if (hours > 0)
 				{
-					SystemMessage sm = new SystemMessage(SystemMessageId.ITEM_PURCHASABLE_IN_S1_HOURS_S2_MINUTES);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ITEM_PURCHASABLE_IN_S1_HOURS_S2_MINUTES);
 					sm.addNumber(hours);
 					sm.addNumber(minutes);
 					player.sendPacket(sm);
@@ -110,7 +110,7 @@ public class MasterOfEnchanting extends Quest
 				}
 				else if (minutes > 0)
 				{
-					SystemMessage sm = new SystemMessage(SystemMessageId.ITEM_PURCHASABLE_IN_S1_MINUTES);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ITEM_PURCHASABLE_IN_S1_MINUTES);
 					sm.addNumber(minutes);
 					player.sendPacket(sm);
 					htmltext = "32599-scroll24.htm";
diff --git a/datapack_development/data/scripts/handlers/actionhandlers/L2DecoyAction.java b/datapack_development/data/scripts/handlers/actionhandlers/L2DecoyAction.java
index 3fc5a11607d055f29102aaeb63a2702fde19133b..586c3e25146fc625d26a2df0d07bf5bb3992c84a 100644
--- a/datapack_development/data/scripts/handlers/actionhandlers/L2DecoyAction.java
+++ b/datapack_development/data/scripts/handlers/actionhandlers/L2DecoyAction.java
@@ -30,7 +30,7 @@ public class L2DecoyAction implements IActionHandler
 		// Aggression target lock effect
 		if (activeChar.isLockedTarget() && activeChar.getLockedTarget() != target)
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.FAILED_CHANGE_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.FAILED_CHANGE_TARGET));
 			return false;
 		}
 		
diff --git a/datapack_development/data/scripts/handlers/actionhandlers/L2PcInstanceAction.java b/datapack_development/data/scripts/handlers/actionhandlers/L2PcInstanceAction.java
index ca9535b4239153fec6fedbf15c86e94f3f5fe6fa..e6d4da04a8cc15b05fd0629da4d7ad0b1ff0e0ae 100644
--- a/datapack_development/data/scripts/handlers/actionhandlers/L2PcInstanceAction.java
+++ b/datapack_development/data/scripts/handlers/actionhandlers/L2PcInstanceAction.java
@@ -63,7 +63,7 @@ public class L2PcInstanceAction implements IActionHandler
 		// Aggression target lock effect
 		if (activeChar.isLockedTarget() && activeChar.getLockedTarget() != target)
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.FAILED_CHANGE_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.FAILED_CHANGE_TARGET));
 			return false;
 		}
 		
diff --git a/datapack_development/data/scripts/handlers/actionhandlers/L2PetInstanceAction.java b/datapack_development/data/scripts/handlers/actionhandlers/L2PetInstanceAction.java
index 80d96c3cc4f3ed117da3b508ea043c826b4415c3..97bf72ebf94c6502a0d2d8176487244e2fdf5b81 100644
--- a/datapack_development/data/scripts/handlers/actionhandlers/L2PetInstanceAction.java
+++ b/datapack_development/data/scripts/handlers/actionhandlers/L2PetInstanceAction.java
@@ -37,7 +37,7 @@ public class L2PetInstanceAction implements IActionHandler
 		// Aggression target lock effect
 		if (activeChar.isLockedTarget() && activeChar.getLockedTarget() != target)
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.FAILED_CHANGE_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.FAILED_CHANGE_TARGET));
 			return false;
 		}
 		
diff --git a/datapack_development/data/scripts/handlers/actionhandlers/L2SummonAction.java b/datapack_development/data/scripts/handlers/actionhandlers/L2SummonAction.java
index 7b46762ac090f506ced3188ecef37b9f7bc6d22a..52c8c0af1a98d9b4001dc5bbf512623448b6e89f 100644
--- a/datapack_development/data/scripts/handlers/actionhandlers/L2SummonAction.java
+++ b/datapack_development/data/scripts/handlers/actionhandlers/L2SummonAction.java
@@ -38,7 +38,7 @@ public class L2SummonAction implements IActionHandler
 		// Aggression target lock effect
 		if (activeChar.isLockedTarget() && activeChar.getLockedTarget() != target)
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.FAILED_CHANGE_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.FAILED_CHANGE_TARGET));
 			return false;
 		}
 		
diff --git a/datapack_development/data/scripts/handlers/actionhandlers/L2TrapAction.java b/datapack_development/data/scripts/handlers/actionhandlers/L2TrapAction.java
index 2e53115c9ff26fe0128516f8ba8701ce075cb54a..fd7453c2fdfcde6b6176017abdf1ce335374bbe6 100644
--- a/datapack_development/data/scripts/handlers/actionhandlers/L2TrapAction.java
+++ b/datapack_development/data/scripts/handlers/actionhandlers/L2TrapAction.java
@@ -30,7 +30,7 @@ public class L2TrapAction implements IActionHandler
 		// Aggression target lock effect
 		if (activeChar.isLockedTarget() && activeChar.getLockedTarget() != target)
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.FAILED_CHANGE_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.FAILED_CHANGE_TARGET));
 			return false;
 		}
 		
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminAdmin.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminAdmin.java
index 6b151d59aeb554d99bab86bee940d3ed24e8a452..ca101d88f776adcb17ca6d785e75770b24d0a770 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminAdmin.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminAdmin.java
@@ -114,12 +114,12 @@ public class AdminAdmin implements IAdminCommandHandler
 			if (activeChar.isSilenceMode()) // already in message refusal mode
 			{
 				activeChar.setSilenceMode(false);
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.MESSAGE_ACCEPTANCE_MODE));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.MESSAGE_ACCEPTANCE_MODE));
 			}
 			else
 			{
 				activeChar.setSilenceMode(true);
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.MESSAGE_REFUSAL_MODE));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.MESSAGE_REFUSAL_MODE));
 			}
 			AdminHelpPage.showHelpPage(activeChar,"gm_menu.htm");
 		}
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminBan.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminBan.java
index d8966033edbfd2983a0cf9bb866a2677caccacd3..596d0666fdf814910e73a9c0a6d37498867cf0dc 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminBan.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminBan.java
@@ -95,7 +95,7 @@ public class AdminBan implements IAdminCommandHandler {
 		
 		if (targetPlayer != null && targetPlayer.equals(activeChar))
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.CANNOT_USE_ON_YOURSELF));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_USE_ON_YOURSELF));
 			return false;
 		}
 		
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminChangeAccessLevel.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminChangeAccessLevel.java
index 9758f90e5019d8b5ab5ba15cb417f810414b6f10..2bfd408c7e70637de3b270feb22a767f8a406c3c 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminChangeAccessLevel.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminChangeAccessLevel.java
@@ -71,7 +71,7 @@ public class AdminChangeAccessLevel implements IAdminCommandHandler
 				if (activeChar.getTarget() instanceof L2PcInstance)
 					onLineChange(activeChar, (L2PcInstance) activeChar.getTarget(), lvl);
 				else
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			}
 			catch (Exception e)
 			{
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminClan.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminClan.java
index caa20ff7e86e850913afa99a5904e1e21060e179..8ef90e57387690d07da1934919bb51ef58c0ef26 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminClan.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminClan.java
@@ -155,7 +155,7 @@ public class AdminClan implements IAdminCommandHandler
 							
 							clan.broadcastClanStatus();
 							
-							SystemMessage sm = new SystemMessage(SystemMessageId.CLAN_LEADER_PRIVILEGES_HAVE_BEEN_TRANSFERRED_TO_C1);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.CLAN_LEADER_PRIVILEGES_HAVE_BEEN_TRANSFERRED_TO_C1);
 							sm.addString(newLeader.getName());
 							clan.broadcastToOnlineMembers(sm);
 							activeChar.sendMessage("Clan leader has been changed!");
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminCursedWeapons.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminCursedWeapons.java
index 2b0075ee79d4d906538228abed553e460d5ea4c6..51bb20cadd91068a027f76e4ba0caef364bf4670 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminCursedWeapons.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminCursedWeapons.java
@@ -86,7 +86,7 @@ public class AdminCursedWeapons implements IAdminCommandHandler
 					{
 						activeChar.sendMessage("  Don't exist in the world.");
 					}
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.FRIEND_LIST_FOOTER));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.FRIEND_LIST_FOOTER));
 				}
 			}
 			else
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminEditChar.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminEditChar.java
index 440e3d886ce0d8f4357be30b27cf4683e40c270e..fe30cbaee00bcf6c766f77b2dcf6b3ad54beb00e 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminEditChar.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminEditChar.java
@@ -133,7 +133,7 @@ public class AdminEditChar implements IAdminCommandHandler
 				if (target != null)
 					showCharacterInfo(activeChar, target);
 				else
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.CHARACTER_DOES_NOT_EXIST));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CHARACTER_DOES_NOT_EXIST));
 			}
 			catch (StringIndexOutOfBoundsException e)
 			{
@@ -231,7 +231,7 @@ public class AdminEditChar implements IAdminCommandHandler
 					activeChar.sendMessage(player.getName()+"'s PK count changed to "+pk);
 				}
 				else
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			}
 			catch (Exception e)
 			{
@@ -258,7 +258,7 @@ public class AdminEditChar implements IAdminCommandHandler
 					activeChar.sendMessage(player.getName()+"'s PVP count changed to "+pvp);
 				}
 				else
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			}
 			catch (Exception e)
 			{
@@ -285,7 +285,7 @@ public class AdminEditChar implements IAdminCommandHandler
 					activeChar.sendMessage(player.getName()+"'s Fame changed to "+fame);
 				}
 				else
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			}
 			catch (Exception e)
 			{
@@ -326,7 +326,7 @@ public class AdminEditChar implements IAdminCommandHandler
 					activeChar.sendMessage(player.getName()+"'s Recommend changed to "+recVal);
 				}
 				else
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			}
 			catch (Exception e)
 			{
@@ -515,7 +515,7 @@ public class AdminEditChar implements IAdminCommandHandler
 				targetPet.getOwner().sendPacket(new SetSummonRemainTime(targetPet.getMaxFed(), targetPet.getCurrentFed()));
 			}
 			else
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 		}
 		else if(command.startsWith("admin_remove_clan_penalty"))
 		{
@@ -890,7 +890,7 @@ public class AdminEditChar implements IAdminCommandHandler
 			// update karma
 			player.setKarma(newKarma);
 			//Common character information
-			player.sendPacket(new SystemMessage(SystemMessageId.YOUR_KARMA_HAS_BEEN_CHANGED_TO).addString(String.valueOf(newKarma)));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOUR_KARMA_HAS_BEEN_CHANGED_TO).addString(String.valueOf(newKarma)));
 			//Admin information
 			activeChar.sendMessage("Successfully Changed karma for " + player.getName() + " from (" + oldKarma + ") to (" + newKarma + ").");
 			if (Config.DEBUG)
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminEffects.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminEffects.java
index 6ca0a8f7313794b0abda67476be57b8f072c5749..10c9b9a00c1f912d9f7839af0ed6afe93953ee40 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminEffects.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminEffects.java
@@ -346,7 +346,7 @@ public class AdminEffects implements IAdminCommandHandler
 				activeChar.stopSkillEffects(7029);
 				if (val == 0 && sendMessage)
 				{
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.EFFECT_S1_DISAPPEARED).addSkillName(7029));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.EFFECT_S1_DISAPPEARED).addSkillName(7029));
 				}
 				else if ((val >= 1) && (val <= 4))
 				{
@@ -511,7 +511,7 @@ public class AdminEffects implements IAdminCommandHandler
 					if (performSocial(social, obj, activeChar))
 						activeChar.sendMessage(obj.getName() + " was affected by your request.");
 					else
-						activeChar.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
+						activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOTHING_HAPPENED));
 				}
 				else if (!command.contains("menu"))
 					activeChar.sendMessage("Usage: //social <social_id> [player_name|radius]");
@@ -541,7 +541,7 @@ public class AdminEffects implements IAdminCommandHandler
 							if (performAbnormal(abnormal, player))
 								activeChar.sendMessage(player.getName() + "'s abnormal status was affected by your request.");
 							else
-								activeChar.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
+								activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOTHING_HAPPENED));
 						}
 						else
 						{
@@ -573,7 +573,7 @@ public class AdminEffects implements IAdminCommandHandler
 					if (performAbnormal(abnormal, obj))
 						activeChar.sendMessage(obj.getName() + "'s abnormal status was affected by your request.");
 					else
-						activeChar.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
+						activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOTHING_HAPPENED));
 				}
 				else if (!command.contains("menu"))
 					activeChar.sendMessage("Usage: //abnormal <abnormal_mask> [player_name|radius]");
@@ -603,7 +603,7 @@ public class AdminEffects implements IAdminCommandHandler
 							if (performSpecial(special, player))
 								activeChar.sendMessage(player.getName() + "'s special status was affected by your request.");
 							else
-								activeChar.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
+								activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOTHING_HAPPENED));
 						}
 						else
 						{
@@ -635,7 +635,7 @@ public class AdminEffects implements IAdminCommandHandler
 					if (performSpecial(special, obj))
 						activeChar.sendMessage(obj.getName() + "'s special status was affected by your request.");
 					else
-						activeChar.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
+						activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOTHING_HAPPENED));
 				}
 				else if (!command.contains("menu"))
 					activeChar.sendMessage("Usage: //special <special_mask> [player_name|radius]");
@@ -660,7 +660,7 @@ public class AdminEffects implements IAdminCommandHandler
 				if (obj == null)
 					obj = activeChar;
 				if (!(obj instanceof L2Character))
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 				else
 				{
 					L2Character target = (L2Character) obj;
@@ -742,17 +742,17 @@ public class AdminEffects implements IAdminCommandHandler
 			{
 				if (target instanceof L2ChestInstance)
 				{
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOTHING_HAPPENED));
 					return false;
 				}
 				if ((target instanceof L2Npc) && (action < 1 || action > 3))
 				{
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOTHING_HAPPENED));
 					return false;
 				}
 				if ((target instanceof L2PcInstance) && (action < 2 || action > 16))
 				{
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOTHING_HAPPENED));
 					return false;
 				}
 				L2Character character = (L2Character) target;
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminElement.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminElement.java
index e0a68184ed71a1ce18e8592b8768a32bbe2362e5..bba0afefd7d058387c7e095f4089d9b4656253ff 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminElement.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminElement.java
@@ -109,7 +109,7 @@ public class AdminElement implements IAdminCommandHandler
 		}
 		else
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return;
 		}
 		
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminEnchant.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminEnchant.java
index 80ef57238726e28e26ef51a55fe91ab188f75fb9..de2af011b3f02ab0e01aba4830344c11f091e6e5 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminEnchant.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminEnchant.java
@@ -147,7 +147,7 @@ public class AdminEnchant implements IAdminCommandHandler
 		}
 		else
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return;
 		}
 		
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminExpSp.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminExpSp.java
index 4038ce1600e4821774602dad675d74d0fd513df9..167366bba815b26a536af7293f499744e7591621 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminExpSp.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminExpSp.java
@@ -89,7 +89,7 @@ public class AdminExpSp implements IAdminCommandHandler
 			player = (L2PcInstance) target;
 		else
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return;
 		}
 		NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
@@ -112,7 +112,7 @@ public class AdminExpSp implements IAdminCommandHandler
 		}
 		else
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return false;
 		}
 		StringTokenizer st = new StringTokenizer(ExpSp);
@@ -159,7 +159,7 @@ public class AdminExpSp implements IAdminCommandHandler
 		}
 		else
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return false;
 		}
 		StringTokenizer st = new StringTokenizer(ExpSp);
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminFightCalculator.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminFightCalculator.java
index 73484fa511bcdabc3853c33ce9fa4f8094dd7c45..9aa53ac1d4272be78510e57b1bd1d540f75d7e4e 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminFightCalculator.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminFightCalculator.java
@@ -224,7 +224,7 @@ public class AdminFightCalculator implements IAdminCommandHandler
 			npc2 = (L2Character) activeChar.getTarget();
 			if (npc2 == null)
 			{
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 				return;
 			}
 		}
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminFortSiege.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminFortSiege.java
index ce9fd83e1ff71eb187a688e5e656ed5bb8438ec0..534674ace8dc498eeb1dd2a1b11210295059d13b 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminFortSiege.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminFortSiege.java
@@ -79,7 +79,7 @@ public class AdminFortSiege implements IAdminCommandHandler
 			if (command.equalsIgnoreCase("admin_add_fortattacker"))
 			{
 				if (player == null)
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
 				else
 				{
 					if (fort.getSiege().checkIfCanRegister(player))
@@ -101,7 +101,7 @@ public class AdminFortSiege implements IAdminCommandHandler
 			else if (command.equalsIgnoreCase("admin_setfort"))
 			{
 				if (player == null || player.getClan() == null)
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
 				else
 					fort.setOwner(player.getClan(), false);
 			}
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminGmChat.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminGmChat.java
index 792b83ec2725e045f5aecbf362025dc857d7f531..c541f78d26674695dcb0a29448d8955365b786a0 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminGmChat.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminGmChat.java
@@ -68,12 +68,12 @@ public class AdminGmChat implements IAdminCommandHandler
 		
 		if (target == null)
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.SELECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SELECT_TARGET));
 			return;
 		}
 		if (!(target instanceof L2PcInstance))
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return;
 		}
 		L2PcInstance player = (L2PcInstance) target;
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminHeal.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminHeal.java
index 1e37a81c406efee87f360a3785f4af1d7514d199..75e10f675301bfe993dd66f26cba3723a63a01f7 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminHeal.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminHeal.java
@@ -122,6 +122,6 @@ public class AdminHeal implements IAdminCommandHandler
 				_log.fine("GM: " + activeChar.getName() + "(" + activeChar.getObjectId() + ") healed character " + target.getName());
 		}
 		else
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 	}
 }
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminKill.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminKill.java
index 3e60a214875273c0a7ad4c5e7a10e6091f827b76..36ddee7c80c355576423f115860fde7ddaaa6527 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminKill.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminKill.java
@@ -113,7 +113,7 @@ public class AdminKill implements IAdminCommandHandler
 			{
 				L2Object obj = activeChar.getTarget();
 				if (obj instanceof L2ControllableMobInstance || !(obj instanceof L2Character))
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 				else
 					kill(activeChar, (L2Character) obj);
 			}
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminLevel.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminLevel.java
index 397cd0e8e46dbda49d651f5643a5ec6996126049..9f67bf104f9fbe3c3138a1852d54dd78e7414544 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminLevel.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminLevel.java
@@ -77,7 +77,7 @@ public class AdminLevel implements IAdminCommandHandler
 			{
 				if (!(targetChar instanceof L2PcInstance))
 				{
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT)); // incorrect target!
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.TARGET_IS_INCORRECT)); // incorrect target!
 					return false;
 				}
 				L2PcInstance targetPlayer = (L2PcInstance) targetChar;
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminMammon.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminMammon.java
index e4f8fd65dea1700fb1e28e38581c595d820ef100..e0ea711b941006cb2d20ea8da887d9c720cb6d5d 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminMammon.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminMammon.java
@@ -127,7 +127,7 @@ public class AdminMammon implements IAdminCommandHandler
 				activeChar.sendMessage("Command format: //msg <SYSTEM_MSG_ID>");
 				return true;
 			}
-			activeChar.sendPacket(new SystemMessage(msgId));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(msgId));
 		}
 		
 		return true;
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminMenu.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminMenu.java
index bf7fb1249be2401841909cac3033fec67998b786..80356ad45112577f5718fe48bd18ab6ab3440bd6 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminMenu.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminMenu.java
@@ -92,7 +92,7 @@ public class AdminMenu implements IAdminCommandHandler
 				L2PcInstance player = L2World.getInstance().getPlayer(targetName);
 				if (player == null)
 				{
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 					return true;
 				}
 				if (!player.isInParty())
@@ -118,7 +118,7 @@ public class AdminMenu implements IAdminCommandHandler
 				L2PcInstance player = L2World.getInstance().getPlayer(targetName);
 				if (player == null)
 				{
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 					return true;
 				}
 				L2Clan clan = player.getClan();
@@ -247,7 +247,7 @@ public class AdminMenu implements IAdminCommandHandler
 		}
 		else
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 		}
 		AdminHelpPage.showHelpPage(activeChar, filename);
 	}
@@ -269,11 +269,11 @@ public class AdminMenu implements IAdminCommandHandler
 			player = (L2PcInstance) target;
 		else
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return;
 		}
 		if (player.getObjectId() == activeChar.getObjectId())
-			player.sendPacket(new SystemMessage(SystemMessageId.CANNOT_USE_ON_YOURSELF));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_USE_ON_YOURSELF));
 		else
 		{
 			activeChar.setInstanceId(player.getInstanceId());
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminMobGroup.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminMobGroup.java
index 9916ceaa9f97999efd6ef11903ea4a3318f18119..834afecf640021a715afe7c63adf42ec4951b25c 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminMobGroup.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminMobGroup.java
@@ -564,7 +564,7 @@ public class AdminMobGroup implements IAdminCommandHandler
 		for (MobGroup mobGroup : mobGroupList)
 			activeChar.sendMessage(mobGroup.getGroupId() + ": " + mobGroup.getActiveMobCount() + " alive out of " + mobGroup.getMaxMobCount() + " of NPC ID " + mobGroup.getTemplate().npcId + " (" + mobGroup.getStatus() + ")");
 		
-		activeChar.sendPacket(new SystemMessage(SystemMessageId.FRIEND_LIST_FOOTER));
+		activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.FRIEND_LIST_FOOTER));
 	}
 	
 	public String[] getAdminCommandList()
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminMonsterRace.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminMonsterRace.java
index f8b879748b0269ba831af7d3c5147faa6e4f9966..05a24f2190877c889ca3664bf67748d3903623a1 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminMonsterRace.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminMonsterRace.java
@@ -95,7 +95,7 @@ public class AdminMonsterRace implements IAdminCommandHandler
 		else if (state == 0)
 		{
 			state++;
-			SystemMessage sm = new SystemMessage(SystemMessageId.MONSRACE_RACE_START);
+			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.MONSRACE_RACE_START);
 			sm.addNumber(0);
 			activeChar.sendPacket(sm);
 			PlaySound SRace = new PlaySound(1, "S_Race", 0, 0, 0, 0, 0);
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminPetition.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminPetition.java
index fe7717e6651f781cdf4d100722bb7adbc5e29df7..f3345e0ed481642f14b93a45e613a302c99ba08c 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminPetition.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminPetition.java
@@ -59,30 +59,30 @@ public class AdminPetition implements IAdminCommandHandler
 		{
 			if (PetitionManager.getInstance().isPlayerInConsultation(activeChar))
 			{
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.ONLY_ONE_ACTIVE_PETITION_AT_TIME));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ONLY_ONE_ACTIVE_PETITION_AT_TIME));
 				return true;
 			}
 			
 			if (PetitionManager.getInstance().isPetitionInProcess(petitionId))
 			{
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.PETITION_UNDER_PROCESS));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.PETITION_UNDER_PROCESS));
 				return true;
 			}
 			
 			if (!PetitionManager.getInstance().acceptPetition(activeChar, petitionId))
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.NOT_UNDER_PETITION_CONSULTATION));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_UNDER_PETITION_CONSULTATION));
 		}
 		else if (command.startsWith("admin_reject_petition"))
 		{
 			if (!PetitionManager.getInstance().rejectPetition(activeChar, petitionId))
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.FAILED_CANCEL_PETITION_TRY_LATER));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.FAILED_CANCEL_PETITION_TRY_LATER));
 			PetitionManager.getInstance().sendPendingPetitionList(activeChar);
 		}
 		else if (command.equals("admin_reset_petitions"))
 		{
 			if (PetitionManager.getInstance().isPetitionInProcess())
 			{
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.PETITION_UNDER_PROCESS));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.PETITION_UNDER_PROCESS));
 				return false;
 			}
 			PetitionManager.getInstance().clearPendingPetitions();
@@ -95,7 +95,7 @@ public class AdminPetition implements IAdminCommandHandler
 				L2Object targetChar = activeChar.getTarget();
 				if (targetChar == null || !(targetChar instanceof L2PcInstance))
 				{
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
 					return false;
 				}
 				L2PcInstance targetPlayer = (L2PcInstance) targetChar;
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminPledge.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminPledge.java
index 91da38715b5a4b37e2469681d656dedc6471ed97..da57c4b3b8b6e0ae627207015ba3b93025217a1b 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminPledge.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminPledge.java
@@ -52,7 +52,7 @@ public class AdminPledge implements IAdminCommandHandler
 			player = (L2PcInstance) target;
 		else
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			showMainPage(activeChar);
 			return false;
 		}
@@ -86,7 +86,7 @@ public class AdminPledge implements IAdminCommandHandler
 			}
 			else if (!player.isClanLeader())
 			{
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.S1_IS_NOT_A_CLAN_LEADER).addString(name));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_IS_NOT_A_CLAN_LEADER).addString(name));
 				showMainPage(activeChar);
 				return false;
 			}
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminPolymorph.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminPolymorph.java
index 60f29a505a9b776e49a740787dc19023e972d532..597d561d24c4c3580e2bfef2dd2d31ec38bf9876 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminPolymorph.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminPolymorph.java
@@ -63,7 +63,7 @@ public class AdminPolymorph implements IAdminCommandHandler
 			}
 			else
 			{
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			}
 		}
 		else if (command.startsWith("admin_transform"))
@@ -98,7 +98,7 @@ public class AdminPolymorph implements IAdminCommandHandler
 			}
 			else
 			{
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			}
 		}
 		if (command.startsWith("admin_polymorph"))
@@ -165,7 +165,7 @@ public class AdminPolymorph implements IAdminCommandHandler
 			activeChar.sendMessage("Polymorph succeed");
 		}
 		else
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 	}
 	
 	/**
@@ -182,7 +182,7 @@ public class AdminPolymorph implements IAdminCommandHandler
 			activeChar.sendMessage("Unpolymorph succeed");
 		}
 		else
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 	}
 	
 	private void showMainPage(L2PcInstance activeChar, String command)
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminRes.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminRes.java
index fdebae32e27b06fca09bb1a4c57536acb3bd93e8..37de8595585c24bacafeb4baac2d2aaf8f4803c2 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminRes.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminRes.java
@@ -106,7 +106,7 @@ public class AdminRes implements IAdminCommandHandler
 		
 		if (obj instanceof L2ControllableMobInstance)
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return;
 		}
 		
@@ -148,7 +148,7 @@ public class AdminRes implements IAdminCommandHandler
 		
 		if (obj instanceof L2PcInstance || obj instanceof L2ControllableMobInstance)
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return;
 		}
 		
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminShowQuests.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminShowQuests.java
index ca7e9bd3fe5521b151305879d9bdd1cb3ffbe723..e64c65da3f4c67f598d8522b0fa9aaacfc828172 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminShowQuests.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminShowQuests.java
@@ -86,7 +86,7 @@ public class AdminShowQuests implements IAdminCommandHandler
 		
 		if (target == null)
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return false;
 		}
 		
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminSiege.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminSiege.java
index f3ff6fa3865fcdf97d3f66b89ca0f744bd91d645..f5b3d47f8de1ba7371c134f292a51bfd87577dea 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminSiege.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminSiege.java
@@ -102,14 +102,14 @@ public class AdminSiege implements IAdminCommandHandler
 			if (command.equalsIgnoreCase("admin_add_attacker"))
 			{
 				if (player == null)
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
 				else
 					castle.getSiege().registerAttacker(player, true);
 			}
 			else if (command.equalsIgnoreCase("admin_add_defender"))
 			{
 				if (player == null)
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
 				else
 					castle.getSiege().registerDefender(player, true);
 			}
@@ -145,7 +145,7 @@ public class AdminSiege implements IAdminCommandHandler
 			else if (command.equalsIgnoreCase("admin_setcastle"))
 			{
 				if (player == null || player.getClan() == null)
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
 				else
 					castle.setOwner(player.getClan());
 			}
@@ -185,7 +185,7 @@ public class AdminSiege implements IAdminCommandHandler
 			else if (command.equalsIgnoreCase("admin_clanhallset"))
 			{
 				if (player == null || player.getClan() == null)
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
 				else if (!ClanHallManager.getInstance().isFree(clanhall.getId()))
 					activeChar.sendMessage("This ClanHall isn't free!");
 				else if (player.getClan().getHasHideout() == 0)
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminSkill.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminSkill.java
index f22ba625e2756ecfd47b29ea9de3c5c9e42e278e..52484e1cc7ad61d4b71412b3ad2ca1296e05375d 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminSkill.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminSkill.java
@@ -187,7 +187,7 @@ public class AdminSkill implements IAdminCommandHandler
 			player = (L2PcInstance) target;
 		else
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return;
 		}
 		//Notify player and admin
@@ -208,7 +208,7 @@ public class AdminSkill implements IAdminCommandHandler
 			player = (L2PcInstance) target;
 		else
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
 			return;
 		}
 		
@@ -306,7 +306,7 @@ public class AdminSkill implements IAdminCommandHandler
 			player = (L2PcInstance) target;
 		else
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return;
 		}
 		NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
@@ -325,11 +325,11 @@ public class AdminSkill implements IAdminCommandHandler
 			player = (L2PcInstance) target;
 		else
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return;
 		}
 		if (player.getName().equals(activeChar.getName()))
-			player.sendPacket(new SystemMessage(SystemMessageId.CANNOT_USE_ON_YOURSELF));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_USE_ON_YOURSELF));
 		else
 		{
 			L2Skill[] skills = player.getAllSkills();
@@ -352,7 +352,7 @@ public class AdminSkill implements IAdminCommandHandler
 			player = (L2PcInstance) target;
 		else
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return;
 		}
 		if (adminSkills == null)
@@ -385,7 +385,7 @@ public class AdminSkill implements IAdminCommandHandler
 		else
 		{
 			showMainPage(activeChar);
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return;
 		}
 		StringTokenizer st = new StringTokenizer(val);
@@ -433,7 +433,7 @@ public class AdminSkill implements IAdminCommandHandler
 			player = (L2PcInstance) target;
 		else
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return;
 		}
 		L2Skill skill = SkillTable.getInstance().getInfo(idval, player.getSkillLevel(idval));
@@ -462,12 +462,12 @@ public class AdminSkill implements IAdminCommandHandler
 		else
 		{
 			showMainPage(activeChar);
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return;
 		}
 		if (!player.isClanLeader())
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.S1_IS_NOT_A_CLAN_LEADER).addString(player.getName()));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_IS_NOT_A_CLAN_LEADER).addString(player.getName()));
 			showMainPage(activeChar);
 			return;
 		}
@@ -483,7 +483,7 @@ public class AdminSkill implements IAdminCommandHandler
 			if (skill != null)
 			{
 				String skillname = skill.getName();
-				SystemMessage sm = new SystemMessage(SystemMessageId.CLAN_SKILL_S1_ADDED);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.CLAN_SKILL_S1_ADDED);
 				sm.addSkillName(skill);
 				player.sendPacket(sm);
 				player.getClan().broadcastToOnlineMembers(sm);
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminSpawn.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminSpawn.java
index e8ab7dbbcc4bfb44b873b820f1f8ae3c58362238..b853f1fe3c52434c9b3cd14be580eef771a4ef07 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminSpawn.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminSpawn.java
@@ -213,7 +213,7 @@ public class AdminSpawn implements IAdminCommandHandler
 		}
 		else if (command.startsWith("admin_unspawnall"))
 		{
-			Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.NPC_SERVER_NOT_OPERATING));
+			Broadcast.toAllOnlinePlayers(SystemMessage.getSystemMessage(SystemMessageId.NPC_SERVER_NOT_OPERATING));
 			RaidBossSpawnManager.getInstance().cleanUp();
 			DayNightSpawnManager.getInstance().cleanUp();
 			L2World.getInstance().deleteVisibleNpcSpawns();
@@ -390,7 +390,7 @@ public class AdminSpawn implements IAdminCommandHandler
 		}
 		catch (Exception e)
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_CANT_FOUND));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.TARGET_CANT_FOUND));
 		}
 	}
 	
diff --git a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminTeleport.java b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminTeleport.java
index abe8cb34802591f2b93c5bd17a57e00082a1b326..77a2f8a970dffb6cf09247954924b9624486751b 100644
--- a/datapack_development/data/scripts/handlers/admincommandhandlers/AdminTeleport.java
+++ b/datapack_development/data/scripts/handlers/admincommandhandlers/AdminTeleport.java
@@ -295,7 +295,7 @@ public class AdminTeleport implements IAdminCommandHandler
 		}
 		else
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return;
 		}
 		NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
@@ -338,13 +338,13 @@ public class AdminTeleport implements IAdminCommandHandler
 		}
 		else
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return;
 		}
 		
 		if (player.getObjectId() == activeChar.getObjectId())
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.CANNOT_USE_ON_YOURSELF));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_USE_ON_YOURSELF));
 		}
 		else
 		{
@@ -402,7 +402,7 @@ public class AdminTeleport implements IAdminCommandHandler
 	{
 		if (target == null)
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return;
 		}
 		
@@ -413,13 +413,13 @@ public class AdminTeleport implements IAdminCommandHandler
 		}
 		else
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return;
 		}
 		
 		if (player.getObjectId() == activeChar.getObjectId())
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.CANNOT_USE_ON_YOURSELF));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_USE_ON_YOURSELF));
 		}
 		else
 		{
@@ -568,12 +568,12 @@ public class AdminTeleport implements IAdminCommandHandler
 			}
 			catch (Exception e)
 			{
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_CANT_FOUND));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.TARGET_CANT_FOUND));
 			}
 		}
 		else
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 		}
 	}
 	
diff --git a/datapack_development/data/scripts/handlers/bypasshandlers/ClanWarehouse.java b/datapack_development/data/scripts/handlers/bypasshandlers/ClanWarehouse.java
index 8c1fb38baab5a6f0541ad77b5601ffa7e1652feb..db7a8d97d412c78af0c4358a526afb14f34f0d63 100644
--- a/datapack_development/data/scripts/handlers/bypasshandlers/ClanWarehouse.java
+++ b/datapack_development/data/scripts/handlers/bypasshandlers/ClanWarehouse.java
@@ -50,13 +50,13 @@ public class ClanWarehouse implements IBypassHandler
 		
 		if (activeChar.getClan() == null)
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_THE_RIGHT_TO_USE_CLAN_WAREHOUSE));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_THE_RIGHT_TO_USE_CLAN_WAREHOUSE));
 			return false;
 		}
 		
 		if (activeChar.getClan().getLevel() == 0)
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.ONLY_LEVEL_1_CLAN_OR_HIGHER_CAN_USE_WAREHOUSE));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ONLY_LEVEL_1_CLAN_OR_HIGHER_CAN_USE_WAREHOUSE));
 			return false;
 		}
 		
@@ -115,7 +115,7 @@ public class ClanWarehouse implements IBypassHandler
 		
 		if ((player.getClanPrivileges() & L2Clan.CP_CL_VIEW_WAREHOUSE) != L2Clan.CP_CL_VIEW_WAREHOUSE)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_THE_RIGHT_TO_USE_CLAN_WAREHOUSE));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_THE_RIGHT_TO_USE_CLAN_WAREHOUSE));
 			return;
 		}
 		
@@ -123,7 +123,7 @@ public class ClanWarehouse implements IBypassHandler
 		
 		if (player.getActiveWarehouse().getSize() == 0)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.NO_ITEM_DEPOSITED_IN_WH));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NO_ITEM_DEPOSITED_IN_WH));
 			return;
 		}
 		
diff --git a/datapack_development/data/scripts/handlers/bypasshandlers/Festival.java b/datapack_development/data/scripts/handlers/bypasshandlers/Festival.java
index 5bd1bdb84e20b316500e8a3ff8ea9c222280f0ce..3e55f346e89f0ef9b2ae0699d65ff6e4f2b0177f 100644
--- a/datapack_development/data/scripts/handlers/bypasshandlers/Festival.java
+++ b/datapack_development/data/scripts/handlers/bypasshandlers/Festival.java
@@ -185,7 +185,7 @@ public class Festival implements IBypassHandler
 							return true;
 						
 						final boolean isHighestScore = SevenSignsFestival.getInstance().setFinalScore(activeChar, npc.getFestivalOracle(), npc.getFestivalType(), offeringScore);
-						SystemMessage sm = new SystemMessage(SystemMessageId.CONTRIB_SCORE_INCREASED);
+						SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.CONTRIB_SCORE_INCREASED);
 						sm.addItemNumber(offeringScore);
 						activeChar.sendPacket(sm);
 						
diff --git a/datapack_development/data/scripts/handlers/bypasshandlers/FortSiege.java b/datapack_development/data/scripts/handlers/bypasshandlers/FortSiege.java
index 1aac7d0e4326f97d13d846c7b6830388f6e47402..6d041d1b5baf99dfdf583cd5b2992134b96336d7 100644
--- a/datapack_development/data/scripts/handlers/bypasshandlers/FortSiege.java
+++ b/datapack_development/data/scripts/handlers/bypasshandlers/FortSiege.java
@@ -45,18 +45,18 @@ public class FortSiege implements IBypassHandler
 				if (System.currentTimeMillis() < TerritoryWarManager.getInstance().getTWStartTimeInMillis()
 						&& TerritoryWarManager.getInstance().getIsRegistrationOver())
 				{
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.NOT_SIEGE_REGISTRATION_TIME2));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_SIEGE_REGISTRATION_TIME2));
 					return false;
 				}
 				else if (System.currentTimeMillis() > TerritoryWarManager.getInstance().getTWStartTimeInMillis()
 						&& TerritoryWarManager.getInstance().isTWChannelOpen())
 				{
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.NOT_SIEGE_REGISTRATION_TIME2));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_SIEGE_REGISTRATION_TIME2));
 					return false;
 				}
 				else if (((L2Npc)target).getFort().getSiege().registerAttacker(activeChar, false))
 				{
-					SystemMessage sm = new SystemMessage(SystemMessageId.REGISTERED_TO_S1_FORTRESS_BATTLE);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.REGISTERED_TO_S1_FORTRESS_BATTLE);
 					sm.addString(((L2Npc)target).getFort().getName());
 					activeChar.sendPacket(sm);
 					((L2Npc)target).showChatWindow(activeChar, 7);
diff --git a/datapack_development/data/scripts/handlers/bypasshandlers/ItemAuctionLink.java b/datapack_development/data/scripts/handlers/bypasshandlers/ItemAuctionLink.java
index d40612916dddf6b0de204fdedbaaf2286ba68008..c516e6a6c3a09d86365db85f4cd7a5106c321a5a 100644
--- a/datapack_development/data/scripts/handlers/bypasshandlers/ItemAuctionLink.java
+++ b/datapack_development/data/scripts/handlers/bypasshandlers/ItemAuctionLink.java
@@ -46,7 +46,7 @@ public class ItemAuctionLink implements IBypassHandler
 		
 		if (!Config.ALT_ITEM_AUCTION_ENABLED)
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.NO_AUCTION_PERIOD));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NO_AUCTION_PERIOD));
 			return true;
 		}
 		
@@ -75,7 +75,7 @@ public class ItemAuctionLink implements IBypassHandler
 				
 				if (currentAuction == null)
 				{
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.NO_AUCTION_PERIOD));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NO_AUCTION_PERIOD));
 					
 					if (nextAuction != null) // used only once when database is empty
 						activeChar.sendMessage("The next auction will begin on the " + fmt.format(new Date(nextAuction.getStartingTime())) + ".");
@@ -94,7 +94,7 @@ public class ItemAuctionLink implements IBypassHandler
 						returned = true;
 				}
 				if (!returned)
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.NO_OFFERINGS_OWN_OR_MADE_BID_FOR));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NO_OFFERINGS_OWN_OR_MADE_BID_FOR));
 			}
 			else
 				return false;
diff --git a/datapack_development/data/scripts/handlers/bypasshandlers/Loto.java b/datapack_development/data/scripts/handlers/bypasshandlers/Loto.java
index 8b991d459196405adb984c99710623588e51aadc..db6c8d8bca3353d6aa575d71ddf1fc0f80cebb6e 100644
--- a/datapack_development/data/scripts/handlers/bypasshandlers/Loto.java
+++ b/datapack_development/data/scripts/handlers/bypasshandlers/Loto.java
@@ -101,13 +101,13 @@ public class Loto implements IBypassHandler
 			if (!Lottery.getInstance().isStarted())
 			{
 				//tickets can't be sold
-				player.sendPacket(new SystemMessage(SystemMessageId.NO_LOTTERY_TICKETS_CURRENT_SOLD));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NO_LOTTERY_TICKETS_CURRENT_SOLD));
 				return;
 			}
 			if (!Lottery.getInstance().isSellableTickets())
 			{
 				//tickets can't be sold
-				player.sendPacket(new SystemMessage(SystemMessageId.NO_LOTTERY_TICKETS_AVAILABLE));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NO_LOTTERY_TICKETS_AVAILABLE));
 				return;
 			}
 			
@@ -166,13 +166,13 @@ public class Loto implements IBypassHandler
 			if (!Lottery.getInstance().isStarted())
 			{
 				//tickets can't be sold
-				player.sendPacket(new SystemMessage(SystemMessageId.NO_LOTTERY_TICKETS_CURRENT_SOLD));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NO_LOTTERY_TICKETS_CURRENT_SOLD));
 				return;
 			}
 			if (!Lottery.getInstance().isSellableTickets())
 			{
 				//tickets can't be sold
-				player.sendPacket(new SystemMessage(SystemMessageId.NO_LOTTERY_TICKETS_AVAILABLE));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NO_LOTTERY_TICKETS_AVAILABLE));
 				return;
 			}
 			
@@ -193,7 +193,7 @@ public class Loto implements IBypassHandler
 			}
 			if (player.getAdena() < price)
 			{
-				sm = new SystemMessage(SystemMessageId.YOU_NOT_ENOUGH_ADENA);
+				sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NOT_ENOUGH_ADENA);
 				player.sendPacket(sm);
 				return;
 			}
@@ -201,7 +201,7 @@ public class Loto implements IBypassHandler
 				return;
 			Lottery.getInstance().increasePrize(price);
 			
-			sm = new SystemMessage(SystemMessageId.ACQUIRED_S1_S2);
+			sm = SystemMessage.getSystemMessage(SystemMessageId.ACQUIRED_S1_S2);
 			sm.addNumber(lotonumber);
 			sm.addItemName(4442);
 			player.sendPacket(sm);
@@ -288,7 +288,7 @@ public class Loto implements IBypassHandler
 				return;
 			long[] check = Lottery.getInstance().checkTicket(item);
 			
-			sm = new SystemMessage(SystemMessageId.S1_DISAPPEARED);
+			sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISAPPEARED);
 			sm.addItemName(4442);
 			player.sendPacket(sm);
 			
diff --git a/datapack_development/data/scripts/handlers/bypasshandlers/ManorManager.java b/datapack_development/data/scripts/handlers/bypasshandlers/ManorManager.java
index bd993311a69cdd8e7c5130c95b144dd8499d0d96..1a470c9e8bcd6794b848f4ef1835db46a4043aa7 100644
--- a/datapack_development/data/scripts/handlers/bypasshandlers/ManorManager.java
+++ b/datapack_development/data/scripts/handlers/bypasshandlers/ManorManager.java
@@ -78,7 +78,7 @@ public class ManorManager implements IBypassHandler
 			if (CastleManorManager.getInstance().isUnderMaintenance())
 			{
 				activeChar.sendPacket(ActionFailed.STATIC_PACKET);
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.THE_MANOR_SYSTEM_IS_CURRENTLY_UNDER_MAINTENANCE));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THE_MANOR_SYSTEM_IS_CURRENTLY_UNDER_MAINTENANCE));
 				return true;
 			}
 			
@@ -100,7 +100,7 @@ public class ManorManager implements IBypassHandler
 						break;
 					if (castleId != castle.getCastleId())
 					{
-						SystemMessage sm = new SystemMessage(SystemMessageId.HERE_YOU_CAN_BUY_ONLY_SEEDS_OF_S1_MANOR);
+						SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.HERE_YOU_CAN_BUY_ONLY_SEEDS_OF_S1_MANOR);
 						sm.addString(manager.getCastle().getName());
 						activeChar.sendPacket(sm);
 					}
@@ -136,7 +136,7 @@ public class ManorManager implements IBypassHandler
 					if (!isCastle)
 						break;
 					if (castle.isNextPeriodApproved())
-						activeChar.sendPacket(new SystemMessage(SystemMessageId.A_MANOR_CANNOT_BE_SET_UP_BETWEEN_6_AM_AND_8_PM));
+						activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.A_MANOR_CANNOT_BE_SET_UP_BETWEEN_6_AM_AND_8_PM));
 					else
 						activeChar.sendPacket(new ExShowSeedSetting(castle.getCastleId()));
 					break;
@@ -144,7 +144,7 @@ public class ManorManager implements IBypassHandler
 					if (!isCastle)
 						break;
 					if (castle.isNextPeriodApproved())
-						activeChar.sendPacket(new SystemMessage(SystemMessageId.A_MANOR_CANNOT_BE_SET_UP_BETWEEN_6_AM_AND_8_PM));
+						activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.A_MANOR_CANNOT_BE_SET_UP_BETWEEN_6_AM_AND_8_PM));
 					else
 						activeChar.sendPacket(new ExShowCropSetting(castle.getCastleId()));
 					break;
diff --git a/datapack_development/data/scripts/handlers/bypasshandlers/Observation.java b/datapack_development/data/scripts/handlers/bypasshandlers/Observation.java
index 391f05608b8af6e1189fefe98f09b9f49e66b0e7..80e9a88dc7fa0378bf50a51d1a3ea60383c806bb 100644
--- a/datapack_development/data/scripts/handlers/bypasshandlers/Observation.java
+++ b/datapack_development/data/scripts/handlers/bypasshandlers/Observation.java
@@ -51,7 +51,7 @@ public class Observation implements IBypassHandler
 				if (SiegeManager.getInstance().getSiege(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())) != null)
 					doObserve(activeChar, (L2Npc)target, val);
 				else
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.ONLY_VIEW_SIEGE));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ONLY_VIEW_SIEGE));
 				return true;
 			}
 			else if (command.toLowerCase().startsWith(COMMANDS[1])) // oracle
diff --git a/datapack_development/data/scripts/handlers/bypasshandlers/OlympiadManagerLink.java b/datapack_development/data/scripts/handlers/bypasshandlers/OlympiadManagerLink.java
index 90d24fea63471ab07ea23970d0e56831345e80fe..a9953aa20c676c5277dead3e5c98e7f33bd2d6c8 100644
--- a/datapack_development/data/scripts/handlers/bypasshandlers/OlympiadManagerLink.java
+++ b/datapack_development/data/scripts/handlers/bypasshandlers/OlympiadManagerLink.java
@@ -167,7 +167,7 @@ public class OlympiadManagerLink implements IBypassHandler
 							iu.addModifiedItem(item);
 							activeChar.sendPacket(iu);
 							
-							SystemMessage sm = new SystemMessage(SystemMessageId.EARNED_ITEM);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.EARNED_ITEM);
 							sm.addItemNumber(passes);
 							sm.addItemName(item);
 							activeChar.sendPacket(sm);
diff --git a/datapack_development/data/scripts/handlers/bypasshandlers/OlympiadObservation.java b/datapack_development/data/scripts/handlers/bypasshandlers/OlympiadObservation.java
index f20d2c7783949649439d7032a0a70086fc57ecee..53235a0549bede9c94dabf0fd59632de921fcda9 100644
--- a/datapack_development/data/scripts/handlers/bypasshandlers/OlympiadObservation.java
+++ b/datapack_development/data/scripts/handlers/bypasshandlers/OlympiadObservation.java
@@ -225,7 +225,7 @@ public class OlympiadObservation implements IBypassHandler
 				{
 					if (OlympiadManager.getInstance().isRegisteredInComp(activeChar))
 					{
-						activeChar.sendPacket(new SystemMessage(SystemMessageId.WHILE_YOU_ARE_ON_THE_WAITING_LIST_YOU_ARE_NOT_ALLOWED_TO_WATCH_THE_GAME));
+						activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.WHILE_YOU_ARE_ON_THE_WAITING_LIST_YOU_ARE_NOT_ALLOWED_TO_WATCH_THE_GAME));
 						return false;
 					}
 					if (!TvTEvent.isInactive() && TvTEvent.isPlayerParticipant(activeChar.getObjectId()))
diff --git a/datapack_development/data/scripts/handlers/bypasshandlers/PrivateWarehouse.java b/datapack_development/data/scripts/handlers/bypasshandlers/PrivateWarehouse.java
index 3acfc8fc39d938539c3e3b56be6bbebf244b2fde..718954f1d5180af53885be3ef88cf4ef9693e965 100644
--- a/datapack_development/data/scripts/handlers/bypasshandlers/PrivateWarehouse.java
+++ b/datapack_development/data/scripts/handlers/bypasshandlers/PrivateWarehouse.java
@@ -101,7 +101,7 @@ public class PrivateWarehouse implements IBypassHandler
 		
 		if (player.getActiveWarehouse().getSize() == 0)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.NO_ITEM_DEPOSITED_IN_WH));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NO_ITEM_DEPOSITED_IN_WH));
 			return;
 		}
 		
diff --git a/datapack_development/data/scripts/handlers/bypasshandlers/QuestLink.java b/datapack_development/data/scripts/handlers/bypasshandlers/QuestLink.java
index ed1c4678c991801fbae2b076d83e80532a094ceb..9f19922af25146d6dd7d643be1d3231119ec26a5 100644
--- a/datapack_development/data/scripts/handlers/bypasshandlers/QuestLink.java
+++ b/datapack_development/data/scripts/handlers/bypasshandlers/QuestLink.java
@@ -129,7 +129,7 @@ public class QuestLink implements IBypassHandler
 		{
 			if ((q.getQuestIntId() >= 1 && q.getQuestIntId() < 20000) && (player.getWeightPenalty() >= 3 || !player.isInventoryUnder80(true)))
 			{
-				player.sendPacket(new SystemMessage(SystemMessageId.INVENTORY_LESS_THAN_80_PERCENT));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INVENTORY_LESS_THAN_80_PERCENT));
 				return;
 			}
 			
@@ -139,7 +139,7 @@ public class QuestLink implements IBypassHandler
 				{
 					if (player.getAllActiveQuests().length > 40) // if too many ongoing quests, don't show window and send message
 					{
-						player.sendPacket(new SystemMessage(SystemMessageId.TOO_MANY_QUESTS));
+						player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.TOO_MANY_QUESTS));
 						return;
 					}
 				}
diff --git a/datapack_development/data/scripts/handlers/bypasshandlers/ReceivePremium.java b/datapack_development/data/scripts/handlers/bypasshandlers/ReceivePremium.java
index 32788b670b2046fcb18b0e8c3ce780d3948a51d5..ad4d80e69fffa500b02c4ea3e2af09219e2e3899 100644
--- a/datapack_development/data/scripts/handlers/bypasshandlers/ReceivePremium.java
+++ b/datapack_development/data/scripts/handlers/bypasshandlers/ReceivePremium.java
@@ -38,7 +38,7 @@ public class ReceivePremium implements IBypassHandler
 		
 		if (activeChar.getPremiumItemList().isEmpty())
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.THERE_ARE_NO_MORE_VITAMIN_ITEMS_TO_BE_FOUND));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THERE_ARE_NO_MORE_VITAMIN_ITEMS_TO_BE_FOUND));
 			return false;
 		}
 		
diff --git a/datapack_development/data/scripts/handlers/bypasshandlers/RemoveDeathPenalty.java b/datapack_development/data/scripts/handlers/bypasshandlers/RemoveDeathPenalty.java
index 6da2861b3c2a65b8f50179a2b0be09b8c3ebb755..e1b7e3bfbf4be1db66a8d3828ce3254723cced62 100644
--- a/datapack_development/data/scripts/handlers/bypasshandlers/RemoveDeathPenalty.java
+++ b/datapack_development/data/scripts/handlers/bypasshandlers/RemoveDeathPenalty.java
@@ -68,7 +68,7 @@ public class RemoveDeathPenalty implements IBypassHandler
 							if (!activeChar.reduceAdena("DeathPenality", pen_clear_price[activeChar.getExpertiseIndex()], npc, true))
 								return false;
 							activeChar.setDeathPenaltyBuffLevel(activeChar.getDeathPenaltyBuffLevel() - 1);
-							activeChar.sendPacket(new SystemMessage(SystemMessageId.DEATH_PENALTY_LIFTED));
+							activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.DEATH_PENALTY_LIFTED));
 							activeChar.sendPacket(new EtcStatusUpdate(activeChar));
 							return true;
 						}
diff --git a/datapack_development/data/scripts/handlers/chathandlers/ChatPetition.java b/datapack_development/data/scripts/handlers/chathandlers/ChatPetition.java
index b20311591fbbb70c7b9f8c4e4e47fbaa0cb8909e..f98e419fb09a575e8a665f1ddf8192158579608f 100644
--- a/datapack_development/data/scripts/handlers/chathandlers/ChatPetition.java
+++ b/datapack_development/data/scripts/handlers/chathandlers/ChatPetition.java
@@ -41,7 +41,7 @@ public class ChatPetition implements IChatHandler
 	{
 		if (!PetitionManager.getInstance().isPlayerInConsultation(activeChar))
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.YOU_ARE_NOT_IN_PETITION_CHAT));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_NOT_IN_PETITION_CHAT));
 			return;
 		}
 		
diff --git a/datapack_development/data/scripts/handlers/chathandlers/ChatTell.java b/datapack_development/data/scripts/handlers/chathandlers/ChatTell.java
index c61dbe9809c92dcb68ba79579730b26e953c1587..83a495308b69f5b11f29b2cd03595541dd479e6b 100644
--- a/datapack_development/data/scripts/handlers/chathandlers/ChatTell.java
+++ b/datapack_development/data/scripts/handlers/chathandlers/ChatTell.java
@@ -43,13 +43,13 @@ public class ChatTell implements IChatHandler
 	{
 		if (activeChar.isChatBanned())
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.CHATTING_PROHIBITED));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CHATTING_PROHIBITED));
 			return;
 		}
 		
 		if (Config.JAIL_DISABLE_CHAT && activeChar.isInJail() && !activeChar.isGM())
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.CHATTING_PROHIBITED));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CHATTING_PROHIBITED));
 			return;
 		}
 		
@@ -71,7 +71,7 @@ public class ChatTell implements IChatHandler
 			}
 			if (receiver.isChatBanned())
 			{
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.THE_PERSON_IS_IN_MESSAGE_REFUSAL_MODE));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THE_PERSON_IS_IN_MESSAGE_REFUSAL_MODE));
 				return;
 			}
 			if (receiver.getClient() == null || receiver.getClient().isDetached())
@@ -85,10 +85,10 @@ public class ChatTell implements IChatHandler
 				activeChar.sendPacket(new CreatureSay(activeChar.getObjectId(), type, "->" + receiver.getName(), text));
 			}
 			else
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.THE_PERSON_IS_IN_MESSAGE_REFUSAL_MODE));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THE_PERSON_IS_IN_MESSAGE_REFUSAL_MODE));
 		}
 		else
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_NOT_FOUND_IN_THE_GAME));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.TARGET_IS_NOT_FOUND_IN_THE_GAME));
 	}
 	
 	/**
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/BeastSoulShot.java b/datapack_development/data/scripts/handlers/itemhandlers/BeastSoulShot.java
index c717cc346cf58fda6d3b9257ec1975d3fdeec249..9af37cf48c88cfd973e3a087c62db2f9e4f19c1d 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/BeastSoulShot.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/BeastSoulShot.java
@@ -45,7 +45,7 @@ public class BeastSoulShot implements IItemHandler
 		if (playable instanceof L2Summon)
 		{
 			activeOwner = ((L2Summon) playable).getOwner();
-			activeOwner.sendPacket(new SystemMessage(SystemMessageId.PET_CANNOT_USE_ITEM));
+			activeOwner.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.PET_CANNOT_USE_ITEM));
 			return;
 		}
 		else if (playable instanceof L2PcInstance)
@@ -57,13 +57,13 @@ public class BeastSoulShot implements IItemHandler
 		
 		if (activePet == null)
 		{
-			activeOwner.sendPacket(new SystemMessage(SystemMessageId.PETS_ARE_NOT_AVAILABLE_AT_THIS_TIME));
+			activeOwner.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.PETS_ARE_NOT_AVAILABLE_AT_THIS_TIME));
 			return;
 		}
 		
 		if (activePet.isDead())
 		{
-			activeOwner.sendPacket(new SystemMessage(SystemMessageId.SOULSHOTS_AND_SPIRITSHOTS_ARE_NOT_AVAILABLE_FOR_A_DEAD_PET));
+			activeOwner.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SOULSHOTS_AND_SPIRITSHOTS_ARE_NOT_AVAILABLE_FOR_A_DEAD_PET));
 			return;
 		}
 		
@@ -75,7 +75,7 @@ public class BeastSoulShot implements IItemHandler
 		{
 			// Not enough Soulshots to use.
 			if (!activeOwner.disableAutoShot(itemId))
-				activeOwner.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_SOULSHOTS_FOR_PET));
+				activeOwner.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_ENOUGH_SOULSHOTS_FOR_PET));
 			return;
 		}
 		
@@ -105,12 +105,12 @@ public class BeastSoulShot implements IItemHandler
 		if (!activeOwner.destroyItemWithoutTrace("Consume", item.getObjectId(), shotConsumption, null, false))
 		{
 			if (!activeOwner.disableAutoShot(itemId))
-				activeOwner.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_SOULSHOTS_FOR_PET));
+				activeOwner.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_ENOUGH_SOULSHOTS_FOR_PET));
 			return;
 		}
 		
 		// Pet uses the power of spirit.
-		activeOwner.sendPacket(new SystemMessage(SystemMessageId.PET_USE_SPIRITSHOT));
+		activeOwner.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.PET_USE_SPIRITSHOT));
 		
 		Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(activePet, activePet, itemId == 6645 ? 2033 : 22036, 1, 0, 0), 360000/*600*/);
 	}
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/BeastSpice.java b/datapack_development/data/scripts/handlers/itemhandlers/BeastSpice.java
index 231f5e3cc04c6bdeda84466d6112a98d536b80e6..65fbf26f0aac90d0ac6c400905591fa9e69dd872 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/BeastSpice.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/BeastSpice.java
@@ -39,7 +39,7 @@ public class BeastSpice implements IItemHandler
 		
 		if (!(activeChar.getTarget() instanceof L2FeedableBeastInstance))
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			return;
 		}
 		
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/BeastSpiritShot.java b/datapack_development/data/scripts/handlers/itemhandlers/BeastSpiritShot.java
index e930be206652433be64eafa120340d796cdb35c8..d36de351e4eadaabb9a0959b770e3b45b9ff30ad 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/BeastSpiritShot.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/BeastSpiritShot.java
@@ -45,7 +45,7 @@ public class BeastSpiritShot implements IItemHandler
 		
 		if (playable instanceof L2Summon)
 		{
-			activeOwner.sendPacket(new SystemMessage(SystemMessageId.PET_CANNOT_USE_ITEM));
+			activeOwner.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.PET_CANNOT_USE_ITEM));
 			return;
 		}
 		
@@ -53,13 +53,13 @@ public class BeastSpiritShot implements IItemHandler
 		
 		if (activePet == null)
 		{
-			activeOwner.sendPacket(new SystemMessage(SystemMessageId.PETS_ARE_NOT_AVAILABLE_AT_THIS_TIME));
+			activeOwner.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.PETS_ARE_NOT_AVAILABLE_AT_THIS_TIME));
 			return;
 		}
 		
 		if (activePet.isDead())
 		{
-			activeOwner.sendPacket(new SystemMessage(SystemMessageId.SOULSHOTS_AND_SPIRITSHOTS_ARE_NOT_AVAILABLE_FOR_A_DEAD_PET));
+			activeOwner.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SOULSHOTS_AND_SPIRITSHOTS_ARE_NOT_AVAILABLE_FOR_A_DEAD_PET));
 			return;
 		}
 		
@@ -72,7 +72,7 @@ public class BeastSpiritShot implements IItemHandler
 		{
 			// Not enough SpiritShots to use.
 			if (!activeOwner.disableAutoShot(itemId))
-				activeOwner.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_SPIRITHOTS_FOR_PET));
+				activeOwner.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_ENOUGH_SPIRITHOTS_FOR_PET));
 			return;
 		}
 		
@@ -108,12 +108,12 @@ public class BeastSpiritShot implements IItemHandler
 		if (!activeOwner.destroyItemWithoutTrace("Consume", item.getObjectId(), shotConsumption, null, false))
 		{
 			if (!activeOwner.disableAutoShot(itemId))
-				activeOwner.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_SPIRITHOTS_FOR_PET));
+				activeOwner.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_ENOUGH_SPIRITHOTS_FOR_PET));
 			return;
 		}
 		
 		// Pet uses the power of spirit.
-		activeOwner.sendPacket(new SystemMessage(SystemMessageId.PET_USE_SPIRITSHOT));
+		activeOwner.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.PET_USE_SPIRITSHOT));
 		int skillId = 0;
 		switch (itemId)
 		{
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/BlessedSpiritShot.java b/datapack_development/data/scripts/handlers/itemhandlers/BlessedSpiritShot.java
index c1f1c679fb80fa2716afcf10fd5e521b1d60df86..89f778fc3160eda5696e3bd2012a895be7211dd8 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/BlessedSpiritShot.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/BlessedSpiritShot.java
@@ -51,7 +51,7 @@ public class BlessedSpiritShot implements IItemHandler
 		if (weaponInst == null || weaponItem == null || weaponItem.getSpiritShotCount() == 0)
 		{
 			if (!activeChar.getAutoSoulShot().contains(itemId))
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.CANNOT_USE_SPIRITSHOTS));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_USE_SPIRITSHOTS));
 			return;
 		}
 		
@@ -97,7 +97,7 @@ public class BlessedSpiritShot implements IItemHandler
 		if (!gradeCheck)
 		{
 			if (!activeChar.getAutoSoulShot().contains(itemId))
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.SPIRITSHOTS_GRADE_MISMATCH));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SPIRITSHOTS_GRADE_MISMATCH));
 			
 			return;
 		}
@@ -107,7 +107,7 @@ public class BlessedSpiritShot implements IItemHandler
 		if (!activeChar.destroyItemWithoutTrace("Consume", item.getObjectId(), weaponItem.getSpiritShotCount(), null, false))
 		{
 			if (!activeChar.disableAutoShot(itemId))
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_SPIRITSHOTS));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_ENOUGH_SPIRITSHOTS));
 			return;
 		}
 		
@@ -115,7 +115,7 @@ public class BlessedSpiritShot implements IItemHandler
 		weaponInst.setChargedSpiritshot(L2ItemInstance.CHARGED_BLESSED_SPIRITSHOT);
 		
 		// Send message to client
-		activeChar.sendPacket(new SystemMessage(SystemMessageId.ENABLED_SPIRITSHOT));
+		activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ENABLED_SPIRITSHOT));
 		int skillId = 0;
 		switch (itemId)
 		{
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/Elixir.java b/datapack_development/data/scripts/handlers/itemhandlers/Elixir.java
index 4e6b14c9e17b57d3e54b22f6bf33a54bfcbca3c0..aa23ea770bc12bcff049ee9207643c772ec7afb7 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/Elixir.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/Elixir.java
@@ -31,7 +31,7 @@ public class Elixir extends ItemSkills
 	{
 		if (!(playable instanceof L2PcInstance))
 		{
-			playable.sendPacket(new SystemMessage(SystemMessageId.ITEM_NOT_FOR_PETS));
+			playable.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ITEM_NOT_FOR_PETS));
 			return;
 		}
 		super.useItem(playable, item, forceUse);
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/EnchantAttribute.java b/datapack_development/data/scripts/handlers/itemhandlers/EnchantAttribute.java
index bb47e96706af420315a74534eb317725ffa2e0ea..fb618f89853839c1926f4dd96f2b7948a0fa7250 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/EnchantAttribute.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/EnchantAttribute.java
@@ -35,7 +35,7 @@ public class EnchantAttribute implements IItemHandler
 		
 		if (activeChar.isEnchanting())
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.ENCHANTMENT_ALREADY_IN_PROGRESS));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ENCHANTMENT_ALREADY_IN_PROGRESS));
 			return;
 		}
 		
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/EnchantScrolls.java b/datapack_development/data/scripts/handlers/itemhandlers/EnchantScrolls.java
index 18c662608043773b2c7a46144d137bb1f217442e..440deba75e4124cc812a8bc505304bf0e818af78 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/EnchantScrolls.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/EnchantScrolls.java
@@ -39,7 +39,7 @@ public class EnchantScrolls implements IItemHandler
 		
 		if (activeChar.isEnchanting())
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.ENCHANTMENT_ALREADY_IN_PROGRESS));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ENCHANTMENT_ALREADY_IN_PROGRESS));
 			return;
 		}
 		
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/EnergyStarStone.java b/datapack_development/data/scripts/handlers/itemhandlers/EnergyStarStone.java
index 57abeab58524919f45f0718d087534ee3eeba6b0..ab5c06e394b13d753b3abbf2f6e0652e947f4cf5 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/EnergyStarStone.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/EnergyStarStone.java
@@ -40,7 +40,7 @@ public class EnergyStarStone extends ItemSkills
 				|| !(ship instanceof L2ControllableAirShipInstance)
 				|| ship.getFuel() >= ship.getMaxFuel())
 		{
-			playable.sendPacket(new SystemMessage(SystemMessageId.S1_CANNOT_BE_USED).addItemName(item));
+			playable.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED).addItemName(item));
 			playable.sendPacket(ActionFailed.STATIC_PACKET);
 			return;
 		}
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/EventItem.java b/datapack_development/data/scripts/handlers/itemhandlers/EventItem.java
index 1dd837b42a25bbcf2414c496973f61e470805d6b..95fe6752fde509636812795d7660efe8cb058d87 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/EventItem.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/EventItem.java
@@ -50,7 +50,7 @@ public class EventItem implements IItemHandler
 		final int blockCheckerArena = castor.getBlockCheckerArena();
 		if(blockCheckerArena == -1)
 		{
-			SystemMessage msg = new SystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
+			SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
 			msg.addItemName(item);
 			castor.sendPacket(msg);
 			return;
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/ExtractableItems.java b/datapack_development/data/scripts/handlers/itemhandlers/ExtractableItems.java
index 3cf07096ec81d0c03e54b9ac0e481916432aabf4..e476a76063aff079685ffd108707f1d3cade55d2 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/ExtractableItems.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/ExtractableItems.java
@@ -91,7 +91,7 @@ public class ExtractableItems implements IItemHandler
 		
 		if (!created)
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.NOTHING_INSIDE_THAT));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOTHING_INSIDE_THAT));
 		}
 	}
 }
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/FishShots.java b/datapack_development/data/scripts/handlers/itemhandlers/FishShots.java
index 26c01cf6f3915803f33e800dc004b9ef494482bf..9dc139444a800cb9535097179f5c5f89b233f0c1 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/FishShots.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/FishShots.java
@@ -66,7 +66,7 @@ public class FishShots implements IItemHandler
 				|| (grade == L2Item.CRYSTAL_A && FishshotId != 6539) || (FishshotId != 6540 && grade == L2Item.CRYSTAL_S ))
 		{
 			//1479 - This fishing shot is not fit for the fishing pole crystal.
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.WRONG_FISHINGSHOT_GRADE));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.WRONG_FISHINGSHOT_GRADE));
 			return;
 		}
 		
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/Harvester.java b/datapack_development/data/scripts/handlers/itemhandlers/Harvester.java
index e362106af7db2388f3b67fa2b9e17d980b207ab7..9775b93ad32ea06e2ca7a8841b53f5306855a58c 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/Harvester.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/Harvester.java
@@ -50,7 +50,7 @@ public class Harvester implements IItemHandler
 		
 		if (!(_activeChar.getTarget() instanceof L2MonsterInstance))
 		{
-			_activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			_activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			_activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 			return;
 		}
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/ItemSkills.java b/datapack_development/data/scripts/handlers/itemhandlers/ItemSkills.java
index 2a5c15c3f2f148c1d05762d38ed47ea6006a5c1a..71149c3469c6e741dd14b1bb87890a663f962828 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/ItemSkills.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/ItemSkills.java
@@ -35,7 +35,7 @@ public class ItemSkills extends ItemSkillsTemplate
 		final L2PcInstance activeChar = playable.getActingPlayer();
 		if (activeChar != null && activeChar.isInOlympiadMode())
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.THIS_ITEM_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THIS_ITEM_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT));
 			return;
 		}
 		
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/ItemSkillsTemplate.java b/datapack_development/data/scripts/handlers/itemhandlers/ItemSkillsTemplate.java
index 9ebc171aa6b78337cf9387fded540b6817297c76..3ce8898ad957da662bc143dff12e9860ced19bfa 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/ItemSkillsTemplate.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/ItemSkillsTemplate.java
@@ -63,7 +63,7 @@ public class ItemSkillsTemplate implements IItemHandler
 		// pets can use items only when they are tradeable
 		if (isPet && !item.isTradeable())
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.ITEM_NOT_FOR_PETS));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ITEM_NOT_FOR_PETS));
 			return;
 		}
 		
@@ -102,7 +102,7 @@ public class ItemSkillsTemplate implements IItemHandler
 					{
 						if (!playable.destroyItem("Consume", item.getObjectId(), itemSkill.getItemConsume(), null, false))
 						{
-							activeChar.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS));
+							activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS));
 							return;
 						}
 					}
@@ -110,7 +110,7 @@ public class ItemSkillsTemplate implements IItemHandler
 					// send message to owner
 					if (isPet)
 					{
-						SystemMessage sm = new SystemMessage(SystemMessageId.PET_USES_S1);
+						SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.PET_USES_S1);
 						sm.addString(itemSkill.getName());
 						activeChar.sendPacket(sm);
 					}
@@ -190,7 +190,7 @@ public class ItemSkillsTemplate implements IItemHandler
 			final int seconds = (int)(remainingTime / 1000 % 60);
 			if (hours > 0)
 			{
-				sm = new SystemMessage(SystemMessageId.S2_HOURS_S3_MINUTES_S4_SECONDS_REMAINING_FOR_REUSE_S1);
+				sm = SystemMessage.getSystemMessage(SystemMessageId.S2_HOURS_S3_MINUTES_S4_SECONDS_REMAINING_FOR_REUSE_S1);
 				if (skill.isPotion())
 					sm.addItemName(item);
 				else
@@ -200,7 +200,7 @@ public class ItemSkillsTemplate implements IItemHandler
 			}
 			else if (minutes > 0)
 			{
-				sm = new SystemMessage(SystemMessageId.S2_MINUTES_S3_SECONDS_REMAINING_FOR_REUSE_S1);
+				sm = SystemMessage.getSystemMessage(SystemMessageId.S2_MINUTES_S3_SECONDS_REMAINING_FOR_REUSE_S1);
 				if (skill.isPotion())
 					sm.addItemName(item);
 				else
@@ -209,7 +209,7 @@ public class ItemSkillsTemplate implements IItemHandler
 			}
 			else
 			{
-				sm = new SystemMessage(SystemMessageId.S2_SECONDS_REMAINING_FOR_REUSE_S1);
+				sm = SystemMessage.getSystemMessage(SystemMessageId.S2_SECONDS_REMAINING_FOR_REUSE_S1);
 				if (skill.isPotion())
 					sm.addItemName(item);
 				else
@@ -229,7 +229,7 @@ public class ItemSkillsTemplate implements IItemHandler
 		}
 		else
 		{
-			sm = new SystemMessage(SystemMessageId.S1_PREPARED_FOR_REUSE);
+			sm = SystemMessage.getSystemMessage(SystemMessageId.S1_PREPARED_FOR_REUSE);
 			sm.addItemName(item);
 		}
 		player.sendPacket(sm);
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/ManaPotion.java b/datapack_development/data/scripts/handlers/itemhandlers/ManaPotion.java
index f42a20425a6a6a1a461f375f7a37aa4196c3c6b4..b9216b4ec2eff95531f4252fa104d68975531f7d 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/ManaPotion.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/ManaPotion.java
@@ -31,7 +31,7 @@ public class ManaPotion extends ItemSkills
 	{
 		if (!Config.L2JMOD_ENABLE_MANA_POTIONS_SUPPORT)
 		{
-			playable.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
+			playable.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOTHING_HAPPENED));
 			return;
 		}
 		super.useItem(playable, item, forceUse);
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/MercTicket.java b/datapack_development/data/scripts/handlers/itemhandlers/MercTicket.java
index 5b3d2940db9f26b82a20dc1d454e0efc014456db..48b124e7b85b240530180dc33fe8b1f9d83f71af 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/MercTicket.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/MercTicket.java
@@ -51,19 +51,19 @@ public class MercTicket implements IItemHandler
 		//add check that certain tickets can only be placed in certain castles
 		if (MercTicketManager.getInstance().getTicketCastleId(itemId) != castleId)
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.MERCENARIES_CANNOT_BE_POSITIONED_HERE));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.MERCENARIES_CANNOT_BE_POSITIONED_HERE));
 			return;
 		}
 		
 		if (!activeChar.isCastleLord(castleId))
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_AUTHORITY_TO_POSITION_MERCENARIES));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_AUTHORITY_TO_POSITION_MERCENARIES));
 			return;
 		}
 		
 		if (castle.getSiege().getIsInProgress())
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.THIS_MERCENARY_CANNOT_BE_POSITIONED_ANYMORE));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THIS_MERCENARY_CANNOT_BE_POSITIONED_ANYMORE));
 			return;
 		}
 		
@@ -71,7 +71,7 @@ public class MercTicket implements IItemHandler
 		if (SevenSigns.getInstance().getCurrentPeriod() != SevenSigns.PERIOD_SEAL_VALIDATION)
 		{
 			//_log.warning("Someone has tried to spawn a guardian during Quest Event Period of The Seven Signs.");
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.THIS_MERCENARY_CANNOT_BE_POSITIONED_ANYMORE));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THIS_MERCENARY_CANNOT_BE_POSITIONED_ANYMORE));
 			return;
 		}
 		//Checking the Seal of Strife status
@@ -81,7 +81,7 @@ public class MercTicket implements IItemHandler
 				if (SevenSigns.getInstance().checkIsDawnPostingTicket(itemId))
 				{
 					//_log.warning("Someone has tried to spawn a Dawn Mercenary though the Seal of Strife is not controlled by anyone.");
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.THIS_MERCENARY_CANNOT_BE_POSITIONED_ANYMORE));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THIS_MERCENARY_CANNOT_BE_POSITIONED_ANYMORE));
 					return;
 				}
 				break;
@@ -89,7 +89,7 @@ public class MercTicket implements IItemHandler
 				if (!SevenSigns.getInstance().checkIsRookiePostingTicket(itemId))
 				{
 					//_log.warning("Someone has tried to spawn a non-Rookie Mercenary though the Seal of Strife is controlled by Revolutionaries of Dusk.");
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.THIS_MERCENARY_CANNOT_BE_POSITIONED_ANYMORE));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THIS_MERCENARY_CANNOT_BE_POSITIONED_ANYMORE));
 					return;
 				}
 				break;
@@ -99,23 +99,23 @@ public class MercTicket implements IItemHandler
 		
 		if(MercTicketManager.getInstance().isAtCasleLimit(item.getItemId()))
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.THIS_MERCENARY_CANNOT_BE_POSITIONED_ANYMORE));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THIS_MERCENARY_CANNOT_BE_POSITIONED_ANYMORE));
 			return;
 		}
 		
 		if (MercTicketManager.getInstance().isAtTypeLimit(item.getItemId()))
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.THIS_MERCENARY_CANNOT_BE_POSITIONED_ANYMORE));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THIS_MERCENARY_CANNOT_BE_POSITIONED_ANYMORE));
 			return;
 		}
 		if (MercTicketManager.getInstance().isTooCloseToAnotherTicket(activeChar.getX(), activeChar.getY(), activeChar.getZ()))
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.POSITIONING_CANNOT_BE_DONE_BECAUSE_DISTANCE_BETWEEN_MERCENARIES_TOO_SHORT));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.POSITIONING_CANNOT_BE_DONE_BECAUSE_DISTANCE_BETWEEN_MERCENARIES_TOO_SHORT));
 			return;
 		}
 		
 		MercTicketManager.getInstance().addTicket(item.getItemId(), activeChar, null);
 		activeChar.destroyItem("Consume", item.getObjectId(), 1, null, false); // Remove item from char's inventory
-		activeChar.sendPacket(new SystemMessage(SystemMessageId.PLACE_CURRENT_LOCATION_DIRECTION).addItemName(item));
+		activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.PLACE_CURRENT_LOCATION_DIRECTION).addItemName(item));
 	}
 }
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/PaganKeys.java b/datapack_development/data/scripts/handlers/itemhandlers/PaganKeys.java
index a6f9e14027045ed9359bb069c13dd93dc7d541e8..9997f0c9e1e38a0435211ddb48f5d0971cf43dfc 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/PaganKeys.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/PaganKeys.java
@@ -47,7 +47,7 @@ public class PaganKeys implements IItemHandler
 		
 		if (!(target instanceof L2DoorInstance))
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 			return;
 		}
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/PetFood.java b/datapack_development/data/scripts/handlers/itemhandlers/PetFood.java
index 9b9ca807830c3058ce77d3573f2c0bb204c63555..6b6ecf0f03ad2c69643f9e67319b29d331da13e1 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/PetFood.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/PetFood.java
@@ -82,7 +82,7 @@ public class PetFood implements IItemHandler
 					((L2PetInstance)activeChar).setCurrentFed(((L2PetInstance)activeChar).getCurrentFed() + (skill.getFeed() * Config.PET_FOOD_RATE));
 					((L2PetInstance)activeChar).broadcastStatusUpdate();
 					if (((L2PetInstance)activeChar).getCurrentFed() < (((L2PetInstance)activeChar).getPetData().getHungry_limit() / 100f * ((L2PetInstance)activeChar).getPetLevelData().getPetMaxFeed()))
-						((L2PetInstance)activeChar).getOwner().sendPacket(new SystemMessage(SystemMessageId.YOUR_PET_ATE_A_LITTLE_BUT_IS_STILL_HUNGRY));
+						((L2PetInstance)activeChar).getOwner().sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOUR_PET_ATE_A_LITTLE_BUT_IS_STILL_HUNGRY));
 					return true;
 				}
 			}
@@ -104,7 +104,7 @@ public class PetFood implements IItemHandler
 					}
 					else
 					{
-						SystemMessage sm = new SystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
+						SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
 						sm.addItemName(item);
 						activeChar.sendPacket(sm);
 						return false;
@@ -112,7 +112,7 @@ public class PetFood implements IItemHandler
 				}
 				else
 				{
-					SystemMessage sm = new SystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
 					sm.addItemName(item);
 					activeChar.sendPacket(sm);
 				}
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/Recipes.java b/datapack_development/data/scripts/handlers/itemhandlers/Recipes.java
index a836518ba9ff280dcb457163424b0ff65a859f65..5227e76cd95776b6919165745c6ea3ca4678bded 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/Recipes.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/Recipes.java
@@ -44,7 +44,7 @@ public class Recipes implements IItemHandler
 		if (rp == null)
 			return;
 		if (activeChar.hasRecipeList(rp.getId()))
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.RECIPE_ALREADY_REGISTERED));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.RECIPE_ALREADY_REGISTERED));
 		else
 		{
 			if (rp.isDwarvenRecipe())
@@ -54,12 +54,12 @@ public class Recipes implements IItemHandler
 					if (rp.getLevel() > activeChar.getDwarvenCraft())
 					{
 						//can't add recipe, becouse create item level too low
-						activeChar.sendPacket(new SystemMessage(SystemMessageId.CREATE_LVL_TOO_LOW_TO_REGISTER));
+						activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CREATE_LVL_TOO_LOW_TO_REGISTER));
 					}
 					else if (activeChar.getDwarvenRecipeBook().length >= activeChar.getDwarfRecipeLimit())
 					{
 						//Up to $s1 recipes can be registered.
-						SystemMessage sm = new SystemMessage(SystemMessageId.UP_TO_S1_RECIPES_CAN_REGISTER);
+						SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.UP_TO_S1_RECIPES_CAN_REGISTER);
 						sm.addNumber(activeChar.getDwarfRecipeLimit());
 						activeChar.sendPacket(sm);
 					}
@@ -67,11 +67,11 @@ public class Recipes implements IItemHandler
 					{
 						activeChar.registerDwarvenRecipeList(rp, true);
 						activeChar.destroyItem("Consume", item.getObjectId(), 1, null, false);
-						activeChar.sendPacket(new SystemMessage(SystemMessageId.S1_ADDED).addItemName(item));
+						activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_ADDED).addItemName(item));
 					}
 				}
 				else
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.CANT_REGISTER_NO_ABILITY_TO_CRAFT));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANT_REGISTER_NO_ABILITY_TO_CRAFT));
 			}
 			else
 			{
@@ -80,12 +80,12 @@ public class Recipes implements IItemHandler
 					if (rp.getLevel() > activeChar.getCommonCraft())
 					{
 						//can't add recipe, becouse create item level too low
-						activeChar.sendPacket(new SystemMessage(SystemMessageId.CREATE_LVL_TOO_LOW_TO_REGISTER));
+						activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CREATE_LVL_TOO_LOW_TO_REGISTER));
 					}
 					else if (activeChar.getCommonRecipeBook().length >= activeChar.getCommonRecipeLimit())
 					{
 						//Up to $s1 recipes can be registered.
-						SystemMessage sm = new SystemMessage(SystemMessageId.UP_TO_S1_RECIPES_CAN_REGISTER);
+						SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.UP_TO_S1_RECIPES_CAN_REGISTER);
 						sm.addNumber(activeChar.getCommonRecipeLimit());
 						activeChar.sendPacket(sm);
 					}
@@ -93,11 +93,11 @@ public class Recipes implements IItemHandler
 					{
 						activeChar.registerCommonRecipeList(rp, true);
 						activeChar.destroyItem("Consume", item.getObjectId(), 1, null, false);
-						activeChar.sendPacket(new SystemMessage(SystemMessageId.S1_ADDED).addItemName(item));
+						activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_ADDED).addItemName(item));
 					}
 				}
 				else
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.CANT_REGISTER_NO_ABILITY_TO_CRAFT));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANT_REGISTER_NO_ABILITY_TO_CRAFT));
 			}
 		}
 	}
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/RollingDice.java b/datapack_development/data/scripts/handlers/itemhandlers/RollingDice.java
index 5f3669278565cee24877c2cb756abac3cca4404a..d2e14b233ad446e3015390bcc1e79eda75ca5f18 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/RollingDice.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/RollingDice.java
@@ -47,7 +47,7 @@ public class RollingDice implements IItemHandler
 		
 		if (activeChar.isInOlympiadMode())
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.THIS_ITEM_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THIS_ITEM_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT));
 			return;
 		}
 		
@@ -56,13 +56,13 @@ public class RollingDice implements IItemHandler
 			int number = rollDice(activeChar);
 			if (number == 0)
 			{
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.YOU_MAY_NOT_THROW_THE_DICE_AT_THIS_TIME_TRY_AGAIN_LATER));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_MAY_NOT_THROW_THE_DICE_AT_THIS_TIME_TRY_AGAIN_LATER));
 				return;
 			}
 			
 			Broadcast.toSelfAndKnownPlayers(activeChar, new Dice(activeChar.getObjectId(), item.getItemId(), number, activeChar.getX() - 30, activeChar.getY() - 30, activeChar.getZ()));
 			
-			SystemMessage sm = new SystemMessage(SystemMessageId.C1_ROLLED_S2);
+			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_ROLLED_S2);
 			sm.addString(activeChar.getName());
 			sm.addNumber(number);
 			
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/ScrollOfResurrection.java b/datapack_development/data/scripts/handlers/itemhandlers/ScrollOfResurrection.java
index 987db14dde318b76f925bc696041623c9747a5d6..d8a8f404910ccd6a8038db81166f53dca031cb58 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/ScrollOfResurrection.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/ScrollOfResurrection.java
@@ -47,7 +47,7 @@ public class ScrollOfResurrection implements IItemHandler
 		L2PcInstance activeChar = (L2PcInstance) playable;
 		if (activeChar.isSitting())
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.CANT_MOVE_SITTING));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANT_MOVE_SITTING));
 			return;
 		}
 		if (activeChar.isMovementDisabled())
@@ -87,7 +87,7 @@ public class ScrollOfResurrection implements IItemHandler
 				if (castle != null && castle.getSiege().getIsInProgress())
 				{
 					condGood = false;
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.CANNOT_BE_RESURRECTED_DURING_SIEGE));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_BE_RESURRECTED_DURING_SIEGE));
 				}
 				
 				if (targetPet != null)
@@ -97,9 +97,9 @@ public class ScrollOfResurrection implements IItemHandler
 						if (targetPet.getOwner().isReviveRequested())
 						{
 							if (targetPet.getOwner().isRevivingPet())
-								activeChar.sendPacket(new SystemMessage(SystemMessageId.RES_HAS_ALREADY_BEEN_PROPOSED)); // Resurrection is already been proposed.
+								activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.RES_HAS_ALREADY_BEEN_PROPOSED)); // Resurrection is already been proposed.
 							else
-								activeChar.sendPacket(new SystemMessage(SystemMessageId.CANNOT_RES_PET2)); // A pet cannot be resurrected while it's owner is in the process of resurrecting.
+								activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_RES_PET2)); // A pet cannot be resurrected while it's owner is in the process of resurrecting.
 							condGood = false;
 						}
 					}
@@ -114,9 +114,9 @@ public class ScrollOfResurrection implements IItemHandler
 					if (targetPlayer.isReviveRequested())
 					{
 						if (targetPlayer.isRevivingPet())
-							activeChar.sendPacket(new SystemMessage(SystemMessageId.MASTER_CANNOT_RES)); // While a pet is attempting to resurrect, it cannot help in resurrecting its master.
+							activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.MASTER_CANNOT_RES)); // While a pet is attempting to resurrect, it cannot help in resurrecting its master.
 						else
-							activeChar.sendPacket(new SystemMessage(SystemMessageId.RES_HAS_ALREADY_BEEN_PROPOSED)); // Resurrection is already been proposed.
+							activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.RES_HAS_ALREADY_BEEN_PROPOSED)); // Resurrection is already been proposed.
 						condGood = false;
 					}
 					else if (petScroll)
@@ -164,7 +164,7 @@ public class ScrollOfResurrection implements IItemHandler
 						L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLevel);
 						activeChar.useMagic(skill, true, true);
 						
-						SystemMessage sm = new SystemMessage(SystemMessageId.S1_DISAPPEARED);
+						SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISAPPEARED);
 						sm.addItemName(item);
 						activeChar.sendPacket(sm);
 					}
@@ -173,7 +173,7 @@ public class ScrollOfResurrection implements IItemHandler
 		}
 		else
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 		}
 	}
 }
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/Seed.java b/datapack_development/data/scripts/handlers/itemhandlers/Seed.java
index 32611b484adb5d6fc3c5225c823c368afe444e9f..cd2d9f0ed8021943eafc502ca7f646daae7005a9 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/Seed.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/Seed.java
@@ -52,13 +52,13 @@ public class Seed implements IItemHandler
 		final L2Object tgt = playable.getTarget();
 		if (!(tgt instanceof L2Npc))
 		{
-			playable.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			playable.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			playable.sendPacket(ActionFailed.STATIC_PACKET);
 			return;
 		}
 		if (!(tgt instanceof L2MonsterInstance) || tgt instanceof L2ChestInstance || ((L2Character)tgt).isRaid())
 		{
-			playable.sendPacket(new SystemMessage(SystemMessageId.THE_TARGET_IS_UNAVAILABLE_FOR_SEEDING));
+			playable.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THE_TARGET_IS_UNAVAILABLE_FOR_SEEDING));
 			playable.sendPacket(ActionFailed.STATIC_PACKET);
 			return;
 		}
@@ -66,7 +66,7 @@ public class Seed implements IItemHandler
 		final L2MonsterInstance target = (L2MonsterInstance)tgt;
 		if (target.isDead())
 		{
-			playable.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+			playable.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 			playable.sendPacket(ActionFailed.STATIC_PACKET);
 			return;
 		}
@@ -93,7 +93,7 @@ public class Seed implements IItemHandler
 			
 		}
 		else
-			playable.sendPacket(new SystemMessage(SystemMessageId.THIS_SEED_MAY_NOT_BE_SOWN_HERE));
+			playable.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THIS_SEED_MAY_NOT_BE_SOWN_HERE));
 	}
 	
 	/**
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/SoulShots.java b/datapack_development/data/scripts/handlers/itemhandlers/SoulShots.java
index 4ff471b14bbf3e5a9b600e1e57ea4914bcfbe876..3af90159e74846b90067611c193efdd20d51c26e 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/SoulShots.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/SoulShots.java
@@ -52,7 +52,7 @@ public class SoulShots implements IItemHandler
 		if (weaponInst == null || weaponItem.getSoulShotCount() == 0)
 		{
 			if (!activeChar.getAutoSoulShot().contains(itemId))
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.CANNOT_USE_SOULSHOTS));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_USE_SOULSHOTS));
 			return;
 		}
 		
@@ -93,7 +93,7 @@ public class SoulShots implements IItemHandler
 		if (!gradeCheck)
 		{
 			if (!activeChar.getAutoSoulShot().contains(itemId))
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.SOULSHOTS_GRADE_MISMATCH));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SOULSHOTS_GRADE_MISMATCH));
 			
 			return;
 		}
@@ -112,7 +112,7 @@ public class SoulShots implements IItemHandler
 			if (!activeChar.destroyItemWithoutTrace("Consume", item.getObjectId(), SSCount, null, false))
 			{
 				if (!activeChar.disableAutoShot(itemId))
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_SOULSHOTS));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_ENOUGH_SOULSHOTS));
 				return;
 			}
 			
@@ -163,7 +163,7 @@ public class SoulShots implements IItemHandler
 				
 		}
 		// Send message to client
-		activeChar.sendPacket(new SystemMessage(SystemMessageId.ENABLED_SOULSHOT));
+		activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ENABLED_SOULSHOT));
 		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skillId, 1, 0, 0), 360000);
 	}
 }
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/SpiritShot.java b/datapack_development/data/scripts/handlers/itemhandlers/SpiritShot.java
index 37b6bed404a48b35a5d38cc9b7152ba65fc282b5..224e192daa990893339778db1f81d2995b047325 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/SpiritShot.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/SpiritShot.java
@@ -51,7 +51,7 @@ public class SpiritShot implements IItemHandler
 		if (weaponInst == null || weaponItem.getSpiritShotCount() == 0)
 		{
 			if (!activeChar.getAutoSoulShot().contains(itemId))
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.CANNOT_USE_SPIRITSHOTS));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_USE_SPIRITSHOTS));
 			return;
 		}
 		
@@ -96,7 +96,7 @@ public class SpiritShot implements IItemHandler
 		if (!gradeCheck)
 		{
 			if (!activeChar.getAutoSoulShot().contains(itemId))
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.SPIRITSHOTS_GRADE_MISMATCH));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SPIRITSHOTS_GRADE_MISMATCH));
 			
 			return;
 		}
@@ -105,7 +105,7 @@ public class SpiritShot implements IItemHandler
 		if (!activeChar.destroyItemWithoutTrace("Consume", item.getObjectId(), weaponItem.getSpiritShotCount(), null, false))
 		{
 			if (!activeChar.disableAutoShot(itemId))
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_SPIRITSHOTS));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_ENOUGH_SPIRITSHOTS));
 			return;
 		}
 		
@@ -151,7 +151,7 @@ public class SpiritShot implements IItemHandler
 				
 		}
 		// Send message to client
-		activeChar.sendPacket(new SystemMessage(SystemMessageId.ENABLED_SPIRITSHOT));
+		activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ENABLED_SPIRITSHOT));
 		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, skillId, 1, 0, 0), 360000);
 	}
 }
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/SummonItems.java b/datapack_development/data/scripts/handlers/itemhandlers/SummonItems.java
index 4ddb95bae60234def0d58ea566df589cec358f2b..e6b7f17b80369b0c4793dd49ba2e71ea38bca632 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/SummonItems.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/SummonItems.java
@@ -68,7 +68,7 @@ public class SummonItems implements IItemHandler
 		
 		if (activeChar.isSitting())
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.CANT_MOVE_SITTING));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANT_MOVE_SITTING));
 			return;
 		}
 		
@@ -80,7 +80,7 @@ public class SummonItems implements IItemHandler
 		
 		if (activeChar.isInOlympiadMode())
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.THIS_ITEM_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THIS_ITEM_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT));
 			return;
 		}
 		if (activeChar.isAllSkillsDisabled() || activeChar.isCastingNow())
@@ -90,19 +90,19 @@ public class SummonItems implements IItemHandler
 		
 		if ((activeChar.getPet() != null || activeChar.isMounted()) && sitem.isPetSummon())
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.YOU_ALREADY_HAVE_A_PET));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ALREADY_HAVE_A_PET));
 			return;
 		}
 		
 		if (activeChar.isAttackingNow())
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.YOU_CANNOT_SUMMON_IN_COMBAT));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_CANNOT_SUMMON_IN_COMBAT));
 			return;
 		}
 		
 		if (activeChar.isCursedWeaponEquipped() && sitem.isPetSummon())
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.STRIDER_CANT_BE_RIDDEN_WHILE_IN_BATTLE));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.STRIDER_CANT_BE_RIDDEN_WHILE_IN_BATTLE));
 			return;
 		}
 		
@@ -126,7 +126,7 @@ public class SummonItems implements IItemHandler
 					{
 						if (ch instanceof L2XmassTreeInstance && npcTemplate.isSpecialTree())
 						{
-							SystemMessage sm = new SystemMessage(SystemMessageId.CANNOT_SUMMON_S1_AGAIN);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.CANNOT_SUMMON_S1_AGAIN);
 							sm.addCharName(ch);
 							activeChar.sendPacket(sm);
 							return;
@@ -150,7 +150,7 @@ public class SummonItems implements IItemHandler
 				}
 				catch (Exception e)
 				{
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_CANT_FOUND));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.TARGET_CANT_FOUND));
 				}
 				break;
 			case 1: // pet summons
@@ -159,7 +159,7 @@ public class SummonItems implements IItemHandler
 				Broadcast.toSelfAndKnownPlayers(activeChar, new MagicSkillUse(activeChar, 2046, 1, 5000, 0));
 				activeChar.setTarget(oldTarget);
 				activeChar.sendPacket(new SetupGauge(0, 5000));
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.SUMMON_A_PET));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SUMMON_A_PET));
 				activeChar.setIsCastingNow(true);
 				
 				ThreadPoolManager.getInstance().scheduleGeneral(new PetSummonFinalizer(activeChar, npcTemplate, item), 5000);
diff --git a/datapack_development/data/scripts/handlers/itemhandlers/TeleportBookmark.java b/datapack_development/data/scripts/handlers/itemhandlers/TeleportBookmark.java
index 22a5994f17c29ce48ac8ff22c2f8270fe4b8ee1d..f72923f75392023d996f9ed55e4ab9b7aa5b3547 100644
--- a/datapack_development/data/scripts/handlers/itemhandlers/TeleportBookmark.java
+++ b/datapack_development/data/scripts/handlers/itemhandlers/TeleportBookmark.java
@@ -38,16 +38,16 @@ public class TeleportBookmark implements IItemHandler
 		
 		if(player.getBookMarkSlot() >= 9)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.YOUR_NUMBER_OF_MY_TELEPORTS_SLOTS_HAS_REACHED_ITS_MAXIMUM_LIMIT));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOUR_NUMBER_OF_MY_TELEPORTS_SLOTS_HAS_REACHED_ITS_MAXIMUM_LIMIT));
 			return;
 		}
 		
 		player.destroyItem("Consume", item.getObjectId(), 1, null, false);
 		
 		player.setBookMarkSlot(player.getBookMarkSlot()+3);
-		player.sendPacket(new SystemMessage(SystemMessageId.THE_NUMBER_OF_MY_TELEPORTS_SLOTS_HAS_BEEN_INCREASED));
+		player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THE_NUMBER_OF_MY_TELEPORTS_SLOTS_HAS_BEEN_INCREASED));
 		
-		SystemMessage sm = new SystemMessage(SystemMessageId.S1_DISAPPEARED);
+		SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISAPPEARED);
 		sm.addItemName(item.getItemId());
 		player.sendPacket(sm);
 	}
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/Blow.java b/datapack_development/data/scripts/handlers/skillhandlers/Blow.java
index d6e50112428a7907ec7aa6fb8474a3a06122c4ea..1a7b9bf7787432ebe2889f705d768ad41e99de05 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/Blow.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/Blow.java
@@ -91,7 +91,7 @@ public class Blow implements ISkillHandler
 					{
 						activeChar.stopSkillEffects(skill.getId());
 						skill.getEffects(target, activeChar);
-						SystemMessage sm = new SystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
+						SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
 						sm.addSkillName(skill);
 						activeChar.sendPacket(sm);
 					}
@@ -102,13 +102,13 @@ public class Blow implements ISkillHandler
 						if (Formulas.calcSkillSuccess(activeChar, target, skill, shld, false, false, true))
 						{
 							skill.getEffects(activeChar, target, new Env(shld, false, false, false));
-							SystemMessage sm = new SystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
 							sm.addSkillName(skill);
 							target.sendPacket(sm);
 						}
 						else
 						{
-							SystemMessage sm = new SystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
 							sm.addCharName(target);
 							sm.addSkillName(skill);
 							activeChar.sendPacket(sm);
@@ -188,13 +188,13 @@ public class Blow implements ISkillHandler
 				{
 					if (target instanceof L2PcInstance)
 					{
-						SystemMessage sm = new SystemMessage(SystemMessageId.COUNTERED_C1_ATTACK);
+						SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.COUNTERED_C1_ATTACK);
 						sm.addCharName(activeChar);
 						target.sendPacket(sm);
 					}
 					if (activeChar instanceof L2PcInstance)
 					{
-						SystemMessage sm = new SystemMessage(SystemMessageId.C1_PERFORMING_COUNTERATTACK);
+						SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_PERFORMING_COUNTERATTACK);
 						sm.addCharName(target);
 						activeChar.sendPacket(sm);
 					}
@@ -223,13 +223,13 @@ public class Blow implements ISkillHandler
 			{
 				if (activeChar instanceof L2PcInstance)
 				{
-					SystemMessage sm = new SystemMessage(SystemMessageId.C1_DODGES_ATTACK);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_DODGES_ATTACK);
 					sm.addString(target.getName());
 					((L2PcInstance) activeChar).sendPacket(sm);
 				}
 				if (target instanceof L2PcInstance)
 				{
-					SystemMessage sm = new SystemMessage(SystemMessageId.AVOIDED_C1_ATTACK);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.AVOIDED_C1_ATTACK);
 					sm.addString(activeChar.getName());
 					((L2PcInstance) target).sendPacket(sm);
 				}
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/CombatPointHeal.java b/datapack_development/data/scripts/handlers/skillhandlers/CombatPointHeal.java
index 41d262c89b3d57ca3bae9f8aa085de8eecc74773..b1a28409dceb7adc0b6cd8afa9f343c35e910eab 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/CombatPointHeal.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/CombatPointHeal.java
@@ -59,7 +59,7 @@ public class CombatPointHeal implements ISkillHandler
 			if ((target.getCurrentCp() + cp) >= target.getMaxCp())
 				cp = target.getMaxCp() - target.getCurrentCp();
 			
-			SystemMessage sm = new SystemMessage(SystemMessageId.S1_CP_WILL_BE_RESTORED);
+			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CP_WILL_BE_RESTORED);
 			sm.addNumber((int) cp);
 			target.sendPacket(sm);
 			target.setCurrentCp(cp + target.getCurrentCp());
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/Continuous.java b/datapack_development/data/scripts/handlers/skillhandlers/Continuous.java
index 931f51e1c5da109549a662d91772edadc0b6d562..91bcadd4eba704b65cdf3be47027377199353c14 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/Continuous.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/Continuous.java
@@ -243,7 +243,7 @@ public class Continuous implements ISkillHandler
 			}
 			else
 			{
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.ATTACK_FAILED));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ATTACK_FAILED));
 			}
 			
 			// Possibility of a lethal strike
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/Craft.java b/datapack_development/data/scripts/handlers/skillhandlers/Craft.java
index c55744b11ddca602e23537e6e12bf829ca404162..f49b6dce05fa1c4045c8665057b23dcfa6659fc0 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/Craft.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/Craft.java
@@ -51,7 +51,7 @@ public class Craft implements ISkillHandler
 		
 		if (player.getPrivateStoreType() != 0)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.CANNOT_CREATED_WHILE_ENGAGED_IN_TRADING));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_CREATED_WHILE_ENGAGED_IN_TRADING));
 			return;
 		}
 		RecipeController.getInstance().requestBookOpen(player, (skill.getSkillType() == L2SkillType.DWARVEN_CRAFT) ? true : false);
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/Disablers.java b/datapack_development/data/scripts/handlers/skillhandlers/Disablers.java
index f83ecaa57b71cad5b0bd848e0bb17fdb04c259f0..eb7f92ba81d5ea5f44b1da3e070be8023606447a 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/Disablers.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/Disablers.java
@@ -151,7 +151,7 @@ public class Disablers implements ISkillHandler
 						skill.getEffects(activeChar, target, new Env(shld, ss, sps, bss));
 					else
 					{
-						SystemMessage sm = new SystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
+						SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
 						sm.addCharName(target);
 						sm.addSkillName(skill);
 						activeChar.sendPacket(sm);
@@ -177,7 +177,7 @@ public class Disablers implements ISkillHandler
 					{
 						if (activeChar instanceof L2PcInstance)
 						{
-							SystemMessage sm = new SystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
 							sm.addCharName(target);
 							sm.addSkillName(skill);
 							activeChar.sendPacket(sm);
@@ -197,7 +197,7 @@ public class Disablers implements ISkillHandler
 					{
 						if (activeChar instanceof L2PcInstance)
 						{
-							SystemMessage sm = new SystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
 							sm.addCharName(target);
 							sm.addSkillName(skill);
 							activeChar.sendPacket(sm);
@@ -226,7 +226,7 @@ public class Disablers implements ISkillHandler
 					{
 						if (activeChar instanceof L2PcInstance)
 						{
-							SystemMessage sm = new SystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
 							sm.addCharName(target);
 							sm.addSkillName(skill);
 							activeChar.sendPacket(sm);
@@ -253,7 +253,7 @@ public class Disablers implements ISkillHandler
 						{
 							if (activeChar instanceof L2PcInstance)
 							{
-								SystemMessage sm = new SystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
+								SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
 								sm.addCharName(target);
 								sm.addSkillName(skill);
 								activeChar.sendPacket(sm);
@@ -261,7 +261,7 @@ public class Disablers implements ISkillHandler
 						}
 					}
 					else
-						activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
+						activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
 					break;
 				}
 				case AGGDAMAGE:
@@ -312,7 +312,7 @@ public class Disablers implements ISkillHandler
 					{
 						if (activeChar instanceof L2PcInstance)
 						{
-							SystemMessage sm = new SystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
 							sm.addCharName(target);
 							sm.addSkillName(skill);
 							activeChar.sendPacket(sm);
@@ -340,7 +340,7 @@ public class Disablers implements ISkillHandler
 						{
 							if (activeChar instanceof L2PcInstance)
 							{
-								SystemMessage sm = new SystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
+								SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
 								sm.addCharName(target);
 								sm.addSkillName(skill);
 								activeChar.sendPacket(sm);
@@ -365,7 +365,7 @@ public class Disablers implements ISkillHandler
 						if (summonPet != null)
 						{
 							summonPet.unSummon(summonOwner);
-							SystemMessage sm = new SystemMessage(SystemMessageId.YOUR_SERVITOR_HAS_VANISHED);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOUR_SERVITOR_HAS_VANISHED);
 							summonOwner.sendPacket(sm);
 						}
 					}
@@ -373,7 +373,7 @@ public class Disablers implements ISkillHandler
 					{
 						if (activeChar instanceof L2PcInstance)
 						{
-							SystemMessage sm = new SystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
 							sm.addCharName(target);
 							sm.addSkillName(skill);
 							activeChar.sendPacket(sm);
@@ -495,7 +495,7 @@ public class Disablers implements ISkillHandler
 					{
 						if (activeChar instanceof L2PcInstance)
 						{
-							SystemMessage sm = new SystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
 							sm.addCharName(target);
 							sm.addSkillName(skill);
 							activeChar.sendPacket(sm);
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/Extractable.java b/datapack_development/data/scripts/handlers/skillhandlers/Extractable.java
index b05c18078e97fa62cedc2ae15d4f827a52fce8bb..e5bef6ac7bd074e0c895373cea61210ed31ebbf0 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/Extractable.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/Extractable.java
@@ -81,13 +81,13 @@ public class Extractable implements ISkillHandler
 		if (player.isSubClassActive() && skill.getReuseDelay() > 0)
 		{
 			// TODO: remove this once skill reuse will be global for main/subclass
-			player.sendPacket(new SystemMessage(SystemMessageId.MAIN_CLASS_SKILL_ONLY));
-			player.sendPacket(new SystemMessage(SystemMessageId.S1_CANNOT_BE_USED).addSkillName(skill));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.MAIN_CLASS_SKILL_ONLY));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED).addSkillName(skill));
 			return;
 		}
 		if (createItemID[0] <= 0 || createItemID.length == 0 )
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.NOTHING_INSIDE_THAT));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOTHING_INSIDE_THAT));
 			return;
 		}
 		else
@@ -100,7 +100,7 @@ public class Extractable implements ISkillHandler
 				if (ItemTable.getInstance().createDummyItem(createItemID[i]) == null)
 				{
 					_log.warning("createItemID " + createItemID[i] + " doesn't have template!");
-					player.sendPacket(new SystemMessage(SystemMessageId.NOTHING_INSIDE_THAT));
+					player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOTHING_INSIDE_THAT));
 					return;
 				}
 				
@@ -111,8 +111,8 @@ public class Extractable implements ISkillHandler
 					for (int j = 0; j < createAmount[i]; j++)
 						player.addItem("Extract", createItemID[i], 1, targets[0], false);
 				}
-				SystemMessage sm = new SystemMessage(SystemMessageId.EARNED_S2_S1_S);;
-				SystemMessage sm2 = new SystemMessage(SystemMessageId.EARNED_ADENA);;
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.EARNED_S2_S1_S);;
+				SystemMessage sm2 = SystemMessage.getSystemMessage(SystemMessageId.EARNED_ADENA);;
 				if (createItemID[i] == 57)
 				{
 					sm2.addNumber(createAmount[i]);
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/Fishing.java b/datapack_development/data/scripts/handlers/skillhandlers/Fishing.java
index 6ea23f30a193d6096264e892c56d7f1c58965f07..cb7e7f79666d69ebd21109d21fae14327d7e3f26 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/Fishing.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/Fishing.java
@@ -71,21 +71,21 @@ public class Fishing implements ISkillHandler
 			else
 				player.endFishing(false);
 			// Cancels fishing
-			player.sendPacket(new SystemMessage(SystemMessageId.FISHING_ATTEMPT_CANCELLED));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.FISHING_ATTEMPT_CANCELLED));
 			return;
 		}
 		L2Weapon weaponItem = player.getActiveWeaponItem();
 		if ((weaponItem == null || weaponItem.getItemType() != L2WeaponType.FISHINGROD))
 		{
 			// Fishing poles are not installed
-			player.sendPacket(new SystemMessage(SystemMessageId.FISHING_POLE_NOT_EQUIPPED));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.FISHING_POLE_NOT_EQUIPPED));
 			return;
 		}
 		L2ItemInstance lure = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_LHAND);
 		if (lure == null)
 		{
 			// Bait not equiped.
-			player.sendPacket(new SystemMessage(SystemMessageId.BAIT_ON_HOOK_BEFORE_FISHING));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.BAIT_ON_HOOK_BEFORE_FISHING));
 			return;
 		}
 		player.setLure(lure);
@@ -93,26 +93,26 @@ public class Fishing implements ISkillHandler
 		
 		if (lure2 == null || lure2.getCount() < 1) // Not enough bait.
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_BAIT));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_ENOUGH_BAIT));
 			return;
 		}
 		if (player.isInBoat())
 		{
 			// You can't fish while you are on boat
-			player.sendPacket(new SystemMessage(SystemMessageId.CANNOT_FISH_ON_BOAT));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_FISH_ON_BOAT));
 			if (!player.isGM())
 				return;
 		}
 		if (player.isInCraftMode() || player.isInStoreMode())
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.CANNOT_FISH_WHILE_USING_RECIPE_BOOK));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_FISH_WHILE_USING_RECIPE_BOOK));
 			if (!player.isGM())
 				return;
 		}
 		if (player.isInsideZone(L2Character.ZONE_WATER))
 		{
 			// You can't fish in water
-			player.sendPacket(new SystemMessage(SystemMessageId.CANNOT_FISH_UNDER_WATER));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_FISH_UNDER_WATER));
 			if (!player.isGM())
 				return;
 		}
@@ -195,7 +195,7 @@ public class Fishing implements ISkillHandler
 		if (!canFish)
 		{
 			// You can't fish here
-			player.sendPacket(new SystemMessage(SystemMessageId.CANNOT_FISH_HERE));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_FISH_HERE));
 			if (!player.isGM())
 				return;
 		}
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/FishingSkill.java b/datapack_development/data/scripts/handlers/skillhandlers/FishingSkill.java
index 7ceb8c06d4e6afc999386e67eb29304445cc0956..b1366cd9916a66d5ab356354f689e0c0526b6875 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/FishingSkill.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/FishingSkill.java
@@ -52,12 +52,12 @@ public class FishingSkill implements ISkillHandler
 			if (skill.getSkillType() == L2SkillType.PUMPING)
 			{
 				//Pumping skill is available only while fishing
-				player.sendPacket(new SystemMessage(SystemMessageId.CAN_USE_PUMPING_ONLY_WHILE_FISHING));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CAN_USE_PUMPING_ONLY_WHILE_FISHING));
 			}
 			else if (skill.getSkillType() == L2SkillType.REELING)
 			{
 				//Reeling skill is available only while fishing
-				player.sendPacket(new SystemMessage(SystemMessageId.CAN_USE_REELING_ONLY_WHILE_FISHING));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CAN_USE_REELING_ONLY_WHILE_FISHING));
 			}
 			player.sendPacket(ActionFailed.STATIC_PACKET);
 			return;
@@ -74,7 +74,7 @@ public class FishingSkill implements ISkillHandler
 		int dmg = (int) (skill.getPower() * gradebonus * SS);
 		if (player.getSkillLevel(1315) <= skill.getLevel() - 2) //1315 - Fish Expertise
 		{//Penalty
-			player.sendPacket(new SystemMessage(SystemMessageId.REELING_PUMPING_3_LEVELS_HIGHER_THAN_FISHING_PENALTY));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.REELING_PUMPING_3_LEVELS_HIGHER_THAN_FISHING_PENALTY));
 			pen = 50;
 			int penatlydmg = dmg - pen;
 			if (player.isGM())
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/GiveReco.java b/datapack_development/data/scripts/handlers/skillhandlers/GiveReco.java
index a7913c95741548fceb0f353e045c97988fcc5b69..1de8a71c8568de424dc0de9624cbdfb2ef9382d3 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/GiveReco.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/GiveReco.java
@@ -57,7 +57,7 @@ public class GiveReco implements ISkillHandler
 				{
 					target.setRecomHave(reco+power);
 
-					SystemMessage sm = new SystemMessage(SystemMessageId.YOU_OBTAINED_S1_RECOMMENDATIONS);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_OBTAINED_S1_RECOMMENDATIONS);
 					sm.addNumber(power);
 					
 					target.sendPacket(sm);
@@ -65,7 +65,7 @@ public class GiveReco implements ISkillHandler
 					target.sendPacket(new ExVoteSystemInfo(target));
 				}
 				else
-					target.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
+					target.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOTHING_HAPPENED));
 			}
 		}
 	}
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/GiveVitality.java b/datapack_development/data/scripts/handlers/skillhandlers/GiveVitality.java
index 5f427406df9f18e09c76ee37c32f53c829dabeb8..21ff0bf552616d77060911e25a2c2def2d793cc8 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/GiveVitality.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/GiveVitality.java
@@ -41,7 +41,7 @@ public class GiveVitality implements ISkillHandler
 				{
 					((L2PcInstance) target).stopSkillEffects(skill.getId());
 					skill.getEffects(activeChar, ((L2PcInstance)target));
-					SystemMessage sm = new SystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
 					sm.addSkillName(skill);
 					target.sendPacket(sm);
 				}
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/Harvest.java b/datapack_development/data/scripts/handlers/skillhandlers/Harvest.java
index 52789d2ac74cecc37c25911282049d9561f46c34..ab2b3c1e135e80a812932a2c0a40ce993b76109e 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/Harvest.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/Harvest.java
@@ -74,7 +74,7 @@ public class Harvest implements ISkillHandler
 			
 			if (activeChar.getObjectId() != target.getSeederId())
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_HARVEST);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_HARVEST);
 				activeChar.sendPacket(sm);
 				continue;
 			}
@@ -107,13 +107,13 @@ public class Harvest implements ISkillHandler
 						}
 						if (send)
 						{
-							SystemMessage smsg = new SystemMessage(SystemMessageId.YOU_PICKED_UP_S1_S2);
+							SystemMessage smsg = SystemMessage.getSystemMessage(SystemMessageId.YOU_PICKED_UP_S1_S2);
 							smsg.addNumber(total);
 							smsg.addItemName(cropId);
 							activeChar.sendPacket(smsg);
 							if (activeChar.getParty() != null)
 							{
-								smsg = new SystemMessage(SystemMessageId.C1_HARVESTED_S3_S2S);
+								smsg = SystemMessage.getSystemMessage(SystemMessageId.C1_HARVESTED_S3_S2S);
 								smsg.addString(activeChar.getName());
 								smsg.addNumber(total);
 								smsg.addItemName(cropId);
@@ -128,10 +128,10 @@ public class Harvest implements ISkillHandler
 					}
 				}
 				else
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.THE_HARVEST_HAS_FAILED));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THE_HARVEST_HAS_FAILED));
 			}
 			else
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.THE_HARVEST_FAILED_BECAUSE_THE_SEED_WAS_NOT_SOWN));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THE_HARVEST_FAILED_BECAUSE_THE_SEED_WAS_NOT_SOWN));
 		}
 		
 	}
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/Heal.java b/datapack_development/data/scripts/handlers/skillhandlers/Heal.java
index 94ff21bd855750025372f417247ddb28d9f69976..fd940298aa49595cce0e14a172bb81c5fb8b6756 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/Heal.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/Heal.java
@@ -189,21 +189,21 @@ public class Heal implements ISkillHandler
 			{
 				if (skill.getId() == 4051)
 				{
-					SystemMessage sm = new SystemMessage(SystemMessageId.REJUVENATING_HP);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.REJUVENATING_HP);
 					target.sendPacket(sm);
 				}
 				else
 				{
 					if (activeChar instanceof L2PcInstance && activeChar != target)
 					{
-						SystemMessage sm = new SystemMessage(SystemMessageId.S2_HP_RESTORED_BY_C1);
+						SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S2_HP_RESTORED_BY_C1);
 						sm.addString(activeChar.getName());
 						sm.addNumber((int) hp);
 						target.sendPacket(sm);
 					}
 					else
 					{
-						SystemMessage sm = new SystemMessage(SystemMessageId.S1_HP_RESTORED);
+						SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_HP_RESTORED);
 						sm.addNumber((int) hp);
 						target.sendPacket(sm);
 					}
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/HealPercent.java b/datapack_development/data/scripts/handlers/skillhandlers/HealPercent.java
index 9e91c94b381e9cf59ad1ebbf08cd33a7964f8320..312dd28b7d24f4a2c2d7253177dbc8060c867f0e 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/HealPercent.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/HealPercent.java
@@ -115,7 +115,7 @@ public class HealPercent implements ISkillHandler
 				amount = Math.min(amount, target.getMaxCp() - target.getCurrentCp());
 				target.setCurrentCp(amount + target.getCurrentCp());
 				
-				sm = new SystemMessage(SystemMessageId.S1_CP_WILL_BE_RESTORED);
+				sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CP_WILL_BE_RESTORED);
 				sm.addNumber((int)amount);
 				target.sendPacket(sm);
 				su.addAttribute(StatusUpdate.CUR_CP, (int) target.getCurrentCp());
@@ -135,11 +135,11 @@ public class HealPercent implements ISkillHandler
 				{
 					if (activeChar != target)
 					{
-						sm = new SystemMessage(SystemMessageId.S2_HP_RESTORED_BY_C1);
+						sm = SystemMessage.getSystemMessage(SystemMessageId.S2_HP_RESTORED_BY_C1);
 						sm.addCharName(activeChar);
 					}
 					else
-						sm = new SystemMessage(SystemMessageId.S1_HP_RESTORED);
+						sm = SystemMessage.getSystemMessage(SystemMessageId.S1_HP_RESTORED);
 					sm.addNumber((int)amount);
 					target.sendPacket(sm);
 					su.addAttribute(StatusUpdate.CUR_HP, (int) target.getCurrentHp());
@@ -160,11 +160,11 @@ public class HealPercent implements ISkillHandler
 				{
 					if (activeChar != target)
 					{
-						sm = new SystemMessage(SystemMessageId.S2_MP_RESTORED_BY_C1);
+						sm = SystemMessage.getSystemMessage(SystemMessageId.S2_MP_RESTORED_BY_C1);
 						sm.addCharName(activeChar);
 					}
 					else
-						sm = new SystemMessage(SystemMessageId.S1_MP_RESTORED);
+						sm = SystemMessage.getSystemMessage(SystemMessageId.S1_MP_RESTORED);
 					sm.addNumber((int)amount);
 					target.sendPacket(sm);
 					su.addAttribute(StatusUpdate.CUR_MP, (int) target.getCurrentMp());
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/InstantJump.java b/datapack_development/data/scripts/handlers/skillhandlers/InstantJump.java
index 5537fa5addd1d038f243c2057c6435fe8fdbffd8..77d719904325307fb9d326ef80a335d3aa1b597d 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/InstantJump.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/InstantJump.java
@@ -51,13 +51,13 @@ public class InstantJump implements ISkillHandler
 		{
 			if (activeChar instanceof L2PcInstance)
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_DODGES_ATTACK);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_DODGES_ATTACK);
 				sm.addString(target.getName());
 				((L2PcInstance) activeChar).sendPacket(sm);
 			}
 			if (target instanceof L2PcInstance)
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.AVOIDED_C1_ATTACK);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.AVOIDED_C1_ATTACK);
 				sm.addString(activeChar.getName());
 				((L2PcInstance) target).sendPacket(sm);
 			}
@@ -97,7 +97,7 @@ public class InstantJump implements ISkillHandler
 				activeChar.stopSkillEffects(skill.getId());
 				skill.getEffects(target, activeChar);
 				
-				//SystemMessage sm = new SystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
+				//SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
 				//sm.addSkillName(skill);
 				//activeChar.sendPacket(sm);
 			}
@@ -111,13 +111,13 @@ public class InstantJump implements ISkillHandler
 				{
 					skill.getEffects(activeChar, target, new Env(shld, false, false, false));
 					
-					//SystemMessage sm = new SystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
+					//SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
 					//sm.addSkillName(skill);
 					//target.sendPacket(sm);
 				}
 				else
 				{
-					SystemMessage sm = new SystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
 					sm.addCharName(target);
 					sm.addSkillName(skill);
 					activeChar.sendPacket(sm);
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/ManaHeal.java b/datapack_development/data/scripts/handlers/skillhandlers/ManaHeal.java
index e2d6e4e0f78f54f9a8796c12981336642577e5cd..2fd0ffe84bb8491241ae911bac12c0174812094a 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/ManaHeal.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/ManaHeal.java
@@ -66,14 +66,14 @@ public class ManaHeal implements ISkillHandler
 			SystemMessage sm;
 			if (actChar instanceof L2PcInstance && actChar != target)
 			{
-				sm = new SystemMessage(SystemMessageId.S2_MP_RESTORED_BY_C1);
+				sm = SystemMessage.getSystemMessage(SystemMessageId.S2_MP_RESTORED_BY_C1);
 				sm.addString(actChar.getName());
 				sm.addNumber((int) mp);
 				target.sendPacket(sm);
 			}
 			else
 			{
-				sm = new SystemMessage(SystemMessageId.S1_MP_RESTORED);
+				sm = SystemMessage.getSystemMessage(SystemMessageId.S1_MP_RESTORED);
 				sm.addNumber((int) mp);
 				target.sendPacket(sm);
 			}
@@ -82,7 +82,7 @@ public class ManaHeal implements ISkillHandler
 			{
 				target.stopSkillEffects(skill.getId());
 				skill.getEffects(actChar, target);
-				sm = new SystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
+				sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
 				sm.addSkillName(skill);
 				target.sendPacket(sm);
 			}
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/Manadam.java b/datapack_development/data/scripts/handlers/skillhandlers/Manadam.java
index d9518184c0abfb477da71dd53423ed965bc682d1..bafa4fca4fa46c5df68a18a54e4bed9f7c31f901 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/Manadam.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/Manadam.java
@@ -92,7 +92,7 @@ public class Manadam implements ISkillHandler
 			boolean acted = Formulas.calcMagicAffected(activeChar, target, skill);
 			if (target.isInvul() || !acted)
 			{
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.MISSED_TARGET));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.MISSED_TARGET));
 			}
 			else
 			{
@@ -104,7 +104,7 @@ public class Manadam implements ISkillHandler
 						skill.getEffects(activeChar, target, new Env(shld, ss, false, bss));
 					else
 					{
-						SystemMessage sm = new SystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
+						SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
 						sm.addCharName(target);
 						sm.addSkillName(skill);
 						activeChar.sendPacket(sm);
@@ -116,7 +116,7 @@ public class Manadam implements ISkillHandler
 				if (Formulas.calcMCrit(activeChar.getMCriticalHit(target, skill)))
 				{
 					damage *= 3.;
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.CRITICAL_HIT_MAGIC));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CRITICAL_HIT_MAGIC));
 				}
 				
 				double mp = (damage > target.getCurrentMp() ? target.getCurrentMp() : damage);
@@ -131,7 +131,7 @@ public class Manadam implements ISkillHandler
 					// [L2J_JP EDIT START - TSL]
 					target.sendPacket(sump);
 					
-					SystemMessage sm = new SystemMessage(SystemMessageId.S2_MP_HAS_BEEN_DRAINED_BY_C1);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S2_MP_HAS_BEEN_DRAINED_BY_C1);
 					sm.addCharName(activeChar);
 					sm.addNumber((int) mp);
 					target.sendPacket(sm);
@@ -139,7 +139,7 @@ public class Manadam implements ISkillHandler
 				
 				if (activeChar instanceof L2PcInstance)
 				{
-					SystemMessage sm2 = new SystemMessage(SystemMessageId.YOUR_OPPONENTS_MP_WAS_REDUCED_BY_S1);
+					SystemMessage sm2 = SystemMessage.getSystemMessage(SystemMessageId.YOUR_OPPONENTS_MP_WAS_REDUCED_BY_S1);
 					sm2.addNumber((int) mp);
 					activeChar.sendPacket(sm2);
 				}
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/Mdam.java b/datapack_development/data/scripts/handlers/skillhandlers/Mdam.java
index 20cafa8abf3a42c088043f4e876867f8aa8df4e3..dc66f52cdb03951306b6274a7d59d1a5df14bea6 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/Mdam.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/Mdam.java
@@ -168,7 +168,7 @@ public class Mdam implements ISkillHandler
 					{
 						activeChar.stopSkillEffects(skill.getId());
 						skill.getEffects(target, activeChar);
-						SystemMessage sm = new SystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
+						SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
 						sm.addSkillName(skill);
 						activeChar.sendPacket(sm);
 					}
@@ -180,7 +180,7 @@ public class Mdam implements ISkillHandler
 							skill.getEffects(activeChar, target, new Env(shld, ss, false, bss));
 						else
 						{
-							SystemMessage sm = new SystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
 							sm.addCharName(target);
 							sm.addSkillName(skill);
 							activeChar.sendPacket(sm);
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/NornilsPower.java b/datapack_development/data/scripts/handlers/skillhandlers/NornilsPower.java
index 918cc99f80461e4b56b876b0aab6da7694a72c24..26ca79c7635061ea77791fa12fb0d6b862d8f687 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/NornilsPower.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/NornilsPower.java
@@ -58,13 +58,13 @@ public class NornilsPower implements ISkillHandler
 			}
 			else
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
 				sm.addSkillName(skill);
 				activeChar.sendPacket(sm);
 			}			
 		}
 		else
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOTHING_HAPPENED));
 	}
 
 	public L2SkillType[] getSkillIds()
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/Pdam.java b/datapack_development/data/scripts/handlers/skillhandlers/Pdam.java
index 8095d85aa5af1c182fa7c39df665e36787745301..42a2ff0993dd53c1c40fb1f4e3b0db7e617779e1 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/Pdam.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/Pdam.java
@@ -147,7 +147,7 @@ public class Pdam implements ISkillHandler
 						effects = skill.getEffects(target, activeChar);
 						if (effects != null && effects.length > 0)
 						{
-							SystemMessage sm = new SystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
 							sm.addSkillName(skill);
 							activeChar.sendPacket(sm);
 						}
@@ -159,7 +159,7 @@ public class Pdam implements ISkillHandler
 						effects = skill.getEffects(activeChar, target, new Env(shld, false, false, false));
 						if (effects != null && effects.length > 0)
 						{
-							SystemMessage sm = new SystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
 							sm.addSkillName(skill);
 							target.sendPacket(sm);
 						}
@@ -190,13 +190,13 @@ public class Pdam implements ISkillHandler
 					{
 						if (target instanceof L2PcInstance)
 						{
-							SystemMessage sm = new SystemMessage(SystemMessageId.COUNTERED_C1_ATTACK);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.COUNTERED_C1_ATTACK);
 							sm.addCharName(activeChar);
 							target.sendPacket(sm);
 						}
 						if (activeChar instanceof L2PcInstance)
 						{
-							SystemMessage sm = new SystemMessage(SystemMessageId.C1_PERFORMING_COUNTERATTACK);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_PERFORMING_COUNTERATTACK);
 							sm.addCharName(target);
 							activeChar.sendPacket(sm);
 						}
@@ -206,19 +206,19 @@ public class Pdam implements ISkillHandler
 					}
 				}
 				else // No damage
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.ATTACK_FAILED));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ATTACK_FAILED));
 			}
 			else
 			{
 				if (activeChar instanceof L2PcInstance)
 				{
-					SystemMessage sm = new SystemMessage(SystemMessageId.C1_DODGES_ATTACK);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_DODGES_ATTACK);
 					sm.addString(target.getName());
 					((L2PcInstance) activeChar).sendPacket(sm);
 				}
 				if (target instanceof L2PcInstance)
 				{
-					SystemMessage sm = new SystemMessage(SystemMessageId.AVOIDED_C1_ATTACK);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.AVOIDED_C1_ATTACK);
 					sm.addString(activeChar.getName());
 					((L2PcInstance) target).sendPacket(sm);
 				}
@@ -247,7 +247,7 @@ public class Pdam implements ISkillHandler
 						}
 						else
 						{
-							SystemMessage sm = new SystemMessage(SystemMessageId.SOUL_CANNOT_BE_INCREASED_ANYMORE);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.SOUL_CANNOT_BE_INCREASED_ANYMORE);
 							((L2PcInstance) activeChar).sendPacket(sm);
 						}
 					}
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/Soul.java b/datapack_development/data/scripts/handlers/skillhandlers/Soul.java
index 58a0f0381ddbdb02e21c5d336bbf1dbbe6e62307..22cca7af1f5c9cd844558d75f4e7ab69f3129993 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/Soul.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/Soul.java
@@ -67,7 +67,7 @@ public class Soul implements ISkillHandler
 				}
 				else
 				{
-					SystemMessage sm = new SystemMessage(SystemMessageId.SOUL_CANNOT_BE_INCREASED_ANYMORE);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.SOUL_CANNOT_BE_INCREASED_ANYMORE);
 					player.sendPacket(sm);
 					return;
 				}
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/Sow.java b/datapack_development/data/scripts/handlers/skillhandlers/Sow.java
index dc8cc41432f5198bb462895a5e7744fc4f5d40cd..6bf855232034b4ab118194422d737168bc0d8722 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/Sow.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/Sow.java
@@ -96,10 +96,10 @@ public class Sow implements ISkillHandler
 			{
 				activeChar.sendPacket(new PlaySound("Itemsound.quest_itemget"));
 				target.setSeeded((L2PcInstance)activeChar);
-				sm = new SystemMessage(SystemMessageId.THE_SEED_WAS_SUCCESSFULLY_SOWN);
+				sm = SystemMessage.getSystemMessage(SystemMessageId.THE_SEED_WAS_SUCCESSFULLY_SOWN);
 			}
 			else
-				sm = new SystemMessage(SystemMessageId.THE_SEED_WAS_NOT_SOWN);
+				sm = SystemMessage.getSystemMessage(SystemMessageId.THE_SEED_WAS_NOT_SOWN);
 			
 			if (activeChar.getParty() == null)
 				activeChar.sendPacket(sm);
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/Spoil.java b/datapack_development/data/scripts/handlers/skillhandlers/Spoil.java
index d16090237628f78beb6c9cc8e4238e1e1d313ccc..4d5111d78adff0a91d15444d87706317d49916e9 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/Spoil.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/Spoil.java
@@ -58,7 +58,7 @@ public class Spoil implements ISkillHandler
 			
 			if (target.isSpoil())
 			{
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.ALREADY_SPOILED));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ALREADY_SPOILED));
 				continue;
 			}
 			
@@ -72,11 +72,11 @@ public class Spoil implements ISkillHandler
 				{
 					target.setSpoil(true);
 					target.setIsSpoiledBy(activeChar.getObjectId());
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.SPOIL_SUCCESS));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SPOIL_SUCCESS));
 				}
 				else
 				{
-					SystemMessage sm = new SystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
 					sm.addCharName(target);
 					sm.addSkillName(skill);
 					activeChar.sendPacket(sm);
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/StealBuffs.java b/datapack_development/data/scripts/handlers/skillhandlers/StealBuffs.java
index 6a4ec9a02eb7f86c1d94be899315d0c953f8e080..521b856872c5d449401fd6a9ea0f1884e582fb25 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/StealBuffs.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/StealBuffs.java
@@ -171,7 +171,7 @@ public class StealBuffs implements ISkillHandler
 						effect.scheduleEffect();
 						if (effect.getShowIcon() && activeChar instanceof L2PcInstance)
 						{
-							SystemMessage sm = new SystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
 							sm.addSkillName(effect);
 							activeChar.sendPacket(sm);
 						}
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/SummonFriend.java b/datapack_development/data/scripts/handlers/skillhandlers/SummonFriend.java
index f2beefd827ef5de9b680264c771daf37b85aab60..846af4b77621a78217bfffed322852058dabb4f8 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/SummonFriend.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/SummonFriend.java
@@ -71,7 +71,7 @@ public class SummonFriend implements ISkillHandler
 					{
 						if(!targetPlayer.teleportRequest(activePlayer, skill))
 						{
-							SystemMessage sm = new SystemMessage(SystemMessageId.C1_ALREADY_SUMMONED);
+							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_ALREADY_SUMMONED);
 							sm.addString(target.getName());
 							activePlayer.sendPacket(sm);
 							continue;
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/Sweep.java b/datapack_development/data/scripts/handlers/skillhandlers/Sweep.java
index df82492134bed3ce18f2705b4c3e5770c2f8c202..97191b6f8e6d3869fed5c010d8257c03692bee6a 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/Sweep.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/Sweep.java
@@ -93,13 +93,13 @@ public class Sweep implements ISkillHandler
 						SystemMessage smsg;
 						if (ritem.getCount() > 1)
 						{
-							smsg = new SystemMessage(SystemMessageId.EARNED_S2_S1_S); // earned $s2$s1
+							smsg = SystemMessage.getSystemMessage(SystemMessageId.EARNED_S2_S1_S); // earned $s2$s1
 							smsg.addItemName(ritem.getItemId());
 							smsg.addNumber(ritem.getCount());
 						}
 						else
 						{
-							smsg = new SystemMessage(SystemMessageId.EARNED_ITEM); // earned $s1
+							smsg = SystemMessage.getSystemMessage(SystemMessageId.EARNED_ITEM); // earned $s1
 							smsg.addItemName(ritem.getItemId());
 						}
 						player.sendPacket(smsg);
@@ -130,7 +130,7 @@ public class Sweep implements ISkillHandler
 					suhp.addAttribute(StatusUpdate.CUR_HP, (int)hp);
 					activeChar.sendPacket(suhp);
 					
-					SystemMessage sm = new SystemMessage(SystemMessageId.S1_HP_RESTORED);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_HP_RESTORED);
 					sm.addNumber(restored);
 					activeChar.sendPacket(sm);
 				}
@@ -145,7 +145,7 @@ public class Sweep implements ISkillHandler
 					suhp.addAttribute(StatusUpdate.CUR_MP, (int)mp);
 					activeChar.sendPacket(suhp);
 					
-					SystemMessage sm = new SystemMessage(SystemMessageId.S1_MP_RESTORED);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_MP_RESTORED);
 					sm.addNumber(restored);
 					activeChar.sendPacket(sm);
 				}
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/TransformDispel.java b/datapack_development/data/scripts/handlers/skillhandlers/TransformDispel.java
index c03e192ee3726b51a1cb0741f56c64de038be76e..848ca10b9952d4fc8c61dd9c93113773abf27253 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/TransformDispel.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/TransformDispel.java
@@ -53,7 +53,7 @@ public class TransformDispel implements ISkillHandler
 		if (pc.isTransformed() || pc.isInStance())
 		{
 			if (pc.isFlyingMounted() && !pc.isInsideZone(L2Character.ZONE_LANDING))
-				pc.sendPacket(new SystemMessage(SystemMessageId.BOARD_OR_CANCEL_NOT_POSSIBLE_HERE));
+				pc.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.BOARD_OR_CANCEL_NOT_POSSIBLE_HERE));
 			else
 				pc.stopTransformation(true);
 		}
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/Trap.java b/datapack_development/data/scripts/handlers/skillhandlers/Trap.java
index 001e59ec011752c7fa1b48f4d94cb8958b5cebbd..22e9fe8bc3b74fc7b0721db6c7726315f5f5e82a 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/Trap.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/Trap.java
@@ -77,7 +77,7 @@ public class Trap implements ISkillHandler
 					if (!trap.canSee(activeChar))
 					{
 						if (activeChar instanceof L2PcInstance)
-							((L2PcInstance) activeChar).sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
+							((L2PcInstance) activeChar).sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET));
 						continue;
 					}
 					
@@ -90,7 +90,7 @@ public class Trap implements ISkillHandler
 					
 					trap.unSummon();
 					if (activeChar instanceof L2PcInstance)
-						((L2PcInstance) activeChar).sendPacket(new SystemMessage(SystemMessageId.A_TRAP_DEVICE_HAS_BEEN_STOPPED));
+						((L2PcInstance) activeChar).sendPacket(SystemMessage.getSystemMessage(SystemMessageId.A_TRAP_DEVICE_HAS_BEEN_STOPPED));
 				}
 			}
 		}
diff --git a/datapack_development/data/scripts/handlers/skillhandlers/Unlock.java b/datapack_development/data/scripts/handlers/skillhandlers/Unlock.java
index 467fa6bacea018ea4580f92c6e9ff83d6ef6872b..752dd58a135beb3db5f53a911e27f1fe716230fc 100644
--- a/datapack_development/data/scripts/handlers/skillhandlers/Unlock.java
+++ b/datapack_development/data/scripts/handlers/skillhandlers/Unlock.java
@@ -85,7 +85,7 @@ public class Unlock implements ISkillHandler
 				if ((!door.isUnlockable() && skill.getSkillType() != L2SkillType.UNLOCK_SPECIAL)
 						|| door.getFort() != null)
 				{
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.UNABLE_TO_UNLOCK_DOOR));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.UNABLE_TO_UNLOCK_DOOR));
 					activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 					return;
 				}
@@ -97,7 +97,7 @@ public class Unlock implements ISkillHandler
 						door.onOpen();
 				}
 				else
-					activeChar.sendPacket(new SystemMessage(SystemMessageId.FAILED_TO_UNLOCK_DOOR));
+					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.FAILED_TO_UNLOCK_DOOR));
 			}
 			else if (target instanceof L2ChestInstance)
 			{
diff --git a/datapack_development/data/scripts/handlers/usercommandhandlers/Birthday.java b/datapack_development/data/scripts/handlers/usercommandhandlers/Birthday.java
index 4e3b92e9ff6a3d7e8223df2d9979de0982e01ff5..6c7fe9eefceaf98ce0c1275e625e41813656cc18 100644
--- a/datapack_development/data/scripts/handlers/usercommandhandlers/Birthday.java
+++ b/datapack_development/data/scripts/handlers/usercommandhandlers/Birthday.java
@@ -41,7 +41,7 @@ public class Birthday implements IUserCommandHandler
 		Calendar cal = Calendar.getInstance();
 		cal.setTimeInMillis(activeChar.getCreateTime());
 		
-		SystemMessage sm = new SystemMessage(SystemMessageId.C1_BIRTHDAY_IS_S3_S4_S2);
+		SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_BIRTHDAY_IS_S3_S4_S2);
 		sm.addPcName(activeChar);
 		sm.addString(Integer.toString(cal.get(Calendar.YEAR)));
 		sm.addString(Integer.toString(cal.get(Calendar.MONTH)+1));
diff --git a/datapack_development/data/scripts/handlers/usercommandhandlers/ChannelDelete.java b/datapack_development/data/scripts/handlers/usercommandhandlers/ChannelDelete.java
index 47898a349d36b0caa3a4eb7d62befd72adc6ed07..885b3d4ceacf49f99437d6981dda2fb4a9e077ee 100644
--- a/datapack_development/data/scripts/handlers/usercommandhandlers/ChannelDelete.java
+++ b/datapack_development/data/scripts/handlers/usercommandhandlers/ChannelDelete.java
@@ -46,7 +46,7 @@ public class ChannelDelete implements IUserCommandHandler
 			{
 				L2CommandChannel channel = activeChar.getParty().getCommandChannel();
 				
-				SystemMessage sm = new SystemMessage(SystemMessageId.COMMAND_CHANNEL_DISBANDED);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.COMMAND_CHANNEL_DISBANDED);
 				channel.broadcastToChannelMembers(sm);
 				
 				channel.disbandChannel();
diff --git a/datapack_development/data/scripts/handlers/usercommandhandlers/ChannelLeave.java b/datapack_development/data/scripts/handlers/usercommandhandlers/ChannelLeave.java
index a669ea9240ffdbb362b0fe894f7b816c6f421641..575f275a211b7e2ceca0c25a7efd269ac06222ab 100644
--- a/datapack_development/data/scripts/handlers/usercommandhandlers/ChannelLeave.java
+++ b/datapack_development/data/scripts/handlers/usercommandhandlers/ChannelLeave.java
@@ -49,9 +49,9 @@ public class ChannelLeave implements IUserCommandHandler
 				L2Party party = activeChar.getParty();
 				channel.removeParty(party);
 				
-				party.getLeader().sendPacket(new SystemMessage(SystemMessageId.LEFT_COMMAND_CHANNEL));
+				party.getLeader().sendPacket(SystemMessage.getSystemMessage(SystemMessageId.LEFT_COMMAND_CHANNEL));
 				
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_PARTY_LEFT_COMMAND_CHANNEL);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_PARTY_LEFT_COMMAND_CHANNEL);
 				sm.addString(party.getLeader().getName());
 				channel.broadcastToChannelMembers(sm);
 				return true;
diff --git a/datapack_development/data/scripts/handlers/usercommandhandlers/ClanWarsList.java b/datapack_development/data/scripts/handlers/usercommandhandlers/ClanWarsList.java
index eb101484acfedbd28bb5cd02eef5bf709a67db74..06cbe61885965378b57b37c54cffd5159d5fc817 100644
--- a/datapack_development/data/scripts/handlers/usercommandhandlers/ClanWarsList.java
+++ b/datapack_development/data/scripts/handlers/usercommandhandlers/ClanWarsList.java
@@ -67,7 +67,7 @@ public class ClanWarsList implements IUserCommandHandler
 			if (id == 88)
 			{
 				// Attack List
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.CLANS_YOU_DECLARED_WAR_ON));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLANS_YOU_DECLARED_WAR_ON));
 				statement = con.prepareStatement("select clan_name,clan_id,ally_id,ally_name from clan_data,clan_wars where clan1=? and clan_id=clan2 and clan2 not in (select clan1 from clan_wars where clan2=?)");
 				statement.setInt(1, clan.getClanId());
 				statement.setInt(2, clan.getClanId());
@@ -75,7 +75,7 @@ public class ClanWarsList implements IUserCommandHandler
 			else if (id == 89)
 			{
 				// Under Attack List
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.CLANS_THAT_HAVE_DECLARED_WAR_ON_YOU));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLANS_THAT_HAVE_DECLARED_WAR_ON_YOU));
 				statement = con.prepareStatement("select clan_name,clan_id,ally_id,ally_name from clan_data,clan_wars where clan2=? and clan_id=clan1 and clan1 not in (select clan2 from clan_wars where clan1=?)");
 				statement.setInt(1, clan.getClanId());
 				statement.setInt(2, clan.getClanId());
@@ -84,7 +84,7 @@ public class ClanWarsList implements IUserCommandHandler
 				// ID = 90
 			{
 				// War List
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.WAR_LIST));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.WAR_LIST));
 				statement = con.prepareStatement("select clan_name,clan_id,ally_id,ally_name from clan_data,clan_wars where clan1=? and clan_id=clan2 and clan2 in (select clan1 from clan_wars where clan2=?)");
 				statement.setInt(1, clan.getClanId());
 				statement.setInt(2, clan.getClanId());
@@ -100,21 +100,21 @@ public class ClanWarsList implements IUserCommandHandler
 				if (ally_id > 0)
 				{
 					// Target With Ally
-					sm = new SystemMessage(SystemMessageId.S1_S2_ALLIANCE);
+					sm = SystemMessage.getSystemMessage(SystemMessageId.S1_S2_ALLIANCE);
 					sm.addString(clanName);
 					sm.addString(rset.getString("ally_name"));
 				}
 				else
 				{
 					// Target Without Ally
-					sm = new SystemMessage(SystemMessageId.S1_NO_ALLI_EXISTS);
+					sm = SystemMessage.getSystemMessage(SystemMessageId.S1_NO_ALLI_EXISTS);
 					sm.addString(clanName);
 				}
 				
 				activeChar.sendPacket(sm);
 			}
 			
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.FRIEND_LIST_FOOTER));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.FRIEND_LIST_FOOTER));
 			
 			rset.close();
 			statement.close();
diff --git a/datapack_development/data/scripts/handlers/usercommandhandlers/InstanceZone.java b/datapack_development/data/scripts/handlers/usercommandhandlers/InstanceZone.java
index 66035ddd90bbe21b2f75424d1c1bc8f95cf332a8..2d4740bc80d8d80560c5a8d536cfe6255a3fc5bb 100644
--- a/datapack_development/data/scripts/handlers/usercommandhandlers/InstanceZone.java
+++ b/datapack_development/data/scripts/handlers/usercommandhandlers/InstanceZone.java
@@ -54,7 +54,7 @@ public class InstanceZone implements IUserCommandHandler
 		final InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(activeChar);
 		if (world != null && world.templateId >= 0)
 		{
-			SystemMessage sm = new SystemMessage(SystemMessageId.INSTANT_ZONE_CURRENTLY_INUSE);
+			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.INSTANT_ZONE_CURRENTLY_INUSE);
 			sm.addString(InstanceManager.getInstance().getInstanceIdName(world.templateId));
 			activeChar.sendPacket(sm);
 		}
@@ -70,11 +70,11 @@ public class InstanceZone implements IUserCommandHandler
 					if (firstMessage)
 					{
 						firstMessage = false;
-						activeChar.sendPacket(new SystemMessage(SystemMessageId.INSTANCE_ZONE_TIME_LIMIT));
+						activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INSTANCE_ZONE_TIME_LIMIT));
 					}
 					int hours = (int) (remainingTime / 3600);
 					int minutes = (int) ((remainingTime%3600) / 60);
-					SystemMessage sm = new SystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);
 					sm.addString(InstanceManager.getInstance().getInstanceIdName(instanceId));
 					sm.addNumber(hours);
 					sm.addNumber(minutes);
@@ -84,7 +84,7 @@ public class InstanceZone implements IUserCommandHandler
 					InstanceManager.getInstance().deleteInstanceTime(activeChar.getObjectId(), instanceId);
 			}
 		if (firstMessage)
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.NO_INSTANCEZONE_TIME_LIMIT));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NO_INSTANCEZONE_TIME_LIMIT));
 		return true;
 	}
 }
diff --git a/datapack_development/data/scripts/handlers/usercommandhandlers/Loc.java b/datapack_development/data/scripts/handlers/usercommandhandlers/Loc.java
index 3134c5d7c090393d5dd61ead97d195ea9c1878bd..81b6249dec1fa1661a70683a82f4ff1bd6066203 100644
--- a/datapack_development/data/scripts/handlers/usercommandhandlers/Loc.java
+++ b/datapack_development/data/scripts/handlers/usercommandhandlers/Loc.java
@@ -148,7 +148,7 @@ public class Loc implements IUserCommandHandler
 			default:
 				msg = SystemMessageId.LOC_ADEN_S1_S2_S3;
 		}
-		SystemMessage sm = new SystemMessage(msg);
+		SystemMessage sm = SystemMessage.getSystemMessage(msg);
 		sm.addNumber(activeChar.getX());
 		sm.addNumber(activeChar.getY());
 		sm.addNumber(activeChar.getZ());
diff --git a/datapack_development/data/scripts/handlers/usercommandhandlers/OlympiadStat.java b/datapack_development/data/scripts/handlers/usercommandhandlers/OlympiadStat.java
index 1f2d301276c4a0063e670db2a0a50ecc8e2c2fc3..03eaddfc5d7665738c8f7221255a671b87cbad75 100644
--- a/datapack_development/data/scripts/handlers/usercommandhandlers/OlympiadStat.java
+++ b/datapack_development/data/scripts/handlers/usercommandhandlers/OlympiadStat.java
@@ -39,7 +39,7 @@ public class OlympiadStat implements IUserCommandHandler
 	{
 		if (id != COMMAND_IDS[0])
 			return false;
-		SystemMessage sm = new SystemMessage(SystemMessageId.THE_CURRENT_RECORD_FOR_THIS_OLYMPIAD_SESSION_IS_S1_MATCHES_S2_WINS_S3_DEFEATS_YOU_HAVE_EARNED_S4_OLYMPIAD_POINTS);
+		SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THE_CURRENT_RECORD_FOR_THIS_OLYMPIAD_SESSION_IS_S1_MATCHES_S2_WINS_S3_DEFEATS_YOU_HAVE_EARNED_S4_OLYMPIAD_POINTS);
 		sm.addNumber(Olympiad.getInstance().getCompetitionDone(activeChar.getObjectId()));
 		sm.addNumber(Olympiad.getInstance().getCompetitionWon(activeChar.getObjectId()));
 		sm.addNumber(Olympiad.getInstance().getCompetitionLost(activeChar.getObjectId()));
diff --git a/datapack_development/data/scripts/handlers/usercommandhandlers/PartyInfo.java b/datapack_development/data/scripts/handlers/usercommandhandlers/PartyInfo.java
index 961a3ae4769ef0e771d090d0ae0372dbfc1c94f1..5c9764969c16960c57a53ad5896c7819b9280caa 100644
--- a/datapack_development/data/scripts/handlers/usercommandhandlers/PartyInfo.java
+++ b/datapack_development/data/scripts/handlers/usercommandhandlers/PartyInfo.java
@@ -42,8 +42,8 @@ public class PartyInfo implements IUserCommandHandler
 		
 		if (!activeChar.isInParty())
 		{
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.PARTY_INFORMATION));
-			activeChar.sendPacket(new SystemMessage(SystemMessageId.FRIEND_LIST_FOOTER));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.PARTY_INFORMATION));
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.FRIEND_LIST_FOOTER));
 			return false;
 		}
 		
@@ -52,34 +52,34 @@ public class PartyInfo implements IUserCommandHandler
 		int lootDistribution = playerParty.getLootDistribution();
 		String partyLeader = playerParty.getPartyMembers().get(0).getName();
 		
-		activeChar.sendPacket(new SystemMessage(SystemMessageId.PARTY_INFORMATION));
+		activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.PARTY_INFORMATION));
 		
 		switch (lootDistribution)
 		{
 			case L2Party.ITEM_LOOTER:
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.LOOTING_FINDERS_KEEPERS));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.LOOTING_FINDERS_KEEPERS));
 				break;
 			case L2Party.ITEM_ORDER:
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.LOOTING_BY_TURN));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.LOOTING_BY_TURN));
 				break;
 			case L2Party.ITEM_ORDER_SPOIL:
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.LOOTING_BY_TURN_INCLUDE_SPOIL));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.LOOTING_BY_TURN_INCLUDE_SPOIL));
 				break;
 			case L2Party.ITEM_RANDOM:
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.LOOTING_RANDOM));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.LOOTING_RANDOM));
 				break;
 			case L2Party.ITEM_RANDOM_SPOIL:
-				activeChar.sendPacket(new SystemMessage(SystemMessageId.LOOTING_RANDOM_INCLUDE_SPOIL));
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.LOOTING_RANDOM_INCLUDE_SPOIL));
 				break;
 		}
 		
-		SystemMessage sm = new SystemMessage(SystemMessageId.PARTY_LEADER_C1);
+		SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.PARTY_LEADER_C1);
 		sm.addString(partyLeader);
 		activeChar.sendPacket(sm);
 		
 		activeChar.sendMessage("Members: " + memberCount + "/9");
 		
-		activeChar.sendPacket(new SystemMessage(SystemMessageId.FRIEND_LIST_FOOTER));
+		activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.FRIEND_LIST_FOOTER));
 		return true;
 	}
 	
diff --git a/datapack_development/data/scripts/handlers/usercommandhandlers/Time.java b/datapack_development/data/scripts/handlers/usercommandhandlers/Time.java
index 7887fbef555fd9399f097226f773153209425e81..c045e335db0cd24f5af810f9e34f4585fe87004a 100644
--- a/datapack_development/data/scripts/handlers/usercommandhandlers/Time.java
+++ b/datapack_development/data/scripts/handlers/usercommandhandlers/Time.java
@@ -52,13 +52,13 @@ public class Time implements IUserCommandHandler
 		SystemMessage sm;
 		if (GameTimeController.getInstance().isNowNight())
 		{
-			sm = new SystemMessage(SystemMessageId.TIME_S1_S2_IN_THE_NIGHT);
+			sm = SystemMessage.getSystemMessage(SystemMessageId.TIME_S1_S2_IN_THE_NIGHT);
 			sm.addString(h);
 			sm.addString(m);
 		}
 		else
 		{
-			sm = new SystemMessage(SystemMessageId.TIME_S1_S2_IN_THE_DAY);
+			sm = SystemMessage.getSystemMessage(SystemMessageId.TIME_S1_S2_IN_THE_DAY);
 			sm.addString(h);
 			sm.addString(m);
 		}
diff --git a/datapack_development/data/scripts/handlers/voicedcommandhandlers/Wedding.java b/datapack_development/data/scripts/handlers/voicedcommandhandlers/Wedding.java
index 0c8986797a3cd15cef13298663a69c8c2c4b96ee..943a0db419e5d09b5d6aa26671c13fd5e28740cb 100644
--- a/datapack_development/data/scripts/handlers/voicedcommandhandlers/Wedding.java
+++ b/datapack_development/data/scripts/handlers/voicedcommandhandlers/Wedding.java
@@ -157,7 +157,7 @@ public class Wedding implements IVoicedCommandHandler
 				if (activeChar.getFirstEffect(skill) == null)
 				{
 					skill.getEffects(activeChar, activeChar);
-					SystemMessage sm = new SystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
 					sm.addSkillName(skill);
 					activeChar.sendPacket(sm);
 				}
diff --git a/datapack_development/data/scripts/instances/CrystalCaverns/CrystalCaverns.java b/datapack_development/data/scripts/instances/CrystalCaverns/CrystalCaverns.java
index f4e32bcf8eeb212e47146cf06871dbf48004db76..de24bdbb5c5f83f48524d6ec725266b1b9e658b8 100644
--- a/datapack_development/data/scripts/instances/CrystalCaverns/CrystalCaverns.java
+++ b/datapack_development/data/scripts/instances/CrystalCaverns/CrystalCaverns.java
@@ -337,19 +337,19 @@ public class CrystalCaverns extends Quest
 		L2Party party = player.getParty();
 		if (party == null)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER));
 			return false;
 		}
 		if (party.getLeader() != player)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER));
 			return false;
 		}
 		for (L2PcInstance partyMember : party.getPartyMembers())
 		{
 			if (partyMember.getLevel() < 78)
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
 				sm.addPcName(partyMember);
 				party.broadcastToPartyMembers(sm);
 				return false;
@@ -357,14 +357,14 @@ public class CrystalCaverns extends Quest
 			L2ItemInstance item = partyMember.getInventory().getItemByItemId(CONT_CRYSTAL);
 			if (item == null)
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_ITEM_REQUIREMENT_NOT_SUFFICIENT);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_ITEM_REQUIREMENT_NOT_SUFFICIENT);
 				sm.addPcName(partyMember);
 				party.broadcastToPartyMembers(sm);
 				return false;
 			}
 			if (!Util.checkIfInRange(1000, player, partyMember, true))
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED);
 				sm.addPcName(partyMember);
 				party.broadcastToPartyMembers(sm);
 				return false;
@@ -372,7 +372,7 @@ public class CrystalCaverns extends Quest
 			Long reentertime = InstanceManager.getInstance().getInstanceTime(partyMember.getObjectId(), INSTANCEID);
 			if (System.currentTimeMillis() < reentertime)
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_MAY_NOT_REENTER_YET);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_MAY_NOT_REENTER_YET);
 				sm.addPcName(partyMember);
 				party.broadcastToPartyMembers(sm);
 				return false;
@@ -388,12 +388,12 @@ public class CrystalCaverns extends Quest
 		L2Party party = player.getParty();
 		if (party == null)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER));
 			return false;
 		}
 		if (party.getLeader() != player)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER));
 			return false;
 		}
 		for (L2PcInstance partyMember : party.getPartyMembers())
@@ -401,14 +401,14 @@ public class CrystalCaverns extends Quest
 			L2ItemInstance item = partyMember.getInventory().getItemByItemId(RED_CORAL);
 			if (item == null)
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_ITEM_REQUIREMENT_NOT_SUFFICIENT);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_ITEM_REQUIREMENT_NOT_SUFFICIENT);
 				sm.addPcName(partyMember);
 				party.broadcastToPartyMembers(sm);
 				return false;
 			}
 			if (!Util.checkIfInRange(1000, player, partyMember, true))
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED);
 				sm.addPcName(partyMember);
 				party.broadcastToPartyMembers(sm);
 				return false;
@@ -422,12 +422,12 @@ public class CrystalCaverns extends Quest
 		L2Party party = player.getParty();
 		if (party == null)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER));
 			return false;
 		}
 		if (party.getLeader() != player)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER));
 			return false;
 		}
 		for (L2PcInstance partyMember : party.getPartyMembers())
@@ -437,14 +437,14 @@ public class CrystalCaverns extends Quest
 			L2ItemInstance item3 = partyMember.getInventory().getItemByItemId(BOSS_CRYSTAL_3);
 			if (item1 == null || item2 == null || item3 == null)
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_ITEM_REQUIREMENT_NOT_SUFFICIENT);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_ITEM_REQUIREMENT_NOT_SUFFICIENT);
 				sm.addPcName(partyMember);
 				party.broadcastToPartyMembers(sm);
 				return false;
 			}
 			if (!Util.checkIfInRange(1000, player, partyMember, true))
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED);
 				sm.addPcName(partyMember);
 				party.broadcastToPartyMembers(sm);
 				return false;
@@ -518,7 +518,7 @@ public class CrystalCaverns extends Quest
 		{
 			if (!(world instanceof CCWorld))
 			{
-				player.sendPacket(new SystemMessage(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER));
 				return 0;
 			}
 			teleto.instanceId = world.instanceId;
diff --git a/datapack_development/data/scripts/instances/DarkCloudMansion/DarkCloudMansion.java b/datapack_development/data/scripts/instances/DarkCloudMansion/DarkCloudMansion.java
index be557731206c444ef88041a944ad481fd5bcea9f..3dd44a23ab097b34f3a502d8680c16df74d34a6e 100644
--- a/datapack_development/data/scripts/instances/DarkCloudMansion/DarkCloudMansion.java
+++ b/datapack_development/data/scripts/instances/DarkCloudMansion/DarkCloudMansion.java
@@ -217,31 +217,31 @@ public class DarkCloudMansion extends Quest
 			L2Party party = player.getParty();
 			if (party == null)
 			{
-				player.sendPacket(new SystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER));
 				return false;
 			}
 			if (party.getLeader() != player)
 			{
-				player.sendPacket(new SystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER));
 				return false;
 			}
 			if (party.getMemberCount() > 2)
 			{
-				player.sendPacket(new SystemMessage(SystemMessageId.PARTY_EXCEEDED_THE_LIMIT_CANT_ENTER));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.PARTY_EXCEEDED_THE_LIMIT_CANT_ENTER));
 				return false;
 			}
 			for (L2PcInstance partyMember : party.getPartyMembers())
 			{
 				if (partyMember.getLevel() < 78)
 				{
-					SystemMessage sm = new SystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
 					sm.addPcName(partyMember);
 					player.sendPacket(sm);
 					return false;
 				}
 				if (!partyMember.isInsideRadius(player, 1000, true, true))
 				{
-					SystemMessage sm = new SystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED);
 					sm.addPcName(partyMember);
 					player.sendPacket(sm);
 					return false;
@@ -270,7 +270,7 @@ public class DarkCloudMansion extends Quest
 		{
 			if (!(world instanceof DMCWorld))
 			{
-				player.sendPacket(new SystemMessage(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER));
 				return 0;
 			}
 			teleto.instanceId = world.instanceId;
diff --git a/datapack_development/data/scripts/instances/Kamaloka/Kamaloka.java b/datapack_development/data/scripts/instances/Kamaloka/Kamaloka.java
index 633c85aba861774c415c7cad61bca2cd553fdb48..b928e87300c177242a82e8558cf44a78c49fb43c 100644
--- a/datapack_development/data/scripts/instances/Kamaloka/Kamaloka.java
+++ b/datapack_development/data/scripts/instances/Kamaloka/Kamaloka.java
@@ -425,19 +425,19 @@ public class Kamaloka extends Quest
 		// player must be in party
 		if (party == null)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER));
 			return false;
 		}
 		// ...and be party leader
 		if (party.getLeader() != player)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER));
 			return false;
 		}
 		// party must not exceed max size for selected instance
 		if (party.getMemberCount() > MAX_PARTY_SIZE[index])
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.PARTY_EXCEEDED_THE_LIMIT_CANT_ENTER));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.PARTY_EXCEEDED_THE_LIMIT_CANT_ENTER));
 			return false;
 		}
 		
@@ -453,7 +453,7 @@ public class Kamaloka extends Quest
 			// player level must be in range
 			if (Math.abs(partyMember.getLevel() - level) > MAX_LEVEL_DIFFERENCE)
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
 				sm.addPcName(partyMember);
 				player.sendPacket(sm);
 				return false;
@@ -461,7 +461,7 @@ public class Kamaloka extends Quest
 			// player must be near party leader
 			if (!partyMember.isInsideRadius(player, 1000, true, true))
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED);
 				sm.addPcName(partyMember);
 				player.sendPacket(sm);
 				return false;
@@ -478,7 +478,7 @@ public class Kamaloka extends Quest
 					// if found instance still can't be reentered - exit
 					if (System.currentTimeMillis() < instanceTimes.get(id))
 					{
-						SystemMessage sm = new SystemMessage(SystemMessageId.C1_MAY_NOT_REENTER_YET);
+						SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_MAY_NOT_REENTER_YET);
 						sm.addPcName(partyMember);
 						player.sendPacket(sm);
 						return false;
@@ -564,13 +564,13 @@ public class Kamaloka extends Quest
 			if (!(world instanceof KamaWorld)
 					|| world.templateId != templateId)
 			{
-				player.sendPacket(new SystemMessage(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER));
 				return;
 			}
 			// check for level difference again on reenter
 			if (Math.abs(player.getLevel() - LEVEL[((KamaWorld)world).index]) > MAX_LEVEL_DIFFERENCE)
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
 				sm.addPcName(player);
 				player.sendPacket(sm);
 				return;
@@ -645,7 +645,7 @@ public class Kamaloka extends Quest
 				reenter.add(Calendar.DATE, 1);
 			reenter.set(Calendar.HOUR_OF_DAY, RESET_HOUR);
 			
-			SystemMessage sm = new SystemMessage(SystemMessageId.INSTANT_ZONE_RESTRICTED);
+			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.INSTANT_ZONE_RESTRICTED);
 			sm.addString(InstanceManager.getInstance().getInstanceIdName(world.templateId));
 			
 			// set instance reenter time for all allowed players
diff --git a/datapack_development/data/scripts/instances/NornilsGarden/NornilsGarden.java b/datapack_development/data/scripts/instances/NornilsGarden/NornilsGarden.java
index a36e766a839305fd3455d6346108a09297912136..cb92b9e60787b75537f26635790a41eb11d5e1c8 100644
--- a/datapack_development/data/scripts/instances/NornilsGarden/NornilsGarden.java
+++ b/datapack_development/data/scripts/instances/NornilsGarden/NornilsGarden.java
@@ -235,13 +235,13 @@ public class NornilsGarden extends Quest
 		{
 			if (!(world instanceof NornilsWorld) || world.templateId != INSTANCE_ID)
 			{
-				player.sendPacket(new SystemMessage(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER));
 				return null;
 			}
 			// check for level difference again on reenter
 			if (player.getLevel() > INSTANCE_LVL_MAX || player.getLevel() < INSTANCE_LVL_MIN)
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
 				sm.addPcName(player);
 				player.sendPacket(sm);
 				return null;
@@ -394,13 +394,13 @@ public class NornilsGarden extends Quest
 		// player must be in party
 		if (party == null)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER));
 			return "32330-05.html";
 		}
 		// ...and be party leader
 		if (party.getLeader() != player)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER));
 			return "32330-08.html";
 		}
 		boolean _kamael = false;
@@ -410,21 +410,21 @@ public class NornilsGarden extends Quest
 			// player level must be in range
 			if (partyMember.getLevel() > INSTANCE_LVL_MAX)
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
 				sm.addPcName(partyMember);
 				player.sendPacket(sm);
 				return "32330-06.html";
 			}
 			if (partyMember.getLevel() < INSTANCE_LVL_MIN)
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
 				sm.addPcName(partyMember);
 				player.sendPacket(sm);
 				return "32330-07.html";
 			}
 			if ( partyMember.getClassId().level() != 0)
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
 				sm.addPcName(partyMember);
 				player.sendPacket(sm);
 				return "32330-06.html";
@@ -432,7 +432,7 @@ public class NornilsGarden extends Quest
 			// player must be near party leader
 			if (!partyMember.isInsideRadius(player, 500, true, true))
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED);
 				sm.addPcName(partyMember);
 				player.sendPacket(sm);
 				return "32330-08.html";
@@ -446,7 +446,7 @@ public class NornilsGarden extends Quest
 				}
 				else
 				{
-					SystemMessage sm = new SystemMessage(SystemMessageId.C1_QUEST_REQUIREMENT_NOT_SUFFICIENT);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_QUEST_REQUIREMENT_NOT_SUFFICIENT);
 					sm.addPcName(partyMember);
 					player.sendPacket(sm);
 					return "32330-08.html";
diff --git a/datapack_development/data/scripts/instances/Pailaka/PailakaDevilsLegacy.java b/datapack_development/data/scripts/instances/Pailaka/PailakaDevilsLegacy.java
index 18a1f404ec9f90e85d223d17eea033476f044662..ab66b087f91c7e06acb9b7cbc150a8dd3ed8171e 100644
--- a/datapack_development/data/scripts/instances/Pailaka/PailakaDevilsLegacy.java
+++ b/datapack_development/data/scripts/instances/Pailaka/PailakaDevilsLegacy.java
@@ -170,7 +170,7 @@ public class PailakaDevilsLegacy extends Quest
 		{
 			if (world.templateId != INSTANCE_ID)
 			{
-				player.sendPacket(new SystemMessage(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER));
 				return;
 			}
 			Instance inst = InstanceManager.getInstance().getInstance(world.instanceId);
diff --git a/datapack_development/data/scripts/instances/Pailaka/PailakaSongOfIceAndFire.java b/datapack_development/data/scripts/instances/Pailaka/PailakaSongOfIceAndFire.java
index a49423685b326abfae7fb35f3e1a35b5997ca318..30f95e698dd393fa102c624152118a4d97f62548 100644
--- a/datapack_development/data/scripts/instances/Pailaka/PailakaSongOfIceAndFire.java
+++ b/datapack_development/data/scripts/instances/Pailaka/PailakaSongOfIceAndFire.java
@@ -141,7 +141,7 @@ public class PailakaSongOfIceAndFire extends Quest
 		{
 			if (world.templateId != INSTANCE_ID)
 			{
-				player.sendPacket(new SystemMessage(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER));
 				return;
 			}
 			Instance inst = InstanceManager.getInstance().getInstance(world.instanceId);
diff --git a/datapack_development/data/scripts/instances/SeedOfDestruction/Stage1.java b/datapack_development/data/scripts/instances/SeedOfDestruction/Stage1.java
index f7d2f8374c6ac9158683c2490405fa558ac763ad..943e79a004873385fbcd562d62ea346721bed4f0 100644
--- a/datapack_development/data/scripts/instances/SeedOfDestruction/Stage1.java
+++ b/datapack_development/data/scripts/instances/SeedOfDestruction/Stage1.java
@@ -362,37 +362,37 @@ public class Stage1 extends Quest
 		L2Party party = player.getParty();
 		if (party == null)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER));
 			return false;
 		}
 		L2CommandChannel channel = player.getParty().getCommandChannel();
 		if (channel == null)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.NOT_IN_COMMAND_CHANNEL_CANT_ENTER));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_IN_COMMAND_CHANNEL_CANT_ENTER));
 			return false;
 		}
 		else if (channel.getChannelLeader() != player)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER));
 			return false;
 		}
 		else if (channel.getMemberCount() < MIN_PLAYERS || channel.getMemberCount() > MAX_PLAYERS)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.PARTY_EXCEEDED_THE_LIMIT_CANT_ENTER));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.PARTY_EXCEEDED_THE_LIMIT_CANT_ENTER));
 			return false;
 		}
 		for (L2PcInstance partyMember : party.getPartyMembers())
 		{
 			if (partyMember.getLevel() < 75)
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
 				sm.addPcName(partyMember);
 				party.broadcastToPartyMembers(sm);
 				return false;
 			}
 			if (!Util.checkIfInRange(1000, player, partyMember, true))
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED);
 				sm.addPcName(partyMember);
 				party.broadcastToPartyMembers(sm);
 				return false;
@@ -400,7 +400,7 @@ public class Stage1 extends Quest
 			Long reentertime = InstanceManager.getInstance().getInstanceTime(partyMember.getObjectId(), INSTANCEID);
 			if (System.currentTimeMillis() < reentertime)
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_MAY_NOT_REENTER_YET);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_MAY_NOT_REENTER_YET);
 				sm.addPcName(partyMember);
 				party.broadcastToPartyMembers(sm);
 				return false;
@@ -425,7 +425,7 @@ public class Stage1 extends Quest
 		{
 			if (!(world instanceof SOD1World))
 			{
-				player.sendPacket(new SystemMessage(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER));
 				return 0;
 			}
 			teleportPlayer(player, coords, world.instanceId);
@@ -622,7 +622,7 @@ public class Stage1 extends Quest
 			while(reenter.get(Calendar.DAY_OF_WEEK) != RESET_DAY_2)
 				reenter.add(Calendar.DAY_OF_MONTH, 1);
 
-		SystemMessage sm = new SystemMessage(SystemMessageId.INSTANT_ZONE_RESTRICTED);
+		SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.INSTANT_ZONE_RESTRICTED);
 		sm.addString(InstanceManager.getInstance().getInstanceIdName(INSTANCEID));
 
 		// set instance reenter time for all allowed players
diff --git a/datapack_development/data/scripts/instances/SeedOfInfinity/HallOfSuffering.java b/datapack_development/data/scripts/instances/SeedOfInfinity/HallOfSuffering.java
index dacd60835aaa0660b8879eb12442aa3a630dc6dd..473f5a47bb28a26dcd31f1ed80a729982134c6e3 100644
--- a/datapack_development/data/scripts/instances/SeedOfInfinity/HallOfSuffering.java
+++ b/datapack_development/data/scripts/instances/SeedOfInfinity/HallOfSuffering.java
@@ -139,26 +139,26 @@ public class HallOfSuffering extends Quest
 		L2Party party = player.getParty();
 		if (party == null)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER));
 			return false;
 		}
 		if (party.getLeader() != player)
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER));
 			return false;
 		}
 		for (L2PcInstance partyMember : party.getPartyMembers())
 		{
 			if (partyMember.getLevel() < 75)
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT);
 				sm.addPcName(partyMember);
 				party.broadcastToPartyMembers(sm);
 				return false;
 			}
 			if (!Util.checkIfInRange(1000, player, partyMember, true))
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED);
 				sm.addPcName(partyMember);
 				party.broadcastToPartyMembers(sm);
 				return false;
@@ -166,7 +166,7 @@ public class HallOfSuffering extends Quest
 			Long reentertime = InstanceManager.getInstance().getInstanceTime(partyMember.getObjectId(), INSTANCEID);
 			if (System.currentTimeMillis() < reentertime)
 			{
-				SystemMessage sm = new SystemMessage(SystemMessageId.C1_MAY_NOT_REENTER_YET);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_MAY_NOT_REENTER_YET);
 				sm.addPcName(partyMember);
 				party.broadcastToPartyMembers(sm);
 				return false;
@@ -191,7 +191,7 @@ public class HallOfSuffering extends Quest
 		{
 			if (!(world instanceof HSWorld))
 			{
-				player.sendPacket(new SystemMessage(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER));
 				return 0;
 			}
 			teleportPlayer(player, coords, world.instanceId);
@@ -466,7 +466,7 @@ public class HallOfSuffering extends Quest
 				Calendar reenter = Calendar.getInstance();
 				reenter.add(Calendar.HOUR, INSTANCEPENALTY);
 				
-				SystemMessage sm = new SystemMessage(SystemMessageId.INSTANT_ZONE_RESTRICTED);
+				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.INSTANT_ZONE_RESTRICTED);
 				sm.addString(InstanceManager.getInstance().getInstanceIdName(tmpworld.templateId));
 				
 				// set instance reenter time for all allowed players
diff --git a/datapack_development/data/scripts/quests/421_LittleWingAdventures/__init__.py b/datapack_development/data/scripts/quests/421_LittleWingAdventures/__init__.py
index 69003d45ff80b76c059c83786af51e7e6150323e..e78ff3997cc38c05454e411b16ec611144bc406a 100644
--- a/datapack_development/data/scripts/quests/421_LittleWingAdventures/__init__.py
+++ b/datapack_development/data/scripts/quests/421_LittleWingAdventures/__init__.py
@@ -35,10 +35,10 @@ def EvolvePet(player,item,striderControlItem) :
    statement.execute()
    statement.close()
    con.close()
-   sm1 = SystemMessage(SystemMessageId.S2_S1_DISAPPEARED)
+   sm1 = SystemMessage.getSystemMessage(SystemMessageId.S2_S1_DISAPPEARED)
    sm1.addItemName(item.getItemId())
    sm1.addNumber(1)
-   sm2 = SystemMessage(SystemMessageId.YOU_PICKED_UP_A_S1_S2)
+   sm2 = SystemMessage.getSystemMessage(SystemMessageId.YOU_PICKED_UP_A_S1_S2)
    sm2.addNumber(item.getEnchantLevel())
    sm2.addItemName(striderControlItem)
    player.sendPacket(sm1)
diff --git a/datapack_development/data/scripts/quests/508_TheClansReputation/__init__.py b/datapack_development/data/scripts/quests/508_TheClansReputation/__init__.py
index f6f396069cac26192521fe2ea6ededf552364d28..6659113bfdddbdbbfa54d593b13864c9f9d8e997 100644
--- a/datapack_development/data/scripts/quests/508_TheClansReputation/__init__.py
+++ b/datapack_development/data/scripts/quests/508_TheClansReputation/__init__.py
@@ -116,7 +116,7 @@ class Quest (JQuest) :
            htmltext = "30868-"+str(raid)+"b.htm"
            st.takeItems(item,1)
            clan.addReputationScore(CLAN_POINTS_REWARD,True)
-           player.sendPacket(SystemMessage(1777).addNumber(CLAN_POINTS_REWARD))
+           player.sendPacket(SystemMessage.getSystemMessage(1777).addNumber(CLAN_POINTS_REWARD))
            clan.broadcastToOnlineMembers(PledgeShowInfoUpdate(clan))
   return htmltext
 
diff --git a/datapack_development/data/scripts/quests/509_TheClansPrestige/__init__.py b/datapack_development/data/scripts/quests/509_TheClansPrestige/__init__.py
index 708368f97619fab51b2cf6da41ba515013ccaf29..bc357c872cda3027e902f6b158d8dff0def0e2b7 100644
--- a/datapack_development/data/scripts/quests/509_TheClansPrestige/__init__.py
+++ b/datapack_development/data/scripts/quests/509_TheClansPrestige/__init__.py
@@ -98,7 +98,7 @@ class Quest (JQuest) :
            htmltext = "31331-"+str(raid)+"b.htm"
            st.takeItems(item,1)
            clan.addReputationScore(CLAN_POINTS_REWARD,True)
-           player.sendPacket(SystemMessage(1777).addNumber(CLAN_POINTS_REWARD))
+           player.sendPacket(SystemMessage.getSystemMessage(1777).addNumber(CLAN_POINTS_REWARD))
            clan.broadcastToOnlineMembers(PledgeShowInfoUpdate(clan))
   return htmltext
 
diff --git a/datapack_development/data/scripts/quests/510_AClansReputation/__init__.py b/datapack_development/data/scripts/quests/510_AClansReputation/__init__.py
index 9cda6c238537dacc3b9980b5c5eea0f233fdd4e6..c8b00e7d1a30db3889479119035e62369751b01f 100644
--- a/datapack_development/data/scripts/quests/510_AClansReputation/__init__.py
+++ b/datapack_development/data/scripts/quests/510_AClansReputation/__init__.py
@@ -62,7 +62,7 @@ class Quest (JQuest) :
            st.takeItems(Claw,-1)
            reward = int(CLAN_POINTS_REWARD * count)
            clan.addReputationScore(reward,True)
-           player.sendPacket(SystemMessage(1777).addNumber(reward))
+           player.sendPacket(SystemMessage.getSystemMessage(1777).addNumber(reward))
            clan.broadcastToOnlineMembers(PledgeShowInfoUpdate(clan))
   return htmltext
 
diff --git a/datapack_development/data/scripts/quests/Q350_EnhanceYourWeapon/Q350_EnhanceYourWeapon.java b/datapack_development/data/scripts/quests/Q350_EnhanceYourWeapon/Q350_EnhanceYourWeapon.java
index 48b04a4acf9024d5a22dbccec8d672037d532112..c392e2767f440852a2ee471e7da8c4f6e119af73 100644
--- a/datapack_development/data/scripts/quests/Q350_EnhanceYourWeapon/Q350_EnhanceYourWeapon.java
+++ b/datapack_development/data/scripts/quests/Q350_EnhanceYourWeapon/Q350_EnhanceYourWeapon.java
@@ -540,14 +540,14 @@ public class Q350_EnhanceYourWeapon extends Quest
 		// If the crystal level is way too high for this mob, say that we can't increase it
 		if (!_npcLevelingInfos.get(mob.getNpcId()).containsKey(sc.getLevel()))
 		{
-			player.sendPacket(new SystemMessage(SystemMessageId.SOUL_CRYSTAL_ABSORBING_REFUSED));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SOUL_CRYSTAL_ABSORBING_REFUSED));
 			return;
 		}
 		
 		if (Rnd.get(100) <= _npcLevelingInfos.get(mob.getNpcId()).get(sc.getLevel()).getChance())
 			exchangeCrystal(player, mob, sc.getItemId(), sc.getLeveledItemId(), false);
 		else
-			player.sendPacket(new SystemMessage(SystemMessageId.SOUL_CRYSTAL_ABSORBING_FAILED));
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SOUL_CRYSTAL_ABSORBING_FAILED));
 	}
 	
 	private void exchangeCrystal(L2PcInstance player, L2Attackable mob, int takeid, int giveid, boolean broke)
@@ -566,13 +566,13 @@ public class Q350_EnhanceYourWeapon extends Quest
 			
 			// Send a sound event and text message to the player
 			if (broke)
-				player.sendPacket(new SystemMessage(SystemMessageId.SOUL_CRYSTAL_BROKE));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SOUL_CRYSTAL_BROKE));
 			
 			else
-				player.sendPacket(new SystemMessage(SystemMessageId.SOUL_CRYSTAL_ABSORBING_SUCCEEDED));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SOUL_CRYSTAL_ABSORBING_SUCCEEDED));
 			
 			// Send system message
-			SystemMessage sms = new SystemMessage(SystemMessageId.EARNED_ITEM);
+			SystemMessage sms = SystemMessage.getSystemMessage(SystemMessageId.EARNED_ITEM);
 			sms.addItemName(giveid);
 			player.sendPacket(sms);
 			
diff --git a/datapack_development/data/scripts/quests/Q511_AwlUnderFoot/Q511_AwlUnderFoot.java b/datapack_development/data/scripts/quests/Q511_AwlUnderFoot/Q511_AwlUnderFoot.java
index 4fecde4450fb918b528db06cbd0fc9a8da402eb1..56b40466d7ba16bd5e86bc3e8f0ae77155e839c7 100644
--- a/datapack_development/data/scripts/quests/Q511_AwlUnderFoot/Q511_AwlUnderFoot.java
+++ b/datapack_development/data/scripts/quests/Q511_AwlUnderFoot/Q511_AwlUnderFoot.java
@@ -127,7 +127,7 @@ public final class Q511_AwlUnderFoot extends Quest
 		{
 			if (!(world instanceof FAUWorld))
 			{
-				player.sendPacket(new SystemMessage(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER));
 				return "";
 			}
 			teleportPlayer(player, coords, world.instanceId);
diff --git a/datapack_development/data/scripts/retail/PriestOfBlessing/PriestOfBlessing.java b/datapack_development/data/scripts/retail/PriestOfBlessing/PriestOfBlessing.java
index d13dc46ec08b4aab49dc6a438ad66ad2351ec419..c7cad865a453fb9b24ca5722e82e193754ac13e5 100644
--- a/datapack_development/data/scripts/retail/PriestOfBlessing/PriestOfBlessing.java
+++ b/datapack_development/data/scripts/retail/PriestOfBlessing/PriestOfBlessing.java
@@ -99,7 +99,7 @@ public class PriestOfBlessing extends Quest
 					long remainingTime = (_reuse_time - System.currentTimeMillis()) / 1000;
 					int hours = (int) (remainingTime / 3600);
 					int minutes = (int) ((remainingTime % 3600) / 60);
-					SystemMessage sm = new SystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);
 					sm.addItemName(_nevit_voice);
 					sm.addNumber(hours);
 					sm.addNumber(minutes);
@@ -135,7 +135,7 @@ public class PriestOfBlessing extends Quest
 					long remainingTime = (_reuse_time - System.currentTimeMillis()) / 1000;
 					int hours = (int) (remainingTime / 3600);
 					int minutes = (int) ((remainingTime % 3600) / 60);
-					SystemMessage sm = new SystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);
+					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);
 					sm.addString("Nevit's Hourglass");
 					sm.addNumber(hours);
 					sm.addNumber(minutes);
diff --git a/datapack_development/data/scripts/teleports/OracleTeleport/OracleTeleport.java b/datapack_development/data/scripts/teleports/OracleTeleport/OracleTeleport.java
index b384054f6acdb98f243f48a3769e072022995cda..f259459feb4eba3d69720db2d4860ff5e4c35010 100644
--- a/datapack_development/data/scripts/teleports/OracleTeleport/OracleTeleport.java
+++ b/datapack_development/data/scripts/teleports/OracleTeleport/OracleTeleport.java
@@ -274,7 +274,7 @@ public class OracleTeleport extends Quest
 			}
 			else if (player.getAllActiveQuests().length > 40)
 			{
-				player.sendPacket(new SystemMessage(SystemMessageId.TOO_MANY_QUESTS));
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.TOO_MANY_QUESTS));
 				st.exitQuest(true);
 			}
 			else if (st.getQuestItemsCount(7079) < 1)
diff --git a/datapack_development/data/scripts/vehicles/AirShipController.java b/datapack_development/data/scripts/vehicles/AirShipController.java
index 0723b22563335c4e59a28c42117890ac9e67ffc6..96cfd16a17d38853c07872a23bc5605f658e7a76 100644
--- a/datapack_development/data/scripts/vehicles/AirShipController.java
+++ b/datapack_development/data/scripts/vehicles/AirShipController.java
@@ -75,15 +75,15 @@ public abstract class AirShipController extends Quest
 	private static final int STARSTONE = 13277;
 	private static final int SUMMON_COST = 5;
 	
-	private static final SystemMessage SM_ALREADY_EXISTS = new SystemMessage(SystemMessageId.THE_AIRSHIP_IS_ALREADY_EXISTS);
-	private static final SystemMessage SM_ALREADY_SUMMONED = new SystemMessage(SystemMessageId.ANOTHER_AIRSHIP_ALREADY_SUMMONED);
-	private static final SystemMessage SM_NEED_LICENSE = new SystemMessage(SystemMessageId.THE_AIRSHIP_NEED_LICENSE_TO_SUMMON);
-	private static final SystemMessage SM_NEED_CLANLVL5 = new SystemMessage(SystemMessageId.THE_AIRSHIP_NEED_CLANLVL_5_TO_SUMMON);
-	private static final SystemMessage SM_NO_PRIVS = new SystemMessage(SystemMessageId.THE_AIRSHIP_NO_PRIVILEGES);
-	private static final SystemMessage SM_ALREADY_USED = new SystemMessage(SystemMessageId.THE_AIRSHIP_ALREADY_USED);
-	private static final SystemMessage SM_LICENSE_ALREADY_ACQUIRED = new SystemMessage(SystemMessageId.THE_AIRSHIP_SUMMON_LICENSE_ALREADY_ACQUIRED);
-	private static final SystemMessage SM_LICENSE_ENTERED = new SystemMessage(SystemMessageId.THE_AIRSHIP_SUMMON_LICENSE_ENTERED);
-	private static final SystemMessage SM_NEED_MORE = new SystemMessage(SystemMessageId.THE_AIRSHIP_NEED_MORE_S1).addItemName(STARSTONE);
+	private static final SystemMessage SM_ALREADY_EXISTS = SystemMessage.getSystemMessage(SystemMessageId.THE_AIRSHIP_IS_ALREADY_EXISTS);
+	private static final SystemMessage SM_ALREADY_SUMMONED = SystemMessage.getSystemMessage(SystemMessageId.ANOTHER_AIRSHIP_ALREADY_SUMMONED);
+	private static final SystemMessage SM_NEED_LICENSE = SystemMessage.getSystemMessage(SystemMessageId.THE_AIRSHIP_NEED_LICENSE_TO_SUMMON);
+	private static final SystemMessage SM_NEED_CLANLVL5 = SystemMessage.getSystemMessage(SystemMessageId.THE_AIRSHIP_NEED_CLANLVL_5_TO_SUMMON);
+	private static final SystemMessage SM_NO_PRIVS = SystemMessage.getSystemMessage(SystemMessageId.THE_AIRSHIP_NO_PRIVILEGES);
+	private static final SystemMessage SM_ALREADY_USED = SystemMessage.getSystemMessage(SystemMessageId.THE_AIRSHIP_ALREADY_USED);
+	private static final SystemMessage SM_LICENSE_ALREADY_ACQUIRED = SystemMessage.getSystemMessage(SystemMessageId.THE_AIRSHIP_SUMMON_LICENSE_ALREADY_ACQUIRED);
+	private static final SystemMessage SM_LICENSE_ENTERED = SystemMessage.getSystemMessage(SystemMessageId.THE_AIRSHIP_SUMMON_LICENSE_ENTERED);
+	private static final SystemMessage SM_NEED_MORE = SystemMessage.getSystemMessage(SystemMessageId.THE_AIRSHIP_NEED_MORE_S1).addItemName(STARSTONE);
 	
 	private static final String ARRIVAL_MSG = "The airship has been summoned. It will automatically depart in 5 minutes";
 	
diff --git a/datapack_development/data/scripts/vehicles/EngineerLekon/EngineerLekon.java b/datapack_development/data/scripts/vehicles/EngineerLekon/EngineerLekon.java
index db4fa1e9a37d0c969c8b1c3fad2dc7edde0eed7a..608ea49ff7edb3e95cf882d8f12c4828caafd1bd 100644
--- a/datapack_development/data/scripts/vehicles/EngineerLekon/EngineerLekon.java
+++ b/datapack_development/data/scripts/vehicles/EngineerLekon/EngineerLekon.java
@@ -29,9 +29,9 @@ public class EngineerLekon extends Quest
 	private static final int STARSTONE = 13277;
 	private static final int LICENSE_COST = 10;
 	
-	private static final SystemMessage SM_NEED_CLANLVL5 = new SystemMessage(SystemMessageId.THE_AIRSHIP_NEED_CLANLVL_5_TO_SUMMON);
-	private static final SystemMessage SM_NO_PRIVS = new SystemMessage(SystemMessageId.THE_AIRSHIP_NO_PRIVILEGES);
-	private static final SystemMessage SM_LICENSE_ALREADY_ACQUIRED = new SystemMessage(SystemMessageId.THE_AIRSHIP_SUMMON_LICENSE_ALREADY_ACQUIRED);
+	private static final SystemMessage SM_NEED_CLANLVL5 = SystemMessage.getSystemMessage(SystemMessageId.THE_AIRSHIP_NEED_CLANLVL_5_TO_SUMMON);
+	private static final SystemMessage SM_NO_PRIVS = SystemMessage.getSystemMessage(SystemMessageId.THE_AIRSHIP_NO_PRIVILEGES);
+	private static final SystemMessage SM_LICENSE_ALREADY_ACQUIRED = SystemMessage.getSystemMessage(SystemMessageId.THE_AIRSHIP_SUMMON_LICENSE_ALREADY_ACQUIRED);
 	
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
diff --git a/datapack_development/data/scripts/village_master/9002_SubClassCertification/__init__.py b/datapack_development/data/scripts/village_master/9002_SubClassCertification/__init__.py
index 0ecffbf2bd0a9505b2813f6740dba55a66fe57d5..c34b7e6d1a4c62afb8b4c849644d779f93ac459b 100644
--- a/datapack_development/data/scripts/village_master/9002_SubClassCertification/__init__.py
+++ b/datapack_development/data/scripts/village_master/9002_SubClassCertification/__init__.py
@@ -74,7 +74,7 @@ def getCertified(player, itemId, var):
     return ""
   item = player.getInventory().addItem("Quest", itemId, 1, player, player.getTarget())
   st.saveGlobalQuestVar(var,str(item.getObjectId()))
-  smsg = SystemMessage(SystemMessageId.EARNED_ITEM)
+  smsg = SystemMessage.getSystemMessage(SystemMessageId.EARNED_ITEM)
   smsg.addItemName(item)
   player.sendPacket(smsg)
   return