diff --git a/src/network/client_network_manager.cpp b/src/network/client_network_manager.cpp
index 952a05773..e4672a112 100644
--- a/src/network/client_network_manager.cpp
+++ b/src/network/client_network_manager.cpp
@@ -55,6 +55,12 @@ void* waitInput(void* data)
         {
             ProtocolManager::getInstance()->requestStart(new ConnectToServer(n));
         }
+        else 
+        {
+            NetworkString msg("\0\0");
+            msg += str;
+            NetworkManager::getInstance()->getPeers()[0]->sendPacket(msg);
+        }
     }
 
     exit(0);
diff --git a/src/network/protocol_manager.cpp b/src/network/protocol_manager.cpp
index e61a61146..2c3eb3372 100644
--- a/src/network/protocol_manager.cpp
+++ b/src/network/protocol_manager.cpp
@@ -244,8 +244,7 @@ void ProtocolManager::update()
         if (event->type == EVENT_TYPE_MESSAGE)
         {
             if (event->data.size() > 0)
-                searchedProtocol = (PROTOCOL_TYPE)(event->data.getUInt8(0));
-            event->removeFront(1); // remove the first byte which indicates the protocol
+                searchedProtocol = (PROTOCOL_TYPE)(event->data.getAndRemoveUInt8());
         }
         if (event->type == EVENT_TYPE_CONNECTED)
         {
@@ -256,6 +255,10 @@ void ProtocolManager::update()
             if (m_protocols[i].protocol->getProtocolType() == searchedProtocol || event->type == EVENT_TYPE_DISCONNECTED) // pass data to protocols even when paused
                 m_protocols[i].protocol->notifyEvent(event);
         }
+        if (searchedProtocol == PROTOCOL_NONE) // no protocol was aimed, show the msg to debug
+        {
+            Log::debug("ProtocolManager", "Message is \"%s\"", event->data.c_str());
+        }
         delete event;
     }
     
diff --git a/src/network/server_network_manager.cpp b/src/network/server_network_manager.cpp
index c4c82b9a3..23e911584 100644
--- a/src/network/server_network_manager.cpp
+++ b/src/network/server_network_manager.cpp
@@ -46,6 +46,10 @@ void* waitInput2(void* data)
         {
             stop = true;
         }
+        else if (str == "kickall")
+        {
+            ServerNetworkManager::getInstance()->kickAllPlayers();
+        }
     }
     
     uint32_t id = ProtocolManager::getInstance()->requestStart(new StopServer());
@@ -89,9 +93,12 @@ void ServerNetworkManager::run()
     NetworkManager::run();
 }
 
-void ServerNetworkManager::start()
+void ServerNetworkManager::kickAllPlayers()
 {
-
+    for (int i = 0; i < m_peers.size(); i++)
+    {
+        m_peers[i]->disconnect();
+    }
 }
 
 void ServerNetworkManager::sendPacket(const NetworkString& data)
diff --git a/src/network/server_network_manager.hpp b/src/network/server_network_manager.hpp
index e06b969b9..aadc8c7e5 100644
--- a/src/network/server_network_manager.hpp
+++ b/src/network/server_network_manager.hpp
@@ -33,7 +33,7 @@ class ServerNetworkManager : public NetworkManager
         
         virtual void run();
         
-        void start();
+        void kickAllPlayers();
         
         virtual void sendPacket(const NetworkString& data);