Index: /trunk/src/shared/Common.h
===================================================================
--- /trunk/src/shared/Common.h (revision 102)
+++ /trunk/src/shared/Common.h (revision 112)
@@ -170,5 +170,6 @@
     SEC_MODERATOR      = 1,
     SEC_GAMEMASTER     = 2,
-    SEC_ADMINISTRATOR  = 3
+    SEC_ADMINISTRATOR  = 3,
+	SEC_CONSOLE        = 4                                  // must be always last in list, accounts must have less security level always also
 };
 
Index: /trunk/src/game/PlayerDump.cpp
===================================================================
--- /trunk/src/game/PlayerDump.cpp (revision 102)
+++ /trunk/src/game/PlayerDump.cpp (revision 112)
@@ -27,5 +27,5 @@
 
 // Character Dump tables
-#define DUMP_TABLE_COUNT 20
+#define DUMP_TABLE_COUNT 19
 
 struct DumpTable
@@ -259,9 +259,6 @@
 
 // Writing - High-level functions
-bool PlayerDumpWriter::DumpTable(std::string& dump, uint32 guid, char const*tableFrom, char const*tableTo, DumpTableType type)
-{
-    if (!tableFrom || !tableTo)
-        return false;
-
+void PlayerDumpWriter::DumpTable(std::string& dump, uint32 guid, char const*tableFrom, char const*tableTo, DumpTableType type)
+{
     GUIDs const* guids = NULL;
     char const* fieldname = NULL;
@@ -281,5 +278,5 @@
     // for guid set stop if set is empty
     if(guids && guids->empty())
-        return true;                                        // nothing to do
+        return;                                        // nothing to do
 
     // setup for guids case start position
@@ -299,5 +296,5 @@
         QueryResult *result = CharacterDatabase.PQuery("SELECT * FROM %s WHERE %s", tableFrom, wherestr.c_str());
         if(!result)
-            return false;
+            return;
 
         do
@@ -329,6 +326,4 @@
     }
     while(guids && guids_itr != guids->end());              // not set case iterate single time, set case iterate for all guids
-
-    return true;
 }
 
@@ -339,5 +334,5 @@
         DumpTable(dump, guid, dumpTables[i].name, dumpTables[i].name, dumpTables[i].type);
 
-    // TODO: Add instance/group/gifts..
+    // TODO: Add instance/group..
     // TODO: Add a dump level option to skip some non-important tables
 
@@ -345,8 +340,9 @@
 }
 
-bool PlayerDumpWriter::WriteDump(std::string file, uint32 guid)
+DumpReturn PlayerDumpWriter::WriteDump(std::string file, uint32 guid)
 {
     FILE *fout = fopen(file.c_str(), "w");
-    if (!fout) { sLog.outError("Failed to open file!\r\n"); return false; }
+    if (!fout)
+		return DUMP_FILE_OPEN_ERROR;
 
     std::string dump = GetDump(guid);
@@ -354,11 +350,11 @@
     fprintf(fout,"%s\n",dump.c_str());
     fclose(fout);
-    return true;
+    return DUMP_SUCCESS;
 }
 
 // Reading - High-level functions
-#define ROLLBACK {CharacterDatabase.RollbackTransaction(); fclose(fin); return false;}
-
-bool PlayerDumpReader::LoadDump(std::string file, uint32 account, std::string name, uint32 guid)
+#define ROLLBACK(DR) {CharacterDatabase.RollbackTransaction(); fclose(fin); return (DR);}
+
+DumpReturn PlayerDumpReader::LoadDump(std::string file, uint32 account, std::string name, uint32 guid)
 {
     // check character count
@@ -373,11 +369,10 @@
 
             if (charcount >= 10)
-            {
-                return false;
-            }
+                return DUMP_TOO_MANY_CHARS;
         }
     }
     FILE *fin = fopen(file.c_str(), "r");
-    if(!fin) return false;
+    if(!fin)
+		return DUMP_FILE_OPEN_ERROR;
 
     QueryResult * result = NULL;
@@ -435,6 +430,5 @@
         {
             if(feof(fin)) break;
-            sLog.outError("LoadPlayerDump: File read error!");
-            ROLLBACK;
+            ROLLBACK(DUMP_FILE_BROKEN);
         }
 
@@ -450,5 +444,5 @@
         {
             sLog.outError("LoadPlayerDump: Can't extract table name from line: '%s'!", line.c_str());
-            ROLLBACK;
+            ROLLBACK(DUMP_FILE_BROKEN);
         }
 
@@ -467,5 +461,5 @@
         {
             sLog.outError("LoadPlayerDump: Unknown table: '%s'!", tn.c_str());
-            ROLLBACK;
+            ROLLBACK(DUMP_FILE_BROKEN);
         }
 
@@ -474,18 +468,28 @@
         {
             case DTT_CHAR_TABLE:
-                if(!changenth(line, 1, newguid)) ROLLBACK;
+                if(!changenth(line, 1, newguid))
+					ROLLBACK(DUMP_FILE_BROKEN);
                 break;
 
             case DTT_CHARACTER:                             // character t.
             {
-                if(!changenth(line, 1, newguid)) ROLLBACK;
+                if(!changenth(line, 1, newguid))
+					ROLLBACK(DUMP_FILE_BROKEN);
 
                 // guid, data field:guid, items
-                if(!changenth(line, 2, chraccount)) ROLLBACK;
+                if(!changenth(line, 2, chraccount))
+					ROLLBACK(DUMP_FILE_BROKEN);
+
                 std::string vals = getnth(line, 3);
-                if(!changetoknth(vals, OBJECT_FIELD_GUID+1, newguid)) ROLLBACK;
+                if(!changetoknth(vals, OBJECT_FIELD_GUID+1, newguid))
+					ROLLBACK(DUMP_FILE_BROKEN);
+
                 for(uint16 field = PLAYER_FIELD_INV_SLOT_HEAD; field < PLAYER_FARSIGHT; field++)
-                    if(!changetokGuid(vals, field+1, items, objmgr.m_hiItemGuid, true)) ROLLBACK;
-                if(!changenth(line, 3, vals.c_str())) ROLLBACK;
+                    if(!changetokGuid(vals, field+1, items, objmgr.m_hiItemGuid, true))
+						ROLLBACK(DUMP_FILE_BROKEN);
+
+                if(!changenth(line, 3, vals.c_str()))
+					ROLLBACK(DUMP_FILE_BROKEN);
+
                 if (name == "")
                 {
@@ -499,8 +503,10 @@
                         delete result;
                                                             // rename on login: `at_login` field 30 in raw field list
-                        if(!changenth(line, 30, "1")) ROLLBACK;
+                        if(!changenth(line, 30, "1"))
+							ROLLBACK(DUMP_FILE_BROKEN);
                     }
                 }
-                else if(!changenth(line, 4, name.c_str())) ROLLBACK;
+                else if(!changenth(line, 4, name.c_str()))
+					ROLLBACK(DUMP_FILE_BROKEN);
 
                 break;
@@ -508,9 +514,12 @@
             case DTT_INVENTORY:                             // character_inventory t.
             {
-                if(!changenth(line, 1, newguid)) ROLLBACK;
+                if(!changenth(line, 1, newguid))
+					ROLLBACK(DUMP_FILE_BROKEN);
 
                 // bag, item
-                if(!changeGuid(line, 2, items, objmgr.m_hiItemGuid, true)) ROLLBACK;
-                if(!changeGuid(line, 4, items, objmgr.m_hiItemGuid)) ROLLBACK;
+                if(!changeGuid(line, 2, items, objmgr.m_hiItemGuid, true))
+					ROLLBACK(DUMP_FILE_BROKEN);
+				if(!changeGuid(line, 4, items, objmgr.m_hiItemGuid))
+					ROLLBACK(DUMP_FILE_BROKEN);
                 break;
             }
@@ -518,10 +527,16 @@
             {
                 // item, owner, data field:item, owner guid
-                if(!changeGuid(line, 1, items, objmgr.m_hiItemGuid)) ROLLBACK;
-                if(!changenth(line, 2, newguid)) ROLLBACK;
+                if(!changeGuid(line, 1, items, objmgr.m_hiItemGuid))
+					ROLLBACK(DUMP_FILE_BROKEN);
+				if(!changenth(line, 2, newguid))
+					ROLLBACK(DUMP_FILE_BROKEN);
+
                 std::string vals = getnth(line,3);
-                if(!changetokGuid(vals, OBJECT_FIELD_GUID+1, items, objmgr.m_hiItemGuid)) ROLLBACK;
-                if(!changetoknth(vals, ITEM_FIELD_OWNER+1, newguid)) ROLLBACK;
-                if(!changenth(line, 3, vals.c_str())) ROLLBACK;
+                if(!changetokGuid(vals, OBJECT_FIELD_GUID+1, items, objmgr.m_hiItemGuid))
+					ROLLBACK(DUMP_FILE_BROKEN);
+				if(!changetoknth(vals, ITEM_FIELD_OWNER+1, newguid))
+					ROLLBACK(DUMP_FILE_BROKEN);
+				if(!changenth(line, 3, vals.c_str()))
+					ROLLBACK(DUMP_FILE_BROKEN);
                 break;
             }
@@ -529,6 +544,8 @@
             {
                 // guid,item_guid,
-                if(!changenth(line, 1, newguid)) ROLLBACK;
-                if(!changeGuid(line, 2, items, objmgr.m_hiItemGuid)) ROLLBACK;
+                if(!changenth(line, 1, newguid))
+					ROLLBACK(DUMP_FILE_BROKEN);
+				if(!changeGuid(line, 2, items, objmgr.m_hiItemGuid))
+					ROLLBACK(DUMP_FILE_BROKEN);
                 break;
             }
@@ -552,6 +569,8 @@
 
                 // item, entry, owner, ...
-                if(!changenth(line, 1, newpetid)) ROLLBACK;
-                if(!changenth(line, 3, newguid)) ROLLBACK;
+                if(!changenth(line, 1, newpetid))
+					ROLLBACK(DUMP_FILE_BROKEN);
+				if(!changenth(line, 3, newguid))
+					ROLLBACK(DUMP_FILE_BROKEN);
 
                 break;
@@ -563,9 +582,11 @@
                 // lookup currpetid and match to new inserted pet id
                 std::map<uint32, uint32> :: const_iterator petids_iter = petids.find(atoi(currpetid));
-                if(petids_iter == petids.end()) ROLLBACK;   // couldn't find new inserted id
+                if(petids_iter == petids.end())             // couldn't find new inserted id
+					ROLLBACK(DUMP_FILE_BROKEN);
 
                 snprintf(newpetid, 20, "%d", petids_iter->second);
 
-                if(!changenth(line, 1, newpetid)) ROLLBACK;
+                if(!changenth(line, 1, newpetid))
+					ROLLBACK(DUMP_FILE_BROKEN);
 
                 break;
@@ -574,6 +595,8 @@
             {
                 // id,messageType,stationery,sender,receiver
-                if(!changeGuid(line, 1, mails, objmgr.m_mailid)) ROLLBACK;
-                if(!changenth(line, 5, newguid)) ROLLBACK;
+                if(!changeGuid(line, 1, mails, objmgr.m_mailid))
+					ROLLBACK(DUMP_FILE_BROKEN);
+				if(!changenth(line, 5, newguid))
+					ROLLBACK(DUMP_FILE_BROKEN);
                 break;
             }
@@ -581,7 +604,10 @@
             {
                 // mail_id,item_guid,item_template,receiver
-                if(!changeGuid(line, 1, mails, objmgr.m_mailid)) ROLLBACK;
-                if(!changeGuid(line, 2, items, objmgr.m_hiItemGuid)) ROLLBACK;
-                if(!changenth(line, 4, newguid)) ROLLBACK;
+                if(!changeGuid(line, 1, mails, objmgr.m_mailid))
+					ROLLBACK(DUMP_FILE_BROKEN);
+				if(!changeGuid(line, 2, items, objmgr.m_hiItemGuid))
+					ROLLBACK(DUMP_FILE_BROKEN);
+				if(!changenth(line, 4, newguid))
+					ROLLBACK(DUMP_FILE_BROKEN);
                 break;
             }
@@ -591,5 +617,6 @@
         }
 
-        if(!CharacterDatabase.Execute(line.c_str())) ROLLBACK;
+        if(!CharacterDatabase.Execute(line.c_str()))
+			ROLLBACK(DUMP_FILE_BROKEN);
     }
 
@@ -604,4 +631,4 @@
     fclose(fin);
 
-    return true;
-}
+    return DUMP_SUCCESS;
+}
Index: /trunk/src/game/Chat.h
===================================================================
--- /trunk/src/game/Chat.h (revision 102)
+++ /trunk/src/game/Chat.h (revision 112)
@@ -36,4 +36,5 @@
         const char *       Name;
         uint32             SecurityLevel;                   // function pointer required correct align (use uint32)
+        bool               AllowConsole;
         bool (ChatHandler::*Handler)(const char* args);
         std::string        Help;
@@ -62,7 +63,7 @@
         static char* LineFromMessage(char*& pos) { char* start = strtok(pos,"\n"); pos = NULL; return start; }
 
-        const char *GetTrinityString(int32 entry);
-
-        void SendSysMessage(          const char *str);
+        virtual const char *GetTrinityString(int32 entry) const;
+
+        virtual void SendSysMessage(  const char *str);
         void SendSysMessage(          int32     entry);
         void PSendSysMessage(         const char *format, ...) ATTR_PRINTF(2,3);
@@ -72,5 +73,10 @@
 
     protected:
+		explicit ChatHandler() : m_session(NULL) {}      // for CLI subclass
+
         bool hasStringAbbr(const char* name, const char* part);
+
+		virtual bool isAvailable(ChatCommand const& cmd) const;
+
         void SendGlobalSysMessage(const char *str);
 
@@ -81,12 +87,20 @@
         ChatCommand* getCommandTable();
 
+		bool HandleAccountCommand(const char* args);
+		bool HandleAccountCreateCommand(const char* args);
+		bool HandleAccountDeleteCommand(const char* args);
+		bool HandleAccountOnlineListCommand(const char* args);
+		bool HandleAccountSetAddonCommand(const char* args);
+		bool HandleAccountSetGmLevelCommand(const char* args);
+		bool HandleAccountSetPasswordCommand(const char* args);
+
         bool HandleHelpCommand(const char* args);
         bool HandleCommandsCommand(const char* args);
-        bool HandleAcctCommand(const char* args);
         bool HandleStartCommand(const char* args);
         bool HandleInfoCommand(const char* args);
         bool HandleDismountCommand(const char* args);
         bool HandleSaveCommand(const char* args);
-        bool HandleGMListCommand(const char* args);
+        bool HandleGMListIngameCommand(const char* args);
+		bool HandleGMListFullCommand(const char* args);
 
         bool HandleNamegoCommand(const char* args);
@@ -209,4 +223,10 @@
         bool HandleInstanceSaveDataCommand(const char * args);
 
+		bool HandleServerCorpsesCommand(const char* args);
+		bool HandleServerExitCommand(const char* args);
+		bool HandleServerMotdCommand(const char* args);
+		bool HandleServerSetMotdCommand(const char* args);
+		bool HandleServerSetLogLevelCommand(const char* args);
+
         bool HandleAddHonorCommand(const char* args);
         bool HandleHonorAddKillCommand(const char* args);
@@ -258,8 +278,17 @@
         bool HandleListFreezeCommand(const char* args);
 
-        bool HandleBanCommand(const char* args);
-        bool HandleUnBanCommand(const char* args);
-        bool HandleBanInfoCommand(const char* args);
-        bool HandleBanListCommand(const char* args);
+		bool HandleCharacterDeleteCommand(const char* args);
+        bool HandleBanAccountCommand(const char* args);
+		bool HandleBanCharacterCommand(const char* args);
+		bool HandleBanIPCommand(const char* args);
+		bool HandleUnBanAccountCommand(const char* args);
+		bool HandleUnBanCharacterCommand(const char* args);
+		bool HandleUnBanIPCommand(const char* args);
+		bool HandleBanInfoAccountCommand(const char* args);
+		bool HandleBanInfoCharacterCommand(const char* args);
+		bool HandleBanInfoIPCommand(const char* args);
+		bool HandleBanListAccountCommand(const char* args);
+		bool HandleBanListCharacterCommand(const char* args);
+		bool HandleBanListIPCommand(const char* args);
         bool HandleIdleRestartCommand(const char* args);
         bool HandleIdleShutDownCommand(const char* args);
@@ -388,4 +417,5 @@
         bool HandleComeToMeCommand(const char *args);
         bool HandleCombatStopCommand(const char *args);
+		bool HandleSendMessageCommand(const char * args);
         bool HandleFlushArenaPointsCommand(const char *args);
 
@@ -416,18 +446,38 @@
         GameObject* GetObjectGlobalyWithGuidOrNearWithDbGuid(uint32 lowguid,uint32 entry);
 
-        WorldSession * m_session;
-
         // Utility methods for commands
         void ShowTicket(uint64 guid, char const* text, char const* time);
         uint32 GetTicketIDByNum(uint32 num);
         bool LookupPlayerSearchCommand(QueryResult* result, int32 limit);
+		bool HandleBanListHelper(QueryResult* result);
+		bool HandleBanHelper(BanMode mode,char const* args);
+		bool HandleBanInfoHelper(uint32 accountid, char const* accountname);
+		bool HandleUnBanHelper(BanMode mode,char const* args);
 
         void SetSentErrorMessage(bool val){ sentErrorMessage = val;};
     private:
+		WorldSession * m_session;                           // != NULL for chat command call and NULL for CLI command
+
         // common global flag
         static bool load_command_table;
         bool sentErrorMessage;
 };
+
+class CliHandler : public ChatHandler
+{
+	public:
+		typedef void Print(char const*);
+		explicit CliHandler(Print* zprint) : m_print(zprint) {}
+
+		// overwrite functions
+		const char *GetTrinityString(int32 entry) const;
+		bool isAvailable(ChatCommand const& cmd) const;
+		void SendSysMessage(const char *str);
+
+	private:
+		Print* m_print;
+};
+
+char const *fmtstring( char const *format, ... );
+
 #endif
-
-char const *fmtstring( char const *format, ... );
Index: /trunk/src/game/Level1.cpp
===================================================================
--- /trunk/src/game/Level1.cpp (revision 102)
+++ /trunk/src/game/Level1.cpp (revision 112)
@@ -1693,5 +1693,5 @@
 bool ChatHandler::HandleLookupAreaCommand(const char* args)
 {
-    if(!*args)
+    if (!*args)
         return false;
 
@@ -1699,5 +1699,5 @@
     std::wstring wnamepart;
 
-    if(!Utf8toWStr(namepart,wnamepart))
+    if (!Utf8toWStr (namepart,wnamepart))
         return false;
 
@@ -1705,41 +1705,44 @@
 
     // converting string that we try to find to lower case
-    wstrToLower( wnamepart );
+    wstrToLower (wnamepart);
 
     // Search in AreaTable.dbc
-    for (uint32 areaflag = 0; areaflag < sAreaStore.GetNumRows(); ++areaflag)
-    {
-        AreaTableEntry const *areaEntry = sAreaStore.LookupEntry(areaflag);
-        if(areaEntry)
-        {
-            int loc = m_session->GetSessionDbcLocale();
+    for (uint32 areaflag = 0; areaflag < sAreaStore.GetNumRows (); ++areaflag)
+    {
+        AreaTableEntry const *areaEntry = sAreaStore.LookupEntry (areaflag);
+        if (areaEntry)
+        {
+            int loc = m_session ? m_session->GetSessionDbcLocale () : sWorld.GetDefaultDbcLocale();
             std::string name = areaEntry->area_name[loc];
-            if(name.empty())
+            if (name.empty())
                 continue;
 
-            if(!Utf8FitTo(name, wnamepart))
+            if (!Utf8FitTo (name, wnamepart))
             {
                 loc = 0;
                 for(; loc < MAX_LOCALE; ++loc)
                 {
-                    if(loc==m_session->GetSessionDbcLocale())
+                    if (m_session && loc==m_session->GetSessionDbcLocale ())
                         continue;
 
                     name = areaEntry->area_name[loc];
-                    if(name.empty())
+                    if (name.empty ())
                         continue;
 
-                    if (Utf8FitTo(name, wnamepart))
+                    if (Utf8FitTo (name, wnamepart))
                         break;
                 }
             }
 
-            if(loc < MAX_LOCALE)
+            if (loc < MAX_LOCALE)
             {
                 // send area in "id - [name]" format
                 std::ostringstream ss;
-                ss << areaEntry->ID << " - |cffffffff|Harea:" << areaEntry->ID << "|h[" << name << " " << localeNames[loc]<< "]|h|r";
-
-                SendSysMessage(ss.str().c_str());
+                if (m_session)
+					ss << areaEntry->ID << " - |cffffffff|Harea:" << areaEntry->ID << "|h[" << name << " " << localeNames[loc]<< "]|h|r";
+				else
+					ss << areaEntry->ID << " - " << name << " " << localeNames[loc];
+
+                SendSysMessage (ss.str ().c_str());
 
                 ++counter;
@@ -1747,6 +1750,6 @@
         }
     }
-    if (counter == 0)                                       // if counter == 0 then we found nth
-        SendSysMessage(LANG_COMMAND_NOAREAFOUND);
+    if (counter == 0)                                      // if counter == 0 then we found nth
+        SendSysMessage (LANG_COMMAND_NOAREAFOUND);
     return true;
 }
@@ -1761,4 +1764,5 @@
         return false;
     }
+
     char const* str = strtok((char*)args, " ");
     if(!str)
@@ -1774,7 +1778,7 @@
     wstrToLower( wnamepart );
 
-    GameTeleMap const & teleMap = objmgr.GetGameTeleMap();
-
     std::ostringstream reply;
+
+	GameTeleMap const & teleMap = objmgr.GetGameTeleMap();
     for(GameTeleMap::const_iterator itr = teleMap.begin(); itr != teleMap.end(); ++itr)
     {
@@ -1784,9 +1788,8 @@
             continue;
 
-        reply << "  |cffffffff|Htele:";
-        reply << itr->first;
-        reply << "|h[";
-        reply << tele->name;
-        reply << "]|h|r\n";
+        if (m_session)
+			reply << "  |cffffffff|Htele:" << itr->first << "|h[" << tele->name << "]|h|r\n";
+		else
+			reply << "  " << itr->first << " " << tele->name << "\n";
     }
 
@@ -2073,6 +2076,11 @@
         PSendSysMessage(LANG_TELEPORTING_TO, chr->GetName(),"", tele->name.c_str());
 
-        if (m_session->GetPlayer()->IsVisibleGloballyFor(chr))
-            ChatHandler(chr).PSendSysMessage(LANG_TELEPORTED_TO_BY, m_session->GetPlayer()->GetName());
+        if (m_session)
+		{
+			if(m_session->GetPlayer()->IsVisibleGloballyFor(chr))
+				ChatHandler(chr).PSendSysMessage(LANG_TELEPORTED_TO_BY, m_session->GetPlayer()->GetName());
+		}
+		else
+			ChatHandler(chr).SendSysMessage(LANG_TELEPORTED_TO_BY_CONSOLE);
 
         // stop flight if need
Index: /trunk/src/game/Level3.cpp
===================================================================
--- /trunk/src/game/Level3.cpp (revision 102)
+++ /trunk/src/game/Level3.cpp (revision 112)
@@ -53,4 +53,5 @@
 #include "InstanceSaveMgr.h"
 #include "InstanceData.h"
+#include "AccountMgr.h"
 
 //reload commands
@@ -682,5 +683,5 @@
 }
 
-bool ChatHandler::HandleSecurityCommand(const char* args)
+bool ChatHandler::HandleAccountSetGmLevelCommand(const char* args)
 {
     char* arg1 = strtok((char*)args, " ");
@@ -688,48 +689,39 @@
         return false;
 
-    char* arg2 = 0;
-
-    std::string targetName;
+    char* arg2 = strtok(NULL, " ");
+
+    std::string targetAccountName;
     uint32 targetAccountId = 0;
     uint32 targetSecurity = 0;
 
+	/// only target player different from self allowed (if targetPlayer!=NULL then not console)
     Player* targetPlayer = getSelectedPlayer();
-    if(targetPlayer)
-    {
-        targetName = targetPlayer->GetName();
+    if(targetPlayer && m_session->GetPlayer()!=targetPlayer)
+    {
+        /// wrong command syntax or unexpected targeting
+		if(arg2)
+			return false;
+
         targetAccountId = targetPlayer->GetSession()->GetAccountId();
         targetSecurity = targetPlayer->GetSession()->GetSecurity();
-        arg2 = arg1;
+        if(!accmgr.GetName(targetAccountId,targetAccountName))
+		{
+			PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,targetAccountName.c_str());
+			SetSentErrorMessage(true);
+			return false;
+		}
     }
     else
     {
-        targetName = arg1;
-        if(!normalizePlayerName(targetName))
+        targetAccountName = arg1;
+        if(!AccountMgr::normilizeString(targetAccountName))
         {
-            SendSysMessage(LANG_PLAYER_NOT_FOUND);
+            PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,targetAccountName.c_str());
             SetSentErrorMessage(true);
             return false;
         }
 
-        targetPlayer = ObjectAccessor::Instance().FindPlayerByName(targetName.c_str());
-        if(targetPlayer)
-        {
-            targetAccountId = targetPlayer->GetSession()->GetAccountId();
-            targetSecurity = targetPlayer->GetSession()->GetSecurity();
-        }
-        else
-        {
-            uint64 targetGUID = objmgr.GetPlayerGUIDByName(targetName.c_str());
-            if(!targetGUID)
-            {
-                SendSysMessage(LANG_PLAYER_NOT_FOUND);
-                SetSentErrorMessage(true);
-                return false;
-            }
-            targetAccountId = objmgr.GetPlayerAccountIdByGUID(targetGUID);
-            targetSecurity = accmgr.GetSecurity(targetAccountId);
-        }
-
-        arg2 = strtok(NULL, " ");
+        targetAccountId = accmgr.GetId(targetAccountName);
+		targetSecurity = accmgr.GetSecurity(targetAccountId);
     }
 
@@ -742,6 +734,10 @@
     }
 
-    // can set security level only for target with less security and to less security that we have
-    if(targetSecurity >= m_session->GetSecurity() || uint32(gm) >= m_session->GetSecurity() )
+    /// m_session==NULL only for console
+	uint32 plSecurity = m_session ? m_session->GetSecurity() : SEC_CONSOLE;
+
+	/// can set security level only for target with less security and to less security that we have
+	/// This is also reject self apply in fact
+	if(targetSecurity >= plSecurity || uint32(gm) >= plSecurity )
     {
         SendSysMessage(LANG_YOURS_SECURITY_IS_LOW);
@@ -752,14 +748,87 @@
     if(targetPlayer)
     {
-        if( targetPlayer != m_session->GetPlayer() )
-            ChatHandler(targetPlayer).PSendSysMessage(LANG_YOURS_SECURITY_CHANGED,m_session->GetPlayer()->GetName(), gm);
-
+        ChatHandler(targetPlayer).PSendSysMessage(LANG_YOURS_SECURITY_CHANGED,m_session->GetPlayer()->GetName(), gm);
         targetPlayer->GetSession()->SetSecurity(gm);
     }
 
-    PSendSysMessage(LANG_YOU_CHANGE_SECURITY, targetName.c_str(), gm);
+    PSendSysMessage(LANG_YOU_CHANGE_SECURITY, targetAccountName.c_str(), gm);
     loginDatabase.PExecute("UPDATE account SET gmlevel = '%i' WHERE id = '%u'", gm, targetAccountId);
 
     return true;
+}
+
+/// Set password for account
+bool ChatHandler::HandleAccountSetPasswordCommand(const char* args)
+{
+	if(!*args)
+		return false;
+
+	///- Get the command line arguments
+	char *szAccount = strtok ((char*)args," ");
+	char *szPassword1 =  strtok (NULL," ");
+	char *szPassword2 =  strtok (NULL," ");
+
+	if (!szAccount||!szPassword1 || !szPassword2)
+		return false;
+
+	std::string account_name = szAccount;
+	if(!AccountMgr::normilizeString(account_name))
+	{
+		PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+		SetSentErrorMessage(true);
+		return false;
+	}
+
+	uint32 targetAccountId = accmgr.GetId(account_name);
+	if (!targetAccountId)
+	{
+		PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+		SetSentErrorMessage(true);
+		return false;
+	}
+
+	uint32 targetSecurity = accmgr.GetSecurity(targetAccountId);
+
+	/// m_session==NULL only for console
+	uint32 plSecurity = m_session ? m_session->GetSecurity() : SEC_CONSOLE;
+
+	/// can set password only for target with less security
+	/// This is also reject self apply in fact
+	if (targetSecurity >= plSecurity)
+	{
+		SendSysMessage (LANG_YOURS_SECURITY_IS_LOW);
+		SetSentErrorMessage (true);
+		return false;
+	}
+
+	if (strcmp(szPassword1,szPassword2))
+	{
+		SendSysMessage (LANG_NEW_PASSWORDS_NOT_MATCH);
+		SetSentErrorMessage (true);
+		return false;
+	}
+
+	AccountOpResult result = accmgr.ChangePassword(targetAccountId, szPassword1);
+
+	switch(result)
+	{
+		case AOR_OK:
+			SendSysMessage(LANG_COMMAND_PASSWORD);
+			break;
+		case AOR_NAME_NOT_EXIST:
+			PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+			SetSentErrorMessage(true);
+			return false;
+		case AOR_PASS_TOO_LONG:
+			SendSysMessage(LANG_PASSWORD_TOO_LONG);
+			SetSentErrorMessage(true);
+			return false;
+		default:
+			SendSysMessage(LANG_COMMAND_NOTCHANGEPASSWORD);
+			SetSentErrorMessage(true);
+			return false;
+	}
+
+	return true;
 }
 
@@ -1977,8 +2046,14 @@
     if(!cId)
         return false;
+
     uint32 item_id = atol(cId);
-
-    ItemPrototype const* itemProto = item_id ? itemProto = objmgr.GetItemPrototype(item_id) : NULL;
-
+	if(!item_id)
+	{
+		PSendSysMessage(LANG_COMMAND_ITEMIDINVALID, item_id);
+		SetSentErrorMessage(true);
+		return false;
+	}
+
+	ItemPrototype const* itemProto = objmgr.GetItemPrototype(item_id);
     if(!itemProto)
     {
@@ -2136,5 +2211,44 @@
     }
 
-    if(inv_count+mail_count+auc_count == 0)
+    // guild bank case
+	uint32 guild_count = 0;
+	result=CharacterDatabase.PQuery("SELECT COUNT(item_entry) FROM guild_bank_item WHERE item_entry='%u'",item_id);
+	if(result)
+	{
+		guild_count = (*result)[0].GetUInt32();
+		delete result;
+	}
+
+	result=CharacterDatabase.PQuery(
+		//      0             1           2
+		"SELECT gi.item_guid, gi.guildid, guild.name "
+		"FROM guild_bank_item AS gi, guild WHERE gi.item_entry='%u' AND gi.guildid = guild.guildid LIMIT %u ",
+		item_id,uint32(count));
+
+	if(result)
+	{
+		do
+		{
+			Field *fields = result->Fetch();
+			uint32 item_guid = fields[0].GetUInt32();
+			uint32 guild_guid = fields[1].GetUInt32();
+			std::string guild_name = fields[2].GetCppString();
+
+			char const* item_pos = "[in guild bank]";
+
+			PSendSysMessage(LANG_ITEMLIST_GUILD,item_guid,guild_name.c_str(),guild_guid,item_pos);
+		} while (result->NextRow());
+
+		int64 res_count = result->GetRowCount();
+
+		delete result;
+
+		if(count > res_count)
+			count-=res_count;
+		else if(count)
+			count = 0;
+	}
+
+	if(inv_count+mail_count+auc_count+guild_count == 0)
     {
         SendSysMessage(LANG_COMMAND_NOITEMFOUND);
@@ -2143,5 +2257,5 @@
     }
 
-    PSendSysMessage(LANG_COMMAND_LISTITEMMESSAGE,item_id,inv_count+mail_count+auc_count,inv_count,mail_count,auc_count);
+    PSendSysMessage(LANG_COMMAND_LISTITEMMESSAGE,item_id,inv_count+mail_count+auc_count+guild_count,inv_count,mail_count,auc_count,guild_count);
 
     return true;
@@ -2153,5 +2267,5 @@
         return false;
 
-                                                            // number or [name] Shift-click form |color|Hgameobject_entry:go_id|h[name]|h|r
+    // number or [name] Shift-click form |color|Hgameobject_entry:go_id|h[name]|h|r
     char* cId = extractKeyFromLink((char*)args,"Hgameobject_entry");
     if(!cId)
@@ -2159,8 +2273,13 @@
 
     uint32 go_id = atol(cId);
+	if(!go_id)
+	{
+		PSendSysMessage(LANG_COMMAND_LISTOBJINVALIDID, go_id);
+		SetSentErrorMessage(true);
+		return false;
+	}
 
     GameObjectInfo const * gInfo = objmgr.GetGameObjectInfo(go_id);
-
-    if(!go_id || !gInfo)
+	if(!gInfo)
     {
         PSendSysMessage(LANG_COMMAND_LISTOBJINVALIDID, go_id);
@@ -2175,5 +2294,4 @@
         return false;
 
-    Player* pl = m_session->GetPlayer();
     QueryResult *result;
 
@@ -2186,6 +2304,13 @@
     }
 
-    result = WorldDatabase.PQuery("SELECT guid, position_x, position_y, position_z, map, (POW(position_x - '%f', 2) + POW(position_y - '%f', 2) + POW(position_z - '%f', 2)) AS order_ FROM gameobject WHERE id = '%u' ORDER BY order_ ASC LIMIT %u",
-        pl->GetPositionX(), pl->GetPositionY(), pl->GetPositionZ(),go_id,uint32(count));
+    if(m_session)
+	{
+		Player* pl = m_session->GetPlayer();
+		result = WorldDatabase.PQuery("SELECT guid, position_x, position_y, position_z, map, (POW(position_x - '%f', 2) + POW(position_y - '%f', 2) + POW(position_z - '%f', 2)) AS order_ FROM gameobject WHERE id = '%u' ORDER BY order_ ASC LIMIT %u",
+			pl->GetPositionX(), pl->GetPositionY(), pl->GetPositionZ(),go_id,uint32(count));
+	}
+	else
+		result = WorldDatabase.PQuery("SELECT guid, position_x, position_y, position_z, map FROM gameobject WHERE id = '%u' LIMIT %u",
+		go_id,uint32(count));
 
     if (result)
@@ -2200,5 +2325,8 @@
             int mapid = fields[4].GetUInt16();
 
-            PSendSysMessage(LANG_GO_LIST, guid, guid, gInfo->name, x, y, z, mapid);
+            if (m_session)
+				PSendSysMessage(LANG_GO_LIST_CHAT, guid, guid, gInfo->name, x, y, z, mapid);
+			else
+				PSendSysMessage(LANG_GO_LIST_CONSOLE, guid, gInfo->name, x, y, z, mapid);
         } while (result->NextRow());
 
