Index: code/branches/netp3/src/core/Game.cc
===================================================================
--- code/branches/netp3/src/core/Game.cc	(revision 2995)
+++ code/branches/netp3/src/core/Game.cc	(revision 2996)
@@ -168,5 +168,15 @@
             for (std::vector<GameState*>::const_iterator it = this->activeStates_.begin();
                 it != this->activeStates_.end(); ++it)
+            {
+                // Add tick time for most of the states
+                uint64_t timeBeforeTick;
+                if ((*it)->getCountTickTime())
+                    timeBeforeTick = this->gameClock_->getRealMicroseconds();
+                
                 (*it)->update(*this->gameClock_);
+
+                if ((*it)->getCountTickTime())
+                    this->addTickTime(this->gameClock_->getRealMicroseconds() - timeBeforeTick);
+            }
 
             // STATISTICS
Index: code/branches/netp3/src/core/Game.h
===================================================================
--- code/branches/netp3/src/core/Game.h	(revision 2995)
+++ code/branches/netp3/src/core/Game.h	(revision 2996)
@@ -43,6 +43,11 @@
 #include "OrxonoxClass.h"
 
-#define AddGameState(classname, name) \
-    static bool MACRO_CONCATENATE(bGameStateDummy_##classname, __LINE__) = orxonox::Game::addGameState(new classname(name))
+/**
+@def
+    Adds a new GameState to the Game. The second parameter is the name as string
+    and every following paramter is a constructor argument (which is usually non existent)
+*/
+#define AddGameState(classname, ...) \
+    static bool MACRO_CONCATENATE(bGameStateDummy_##classname, __LINE__) = orxonox::Game::addGameState(new classname(__VA_ARGS__))
 
 namespace orxonox
Index: code/branches/netp3/src/core/GameState.cc
===================================================================
--- code/branches/netp3/src/core/GameState.cc	(revision 2995)
+++ code/branches/netp3/src/core/GameState.cc	(revision 2996)
@@ -45,6 +45,7 @@
         Constructor only initialises variables and sets the name permanently.
     */
-    GameState::GameState(const std::string& name)
+    GameState::GameState(const std::string& name, bool countTickTime)
         : name_(name)
+        , bCountTickTime_(countTickTime)
         , parent_(0)
     {
Index: code/branches/netp3/src/core/GameState.h
===================================================================
--- code/branches/netp3/src/core/GameState.h	(revision 2995)
+++ code/branches/netp3/src/core/GameState.h	(revision 2996)
@@ -78,10 +78,12 @@
 
     public:
-        GameState(const std::string& name);
+        GameState(const std::string& name, bool countTicktime = true);
         virtual ~GameState();
 
         const std::string& getName() const { return name_; }
-        State getActivity() const    { return this->activity_; }
-        GameState* getParent() const       { return this->parent_; }
+        State getActivity()          const { return this->activity_; }
+        GameState* getParent()       const { return this->parent_; }
+
+        bool getCountTickTime()      const { return this->bCountTickTime_; }
 
         void addChild(GameState* state);
@@ -102,4 +104,5 @@
         const std::string                        name_;
         State                                    activity_;
+        const bool                               bCountTickTime_;
         GameState*                               parent_;
         std::map<std::string, GameState*>        children_;
Index: code/branches/netp3/src/orxonox/gamestates/GSGraphics.cc
===================================================================
--- code/branches/netp3/src/orxonox/gamestates/GSGraphics.cc	(revision 2995)
+++ code/branches/netp3/src/orxonox/gamestates/GSGraphics.cc	(revision 2996)
@@ -57,8 +57,8 @@
 namespace orxonox
 {
-    AddGameState(GSGraphics, "graphics");
-
-    GSGraphics::GSGraphics(const std::string& name)
-        : GameState(name)
+    AddGameState(GSGraphics, "graphics", false);
+
+    GSGraphics::GSGraphics(const std::string& name, bool countTickTime)
+        : GameState(name, countTickTime)
         , inputManager_(0)
         , console_(0)
@@ -213,7 +213,6 @@
         uint64_t timeBeforeTick = time.getRealMicroseconds();
 
-        this->inputManager_->update(time);        // tick console
+        this->inputManager_->update(time);
         this->console_->update(time);
-        this->guiManager_->update(time);
 
         uint64_t timeAfterTick = time.getRealMicroseconds();
@@ -222,4 +221,6 @@
         Game::getInstance().addTickTime(timeAfterTick - timeBeforeTick);
 
+        // Process gui events
+        this->guiManager_->update(time);
         // Render
         this->graphicsManager_->update(time);
Index: code/branches/netp3/src/orxonox/gamestates/GSGraphics.h
===================================================================
--- code/branches/netp3/src/orxonox/gamestates/GSGraphics.h	(revision 2995)
+++ code/branches/netp3/src/orxonox/gamestates/GSGraphics.h	(revision 2996)
@@ -51,5 +51,5 @@
     {
     public:
-        GSGraphics(const std::string& name);
+        GSGraphics(const std::string& name, bool countTickTime);
         ~GSGraphics();
         void setConfigValues();
Index: code/branches/netp3/src/orxonox/gamestates/GSRoot.cc
===================================================================
--- code/branches/netp3/src/orxonox/gamestates/GSRoot.cc	(revision 2995)
+++ code/branches/netp3/src/orxonox/gamestates/GSRoot.cc	(revision 2996)
@@ -43,5 +43,5 @@
 namespace orxonox
 {
-    AddGameState(GSRoot, "root");
+    AddGameState(GSRoot, "root", false);
     SetCommandLineSwitch(console);
     // Shortcuts for easy direct loading
@@ -51,6 +51,6 @@
     SetCommandLineSwitch(standalone);
 
-    GSRoot::GSRoot(const std::string& name)
-        : GameState(name)
+    GSRoot::GSRoot(const std::string& name, bool countTickTime)
+        : GameState(name, countTickTime)
         , timeFactor_(1.0f)
         , bPaused_(false)
Index: code/branches/netp3/src/orxonox/gamestates/GSRoot.h
===================================================================
--- code/branches/netp3/src/orxonox/gamestates/GSRoot.h	(revision 2995)
+++ code/branches/netp3/src/orxonox/gamestates/GSRoot.h	(revision 2996)
@@ -39,5 +39,5 @@
     {
     public:
-        GSRoot(const std::string& name);
+        GSRoot(const std::string& name, bool countTickTime);
         ~GSRoot();
 
