Index: trunk/src/game/Object.cpp
===================================================================
--- trunk/src/game/Object.cpp (revision 37)
+++ trunk/src/game/Object.cpp (revision 42)
@@ -265,4 +265,6 @@
             {
                 flags2 = ((Unit*)this)->GetUnitMovementFlags();
+                flags2 &= ~MOVEMENTFLAG_ONTRANSPORT;
+                flags2 &= ~MOVEMENTFLAG_SPLINE2;
             }
             break;
Index: trunk/src/game/Chat.h
===================================================================
--- trunk/src/game/Chat.h (revision 40)
+++ trunk/src/game/Chat.h (revision 42)
@@ -240,4 +240,5 @@
         bool HandleMoveObjectCommand(const char* args);
         bool HandleTurnObjectCommand(const char* args);
+        bool HandleObjectStateCommand(const char* args);
         bool HandlePInfoCommand(const char* args);
         bool HandlePLimitCommand(const char* args);
@@ -314,4 +315,8 @@
         bool HandleAddItemCommand(const char* args);
         bool HandleAddItemSetCommand(const char* args);
+
+        bool HandleGroupLeaderCommand(const char* args);
+        bool HandleGroupDisbandCommand(const char* args);
+        bool HandleGroupRemoveCommand(const char* args);
 
         bool HandleGuildCreateCommand(const char* args);
@@ -394,4 +399,5 @@
         uint32    extractSpellIdFromLink(char* text);
         GameTele const* extractGameTeleFromLink(char* text);
+        bool GetPlayerGroupAndGUIDByName(const char* cname, Player* &plr, Group* &group, uint64 &guid, bool offline = false);
 
         GameObject* GetObjectGlobalyWithGuidOrNearWithDbGuid(uint32 lowguid,uint32 entry);
Index: trunk/src/game/Level1.cpp
===================================================================
--- trunk/src/game/Level1.cpp (revision 40)
+++ trunk/src/game/Level1.cpp (revision 42)
@@ -123,5 +123,5 @@
     if(!*args)
         return false;
-    char str[1024];
+    //char str[1024];
     //sprintf(str, GetMangosString(LANG_ANNOUNCE_COLOR), m_session->GetPlayer()->GetName(), args);
     sWorld.SendWorldText(LANG_ANNOUNCE_COLOR, m_session->GetPlayer()->GetName(), args);
Index: trunk/src/game/Level3.cpp
===================================================================
--- trunk/src/game/Level3.cpp (revision 40)
+++ trunk/src/game/Level3.cpp (revision 42)
@@ -2176,4 +2176,42 @@
 }
 
+bool ChatHandler::HandleObjectStateCommand(const char* args)
+{
+    // number or [name] Shift-click form |color|Hgameobject:go_id|h[name]|h|r
+    char* cId = extractKeyFromLink((char*)args, "Hgameobject");
+    if(!cId)
+        return false;
+
+    uint32 lowguid = atoi(cId);
+    if(!lowguid)
+        return false;
+
+    GameObject* gobj = NULL;
+
+    if(GameObjectData const* goData = objmgr.GetGOData(lowguid))
+        gobj = GetObjectGlobalyWithGuidOrNearWithDbGuid(lowguid, goData->id);
+
+    if(!gobj)
+    {
+        PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, lowguid);
+        SetSentErrorMessage(true);
+        return false;
+    }
+
+    char* cstate = strtok(NULL, " ");
+    if(!cstate)
+        return false;
+
+    int32 state = atoi(cstate);
+    if(state < 0)
+        gobj->SendObjectDeSpawnAnim(gobj->GetGUID());
+    else
+        gobj->SetGoState(state);
+
+    return true;
+
+    return true;
+}
+
 bool ChatHandler::HandleListCreatureCommand(const char* args)
 {
@@ -5473,2 +5511,44 @@
     return true;
 }