@@ -2239,5 +2367,5 @@
                 continue;
 
-            PSendSysMessage(LANG_GO_LIST, guid, guid, gInfo->name, x, y, z, mapid);
+            PSendSysMessage(LANG_GO_LIST_CHAT, guid, guid, gInfo->name, x, y, z, mapid);
 
             ++count;
@@ -2294,5 +2422,5 @@
         return false;
 
-                                                            // number or [name] Shift-click form |color|Hcreature_entry:creature_id|h[name]|h|r
+    // number or [name] Shift-click form |color|Hcreature_entry:creature_id|h[name]|h|r
     char* cId = extractKeyFromLink((char*)args,"Hcreature_entry");
     if(!cId)
@@ -2300,8 +2428,13 @@
 
     uint32 cr_id = atol(cId);
+	if(!cr_id)
+	{
+		PSendSysMessage(LANG_COMMAND_INVALIDCREATUREID, cr_id);
+		SetSentErrorMessage(true);
+		return false;
+	}
 
     CreatureInfo const* cInfo = objmgr.GetCreatureTemplate(cr_id);
-
-    if(!cr_id || !cInfo)
+	if(!cInfo)
     {
         PSendSysMessage(LANG_COMMAND_INVALIDCREATUREID, cr_id);
@@ -2316,5 +2449,4 @@
         return false;
 
-    Player* pl = m_session->GetPlayer();
     QueryResult *result;
 
@@ -2327,6 +2459,13 @@
     }
 
-    result = WorldDatabase.PQuery("SELECT guid, position_x, position_y, position_z, map, (POW(position_x - '%f', 2) + POW(position_y - '%f', 2) + POW(position_z - '%f', 2)) AS order_ FROM creature WHERE id = '%u' ORDER BY order_ ASC LIMIT %u",
-        pl->GetPositionX(), pl->GetPositionY(), pl->GetPositionZ(), cr_id,uint32(count));
+    if(m_session)
+	{
+		Player* pl = m_session->GetPlayer();
+		result = WorldDatabase.PQuery("SELECT guid, position_x, position_y, position_z, map, (POW(position_x - '%f', 2) + POW(position_y - '%f', 2) + POW(position_z - '%f', 2)) AS order_ FROM creature WHERE id = '%u' ORDER BY order_ ASC LIMIT %u",
+			pl->GetPositionX(), pl->GetPositionY(), pl->GetPositionZ(), cr_id,uint32(count));
+	}
+	else
+		result = WorldDatabase.PQuery("SELECT guid, position_x, position_y, position_z, map FROM creature WHERE id = '%u' LIMIT %u",
+			cr_id,uint32(count));
 
     if (result)
@@ -2341,5 +2480,8 @@
             int mapid = fields[4].GetUInt16();
 
-            PSendSysMessage(LANG_CREATURE_LIST, guid, guid, cInfo->Name, x, y, z, mapid);
+            if  (m_session)
+				PSendSysMessage(LANG_CREATURE_LIST_CHAT, guid, guid, cInfo->Name, x, y, z, mapid);
+			else
+				PSendSysMessage(LANG_CREATURE_LIST_CONSOLE, guid, cInfo->Name, x, y, z, mapid);
         } while (result->NextRow());
 
@@ -2374,5 +2516,5 @@
             continue;
 
