Index: /code/branches/ggz/cmake/BuildConfigGCC.cmake
===================================================================
--- /code/branches/ggz/cmake/BuildConfigGCC.cmake	(revision 2996)
+++ /code/branches/ggz/cmake/BuildConfigGCC.cmake	(revision 2997)
@@ -64,4 +64,5 @@
 
 # Increase warning level if requested
+SET(EXTRA_COMPILER_WARNINGS TRUE)
 IF(EXTRA_COMPILER_WARNINGS)
   ADD_COMPILER_FLAGS("-Wall -Wextra -Wno-unused-parameter" CACHE)
Index: /code/branches/ggz/src/orxonox/GGZClient.cc
===================================================================
--- /code/branches/ggz/src/orxonox/GGZClient.cc	(revision 2996)
+++ /code/branches/ggz/src/orxonox/GGZClient.cc	(revision 2997)
@@ -8,7 +8,12 @@
 
     GGZClient::GGZClient()
+        : ggzSocket(io), gameSocket(io)
     {
         assert(singletonRef_s == 0);
         singletonRef_s = this;
+
+        boost::asio::ip::tcp::socket::non_blocking_io non_blocking_io(true);
+        ggzSocket.io_control(non_blocking_io);
+        gameSocket.io_control(non_blocking_io);
 
         active = ggzmod_is_ggz_mode();
@@ -34,4 +39,13 @@
     }
 
+    void GGZClient::tick(const float /*dt*/)
+    {
+        boost::system::error_code ec;
+        io.poll(ec);
+        if (ec) {
+            /* TODO: Error */
+        }
+    }
+
     void GGZClient::initGGZ()
     {
@@ -42,9 +56,11 @@
             /* TODO: Error */
         }
-        int ggzSocket = ggzmod_get_fd(ggzmod);
-        if (ggzSocket < 0) {
+        int fd = ggzmod_get_fd(ggzmod);
+        if (fd < 0) {
             /* TODO: Error */
         }
-        sockets.add(ggzSocket, &orxonox::GGZClient::handleGGZ);
+        /* TODO: Error */
+        ggzSocket.assign(boost::asio::ip::tcp::v4(), fd);
+        ggzSocket.async_read_some(boost::asio::null_buffers(), handleGGZ);
     }
 
@@ -56,11 +72,11 @@
 
     /* Got data from game server */
-    void handleGame(int fd)
+    void handleGame(const boost::system::error_code& /*e*/)
     {
-        /* TODO: read from fd */
+        /* TODO: read from gameSocket */
     }
 
     /* Got data from GGZ */
-    void GGZClient::handleGGZ(int fd)
+    void GGZClient::handleGGZ(const boost::system::error_code& /*e*/)
     {
         ggzmod_dispatch(getInstance().ggzmod);
@@ -72,6 +88,6 @@
     {
         ggzmod_set_state(ggzmod, GGZMOD_STATE_PLAYING);
-        int gameSocket = *(int*)data;
-        getInstance().sockets.add(gameSocket, &orxonox::GGZClient::handleGGZ);
+        gameSocket.assign(boost::asio::ip::tcp::v4(), *(int*)data);
+        gameSocket.async_read_some(boost::asio::null_buffers(), handleGame);
     }
 }
Index: /code/branches/ggz/src/orxonox/GGZClient.h
===================================================================
--- /code/branches/ggz/src/orxonox/GGZClient.h	(revision 2996)
+++ /code/branches/ggz/src/orxonox/GGZClient.h	(revision 2997)
@@ -3,11 +3,12 @@
 
 #include "OrxonoxPrereqs.h"
-#include "objects/FDWatcher.h"
+#include "objects/Tickable.h"
 
 #include <ggzmod.h>