+
+bool ChatHandler::HandleGroupLeaderCommand(const char* args)
+{
+    Player* plr  = NULL;
+    Group* group = NULL;
+    uint64 guid  = 0;
+    char* cname  = strtok((char*)args, " ");
+
+    if(GetPlayerGroupAndGUIDByName(cname, plr, group, guid))
+        if(group && group->GetLeaderGUID() != guid)
+            group->ChangeLeader(guid);
+
+    return true;
+}
+
+bool ChatHandler::HandleGroupDisbandCommand(const char* args)
+{
+    Player* plr  = NULL;
+    Group* group = NULL;
+    uint64 guid  = 0;
+    char* cname  = strtok((char*)args, " ");
+
+    if(GetPlayerGroupAndGUIDByName(cname, plr, group, guid))
+        if(group)
+            group->Disband();
+
+    return true;
+}
+
+bool ChatHandler::HandleGroupRemoveCommand(const char* args)
+{
+    Player* plr  = NULL;
+    Group* group = NULL;
+    uint64 guid  = 0;
+    char* cname  = strtok((char*)args, " ");
+
+    if(GetPlayerGroupAndGUIDByName(cname, plr, group, guid, true))
+        if(group)
+            group->RemoveMember(guid, 0);
+
+    return true;
+}
Index: trunk/src/game/Chat.cpp
===================================================================
--- trunk/src/game/Chat.cpp (revision 40)
+++ trunk/src/game/Chat.cpp (revision 42)
@@ -215,4 +215,12 @@
     };
 
+    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 }
+    };
+
     static ChatCommand lookupPlayerCommandTable[] =
     {
@@ -341,4 +349,5 @@
         { "move",           SEC_GAMEMASTER,     &ChatHandler::HandleMoveObjectCommand,          "", NULL },
         { "near",           SEC_ADMINISTRATOR,  &ChatHandler::HandleNearObjectCommand,          "", NULL },
+        { "state",          SEC_ADMINISTRATOR,  &ChatHandler::HandleObjectStateCommand,         "", NULL },
         { NULL,             0,                  NULL,                                           "", NULL }
     };
@@ -389,4 +398,5 @@
         { "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 },
@@ -1085,2 +1095,46 @@
     return objmgr.GetGameTele(cId);
 }
+
+bool ChatHandler::GetPlayerGroupAndGUIDByName(const char* cname, Player* &plr, Group* &group, uint64 &guid, bool offline)
+{
+    plr  = NULL;
+    guid = 0;
+
+    if(cname)
+    {
+        std::string name = cname;
+        if(!name.empty())
+        {
+            if(!normalizePlayerName(name))
+            {
+                PSendSysMessage(LANG_PLAYER_NOT_FOUND);
+                SetSentErrorMessage(true);
+                return false;
+            }
+
+            plr = objmgr.GetPlayer(name.c_str());
+            if(offline)
+                guid = objmgr.GetPlayerGUIDByName(name.c_str());
+        }
+    }
+
+    if(plr)
+    {
+        group = plr->GetGroup();
+        if(!guid || !offline)
+            guid = plr->GetGUID();
+    }
+    else
+    {
+        if(getSelectedPlayer())
+            plr = getSelectedPlayer();
+        else
+            plr = m_session->GetPlayer();
+
+        if(!guid || !offline)
+            guid  = plr->GetGUID();
+        group = plr->GetGroup();
+    }
+
+    return true;
+}
Index: trunk/src/game/World.cpp
===================================================================
--- trunk/src/game/World.cpp (revision 41)
+++ trunk/src/game/World.cpp (revision 42)
@@ -2427,5 +2427,5 @@
 
         SendServerMessage(msgid,str.c_str(),player);
-        DEBUG_LOG("Server is %s in %s",(m_ShutdownMask & SHUTDOWN_MASK_RESTART ? "restart" : "shuttingdown"),str.c_str());
+        outstring_log("Server will %s in %s", (m_ShutdownMask & SHUTDOWN_MASK_RESTART ? "restart" : "shutdown"), str.c_str());
     }
 }