-        int loc_idx = m_session->GetSessionDbLocaleIndex();
+        int loc_idx = m_session ? m_session->GetSessionDbLocaleIndex() : objmgr.GetDBCLocaleIndex();
         if ( loc_idx >= 0 )
         {
@@ -2386,5 +2528,8 @@
                     if (Utf8FitTo(name, wnamepart))
                     {
-                        PSendSysMessage(LANG_ITEM_LIST, id, id, name.c_str());
+                        if (m_session)
+							PSendSysMessage(LANG_ITEM_LIST_CHAT, id, id, name.c_str());
+						else
+							PSendSysMessage(LANG_ITEM_LIST_CONSOLE, id, name.c_str());
                         ++counter;
                         continue;
@@ -2400,5 +2545,8 @@
         if (Utf8FitTo(name, wnamepart))
         {
-            PSendSysMessage(LANG_ITEM_LIST, id, id, name.c_str());
+            if (m_session)
+				PSendSysMessage(LANG_ITEM_LIST_CHAT, id, id, name.c_str());
+			else
+				PSendSysMessage(LANG_ITEM_LIST_CONSOLE, id, name.c_str());
             ++counter;
         }
@@ -2433,6 +2581,6 @@
         if(set)
         {
-            int loc = m_session->GetSessionDbcLocale();
-            std::string name = set->name[m_session->GetSessionDbcLocale()];
+            int loc = m_session ? m_session->GetSessionDbcLocale() : sWorld.GetDefaultDbcLocale();
+			std::string name = set->name[loc];
             if(name.empty())
                 continue;
@@ -2443,8 +2591,8 @@
                 for(; loc < MAX_LOCALE; ++loc)
                 {
-                    if(loc==m_session->GetSessionDbcLocale())
+                    if(m_session && loc==m_session->GetSessionDbcLocale())
                         continue;
 
-                    name = set->name[m_session->GetSessionDbcLocale()];
+                    name = set->name[loc];
                     if(name.empty())
                         continue;
@@ -2458,5 +2606,8 @@
             {
                 // send item set in "id - [namedlink locale]" format
-                PSendSysMessage(LANG_ITEMSET_LIST,id,id,name.c_str(),localeNames[loc]);
+                if (m_session)
+					PSendSysMessage(LANG_ITEMSET_LIST_CHAT,id,id,name.c_str(),localeNames[loc]);
+				else
+					PSendSysMessage(LANG_ITEMSET_LIST_CONSOLE,id,name.c_str(),localeNames[loc]);
                 ++counter;
             }
@@ -2470,14 +2621,9 @@
 bool ChatHandler::HandleLookupSkillCommand(const char* args)
 {
-    Player* target = getSelectedPlayer();
-    if(!target)
-    {
-        SendSysMessage(LANG_PLAYER_NOT_FOUND);
-        SetSentErrorMessage(true);
-        return false;
-    }
-
-    if(!*args)
-        return false;
+	if (!*args)
+        return false;
+
+	// can be NULL in console call
+	Player* target = getSelectedPlayer();
 
     std::string namepart = args;
@@ -2498,5 +2644,5 @@
         if(skillInfo)
         {
-            int loc = m_session->GetSessionDbcLocale();
+            int loc = m_session ? m_session->GetSessionDbcLocale() : sWorld.GetDefaultDbcLocale();
             std::string name = skillInfo->name[loc];
             if(name.empty())
@@ -2508,5 +2654,5 @@
                 for(; loc < MAX_LOCALE; ++loc)
                 {
-                    if(loc==m_session->GetSessionDbcLocale())
+                    if(m_session && loc==m_session->GetSessionDbcLocale())
                         continue;
 
@@ -2522,6 +2668,13 @@
             if(loc < MAX_LOCALE)
             {
+				char const* knownStr = "";
+				if(target && target->HasSkill(id))
+					knownStr = GetTrinityString(LANG_KNOWN);
+
                 // send skill in "id - [namedlink locale]" format
-                PSendSysMessage(LANG_SKILL_LIST,id,id,name.c_str(),localeNames[loc],(target->HasSkill(id) ? m_session->GetTrinityString(LANG_KNOWN) : ""));
+                if (m_session)
+					PSendSysMessage(LANG_SKILL_LIST_CHAT,id,id,name.c_str(),localeNames[loc],knownStr);
+				else
+					PSendSysMessage(LANG_SKILL_LIST_CONSOLE,id,name.c_str(),localeNames[loc],knownStr);
 
                 ++counter;
@@ -2536,14 +2689,9 @@
 bool ChatHandler::HandleLookupSpellCommand(const char* args)
 {
-    Player* target = getSelectedPlayer();
-    if( !target )
-    {
-        SendSysMessage(LANG_PLAYER_NOT_FOUND);
-        SetSentErrorMessage(true);
-        return false;
-    }
-
-    if(!*args)
-        return false;
+	if (!*args)
+        return false;
+
+	// can be NULL at console call
+	Player* target = getSelectedPlayer();
 
     std::string namepart = args;
@@ -2564,5 +2712,5 @@
         if(spellInfo)
         {
-            int loc = m_session->GetSessionDbcLocale();
+            int loc = m_session ? m_session->GetSessionDbcLocale() : sWorld.GetDefaultDbcLocale();
             std::string name = spellInfo->SpellName[loc];
             if(name.empty())
@@ -2574,5 +2722,5 @@
                 for(; loc < MAX_LOCALE; ++loc)
                 {
-                    if(loc==m_session->GetSessionDbcLocale())
+                    if(m_session && loc==m_session->GetSessionDbcLocale())
                         continue;
 
@@ -2588,5 +2736,5 @@
             if(loc < MAX_LOCALE)
             {
-                bool known = target->HasSpell(id);
+                bool known = target && target->HasSpell(id);
                 bool learn = (spellInfo->Effect[0] == SPELL_EFFECT_LEARN_SPELL);
 
@@ -2595,5 +2743,5 @@
                 bool talent = (telentCost > 0);
                 bool passive = IsPassiveSpell(id);
-                bool active = target->HasAura(id,0) || target->HasAura(id,1) || target->HasAura(id,2);
+                bool active = target && (target->HasAura(id,0) || target->HasAura(id,1) || target->HasAura(id,2));
 
                 // unit32 used to prevent interpreting uint8 as char at output
@@ -2603,5 +2751,8 @@
                 // send spell in "id - [name, rank N] [talent] [passive] [learn] [known]" format
                 std::ostringstream ss;
-                ss << id << " - |cffffffff|Hspell:" << id << "|h[" << name;
+                if (m_session)
+					ss << id << " - |cffffffff|Hspell:" << id << "|h[" << name;
+				else
+					ss << id << " - " << name;
 
                 // include rank in link name
@@ -2609,5 +2760,8 @@
                     ss << GetTrinityString(LANG_SPELL_RANK) << rank;
 
-                ss << " " << localeNames[loc] << "]|h|r";
+                if (m_session)
+					ss << " " << localeNames[loc] << "]|h|r";
+				else
+					ss << " " << localeNames[loc];
 
                 if(talent)
@@ -2635,14 +2789,9 @@
 bool ChatHandler::HandleLookupQuestCommand(const char* args)
 {
-    Player* target = getSelectedPlayer();
-    if( !target )
-    {
-        SendSysMessage(LANG_PLAYER_NOT_FOUND);
-        SetSentErrorMessage(true);
-        return false;
-    }
-
-    if(!*args)
-        return false;
+	if (!*args)
+        return false;
+
+	// can be NULL at console call
+	Player* target = getSelectedPlayer();
 
     std::string namepart = args;
@@ -2662,5 +2811,5 @@
         Quest * qinfo = iter->second;
 
-        int loc_idx = m_session->GetSessionDbLocaleIndex();
+        int loc_idx = m_session ? m_session->GetSessionDbLocaleIndex() : objmgr.GetDBCLocaleIndex();
         if ( loc_idx >= 0 )
         {
@@ -2674,18 +2823,26 @@
                     if (Utf8FitTo(title, wnamepart))
                     {
-                        QuestStatus status = target->GetQuestStatus(qinfo->GetQuestId());
-
                         char const* statusStr = "";
-                        if(status == QUEST_STATUS_COMPLETE)
+
+						if(target)
                         {
-                            if(target->GetQuestRewardStatus(qinfo->GetQuestId()))
-                                statusStr = GetTrinityString(LANG_COMMAND_QUEST_REWARDED);
-                            else
-                                statusStr = GetTrinityString(LANG_COMMAND_QUEST_COMPLETE);
+                            QuestStatus status = target->GetQuestStatus(qinfo->GetQuestId());
+
+							if(status == QUEST_STATUS_COMPLETE)
+							{
+								if(target->GetQuestRewardStatus(qinfo->GetQuestId()))
+									statusStr = GetTrinityString(LANG_COMMAND_QUEST_REWARDED);
+								else
+									statusStr = GetTrinityString(LANG_COMMAND_QUEST_COMPLETE);
+							}
+							else if(status == QUEST_STATUS_INCOMPLETE)
+								statusStr = GetTrinityString(LANG_COMMAND_QUEST_ACTIVE);
                         }
-                        else if(status == QUEST_STATUS_INCOMPLETE)
-                            statusStr = GetTrinityString(LANG_COMMAND_QUEST_ACTIVE);
-
-                        PSendSysMessage(LANG_QUEST_LIST,qinfo->GetQuestId(),qinfo->GetQuestId(),title.c_str(),(status == QUEST_STATUS_COMPLETE ? GetTrinityString(LANG_COMPLETE) : (status == QUEST_STATUS_INCOMPLETE ? GetTrinityString(LANG_ACTIVE) : "") ));
+                        
+						if (m_session)
+							PSendSysMessage(LANG_QUEST_LIST_CHAT,qinfo->GetQuestId(),qinfo->GetQuestId(),title.c_str(),statusStr);
+						else
+							PSendSysMessage(LANG_QUEST_LIST_CONSOLE,qinfo->GetQuestId(),title.c_str(),statusStr);
+
                         ++counter;
                         continue;
@@ -2701,18 +2858,26 @@
         if (Utf8FitTo(title, wnamepart))
         {
-            QuestStatus status = target->GetQuestStatus(qinfo->GetQuestId());
-
             char const* statusStr = "";
-            if(status == QUEST_STATUS_COMPLETE)
+            
+			if(target)
             {
-                if(target->GetQuestRewardStatus(qinfo->GetQuestId()))
-                    statusStr = GetTrinityString(LANG_COMMAND_QUEST_REWARDED);
-                else
-                    statusStr = GetTrinityString(LANG_COMMAND_QUEST_COMPLETE);
+                QuestStatus status = target->GetQuestStatus(qinfo->GetQuestId());
+
+				if(status == QUEST_STATUS_COMPLETE)
+				{
+					if(target->GetQuestRewardStatus(qinfo->GetQuestId()))
+						statusStr = GetTrinityString(LANG_COMMAND_QUEST_REWARDED);
+					else
+						statusStr = GetTrinityString(LANG_COMMAND_QUEST_COMPLETE);
+				}
+				else if(status == QUEST_STATUS_INCOMPLETE)
+					statusStr = GetTrinityString(LANG_COMMAND_QUEST_ACTIVE);
             }
-            else if(status == QUEST_STATUS_INCOMPLETE)
-                statusStr = GetTrinityString(LANG_COMMAND_QUEST_ACTIVE);
-
-            PSendSysMessage(LANG_QUEST_LIST,qinfo->GetQuestId(),qinfo->GetQuestId(), title.c_str(),(status == QUEST_STATUS_COMPLETE ? GetTrinityString(LANG_COMPLETE) : (status == QUEST_STATUS_INCOMPLETE ? GetTrinityString(LANG_ACTIVE) : "") ));
+            
+			if (m_session)
+				PSendSysMessage(LANG_QUEST_LIST_CHAT,qinfo->GetQuestId(),qinfo->GetQuestId(),title.c_str(),statusStr);
+			else
+				PSendSysMessage(LANG_QUEST_LIST_CONSOLE,qinfo->GetQuestId(),title.c_str(),statusStr);
+
             ++counter;
         }
@@ -2727,5 +2892,5 @@
 bool ChatHandler::HandleLookupCreatureCommand(const char* args)
 {
-    if(!*args)
+    if (!*args)
         return false;
 
@@ -2734,30 +2899,34 @@
 
     // converting string that we try to find to lower case
-    if(!Utf8toWStr(namepart,wnamepart))
-        return false;
-
-    wstrToLower(wnamepart);
+    if (!Utf8toWStr (namepart,wnamepart))
+        return false;
+
+    wstrToLower (wnamepart);
 
     uint32 counter = 0;
 
-    for (uint32 id = 0; id< sCreatureStorage.MaxEntry; id++ )
-    {
-        CreatureInfo const* cInfo = sCreatureStorage.LookupEntry<CreatureInfo>(id);
+    for (uint32 id = 0; id< sCreatureStorage.MaxEntry; ++id)
+    {
+        CreatureInfo const* cInfo = sCreatureStorage.LookupEntry<CreatureInfo> (id);
         if(!cInfo)
             continue;
 
-        int loc_idx = m_session->GetSessionDbLocaleIndex();
-        if ( loc_idx >= 0 )
+        int loc_idx = m_session ? m_session->GetSessionDbLocaleIndex() : objmgr.GetDBCLocaleIndex();
+		if (loc_idx >= 0)
         {
-            CreatureLocale const *cl = objmgr.GetCreatureLocale(id);
+            CreatureLocale const *cl = objmgr.GetCreatureLocale (id);
             if (cl)
             {
-                if (cl->Name.size() > loc_idx && !cl->Name[loc_idx].empty())
+                if (cl->Name.size() > loc_idx && !cl->Name[loc_idx].empty ())
                 {
                     std::string name = cl->Name[loc_idx];
 
-                    if (Utf8FitTo(name, wnamepart))
+                    if (Utf8FitTo (name, wnamepart))
                     {
-                        PSendSysMessage(LANG_CREATURE_ENTRY_LIST, id, id, name.c_str());
+                        if (m_session)
+							PSendSysMessage (LANG_CREATURE_ENTRY_LIST_CHAT, id, id, name.c_str ());
+						else
+							PSendSysMessage (LANG_CREATURE_ENTRY_LIST_CONSOLE, id, name.c_str ());
+
                         ++counter;
                         continue;
@@ -2768,10 +2937,13 @@
 
         std::string name = cInfo->Name;
-        if(name.empty())
+        if (name.empty ())
             continue;
 
         if (Utf8FitTo(name, wnamepart))
         {
-            PSendSysMessage(LANG_CREATURE_ENTRY_LIST,id,id,name.c_str());
+            if (m_session)
+				PSendSysMessage (LANG_CREATURE_ENTRY_LIST_CHAT, id, id, name.c_str ());
+			else
+				PSendSysMessage (LANG_CREATURE_ENTRY_LIST_CONSOLE, id, name.c_str ());
             ++counter;
         }
@@ -2779,5 +2951,5 @@
 
     if (counter==0)
-        SendSysMessage(LANG_COMMAND_NOCREATUREFOUND);
+        SendSysMessage (LANG_COMMAND_NOCREATUREFOUND);
 
     return true;
@@ -2806,5 +2978,5 @@
             continue;
 
-        int loc_idx = m_session->GetSessionDbLocaleIndex();
+        int loc_idx = m_session ? m_session->GetSessionDbLocaleIndex() : objmgr.GetDBCLocaleIndex();
         if ( loc_idx >= 0 )
         {
@@ -2818,5 +2990,8 @@
                     if (Utf8FitTo(name, wnamepart))
                     {
-                        PSendSysMessage(LANG_GO_ENTRY_LIST, id, id, name.c_str());
+                        if (m_session)
+							PSendSysMessage(LANG_GO_ENTRY_LIST_CHAT, id, id, name.c_str());
+						else
+							PSendSysMessage(LANG_GO_ENTRY_LIST_CONSOLE, id, name.c_str());
                         ++counter;
                         continue;
@@ -2832,5 +3007,8 @@
         if(Utf8FitTo(name, wnamepart))
         {
-            PSendSysMessage(LANG_GO_ENTRY_LIST, id, id, name.c_str());
+            if (m_session)
+				PSendSysMessage(LANG_GO_ENTRY_LIST_CHAT, id, id, name.c_str());
+			else
+				PSendSysMessage(LANG_GO_ENTRY_LIST_CONSOLE, id, name.c_str());
             ++counter;
         }
@@ -2857,47 +3035,43 @@
         return false;
 
-    Guild *guild;
-    Player * player;
-    char *lname,*gname;
-    std::string guildname;
-
-    lname = strtok((char*)args, " ");
-    gname = strtok(NULL, "");
-
-    if(!lname)
-        return false;
-    else if(!gname)
-    {
-        SendSysMessage(LANG_INSERT_GUILD_NAME);
-        SetSentErrorMessage(true);
-        return false;
-    }
-
-    guildname = gname;
-    player = ObjectAccessor::Instance().FindPlayerByName(lname);
-
-    if(!player)
-    {
-        SendSysMessage(LANG_PLAYER_NOT_FOUND);
-        SetSentErrorMessage(true);
-        return false;
-    }
-
-    if(!player->GetGuildId())
-    {
-        guild = new Guild;
-        if(!guild->create(player->GetGUID(),guildname))
-        {
-            delete guild;
-            SendSysMessage(LANG_GUILD_NOT_CREATED);
-            SetSentErrorMessage(true);
-            return false;
-        }
-
-        objmgr.AddGuild(guild);
-    }
-    else
-        SendSysMessage(LANG_PLAYER_IN_GUILD);
-
+    char *lname = strtok ((char*)args, " ");
+	char *gname = strtok (NULL, "");
+
+    if (!lname)
+        return false;
+    
+	if (!gname)
+    {
+        SendSysMessage (LANG_INSERT_GUILD_NAME);
+		SetSentErrorMessage (true);
+        return false;
+    }
+
+    std::string guildname = gname;
+
+    Player* player = ObjectAccessor::Instance ().FindPlayerByName (lname);
+	if (!player)
+    {
+        SendSysMessage (LANG_PLAYER_NOT_FOUND);
+		SetSentErrorMessage (true);
+        return false;
+    }
+
+    if (player->GetGuildId())
+    {
+        SendSysMessage (LANG_PLAYER_IN_GUILD);
+		return true;
+	}
+
+	Guild *guild = new Guild;
+	if (!guild->create (player->GetGUID (),guildname))
+	{
+		delete guild;
+		SendSysMessage (LANG_GUILD_NOT_CREATED);
+		SetSentErrorMessage (true);
+		return false;
+    }
+    
+	objmgr.AddGuild (guild);
     return true;
 }
@@ -2905,8 +3079,8 @@
 bool ChatHandler::HandleGuildInviteCommand(const char *args)
 {
-    if(!*args)
-        return false;
-
-    char* par1 = strtok((char*)args, " ");
+    if (!*args)
+        return false;
+
+    char* par1 = strtok ((char*)args, " ");
     char* par2 = strtok (NULL, "");
     if(!par1 || !par2)
@@ -2914,27 +3088,27 @@
 
     std::string glName = par2;
-    Guild* targetGuild = objmgr.GetGuildByName(glName);
-    if(!targetGuild)
+    Guild* targetGuild = objmgr.GetGuildByName (glName);
+	if (!targetGuild)
         return false;
 
     std::string plName = par1;
-    if(!normalizePlayerName(plName))
-    {
-        SendSysMessage(LANG_PLAYER_NOT_FOUND);
-        SetSentErrorMessage(true);
+    if (!normalizePlayerName (plName))
+    {
+        SendSysMessage (LANG_PLAYER_NOT_FOUND);
+		SetSentErrorMessage (true);
         return false;
     }
 
     uint64 plGuid = 0;
-    if(Player* targetPlayer = ObjectAccessor::Instance().FindPlayerByName(plName.c_str()))
-        plGuid = targetPlayer->GetGUID();
+    if (Player* targetPlayer = ObjectAccessor::Instance ().FindPlayerByName (plName.c_str ()))
+		plGuid = targetPlayer->GetGUID ();
     else
-        plGuid = objmgr.GetPlayerGUIDByName(plName.c_str());
-
-    if(!plGuid)
+        plGuid = objmgr.GetPlayerGUIDByName (plName.c_str ());
+
+    if (!plGuid)
         false;
 
     // players's guild membership checked in AddMember before add
-    if(!targetGuild->AddMember(plGuid,targetGuild->GetLowestRank()))
+    if (!targetGuild->AddMember (plGuid,targetGuild->GetLowestRank ()))
         return false;
 
@@ -2944,15 +3118,16 @@
 bool ChatHandler::HandleGuildUninviteCommand(const char *args)
 {
-    if(!*args)
-        return false;
-
-    char* par1 = strtok((char*)args, " ");
+    if (!*args)
+        return false;
+
+    char* par1 = strtok ((char*)args, " ");
     if(!par1)
         return false;
+
     std::string plName = par1;
-    if(!normalizePlayerName(plName))
-    {
-        SendSysMessage(LANG_PLAYER_NOT_FOUND);
-        SetSentErrorMessage(true);
+    if (!normalizePlayerName (plName))
+    {
+        SendSysMessage (LANG_PLAYER_NOT_FOUND);
+		SetSentErrorMessage (true);
         return false;
     }
@@ -2960,23 +3135,23 @@
     uint64 plGuid = 0;
     uint32 glId   = 0;
-    if(Player* targetPlayer = ObjectAccessor::Instance().FindPlayerByName(plName.c_str()))
-    {
-        plGuid = targetPlayer->GetGUID();
-        glId   = targetPlayer->GetGuildId();
+    if (Player* targetPlayer = ObjectAccessor::Instance ().FindPlayerByName (plName.c_str ()))
+    {
+        plGuid = targetPlayer->GetGUID ();
+		glId   = targetPlayer->GetGuildId ();
     }
     else
     {
-        plGuid = objmgr.GetPlayerGUIDByName(plName.c_str());
-        glId = Player::GetGuildIdFromDB(plGuid);
-    }
-
-    if(!plGuid || !glId)
-        return false;
-
-    Guild* targetGuild = objmgr.GetGuildById(glId);
-    if(!targetGuild)
-        return false;
-
-    targetGuild->DelMember(plGuid);
+        plGuid = objmgr.GetPlayerGUIDByName (plName.c_str ());
+		glId = Player::GetGuildIdFromDB (plGuid);
+    }
+
+    if (!plGuid || !glId)
+        return false;
+
+    Guild* targetGuild = objmgr.GetGuildById (glId);
+	if (!targetGuild)
+        return false;
+
+    targetGuild->DelMember (plGuid);
 
     return true;
@@ -2985,16 +3160,17 @@
 bool ChatHandler::HandleGuildRankCommand(const char *args)
 {
-    if(!*args)
-        return false;
-
-    char* par1 = strtok((char*)args, " ");
-    char* par2 = strtok(NULL, " ");
-    if(!par1 || !par2)
-        return false;
+    if (!*args)
+        return false;
+
+    char* par1 = strtok ((char*)args, " ");
+	char* par2 = strtok (NULL, " ");
+	if (!par1 || !par2)
+        return false;
+
     std::string plName = par1;
-    if(!normalizePlayerName(plName))
-    {
-        SendSysMessage(LANG_PLAYER_NOT_FOUND);
-        SetSentErrorMessage(true);
+    if (!normalizePlayerName (plName))
+    {
+        SendSysMessage (LANG_PLAYER_NOT_FOUND);
+		SetSentErrorMessage (true);
         return false;
     }
@@ -3002,27 +3178,27 @@
     uint64 plGuid = 0;
     uint32 glId   = 0;
-    if(Player* targetPlayer = ObjectAccessor::Instance().FindPlayerByName(plName.c_str()))
-    {
-        plGuid = targetPlayer->GetGUID();
-        glId   = targetPlayer->GetGuildId();
+    if (Player* targetPlayer = ObjectAccessor::Instance ().FindPlayerByName (plName.c_str ()))
+    {
+        plGuid = targetPlayer->GetGUID ();
+		glId   = targetPlayer->GetGuildId ();
     }
     else
     {
-        plGuid = objmgr.GetPlayerGUIDByName(plName.c_str());
-        glId = Player::GetGuildIdFromDB(plGuid);
-    }
-
-    if(!plGuid || !glId)
-        return false;
-
-    Guild* targetGuild = objmgr.GetGuildById(glId);
-    if(!targetGuild)
-        return false;
-
-    uint32 newrank = uint32(atoi(par2));
-    if(newrank > targetGuild->GetLowestRank())
-        return false;
-
-    targetGuild->ChangeRank(plGuid,newrank);
+        plGuid = objmgr.GetPlayerGUIDByName (plName.c_str ());
+		glId = Player::GetGuildIdFromDB (plGuid);
+    }
+
+    if (!plGuid || !glId)
+        return false;
+
+    Guild* targetGuild = objmgr.GetGuildById (glId);
+	if (!targetGuild)
+        return false;
+
+    uint32 newrank = uint32 (atoi (par2));
+	if (newrank > targetGuild->GetLowestRank ())
+        return false;
+
+    targetGuild->ChangeRank (plGuid,newrank);
 
     return true;
@@ -3031,18 +3207,18 @@
 bool ChatHandler::HandleGuildDeleteCommand(const char* args)
 {
-    if(!*args)
-        return false;
-
-    char* par1 = strtok((char*)args, " ");
-    if(!par1)
+    if (!*args)
+        return false;
+
+    char* par1 = strtok ((char*)args, " ");
+	if (!par1)
         return false;
 
     std::string gld = par1;
 
-    Guild* targetGuild = objmgr.GetGuildByName(gld);
-    if(!targetGuild)
-        return false;
-
-    targetGuild->Disband();
+    Guild* targetGuild = objmgr.GetGuildByName (gld);
+	if (!targetGuild)
+        return false;
+
+    targetGuild->Disband ();
 
     return true;
@@ -3472,9 +3648,4 @@
 }
 
-bool ChatHandler::HandleSpawnTransportCommand(const char* /*args*/)
-{
-    return true;
-}
-
 //play npc emote
 bool ChatHandler::HandlePlayEmoteCommand(const char* args)
@@ -4721,102 +4892,130 @@
 }
 
-bool ChatHandler::HandleBanCommand(const char* args)
-{
-    if(!args)
-        return false;
-
-    char* type = strtok((char*)args, " ");
-
-    if(!type)
-        return false;
-    char* nameOrIP = strtok(NULL, " ");
-
-    if(!nameOrIP)
-        return false;
-
-    char* duration = strtok(NULL," ");
+bool ChatHandler::HandleBanAccountCommand(const char* args)
+{
+    return HandleBanHelper(BAN_ACCOUNT,args);
+}
+
+bool ChatHandler::HandleBanCharacterCommand(const char* args)
+{
+	return HandleBanHelper(BAN_CHARACTER,args);
+}
+
+bool ChatHandler::HandleBanIPCommand(const char* args)
+{
+	return HandleBanHelper(BAN_IP,args);
+}
+
+bool ChatHandler::HandleBanHelper(BanMode mode, const char* args)
+{
+	if(!args)
+        return false;
+
+    char* cnameOrIP = strtok ((char*)args, " ");
+	if (!cnameOrIP)
+        return false;
+
+    std::string nameOrIP = cnameOrIP;
+
+	char* duration = strtok (NULL," ");
     if(!duration || !atoi(duration))
         return false;
 
-    char* reason = strtok(NULL,"");
+    char* reason = strtok (NULL,"");
     if(!reason)
         return false;
 
-    switch(sWorld.BanAccount(type, nameOrIP, duration, reason,m_session->GetPlayerName()))
+    switch(mode)
+	{
+		case BAN_ACCOUNT:
+			if(!AccountMgr::normilizeString(nameOrIP))
+			{
+				PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,nameOrIP.c_str());
+				SetSentErrorMessage(true);
+				return false;
+			}
+			break;
+		case BAN_CHARACTER:
+			if(!normalizePlayerName(nameOrIP))
+			{
+				SendSysMessage(LANG_PLAYER_NOT_FOUND);
+				SetSentErrorMessage(true);
+				return false;
+			}
+			break;
+		case BAN_IP:
+			if(!IsIPAddress(nameOrIP.c_str()))
+				return false;
+			break;
+	}
+
+	switch(sWorld.BanAccount(mode, nameOrIP, duration, reason,m_session ? m_session->GetPlayerName() : ""))
     {
         case BAN_SUCCESS:
             if(atoi(duration)>0)
-                PSendSysMessage(LANG_BAN_YOUBANNED,nameOrIP,secsToTimeString(TimeStringToSecs(duration),true).c_str(),reason);
+                PSendSysMessage(LANG_BAN_YOUBANNED,nameOrIP.c_str(),secsToTimeString(TimeStringToSecs(duration),true).c_str(),reason);
             else
-                PSendSysMessage(LANG_BAN_YOUPERMBANNED,nameOrIP,reason);
+                PSendSysMessage(LANG_BAN_YOUPERMBANNED,nameOrIP.c_str(),reason);
             break;
         case BAN_SYNTAX_ERROR:
             return false;
         case BAN_NOTFOUND:
-            PSendSysMessage(LANG_BAN_NOTFOUND,type,nameOrIP);
-            break;
-    }
-
-    return true;
-}
-
-bool ChatHandler::HandleUnBanCommand(const char* args)
+           switch(mode)
+		   {
+			   default:
+				   PSendSysMessage(LANG_BAN_NOTFOUND,"account",nameOrIP.c_str());
+				   break;
+			   case BAN_CHARACTER:
+				   PSendSysMessage(LANG_BAN_NOTFOUND,"character",nameOrIP.c_str());
+				   break;
+			   case BAN_IP:
+				   PSendSysMessage(LANG_BAN_NOTFOUND,"ip",nameOrIP.c_str());
+				   break;
+
+		   }
+		   SetSentErrorMessage(true);
+		   return false;
+    }
+
+    return true;
+}
+
+bool ChatHandler::HandleUnBanAccountCommand(const char* args)
+{
+    return HandleUnBanHelper(BAN_ACCOUNT,args);
+}
+
+bool ChatHandler::HandleUnBanCharacterCommand(const char* args)
+{
+	return HandleUnBanHelper(BAN_CHARACTER,args);
+}
+
+bool ChatHandler::HandleUnBanIPCommand(const char* args)
+{
+	return HandleUnBanHelper(BAN_IP,args);
+}
+
+bool ChatHandler::HandleUnBanHelper(BanMode mode, const char* args)
 {
     if(!args)
         return false;
-    char* type = strtok((char*)args, " ");
-    if(!type)
-        return false;
-    char* nameOrIP = strtok(NULL, " ");
-
-    if(!nameOrIP)
-        return false;
-
-    if(sWorld.RemoveBanAccount(type,nameOrIP))
-        PSendSysMessage(LANG_UNBAN_UNBANNED,nameOrIP);
-    else
-        PSendSysMessage(LANG_UNBAN_ERROR,nameOrIP);
-
-    return true;
-}
-
-bool ChatHandler::HandleBanInfoCommand(const char* args)
-{
-    if(!args)
-        return false;
-
-    char* cType = strtok((char*)args, " ");
-    char* cnameOrIP = strtok(NULL, "");
-    if(!cType || !cnameOrIP)
+
+    char* cnameOrIP = strtok ((char*)args, " ");
+	if(!cnameOrIP)
         return false;
 
     std::string nameOrIP = cnameOrIP;
-    std::string type = cType;
-    if (!IsIPAddress(cnameOrIP) && type=="ip")
-        return false;
-
-    Field *fields;
-    if(type != "ip")
-    {
-        //look the accountid up
-        uint32 accountid;
-        std::string accountname;
-        if(type == "account")
-        {
-            loginDatabase.escape_string(nameOrIP);
-            QueryResult *result = loginDatabase.PQuery("SELECT id, username FROM account WHERE username = '%s'",nameOrIP.c_str());
-            if (!result)
+    switch(mode)
+    {
+        case BAN_ACCOUNT:
+			if(!AccountMgr::normilizeString(nameOrIP))
             {
-                PSendSysMessage(LANG_BANINFO_NOACCOUNT);
-                return true;
-            }
-            fields = result->Fetch();
-            accountid = fields[0].GetUInt32();
-            accountname = fields[1].GetCppString();
-            delete result;
-        }
-        else if(type == "character")
-        {
-            if(!normalizePlayerName(nameOrIP))
+                PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,nameOrIP.c_str());
+				SetSentErrorMessage(true);
+				return false;
+			}
+			break;
+		case BAN_CHARACTER:
+			if(!normalizePlayerName(nameOrIP))
             {
                 SendSysMessage(LANG_PLAYER_NOT_FOUND);
@@ -4824,133 +5023,337 @@
                 return false;
             }
-
-            accountid = objmgr.GetPlayerAccountIdByPlayerName (nameOrIP);
-            if (!accountid)
-            {
-                PSendSysMessage(LANG_BANINFO_NOCHARACTER);
-                return true;
-            }
-            
-            if (!accmgr.GetName (accountid,accountname))
-            {
-                PSendSysMessage(LANG_BANINFO_NOCHARACTER);
-                return true;
-            }
-        }
-        else
-            return false;
-
-        QueryResult *result = loginDatabase.PQuery("SELECT FROM_UNIXTIME(bandate), unbandate-bandate, active, unbandate,banreason,bannedby FROM account_banned WHERE id = '%u' ORDER BY bandate ASC",accountid);
-        if(!result)
+			break;
+		case BAN_IP:
+			if(!IsIPAddress(nameOrIP.c_str()))
+				return false;
+			break;
+	}
+
+	if(sWorld.RemoveBanAccount(mode,nameOrIP))
+		PSendSysMessage(LANG_UNBAN_UNBANNED,nameOrIP.c_str());
+	else
+		PSendSysMessage(LANG_UNBAN_ERROR,nameOrIP.c_str());
+
+	return true;
+}
+
+bool ChatHandler::HandleBanInfoAccountCommand(const char* args)
+{
+	if(!args)
+		return false;
+
+	char* cname = strtok((char*)args, "");
+	if(!cname)
+		return false;
+
+	std::string account_name = cname;
+	if(!AccountMgr::normilizeString(account_name))
+	{
+		PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+		SetSentErrorMessage(true);
+		return false;
+    }
+    
+	uint32 accountid = accmgr.GetId(account_name);
+	if(!accountid)
+    {
+        PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+		return true;
+    }
+    
+	return HandleBanInfoHelper(accountid,account_name.c_str());
+}
+
+bool ChatHandler::HandleBanInfoCharacterCommand(const char* args)
+{
+    if(!args)
+        return false;
+
+    char* cname = strtok ((char*)args, "");
+	if(!cname)
+        return false;
+
+    std::string name = cname;
+	if(!normalizePlayerName(name))
+	{
+		SendSysMessage(LANG_PLAYER_NOT_FOUND);
+		SetSentErrorMessage(true);
+		return false;
+	}
+
+    uint32 accountid = objmgr.GetPlayerAccountIdByPlayerName(name);
+	if(!accountid)
+    {
+        SendSysMessage(LANG_PLAYER_NOT_FOUND);
+		SetSentErrorMessage(true);
+		return false;
+	}
+
+	std::string accountname;
+	if(!accmgr.GetName(accountid,accountname))
+	{
+		PSendSysMessage(LANG_BANINFO_NOCHARACTER);
+        return true;
+    }
+    
+	return HandleBanInfoHelper(accountid,accountname.c_str());
+}
+
+bool ChatHandler::HandleBanInfoHelper(uint32 accountid, char const* accountname)
+{
+	QueryResult *result = loginDatabase.PQuery("SELECT FROM_UNIXTIME(bandate), unbandate-bandate, active, unbandate,banreason,bannedby FROM account_banned WHERE id = '%u' ORDER BY bandate ASC",accountid);
+	if(!result)
+    {
+        PSendSysMessage(LANG_BANINFO_NOACCOUNTBAN, accountname);
+		return true;
+    }
+    
+	PSendSysMessage(LANG_BANINFO_BANHISTORY,accountname);
+	do
+    {
+        Field* fields = result->Fetch();
+
+		time_t unbandate = time_t(fields[3].GetUInt64());
+		bool active = false;
+		if(fields[2].GetBool() && (fields[1].GetUInt64() == (uint64)0 ||unbandate >= time(NULL)) )
+			active = true;
+		bool permanent = (fields[1].GetUInt64() == (uint64)0);
+		std::string bantime = permanent?GetTrinityString(LANG_BANINFO_INFINITE):secsToTimeString(fields[1].GetUInt64(), true);
+		PSendSysMessage(LANG_BANINFO_HISTORYENTRY,
+			fields[0].GetString(), bantime.c_str(), active ? GetTrinityString(LANG_BANINFO_YES):GetTrinityString(LANG_BANINFO_NO), fields[4].GetString(), fields[5].GetString());
+	}while (result->NextRow());
+
+	delete result;
+	return true;
+}
+
+bool ChatHandler::HandleBanInfoIPCommand(const char* args)
+{
+	if(!args)
+		return false;
+
+	char* cIP = strtok ((char*)args, "");
+	if(!cIP)
+		return false;
+
+	if (!IsIPAddress(cIP))
+		return false;
+
+	std::string IP = cIP;
+
+	loginDatabase.escape_string(IP);
+	QueryResult *result = loginDatabase.PQuery("SELECT ip, FROM_UNIXTIME(bandate), FROM_UNIXTIME(unbandate), unbandate-UNIX_TIMESTAMP(), banreason,bannedby,unbandate-bandate FROM ip_banned WHERE ip = '%s'",IP.c_str());
+	if(!result)
+	{
+		PSendSysMessage(LANG_BANINFO_NOIP);
+		return true;
+    }
+    
+	Field *fields = result->Fetch();
+	bool permanent = !fields[6].GetUInt64();
+	PSendSysMessage(LANG_BANINFO_IPENTRY,
+		fields[0].GetString(), fields[1].GetString(), permanent ? GetTrinityString(LANG_BANINFO_NEVER):fields[2].GetString(),
+		permanent ? GetTrinityString(LANG_BANINFO_INFINITE):secsToTimeString(fields[3].GetUInt64(), true).c_str(), fields[4].GetString(), fields[5].GetString());
+	delete result;
+	return true;
+}
+
+bool ChatHandler::HandleBanListCharacterCommand(const char* args)
+{
+	loginDatabase.Execute("DELETE FROM ip_banned WHERE unbandate<=UNIX_TIMESTAMP() AND unbandate<>bandate");
+
+	char* cFilter = strtok ((char*)args, " ");
+	if(!cFilter)
+        return false;
+
+	std::string filter = cFilter;
+	loginDatabase.escape_string(filter);
+	QueryResult* result = CharacterDatabase.PQuery("SELECT account FROM characters WHERE name "_LIKE_" "_CONCAT3_("'%%'","'%s'","'%%'"),filter.c_str());
+	if (!result)
+	{
+		PSendSysMessage(LANG_BANLIST_NOCHARACTER);
+		return true;
+	}
+
+	return HandleBanListHelper(result);
+}
+
+bool ChatHandler::HandleBanListAccountCommand(const char* args)
+{
+	loginDatabase.Execute("DELETE FROM ip_banned WHERE unbandate<=UNIX_TIMESTAMP() AND unbandate<>bandate");
+
+	char* cFilter = strtok((char*)args, " ");
+	std::string filter = cFilter ? cFilter : "";
+	loginDatabase.escape_string(filter);
+
+	QueryResult* result;
+
+	if(filter.empty())
+	{
+		 result = loginDatabase.Query("SELECT account.id, username FROM account, account_banned"
+			 " WHERE account.id = account_banned.id AND active = 1 GROUP BY account.id");
+	}
+	else
+	{
+		result = loginDatabase.PQuery("SELECT account.id, username FROM account, account_banned"
+			" WHERE account.id = account_banned.id AND active = 1 AND username "_LIKE_" "_CONCAT3_("'%%'","'%s'","'%%'")" GROUP BY account.id",
+			filter.c_str());
+	}
+
+	if (!result)
+	{
+		PSendSysMessage(LANG_BANLIST_NOACCOUNT);
+		return true;
+	}
+
+	return HandleBanListHelper(result);
+}
+
+bool ChatHandler::HandleBanListHelper(QueryResult* result)
+{
+    PSendSysMessage(LANG_BANLIST_MATCHINGACCOUNT);
+    
+	// Chat short output
+	if(m_session)
+    {
+        do
+		{
+			Field* fields = result->Fetch();
+			uint32 accountid = fields[0].GetUInt32();
+
+			QueryResult* banresult = loginDatabase.PQuery("SELECT account.username FROM account,account_banned WHERE account_banned.id='%u' AND account_banned.id=account.id",accountid);
+			if(banresult)
+			{
+				Field* fields2 = banresult->Fetch();
+				PSendSysMessage("%s",fields2[0].GetString());
+				delete banresult;
+			}
+		} while (result->NextRow());
+	}
+	// Console wide output
+	else
+	{
+		SendSysMessage(LANG_BANLIST_ACCOUNTS);
+		SendSysMessage("===============================================================================");
+		SendSysMessage(LANG_BANLIST_ACCOUNTS_HEADER);
+		do
+		{
+			SendSysMessage("-------------------------------------------------------------------------------");
+			Field *fields = result->Fetch();
+			uint32 account_id = fields[0].GetUInt32 ();
+
+			std::string account_name;
+
+			// "account" case, name can be get in same quary
+			if(result->GetFieldCount() > 1)
+				account_name = fields[1].GetCppString();
+			// "character" case, name need extract from another DB
+			else
+				accmgr.GetName (account_id,account_name);
+
+			// No SQL injection. id is uint32.
+			QueryResult *banInfo = loginDatabase.PQuery("SELECT bandate,unbandate,bannedby,banreason FROM account_banned WHERE id = %u ORDER BY unbandate", account_id);
+			if (banInfo)
+			{
+				Field *fields2 = banInfo->Fetch();
+				do
+				{
+					time_t t_ban = fields2[0].GetUInt64();
+					tm* aTm_ban = localtime(&t_ban);
+
+					if (fields2[0].GetUInt64() == fields2[1].GetUInt64())
+					{
+						PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d|   permanent  |%-15.15s|%-15.15s|",
+							account_name.c_str(),aTm_ban->tm_year%100, aTm_ban->tm_mon+1, aTm_ban->tm_mday, aTm_ban->tm_hour, aTm_ban->tm_min,
+							fields2[2].GetString(),fields2[3].GetString());
+					}
+					else
+					{
+						time_t t_unban = fields2[1].GetUInt64();
+						tm* aTm_unban = localtime(&t_unban);
+						PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d|%02d-%02d-%02d %02d:%02d|%-15.15s|%-15.15s|",
+							account_name.c_str(),aTm_ban->tm_year%100, aTm_ban->tm_mon+1, aTm_ban->tm_mday, aTm_ban->tm_hour, aTm_ban->tm_min,
+							aTm_unban->tm_year%100, aTm_unban->tm_mon+1, aTm_unban->tm_mday, aTm_unban->tm_hour, aTm_unban->tm_min,
+							fields2[2].GetString(),fields2[3].GetString());
+					}
+				}while ( banInfo->NextRow() );
+				delete banInfo;
+			}
+		}while( result->NextRow() );
+		SendSysMessage("===============================================================================");
+	}
+
+	delete result;
+	return true;
+}
+
+bool ChatHandler::HandleBanListIPCommand(const char* args)
+{
+	loginDatabase.Execute("DELETE FROM ip_banned WHERE unbandate<=UNIX_TIMESTAMP() AND unbandate<>bandate");
+
+	char* cFilter = strtok((char*)args, " ");
+	std::string filter = cFilter ? cFilter : "";
+	loginDatabase.escape_string(filter);
+
+	QueryResult* result;
+
+	if(filter.empty())
+	{
+		result = loginDatabase.Query ("SELECT ip,bandate,unbandate,bannedby,banreason FROM ip_banned"
+			" WHERE (bandate=unbandate OR unbandate>UNIX_TIMESTAMP())"
+			" ORDER BY unbandate" );
+	}
+	else
+	{
+		result = loginDatabase.PQuery( "SELECT ip,bandate,unbandate,bannedby,banreason FROM ip_banned"
+			" WHERE (bandate=unbandate OR unbandate>UNIX_TIMESTAMP()) AND ip "_LIKE_" "_CONCAT3_("'%%'","'%s'","'%%'")
+			" ORDER BY unbandate",filter.c_str() );
+	}
+
+	if(!result)
+	{
+		PSendSysMessage(LANG_BANLIST_NOIP);
+		return true;
+	}
+
+	PSendSysMessage(LANG_BANLIST_MATCHINGIP);
+	// Chat short output
+	if(m_session)
+	{
+		do
+		{
+			Field* fields = result->Fetch();
+			PSendSysMessage("%s",fields[0].GetString());
+		}while (result->NextRow());
+	}
+	// Console wide output
+	else
+	{
+		SendSysMessage(LANG_BANLIST_IPS);SendSysMessage("===============================================================================");
+		SendSysMessage(LANG_BANLIST_IPS_HEADER);
+		do
         {
-            PSendSysMessage(LANG_BANINFO_NOACCOUNTBAN, accountname.c_str());
-            return true;
-        }
-
-        PSendSysMessage(LANG_BANINFO_BANHISTORY,accountname.c_str());
-        do
-        {
-            fields = result->Fetch();
-
-            time_t unbandate = time_t(fields[3].GetUInt64());
-            bool active = false;
-            if(fields[2].GetBool() && (fields[1].GetUInt64() == (uint64)0 ||unbandate >= time(NULL)) )
-                active = true;
-            bool permanent = (fields[1].GetUInt64() == (uint64)0);
-            std::string bantime = permanent?GetTrinityString(LANG_BANINFO_INFINITE):secsToTimeString(fields[1].GetUInt64(), true);
-            PSendSysMessage(LANG_BANINFO_HISTORYENTRY,
-                fields[0].GetString(), bantime.c_str(), active ? GetTrinityString(LANG_BANINFO_YES):GetTrinityString(LANG_BANINFO_NO), fields[4].GetString(), fields[5].GetString());
-        }while (result->NextRow());
-
-        delete result;
-    }
-    else
-    {
-        loginDatabase.escape_string(nameOrIP);
-        QueryResult *result = loginDatabase.PQuery("SELECT ip, FROM_UNIXTIME(bandate), FROM_UNIXTIME(unbandate), unbandate-UNIX_TIMESTAMP(), banreason,bannedby,unbandate-bandate FROM ip_banned WHERE ip = '%s'",nameOrIP.c_str());
-        if(!result)
-        {
-            PSendSysMessage(LANG_BANINFO_NOIP);
-            return true;
-        }
-        fields = result->Fetch();
-        bool permanent = (fields[6].GetUInt64()==(uint64)0);
-        PSendSysMessage(LANG_BANINFO_IPENTRY,
-            fields[0].GetString(), fields[1].GetString(), permanent ? GetTrinityString(LANG_BANINFO_NEVER):fields[2].GetString(),
-            permanent ? GetTrinityString(LANG_BANINFO_INFINITE):secsToTimeString(fields[3].GetUInt64(), true).c_str(), fields[4].GetString(), fields[5].GetString());
-        delete result;
-    }
-    return true;
-}
-
-bool ChatHandler::HandleBanListCommand(const char* args)
-{
-    loginDatabase.Execute("DELETE FROM ip_banned WHERE unbandate<=UNIX_TIMESTAMP() AND unbandate<>bandate");
-    if(!*args)
-        return false;
-    char* cType = strtok((char*)args, " ");
-    char* cFilter = strtok(NULL, "");
-    if(!cType || !cFilter)
-        return false;
-    std::string Filter = cFilter;
-    std::string Type = cType;
-    loginDatabase.escape_string(Filter);
-
-    QueryResult* result  = NULL;
-    Field *fields = NULL;
-    if(Type == "ip")
-    {
-        result = loginDatabase.PQuery("SELECT ip FROM ip_banned WHERE ip "_LIKE_" "_CONCAT3_("'%%'","'%s'","'%%'"),Filter.c_str());
-        if(!result)
-        {
-            PSendSysMessage(LANG_BANLIST_NOIP);
-            return true;
-        }
-        PSendSysMessage(LANG_BANLIST_MATCHINGIP);
-        do
-        {
-            fields = result->Fetch();
-            PSendSysMessage("%s",fields[0].GetString());
-        } while (result->NextRow());
-
-        delete result;
-        return true;
-    }
-    //lookup accountid
-    if(Type == "account")
-    {
-        result = loginDatabase.PQuery("SELECT id FROM account WHERE username "_LIKE_" "_CONCAT3_("'%%'","'%s'","'%%'"),Filter.c_str());
-        if (!result)
-        {
-            PSendSysMessage(LANG_BANLIST_NOACCOUNT);
-            return true;
-        }
-        //do not delete result
-    }
-    else if(Type == "characters")
-    {
-        result = CharacterDatabase.PQuery("SELECT account FROM characters, WHERE name "_LIKE_" "_CONCAT3_("'%%'","'%s'","'%%'"),Filter.c_str());
-        if (!result)
-        {
-            PSendSysMessage(LANG_BANLIST_NOCHARACTER);
-            return true;
-        }
-    }
-    else
-        return false;
-
-    PSendSysMessage(LANG_BANLIST_MATCHINGACCOUNT);
-    do
-    {
-        fields = result->Fetch();
-        uint32 accountid = fields[0].GetUInt32();
-        QueryResult* banresult = loginDatabase.PQuery("SELECT account.username FROM account,account_banned WHERE account_banned.id='%u' AND account_banned.active = '1' AND account_banned.id=account.id",accountid);
-        if(banresult)
-        {
-            Field* fields2 = banresult->Fetch();
-            PSendSysMessage("%s",fields2[0].GetString());
-            delete banresult;
-        }
-    } while (result->NextRow());
+            SendSysMessage("-------------------------------------------------------------------------------");
+			Field *fields = result->Fetch();
+			time_t t_ban = fields[1].GetUInt64();
+			tm* aTm_ban = localtime(&t_ban);
+			if ( fields[1].GetUInt64() == fields[2].GetUInt64() )
+			{
+				PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d|   permanent  |%-15.15s|%-15.15s|",
+					fields[0].GetString(), aTm_ban->tm_year%100, aTm_ban->tm_mon+1, aTm_ban->tm_mday, aTm_ban->tm_hour, aTm_ban->tm_min,
+					fields[3].GetString(), fields[4].GetString());
+			}
+			else
+			{
+				time_t t_unban = fields[2].GetUInt64();
+				tm* aTm_unban = localtime(&t_unban);
+				PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d|%02d-%02d-%02d %02d:%02d|%-15.15s|%-15.15s|",
+					fields[0].GetString(), aTm_ban->tm_year%100, aTm_ban->tm_mon+1, aTm_ban->tm_mday, aTm_ban->tm_hour, aTm_ban->tm_min,
+					aTm_unban->tm_year%100, aTm_unban->tm_mon+1, aTm_unban->tm_mday, aTm_unban->tm_hour, aTm_unban->tm_min,
+					fields[3].GetString(), fields[4].GetString());
+			}
+		}while( result->NextRow() );
+		SendSysMessage("===============================================================================");
+    }
 
     delete result;
@@ -5013,35 +5416,109 @@
 bool ChatHandler::HandleLoadPDumpCommand(const char *args)
 {
-    if(!args)
-        return false;
-
-    char * file = strtok((char*)args, " "); if(!file) return false;
-    char * acc = strtok(NULL, " "); if(!acc) return false;
-    if(!file || !acc)
-        return false;
-
-    uint32 account_id = accmgr.GetId(acc);
+    if (!args)
+        return false;
+
+    char * file = strtok((char*)args, " ");
+	if(!file)
+		return false;
+
+	char * account = strtok(NULL, " ");
+	if(!account)
+		return false;
+
+	std::string account_name = account;
+	if(!AccountMgr::normilizeString(account_name))
+	{
+		PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+		SetSentErrorMessage(true);
+        return false;
+	}
+
+    uint32 account_id = accmgr.GetId(account_name);
     if(!account_id)
     {
-        account_id = atoi(acc);
-        if(account_id)
+        account_id = atoi(account);                             // use original string
+        if(!account_id)
         {
-            std::string acc_name;
-            if(!accmgr.GetName(account_id,acc_name))
-                return false;
+            PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+			SetSentErrorMessage(true);
+			return false;
         }
-        else
+	}
+
+	if(!accmgr.GetName(account_id,account_name))
+	{
+		PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+		SetSentErrorMessage(true);
+		return false;
+	}
+
+	char* guid_str = NULL;
+	char* name_str = strtok(NULL, " ");
+
+	std::string name;
+	if(name_str)
+	{
+		name = name_str;
+		// normalize the name if specified and check if it exists
+		if(!normalizePlayerName(name))
+		{
+			PSendSysMessage(LANG_INVALID_CHARACTER_NAME);
+			SetSentErrorMessage(true);
+			return false;
+		}
+
+		if(!ObjectMgr::IsValidName(name,true))
+		{
+			PSendSysMessage(LANG_INVALID_CHARACTER_NAME);
+			SetSentErrorMessage(true);
             return false;
-    }
-
-    char * name = strtok(NULL, " ");
-    char * guid_str = name ? strtok(NULL, " ") : NULL;
-
-    uint32 guid = guid_str ? atoi(guid_str) : 0;
-
-    if(PlayerDumpReader().LoadDump(file, account_id, name ? name : "", guid))
-        PSendSysMessage(LANG_COMMAND_IMPORT_SUCCESS);
-    else
-        PSendSysMessage(LANG_COMMAND_IMPORT_FAILED);
+		}
+
+		guid_str = strtok(NULL, " ");
+    }
+
+    uint32 guid = 0;
+
+    if(guid_str)
+	{
+		guid = atoi(guid_str);
+		if(!guid)
+		{
+			PSendSysMessage(LANG_INVALID_CHARACTER_GUID);
+			SetSentErrorMessage(true);
+			return false;
+		}
+		
+		if(objmgr.GetPlayerAccountIdByGUID(guid))
+		{
+			PSendSysMessage(LANG_CHARACTER_GUID_IN_USE,guid);
+			SetSentErrorMessage(true);
+			return false;
+		}
+	}
+
+	switch(PlayerDumpReader().LoadDump(file, account_id, name, guid))
+	{
+		case DUMP_SUCCESS:
+			PSendSysMessage(LANG_COMMAND_IMPORT_SUCCESS);
+			break;
+		case DUMP_FILE_OPEN_ERROR:
+			PSendSysMessage(LANG_FILE_OPEN_FAIL,file);
+			SetSentErrorMessage(true);
+			return false;
+		case DUMP_FILE_BROKEN:
+			PSendSysMessage(LANG_DUMP_BROKEN,file);
+			SetSentErrorMessage(true);
+			return false;
+		case DUMP_TOO_MANY_CHARS:
+			PSendSysMessage(LANG_ACCOUNT_CHARACTER_LIST_FULL,account_name,account_id);
+			SetSentErrorMessage(true);
+			return false;
+		default:
+			PSendSysMessage(LANG_COMMAND_IMPORT_FAILED);
+			SetSentErrorMessage(true);
+			return false;
+	}
 
     return true;
@@ -5087,8 +5564,25 @@
         guid = atoi(p2);
 
-    if (PlayerDumpWriter().WriteDump(file, guid))
-        PSendSysMessage(LANG_COMMAND_EXPORT_SUCCESS);
-    else
-        PSendSysMessage(LANG_COMMAND_EXPORT_FAILED);
+    if(!objmgr.GetPlayerAccountIdByGUID(guid))
+	{
+		PSendSysMessage(LANG_PLAYER_NOT_FOUND);
+		SetSentErrorMessage(true);
+		return false;
+	}
+
+	switch(PlayerDumpWriter().WriteDump(file, guid))
+	{
+		case DUMP_SUCCESS:
+			PSendSysMessage(LANG_COMMAND_EXPORT_SUCCESS);
+			break;
+		case DUMP_FILE_OPEN_ERROR:
+			PSendSysMessage(LANG_FILE_OPEN_FAIL,file);
+			SetSentErrorMessage(true);
+			return false;
+		default:
+			PSendSysMessage(LANG_COMMAND_EXPORT_FAILED);
+			SetSentErrorMessage(true);
+			return false;
+	}
 
     return true;
@@ -5574,4 +6068,133 @@
 }
 
+/// Display the list of GMs
+bool ChatHandler::HandleGMListFullCommand(const char* /*args*/)
+{
+	///- Get the accounts with GM Level >0
+	QueryResult *result = loginDatabase.Query( "SELECT username,gmlevel FROM account WHERE gmlevel > 0" );
+	if(result)
+	{
+		SendSysMessage(LANG_GMLIST);
+		SendSysMessage("========================");
+		SendSysMessage(LANG_GMLIST_HEADER);
+		SendSysMessage("========================");
+
+		///- Circle through them. Display username and GM level
+		do
+		{
+			Field *fields = result->Fetch();
+			PSendSysMessage("|%15s|%6s|", fields[0].GetString(),fields[1].GetString());
+		} while( result->NextRow() );
+
+		PSendSysMessage("========================");
+		delete result;
+	}
+	else
+		PSendSysMessage(LANG_GMLIST_EMPTY);
+	return true;
+}
+
+/// Define the 'Message of the day' for the realm
+bool ChatHandler::HandleServerSetMotdCommand(const char* args)
+{
+	sWorld.SetMotd(args);
+	PSendSysMessage(LANG_MOTD_NEW, args);
+	return true;
+}
+
+/// Set/Unset the expansion level for an account
+bool ChatHandler::HandleAccountSetAddonCommand(const char* args)
+{
+	///- Get the command line arguments
+	char *szAcc = strtok((char*)args," ");
+	char *szExp = strtok(NULL," ");
+
+	if(!szAcc)
+		return false;
+
+	std::string account_name;
+	uint32 account_id;
+
+	if(!szExp)
+	{
+		Player* player = getSelectedPlayer();
+		if(!player)
+			return false;
+
+		account_id = player->GetSession()->GetAccountId();
+		accmgr.GetName(account_id,account_name);
+		szExp = szAcc;
+	}
+	else
+	{
+		///- Convert Account name to Upper Format
+		account_name = szAcc;
+		if(!AccountMgr::normilizeString(account_name))
+		{
+			PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+			SetSentErrorMessage(true);
+			return false;
+		}
+
+		account_id = accmgr.GetId(account_name);
+		if(!account_id)
+		{
+			PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+			SetSentErrorMessage(true);
+			return false;
+		}
+	}
+
+	int lev=atoi(szExp);                                    //get int anyway (0 if error)
+	if(lev < 0)
+		return false;
+
+	// No SQL injection
+	loginDatabase.PExecute("UPDATE account SET expansion = '%d' WHERE id = '%u'",lev,account_id);
+	PSendSysMessage(LANG_ACCOUNT_SETADDON,account_name.c_str(),account_id,lev);
+	return true;
+}
+
+/// Send a message to a player in game
+bool ChatHandler::HandleSendMessageCommand(const char* args)
+{
+	///- Get the command line arguments
+	char* name_str = strtok((char*)args, " ");
+	char* msg_str = strtok(NULL, "");
+
+	if(!name_str || !msg_str)
+		return false;
+
+	std::string name = name_str;
+
+	if(!normalizePlayerName(name))
+		return false;
+
+	///- Find the player and check that he is not logging out.
+	Player *rPlayer = objmgr.GetPlayer(name.c_str());
+	if(!rPlayer)
+	{
+		SendSysMessage(LANG_PLAYER_NOT_FOUND);
+		SetSentErrorMessage(true);
+		return false;
+	}
+
+	if(rPlayer->GetSession()->isLogingOut())
+	{
+		SendSysMessage(LANG_PLAYER_NOT_FOUND);
+		SetSentErrorMessage(true);
+		return false;
+	}
+
+	///- Send the message
+	//Use SendAreaTriggerMessage for fastest delivery.
+	rPlayer->GetSession()->SendAreaTriggerMessage("%s", msg_str);
+	rPlayer->GetSession()->SendAreaTriggerMessage("|cffff0000[Message from administrator]:|r");
+
+	//Confirmation message
+	PSendSysMessage(LANG_SENDMESSAGE,name.c_str(),msg_str);
+	return true;
+}
+
 bool ChatHandler::HandleFreezeCommand(const char *args)
 {
Index: /trunk/src/game/Chat.cpp
===================================================================
--- /trunk/src/game/Chat.cpp (revision 102)
+++ /trunk/src/game/Chat.cpp (revision 112)
@@ -39,452 +39,504 @@
 ChatCommand * ChatHandler::getCommandTable()
 {
+	static ChatCommand accountSetCommandTable[] =
+	{
+		{ "addon",          SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleAccountSetAddonCommand,     "", NULL },
+		{ "gmlevel",        SEC_CONSOLE,        true,  &ChatHandler::HandleAccountSetGmLevelCommand,   "", NULL },
+		{ "password",       SEC_CONSOLE,        true,  &ChatHandler::HandleAccountSetPasswordCommand,  "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
+	};
+
+	static ChatCommand accountCommandTable[] =
+	{
+		{ "create",         SEC_CONSOLE,        true,  &ChatHandler::HandleAccountCreateCommand,       "", NULL },
+		{ "delete",         SEC_CONSOLE,        true,  &ChatHandler::HandleAccountDeleteCommand,       "", NULL },
+		{ "onlinelist",     SEC_CONSOLE,        true,  &ChatHandler::HandleAccountOnlineListCommand,   "", NULL },
+		{ "set",            SEC_ADMINISTRATOR,  true,  NULL,                                           "", accountSetCommandTable },
+		{ "",               SEC_PLAYER,         false, &ChatHandler::HandleAccountCommand,             "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
+	};
+
+	static ChatCommand serverSetCommandTable[] =
+	{
+		{ "loglevel",       SEC_CONSOLE,        true,  &ChatHandler::HandleServerSetLogLevelCommand,   "", NULL },
+		{ "motd",           SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleServerSetMotdCommand,       "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
+	};
+
     static ChatCommand serverCommandTable[] =
     {
-        { "idlerestart",    SEC_ADMINISTRATOR,  &ChatHandler::HandleIdleRestartCommand,         "", NULL },
-        { "idleshutdown",   SEC_ADMINISTRATOR,  &ChatHandler::HandleIdleShutDownCommand,        "", NULL },
-        { "info",           SEC_PLAYER,         &ChatHandler::HandleInfoCommand,                "", NULL },
-        { "restart",        SEC_ADMINISTRATOR,  &ChatHandler::HandleRestartCommand,             "", NULL },
-        { "shutdown",       SEC_ADMINISTRATOR,  &ChatHandler::HandleShutDownCommand,            "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
+        { "corpses",        SEC_GAMEMASTER,     true,  &ChatHandler::HandleServerCorpsesCommand,       "", NULL },
+		{ "exit",           SEC_CONSOLE,        true,  &ChatHandler::HandleServerExitCommand,          "", NULL },
+		{ "idlerestart",    SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleIdleRestartCommand,         "", NULL },
+		{ "idleshutdown",   SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleIdleShutDownCommand,        "", NULL },
+		{ "info",           SEC_PLAYER,         true,  &ChatHandler::HandleInfoCommand,                "", NULL },
+		{ "motd",           SEC_PLAYER,         true,  &ChatHandler::HandleServerMotdCommand,          "", NULL },
+		{ "restart",        SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleRestartCommand,             "", NULL },
+		{ "shutdown",       SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleShutDownCommand,            "", NULL },
+		{ "set",            SEC_ADMINISTRATOR,  true,  NULL,                                           "", serverSetCommandTable },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
     static ChatCommand modifyCommandTable[] =
     {
-        { "hp",             SEC_MODERATOR,      &ChatHandler::HandleModifyHPCommand,            "", NULL },
-        { "mana",           SEC_MODERATOR,      &ChatHandler::HandleModifyManaCommand,          "", NULL },
-        { "rage",           SEC_MODERATOR,      &ChatHandler::HandleModifyRageCommand,          "", NULL },
-        { "energy",         SEC_MODERATOR,      &ChatHandler::HandleModifyEnergyCommand,        "", NULL },
-        { "money",          SEC_MODERATOR,      &ChatHandler::HandleModifyMoneyCommand,         "", NULL },
-        { "speed",          SEC_MODERATOR,      &ChatHandler::HandleModifySpeedCommand,         "", NULL },
-        { "swim",           SEC_MODERATOR,      &ChatHandler::HandleModifySwimCommand,          "", NULL },
-        { "scale",          SEC_MODERATOR,      &ChatHandler::HandleModifyScaleCommand,         "", NULL },
-        { "bit",            SEC_MODERATOR,      &ChatHandler::HandleModifyBitCommand,           "", NULL },
-        { "bwalk",          SEC_MODERATOR,      &ChatHandler::HandleModifyBWalkCommand,         "", NULL },
-        { "fly",            SEC_MODERATOR,      &ChatHandler::HandleModifyFlyCommand,           "", NULL },
-        { "aspeed",         SEC_MODERATOR,      &ChatHandler::HandleModifyASpeedCommand,        "", NULL },
-        { "faction",        SEC_MODERATOR,      &ChatHandler::HandleModifyFactionCommand,       "", NULL },
-        { "spell",          SEC_MODERATOR,      &ChatHandler::HandleModifySpellCommand,         "", NULL },
-        { "tp",             SEC_MODERATOR,      &ChatHandler::HandleModifyTalentCommand,        "", NULL },
-        { "titles",         SEC_MODERATOR,      &ChatHandler::HandleModifyKnownTitlesCommand,   "", NULL },
-        { "mount",          SEC_MODERATOR,      &ChatHandler::HandleModifyMountCommand,         "", NULL },
-        { "honor",          SEC_MODERATOR,      &ChatHandler::HandleModifyHonorCommand,         "", NULL },
-        { "rep",            SEC_MODERATOR,      &ChatHandler::HandleModifyRepCommand,           "", NULL },
-        { "arena",          SEC_MODERATOR,      &ChatHandler::HandleModifyArenaCommand,         "", NULL },
-        { "drunk",          SEC_MODERATOR,      &ChatHandler::HandleDrunkCommand,               "", NULL },
-        { "standstate",     SEC_GAMEMASTER,     &ChatHandler::HandleStandStateCommand,          "", NULL },
-        { "morph",          SEC_GAMEMASTER,     &ChatHandler::HandleMorphCommand,               "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
+        { "hp",             SEC_MODERATOR,      false, &ChatHandler::HandleModifyHPCommand,            "", NULL },
+		{ "mana",           SEC_MODERATOR,      false, &ChatHandler::HandleModifyManaCommand,          "", NULL },
+		{ "rage",           SEC_MODERATOR,      false, &ChatHandler::HandleModifyRageCommand,          "", NULL },
+		{ "energy",         SEC_MODERATOR,      false, &ChatHandler::HandleModifyEnergyCommand,        "", NULL },
+		{ "money",          SEC_MODERATOR,      false, &ChatHandler::HandleModifyMoneyCommand,         "", NULL },
+		{ "speed",          SEC_MODERATOR,      false, &ChatHandler::HandleModifySpeedCommand,         "", NULL },
+		{ "swim",           SEC_MODERATOR,      false, &ChatHandler::HandleModifySwimCommand,          "", NULL },
+		{ "scale",          SEC_MODERATOR,      false, &ChatHandler::HandleModifyScaleCommand,         "", NULL },
+		{ "bit",            SEC_MODERATOR,      false, &ChatHandler::HandleModifyBitCommand,           "", NULL },
+		{ "bwalk",          SEC_MODERATOR,      false, &ChatHandler::HandleModifyBWalkCommand,         "", NULL },
+		{ "fly",            SEC_MODERATOR,      false, &ChatHandler::HandleModifyFlyCommand,           "", NULL },
+		{ "aspeed",         SEC_MODERATOR,      false, &ChatHandler::HandleModifyASpeedCommand,        "", NULL },
+		{ "faction",        SEC_MODERATOR,      false, &ChatHandler::HandleModifyFactionCommand,       "", NULL },
+		{ "spell",          SEC_MODERATOR,      false, &ChatHandler::HandleModifySpellCommand,         "", NULL },
+		{ "tp",             SEC_MODERATOR,      false, &ChatHandler::HandleModifyTalentCommand,        "", NULL },
+		{ "titles",         SEC_MODERATOR,      false, &ChatHandler::HandleModifyKnownTitlesCommand,   "", NULL },
+		{ "mount",          SEC_MODERATOR,      false, &ChatHandler::HandleModifyMountCommand,         "", NULL },
+		{ "honor",          SEC_MODERATOR,      false, &ChatHandler::HandleModifyHonorCommand,         "", NULL },
+		{ "rep",            SEC_MODERATOR,      false, &ChatHandler::HandleModifyRepCommand,           "", NULL },
+		{ "arena",          SEC_MODERATOR,      false, &ChatHandler::HandleModifyArenaCommand,         "", NULL },
+		{ "drunk",          SEC_MODERATOR,      false, &ChatHandler::HandleDrunkCommand,               "", NULL },
+		{ "standstate",     SEC_GAMEMASTER,     false, &ChatHandler::HandleStandStateCommand,          "", NULL },
+		{ "morph",          SEC_GAMEMASTER,     false, &ChatHandler::HandleMorphCommand,               "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
     static ChatCommand wpCommandTable[] =
     {
-        { "show",           SEC_GAMEMASTER,     &ChatHandler::HandleWpShowCommand,              "", NULL },
-        { "add",            SEC_GAMEMASTER,     &ChatHandler::HandleWpAddCommand,               "", NULL },
-        { "modify",         SEC_GAMEMASTER,     &ChatHandler::HandleWpModifyCommand,            "", NULL },
-        { "export",         SEC_ADMINISTRATOR,  &ChatHandler::HandleWpExportCommand,            "", NULL },
-        { "import",         SEC_ADMINISTRATOR,  &ChatHandler::HandleWpImportCommand,            "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
-    };
+        { "show",           SEC_GAMEMASTER,     false, &ChatHandler::HandleWpShowCommand,              "", NULL },
+		{ "add",            SEC_GAMEMASTER,     false, &ChatHandler::HandleWpAddCommand,               "", NULL },
+		{ "modify",         SEC_GAMEMASTER,     false, &ChatHandler::HandleWpModifyCommand,            "", NULL },
+		{ "export",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleWpExportCommand,            "", NULL },
+		{ "import",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleWpImportCommand,            "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
+    };
+
+	static ChatCommand banCommandTable[] =
+	{
+		{ "account",        SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleBanAccountCommand,          "", NULL },
+		{ "character",      SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleBanCharacterCommand,        "", NULL },
+		{ "ip",             SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleBanIPCommand,               "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
+	};
+
+	static ChatCommand baninfoCommandTable[] =
+	{
+		{ "account",        SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleBanInfoAccountCommand,      "", NULL },
+		{ "character",      SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleBanInfoCharacterCommand,    "", NULL },
+		{ "ip",             SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleBanInfoIPCommand,           "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
+	};
+
+	static ChatCommand banlistCommandTable[] =
+	{
+		{ "account",        SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleBanListAccountCommand,      "", NULL },
+		{ "character",      SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleBanListCharacterCommand,    "", NULL },
+		{ "ip",             SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleBanListIPCommand,           "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
+	};
+
+	static ChatCommand unbanCommandTable[] =
+	{
+		{ "account",        SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleUnBanAccountCommand,      "", NULL },
+		{ "character",      SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleUnBanCharacterCommand,    "", NULL },
+		{ "ip",             SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleUnBanIPCommand,           "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
+	};
 
     static ChatCommand debugCommandTable[] =
     {
-        { "inarc",          SEC_ADMINISTRATOR,  &ChatHandler::HandleDebugInArcCommand,          "", NULL },
-        { "spellfail",      SEC_ADMINISTRATOR,  &ChatHandler::HandleDebugSpellFailCommand,      "", NULL },
-        { "setpoi",         SEC_ADMINISTRATOR,  &ChatHandler::HandleSetPoiCommand,              "", NULL },
-        { "qpartymsg",      SEC_ADMINISTRATOR,  &ChatHandler::HandleSendQuestPartyMsgCommand,   "", NULL },
-        { "qinvalidmsg",    SEC_ADMINISTRATOR,  &ChatHandler::HandleSendQuestInvalidMsgCommand, "", NULL },
-        { "equiperr",       SEC_ADMINISTRATOR,  &ChatHandler::HandleEquipErrorCommand,          "", NULL },
-        { "sellerr",        SEC_ADMINISTRATOR,  &ChatHandler::HandleSellErrorCommand,           "", NULL },
-        { "buyerr",         SEC_ADMINISTRATOR,  &ChatHandler::HandleBuyErrorCommand,            "", NULL },
-        { "sendopcode",     SEC_ADMINISTRATOR,  &ChatHandler::HandleSendOpcodeCommand,          "", NULL },
-        { "uws",            SEC_ADMINISTRATOR,  &ChatHandler::HandleUpdateWorldStateCommand,    "", NULL },
-        { "ps",             SEC_ADMINISTRATOR,  &ChatHandler::HandlePlaySound2Command,          "", NULL },
-        { "scn",            SEC_ADMINISTRATOR,  &ChatHandler::HandleSendChannelNotifyCommand,   "", NULL },
-        { "scm",            SEC_ADMINISTRATOR,  &ChatHandler::HandleSendChatMsgCommand,         "", NULL },
-        { "getitemstate",   SEC_ADMINISTRATOR,  &ChatHandler::HandleGetItemState,               "", NULL },
-        { "playsound",      SEC_MODERATOR,      &ChatHandler::HandlePlaySoundCommand,           "", NULL },
-        { "update",         SEC_ADMINISTRATOR,  &ChatHandler::HandleUpdate,                     "", NULL },
-        { "setvalue",       SEC_ADMINISTRATOR,  &ChatHandler::HandleSetValue,                   "", NULL },
-        { "getvalue",       SEC_ADMINISTRATOR,  &ChatHandler::HandleGetValue,                   "", NULL },
-        { "Mod32Value",     SEC_ADMINISTRATOR,  &ChatHandler::HandleMod32Value,                 "", NULL },
-        { "anim",           SEC_GAMEMASTER,     &ChatHandler::HandleAnimCommand,                "", NULL },
-        { "lootrecipient",  SEC_GAMEMASTER,     &ChatHandler::HandleGetLootRecipient,           "", NULL },
-        { "arena",          SEC_ADMINISTRATOR,  &ChatHandler::HandleDebugArenaCommand,          "", NULL },
-        { "threatlist",     SEC_ADMINISTRATOR,  &ChatHandler::HandleDebugThreatList,            "", NULL },
-        { "hostilrefs",     SEC_ADMINISTRATOR,  &ChatHandler::HandleDebugHostilRefList,         "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
+        { "inarc",          SEC_ADMINISTRATOR,  false, &ChatHandler::HandleDebugInArcCommand,          "", NULL },
+		{ "spellfail",      SEC_ADMINISTRATOR,  false, &ChatHandler::HandleDebugSpellFailCommand,      "", NULL },
+		{ "setpoi",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleSetPoiCommand,              "", NULL },
+		{ "qpartymsg",      SEC_ADMINISTRATOR,  false, &ChatHandler::HandleSendQuestPartyMsgCommand,   "", NULL },
+		{ "qinvalidmsg",    SEC_ADMINISTRATOR,  false, &ChatHandler::HandleSendQuestInvalidMsgCommand, "", NULL },
+		{ "equiperr",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleEquipErrorCommand,          "", NULL },
+		{ "sellerr",        SEC_ADMINISTRATOR,  false, &ChatHandler::HandleSellErrorCommand,           "", NULL },
+		{ "buyerr",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleBuyErrorCommand,            "", NULL },
+		{ "sendopcode",     SEC_ADMINISTRATOR,  false, &ChatHandler::HandleSendOpcodeCommand,          "", NULL },
+		{ "uws",            SEC_ADMINISTRATOR,  false, &ChatHandler::HandleUpdateWorldStateCommand,    "", NULL },
+		{ "ps",             SEC_ADMINISTRATOR,  false, &ChatHandler::HandlePlaySound2Command,          "", NULL },
+		{ "scn",            SEC_ADMINISTRATOR,  false, &ChatHandler::HandleSendChannelNotifyCommand,   "", NULL },
+		{ "scm",            SEC_ADMINISTRATOR,  false, &ChatHandler::HandleSendChatMsgCommand,         "", NULL },
+		{ "getitemstate",   SEC_ADMINISTRATOR,  false, &ChatHandler::HandleGetItemState,               "", NULL },
+		{ "playsound",      SEC_MODERATOR,      false, &ChatHandler::HandlePlaySoundCommand,           "", NULL },
+		{ "update",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleUpdate,                     "", NULL },
+		{ "setvalue",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleSetValue,                   "", NULL },
+		{ "getvalue",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleGetValue,                   "", NULL },
+		{ "Mod32Value",     SEC_ADMINISTRATOR,  false, &ChatHandler::HandleMod32Value,                 "", NULL },
+		{ "anim",           SEC_GAMEMASTER,     false, &ChatHandler::HandleAnimCommand,                "", NULL },
+		{ "lootrecipient",  SEC_GAMEMASTER,     false, &ChatHandler::HandleGetLootRecipient,           "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
     static ChatCommand eventCommandTable[] =
     {
-        { "activelist",     SEC_GAMEMASTER,     &ChatHandler::HandleEventActiveListCommand,     "", NULL },
-        { "start",          SEC_GAMEMASTER,     &ChatHandler::HandleEventStartCommand,          "", NULL },
-        { "stop",           SEC_GAMEMASTER,     &ChatHandler::HandleEventStopCommand,           "", NULL },
-        { "",               SEC_GAMEMASTER,     &ChatHandler::HandleEventInfoCommand,           "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
+        { "activelist",     SEC_GAMEMASTER,     true,  &ChatHandler::HandleEventActiveListCommand,     "", NULL },
+		{ "start",          SEC_GAMEMASTER,     true,  &ChatHandler::HandleEventStartCommand,          "", NULL },
+		{ "stop",           SEC_GAMEMASTER,     true,  &ChatHandler::HandleEventStopCommand,           "", NULL },
+		{ "",               SEC_GAMEMASTER,     true, &ChatHandler::HandleEventInfoCommand,            "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
     static ChatCommand learnCommandTable[] =
     {
-        { "all",            SEC_ADMINISTRATOR,  &ChatHandler::HandleLearnAllCommand,            "", NULL },
-        { "all_gm",         SEC_GAMEMASTER,     &ChatHandler::HandleLearnAllGMCommand,          "", NULL },
-        { "all_crafts",     SEC_GAMEMASTER,     &ChatHandler::HandleLearnAllCraftsCommand,      "", NULL },
-        { "all_default",    SEC_MODERATOR,      &ChatHandler::HandleLearnAllDefaultCommand,     "", NULL },
-        { "all_lang",       SEC_MODERATOR,      &ChatHandler::HandleLearnAllLangCommand,        "", NULL },
-        { "all_myclass",    SEC_ADMINISTRATOR,  &ChatHandler::HandleLearnAllMyClassCommand,     "", NULL },
-        { "all_myspells",   SEC_ADMINISTRATOR,  &ChatHandler::HandleLearnAllMySpellsCommand,    "", NULL },
-        { "all_mytalents",  SEC_ADMINISTRATOR,  &ChatHandler::HandleLearnAllMyTalentsCommand,   "", NULL },
-        { "all_recipes",    SEC_GAMEMASTER,     &ChatHandler::HandleLearnAllRecipesCommand,     "", NULL },
-        { "",               SEC_ADMINISTRATOR,  &ChatHandler::HandleLearnCommand,               "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
+        { "all",            SEC_ADMINISTRATOR,  false, &ChatHandler::HandleLearnAllCommand,            "", NULL },
+		{ "all_gm",         SEC_GAMEMASTER,     false, &ChatHandler::HandleLearnAllGMCommand,          "", NULL },
+		{ "all_crafts",     SEC_GAMEMASTER,     false, &ChatHandler::HandleLearnAllCraftsCommand,      "", NULL },
+		{ "all_default",    SEC_MODERATOR,      false, &ChatHandler::HandleLearnAllDefaultCommand,     "", NULL },
+		{ "all_lang",       SEC_MODERATOR,      false, &ChatHandler::HandleLearnAllLangCommand,        "", NULL },
+		{ "all_myclass",    SEC_ADMINISTRATOR,  false, &ChatHandler::HandleLearnAllMyClassCommand,     "", NULL },
+		{ "all_myspells",   SEC_ADMINISTRATOR,  false, &ChatHandler::HandleLearnAllMySpellsCommand,    "", NULL },
+		{ "all_mytalents",  SEC_ADMINISTRATOR,  false, &ChatHandler::HandleLearnAllMyTalentsCommand,   "", NULL },
+		{ "all_recipes",    SEC_GAMEMASTER,     false, &ChatHandler::HandleLearnAllRecipesCommand,     "", NULL },
+		{ "",               SEC_ADMINISTRATOR,  false, &ChatHandler::HandleLearnCommand,               "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
     static ChatCommand reloadCommandTable[] =
     {
-        { "all",            SEC_ADMINISTRATOR,  &ChatHandler::HandleReloadAllCommand,           "", NULL },
-        { "all_loot",       SEC_ADMINISTRATOR,  &ChatHandler::HandleReloadAllLootCommand,       "", NULL },
-        { "all_npc",        SEC_ADMINISTRATOR,  &ChatHandler::HandleReloadAllNpcCommand,        "", NULL },
-        { "all_quest",      SEC_ADMINISTRATOR,  &ChatHandler::HandleReloadAllQuestCommand,      "", NULL },
-        { "all_scripts",    SEC_ADMINISTRATOR,  &ChatHandler::HandleReloadAllScriptsCommand,    "", NULL },
-        { "all_spell",      SEC_ADMINISTRATOR,  &ChatHandler::HandleReloadAllSpellCommand,      "", NULL },
-        { "all_item",       SEC_ADMINISTRATOR,  &ChatHandler::HandleReloadAllItemCommand,       "", NULL },
-        { "all_locales",    SEC_ADMINISTRATOR,  &ChatHandler::HandleReloadAllLocalesCommand,    "", NULL },
-
-        { "config",         SEC_ADMINISTRATOR,  &ChatHandler::HandleReloadConfigCommand,        "", NULL },
-
-        { "areatrigger_tavern",          SEC_ADMINISTRATOR, &ChatHandler::HandleReloadAreaTriggerTavernCommand,       "", NULL },
-        { "areatrigger_teleport",        SEC_ADMINISTRATOR, &ChatHandler::HandleReloadAreaTriggerTeleportCommand,     "", NULL },
-        { "areatrigger_involvedrelation",SEC_ADMINISTRATOR, &ChatHandler::HandleReloadQuestAreaTriggersCommand,       "", NULL },
-        { "event_scripts",               SEC_ADMINISTRATOR, &ChatHandler::HandleReloadEventScriptsCommand,            "", NULL },
-        { "command",                     SEC_ADMINISTRATOR, &ChatHandler::HandleReloadCommandCommand,                 "", NULL },
-        { "creature_involvedrelation",   SEC_ADMINISTRATOR, &ChatHandler::HandleReloadCreatureQuestInvRelationsCommand,"",NULL },
-        { "creature_loot_template",      SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesCreatureCommand,   "", NULL },
-        { "creature_questrelation",      SEC_ADMINISTRATOR, &ChatHandler::HandleReloadCreatureQuestRelationsCommand,  "", NULL },
-        { "disenchant_loot_template",    SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesDisenchantCommand, "", NULL },
-        { "fishing_loot_template",       SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesFishingCommand,    "", NULL },
-        { "game_graveyard_zone",         SEC_ADMINISTRATOR, &ChatHandler::HandleReloadGameGraveyardZoneCommand,       "", NULL },
-        { "game_tele",                   SEC_ADMINISTRATOR, &ChatHandler::HandleReloadGameTeleCommand,                "", NULL },
-        { "gameobject_involvedrelation", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadGOQuestInvRelationsCommand,     "", NULL },
-        { "gameobject_loot_template",    SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesGameobjectCommand, "", NULL },
-        { "gameobject_questrelation",    SEC_ADMINISTRATOR, &ChatHandler::HandleReloadGOQuestRelationsCommand,        "", NULL },
-        { "gameobject_scripts",          SEC_ADMINISTRATOR, &ChatHandler::HandleReloadGameObjectScriptsCommand,       "", NULL },
-        { "item_enchantment_template",   SEC_ADMINISTRATOR, &ChatHandler::HandleReloadItemEnchantementsCommand,       "", NULL },
-        { "item_loot_template",          SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesItemCommand,       "", NULL },
-        { "trinity_string",              SEC_ADMINISTRATOR, &ChatHandler::HandleReloadTrinityStringCommand,           "", NULL },
-        { "npc_gossip",                  SEC_ADMINISTRATOR, &ChatHandler::HandleReloadNpcGossipCommand,               "", NULL },
-        { "npc_trainer",                 SEC_ADMINISTRATOR, &ChatHandler::HandleReloadNpcTrainerCommand,              "", NULL },
-        { "npc_vendor",                  SEC_ADMINISTRATOR, &ChatHandler::HandleReloadNpcVendorCommand,               "", NULL },
-        { "page_text",                   SEC_ADMINISTRATOR, &ChatHandler::HandleReloadPageTextsCommand,               "", NULL },
-        { "pickpocketing_loot_template", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesPickpocketingCommand,"",NULL},
-        { "prospecting_loot_template",   SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesProspectingCommand,"", NULL },
-        { "quest_mail_loot_template",    SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesQuestMailCommand,  "", NULL },
-        { "quest_end_scripts",           SEC_ADMINISTRATOR, &ChatHandler::HandleReloadQuestEndScriptsCommand,         "", NULL },
-        { "quest_start_scripts",         SEC_ADMINISTRATOR, &ChatHandler::HandleReloadQuestStartScriptsCommand,       "", NULL },
-        { "quest_template",              SEC_ADMINISTRATOR, &ChatHandler::HandleReloadQuestTemplateCommand,           "", NULL },
-        { "reference_loot_template",     SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesReferenceCommand,  "", NULL },
-        { "reserved_name",               SEC_ADMINISTRATOR, &ChatHandler::HandleReloadReservedNameCommand,            "", NULL },
-        { "skill_discovery_template",    SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSkillDiscoveryTemplateCommand,  "", NULL },
-        { "skill_extra_item_template",   SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSkillExtraItemTemplateCommand,  "", NULL },
-        { "skill_fishing_base_level",    SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSkillFishingBaseLevelCommand,   "", NULL },
-        { "skinning_loot_template",      SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesSkinningCommand,   "", NULL },
-        { "spell_affect",                SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellAffectCommand,             "", NULL },
-        { "spell_chain",                 SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellChainCommand,              "", NULL },
-        { "spell_elixir",                SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellElixirCommand,             "", NULL },
-        { "spell_learn_spell",           SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellLearnSpellCommand,         "", NULL },
-        { "spell_pet_auras",             SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellPetAurasCommand,           "", NULL },
-        { "spell_proc_event",            SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellProcEventCommand,          "", NULL },
-        { "spell_script_target",         SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellScriptTargetCommand,       "", NULL },
-        { "spell_scripts",               SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellScriptsCommand,            "", NULL },
-        { "spell_target_position",       SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellTargetPositionCommand,     "", NULL },
-        { "spell_threats",               SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellThreatsCommand,            "", NULL },
-        { "spell_disabled",              SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellDisabledCommand,           "", NULL },
-        { "locales_creature",            SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLocalesCreatureCommand,         "", NULL },
-        { "locales_gameobject",          SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLocalesGameobjectCommand,       "", NULL },
-        { "locales_item",                SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLocalesItemCommand,             "", NULL },
-        { "locales_npc_text",            SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLocalesNpcTextCommand,          "", NULL },
-        { "locales_page_text",           SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLocalesPageTextCommand,         "", NULL },
-        { "locales_quest",               SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLocalesQuestCommand,            "", NULL },
-        { "",                            SEC_ADMINISTRATOR, &ChatHandler::HandleReloadCommand,                        "", NULL },
-        { NULL,                          0,                 NULL,                                                     "", NULL }
+        { "all", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAllCommand, "", NULL },
+		{"all_loot", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAllLootCommand, "", NULL },
+		{ "all_npc", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAllNpcCommand, "", NULL },
+		{ "all_quest", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAllQuestCommand, "", NULL },
+		{ "all_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAllScriptsCommand, "", NULL },
+		{ "all_spell", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAllSpellCommand, "", NULL },
+		{ "all_item", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAllItemCommand, "", NULL },
+		{ "all_locales", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAllLocalesCommand, "", NULL },
+
+		{ "config", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadConfigCommand, "", NULL },
+
+		{ "areatrigger_tavern", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAreaTriggerTavernCommand, "", NULL },
+		{ "areatrigger_teleport", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAreaTriggerTeleportCommand, "", NULL },
+		{ "areatrigger_involvedrelation",SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadQuestAreaTriggersCommand, "", NULL },
+		{ "event_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadEventScriptsCommand, "", NULL },
+		{ "command", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCommandCommand, "", NULL },
+		{ "creature_involvedrelation", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCreatureQuestInvRelationsCommand,"",NULL },
+		{ "creature_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesCreatureCommand, "", NULL },
+		{ "creature_questrelation", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCreatureQuestRelationsCommand, "", NULL },
+		{ "disenchant_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesDisenchantCommand, "", NULL },
+		{ "fishing_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesFishingCommand, "", NULL },
+		{ "game_graveyard_zone", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadGameGraveyardZoneCommand, "", NULL },
+		{ "game_tele", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadGameTeleCommand, "", NULL },
+		{ "gameobject_involvedrelation", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadGOQuestInvRelationsCommand, "", NULL },
+		{ "gameobject_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesGameobjectCommand, "", NULL },
+		{ "gameobject_questrelation", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadGOQuestRelationsCommand, "", NULL },
+		{ "gameobject_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadGameObjectScriptsCommand, "", NULL },
+		{ "item_enchantment_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadItemEnchantementsCommand, "", NULL },
+		{ "item_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesItemCommand, "", NULL },
+		{ "trinity_string", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadTrinityStringCommand, "", NULL },
+		{ "npc_gossip", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadNpcGossipCommand, "", NULL },
+		{ "npc_trainer", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadNpcTrainerCommand, "", NULL },
+		{ "npc_vendor", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadNpcVendorCommand, "", NULL },
+		{ "page_text", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadPageTextsCommand, "", NULL },
+		{ "pickpocketing_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesPickpocketingCommand,"",NULL},
+		{ "prospecting_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesProspectingCommand,"", NULL },
+		{ "quest_mail_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesQuestMailCommand, "", NULL },
+		{ "quest_end_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadQuestEndScriptsCommand, "", NULL },
+		{ "quest_start_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadQuestStartScriptsCommand, "", NULL },
+		{ "quest_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadQuestTemplateCommand, "", NULL },
+		{ "reference_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesReferenceCommand, "", NULL },
+		{ "reserved_name", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadReservedNameCommand, "", NULL },
+		{ "skill_discovery_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSkillDiscoveryTemplateCommand, "", NULL },
+		{ "skill_extra_item_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSkillExtraItemTemplateCommand, "", NULL },
+		{ "skill_fishing_base_level", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSkillFishingBaseLevelCommand, "", NULL },
+		{ "skinning_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesSkinningCommand, "", NULL },
+		{ "spell_affect", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellAffectCommand, "", NULL },
+		{ "spell_chain", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellChainCommand, "", NULL },
+		{ "spell_elixir", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellElixirCommand, "", NULL },
+		{ "spell_learn_spell", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellLearnSpellCommand, "", NULL },
+		{ "spell_pet_auras", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellPetAurasCommand, "", NULL },
+		{ "spell_proc_event", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellProcEventCommand, "", NULL },
+		{ "spell_script_target", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellScriptTargetCommand, "", NULL },
+		{ "spell_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellScriptsCommand, "", NULL },
+		{ "spell_target_position", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellTargetPositionCommand, "", NULL },
+		{ "spell_threats", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellThreatsCommand, "", NULL },
+		{ "locales_creature", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesCreatureCommand, "", NULL },
+		{ "locales_gameobject", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesGameobjectCommand, "", NULL },
+		{ "locales_item", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesItemCommand, "", NULL },
+		{ "locales_npc_text", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesNpcTextCommand, "", NULL },
+		{ "locales_page_text", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesPageTextCommand, "", NULL },
+		{ "locales_quest", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesQuestCommand, "", NULL },
+
+		{ "", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCommand, "", NULL },
+		{ NULL,                          0,                 false, NULL,                                                     "", NULL }
     };
 
     static ChatCommand honorCommandTable[] =
     {
-        { "add",            SEC_GAMEMASTER,     &ChatHandler::HandleAddHonorCommand,            "", NULL },
-        { "addkill",        SEC_GAMEMASTER,     &ChatHandler::HandleHonorAddKillCommand,        "", NULL },
-        { "update",         SEC_GAMEMASTER,     &ChatHandler::HandleUpdateHonorFieldsCommand,   "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
+        { "add",            SEC_GAMEMASTER,     false, &ChatHandler::HandleAddHonorCommand,            "", NULL },
+		{ "addkill",        SEC_GAMEMASTER,     false, &ChatHandler::HandleHonorAddKillCommand,        "", NULL },
+		{ "update",         SEC_GAMEMASTER,     false, &ChatHandler::HandleUpdateHonorFieldsCommand,   "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
     static ChatCommand guildCommandTable[] =
     {
-        { "create",         SEC_GAMEMASTER,     &ChatHandler::HandleGuildCreateCommand,         "", NULL },
-        { "delete",         SEC_GAMEMASTER,     &ChatHandler::HandleGuildDeleteCommand,         "", NULL },
-        { "invite",         SEC_GAMEMASTER,     &ChatHandler::HandleGuildInviteCommand,         "", NULL },
-        { "uninvite",       SEC_GAMEMASTER,     &ChatHandler::HandleGuildUninviteCommand,       "", NULL },
-        { "rank",           SEC_GAMEMASTER,     &ChatHandler::HandleGuildRankCommand,           "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
+		{ "create",         SEC_GAMEMASTER,     true,  &ChatHandler::HandleGuildCreateCommand,         "", NULL },
+		{ "delete",         SEC_GAMEMASTER,     true,  &ChatHandler::HandleGuildDeleteCommand,         "", NULL },
+		{ "invite",         SEC_GAMEMASTER,     true,  &ChatHandler::HandleGuildInviteCommand,         "", NULL },
+		{ "uninvite",       SEC_GAMEMASTER,     true,  &ChatHandler::HandleGuildUninviteCommand,       "", NULL },
+		{ "rank",           SEC_GAMEMASTER,     true,  &ChatHandler::HandleGuildRankCommand,           "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
     static ChatCommand groupCommandTable[] =
     {
-        { "leader",         SEC_ADMINISTRATOR,  &ChatHandler::HandleGroupLeaderCommand,         "", NULL },
-        { "disband",        SEC_ADMINISTRATOR,  &ChatHandler::HandleGroupDisbandCommand,        "", NULL },
-        { "remove",         SEC_ADMINISTRATOR,  &ChatHandler::HandleGroupRemoveCommand,         "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
+        { "leader",         SEC_ADMINISTRATOR,     false,  &ChatHandler::HandleGroupLeaderCommand,         "", NULL },
+        { "disband",        SEC_ADMINISTRATOR,     false,  &ChatHandler::HandleGroupDisbandCommand,        "", NULL },
+        { "remove",         SEC_ADMINISTRATOR,     false,  &ChatHandler::HandleGroupRemoveCommand,         "", NULL },
+        { NULL,             0,					   false, NULL,                                           "", NULL }
     };
 
     static ChatCommand lookupPlayerCommandTable[] =
     {
-        { "ip",            SEC_GAMEMASTER,     &ChatHandler::HandleLookupPlayerIpCommand,       "", NULL },
-        { "account",       SEC_GAMEMASTER,     &ChatHandler::HandleLookupPlayerAccountCommand,  "", NULL },
-        { "email",         SEC_GAMEMASTER,     &ChatHandler::HandleLookupPlayerEmailCommand,    "", NULL },
-        { NULL,            0,                  NULL,                                            "", NULL }
+		{ "ip", SEC_GAMEMASTER, true, &ChatHandler::HandleLookupPlayerIpCommand, "", NULL },
+		{ "account", SEC_GAMEMASTER, true, &ChatHandler::HandleLookupPlayerAccountCommand, "", NULL },
+		{ "email", SEC_GAMEMASTER, true, &ChatHandler::HandleLookupPlayerEmailCommand, "", NULL },
+		{ NULL,             0,                  false, NULL,                                            "", NULL }
     };
 
     static ChatCommand lookupCommandTable[] =
     {
-        { "area",           SEC_MODERATOR,      &ChatHandler::HandleLookupAreaCommand,          "", NULL },
-        { "creature",       SEC_ADMINISTRATOR,  &ChatHandler::HandleLookupCreatureCommand,      "", NULL },
-        { "event",          SEC_GAMEMASTER,     &ChatHandler::HandleLookupEventCommand,         "", NULL },
-        { "faction",        SEC_ADMINISTRATOR,  &ChatHandler::HandleLookupFactionCommand,       "", NULL },
-        { "item",           SEC_ADMINISTRATOR,  &ChatHandler::HandleLookupItemCommand,          "", NULL },
-        { "itemset",        SEC_ADMINISTRATOR,  &ChatHandler::HandleLookupItemSetCommand,       "", NULL },
-        { "object",         SEC_ADMINISTRATOR,  &ChatHandler::HandleLookupObjectCommand,        "", NULL },
-        { "quest",          SEC_ADMINISTRATOR,  &ChatHandler::HandleLookupQuestCommand,         "", NULL },
-        { "player",         SEC_GAMEMASTER,     NULL,                                           "", lookupPlayerCommandTable },
-        { "skill",          SEC_ADMINISTRATOR,  &ChatHandler::HandleLookupSkillCommand,         "", NULL },
-        { "spell",          SEC_ADMINISTRATOR,  &ChatHandler::HandleLookupSpellCommand,         "", NULL },
-        { "tele",           SEC_MODERATOR,      &ChatHandler::HandleLookupTeleCommand,          "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
+        { "area",           SEC_MODERATOR,      true,  &ChatHandler::HandleLookupAreaCommand,          "", NULL },
+		{ "creature",       SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLookupCreatureCommand,      "", NULL },
+		{ "event",          SEC_GAMEMASTER,     true,  &ChatHandler::HandleLookupEventCommand,         "", NULL },
+		{ "faction",        SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLookupFactionCommand,       "", NULL },
+		{ "item",           SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLookupItemCommand,          "", NULL },
+		{ "itemset",        SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLookupItemSetCommand,       "", NULL },
+		{ "object",         SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLookupObjectCommand,        "", NULL },
+		{ "quest",          SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLookupQuestCommand,         "", NULL },
+		{ "player",         SEC_GAMEMASTER,     true,  NULL,                                           "", lookupPlayerCommandTable },
+		{ "skill",          SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLookupSkillCommand,         "", NULL },
+		{ "spell",          SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLookupSpellCommand,         "", NULL },
+		{ "tele",           SEC_MODERATOR,      true,  &ChatHandler::HandleLookupTeleCommand,          "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
     static ChatCommand resetCommandTable[] =
     {
-        { "honor",          SEC_ADMINISTRATOR,  &ChatHandler::HandleResetHonorCommand,          "", NULL },
-        { "level",          SEC_ADMINISTRATOR,  &ChatHandler::HandleResetLevelCommand,          "", NULL },
-        { "spells",         SEC_ADMINISTRATOR,  &ChatHandler::HandleResetSpellsCommand,         "", NULL },
-        { "stats",          SEC_ADMINISTRATOR,  &ChatHandler::HandleResetStatsCommand,          "", NULL },
-        { "talents",        SEC_ADMINISTRATOR,  &ChatHandler::HandleResetTalentsCommand,        "", NULL },
-        { "all",            SEC_ADMINISTRATOR,  &ChatHandler::HandleResetAllCommand,            "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
+        { "honor",          SEC_ADMINISTRATOR,  false, &ChatHandler::HandleResetHonorCommand,          "", NULL },
+		{ "level",          SEC_ADMINISTRATOR,  false, &ChatHandler::HandleResetLevelCommand,          "", NULL },
+		{ "spells",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleResetSpellsCommand,         "", NULL },
+		{ "stats",          SEC_ADMINISTRATOR,  false, &ChatHandler::HandleResetStatsCommand,          "", NULL },
+		{ "talents",        SEC_ADMINISTRATOR,  false, &ChatHandler::HandleResetTalentsCommand,        "", NULL },
+		{ "all",            SEC_ADMINISTRATOR,  false, &ChatHandler::HandleResetAllCommand,            "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
     static ChatCommand castCommandTable[] =
     {
-        { "back",           SEC_ADMINISTRATOR,  &ChatHandler::HandleCastBackCommand,            "", NULL },
-        { "dist",           SEC_ADMINISTRATOR,  &ChatHandler::HandleCastDistCommand,            "", NULL },
-        { "self",           SEC_ADMINISTRATOR,  &ChatHandler::HandleCastSelfCommand,            "", NULL },
-        { "target",         SEC_ADMINISTRATOR,  &ChatHandler::HandleCastTargetCommand,          "", NULL },
-        { "",               SEC_ADMINISTRATOR,  &ChatHandler::HandleCastCommand,                "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
+        { "back",           SEC_ADMINISTRATOR,  false, &ChatHandler::HandleCastBackCommand,            "", NULL },
+		{ "dist",           SEC_ADMINISTRATOR,  false, &ChatHandler::HandleCastDistCommand,            "", NULL },
+		{ "self",           SEC_ADMINISTRATOR,  false, &ChatHandler::HandleCastSelfCommand,            "", NULL },
+		{ "target",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleCastTargetCommand,          "", NULL },
+		{ "",               SEC_ADMINISTRATOR,  false, &ChatHandler::HandleCastCommand,                "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
     static ChatCommand pdumpCommandTable[] =
     {
-        { "load",           SEC_ADMINISTRATOR,  &ChatHandler::HandleLoadPDumpCommand,           "", NULL },
-        { "write",          SEC_ADMINISTRATOR,  &ChatHandler::HandleWritePDumpCommand,          "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
+        { "load",           SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLoadPDumpCommand,           "", NULL },
+		{ "write",          SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleWritePDumpCommand,          "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
     static ChatCommand listCommandTable[] =
     {
-        { "creature",       SEC_ADMINISTRATOR,  &ChatHandler::HandleListCreatureCommand,        "", NULL },
-        { "item",           SEC_ADMINISTRATOR,  &ChatHandler::HandleListItemCommand,            "", NULL },
-        { "object",         SEC_ADMINISTRATOR,  &ChatHandler::HandleListObjectCommand,          "", NULL },
-        { "auras",          SEC_ADMINISTRATOR,  &ChatHandler::HandleListAurasCommand,           "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
+        { "creature",       SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleListCreatureCommand,        "", NULL },
+		{ "item",           SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleListItemCommand,            "", NULL },
+		{ "object",         SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleListObjectCommand,          "", NULL },
+		{ "auras",          SEC_ADMINISTRATOR,  false, &ChatHandler::HandleListAurasCommand,           "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
     static ChatCommand teleCommandTable[] =
     {
-        { "add",            SEC_ADMINISTRATOR,  &ChatHandler::HandleAddTeleCommand,             "", NULL },
-        { "del",            SEC_ADMINISTRATOR,  &ChatHandler::HandleDelTeleCommand,             "", NULL },
-        { "name",           SEC_MODERATOR,      &ChatHandler::HandleNameTeleCommand,            "", NULL },
-        { "group",          SEC_MODERATOR,      &ChatHandler::HandleGroupTeleCommand,           "", NULL },
-        { "",               SEC_MODERATOR,      &ChatHandler::HandleTeleCommand,                "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
+        { "add",            SEC_ADMINISTRATOR,  false, &ChatHandler::HandleAddTeleCommand,             "", NULL },
+		{ "del",            SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleDelTeleCommand,             "", NULL },
+		{ "name",           SEC_MODERATOR,      true,  &ChatHandler::HandleNameTeleCommand,            "", NULL },
+		{ "group",          SEC_MODERATOR,      false, &ChatHandler::HandleGroupTeleCommand,           "", NULL },
+		{ "",               SEC_MODERATOR,      false, &ChatHandler::HandleTeleCommand,                "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
     static ChatCommand npcCommandTable[] =
     {
-        { "say",            SEC_MODERATOR,      &ChatHandler::HandleSayCommand,                 "", NULL },
-        { "whisper",        SEC_MODERATOR,      &ChatHandler::HandleNpcWhisperCommand,          "", NULL },
-        { "yell",           SEC_MODERATOR,      &ChatHandler::HandleYellCommand,                "", NULL },
-        { "textemote",      SEC_MODERATOR,      &ChatHandler::HandleTextEmoteCommand,           "", NULL },
-        { "add",            SEC_GAMEMASTER,     &ChatHandler::HandleAddSpwCommand,              "", NULL },
-        { "delete",         SEC_GAMEMASTER,     &ChatHandler::HandleDelCreatureCommand,         "", NULL },
-        { "spawndist",      SEC_GAMEMASTER,     &ChatHandler::HandleSpawnDistCommand,           "", NULL },
-        { "spawntime",      SEC_GAMEMASTER,     &ChatHandler::HandleSpawnTimeCommand,           "", NULL },
-        { "factionid",      SEC_GAMEMASTER,     &ChatHandler::HandleFactionIdCommand,           "", NULL },
-        { "addmove",        SEC_GAMEMASTER,     &ChatHandler::HandleAddMoveCommand,             "", NULL },
-        { "setmovetype",    SEC_GAMEMASTER,     &ChatHandler::HandleSetMoveTypeCommand,         "", NULL },
-        { "move",           SEC_GAMEMASTER,     &ChatHandler::HandleMoveCreatureCommand,        "", NULL },
-        { "changelevel",    SEC_GAMEMASTER,     &ChatHandler::HandleChangeLevelCommand,         "", NULL },
-        { "setmodel",       SEC_GAMEMASTER,     &ChatHandler::HandleSetModelCommand,            "", NULL },
-        { "additem",        SEC_GAMEMASTER,     &ChatHandler::HandleAddVendorItemCommand,       "", NULL },
-        { "delitem",        SEC_GAMEMASTER,     &ChatHandler::HandleDelVendorItemCommand,       "", NULL },
-        { "flag",           SEC_GAMEMASTER,     &ChatHandler::HandleNPCFlagCommand,             "", NULL },
-        { "changeentry",    SEC_ADMINISTRATOR,  &ChatHandler::HandleChangeEntryCommand,         "", NULL },
-        { "info",           SEC_ADMINISTRATOR,  &ChatHandler::HandleNpcInfoCommand,             "", NULL },
-        { "playemote",      SEC_ADMINISTRATOR,  &ChatHandler::HandlePlayEmoteCommand,           "", NULL },
+        { "say",            SEC_MODERATOR,      false, &ChatHandler::HandleSayCommand,                 "", NULL },
+		{ "whisper",        SEC_MODERATOR,      false, &ChatHandler::HandleNpcWhisperCommand,          "", NULL },
+		{ "yell",           SEC_MODERATOR,      false, &ChatHandler::HandleYellCommand,                "", NULL },
+		{ "textemote",      SEC_MODERATOR,      false, &ChatHandler::HandleTextEmoteCommand,           "", NULL },
+		{ "add",            SEC_GAMEMASTER,     false, &ChatHandler::HandleAddSpwCommand,              "", NULL },
+		{ "delete",         SEC_GAMEMASTER,     false, &ChatHandler::HandleDelCreatureCommand,         "", NULL },
+		{ "spawndist",      SEC_GAMEMASTER,     false, &ChatHandler::HandleSpawnDistCommand,           "", NULL },
+		{ "spawntime",      SEC_GAMEMASTER,     false, &ChatHandler::HandleSpawnTimeCommand,           "", NULL },
+		{ "factionid",      SEC_GAMEMASTER,     false, &ChatHandler::HandleFactionIdCommand,           "", NULL },
+		{ "addmove",        SEC_GAMEMASTER,     false, &ChatHandler::HandleAddMoveCommand,             "", NULL },
+		{ "setmovetype",    SEC_GAMEMASTER,     false, &ChatHandler::HandleSetMoveTypeCommand,         "", NULL },
+		{ "move",           SEC_GAMEMASTER,     false, &ChatHandler::HandleMoveCreatureCommand,        "", NULL },
+		{ "changelevel",    SEC_GAMEMASTER,     false, &ChatHandler::HandleChangeLevelCommand,         "", NULL },
+		{ "setmodel",       SEC_GAMEMASTER,     false, &ChatHandler::HandleSetModelCommand,            "", NULL },
+		{ "additem",        SEC_GAMEMASTER,     false, &ChatHandler::HandleAddVendorItemCommand,       "", NULL },
+		{ "delitem",        SEC_GAMEMASTER,     false, &ChatHandler::HandleDelVendorItemCommand,       "", NULL },
+		{ "flag",           SEC_GAMEMASTER,     false, &ChatHandler::HandleNPCFlagCommand,             "", NULL },
+		{ "changeentry",    SEC_ADMINISTRATOR,  false, &ChatHandler::HandleChangeEntryCommand,         "", NULL },
+		{ "info",           SEC_ADMINISTRATOR,  false, &ChatHandler::HandleNpcInfoCommand,             "", NULL },
+		{ "playemote",      SEC_ADMINISTRATOR,  false, &ChatHandler::HandlePlayEmoteCommand,           "", NULL },
 
         //{ TODO: fix or remove this commands
-        { "name",           SEC_GAMEMASTER,     &ChatHandler::HandleNameCommand,                "", NULL },
-        { "subname",        SEC_GAMEMASTER,     &ChatHandler::HandleSubNameCommand,             "", NULL },
-        { "addweapon",      SEC_ADMINISTRATOR,  &ChatHandler::HandleAddWeaponCommand,           "", NULL },
+        { "name",           SEC_GAMEMASTER,     false, &ChatHandler::HandleNameCommand,                "", NULL },
+		{ "subname",        SEC_GAMEMASTER,     false, &ChatHandler::HandleSubNameCommand,             "", NULL },
+		{ "addweapon",      SEC_ADMINISTRATOR,  false, &ChatHandler::HandleAddWeaponCommand,           "", NULL },
         //}
 
-        { NULL,             0,                  NULL,                                           "", NULL }
+        { NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
     static ChatCommand goCommandTable[] =
     {
-        { "grid",           SEC_MODERATOR,      &ChatHandler::HandleGoGridCommand,              "", NULL },
-        { "creature",       SEC_GAMEMASTER,     &ChatHandler::HandleGoCreatureCommand,          "", NULL },
-        { "object",         SEC_GAMEMASTER,     &ChatHandler::HandleGoObjectCommand,            "", NULL },
-        { "trigger",        SEC_GAMEMASTER,     &ChatHandler::HandleGoTriggerCommand,           "", NULL },
-        { "graveyard",      SEC_GAMEMASTER,     &ChatHandler::HandleGoGraveyardCommand,         "", NULL },
-        { "zonexy",         SEC_MODERATOR,      &ChatHandler::HandleGoZoneXYCommand,            "", NULL },
-        { "xy",             SEC_MODERATOR,      &ChatHandler::HandleGoXYCommand,                "", NULL },
-        { "xyz",            SEC_MODERATOR,      &ChatHandler::HandleGoXYZCommand,               "", NULL },
-        { "",               SEC_MODERATOR,      &ChatHandler::HandleGoXYZCommand,               "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
+        { "grid",           SEC_MODERATOR,      false, &ChatHandler::HandleGoGridCommand,              "", NULL },
+		{ "creature",       SEC_GAMEMASTER,     false, &ChatHandler::HandleGoCreatureCommand,          "", NULL },
+		{ "object",         SEC_GAMEMASTER,     false, &ChatHandler::HandleGoObjectCommand,            "", NULL },
+		{ "trigger",        SEC_GAMEMASTER,     false, &ChatHandler::HandleGoTriggerCommand,           "", NULL },
+		{ "graveyard",      SEC_GAMEMASTER,     false, &ChatHandler::HandleGoGraveyardCommand,         "", NULL },
+		{ "zonexy",         SEC_MODERATOR,      false, &ChatHandler::HandleGoZoneXYCommand,            "", NULL },
+		{ "xy",             SEC_MODERATOR,      false, &ChatHandler::HandleGoXYCommand,                "", NULL },
+		{ "xyz",            SEC_MODERATOR,      false, &ChatHandler::HandleGoXYZCommand,               "", NULL },
+		{ "",               SEC_MODERATOR,      false, &ChatHandler::HandleGoXYZCommand,               "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
     static ChatCommand gobjectCommandTable[] =
     {
-        { "add",            SEC_GAMEMASTER,     &ChatHandler::HandleGameObjectCommand,          "", NULL },
-        { "delete",         SEC_GAMEMASTER,     &ChatHandler::HandleDelObjectCommand,           "", NULL },
-        { "target",         SEC_GAMEMASTER,     &ChatHandler::HandleTargetObjectCommand,        "", NULL },
-        { "turn",           SEC_GAMEMASTER,     &ChatHandler::HandleTurnObjectCommand,          "", NULL },
-        { "move",           SEC_GAMEMASTER,     &ChatHandler::HandleMoveObjectCommand,          "", NULL },
-        { "near",           SEC_ADMINISTRATOR,  &ChatHandler::HandleNearObjectCommand,          "", NULL },
-        { "state",          SEC_ADMINISTRATOR,  &ChatHandler::HandleObjectStateCommand,         "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
+        { "add",            SEC_GAMEMASTER,     false, &ChatHandler::HandleGameObjectCommand,          "", NULL },
+		{ "delete",         SEC_GAMEMASTER,     false, &ChatHandler::HandleDelObjectCommand,           "", NULL },
+		{ "target",         SEC_GAMEMASTER,     false, &ChatHandler::HandleTargetObjectCommand,        "", NULL },
+		{ "turn",           SEC_GAMEMASTER,     false, &ChatHandler::HandleTurnObjectCommand,          "", NULL },
+		{ "move",           SEC_GAMEMASTER,     false, &ChatHandler::HandleMoveObjectCommand,          "", NULL },
+		{ "near",           SEC_ADMINISTRATOR,  false, &ChatHandler::HandleNearObjectCommand,          "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
     static ChatCommand questCommandTable[] =
     {
-        { "add",            SEC_ADMINISTRATOR,  &ChatHandler::HandleAddQuest,                   "", NULL },
-        { "complete",       SEC_ADMINISTRATOR,  &ChatHandler::HandleCompleteQuest,              "", NULL },
-        { "remove",         SEC_ADMINISTRATOR,  &ChatHandler::HandleRemoveQuest,                "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
+        { "add",            SEC_ADMINISTRATOR,  false, &ChatHandler::HandleAddQuest,                   "", NULL },
+		{ "complete",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleCompleteQuest,              "", NULL },
+		{ "remove",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleRemoveQuest,                "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
     static ChatCommand gmCommandTable[] =
     {
-        { "chat",           SEC_MODERATOR,      &ChatHandler::HandleGMChatCommand,              "", NULL },
-        { "list",           SEC_PLAYER,         &ChatHandler::HandleGMListCommand,              "", NULL },
-        { "visible",        SEC_MODERATOR,      &ChatHandler::HandleVisibleCommand,             "", NULL },
-        { "fly",            SEC_ADMINISTRATOR,  &ChatHandler::HandleFlyModeCommand,             "", NULL },
-        { "",               SEC_MODERATOR,      &ChatHandler::HandleGMmodeCommand,              "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
+        { "chat",           SEC_MODERATOR,      false, &ChatHandler::HandleGMChatCommand,              "", NULL },
+		{ "ingame",         SEC_PLAYER,         true,  &ChatHandler::HandleGMListIngameCommand,        "", NULL },
+		{ "list",           SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleGMListFullCommand,          "", NULL },
+		{ "visible",        SEC_MODERATOR,      false, &ChatHandler::HandleVisibleCommand,             "", NULL },
+		{ "fly",            SEC_ADMINISTRATOR,  false, &ChatHandler::HandleFlyModeCommand,             "", NULL },
+		{ "",               SEC_MODERATOR,      false, &ChatHandler::HandleGMmodeCommand,              "", NULL },
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
     static ChatCommand instanceCommandTable[] =
     {
-        { "listbinds",      SEC_MODERATOR,      &ChatHandler::HandleInstanceListBindsCommand,   "", NULL },
-        { "unbind",         SEC_MODERATOR,      &ChatHandler::HandleInstanceUnbindCommand,      "", NULL },
-        { "stats",          SEC_MODERATOR,      &ChatHandler::HandleInstanceStatsCommand,       "", NULL },
-        { "savedata",       SEC_MODERATOR,      &ChatHandler::HandleInstanceSaveDataCommand,    "", NULL },
-        { NULL,             0,                  NULL,                                           "", NULL }
+       { "listbinds",      SEC_MODERATOR,      false, &ChatHandler::HandleInstanceListBindsCommand,   "", NULL },
+	   { "unbind",         SEC_MODERATOR,      false, &ChatHandler::HandleInstanceUnbindCommand,      "", NULL },
+	   { "stats",          SEC_MODERATOR,      true,  &ChatHandler::HandleInstanceStatsCommand,       "", NULL },
+	   { "savedata",       SEC_MODERATOR,      false, &ChatHandler::HandleInstanceSaveDataCommand,    "", NULL },
+	   { NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
     static ChatCommand commandTable[] =
     {
-        { "gm",             SEC_MODERATOR,      NULL,                                           "", gmCommandTable },
-        { "npc",            SEC_MODERATOR,      NULL,                                           "", npcCommandTable },
-        { "go",             SEC_MODERATOR,      NULL,                                           "", goCommandTable },
-        { "learn",          SEC_MODERATOR,      NULL,                                           "", learnCommandTable },
-        { "modify",         SEC_MODERATOR,      NULL,                                           "", modifyCommandTable },
-        { "debug",          SEC_MODERATOR,      NULL,                                           "", debugCommandTable },
-        { "tele",           SEC_MODERATOR,      NULL,                                           "", teleCommandTable },
-        { "event",          SEC_GAMEMASTER,     NULL,                                           "", eventCommandTable },
-        { "gobject",        SEC_GAMEMASTER,     NULL,                                           "", gobjectCommandTable },
-        { "honor",          SEC_GAMEMASTER,     NULL,                                           "", honorCommandTable },
-        { "wp",             SEC_GAMEMASTER,     NULL,                                           "", wpCommandTable },
-        { "quest",          SEC_ADMINISTRATOR,  NULL,                                           "", questCommandTable },
-        { "reload",         SEC_ADMINISTRATOR,  NULL,                                           "", reloadCommandTable },
-        { "list",           SEC_ADMINISTRATOR,  NULL,                                           "", listCommandTable },
-        { "lookup",         SEC_ADMINISTRATOR,  NULL,                                           "", lookupCommandTable },
-        { "pdump",          SEC_ADMINISTRATOR,  NULL,                                           "", pdumpCommandTable },
-        { "group",          SEC_ADMINISTRATOR,  NULL,                                           "", groupCommandTable },
-        { "guild",          SEC_ADMINISTRATOR,  NULL,                                           "", guildCommandTable },
-        { "cast",           SEC_ADMINISTRATOR,  NULL,                                           "", castCommandTable },
-        { "reset",          SEC_ADMINISTRATOR,  NULL,                                           "", resetCommandTable },
-        { "instance",       SEC_ADMINISTRATOR,  NULL,                                           "", instanceCommandTable },
-        { "server",         SEC_ADMINISTRATOR,  NULL,                                           "", serverCommandTable },
-
-        { "aura",           SEC_ADMINISTRATOR,  &ChatHandler::HandleAuraCommand,                "", NULL },
-        { "unaura",         SEC_ADMINISTRATOR,  &ChatHandler::HandleUnAuraCommand,              "", NULL },
-        { "acct",           SEC_PLAYER,         &ChatHandler::HandleAcctCommand,                "", NULL },
-        { "nameannounce",   SEC_MODERATOR,      &ChatHandler::HandleNameAnnounceCommand,        "", NULL },
-        { "announce",       SEC_ADMINISTRATOR,  &ChatHandler::HandleAnnounceCommand,            "", NULL },
-        { "notify",         SEC_MODERATOR,      &ChatHandler::HandleNotifyCommand,              "", NULL },
-        { "goname",         SEC_MODERATOR,      &ChatHandler::HandleGonameCommand,              "", NULL },
-        { "namego",         SEC_MODERATOR,      &ChatHandler::HandleNamegoCommand,              "", NULL },
-        { "groupgo",        SEC_MODERATOR,      &ChatHandler::HandleGroupgoCommand,             "", NULL },
-        { "commands",       SEC_PLAYER,         &ChatHandler::HandleCommandsCommand,            "", NULL },
-        { "demorph",        SEC_GAMEMASTER,     &ChatHandler::HandleDeMorphCommand,             "", NULL },
-        { "die",            SEC_ADMINISTRATOR,  &ChatHandler::HandleDieCommand,                 "", NULL },
-        { "revive",         SEC_ADMINISTRATOR,  &ChatHandler::HandleReviveCommand,              "", NULL },
-        { "dismount",       SEC_PLAYER,         &ChatHandler::HandleDismountCommand,            "", NULL },
-        { "gps",            SEC_MODERATOR,      &ChatHandler::HandleGPSCommand,                 "", NULL },
-        { "guid",           SEC_GAMEMASTER,     &ChatHandler::HandleGUIDCommand,                "", NULL },
-        { "help",           SEC_PLAYER,         &ChatHandler::HandleHelpCommand,                "", NULL },
-        { "itemmove",       SEC_GAMEMASTER,     &ChatHandler::HandleItemMoveCommand,            "", NULL },
-        { "cooldown",       SEC_ADMINISTRATOR,  &ChatHandler::HandleCooldownCommand,            "", NULL },
-        { "unlearn",        SEC_ADMINISTRATOR,  &ChatHandler::HandleUnLearnCommand,             "", NULL },
-        { "distance",       SEC_ADMINISTRATOR,  &ChatHandler::HandleGetDistanceCommand,         "", NULL },
-        { "recall",         SEC_MODERATOR,      &ChatHandler::HandleRecallCommand,              "", NULL },
-        { "save",           SEC_PLAYER,         &ChatHandler::HandleSaveCommand,                "", NULL },
-        { "saveall",        SEC_MODERATOR,      &ChatHandler::HandleSaveAllCommand,             "", NULL },
-        { "kick",           SEC_GAMEMASTER,     &ChatHandler::HandleKickPlayerCommand,          "", NULL },
-        { "security",       SEC_ADMINISTRATOR,  &ChatHandler::HandleSecurityCommand,            "", NULL },
-        { "ban",            SEC_ADMINISTRATOR,  &ChatHandler::HandleBanCommand,                 "", NULL },
-        { "unban",          SEC_ADMINISTRATOR,  &ChatHandler::HandleUnBanCommand,               "", NULL },
-        { "baninfo",        SEC_ADMINISTRATOR,  &ChatHandler::HandleBanInfoCommand,             "", NULL },
-        { "banlist",        SEC_ADMINISTRATOR,  &ChatHandler::HandleBanListCommand,             "", NULL },
-        { "plimit",         SEC_ADMINISTRATOR,  &ChatHandler::HandlePLimitCommand,              "", NULL },
-        { "start",          SEC_PLAYER,         &ChatHandler::HandleStartCommand,               "", NULL },
-        { "taxicheat",      SEC_MODERATOR,      &ChatHandler::HandleTaxiCheatCommand,           "", NULL },
-        { "allowmove",      SEC_ADMINISTRATOR,  &ChatHandler::HandleAllowMovementCommand,       "", NULL },
-        { "linkgrave",      SEC_ADMINISTRATOR,  &ChatHandler::HandleLinkGraveCommand,           "", NULL },
-        { "neargrave",      SEC_ADMINISTRATOR,  &ChatHandler::HandleNearGraveCommand,           "", NULL },
-        { "transport",      SEC_ADMINISTRATOR,  &ChatHandler::HandleSpawnTransportCommand,      "", NULL },
-        { "explorecheat",   SEC_ADMINISTRATOR,  &ChatHandler::HandleExploreCheatCommand,        "", NULL },
-        { "hover",          SEC_ADMINISTRATOR,  &ChatHandler::HandleHoverCommand,               "", NULL },
-        { "levelup",        SEC_ADMINISTRATOR,  &ChatHandler::HandleLevelUpCommand,             "", NULL },
-        { "showarea",       SEC_ADMINISTRATOR,  &ChatHandler::HandleShowAreaCommand,            "", NULL },
-        { "hidearea",       SEC_ADMINISTRATOR,  &ChatHandler::HandleHideAreaCommand,            "", NULL },
-        { "additem",        SEC_ADMINISTRATOR,  &ChatHandler::HandleAddItemCommand,             "", NULL },
-        { "additemset",     SEC_ADMINISTRATOR,  &ChatHandler::HandleAddItemSetCommand,          "", NULL },
-        { "bank",           SEC_ADMINISTRATOR,  &ChatHandler::HandleBankCommand,                "", NULL },
-        { "wchange",        SEC_ADMINISTRATOR,  &ChatHandler::HandleChangeWeather,              "", NULL },
-        { "ticket",         SEC_GAMEMASTER,     &ChatHandler::HandleTicketCommand,              "", NULL },
-        { "delticket",      SEC_GAMEMASTER,     &ChatHandler::HandleDelTicketCommand,           "", NULL },
-        { "maxskill",       SEC_ADMINISTRATOR,  &ChatHandler::HandleMaxSkillCommand,            "", NULL },
-        { "setskill",       SEC_ADMINISTRATOR,  &ChatHandler::HandleSetSkillCommand,            "", NULL },
-        { "whispers",       SEC_MODERATOR,      &ChatHandler::HandleWhispersCommand,            "", NULL },
-        { "pinfo",          SEC_GAMEMASTER,     &ChatHandler::HandlePInfoCommand,               "", NULL },
-        { "password",       SEC_PLAYER,         &ChatHandler::HandlePasswordCommand,            "", NULL },
-        { "lockaccount",    SEC_PLAYER,         &ChatHandler::HandleLockAccountCommand,         "", NULL },
-        { "respawn",        SEC_ADMINISTRATOR,  &ChatHandler::HandleRespawnCommand,             "", NULL },
-        { "sendmail",       SEC_MODERATOR,      &ChatHandler::HandleSendMailCommand,            "", NULL },
-        { "rename",         SEC_GAMEMASTER,     &ChatHandler::HandleRenameCommand,              "", NULL },
-        { "loadscripts",    SEC_ADMINISTRATOR,  &ChatHandler::HandleLoadScriptsCommand,         "", NULL },
-        { "mute",           SEC_GAMEMASTER,     &ChatHandler::HandleMuteCommand,                "", NULL },
-        { "unmute",         SEC_GAMEMASTER,     &ChatHandler::HandleUnmuteCommand,              "", NULL },
-        { "movegens",       SEC_ADMINISTRATOR,  &ChatHandler::HandleMovegensCommand,            "", NULL },
-        { "cometome",       SEC_ADMINISTRATOR,  &ChatHandler::HandleComeToMeCommand,            "", NULL },
-        { "damage",         SEC_ADMINISTRATOR,  &ChatHandler::HandleDamageCommand,              "", NULL },
-        { "combatstop",     SEC_GAMEMASTER,     &ChatHandler::HandleCombatStopCommand,          "", NULL },
-        { "freeze",         SEC_ADMINISTRATOR,  &ChatHandler::HandleFreezeCommand,              "", NULL },
-        { "unfreeze",       SEC_ADMINISTRATOR,  &ChatHandler::HandleUnFreezeCommand,            "", NULL },
-        { "listfreeze",     SEC_ADMINISTRATOR,  &ChatHandler::HandleListFreezeCommand,          "", NULL },
-        { "flusharenapoints",    SEC_ADMINISTRATOR, &ChatHandler::HandleFlushArenaPointsCommand,         "",   NULL },
-
-        { NULL,             0,                  NULL,                                           "", NULL }
+        { "account",        SEC_PLAYER,         true,  NULL,                                           "", accountCommandTable },
+		{ "gm",             SEC_MODERATOR,      true,  NULL,                                           "", gmCommandTable },
+		{ "npc",            SEC_MODERATOR,      false, NULL,                                           "", npcCommandTable },
+		{ "go",             SEC_MODERATOR,      false, NULL,                                           "", goCommandTable },
+		{ "learn",          SEC_MODERATOR,      false, NULL,                                           "", learnCommandTable },
+		{ "modify",         SEC_MODERATOR,      false, NULL,                                           "", modifyCommandTable },
+		{ "debug",          SEC_MODERATOR,      false, NULL,                                           "", debugCommandTable },
+		{ "tele",           SEC_MODERATOR,      true,  NULL,                                           "", teleCommandTable },
+		{ "event",          SEC_GAMEMASTER,     false, NULL,                                           "", eventCommandTable },
+		{ "gobject",        SEC_GAMEMASTER,     false, NULL,                                           "", gobjectCommandTable },
+		{ "honor",          SEC_GAMEMASTER,     false, NULL,                                           "", honorCommandTable },
+		{ "wp",             SEC_GAMEMASTER,     false, NULL,                                           "", wpCommandTable },
+		{ "quest",          SEC_ADMINISTRATOR,  false, NULL,                                           "", questCommandTable },
+		{ "reload",         SEC_ADMINISTRATOR,  true,  NULL,                                           "", reloadCommandTable },
+		{ "list",           SEC_ADMINISTRATOR,  true,  NULL,                                           "", listCommandTable },
+		{ "lookup",         SEC_ADMINISTRATOR,  true,  NULL,                                           "", lookupCommandTable },
+		{ "pdump",          SEC_ADMINISTRATOR,  true,  NULL,                                           "", pdumpCommandTable },
+		{ "guild",          SEC_ADMINISTRATOR,  true,  NULL,                                           "", guildCommandTable },
+		{ "cast",           SEC_ADMINISTRATOR,  false, NULL,                                           "", castCommandTable },
+		{ "reset",          SEC_ADMINISTRATOR,  false, NULL,                                           "", resetCommandTable },
+		{ "instance",       SEC_ADMINISTRATOR,  true,  NULL,                                           "", instanceCommandTable },
+		{ "server",         SEC_ADMINISTRATOR,  true,  NULL,                                           "", serverCommandTable },
+
+		{ "aura",           SEC_ADMINISTRATOR,  false, &ChatHandler::HandleAuraCommand,                "", NULL },
+		{ "unaura",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleUnAuraCommand,              "", NULL },
+		{ "announce",       SEC_MODERATOR,      true,  &ChatHandler::HandleAnnounceCommand,            "", NULL },
+		{ "notify",         SEC_MODERATOR,      true,  &ChatHandler::HandleNotifyCommand,              "", NULL },
+		{ "goname",         SEC_MODERATOR,      false, &ChatHandler::HandleGonameCommand,              "", NULL },
+		{ "namego",         SEC_MODERATOR,      false, &ChatHandler::HandleNamegoCommand,              "", NULL },
+		{ "groupgo",        SEC_MODERATOR,      false, &ChatHandler::HandleGroupgoCommand,             "", NULL },
+		{ "commands",       SEC_PLAYER,         true,  &ChatHandler::HandleCommandsCommand,            "", NULL },
+		{ "demorph",        SEC_GAMEMASTER,     false, &ChatHandler::HandleDeMorphCommand,             "", NULL },
+		{ "die",            SEC_ADMINISTRATOR,  false, &ChatHandler::HandleDieCommand,                 "", NULL },
+		{ "revive",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleReviveCommand,              "", NULL },
+		{ "dismount",       SEC_PLAYER,         false, &ChatHandler::HandleDismountCommand,            "", NULL },
+		{ "gps",            SEC_MODERATOR,      false, &ChatHandler::HandleGPSCommand,                 "", NULL },
+		{ "guid",           SEC_GAMEMASTER,     false, &ChatHandler::HandleGUIDCommand,                "", NULL },
+		{ "help",           SEC_PLAYER,         true,  &ChatHandler::HandleHelpCommand,                "", NULL },
+		{ "itemmove",       SEC_GAMEMASTER,     false, &ChatHandler::HandleItemMoveCommand,            "", NULL },
+		{ "cooldown",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleCooldownCommand,            "", NULL },
+		{ "unlearn",        SEC_ADMINISTRATOR,  false, &ChatHandler::HandleUnLearnCommand,             "", NULL },
+		{ "distance",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleGetDistanceCommand,         "", NULL },
+		{ "recall",         SEC_MODERATOR,      false, &ChatHandler::HandleRecallCommand,              "", NULL },
+		{ "save",           SEC_PLAYER,         false, &ChatHandler::HandleSaveCommand,                "", NULL },
+		{ "saveall",        SEC_MODERATOR,      true,  &ChatHandler::HandleSaveAllCommand,             "", NULL },
+		{ "kick",           SEC_GAMEMASTER,     true,  &ChatHandler::HandleKickPlayerCommand,          "", NULL },
+		{ "ban",            SEC_ADMINISTRATOR,  true,  NULL,                                           "", banCommandTable },
+		{ "unban",          SEC_ADMINISTRATOR,  true,  NULL,                                           "", unbanCommandTable },
+		{ "baninfo",        SEC_ADMINISTRATOR,  false, NULL,                                           "", baninfoCommandTable },
+		{ "banlist",        SEC_ADMINISTRATOR,  true,  NULL,                                           "", banlistCommandTable },
+		{ "plimit",         SEC_ADMINISTRATOR,  true,  &ChatHandler::HandlePLimitCommand,              "", NULL },
+		{ "start",          SEC_PLAYER,         false, &ChatHandler::HandleStartCommand,               "", NULL },
+		{ "taxicheat",      SEC_MODERATOR,      false, &ChatHandler::HandleTaxiCheatCommand,           "", NULL },
+		{ "allowmove",      SEC_ADMINISTRATOR,  false, &ChatHandler::HandleAllowMovementCommand,       "", NULL },
+		{ "linkgrave",      SEC_ADMINISTRATOR,  false, &ChatHandler::HandleLinkGraveCommand,           "", NULL },
+		{ "neargrave",      SEC_ADMINISTRATOR,  false, &ChatHandler::HandleNearGraveCommand,           "", NULL },
+		{ "explorecheat",   SEC_ADMINISTRATOR,  false, &ChatHandler::HandleExploreCheatCommand,        "", NULL },
+		{ "hover",          SEC_ADMINISTRATOR,  false, &ChatHandler::HandleHoverCommand,               "", NULL },
+		{ "levelup",        SEC_ADMINISTRATOR,  false, &ChatHandler::HandleLevelUpCommand,             "", NULL },
+		{ "showarea",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleShowAreaCommand,            "", NULL },
+		{ "hidearea",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleHideAreaCommand,            "", NULL },
+		{ "additem",        SEC_ADMINISTRATOR,  false, &ChatHandler::HandleAddItemCommand,             "", NULL },
+		{ "additemset",     SEC_ADMINISTRATOR,  false, &ChatHandler::HandleAddItemSetCommand,          "", NULL },
+		{ "bank",           SEC_ADMINISTRATOR,  false, &ChatHandler::HandleBankCommand,                "", NULL },
+		{ "wchange",        SEC_ADMINISTRATOR,  false, &ChatHandler::HandleChangeWeather,              "", NULL },
+		{ "ticket",         SEC_GAMEMASTER,     true,  &ChatHandler::HandleTicketCommand,              "", NULL },
+		{ "delticket",      SEC_GAMEMASTER,     true,  &ChatHandler::HandleDelTicketCommand,           "", NULL },
+		{ "maxskill",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleMaxSkillCommand,            "", NULL },
+		{ "setskill",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleSetSkillCommand,            "", NULL },
+		{ "whispers",       SEC_MODERATOR,      false, &ChatHandler::HandleWhispersCommand,            "", NULL },
+		{ "pinfo",          SEC_GAMEMASTER,     true,  &ChatHandler::HandlePInfoCommand,               "", NULL },
+		{ "password",       SEC_PLAYER,         false, &ChatHandler::HandlePasswordCommand,            "", NULL },
+		{ "lockaccount",    SEC_PLAYER,         false, &ChatHandler::HandleLockAccountCommand,         "", NULL },
+		{ "respawn",        SEC_ADMINISTRATOR,  false, &ChatHandler::HandleRespawnCommand,             "", NULL },
+		{ "sendmail",       SEC_MODERATOR,      false, &ChatHandler::HandleSendMailCommand,            "", NULL },
+		{ "rename",         SEC_GAMEMASTER,     true,  &ChatHandler::HandleRenameCommand,              "", NULL },
+		{ "loadscripts",    SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLoadScriptsCommand,         "", NULL },
+		{ "mute",           SEC_GAMEMASTER,     true,  &ChatHandler::HandleMuteCommand,                "", NULL },
+		{ "unmute",         SEC_GAMEMASTER,     true,  &ChatHandler::HandleUnmuteCommand,              "", NULL },
+		{ "movegens",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleMovegensCommand,            "", NULL },
+		{ "cometome",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleComeToMeCommand,            "", NULL },
+		{ "damage",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleDamageCommand,              "", NULL },
+		{ "combatstop",     SEC_GAMEMASTER,     false, &ChatHandler::HandleCombatStopCommand,          "", NULL },
+		{ "chardelete",     SEC_CONSOLE,        true,  &ChatHandler::HandleCombatStopCommand,          "", NULL },
+		{ "sendmessage",    SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleSendMessageCommand,         "", NULL },
+
+		{ NULL,             0,                  false, NULL,                                           "", NULL }
     };
 
@@ -530,7 +582,13 @@
 }
 
-const char *ChatHandler::GetTrinityString(int32 entry)
+const char *ChatHandler::GetTrinityString(int32 entry) const
 {
     return m_session->GetTrinityString(entry);
+}
+
+bool ChatHandler::isAvailable(ChatCommand const& cmd) const
+{
+	// check security level only for simple  command (without child commands)
+	return m_session->GetSecurity() >= cmd.SecurityLevel;
 }
 
@@ -579,4 +637,5 @@
 void ChatHandler::SendGlobalSysMessage(const char *str)
 {
+	// Chat output
     WorldPacket data;
 
@@ -654,6 +713,6 @@
         }
 
-        // check security level only for simple  command (without child commands)
-        if(m_session->GetSecurity() < table[i].SecurityLevel)
+        // must be available and have handler
+		if(!table[i].Handler || !isAvailable(table[i]))
             continue;
 
@@ -664,9 +723,13 @@
             if(table[i].SecurityLevel > SEC_PLAYER)
             {
-                Player* p = m_session->GetPlayer();
-                uint64 sel_guid = p->GetSelection();
-                sLog.outCommand("Command: %s [Player: %s (Account: %u) X: %f Y: %f Z: %f Map: %u Selected: %s (GUID: %u)]",
-                    fullcmd.c_str(),p->GetName(),m_session->GetAccountId(),p->GetPositionX(),p->GetPositionY(),p->GetPositionZ(),p->GetMapId(),
-                    GetLogNameForGuid(sel_guid),GUID_LOPART(sel_guid));
+                // chat case
+				if(m_session)
+				{
+					Player* p = m_session->GetPlayer();
+					uint64 sel_guid = p->GetSelection();
+					sLog.outCommand("Command: %s [Player: %s (Account: %u) X: %f Y: %f Z: %f Map: %u Selected: %s (GUID: %u)]",
+						fullcmd.c_str(),p->GetName(),m_session->GetAccountId(),p->GetPositionX(),p->GetPositionY(),p->GetPositionZ(),p->GetMapId(),
+						GetLogNameForGuid(sel_guid),GUID_LOPART(sel_guid));
+				}
             }
         }
@@ -694,16 +757,22 @@
     //    return 0;
 
-    if(text[0] != '!' && text[0] != '.')
-        return 0;
-
-    // ignore single . and ! in line
+    /// chat case (.command or !command format)
+	if(m_session)
+	{
+		if(text[0] != '!' && text[0] != '.')
+			return 0;
+	}
+
+    /// ignore single . and ! in line
     if(strlen(text) < 2)
         return 0;
 
-    // ignore messages staring from many dots.
+    /// ignore messages staring from many dots.
     if(text[0] == '.' && text[1] == '.' || text[0] == '!' && text[1] == '!')
         return 0;
 
-    ++text;
+    /// skip first . or ! (in console allowed use command with . and ! and without its)
+	if(text[0] == '!' || text[0] == '.')
+		++text;
 
     std::string fullcmd = text;                             // original `text` can't be used. It content destroyed in command code processing.
@@ -720,5 +789,6 @@
     for(uint32 i = 0; table[i].Name != NULL; ++i)
     {
-        if(m_session->GetSecurity() < table[i].SecurityLevel)
+		// must be available (ignore handler existence for show command with possibe avalable subcomands
+        if(!isAvailable(table[i]))
             continue;
 
@@ -727,4 +797,6 @@
 
         (list += "\n    ") += table[i].Name;
+		if(table[i].ChildCommands)
+			list += " ...";
     }
 
@@ -749,5 +821,6 @@
         for(uint32 i = 0; table[i].Name != NULL; ++i)
         {
-            if(m_session->GetSecurity() < table[i].SecurityLevel)
+			// must be available (ignore handler existence for show command with possibe avalable subcomands
+            if(!isAvailable(table[i]))
                 continue;
 
@@ -778,5 +851,6 @@
         for(uint32 i = 0; table[i].Name != NULL; ++i)
         {
-            if(m_session->GetSecurity() < table[i].SecurityLevel)
+			// must be available (ignore handler existence for show command with possibe avalable subcomands
+            if(!isAvailable(table[i]))
                 continue;
 
@@ -879,4 +953,7 @@
 Player * ChatHandler::getSelectedPlayer()
 {
+	if(!m_session)
+		return NULL;
+
     uint64 guid  = m_session->GetPlayer()->GetSelection();
 
@@ -889,4 +966,7 @@
 Unit* ChatHandler::getSelectedUnit()
 {
+	if(!m_session)
+		return NULL;
+
     uint64 guid = m_session->GetPlayer()->GetSelection();
 
@@ -899,4 +979,7 @@
 Creature* ChatHandler::getSelectedCreature()
 {
+	if(!m_session)
+		return NULL;
+
     return ObjectAccessor::GetCreatureOrPet(*m_session->GetPlayer(),m_session->GetPlayer()->GetSelection());
 }
@@ -1037,4 +1120,7 @@
 GameObject* ChatHandler::GetObjectGlobalyWithGuidOrNearWithDbGuid(uint32 lowguid,uint32 entry)
 {
+	if(!m_session)
+		return NULL;
+
     Player* pl = m_session->GetPlayer();
 
@@ -1109,4 +1195,21 @@
 
     return objmgr.GetGameTele(cId);
+}
+
+const char *CliHandler::GetTrinityString(int32 entry) const
+{
+	return objmgr.GetTrinityStringForDBCLocale(entry);
+}
+
+bool CliHandler::isAvailable(ChatCommand const& cmd) const
+{
+	// skip non-console commands in console case
+	return cmd.AllowConsole;
+}
+
+void CliHandler::SendSysMessage(const char *str)
+{
+	m_print(str);
+	m_print("\r\n");
 }
 
Index: /trunk/src/game/PlayerDump.h
===================================================================
--- /trunk/src/game/PlayerDump.h (revision 102)
+++ /trunk/src/game/PlayerDump.h (revision 112)
@@ -74,4 +74,13 @@
 };
 
+enum DumpReturn
+{
+	DUMP_SUCCESS,
+	DUMP_FILE_OPEN_ERROR,
+	DUMP_TOO_MANY_CHARS,
+	DUMP_UNEXPECTED_END,
+	DUMP_FILE_BROKEN,
+};
+
 class PlayerDump
 {
@@ -86,9 +95,9 @@
 
         std::string GetDump(uint32 guid);
-        bool WriteDump(std::string file, uint32 guid);
+        DumpReturn WriteDump(std::string file, uint32 guid);
     private:
         typedef std::set<uint32> GUIDs;
 
-        bool DumpTable(std::string& dump, uint32 guid, char const*tableFrom, char const*tableTo, DumpTableType type);
+        void DumpTable(std::string& dump, uint32 guid, char const*tableFrom, char const*tableTo, DumpTableType type);
         std::string GenerateWhereStr(char const* field, GUIDs const& guids, GUIDs::const_iterator& itr);
         std::string GenerateWhereStr(char const* field, uint32 guid);
@@ -105,5 +114,5 @@
         PlayerDumpReader() {}
 
-        bool LoadDump(std::string file, uint32 account, std::string name, uint32 guid);
+        DumpReturn LoadDump(std::string file, uint32 account, std::string name, uint32 guid);
 };
 
Index: /trunk/src/game/World.h
===================================================================
--- /trunk/src/game/World.h (revision 102)
+++ /trunk/src/game/World.h (revision 112)
@@ -29,4 +29,5 @@
 #include "Timer.h"
 #include "Policies/Singleton.h"
+#include "SharedDefines.h"
 
 #include <map>
@@ -41,5 +42,4 @@
 struct ScriptAction;
 struct ScriptInfo;
-class CliCommandHolder;
 class SqlResultQueue;
 class QueryResult;
@@ -297,12 +297,4 @@
 };
 
-/// Ban function return codes
-enum BanReturn
-{
-    BAN_SUCCESS,
-    BAN_SYNTAX_ERROR,
-    BAN_NOTFOUND
-};
-
 // DB scripting commands
 #define SCRIPT_COMMAND_TALK                  0              // source = unit, target=any, datalong ( 0=say, 1=whisper, 2=yell, 3=emote text)
@@ -322,35 +314,21 @@
 #define SCRIPT_COMMAND_CAST_SPELL           15              // source (datalong2!=0) or target (datalong==0) unit, datalong = spell_id
 
-/// CLI related stuff, define here to prevent cyclic dependancies
-
-typedef int(* pPrintf)(const char*,...);
-typedef void(* pCliFunc)(char *,pPrintf);
-
-/// Command Template class
-struct CliCommand
-{
-    char const * cmd;
-    pCliFunc Func;
-    char const * description;
-};
-
 /// Storage class for commands issued for delayed execution
-class CliCommandHolder
-{
-    private:
-        const CliCommand *cmd;
-        char *args;
-        pPrintf m_zprintf;
-    public:
-        CliCommandHolder(const CliCommand *command, const char *arguments, pPrintf p_zprintf)
-            : cmd(command), m_zprintf(p_zprintf)
-        {
-            size_t len = strlen(arguments)+1;
-            args = new char[len];
-            memcpy(args, arguments, len);
-        }
-        ~CliCommandHolder() { delete[] args; }
-        void Execute() const { cmd->Func(args, m_zprintf); }
-        pPrintf GetOutputMethod() const {return (m_zprintf);}
+struct CliCommandHolder
+{
+	typedef void Print(const char*);
+
+	char *m_command;
+	Print* m_print;
+
+	CliCommandHolder(const char *command, Print* zprint)
+		: m_print(zprint)
+	{
+		size_t len = strlen(command)+1;
+		m_command = new char[len];
+		memcpy(m_command, command, len);
+	}
+
+	~CliCommandHolder() { delete[] m_command; }
 };
 
@@ -475,6 +453,6 @@
         void KickAllLess(AccountTypes sec);
         void KickAllQueued();
-        uint8 BanAccount(std::string type, std::string nameOrIP, std::string duration, std::string reason, std::string author);
-        bool RemoveBanAccount(std::string type, std::string nameOrIP);
+        BanReturn BanAccount(BanMode mode, std::string nameOrIP, std::string duration, std::string reason, std::string author);
+		bool RemoveBanAccount(BanMode mode, std::string nameOrIP);
 
         void ScriptsStart(std::map<uint32, std::multimap<uint32, ScriptInfo> > const& scripts, uint32 id, Object* source, Object* target);
@@ -493,5 +471,5 @@
 
         void ProcessCliCommands();
-        void QueueCliCommand(CliCommandHolder* command) { cliCmdQueue.add(command); }
+        void QueueCliCommand( CliCommandHolder::Print* zprintf, char const* input ) { cliCmdQueue.add(new CliCommandHolder(input, zprintf)); }
 
         void UpdateResultQueue();
Index: /trunk/src/game/WorldSession.h
===================================================================
--- /trunk/src/game/WorldSession.h (revision 102)
+++ /trunk/src/game/WorldSession.h (revision 112)
@@ -195,7 +195,7 @@
 
         // Locales
-        LocaleConstant GetSessionDbcLocale() { return m_sessionDbcLocale; }
-        int GetSessionDbLocaleIndex() { return m_sessionDbLocaleIndex; }
-        const char *GetTrinityString(int32 entry);
+        LocaleConstant GetSessionDbcLocale() const { return m_sessionDbcLocale; }
+		int GetSessionDbLocaleIndex() const { return m_sessionDbLocaleIndex; }
+		const char *GetTrinityString(int32 entry) const;
 
         uint32 GetLatency() const { return m_latency; }
Index: /trunk/src/game/ObjectMgr.h
===================================================================
--- /trunk/src/game/ObjectMgr.h (revision 102)
+++ /trunk/src/game/ObjectMgr.h (revision 112)
@@ -681,4 +681,5 @@
         const char *GetTrinityString(int32 entry, int locale_idx) const;
         const char *GetTrinityStringForDBCLocale(int32 entry) const { return GetTrinityString(entry,DBCLocaleIndex); }
+		int32 GetDBCLocaleIndex() const { return DBCLocaleIndex; }
         void SetDBCLocaleIndex(uint32 lang) { DBCLocaleIndex = GetIndexForLocale(LocaleConstant(lang)); }
 
Index: /trunk/src/game/Level0.cpp
===================================================================
--- /trunk/src/game/Level0.cpp (revision 102)
+++ /trunk/src/game/Level0.cpp (revision 112)
@@ -36,13 +36,15 @@
 bool ChatHandler::HandleHelpCommand(const char* args)
 {
-    if(!*args)
-        return false;
-
-    char* cmd = strtok((char*)args, " ");
+	char* cmd = strtok((char*)args, " ");
     if(!cmd)
-        return false;
-
-    if(!ShowHelpForCommand(getCommandTable(), cmd))
-        SendSysMessage(LANG_NO_HELP_CMD);
+	{
+		ShowHelpForCommand(getCommandTable(), "help");
+		ShowHelpForCommand(getCommandTable(), "");
+	}
+	else
+	{
+		if(!ShowHelpForCommand(getCommandTable(), cmd))
+			SendSysMessage(LANG_NO_HELP_CMD);
+	}
 
     return true;
@@ -55,5 +57,5 @@
 }
 
-bool ChatHandler::HandleAcctCommand(const char* /*args*/)
+bool ChatHandler::HandleAccountCommand(const char* /*args*/)
 {
     uint32 gmlevel = m_session->GetSecurity();
@@ -142,5 +144,5 @@
 }
 
-bool ChatHandler::HandleGMListCommand(const char* /*args*/)
+bool ChatHandler::HandleGMListIngameCommand(const char* /*args*/)
 {
     bool first = true;
@@ -150,6 +152,7 @@
     for(; itr != m.end(); ++itr)
     {
-        if( itr->second->GetSession()->GetSecurity() && (itr->second->isGameMaster() || sWorld.getConfig(CONFIG_GM_IN_GM_LIST) ) &&
-            itr->second->IsVisibleGloballyFor(m_session->GetPlayer()) )
+        if (itr->second->GetSession()->GetSecurity() &&
+			(itr->second->isGameMaster() || sWorld.getConfig(CONFIG_GM_IN_GM_LIST)) &&
+			(!m_session || itr->second->IsVisibleGloballyFor(m_session->GetPlayer())) )
         {
             if(first)
@@ -178,5 +181,5 @@
     char *new_pass_c  = strtok (NULL, " ");
 
-    if( !old_pass || !new_pass || !new_pass_c )
+    if (!old_pass || !new_pass || !new_pass_c)
         return false;
 
@@ -185,8 +188,15 @@
     std::string password_new_c = new_pass_c;
 
-    if(!accmgr.CheckPassword(m_session->GetAccountId(), password_old) || password_new != password_new_c)
-    {
-        SendSysMessage(LANG_COMMAND_WRONGOLDPASSWORD);
-        SetSentErrorMessage(true);
+    if (password_new != password_new_c)
+    {
+        SendSysMessage (LANG_NEW_PASSWORDS_NOT_MATCH);
+		SetSentErrorMessage (true);
+		return false;
+	}
+
+	if (!accmgr.CheckPassword (m_session->GetAccountId(), password_old))
+	{
+		SendSysMessage (LANG_COMMAND_WRONGOLDPASSWORD);
+		SetSentErrorMessage (true);
         return false;
     }
@@ -199,4 +209,9 @@
             SendSysMessage(LANG_COMMAND_PASSWORD);
             break;
+		case AOR_PASS_TOO_LONG:
+			SendSysMessage(LANG_PASSWORD_TOO_LONG);
+			SetSentErrorMessage(true);
+			return false;
+		case AOR_NAME_NOT_EXIST:                            // not possible case, don't want get account name for output
         default:
             SendSysMessage(LANG_COMMAND_NOTCHANGEPASSWORD);
@@ -234,2 +249,9 @@
     return true;
 }
+
+/// Display the 'Message of the day' for the realm
+bool ChatHandler::HandleServerMotdCommand(const char* /*args*/)
+{
+	PSendSysMessage(LANG_MOTD_CURRENT, sWorld.GetMotd());
+	return true;
+}
Index: /trunk/src/game/World.cpp
===================================================================
--- /trunk/src/game/World.cpp (revision 111)
+++ /trunk/src/game/World.cpp (revision 112)
@@ -2265,5 +2265,5 @@
 
 /// Ban an account or ban an IP address, duration will be parsed using TimeStringToSecs if it is positive, otherwise permban
-uint8 World::BanAccount(std::string type, std::string nameOrIP, std::string duration, std::string reason, std::string author)
+BanReturn World::BanAccount(BanMode mode, std::string nameOrIP, std::string duration, std::string reason, std::string author)
 {
     loginDatabase.escape_string(nameOrIP);
@@ -2272,36 +2272,34 @@
     loginDatabase.escape_string(safe_author);
 
-    if(type != "ip" && !normalizePlayerName(nameOrIP))
-        return BAN_NOTFOUND;                                // Nobody to ban
-
     uint32 duration_secs = TimeStringToSecs(duration);
     QueryResult *resultAccounts = NULL;                     //used for kicking
 
     ///- Update the database with ban information
-
-    if(type=="ip")
-    {
-        //No SQL injection as strings are escaped
-        resultAccounts = loginDatabase.PQuery("SELECT id FROM account WHERE last_ip = '%s'",nameOrIP.c_str());
-        loginDatabase.PExecute("INSERT INTO ip_banned VALUES ('%s',UNIX_TIMESTAMP(),UNIX_TIMESTAMP()+%u,'%s','%s')",nameOrIP.c_str(),duration_secs,safe_author.c_str(),reason.c_str());
-    }
-    else if(type=="account")
-    {
-        //No SQL injection as string is escaped
-        resultAccounts = loginDatabase.PQuery("SELECT id FROM account WHERE username = '%s'",nameOrIP.c_str());
-    }
-    else if(type=="character")
-    {
-        //No SQL injection as string is escaped
-        resultAccounts = CharacterDatabase.PQuery("SELECT account FROM characters WHERE name = '%s'",nameOrIP.c_str());
-    }
-    else
-        return BAN_SYNTAX_ERROR;                            //Syntax problem
-
-    if(!resultAccounts)
-        if(type=="ip")
-            return BAN_SUCCESS;                             // ip correctly banned but nobody affected (yet)
-    else
-        return BAN_NOTFOUND;                                // Nobody to ban
+	switch(mode)
+    {
+        case BAN_IP:
+			//No SQL injection as strings are escaped
+			resultAccounts = loginDatabase.PQuery("SELECT id FROM account WHERE last_ip = '%s'",nameOrIP.c_str());
+			loginDatabase.PExecute("INSERT INTO ip_banned VALUES ('%s',UNIX_TIMESTAMP(),UNIX_TIMESTAMP()+%u,'%s','%s')",nameOrIP.c_str(),duration_secs,safe_author.c_str(),reason.c_str());
+			break;
+		case BAN_ACCOUNT:
+			//No SQL injection as string is escaped
+			resultAccounts = loginDatabase.PQuery("SELECT id FROM account WHERE username = '%s'",nameOrIP.c_str());
+			break;
+		case BAN_CHARACTER:
+			//No SQL injection as string is escaped
+			resultAccounts = CharacterDatabase.PQuery("SELECT account FROM characters WHERE name = '%s'",nameOrIP.c_str());
+			break;
+		default:
+			return BAN_SYNTAX_ERROR;
+    }
+    
+	if(!resultAccounts)
+	{
+		if(mode==BAN_IP)
+            return BAN_SUCCESS;
+		else
+			return BAN_NOTFOUND;                                // Nobody to ban
+	}
 
     ///- Disconnect all affected players (for IP it can be several)
@@ -2311,11 +2309,12 @@
         uint32 account = fieldsAccount->GetUInt32();
 
-        if(type != "ip")
+        if(mode!=BAN_IP)
+		{
             //No SQL injection as strings are escaped
             loginDatabase.PExecute("INSERT INTO account_banned VALUES ('%u', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+%u, '%s', '%s', '1')",
                 account,duration_secs,safe_author.c_str(),reason.c_str());
-
-        WorldSession* sess = FindSession(account);
-        if( sess )
+		}
+
+        if (WorldSession* sess = FindSession(account))
             if(std::string(sess->GetPlayerName()) != author)
                 sess->KickPlayer();
@@ -2328,7 +2327,7 @@
 
 /// Remove a ban from an account or IP address
-bool World::RemoveBanAccount(std::string type, std::string nameOrIP)
-{
-    if(type == "ip")
+bool World::RemoveBanAccount(BanMode mode, std::string nameOrIP)
+{
+    if (mode == BAN_IP)
     {
         loginDatabase.escape_string(nameOrIP);
@@ -2338,18 +2337,9 @@
     {
         uint32 account=0;
-        if(type == "account")
-        {
-            if (!AccountMgr::normilizeString (nameOrIP))
-                return false;
-            
+        if (mode == BAN_ACCOUNT)
             account = accmgr.GetId (nameOrIP);
-        }
-        else if(type == "character")
-        {
-            if(!normalizePlayerName(nameOrIP))
-                return false;
-
+        else if (mode == BAN_CHARACTER)
             account = objmgr.GetPlayerAccountIdByPlayerName (nameOrIP);
-        }
+
         if(!account)
             return false;
@@ -2504,18 +2494,22 @@
 void World::ProcessCliCommands()
 {
-    if (cliCmdQueue.empty()) return;
-
-    CliCommandHolder *command;
-    pPrintf p_zprintf;
+    if (cliCmdQueue.empty())
+		return;
+
+    CliCommandHolder::Print* zprint;
     while (!cliCmdQueue.empty())
     {
         sLog.outDebug("CLI command under processing...");
-        command = cliCmdQueue.next();
-        command->Execute();
-        p_zprintf=command->GetOutputMethod();
+        CliCommandHolder *command = cliCmdQueue.next();
+
+		zprint = command->m_print;
+
+		CliHandler(zprint).ParseCommands(command->m_command);
+
         delete command;
     }
+
     // print the console message here so it looks right
-    p_zprintf("TC> ");
+    zprint("TC> ");
 }
 
Index: /trunk/src/game/Level2.cpp
===================================================================
--- /trunk/src/game/Level2.cpp (revision 102)
+++ /trunk/src/game/Level2.cpp (revision 112)
@@ -43,4 +43,5 @@
 #include <fstream>
 #include <map>
+#include "GlobalEvents.h"
 
 static uint32 ReputationRankStrIndex[MAX_REPUTATION_RANK] =
@@ -100,5 +101,5 @@
     }
 
-    if(security >= m_session->GetSecurity())
+    if(m_session && security >= m_session->GetSecurity())
     {
         SendSysMessage(LANG_YOURS_SECURITY_IS_LOW);
@@ -166,5 +167,5 @@
     }
 
-    if(security >= m_session->GetSecurity())
+    if(m_session && security >= m_session->GetSecurity())
     {
         SendSysMessage(LANG_YOURS_SECURITY_IS_LOW);
@@ -556,36 +557,35 @@
 bool ChatHandler::HandleLookupFactionCommand(const char* args)
 {
-    if(!*args)
-        return false;
-
-    Player *target = getSelectedPlayer();
-    if (!target)
-    {
-        SendSysMessage(LANG_NO_CHAR_SELECTED);
-        SetSentErrorMessage(true);
-        return false;
-    }
+    if (!*args)
+        return false;
+
+    // Can be NULL at console call
+	Player *target = getSelectedPlayer ();
 
     std::string namepart = args;
     std::wstring wnamepart;
 
-    if(!Utf8toWStr(namepart,wnamepart))
+    if (!Utf8toWStr (namepart,wnamepart))
         return false;
 
     // converting string that we try to find to lower case
-    wstrToLower( wnamepart );
+    wstrToLower (wnamepart);
 
     uint32 counter = 0;                                     // Counter for figure out that we found smth.
 
-    for (uint32 id = 0; id < sFactionStore.GetNumRows(); id++)
-        //for(FactionStateList::const_iterator itr = target->m_factions.begin(); itr != target->m_factions.end(); ++itr)
-    {
-        FactionEntry const *factionEntry = sFactionStore.LookupEntry(id);
-        //FactionEntry const *factionEntry = sFactionStore.LookupEntry(itr->second.ID);
+    for (uint32 id = 0; id < sFactionStore.GetNumRows(); ++id)
+    {
+        FactionEntry const *factionEntry = sFactionStore.LookupEntry (id);
         if (factionEntry)
         {
-            FactionStateList::const_iterator repItr = target->m_factions.find(factionEntry->reputationListID);
-
-            int loc = m_session->GetSessionDbcLocale();
+            FactionState const* repState = NULL;
+			if(target)
+			{
+				FactionStateList::const_iterator repItr = target->m_factions.find (factionEntry->reputationListID);
+				if(repItr != target->m_factions.end())
+					repState = &repItr->second;
+			}
+
+            int loc = m_session ? m_session->GetSessionDbcLocale() : sWorld.GetDefaultDbcLocale();
             std::string name = factionEntry->name[loc];
             if(name.empty())
@@ -597,5 +597,5 @@
                 for(; loc < MAX_LOCALE; ++loc)
                 {
-                    if(loc==m_session->GetSessionDbcLocale())
+                    if(m_session && loc==m_session->GetSessionDbcLocale())
                         continue;
 
@@ -614,7 +614,10 @@
                 // or              "id - [faction] [no reputation]" format
                 std::ostringstream ss;
-                ss << id << " - |cffffffff|Hfaction:" << id << "|h[" << name << " " << localeNames[loc] << "]|h|r";
-
-                if (repItr != target->m_factions.end())
+                if (m_session)
+					ss << id << " - |cffffffff|Hfaction:" << id << "|h[" << name << " " << localeNames[loc] << "]|h|r";
+				else
+					ss << id << " - " << name << " " << localeNames[loc];
+
+                if (repState)                               // and then target!=NULL also
                 {
                     ReputationRank rank = target->GetReputationRank(factionEntry);
@@ -623,15 +626,15 @@
                     ss << " " << rankName << "|h|r (" << target->GetReputation(factionEntry) << ")";
 
-                    if(repItr->second.Flags & FACTION_FLAG_VISIBLE)
+                    if(repState->Flags & FACTION_FLAG_VISIBLE)
                         ss << GetTrinityString(LANG_FACTION_VISIBLE);
-                    if(repItr->second.Flags & FACTION_FLAG_AT_WAR)
+                    if(repState->Flags & FACTION_FLAG_AT_WAR)
                         ss << GetTrinityString(LANG_FACTION_ATWAR);
-                    if(repItr->second.Flags & FACTION_FLAG_PEACE_FORCED)
+                    if(repState->Flags & FACTION_FLAG_PEACE_FORCED)
                         ss << GetTrinityString(LANG_FACTION_PEACE_FORCED);
-                    if(repItr->second.Flags & FACTION_FLAG_HIDDEN)
+                    if(repState->Flags & FACTION_FLAG_HIDDEN)
                         ss << GetTrinityString(LANG_FACTION_HIDDEN);
-                    if(repItr->second.Flags & FACTION_FLAG_INVISIBLE_FORCED)
+                    if(repState->Flags & FACTION_FLAG_INVISIBLE_FORCED)
                         ss << GetTrinityString(LANG_FACTION_INVISIBLE_FORCED);
-                    if(repItr->second.Flags & FACTION_FLAG_INACTIVE)
+                    if(repState->Flags & FACTION_FLAG_INACTIVE)
                         ss << GetTrinityString(LANG_FACTION_INACTIVE);
                 }
@@ -1703,5 +1706,5 @@
         }
 
-        if(name==m_session->GetPlayer()->GetName())
+        if(m_session && name==m_session->GetPlayer()->GetName())
         {
             SendSysMessage(LANG_COMMAND_KICKSELF);
@@ -1810,5 +1813,6 @@
         username = fields[0].GetCppString();
         security = fields[1].GetUInt32();
-        if(m_session->GetSecurity() >= security)
+        
+		if(!m_session || m_session->GetSecurity() >= security)
         {
             last_ip = fields[2].GetCppString();
@@ -1892,4 +1896,11 @@
     if (!px)
     {
+		if(!m_session)
+		{
+			SendSysMessage(LANG_PLAYER_NOT_FOUND);
+			SetSentErrorMessage(true);
+			return false;
+		}
+
         size_t count;
         QueryResult *result = CharacterDatabase.Query("SELECT COUNT(ticket_id) FROM character_ticket");
@@ -1902,5 +1913,7 @@
             count = 0;
 
-        PSendSysMessage(LANG_COMMAND_TICKETCOUNT, count, m_session->GetPlayer()->isAcceptTickets() ?  GetTrinityString(LANG_ON) : GetTrinityString(LANG_OFF));
+        bool accept = m_session->GetPlayer()->isAcceptTickets();
+		
+		PSendSysMessage(LANG_COMMAND_TICKETCOUNT, count, accept ?  GetTrinityString(LANG_ON) : GetTrinityString(LANG_OFF));
         return true;
     }
@@ -1909,4 +1922,11 @@
     if(strncmp(px,"on",3) == 0)
     {
+		if(!m_session)
+		{
+			SendSysMessage(LANG_PLAYER_NOT_FOUND);
+			SetSentErrorMessage(true);
+			return false;
+		}
+
         m_session->GetPlayer()->SetAcceptTicket(true);
         SendSysMessage(LANG_COMMAND_TICKETON);
@@ -1917,4 +1937,11 @@
     if(strncmp(px,"off",4) == 0)
     {
+		if(!m_session)
+		{
+			SendSysMessage(LANG_PLAYER_NOT_FOUND);
+			SetSentErrorMessage(true);
+			return false;
+		}
+
         m_session->GetPlayer()->SetAcceptTicket(false);
         SendSysMessage(LANG_COMMAND_TICKETOFF);
@@ -3591,5 +3618,10 @@
         {
             char const* active = activeEvents.find(id) != activeEvents.end() ? GetTrinityString(LANG_ACTIVE) : "";
-            PSendSysMessage(LANG_EVENT_ENTRY_LIST,id,id,descr.c_str(),active );
+            
+			if(m_session)
+				PSendSysMessage(LANG_EVENT_ENTRY_LIST_CHAT,id,id,eventData.description.c_str(),active );
+			else
+				PSendSysMessage(LANG_EVENT_ENTRY_LIST_CONSOLE,id,eventData.description.c_str(),active );
+
             ++counter;
         }
@@ -3616,5 +3648,9 @@
         GameEventData const& eventData = events[event_id];
 
-        PSendSysMessage(LANG_EVENT_ENTRY_LIST,event_id,event_id,eventData.description.c_str(),active );
+        if(m_session)
+			PSendSysMessage(LANG_EVENT_ENTRY_LIST_CHAT,event_id,event_id,eventData.description.c_str(),active );
+		else
+			PSendSysMessage(LANG_EVENT_ENTRY_LIST_CONSOLE,event_id,eventData.description.c_str(),active );
+
         ++counter;
     }
@@ -3849,5 +3885,5 @@
     }
 
-    if(!*args)
+    if (!*args)
         return false;
 
@@ -3917,35 +3953,35 @@
 {
   
-    if(!*args)
-        return false;
-
-    std::string ip = strtok((char*)args, " ");
-    char* limit_str = strtok(NULL, " ");
-    int32 limit = limit_str ? atoi(limit_str) : -1;
-
-    loginDatabase.escape_string(ip);
-
-    QueryResult* result = loginDatabase.PQuery("SELECT id,username FROM account WHERE last_ip = '%s'", ip.c_str());
-
-    return LookupPlayerSearchCommand(result,limit);
+    if (!*args)
+        return false;
+
+    std::string ip = strtok ((char*)args, " ");
+	char* limit_str = strtok (NULL, " ");
+	int32 limit = limit_str ? atoi (limit_str) : -1;
+
+    loginDatabase.escape_string (ip);
+
+    QueryResult* result = loginDatabase.PQuery ("SELECT id,username FROM account WHERE last_ip = '%s'", ip.c_str ());
+
+    return LookupPlayerSearchCommand (result,limit);
 }
 
 bool ChatHandler::HandleLookupPlayerAccountCommand(const char* args)
 {
-    if(!*args)
-        return false;
-
-    std::string account = strtok((char*)args, " ");
-    char* limit_str = strtok(NULL, " ");
-    int32 limit = limit_str ? atoi(limit_str) : -1;
-
-    if(!AccountMgr::normilizeString(account))
-        return false;
-
-    loginDatabase.escape_string(account);
-
-    QueryResult* result = loginDatabase.PQuery("SELECT id,username FROM account WHERE username = '%s'", account.c_str());
-
-    return LookupPlayerSearchCommand(result,limit);
+    if (!*args)
+        return false;
+
+    std::string account = strtok ((char*)args, " ");
+	char* limit_str = strtok (NULL, " ");
+	int32 limit = limit_str ? atoi (limit_str) : -1;
+
+    if (!AccountMgr::normilizeString (account))
+        return false;
+
+    loginDatabase.escape_string (account);
+
+    QueryResult* result = loginDatabase.PQuery ("SELECT id,username FROM account WHERE username = '%s'", account.c_str ());
+
+    return LookupPlayerSearchCommand (result,limit);
 }
 
@@ -3953,16 +3989,16 @@
 {
   
-    if(!*args)
-        return false;
-
-    std::string email = strtok((char*)args, " ");
-    char* limit_str = strtok(NULL, " ");
-    int32 limit = limit_str ? atoi(limit_str) : -1;
-
-    loginDatabase.escape_string(email);
-
-    QueryResult* result = loginDatabase.PQuery("SELECT id,username FROM account WHERE email = '%s'", email.c_str());
-
-    return LookupPlayerSearchCommand(result,limit);
+    if (!*args)
+        return false;
+
+    std::string email = strtok ((char*)args, " ");
+	char* limit_str = strtok (NULL, " ");
+	int32 limit = limit_str ? atoi (limit_str) : -1;
+
+    loginDatabase.escape_string (email);
+
+    QueryResult* result = loginDatabase.PQuery ("SELECT id,username FROM account WHERE email = '%s'", email.c_str ());
+
+    return LookupPlayerSearchCommand (result,limit);
 }
 
@@ -4010,2 +4046,9 @@
     return true;
 }
+
+/// Triggering corpses expire check in world
+bool ChatHandler::HandleServerCorpsesCommand(const char* /*args*/)
+{
+	CorpsesErase();
+	return true;
+}
Index: /trunk/src/game/WorldSession.cpp
===================================================================
--- /trunk/src/game/WorldSession.cpp (revision 102)
+++ /trunk/src/game/WorldSession.cpp (revision 112)
@@ -467,5 +467,5 @@
 }
 
-const char * WorldSession::GetTrinityString( int32 entry )
+const char * WorldSession::GetTrinityString( int32 entry ) const
 {
     return objmgr.GetTrinityString(entry,GetSessionDbLocaleIndex());
Index: /trunk/src/game/AccountMgr.h
===================================================================
--- /trunk/src/game/AccountMgr.h (revision 102)
+++ /trunk/src/game/AccountMgr.h (revision 112)
@@ -51,5 +51,4 @@
 
         uint32 GetId(std::string username);
-        uint32 GetIdByGUID(const uint64 &guid) const;
         uint32 GetSecurity(uint32 acc_id);
         bool GetName(uint32 acc_id, std::string &name);
Index: /trunk/src/game/SharedDefines.h
===================================================================
--- /trunk/src/game/SharedDefines.h (revision 108)
+++ /trunk/src/game/SharedDefines.h (revision 112)
@@ -2168,3 +2168,19 @@
     CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME            = 0x5A,
 };
+
+/// Ban function modes
+enum BanMode
+{
+	BAN_ACCOUNT,
+	BAN_CHARACTER,
+	BAN_IP
+};
+
+/// Ban function return codes
+enum BanReturn
+{
+	BAN_SUCCESS,
+	BAN_SYNTAX_ERROR,
+	BAN_NOTFOUND
+};
 #endif
Index: /trunk/src/game/Language.h
===================================================================
--- /trunk/src/game/Language.h (revision 102)
+++ /trunk/src/game/Language.h (revision 112)
@@ -80,5 +80,8 @@
     LANG_COMMAND_INVALID_ITEM_COUNT     = 52,
     LANG_COMMAND_MAIL_ITEMS_LIMIT       = 53,
-    // Room for more level 0              54-99 not used
+    LANG_NEW_PASSWORDS_NOT_MATCH        = 54,
+	LANG_PASSWORD_TOO_LONG              = 55,
+	LANG_MOTD_CURRENT                   = 56,
+	// Room for more level 0              57-99 not used
 
     // level 1 chat
@@ -164,5 +167,6 @@
     LANG_MAIL_SENT                      = 169,
     LANG_SOUND_NOT_EXIST                = 170,
-    // Room for more level 1              171-199 not used
+    LANG_TELEPORTED_TO_BY_CONSOLE       = 171,
+	// Room for more level 1              172-199 not used
 
     // level 2 chat
@@ -332,5 +336,6 @@
     LANG_UNBAN_ERROR                    = 412,
 
-    LANG_BANINFO_NOACCOUNT              = 413,
+    LANG_ACCOUNT_NOT_EXIST              = 413,
+
     LANG_BANINFO_NOCHARACTER            = 414,
     LANG_BANINFO_NOIP                   = 415,
@@ -445,14 +450,14 @@
 
     LANG_WRONG_LINK_TYPE                = 511,
-    LANG_ITEM_LIST                      = 512,
-    LANG_QUEST_LIST                     = 513,
-    LANG_CREATURE_ENTRY_LIST            = 514,
-    LANG_CREATURE_LIST                  = 515,
-    LANG_GO_ENTRY_LIST                  = 516,
-    LANG_GO_LIST                        = 517,
-    LANG_ITEMSET_LIST                   = 518,
+    LANG_ITEM_LIST_CHAT                 = 512,
+    LANG_QUEST_LIST_CHAT                = 513,
+    LANG_CREATURE_ENTRY_LIST_CHAT       = 514,
+    LANG_CREATURE_LIST_CHAT             = 515,
+    LANG_GO_ENTRY_LIST_CHAT             = 516,
+    LANG_GO_LIST_CHAT                   = 517,
+    LANG_ITEMSET_LIST_CHAT              = 518,
     LANG_TELE_LIST                      = 519,
     LANG_SPELL_LIST                     = 520,
-    LANG_SKILL_LIST                     = 521,
+    LANG_SKILL_LIST_CHAT                = 521,
 
     LANG_GAMEOBJECT_NOT_EXIST           = 522,
@@ -527,5 +532,5 @@
     LANG_COMMAND_RAWPAWNTIMES           = 582,
 
-    LANG_EVENT_ENTRY_LIST               = 583,
+    LANG_EVENT_ENTRY_LIST_CHAT          = 583,
     LANG_NOEVENTFOUND                   = 584,
     LANG_EVENT_NOT_EXIST                = 585,
@@ -539,4 +544,12 @@
 
     LANG_COMMAND_LEARN_ALL_RECIPES      = 592,
+	LANG_BANLIST_ACCOUNTS               = 593,
+	LANG_BANLIST_ACCOUNTS_HEADER        = 594,
+	LANG_BANLIST_IPS                    = 595,
+	LANG_BANLIST_IPS_HEADER             = 596,
+	LANG_GMLIST                         = 597,
+	LANG_GMLIST_HEADER                  = 598,
+	LANG_GMLIST_EMPTY                   = 599,
+	// End Level 3 list, continued at 1100
 
     // Battleground
@@ -659,12 +672,50 @@
     // Room for in-game strings           810-999 not used
 
-    // FREE IDS                           1000-9999
-    LANG_COMMAND_FREEZE                 = 1000,
-    LANG_COMMAND_FREEZE_ERROR           = 1001,
-    LANG_COMMAND_FREEZE_WRONG           = 1002,
-    LANG_COMMAND_UNFREEZE               = 1003,
-    LANG_COMMAND_NO_FROZEN_PLAYERS      = 1004,
-    LANG_COMMAND_LIST_FREEZE            = 1005,
-    LANG_COMMAND_FROZEN_PLAYERS         = 1006,
+    // Level 4 (CLI only commands)
+	LANG_COMMAND_EXIT = 1000,
+	LANG_ACCOUNT_DELETED = 1001,
+	LANG_ACCOUNT_NOT_DELETED_SQL_ERROR = 1002,
+	LANG_ACCOUNT_NOT_DELETED = 1003,
+	LANG_ACCOUNT_CREATED = 1004,
+	LANG_ACCOUNT_TOO_LONG = 1005,
+	LANG_ACCOUNT_ALREADY_EXIST = 1006,
+	LANG_ACCOUNT_NOT_CREATED_SQL_ERROR = 1007,
+	LANG_ACCOUNT_NOT_CREATED = 1008,
+	LANG_CHARACTER_DELETED = 1009,
+	LANG_ACCOUNT_LIST_HEADER = 1010,
+	LANG_ACCOUNT_LIST_ERROR = 1011,
+	// Room for more level 4 1012-1099 not used
+
+	// Level 3 (continue)
+    LANG_MOTD_NEW                       = 1100,
+    LANG_ACCOUNT_SETADDON               = 1101,
+    LANG_SENDMESSAGE                    = 1102,
+    LANG_EVENT_ENTRY_LIST_CONSOLE       = 1103,
+	LANG_CREATURE_ENTRY_LIST_CONSOLE    = 1104,
+	LANG_ITEM_LIST_CONSOLE              = 1105,
+	LANG_ITEMSET_LIST_CONSOLE           = 1106,
+	LANG_GO_ENTRY_LIST_CONSOLE          = 1107,
+	LANG_QUEST_LIST_CONSOLE             = 1108,
+	LANG_SKILL_LIST_CONSOLE             = 1109,
+	LANG_CREATURE_LIST_CONSOLE          = 1110,
+	LANG_GO_LIST_CONSOLE                = 1111,
+	LANG_FILE_OPEN_FAIL                 = 1112,
+	LANG_ACCOUNT_CHARACTER_LIST_FULL    = 1113,
+	LANG_DUMP_BROKEN                    = 1114,
+	LANG_INVALID_CHARACTER_NAME         = 1115,
+	LANG_INVALID_CHARACTER_GUID         = 1116,
+	LANG_CHARACTER_GUID_IN_USE          = 1117,
+	LANG_ITEMLIST_GUILD                 = 1118,
+	// Room for more level 3              1119-1199 not used
+	
+	// Trinity custom patches             5000-9999
+    LANG_COMMAND_FREEZE                 = 5000,
+    LANG_COMMAND_FREEZE_ERROR           = 5001,
+    LANG_COMMAND_FREEZE_WRONG           = 5002,
+    LANG_COMMAND_UNFREEZE               = 5003,
+    LANG_COMMAND_NO_FROZEN_PLAYERS      = 5004,
+    LANG_COMMAND_LIST_FREEZE            = 5005,
+    LANG_COMMAND_FROZEN_PLAYERS         = 5006,
+	// Room for more Trinity custom patches 5007-9999
 
     // Use for not-in-svn patches         10000-10999
Index: /trunk/src/trinitycore/CliRunnable.cpp
===================================================================
--- /trunk/src/trinitycore/CliRunnable.cpp (revision 102)
+++ /trunk/src/trinitycore/CliRunnable.cpp (revision 112)
@@ -28,5 +28,4 @@
 #include "World.h"
 #include "ScriptCalls.h"
-#include "GlobalEvents.h"
 #include "ObjectMgr.h"
 #include "WorldSession.h"
@@ -37,252 +36,107 @@
 #include "CliRunnable.h"
 #include "MapManager.h"
-#include "PlayerDump.h"
 #include "Player.h"
-
-//CliCommand and CliCommandHolder are defined in World.h to avoid cyclic deps
-
-//func prototypes must be defined
-
-void CliHelp(char*,pPrintf);
-void CliInfo(char*,pPrintf);
-void CliBan(char*,pPrintf);
-void CliBanList(char*,pPrintf);
-void CliRemoveBan(char*,pPrintf);
-void CliSetGM(char*,pPrintf);
-void CliListGM(char*,pPrintf);
-void CliVersion(char*,pPrintf);
-void CliExit(char*,pPrintf);
-void CliIdleRestart(char*,pPrintf zprintf);
-void CliRestart(char*,pPrintf zprintf);
-void CliIdleShutdown(char*,pPrintf zprintf);
-void CliShutdown(char*,pPrintf zprintf);
-void CliBroadcast(char*,pPrintf);
-void CliCreate(char*,pPrintf);
-void CliDelete(char*,pPrintf);
-void CliCharDelete(char *,pPrintf);
-void CliLoadScripts(char*,pPrintf);
-void CliKick(char*,pPrintf);
-void CliTele(char*,pPrintf);
-void CliMotd(char*,pPrintf);
-void CliCorpses(char*,pPrintf);
-void CliSetLogLevel(char*,pPrintf);
-void CliUpTime(char*,pPrintf);
-void CliSetAddon(char*,pPrintf);
-void CliWritePlayerDump(char*,pPrintf);
-void CliLoadPlayerDump(char*,pPrintf);
-void CliSave(char*,pPrintf);
-void CliSend(char*,pPrintf);
-void CliPLimit(char*,pPrintf);
-void CliSetPassword(char*,pPrintf);
-/// Table of known commands
-const CliCommand Commands[]=
-{
-    {"help", & CliHelp,"Display this help message"},
-    {"broadcast", & CliBroadcast,"Announce in-game message"},
-    {"create", & CliCreate,"Create account"},
-    {"delete", & CliDelete,"Delete account and characters"},
-    {"chardelete", & CliCharDelete,"Delete character"},
-    {"info", & CliInfo,"Display Server infomation"},
-    {"uptime", & CliUpTime, "Displays the server uptime"},
-    {"motd", & CliMotd,"Change or display motd"},
-    {"kick", & CliKick,"Kick user"},
-    {"ban", & CliBan,"Ban account|ip"},
-    {"listbans", & CliBanList,"List bans"},
-    {"unban", & CliRemoveBan,"Remove ban from account|ip"},
-    {"setgm", & CliSetGM,"Edit user privileges"},
-    {"setpass", & CliSetPassword,"Set password for account"},
-    {"setaddon", & CliSetAddon,"Set user expansion addon level allowed"},
-    {"listgm", & CliListGM,"Display user privileges"},
-    {"loadscripts", & CliLoadScripts,"Load script library"},
-    {"setloglevel", & CliSetLogLevel,"Set Log Level"},
-    {"corpses", & CliCorpses,"Manually call corpses erase global even code"},
-    {"version", & CliVersion,"Display server version"},
-    {"idlerestart", & CliIdleRestart,"Restart server with some delay when there are no active connections remaining"},
-    {"restart", & CliRestart,"Restart server with some delay"},
-    {"idleshutdown", & CliIdleShutdown,"Shutdown server with some delay when there are no active connections remaining"},
-    {"shutdown", & CliShutdown,"Shutdown server with some delay"},
-    {"exit", & CliExit,"Shutdown server NOW"},
-    {"writepdump", &CliWritePlayerDump,"Write a player dump to a file"},
-    {"loadpdump", &CliLoadPlayerDump,"Load a player dump from a file"},
-    {"saveall", &CliSave,"Save all players"},
-    {"send", &CliSend,"Send message to a player"},
-    {"tele", &CliTele,"Teleport player to location"},
-    {"plimit", &CliPLimit,"Show or set player login limitations"}
-};
-/// \todo Need some pragma pack? Else explain why in a comment.
-#define CliTotalCmds sizeof(Commands)/sizeof(CliCommand)
-
+#include "Chat.h"
+
+void utf8print(const char* str)
+{
 #if PLATFORM == PLATFORM_WINDOWS
-int utf8printf(const char* str,...)
-{
-    UTF8PRINTF(stdout,str,1);
-    return 0;
-}
 #define UTF8ZPRINTF utf8printf
+	wchar_t wtemp_buf[6000];
+    size_t wtemp_len = 6000-1;
+    if(!Utf8toWStr(str,strlen(str),wtemp_buf,wtemp_len))
+        return;
+
+    char temp_buf[6000];
+    CharToOemBuffW(&wtemp_buf[0],&temp_buf[0],wtemp_len+1);
+    printf(temp_buf);
 #else
-#define UTF8ZPRINTF printf
+	printf(str);
 #endif
-
-/// Create a character dump file
-void CliWritePlayerDump(char*command,pPrintf zprintf)
-{
-    char * file = strtok(command, " ");
-    char * p2 = strtok(NULL, " ");
-    if(!file || !p2)
-    {
-        zprintf("Syntax is: writepdump $filename $playerNameOrGUID\r\n");
-        return;
-    }
-
-    std::string name;
-    if(!consoleToUtf8(p2,name))                             // convert from console encoding to utf8
-        return;
-
-    if(!normalizePlayerName(name))
-    {
-        zprintf("Syntax is: writepdump $filename $playerNameOrGUID\r\n");
-        return;
-    }
-
-    uint32 guid = objmgr.GetPlayerGUIDByName(name);
-    if(!guid)
-        guid = atoi(p2);
-
-    if(!guid)
-    {
-        zprintf("Syntax is: writepdump $filename $playerNameOrGUID\r\n");
-        return;
-    }
-
-    PlayerDumpWriter().WriteDump(file, guid);
-}
-
-/// Load a character from a dump file
-void CliLoadPlayerDump(char*command,pPrintf zprintf)
-{
-    char * file = strtok(command, " ");
-    char * acc = strtok(NULL, " ");
-    if (!file ||!acc)
-    {
-        zprintf("Syntax is: loadpdump $filename $account ($newname) ($newguid)\r\n");
-        return;
-    }
-
-    uint32 account_id = accmgr.GetId(acc);
-    if(!account_id)
-    {
-        account_id = atoi(acc);
-        if(account_id)
-        {
-            std::string acc_name;
-            if(!accmgr.GetName(account_id,acc_name))
-            {
-                zprintf("Failed to load the character! Account not exist.\r\n");
-                return;
-            }
-        }
-        else
-        {
-            zprintf("Failed to load the character! Account not exist.\r\n");
-            return;
-        }
-    }
-
-    char * name_str = strtok(NULL, " ");
-    char * guid_str = name_str ? strtok(NULL, " ") : NULL;
-
-    uint32 guid = guid_str ? atoi(guid_str) : 0;
-
-    std::string name;
-    if(name_str)
-    {
-        if(!consoleToUtf8(name_str,name))                   // convert from console encoding to utf8
-            return;
-
-        if(!normalizePlayerName(name))
-        {
-            zprintf("Syntax is: loadpdump $filename $account ($newname) ($newguid)\r\n");
-            return;
-        }
-    }
-
-    if(PlayerDumpReader().LoadDump(file, account_id, name, guid))
-        zprintf("Character loaded successfully!\r\n");
-    else
-        zprintf("Failed to load the character!\r\n");
-}
-
-/// Reload the scripts and notify the players
-void CliLoadScripts(char*command,pPrintf zprintf)
-{
-    char const *del=strtok(command," ");
-    if (!del)
-        del="";
-    if(!LoadScriptingModule(del))                           // Error report is already done by LoadScriptingModule
-        return;
-
-    sWorld.SendWorldText(LANG_SCRIPTS_RELOADED);
 }
 
 /// Delete a user account and all associated characters in this realm
 /// \todo This function has to be enhanced to respect the login/realm split (delete char, delete account chars in realm, delete account chars in realm then delete account
-void CliDelete(char*command,pPrintf zprintf)
-{
+bool ChatHandler::HandleAccountDeleteCommand(const char* args)
+{
+    if(!*args)
+        return false;
+
     ///- Get the account name from the command line
-    char *account_name_str=strtok(command," ");
-    if(!account_name_str)
-    {
-        // \r\n is used because this function can also be called from RA
-        zprintf("Syntax is: delete $account\r\n");
-        return;
-    }
-
-    std::string account_name;
-    if(!consoleToUtf8(account_name_str,account_name))       // convert from console encoding to utf8
-        return;
-
-    AccountOpResult result = accmgr.DeleteAccount(accmgr.GetId(account_name));
+    char *account_name_str=strtok ((char*)args," ");
+    if (!account_name_str)
+        return false;
+
+    std::string account_name = account_name_str;
+    if(!AccountMgr::normilizeString(account_name))
+    {
+        PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+        SetSentErrorMessage(true);
+        return false;
+    }
+
+    uint32 account_id = accmgr.GetId(account_name);
+    if(!account_id)
+    {
+        PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+        SetSentErrorMessage(true);
+        return false;
+    }
+
+    /// Commands not recommended call from chat, but support anyway
+    if(m_session)
+    {
+        uint32 targetSecurity = accmgr.GetSecurity(account_id);
+
+        /// can delete only for account with less security
+        /// This is also reject self apply in fact
+        if (targetSecurity >= m_session->GetSecurity())
+        {
+            SendSysMessage (LANG_YOURS_SECURITY_IS_LOW);
+            SetSentErrorMessage (true);
+            return false;
+        }
+    }
+
+    AccountOpResult result = accmgr.DeleteAccount(account_id);
     switch(result)
     {
         case AOR_OK:
-            zprintf("We deleted account: %s\r\n",account_name.c_str());
+            PSendSysMessage(LANG_ACCOUNT_DELETED,account_name.c_str());
             break;
         case AOR_NAME_NOT_EXIST:
-            zprintf("User %s does not exist\r\n",account_name.c_str());
-            break;
+            PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+            SetSentErrorMessage(true);
+            return false;
         case AOR_DB_INTERNAL_ERROR:
-            zprintf("User %s NOT deleted (probably sql file format was updated)\r\n",account_name.c_str());
-            break;
+            PSendSysMessage(LANG_ACCOUNT_NOT_DELETED_SQL_ERROR,account_name.c_str());
+            SetSentErrorMessage(true);
+            return false;
         default:
-            zprintf("User %s NOT deleted (unknown error)\r\n",account_name.c_str());
-            break;
-    }
-}
-
-void CliCharDelete(char*command,pPrintf zprintf)
-{
-    char *character_name_str = strtok(command," ");
-
+            PSendSysMessage(LANG_ACCOUNT_NOT_DELETED,account_name.c_str());
+            SetSentErrorMessage(true);
+            return false;
+    }
+
+	return true;
+}
+
+bool ChatHandler::HandleCharacterDeleteCommand(const char* args)
+{
+    if(!*args)
+        return false;
+
+	char *character_name_str = strtok((char*)args," ");
     if(!character_name_str)
-    {
-        zprintf("Syntax is: chardelete $character_name\r\n");
-        return;
-    }
-
-    std::string character_name;
-    if(!consoleToUtf8(character_name_str,character_name))   // convert from console encoding to utf8
-        return;
-
+		return false;
+
+    std::string character_name = character_name_str;
     if(!normalizePlayerName(character_name))
-    {
-        zprintf("Syntax is: chardelete $character_name\r\n");
-        return;
-    }
-
-    Player *player = objmgr.GetPlayer(character_name.c_str());
+		return false;
 
     uint64 character_guid;
     uint32 account_id;
 
+	Player *player = objmgr.GetPlayer(character_name.c_str());
     if(player)
     {
@@ -296,6 +150,7 @@
         if(!character_guid)
         {
-            zprintf("Player %s not found!\r\n",character_name.c_str());
-            return;
+            PSendSysMessage(LANG_NO_PLAYER,character_name.c_str());
+            SetSentErrorMessage(true);
+            return false;
         }
 
@@ -303,176 +158,32 @@
     }
 
+	std::string account_name;
+    accmgr.GetName (account_id,account_name);
+
     Player::DeleteFromDB(character_guid, account_id, true); 
-    zprintf("Player %s (Guid: %u AccountId: %u) deleted\r\n",character_name.c_str(),GUID_LOPART(character_guid),account_id);
-}
-
-/// Broadcast a message to the World
-void CliBroadcast(char *text,pPrintf zprintf)
-{
-    std::string textUtf8;
-    if(!consoleToUtf8(text,textUtf8))                       // convert from console encoding to utf8
-        return;
-
-    sWorld.SendWorldText(LANG_SYSTEMMESSAGE,textUtf8.c_str());
-    zprintf("Broadcasting to the world: %s\r\n",textUtf8.c_str());
-}
-
-/// Print the list of commands and associated description
-void CliHelp(char*,pPrintf zprintf)
-{
-    for (unsigned int x=0;x<CliTotalCmds;x++)
-        zprintf("%-13s - %s.\r\n",Commands[x].cmd ,Commands[x].description);
+    PSendSysMessage(LANG_CHARACTER_DELETED,character_name.c_str(),GUID_LOPART(character_guid),account_name.c_str(), account_id);
+    return true;
 }
 
 /// Exit the realm
-void CliExit(char*,pPrintf zprintf)
-{
-    zprintf( "Exiting daemon...\r\n" );
+bool ChatHandler::HandleServerExitCommand(const char* args)
+{
+    SendSysMessage(LANG_COMMAND_EXIT);
     World::m_stopEvent = true;
-}
-
-/// Restart the server (with some delay) as soon as no active connections remain on the server
-void CliIdleRestart(char* command,pPrintf zprintf)
-{
-    char *args = strtok(command," ");
-
-    if(!args)
-    {
-        zprintf("Syntax is: idlerestart $seconds|cancel\r\n");
-        return;
-    }
-
-    if(std::string(args)=="cancel")
-    {
-        sWorld.ShutdownCancel();
-    }
-    else
-    {
-
-        uint32 time = atoi(args);
-
-        ///- Prevent interpret wrong arg value as 0 secs shutdown time
-        if(time==0 && (args[0]!='0' || args[1]!='\0') || time < 0)
-        {
-            zprintf("Syntax is: idlerestart $seconds|cancel\r\n");
-            return;
-        }
-
-        sWorld.ShutdownServ(time,SHUTDOWN_MASK_RESTART|SHUTDOWN_MASK_IDLE);
-    }
-}
-
-/// Restart the server with some delay
-void CliRestart(char* command,pPrintf zprintf)
-{
-    char *args = strtok(command," ");
-
-    if(!args)
-    {
-        zprintf("Syntax is: restart $seconds|cancel\r\n");
-        return;
-    }
-
-    if(std::string(args)=="cancel")
-    {
-        sWorld.ShutdownCancel();
-    }
-    else
-    {
-        int32 time = atoi(args);
-
-        ///- Prevent interpret wrong arg value as 0 secs shutdown time
-        if(time==0 && (args[0]!='0' || args[1]!='\0') || time < 0)
-        {
-            zprintf("Syntax is: restart $seconds|cancel\r\n");
-            return;
-        }
-
-        sWorld.ShutdownServ(time,SHUTDOWN_MASK_RESTART);
-    }
-}
-
-/// Shutdown the server (with some delay) as soon as no active connections remain on the server
-void CliIdleShutdown(char* command,pPrintf zprintf)
-{
-    char *args = strtok(command," ");
-
-    if(!args)
-    {
-        zprintf("Syntax is: idleshutdown $seconds|cancel\r\n");
-        return;
-    }
-
-    if(std::string(args)=="cancel")
-    {
-        sWorld.ShutdownCancel();
-    }
-    else
-    {
-
-        uint32 time = atoi(args);
-
-        ///- Prevent interpret wrong arg value as 0 secs shutdown time
-        if(time==0 && (args[0]!='0' || args[1]!='\0') || time < 0)
-        {
-            zprintf("Syntax is: idleshutdown $seconds|cancel\r\n");
-            return;
-        }
-
-        sWorld.ShutdownServ(time,SHUTDOWN_MASK_IDLE);
-    }
-}
-
-/// Shutdown the server with some delay
-void CliShutdown(char* command,pPrintf zprintf)
-{
-    char *args = strtok(command," ");
-
-    if(!args)
-    {
-        zprintf("Syntax is: shutdown $seconds|cancel\r\n");
-        return;
-    }
-
-    if(std::string(args)=="cancel")
-    {
-        sWorld.ShutdownCancel();
-    }
-    else
-    {
-        int32 time = atoi(args);
-
-        ///- Prevent interpret wrong arg value as 0 secs shutdown time
-        if(time==0 && (args[0]!='0' || args[1]!='\0') || time < 0)
-        {
-            zprintf("Syntax is: shutdown $seconds|cancel\r\n");
-            return;
-        }
-
-        sWorld.ShutdownServ(time);
-    }
+	return true;
 }
 
 /// Display info on users currently in the realm
-void CliInfo(char*,pPrintf zprintf)
-{
-    uint32 activeClientsNum = sWorld.GetActiveSessionCount();
-    uint32 queuedClientsNum = sWorld.GetQueuedSessionCount();
-    uint32 maxActiveClientsNum = sWorld.GetMaxActiveSessionCount();
-    uint32 maxQueuedClientsNum = sWorld.GetMaxQueuedSessionCount();
-    std::string timeStr = secsToTimeString(sWorld.GetUptime(),true);
-
-    zprintf("Online players: %u (max: %u) queued: %u (max: %u) Uptime: %s\r\n",activeClientsNum,maxActiveClientsNum,queuedClientsNum,maxQueuedClientsNum,timeStr.c_str());
-
+bool ChatHandler::HandleAccountOnlineListCommand(const char* args)
+{
     ///- Get the list of accounts ID logged to the realm
     QueryResult *resultDB = CharacterDatabase.Query("SELECT name,account FROM characters WHERE online > 0");
-
     if (!resultDB)
-        return;
+        return true;
 
     ///- Display the list of account/characters online
-    zprintf("=====================================================================\r\n");
-    zprintf("|    Account    |       Character      |       IP        | GM | Exp |\r\n");
-    zprintf("=====================================================================\r\n");
+    SendSysMessage("=====================================================================");
+    SendSysMessage(LANG_ACCOUNT_LIST_HEADER);
+    SendSysMessage("=====================================================================");
 
     ///- Circle through accounts
@@ -491,5 +202,5 @@
         {
             Field *fieldsLogin = resultLogin->Fetch();
-            zprintf("|%15s| %20s | %15s |%4d|%5d|\r\n",
+            PSendSysMessage("|%15s| %20s | %15s |%4d|%5d|",
                 fieldsLogin[0].GetString(),name.c_str(),fieldsLogin[1].GetString(),fieldsLogin[2].GetUInt32(),fieldsLogin[3].GetUInt32());
 
@@ -497,5 +208,5 @@
         }
         else
-            zprintf("|<Error>        | %20s |<Error>          |<Er>|<Err>|\r\n",name.c_str());
+            PSendSysMessage(LANG_ACCOUNT_LIST_ERROR,name.c_str());
 
     }while(resultDB->NextRow());
@@ -503,335 +214,23 @@
     delete resultDB;
 
-    zprintf("=====================================================================\r\n");
-}
-
-/// Display a list of banned accounts and ip addresses
-void CliBanList(char*,pPrintf zprintf)
-{
-    bool found = false;
-    ///- Get the list of banned accounts and display them
-    QueryResult *result = loginDatabase.Query("SELECT id,username FROM account WHERE id IN (SELECT id FROM account_banned WHERE active = 1)");
-    if(result)
-    {
-        found = true;
-
-        zprintf("Currently Banned Accounts:\r\n");
-        zprintf("===============================================================================\r\n");
-        zprintf("|    Account    |   BanDate    |   UnbanDate  |  Banned By    |   Ban Reason  |\r\n");
-        do
-        {
-            zprintf("-------------------------------------------------------------------------------\r\n");
-            Field *fields = result->Fetch();
-            // No SQL injection. id is uint32.
-            QueryResult *banInfo = loginDatabase.PQuery("SELECT bandate,unbandate,bannedby,banreason FROM account_banned WHERE id = %u AND active = 1 ORDER BY unbandate", fields[0].GetUInt32());
-            if (banInfo)
-            {
-                Field *fields2 = banInfo->Fetch();
-                do
-                {
-                    time_t t_ban = fields2[0].GetUInt64();
-                    tm* aTm_ban = localtime(&t_ban);
-                    zprintf("|%-15.15s|", fields[1].GetString());
-                    zprintf("%02d-%02d-%02d %02d:%02d|", aTm_ban->tm_year%100, aTm_ban->tm_mon+1, aTm_ban->tm_mday, aTm_ban->tm_hour, aTm_ban->tm_min);
-                    if ( fields2[0].GetUInt64() == fields2[1].GetUInt64() )
-                        zprintf("   permanent  |");
-                    else
-                    {
-                        time_t t_unban = fields2[1].GetUInt64();
-                        tm* aTm_unban = localtime(&t_unban);
-                        zprintf("%02d-%02d-%02d %02d:%02d|",aTm_unban->tm_year%100, aTm_unban->tm_mon+1, aTm_unban->tm_mday, aTm_unban->tm_hour, aTm_unban->tm_min);
-                    }
-                    zprintf("%-15.15s|%-15.15s|\r\n",fields2[2].GetString(),fields2[3].GetString());
-                }while ( banInfo->NextRow() );
-                delete banInfo;
-            }
-        }while( result->NextRow() );
-        zprintf("===============================================================================\r\n");
-        delete result;
-    }
-
-    ///- Get the list of banned IP addresses and display them
-    result = loginDatabase.Query( "SELECT ip,bandate,unbandate,bannedby,banreason FROM ip_banned WHERE (bandate=unbandate OR unbandate>UNIX_TIMESTAMP()) ORDER BY unbandate" );
-    if(result)
-    {
-        found = true;
-
-        zprintf("Currently Banned IPs:\r\n");
-        zprintf("===============================================================================\r\n");
-        zprintf("|      IP       |   BanDate    |   UnbanDate  |  Banned By    |   Ban Reason  |\r\n");
-        do
-        {
-            zprintf("-------------------------------------------------------------------------------\r\n");
-            Field *fields = result->Fetch();
-            time_t t_ban = fields[1].GetUInt64();
-            tm* aTm_ban = localtime(&t_ban);
-            zprintf("|%-15.15s|", fields[0].GetString());
-            zprintf("%02d-%02d-%02d %02d:%02d|", aTm_ban->tm_year%100, aTm_ban->tm_mon+1, aTm_ban->tm_mday, aTm_ban->tm_hour, aTm_ban->tm_min);
-            if ( fields[1].GetUInt64() == fields[2].GetUInt64() )
-                zprintf("   permanent  |");
-            else
-            {
-                time_t t_unban = fields[2].GetUInt64();
-                tm* aTm_unban = localtime(&t_unban);
-                zprintf("%02d-%02d-%02d %02d:%02d|", aTm_unban->tm_year%100, aTm_unban->tm_mon+1, aTm_unban->tm_mday, aTm_unban->tm_hour, aTm_unban->tm_min);
-            }
-            zprintf("%-15.15s|%-15.15s|\r\n", fields[3].GetString(), fields[4].GetString());
-        }while( result->NextRow() );
-        zprintf("===============================================================================\r\n");
-        delete result;
-    }
-
-    if(!found)
-        zprintf("We do not have banned users\r\n");
-}
-
-/// Ban an IP address or a user account
-void CliBan(char*command,pPrintf zprintf)
-{
-    ///- Get the command parameter
-    char* type_str = strtok((char*)command, " ");
-    char* nameOrIP_str = strtok(NULL, " ");
-    char* duration_str = strtok(NULL," ");
-    char* reason_str = strtok(NULL,"");
-
-    if(!type_str||!nameOrIP_str||!duration_str||!reason_str)// ?!? input of single char "0"-"9" wouldn't detect when with: || !atoi(duration)
-    {
-        zprintf("Syntax: ban account|ip|character $AccountOrIpOrCharacter $duration[s|m|h|d] $reason \r\n");
-        return;
-    }
-
-    std::string type;
-    if(!consoleToUtf8(type_str,type))                       // convert from console encoding to utf8
-        return;
-
-    std::string nameOrIP;
-    if(!consoleToUtf8(nameOrIP_str,nameOrIP))               // convert from console encoding to utf8
-        return;
-
-    std::string duration;
-    if(!consoleToUtf8(duration_str,duration))               // convert from console encoding to utf8
-        return;
-
-    std::string reason;
-    if(!consoleToUtf8(reason_str,reason))                   // convert from console encoding to utf8
-        return;
-
-    switch (sWorld.BanAccount(type, nameOrIP, duration, reason, "Set by console."))
-    {
-        case BAN_SUCCESS:
-            if(atoi(duration_str)>0)
-                zprintf("%s is banned for %s. Reason: %s.\r\n",nameOrIP.c_str(),secsToTimeString(TimeStringToSecs(duration_str),true,false).c_str(),reason.c_str());
-            else
-                zprintf("%s is banned permanently. Reason: %s.\r\n",nameOrIP.c_str(),reason.c_str());
-            break;
-        case BAN_NOTFOUND:
-            zprintf("%s %s not found\r\n", type.c_str(), nameOrIP.c_str());
-            break;
-        case BAN_SYNTAX_ERROR:
-            zprintf("Syntax: ban account|ip|character $AccountOrIpOrCharacter $duration[s|m|h|d] $reason \r\n");
-            break;
-    }
-}
-
-/// Display %TrinIty version
-void CliVersion(char*,pPrintf zprintf)
-{
-                                                            //<--maybe better append to info cmd
-    zprintf( "%s (world-daemon)\r\n", _FULLVERSION );
-}
-
-/// Unban an IP adress or a user account
-void CliRemoveBan(char *command,pPrintf zprintf)
-{
-    ///- Get the command parameter
-    char *type_str = strtok(command," ");
-    char *nameorip_str = strtok(NULL," ");
-    if(!nameorip_str||!type_str)
-    {
-        zprintf("Syntax is: unban account|ip|character $nameorip\r\n");
-        return;
-    }
-
-    std::string type;
-    if(!consoleToUtf8(type_str,type))                       // convert from console encoding to utf8
-        return;
-
-    std::string nameorip;
-    if(!consoleToUtf8(nameorip_str,nameorip))               // convert from console encoding to utf8
-        return;
-
-    if (!sWorld.RemoveBanAccount(type, nameorip))
-        zprintf("%s %s not found\r\n", type.c_str(), nameorip.c_str());
-    else
-        zprintf("We removed ban from %s: %s\r\n",type_str,nameorip.c_str());
-}
-
-/// Display the list of GMs
-void CliListGM(char*,pPrintf zprintf)
-{
-
-    ///- Get the accounts with GM Level >0
-    Field *fields;
-
-    QueryResult *result = loginDatabase.Query( "SELECT username,gmlevel FROM account WHERE gmlevel > 0" );
-    if(result)
-    {
-
-        zprintf("Current gamemasters:\r\n");
-        zprintf("========================\r\n");
-        zprintf("|    Account    |  GM  |\r\n");
-        zprintf("========================\r\n");
-
-        ///- Circle through them. Display username and GM level
-        do
-        {
-            fields = result->Fetch();
-            zprintf("|%15s|", fields[0].GetString());
-            zprintf("%6s|\r\n",fields[1].GetString());
-        }while( result->NextRow() );
-
-        zprintf("========================\r\n");
-        delete result;
-    }
-    else
-    {
-        zprintf("No gamemasters\r\n");
-    }
-}
-
-/// Set the GM level of an account
-void CliSetGM(char *command,pPrintf zprintf)
-{
-    ///- Get the command line arguments
-    char *szAcc = strtok(command," ");
-    char *szLevel =  strtok(NULL," ");
-
-    if(!szAcc||!szLevel)                                    //wrong syntax 'setgm' without name
-    {
-        zprintf("Syntax is: setgm $account $number (0 - normal, 3 - gamemaster)>\r\n");
-        return;
-    }
-
-    //wow it's ok,let's hope it was integer given
-    int lev=atoi(szLevel);                                  //get int anyway (0 if error)
-
-    std::string safe_account_name;
-    if(!consoleToUtf8(szAcc,safe_account_name))             // convert from console encoding to utf8
-        return;
-
-    ///- Convert Account name to Upper Format
-    AccountMgr::normilizeString(safe_account_name);
-
-    ///- Escape the account name to allow quotes in names
-    loginDatabase.escape_string(safe_account_name);
-
-    ///- Try to find the account, then update the GM level
-    // No SQL injection (account name is escaped)
-    QueryResult *result = loginDatabase.PQuery("SELECT id FROM account WHERE username = '%s'",safe_account_name.c_str());
-
-    if (result)
-    {
-        Field *fields = result->Fetch();
-        uint32 account_id = fields[0].GetUInt32();
-        delete result;
-
-        WorldSession* session = sWorld.FindSession(account_id);
-        if(session)
-            session->SetSecurity(lev);
-
-        // No SQL injection (account name is escaped)
-        loginDatabase.PExecute("UPDATE account SET gmlevel = '%d' WHERE username = '%s'",lev,safe_account_name.c_str());
-        zprintf("We set %s gmlevel %d\r\n",safe_account_name.c_str(),lev);
-    }
-    else
-    {
-        zprintf("No account %s found\r\n",safe_account_name.c_str());
-    }
-}
-
-/// Set password for account
-void CliSetPassword(char *command,pPrintf zprintf)
-{
-    ///- Get the command line arguments
-    char *szAcc = strtok(command," ");
-    char *szPassword1 =  strtok(NULL," ");
-    char *szPassword2 =  strtok(NULL," ");
-
-    if(!szAcc||!szPassword1 || !szPassword2)
-    {
-        zprintf("Syntax is: setpass $account $password $password\r\n");
-        return;
-    }
-
-    std::string account_name;
-    if(!consoleToUtf8(szAcc,account_name))                  // convert from console encoding to utf8
-        return;
-
-    std::string pass1;
-    if(!consoleToUtf8(szPassword1,pass1))                   // convert from console encoding to utf8
-        return;
-
-    std::string pass2;
-    if(!consoleToUtf8(szPassword2,pass2))                   // convert from console encoding to utf8
-        return;
-
-    uint32 acc_id = accmgr.GetId(szAcc);
-    if (!acc_id)
-    {
-        zprintf("Account '%s' does not exist!\r\n", account_name.c_str());
-        return;
-    }
-
-    if (pass1 != pass2)
-    {
-        zprintf("Password does not match the confirm password, password not changed!\r\n");
-        return;
-    }
-
-    AccountOpResult result = accmgr.ChangePassword(acc_id, pass1);
-
-    switch(result)
-    {
-        case AOR_OK:
-            zprintf("The password was changed for account '%s' (ID: %u).\r\n",account_name.c_str(),acc_id);
-            break;
-        case AOR_PASS_TOO_LONG:
-            zprintf("Password can't be longer than 16 characters (client limit), password not changed!\r\n");
-            break;
-        case AOR_NAME_NOT_EXIST:
-            zprintf("Account '%s' does not exist!\r\n", account_name.c_str());
-            break;
-        case AOR_DB_INTERNAL_ERROR:
-            zprintf("Password not changed! (probably sql file format was updated)\r\n");
-            break;
-        default:
-            zprintf("Password not changed! (unknown error\r\n");
-            break;
-    }
+    SendSysMessage("=====================================================================");
+    return true;
 }
 
 /// Create an account
-void CliCreate(char *command,pPrintf zprintf)
-{
-    //I see no need in this function (why would an admin personally create accounts
-    //instead of using account registration page or accessing db directly?)
-    //but still let it be
+bool ChatHandler::HandleAccountCreateCommand(const char* args)
+{
+    if(!*args)
+        return false;
 
     ///- %Parse the command line arguments
-    char *szAcc = strtok(command, " ");
+    char *szAcc = strtok((char*)args, " ");
     char *szPassword = strtok(NULL, " ");
     if(!szAcc || !szPassword)
-    {
-        zprintf("Syntax is: create $username $password\r\n");
-        return;
-    }
-
-    std::string account_name;
-    if(!consoleToUtf8(szAcc,account_name))                   // convert from console encoding to utf8
-        return;
-
-    std::string password;
-    if(!consoleToUtf8(szPassword,password))                 // convert from console encoding to utf8
-        return;
+		return false;
+
+    // normilized in accmgr.CreateAccount
+    std::string account_name = szAcc;
+    std::string password = szPassword;
 
     AccountOpResult result = accmgr.CreateAccount(account_name, password);
@@ -839,358 +238,39 @@
     {
         case AOR_OK:
-            zprintf("User %s with password %s created successfully\r\n",account_name.c_str(),password.c_str());
+            PSendSysMessage(LANG_ACCOUNT_CREATED,account_name.c_str());
             break;
         case AOR_NAME_TOO_LONG:
-            zprintf("Username %s is too long\r\n", account_name.c_str());
-            break;
+            SendSysMessage(LANG_ACCOUNT_TOO_LONG);
+            SetSentErrorMessage(true);
+            return false;
         case AOR_NAME_ALREDY_EXIST:
-            zprintf("User %s already exists\r\n",account_name.c_str());
-            break;
+            SendSysMessage(LANG_ACCOUNT_ALREADY_EXIST);
+            SetSentErrorMessage(true);
+            return false;
         case AOR_DB_INTERNAL_ERROR:
-            zprintf("User %s with password %s NOT created (probably sql file format was updated)\r\n",account_name.c_str(),password.c_str());
-            break;
+            PSendSysMessage(LANG_ACCOUNT_NOT_CREATED_SQL_ERROR,account_name.c_str());
+            SetSentErrorMessage(true);
+            return false;
         default:
-            zprintf("User %s with password %s NOT created (unknown error)\r\n",account_name.c_str(),password.c_str());
-            break;
-    }
-}
-
-/// Command parser and dispatcher
-void ParseCommand( pPrintf zprintf, char* input)
-{
-    unsigned int x;
-    bool bSuccess=false;
-    if (!input)
-        return;
-
-    unsigned int l=strlen(input);
-    char *supposedCommand=NULL,* arguments=(char*)("");
-    if(l)
-    {
-        ///- Get the command and the arguments
-        supposedCommand = strtok(input," ");
-        if (supposedCommand)
-        {
-            if (l>strlen(supposedCommand))
-                arguments=&input[strlen(supposedCommand)+1];
-
-            ///- Circle through the command table and, if found, put the command in the queue
-            for ( x=0;x<CliTotalCmds;x++)
-                if(!strcmp(Commands[x].cmd,supposedCommand))
-            {
-                sWorld.QueueCliCommand(new CliCommandHolder(&Commands[x], arguments, zprintf));
-                bSuccess=true;
-                break;
-            }
-
-            ///- Display an error message if the command is unknown
-            if(x==CliTotalCmds)
-                zprintf("Unknown command: %s\r\n", input);
-        }
-    }
-    if (!bSuccess)
-        zprintf("TC>");
-}
-
-/// Kick a character out of the realm
-void CliKick(char*command,pPrintf zprintf)
-{
-    char *kickName = strtok(command, " ");
-
-    if (!kickName)
-    {
-        zprintf("Syntax is: kick $charactername\r\n");
-        return;
-    }
-
-    std::string name;
-    if(!consoleToUtf8(kickName,name))                       // convert from console encoding to utf8
-        return;
-    
-    if(!normalizePlayerName(name))
-        return;
-
-    sWorld.KickPlayer(name);
-}
-
-/// Teleport a character to location
-void CliTele(char*command,pPrintf zprintf)
-{
-    char *charName = strtok(command, " ");
-    char *locName = strtok(NULL, " ");
-
-    if (!charName || !locName)
-    {
-        zprintf("Syntax is: tele $charactername $location\r\n");
-        return;
-    }
-
-    std::string name = charName;
-    if(!consoleToUtf8(charName,name))                       // convert from console encoding to utf8
-        return;
-    
-    if(!normalizePlayerName(name))
-        return;
-
-    std::string location;
-    if(!consoleToUtf8(locName,location))                    // convert from console encoding to utf8
-        return;
-
-    WorldDatabase.escape_string(location);
-    QueryResult *result = WorldDatabase.PQuery("SELECT position_x,position_y,position_z,orientation,map FROM game_tele WHERE name = '%s'",location.c_str());
-    if (!result)
-    {
-        zprintf(objmgr.GetTrinityStringForDBCLocale(LANG_COMMAND_TELE_NOTFOUND),"\r\n");
-        return;
-    }
-
-    Field *fields = result->Fetch();
-    float x = fields[0].GetFloat();
-    float y = fields[1].GetFloat();
-    float z = fields[2].GetFloat();
-    float ort = fields[3].GetFloat();
-    int mapid = fields[4].GetUInt16();
-    delete result;
-
-    if(!MapManager::IsValidMapCoord(mapid,x,y,z,ort))
-    {
-        zprintf(objmgr.GetTrinityStringForDBCLocale(LANG_INVALID_TARGET_COORD),"\r\n",x,y,mapid);
-        return;
-    }
-
-    Player *chr = objmgr.GetPlayer(name.c_str());
-    if (chr)
-    {
-
-        if(chr->IsBeingTeleported()==true)
-        {
-            zprintf(objmgr.GetTrinityStringForDBCLocale(LANG_IS_TELEPORTED),"\r\n",chr->GetName());
-            return;
-        }
-
-        if(chr->isInFlight())
-        {
-            zprintf(objmgr.GetTrinityStringForDBCLocale(LANG_CHAR_IN_FLIGHT),"\r\n",chr->GetName());
-            return;
-        }
-
-        zprintf(objmgr.GetTrinityStringForDBCLocale(LANG_TELEPORTING_TO),"\r\n",chr->GetName(),"", location.c_str());
-
-        chr->SaveRecallPosition();
-
-        chr->TeleportTo(mapid,x,y,z,chr->GetOrientation());
-    }
-    else if (uint64 guid = objmgr.GetPlayerGUIDByName(name.c_str()))
-    {
-        zprintf(objmgr.GetTrinityStringForDBCLocale(LANG_TELEPORTING_TO),"\r\n",name.c_str(), objmgr.GetTrinityStringForDBCLocale(LANG_OFFLINE), location.c_str());
-        Player::SavePositionInDB(mapid,x,y,z,ort,MapManager::Instance().GetZoneId(mapid,x,y),guid);
-    }
-    else
-        zprintf(objmgr.GetTrinityStringForDBCLocale(LANG_NO_PLAYER),"\r\n",name.c_str());
-}
-
-/// Display/Define the 'Message of the day' for the realm
-void CliMotd(char*command,pPrintf zprintf)
-{
-
-    if (strlen(command) == 0)
-    {
-        zprintf("Current Message of the day: \r\n%s\r\n", sWorld.GetMotd());
-        return;
-    }
-    else
-    {
-        std::string commandUtf8;
-        if(!consoleToUtf8(command,commandUtf8))             // convert from console encoding to utf8
-            return;
-
-        sWorld.SetMotd(commandUtf8);
-        zprintf("Message of the day changed to:\r\n%s\r\n", commandUtf8.c_str());
-    }
-}
-
-/// Comment me
-/// \todo What is CorpsesErase for?
-void CliCorpses(char*,pPrintf)
-{
-    CorpsesErase();
+            PSendSysMessage(LANG_ACCOUNT_NOT_CREATED,account_name.c_str());
+            SetSentErrorMessage(true);
+            return false;
+    }
+	
+	return true;
 }
 
 /// Set the level of logging
-void CliSetLogLevel(char*command,pPrintf zprintf)
-{
-    char *NewLevel = strtok(command, " ");
+bool ChatHandler::HandleServerSetLogLevelCommand(const char *args)
+{
+    if(!*args)
+        return false;
+
+    char *NewLevel = strtok((char*)args, " ");
     if (!NewLevel)
-    {
-        zprintf("Syntax is: setloglevel $loglevel\r\n");
-        return;
-    }
+		return false;
+
     sLog.SetLogLevel(NewLevel);
-}
-
-/// Display the server uptime
-void CliUpTime(char*,pPrintf zprintf)
-{
-    uint32 uptime = sWorld.GetUptime();
-    std::string suptime = secsToTimeString(uptime,true,(uptime > 86400));
-    zprintf("Server has been up for: %s\r\n", suptime.c_str());
-}
-
-/// Set/Unset the TBC flag for an account
-void CliSetAddon(char *command,pPrintf zprintf)
-{
-    ///- Get the command line arguments
-    char *szAcc = strtok(command," ");
-    char *szExp =  strtok(NULL," ");
-
-    if(!szAcc||!szExp)
-    {
-        zprintf("Syntax is: setbc $account $number (0 - normal, 1 - tbc, 2 - wotlk)>\r\n");
-        return;
-    }
-
-    int lev=atoi(szExp);                                    //get int anyway (0 if error)
-
-    if(lev < 0)
-    {
-        zprintf("Syntax is: setbc $account $number (0 - normal, 1 - tbc, 2 - wotlk)>\r\n");
-        return;
-    }
-
-    ///- Escape the account name to allow quotes in names
-    std::string safe_account_name;
-    if(!consoleToUtf8(szAcc,safe_account_name))             // convert from console encoding to utf8
-        return;
-
-    ///- Convert Account name to Upper Format
-    AccountMgr::normilizeString(safe_account_name);
-
-    ///- Escape the account name to allow quotes in names
-    loginDatabase.escape_string(safe_account_name);
-
-    // No SQL injection (account name is escaped)
-    QueryResult *result = loginDatabase.PQuery("SELECT 1 FROM account WHERE username = '%s'",safe_account_name.c_str());
-
-    if (result)
-    {
-        // No SQL injection (account name is escaped)
-        loginDatabase.PExecute("UPDATE account SET expansion = '%d' WHERE username = '%s'",lev,safe_account_name.c_str());
-        zprintf("We set %s to expansion allowed %d\r\n",safe_account_name.c_str(),lev);
-
-        delete result;
-    }
-    else
-    {
-        zprintf("No account %s found\r\n",safe_account_name.c_str());
-    }
-}
-
-/// Save all players
-void CliSave(char*,pPrintf zprintf)
-{
-    ///- Save players
-    ObjectAccessor::Instance().SaveAllPlayers();
-    zprintf( objmgr.GetTrinityStringForDBCLocale(LANG_PLAYERS_SAVED) );
-
-    ///- Send a message
-    sWorld.SendWorldText(LANG_PLAYERS_SAVED);
-}
-
-/// Send a message to a player in game
-void CliSend(char *playerN,pPrintf zprintf)
-{
-    ///- Get the command line arguments
-    char* name_str = strtok((char*)playerN, " ");
-    char* msg_str = strtok(NULL, "");
-
-    if(!name_str || !msg_str)
-    {
-        zprintf("Syntax: send $player $message (Player name is case sensitive)\r\n");
-        return;
-    }
-
-    std::string name;
-    if(!consoleToUtf8(name_str,name))                       // convert from console encoding to utf8
-        return;
-
-    std::string msg;
-    if(!consoleToUtf8(msg_str,msg))             // convert from console encoding to utf8
-        return;
-
-    if(!normalizePlayerName(name))
-    {
-        zprintf("Syntax: send $player $message (Player name is case sensitive)\r\n");
-        return;
-    }
-
-    ///- Find the player and check that he is not logging out.
-    Player *rPlayer = objmgr.GetPlayer(name.c_str());
-    if(!rPlayer)
-    {
-        zprintf("Player %s not found!\r\n", name.c_str());
-        return;
-    }
-
-    if (rPlayer->GetSession()->isLogingOut())
-    {
-        zprintf("Cannot send message while player %s is logging out!\r\n",name.c_str());
-        return;
-    }
-
-    ///- Send the message
-    //Use SendAreaTriggerMessage for fastest delivery.
-    rPlayer->GetSession()->SendAreaTriggerMessage("%s", msg.c_str());
-    rPlayer->GetSession()->SendAreaTriggerMessage("|cffff0000[Message from administrator]:|r");
-
-    //Confirmation message
-    zprintf("Message '%s' sent to %s\r\n",msg.c_str(), name.c_str());
-}
-
-void CliPLimit(char *args,pPrintf zprintf)
-{
-    if(*args)
-    {
-        char* param = strtok((char*)args, " ");
-        if(!param || !*param)
-            return;
-
-        int l = strlen(param);
-
-        if(     strncmp(param,"player",l) == 0 )
-            sWorld.SetPlayerLimit(-SEC_PLAYER);
-        else if(strncmp(param,"moderator",l) == 0 )
-            sWorld.SetPlayerLimit(-SEC_MODERATOR);
-        else if(strncmp(param,"gamemaster",l) == 0 )
-            sWorld.SetPlayerLimit(-SEC_GAMEMASTER);
-        else if(strncmp(param,"administrator",l) == 0 )
-            sWorld.SetPlayerLimit(-SEC_ADMINISTRATOR);
-        else if(strncmp(param,"reset",l) == 0 )
-            sWorld.SetPlayerLimit(sConfig.GetIntDefault("PlayerLimit", DEFAULT_PLAYER_LIMIT));
-        else
-        {
-            int val = atoi(param);
-            if(val < -SEC_ADMINISTRATOR) val = -SEC_ADMINISTRATOR;
-
-            sWorld.SetPlayerLimit(val);
-        }
-
-        // kick all low security level players
-        if(sWorld.GetPlayerAmountLimit() > SEC_PLAYER)
-            sWorld.KickAllLess(sWorld.GetPlayerSecurityLimit());
-    }
-
-    uint32 pLimit = sWorld.GetPlayerAmountLimit();
-    AccountTypes allowedAccountType = sWorld.GetPlayerSecurityLimit();
-    char const* secName = "";
-    switch(allowedAccountType)
-    {
-        case SEC_PLAYER:        secName = "Player";        break;
-        case SEC_MODERATOR:     secName = "Moderator";     break;
-        case SEC_GAMEMASTER:    secName = "Gamemaster";    break;
-        case SEC_ADMINISTRATOR: secName = "Administrator"; break;
-        default:                secName = "<unknown>";     break;
-    }
-
-    zprintf("Player limits: amount %u, min. security level %s.\r\n",pLimit,secName);
+	return true;
 }
 
@@ -1222,11 +302,7 @@
     ///- Display the list of available CLI functions then beep
     sLog.outString();
-    /// \todo Shoudn't we use here also the sLog singleton?
-    CliHelp(NULL,&UTF8ZPRINTF);
 
     if(sConfig.GetBoolDefault("BeepAtStart", true))
-    {
         printf("\a");                                       // \a = Alert
-    }
 
     // print this here the first time
@@ -1245,20 +321,31 @@
             break;
         #endif
-        char *command = fgets(commandbuf,sizeof(commandbuf),stdin);
-        if (command != NULL)
+        char *command_str = fgets(commandbuf,sizeof(commandbuf),stdin);
+        if (command_str != NULL)
         {
-            for(int x=0;command[x];x++)
-                if(command[x]=='\r'||command[x]=='\n')
+            for(int x=0;command_str[x];x++)
+                if(command_str[x]=='\r'||command_str[x]=='\n')
+				{
+					command_str[x]=0;
+					break;
+				}
+
+			if(!*command_str)
             {
-                command[x]=0;
-                break;
+                printf("TC>");
+                continue;
             }
-            //// \todo Shoudn't we use here also the sLog singleton?
-            ParseCommand(&UTF8ZPRINTF,command);
+
+            std::string command;
+            if(!consoleToUtf8(command_str,command))         // convert from console encoding to utf8
+            {
+                printf("TC>");
+                continue;
+            }
+
+            sWorld.QueueCliCommand(&utf8print,command.c_str());
         }
         else if (feof(stdin))
-        {
             World::m_stopEvent = true;
-        }
     }
 
Index: /trunk/src/trinitycore/RASocket.cpp
===================================================================
--- /trunk/src/trinitycore/RASocket.cpp (revision 102)
+++ /trunk/src/trinitycore/RASocket.cpp (revision 112)
@@ -45,5 +45,5 @@
 typedef int(* pPrintf)(const char*,...);
 
-void ParseCommand(pPrintf zprintf, char*command);
+void ParseCommand(CliCommandHolder::Print*, char*command);
 
 /// RASocket constructor
@@ -223,5 +223,5 @@
                 {
                     sLog.outRALog("Got '%s' cmd.\n",buff);
-                    ParseCommand(&RASocket::zprintf , buff);
+                    sWorld.QueueCliCommand(&RASocket::zprint , buff);
                 }
                 else
@@ -235,19 +235,22 @@
 
 /// Output function
-int RASocket::zprintf( const char * szText, ... )
-{
-    if( !szText ) return 0;
-    va_list ap;
-    va_start(ap, szText);
-    /// \todo Remove buffer length here. Can be >1024 (e.g. list of users)
-    char *megabuffer=new char[1024];
-    unsigned int sz=vsnprintf(megabuffer,1024,szText,ap);
+void RASocket::zprint( const char * szText )
+{
+    if( !szText )
+        return;
+
     #ifdef RA_CRYPT
+
+	char *megabuffer=strdup(szText);
+    unsigned int sz=strlen(megabuffer);
     Encrypt(megabuffer,sz);
+	send(r,megabuffer,sz,0);
+    delete [] megabuffer;
+    
+	#else
+
+    unsigned int sz=strlen(szText);
+    send(r,szText,sz,0);
+
     #endif
-
-    send(r,megabuffer,sz,0);
-    delete [] megabuffer;
-    va_end(ap);
-    return 0;
-}
+}
Index: /trunk/src/trinitycore/RASocket.h
===================================================================
--- /trunk/src/trinitycore/RASocket.h (revision 102)
+++ /trunk/src/trinitycore/RASocket.h (revision 112)
@@ -62,5 +62,5 @@
         }stage;
 
-        static int zprintf( const char * szText, ... );
+        static void zprint( const char * szText );
 };
 #endif
Index: /trunk/sql/updates/120_world.sql
===================================================================
--- /trunk/sql/updates/120_world.sql (revision 112)
+++ /trunk/sql/updates/120_world.sql (revision 112)
@@ -0,0 +1,162 @@
+-- Add/Edit/Move lang strings
+DELETE FROM `trinity_string` WHERE `entry` IN (25,52,54,55,56,171,401,413,438,593,594,595,596,597,598,599,614,615,636,637,638,809,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118);
+DELETE FROM `trinity_string` WHERE `entry` BETWEEN '667' AND '687';
+DELETE FROM `trinity_string` WHERE `entry` BETWEEN '711' AND '716';
+DELETE FROM `trinity_string` WHERE `entry` BETWEEN '730' AND '747';
+DELETE FROM `trinity_string` WHERE `entry` BETWEEN '5000' AND '5006';
+INSERT INTO trinity_string VALUES
+('25','Password not changed (unknown error)!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('52', 'Invaid item count (%u) for item %u', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('54','The new passwords do not match',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('55','Your password can\'t be longer than 16 characters (client limit), password not changed!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('56','Current Message of the day: \r\n%s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(171,'You are being teleported by server console command.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(401,'You change security level of account %s to %i.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(413,'Account not exist: %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(438,'Found items %u: %u ( inventory %u mail %u auction %u guild %u)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(593,'Currently Banned Accounts:',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(594,'|    Account    |   BanDate    |   UnbanDate  |  Banned By    |   Ban Reason  |',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(595,'Currently Banned IPs:',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(596,'|      IP       |   BanDate    |   UnbanDate  |  Banned By    |   Ban Reason  |',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(597,'Current gamemasters:',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(598,'|    Account    |  GM  |',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(599,'No gamemasters.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('614', 'The Alliance flag has been respawned!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('615', 'The Horde flag has been respawned!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('636', 'The Battle for Eye of the Storm begins in 1 minute.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('637', 'The Battle for Eye of the Storm begins in 30 seconds.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('638', 'The Battle for Eye of the Storm has begun!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('667', 'The Alliance has taken control of the Mage Tower!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('668', 'The Horde has taken control of the Mage Tower!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('669', 'The Alliance has taken control of the Draenei Ruins!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('670', 'The Horde has taken control of the Draenei Ruins!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('671', 'The Alliance has taken control of the Blood Elf Tower!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('672', 'The Horde has taken control of the Blood Elf Tower!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('673', 'The Alliance has taken control of the Fel Reaver Ruins!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('674', 'The Horde has taken control of the Fel Reaver Ruins!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('675', 'The Alliance has lost control of the Mage Tower!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('676', 'The Horde has lost control of the Mage Tower!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('677', 'The Alliance has lost control of the Draenei Ruins!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('678', 'The Horde has lost control of the Draenei Ruins!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('679', 'The Alliance has lost control of the Blood Elf Tower!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('680', 'The Horde has lost control of the Blood Elf Tower!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('681', 'The Alliance has lost control of the Fel Reaver Ruins!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('682', 'The Horde has lost control of the Fel Reaver Ruins!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('683', '$N has taken the flag!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('684', 'The Alliance has captured the flag!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('685', 'The Horde has captured the flag!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('686', 'The Flag has been dropped!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('687', 'The flag has been reset', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('711', 'Your group is too large for this battleground. Please regroup to join.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('712', 'Your group is too large for this arena. Please regroup to join.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('713', 'You must be level %u to join an arena team!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('714', '%s is not high enough level to join your team', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('715', 'You don\'t meet Battleground level requirements', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('716', 'Your arena team is full, %s cannot join it.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('730', 'Your group has members not in your arena team. Please regroup to join.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('731', 'Your group does not have enough players to join this match.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('732', 'The Gold Team wins!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('733', 'The Green Team wins!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('734', 'There aren\'t enough players in this battleground. It will end soon unless some more players join to balance the fight.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('735', 'Your group has an offline member. Please remove him before joining.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('736', 'Your group has players from the opposing faction. You can\'t join the battleground as a group.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('737', 'Your group has players from different battleground brakets. You can\'t join as group.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('738', 'Someone in your party is already in this battleground queue. (S)he must leave it before joining as group.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('739', 'Someone in your party is Deserter. You can\'t join as group.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('740', 'Someone in your party is already in three battleground queues. You cannot join as group.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('741', 'You cannot teleport to a battleground or arena map.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('742', 'You cannot summon players to a battleground or arena map.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('743', 'You must be in GM mode to teleport to a player in a battleground.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('744', 'You cannot teleport to a battleground from another battleground. Please leave the current battleground first.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('745', 'Arena testing turned %s', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('746','|cffff0000[Automatic]:|r', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('747','|cffffff00[|c1f40af20Announce by|r |cffff0000%s|cffffff00]:|r %s|r', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('809','Account for character %s not found',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('1000','Exiting daemon...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('1001','Account deleted: %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('1002','Account %s NOT deleted (probably sql file format was updated)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('1003','Account %s NOT deleted (unknown error)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('1004','Account created: %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('1005','Account name can\'t be longer than 16 characters (client limit), account not created!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1006,'Account with this name already exist!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1007,'Account %s NOT created (probably sql file format was updated)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1008,'Account %s NOT created (unknown error)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1009,'Player %s (Guid: %u) Account %s (Id: %u) deleted.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1010,'|    Account    |       Character      |       IP        | GM | TBC |',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1011,'|<Error>        | %20s |<Error>          |<Er>|<Err>|',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1100,'Account %s (Id: %u) have up to %u expansion allowed now.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1101,'Message of the day changed to:\r\n%s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1102,'Message sent to %s: %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1103,'%d - %s %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1104,'%d - %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1105,'%d - %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1106,'%d - %s %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1107,'%d - %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1108,'%d - %s %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1109,'%d - %s %s %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1110,'%d - %s X:%f Y:%f Z:%f MapId:%d',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1111,'%d - %s X:%f Y:%f Z:%f MapId:%d',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1112,'Failed to open file: %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1113,'Account %s (%u) have max amount allowed characters (client limit)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1114,'Dump file has broken data!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1115,'Invalid character name!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1116,'Invalid character guid!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1117,'Character guid %u in use!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1118,'%d - guild: %s (guid: %u) %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(5000,'You froze player %s.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(5001,'It might be amusing but no... you cant freeze yourself!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(5002,'Invalid input check the name of target.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(5003,'You unfroze player %s.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(5004,'There are no frozen players.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(5005,'Following players are frozen on the server:',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(5006,'- %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+
+
+-- cleanup command syntax
+DELETE FROM command WHERE name IN (
+  'gm ingame','gm online',
+  'ban','ban account','ban character','ban ip',
+  'baninfo','baninfo account','baninfo character','baninfo ip','pdump load',
+  'banlist','banlist account','banlist character','banlist ip','help','transport',
+  'unban','unban account','unban character','unban ip','list item','pdump write',
+  'acct','account','account create','account delete','account onlinelist',
+  'account set addon','account set gmlevel','account set password',
+  'chardelete','gm list','gm online','sendmessage','server corpses','server exit','server motd',
+  'server set loglevel','server set motd','security'
+
+);
+
+INSERT INTO command VALUES
+('gm ingame',0,'Syntax: .gm ingame\r\n\r\nDisplay a list of available in game Game Masters.'),
+('ban account',3,'Syntax is: ban account $Name $bantime $reason\r\nBan account kick player.\r\n$bantime: negative value leads to permban, otherwise use a timestring like \"4d20h3s\".'),
+('ban character',3,'Syntax is: ban character $Name $bantime $reason\r\nBan account and kick player.\r\n$bantime: negative value leads to permban, otherwise use a timestring like \"4d20h3s\".'),
+('ban ip',3,'Syntax is: ban ip $Ip $bantime $reason\r\nBan IP.\r\n$bantime: negative value leads to permban, otherwise use a timestring like \"4d20h3s\".'),
+('baninfo account',3,'Syntax is: baninfo account\r\nWatch full information about a specific ban.'),
+('baninfo character',3,'Syntax is: baninfo character\r\nWatch full information about a specific ban.'),
+('baninfo ip',3,'Syntax is: baninfo ip\r\nWatch full information about a specific ban.'),
+('banlist account',3,'Syntax is: banlist account [$Name]\r\nSearches the banlist for a account name pattern or show full list account bans.'),
+('banlist character',3,'Syntax is: banlist character $Name\r\nSearches the banlist for a character name pattern. Pattern required.'),
+('banlist ip',3,'Syntax is: banlist ip [$Ip]\r\nSearches the banlist for a IP pattern or show full list of IP bans.'),
+('unban account',3,'Syntax is: unban account $Name\r\nUnban accounts for account name pattern.'),
+('unban character',3,'Syntax is: unban character $Name\r\nUnban accounts for character name pattern.'),
+('unban ip',3,'Syntax is: unban ip $Ip\r\nUnban accounts for IP pattern.'),
+('pdump write',3,'Syntax is: pdump write $filename $playerNameOrGUID\r\nWrite character dump with name/guid $playerNameOrGUID to file $filename.'),
+('pdump load',3,'Syntax is: pdump load $filename $account [$newname] [$newguid]\r\nLoad character dump from dump file into character list of $account with saved or $newname, with saved (or first free) or $newguid guid.'),
+('list item',3,'Syntax: .list item #item_id [#max_count]\r\n\r\nOutput items with item id #item_id found in all character inventories, mails, auctions, and guild banks. Output item guids, item owner guid, owner account and owner name (guild name and guid in case guild bank). Will be output maximum #max_count items. If #max_count not provided use 10 as default value.'),
+('help',0,'Syntax: .help [$command]\r\n\r\nDisplay usage instructions for the given $command. If no $command provided show list available commands.'),
+('account',0,'Syntax: .account\r\n\r\nDisplay the access level of your account.'),
+('account create',4,'Syntax: .account create $account $password\r\n\r\nCreate account and set password to it.'),
+('account delete',4,'Syntax: .account delete $account\r\n\r\nDelete account with all characters.'),
+('account onlinelist',4,'Syntax: .account onlinelist\r\n\r\nShow list of online accounts.'),
+('account set addon',3,'Syntax: .account set addon [$account] #addon\r\n\r\nSet user (posible targeted) expansion addon level allowed. Addon values: 0 - normal, 1 - tbc, 2 - wotlk.'),
+('account set gmlevel',4,'Syntax: .account set gmlevel [$account] #level\r\n\r\nSet the security level for targeted player (can''t be used at self) or for account $name to a level of #level.\r\n\r\n#level may range from 0 to 3.'),
+('account set password',4,'Syntax: .account set password $account $password $password\r\n\r\nSet password for account.'),
+('chardelete',4,'Syntax: .chardelete $charactername\r\n\r\nDelete character.'),
+('gm list',3,'Syntax: .gm list\r\n\r\nDisplay a list of all Game Masters accounts and security levels.'),
+('gm online',0,'Syntax: .gm online\r\n\r\nDisplay a list of available Game Masters.'),
+('sendmessage',3,'Syntax: .sendmessage $playername $message\r\n\r\nSend screen message to player from ADMINISTRATOR.'),
+('server corpses',2,'Syntax: .server corpses\r\n\r\nTriggering corpses expire check in world.'),
+('server exit',4,'Syntax: .server exit\r\n\r\nTerminate Trinity NOW.'),
+('server motd',0,'Syntax: .server motd\r\n\r\nShow server Message of the day.'),
+('server set loglevel',4,'Syntax: .server set loglevel #level\r\n\r\nSet server log level (0 - errors only, 1 - basic, 2 - detail, 3 - debug).'),
+('server set motd',3,'Syntax: .server set motd $MOTD\r\n\r\nSet server Message of the day.');