+#include <boost/asio.hpp>
 
 namespace orxonox
 {
-    class _OrxonoxExport GGZClient
+    class _OrxonoxExport GGZClient : public Tickable
     {
         public:
@@ -16,4 +17,5 @@
 
             static GGZClient& getInstance();
+            virtual void tick(const float dt);
 
         private:
@@ -21,11 +23,13 @@
 
             bool active;
-            GGZMod *ggzmod;
-            FDWatcher sockets;
+            GGZMod * ggzmod;
+            boost::asio::io_service io;
+            boost::asio::ip::tcp::socket ggzSocket;
+            boost::asio::ip::tcp::socket gameSocket;
 
             void initGGZ();
             void deinitGGZ();
-            static void handleGame(int fd);
-            static void handleGGZ(int fd);
+            void handleGame(const boost::system::error_code& e);
+            void handleGGZ(const boost::system::error_code& e);
             static void handleGGZModServer(GGZMod * ggzmod, GGZModEvent e,
                     const void *data);
Index: /code/branches/ggz/src/orxonox/objects/CMakeLists.txt
===================================================================
--- /code/branches/ggz/src/orxonox/objects/CMakeLists.txt	(revision 2996)
+++ /code/branches/ggz/src/orxonox/objects/CMakeLists.txt	(revision 2997)
@@ -3,5 +3,4 @@
   EventDispatcher.cc
   EventTarget.cc
-  FDWatcher.cc
   GlobalShader.cc
   Level.cc
Index: de/branches/ggz/src/orxonox/objects/FDWatcher.cc
===================================================================
--- /code/branches/ggz/src/orxonox/objects/FDWatcher.cc	(revision 2996)
+++ 	(revision )
@@ -1,67 +1,0 @@
-#include "FDWatcher.h"
-
-namespace orxonox
-{
-    FDWatcher::FDWatcher()
-    {
-        pollfds = 0;
-        npollfds = 0;
-    }
-
-    FDWatcher::~FDWatcher()
-    {
-        if (pollfds) {
-            delete [] pollfds;
-        }
-    }
-
-    void FDWatcher::tick(const float dt)
-    {
-        int ret = poll(pollfds, npollfds, 0);
-        if (ret < 0) {
-            // TODO error
-        }
-        for (int i=0; ret>0; i++, ret--) {
-            if (pollfds[i].revents & POLLIN) {
-                (*watches[pollfds[i].fd])(pollfds[i].fd);
-            }
-            if (pollfds[i].revents & !POLLIN) {
-                // TODO error
-            }
-        }
-    }
-
-    void FDWatcher::add(const int fd, intfunction cb)
-    {
-        watches[fd] = cb;
-        npollfds++;
-        rebuild();
-    }
-
-    void FDWatcher::remove(const int fd)
-    {
-        watches.erase(fd);
-        npollfds--;
-        rebuild();
-    }
-
-    void FDWatcher::rebuild()
-    {
-        if (pollfds) {
-            delete [] pollfds;
-        }
-        if (npollfds) {
-            pollfds = new struct pollfd[npollfds];
-        }
-        else {
-            pollfds = 0;
-        }
-        int i=0;
-        for (std::map<int, intfunction>::iterator it=watches.begin();
-                it!=watches.end(); it++, i++)
-        {
-            pollfds[i].fd = it->first;
-            pollfds[i].events = POLLIN;
-        }
-    }
-}
Index: de/branches/ggz/src/orxonox/objects/FDWatcher.h
===================================================================
--- /code/branches/ggz/src/orxonox/objects/FDWatcher.h	(revision 2996)
+++ 	(revision )
@@ -1,33 +1,0 @@
-#ifndef _FDWATCHER_H__
-#define _FDWATCHER_H__
-
-#include "objects/Tickable.h"
-
-#include <map>
-#include <poll.h>
-
-namespace orxonox
-{
-    class _OrxonoxExport FDWatcher : public Tickable
-    {
-        typedef void (*intfunction) (int fd);
-
-        public:
-            FDWatcher();
-            ~FDWatcher();
-
-            virtual void tick(const float dt);
-
-            void add(const int fd, intfunction cb);
-            void remove(const int fd);
-
-        private:
-            std::map<int, intfunction> watches;
-            pollfd * pollfds;
-            int npollfds;
-
-            void rebuild();
-    };
-}
-
-#endif /* _FDWATCHER_H__ */
