diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatAll.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatAll.java
index 4d52ef79ab8ff8b2fa5ed4a052ba6aeebf60fa8c..75519e52adaa33f34fce48eb3a0c30f1eae252ec 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatAll.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatAll.java
@@ -104,7 +104,7 @@ public class ChatAll implements IChatHandler
 			}
 			else
 			{
-				CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getAppearance().getVisibleName(), text);
+				CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getAppearance().getVisibleName(), ChatTranslationTool.traslate(text));
 				Collection<L2PcInstance> plrs = activeChar.getKnownList().getKnownPlayers().values();
 				for (L2PcInstance player : plrs)
 				{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatAlliance.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatAlliance.java
index 02199326afb78193f134d827015670eab6f3e223..c6acf9e27c8841afa97b5f0bca710d4731065b7e 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatAlliance.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatAlliance.java
@@ -46,7 +46,7 @@ public class ChatAlliance implements IChatHandler
 				return;
 			}
 			
-			CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
+			CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text));
 			activeChar.getClan().broadcastToOnlineAllyMembers(cs);
 		}
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatBattlefield.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatBattlefield.java
index 2f99e8db07bcbe07fe4306d1dc116a3d009a941d..bc89861e4d30138fc017fe0b05fdee591f41e1c3 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatBattlefield.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatBattlefield.java
@@ -52,7 +52,7 @@ public class ChatBattlefield implements IChatHandler
 				return;
 			}
 			
-			CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
+			CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text));
 			for (L2PcInstance player : L2World.getInstance().getAllPlayersArray())
 			{
 				if (player.getSiegeSide() == activeChar.getSiegeSide())
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatClan.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatClan.java
index 21b01fd52fe504949759df1aeb4f1566664bce87..5bfebecb25ed76f59324ab9a856d2a512e901c1e 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatClan.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatClan.java
@@ -50,7 +50,7 @@ public class ChatClan implements IChatHandler
 				return;
 			}
 			
-			CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
+			CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text));
 			activeChar.getClan().broadcastCSToOnlineMembers(cs, activeChar);
 		}
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatHeroVoice.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatHeroVoice.java
index 625f5ca0995bf3f32b8a87c9d52bb9d0a45981f1..e6b7c9c63f1984e58f1e276b6baaf9b6f4f779db 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatHeroVoice.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatHeroVoice.java
@@ -58,8 +58,8 @@ public class ChatHeroVoice implements IChatHandler
 				activeChar.sendMessage("Action failed. Heroes are only able to speak in the global channel once every 10 seconds.");
 				return;
 			}
-			CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
 			
+			CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text));
 			for (L2PcInstance player : L2World.getInstance().getAllPlayersArray())
 			{
 				if ((player != null) && !BlockList.isBlocked(player, activeChar))
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatParty.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatParty.java
index 269f67eae672a29b58e9ff77758f00704d5f775e..210df190dd059437b508329e6f8c330f087123cc 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatParty.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatParty.java
@@ -50,7 +50,7 @@ public class ChatParty implements IChatHandler
 				return;
 			}
 			
-			CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
+			CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text));
 			activeChar.getParty().broadcastCreatureSay(cs, activeChar);
 		}
 	}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyMatchRoom.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyMatchRoom.java
index 272da61c22698b8270ef88da8a9be38a92db4984..fd810dc8fd1eb2d3ddb3aca78fec370c689e8353 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyMatchRoom.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyMatchRoom.java
@@ -55,7 +55,7 @@ public class ChatPartyMatchRoom implements IChatHandler
 					return;
 				}
 				
-				CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
+				CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text));
 				for (L2PcInstance _member : _room.getPartyMembers())
 				{
 					_member.sendPacket(cs);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyRoomAll.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyRoomAll.java
index d8dcf5eb9d0a970a76764b205f17fda7cea255d4..e0b891b274039cf9fc7d806e007a95abaf120917 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyRoomAll.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyRoomAll.java
@@ -52,7 +52,7 @@ public class ChatPartyRoomAll implements IChatHandler
 					return;
 				}
 				
-				CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
+				CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text));
 				activeChar.getParty().getCommandChannel().broadcastCreatureSay(cs, activeChar);
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyRoomCommander.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyRoomCommander.java
index 955bf826e091e0201b40f3e6c2c35c84ae606583..87477370d7aa23753873cc8c246e50098b845082 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyRoomCommander.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPartyRoomCommander.java
@@ -52,7 +52,7 @@ public class ChatPartyRoomCommander implements IChatHandler
 					return;
 				}
 				
-				CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
+				CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text));
 				activeChar.getParty().getCommandChannel().broadcastCreatureSay(cs, activeChar);
 			}
 		}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPetition.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPetition.java
index 7e3d0f1166c6b8acd0855e87f41886c27cbe4050..3dd64c0ef8b7cb8ce1d51f58e5150a7b023205db 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPetition.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatPetition.java
@@ -55,7 +55,7 @@ public class ChatPetition implements IChatHandler
 			return;
 		}
 		
-		PetitionManager.getInstance().sendActivePetitionMessage(activeChar, text);
+		PetitionManager.getInstance().sendActivePetitionMessage(activeChar, ChatTranslationTool.traslate(text));
 	}
 	
 	/**
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatShout.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatShout.java
index 62c0aeb6a3fefdfbcb130929b4e2ff31fbc73d8f..7a3746c4053c69b2346182930a141293c468dcc8 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatShout.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatShout.java
@@ -52,7 +52,7 @@ public class ChatShout implements IChatHandler
 			return;
 		}
 		
-		CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
+		CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text));
 		
 		L2PcInstance[] pls = L2World.getInstance().getAllPlayersArray();
 		
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTell.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTell.java
index 023442f6e6d1892113fe5b7c5a258a38f441aaf4..7c5d8d678a4193cc6015a60db4505c9d5ee8190c 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTell.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTell.java
@@ -63,7 +63,7 @@ public class ChatTell implements IChatHandler
 			return;
 		}
 		
-		CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
+		CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text));
 		L2PcInstance receiver = null;
 		
 		receiver = L2World.getInstance().getPlayer(target);
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTrade.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTrade.java
index 1a30ca11d71f39080025ce216ec83c9539d83bee..59dbc2f7e87584f5864e682dd42d591a1cf4513e 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTrade.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTrade.java
@@ -52,7 +52,7 @@ public class ChatTrade implements IChatHandler
 			return;
 		}
 		
-		CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
+		CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), ChatTranslationTool.traslate(text));
 		
 		L2PcInstance[] pls = L2World.getInstance().getAllPlayersArray();
 		
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTranslationTool.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTranslationTool.java
new file mode 100644
index 0000000000000000000000000000000000000000..96fde80d5006d2f0ec70a03c6e1377f08eb75a8e
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/chathandlers/ChatTranslationTool.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2004-2013 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * L2J DataPack is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package handlers.chathandlers;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.l2jserver.util.Rnd;
+
+/**
+ * Translation tool.
+ * @author Zoey76
+ */
+public class ChatTranslationTool
+{
+	private static final List<Character> TRANSLATION_TABLE = Arrays.asList('@', '8', '(', '9', '3', 'F', '6', 'h', '|', 'j', 'k', 'L', 'm', 'n', '0', 'p', 'q', 'R', '$', '7', 'u', 'v', 'W', '%', 'y', 'z');
+	
+	protected static String traslate(String text)
+	{
+		final StringBuilder result = new StringBuilder(text.length() + 10);
+		Character x;
+		for (char c : text.toCharArray())
+		{
+			x = getChar(c);
+			if (Character.isLetter(x) && Rnd.nextBoolean())
+			{
+				x = Character.isUpperCase(x) ? Character.toLowerCase(x) : Character.toUpperCase(x);
+			}
+			result.append(x);
+		}
+		return result.toString();
+	}
+	
+	private static final Character getChar(char c)
+	{
+		int index = -1;
+		if ((c > 96) && (c < 123))
+		{
+			index = c - 97;
+		}
+		else if ((c > 64) && (c < 91))
+		{
+			index = c - 65;
+		}
+		return index < 0 ? c : TRANSLATION_TABLE.get(index);
+	}
+}
\ No newline at end of file