Index: /code/branches/presentation2/src/libraries/core/Core.cc
===================================================================
--- /code/branches/presentation2/src/libraries/core/Core.cc	(revision 6182)
+++ /code/branches/presentation2/src/libraries/core/Core.cc	(revision 6183)
@@ -316,27 +316,31 @@
     void Core::preUpdate(const Clock& time)
     {
-        // singletons from other libraries
-        ScopedSingletonManager::update<ScopeID::Root>(time);
+        // Update singletons before general ticking
+        ScopedSingletonManager::preUpdate<ScopeID::Root>(time);
         if (this->bGraphicsLoaded_)
         {
-            // process input events
-            this->inputManager_->update(time);
-            // process gui events
-            this->guiManager_->update(time);
-            // graphics singletons from other libraries
-            ScopedSingletonManager::update<ScopeID::Graphics>(time);
-        }
-        // process console text
-        this->ioConsole_->update(time);
-        // process thread commands
-        this->tclThreadManager_->update(time);
+            // Process input events
+            this->inputManager_->preUpdate(time);
+            // Update GUI
+            this->guiManager_->preUpdate(time);
+            // Update singletons before general ticking
+            ScopedSingletonManager::preUpdate<ScopeID::Graphics>(time);
+        }
+        // Process console events and status line
+        this->ioConsole_->preUpdate(time);
+        // Process thread commands
+        this->tclThreadManager_->preUpdate(time);
     }
 
     void Core::postUpdate(const Clock& time)
     {
+        // Update singletons just before rendering
+        ScopedSingletonManager::postUpdate<ScopeID::Root>(time);
         if (this->bGraphicsLoaded_)
         {
+            // Update singletons just before rendering
+            ScopedSingletonManager::postUpdate<ScopeID::Graphics>(time);
             // Render (doesn't throw)
-            this->graphicsManager_->update(time);
+            this->graphicsManager_->postUpdate(time);
         }
     }
Index: /code/branches/presentation2/src/libraries/core/GUIManager.cc
===================================================================
--- /code/branches/presentation2/src/libraries/core/GUIManager.cc	(revision 6182)
+++ /code/branches/presentation2/src/libraries/core/GUIManager.cc	(revision 6183)
@@ -166,5 +166,5 @@
         This time value is then used to provide a fluent animation of the GUI.
     */
-    void GUIManager::update(const Clock& time)
+    void GUIManager::preUpdate(const Clock& time)
     {
         assert(guiSystem_);
Index: /code/branches/presentation2/src/libraries/core/GUIManager.h
===================================================================
--- /code/branches/presentation2/src/libraries/core/GUIManager.h	(revision 6182)
+++ /code/branches/presentation2/src/libraries/core/GUIManager.h	(revision 6183)
@@ -66,5 +66,5 @@
         ~GUIManager();
 
-        void update(const Clock& time); 
+        void preUpdate(const Clock& time); 
 
         static void showGUI(const std::string& name, bool hidePrevious=false, bool showCursor=true);
Index: /code/branches/presentation2/src/libraries/core/GraphicsManager.cc
===================================================================
--- /code/branches/presentation2/src/libraries/core/GraphicsManager.cc	(revision 6182)
+++ /code/branches/presentation2/src/libraries/core/GraphicsManager.cc	(revision 6183)
@@ -341,5 +341,5 @@
         need the time. So we shouldn't run into problems.
     */
-    void GraphicsManager::update(const Clock& time)
+    void GraphicsManager::postUpdate(const Clock& time)
     {
         Ogre::FrameEvent evt;
Index: /code/branches/presentation2/src/libraries/core/GraphicsManager.h
===================================================================
--- /code/branches/presentation2/src/libraries/core/GraphicsManager.h	(revision 6182)
+++ /code/branches/presentation2/src/libraries/core/GraphicsManager.h	(revision 6183)
@@ -63,5 +63,5 @@
         void setConfigValues();
 
-        void update(const Clock& time);
+        void postUpdate(const Clock& time);
 
         Ogre::Viewport* getViewport()         { return this->viewport_; }
Index: /code/branches/presentation2/src/libraries/core/IOConsole.cc
===================================================================
--- /code/branches/presentation2/src/libraries/core/IOConsole.cc	(revision 6182)
+++ /code/branches/presentation2/src/libraries/core/IOConsole.cc	(revision 6183)
@@ -116,5 +116,5 @@
 
         // Make sure we make way for the status lines
-        this->update(Game::getInstance().getGameClock());
+        this->preUpdate(Game::getInstance().getGameClock());
     }
 
@@ -122,5 +122,5 @@
     {
         // Empty all buffers
-        this->update(Game::getInstance().getGameClock());
+        this->preUpdate(Game::getInstance().getGameClock());
         // Erase input and status lines
         this->cout_ << "\033[1G\033[J";
@@ -139,5 +139,5 @@
     }
 
-    void IOConsole::update(const Clock& time)
+    void IOConsole::preUpdate(const Clock& time)
     {
         unsigned char c;
@@ -495,5 +495,5 @@
         this->cursorChanged();
         this->lastRefreshTime_ = Game::getInstance().getGameClock().getRealMicroseconds();
-        this->update(Game::getInstance().getGameClock());
+        this->preUpdate(Game::getInstance().getGameClock());
 
         this->shell_->registerListener(this);
@@ -505,5 +505,5 @@
         this->shell_->unregisterListener(this);
         // Empty all buffers
-        this->update(Game::getInstance().getGameClock());
+        this->preUpdate(Game::getInstance().getGameClock());
 
         // Erase input and status lines
@@ -523,5 +523,5 @@
 
     //! Processes the pending input key strokes, refreshes the status lines and handles std::cout (redirected)
-    void IOConsole::update(const Clock& time)
+    void IOConsole::preUpdate(const Clock& time)
     {
         // Process input
Index: /code/branches/presentation2/src/libraries/core/IOConsole.h
===================================================================
--- /code/branches/presentation2/src/libraries/core/IOConsole.h	(revision 6182)
+++ /code/branches/presentation2/src/libraries/core/IOConsole.h	(revision 6183)
@@ -57,5 +57,5 @@
         ~IOConsole();
 
-        void update(const Clock& time);
+        void preUpdate(const Clock& time);
 
     private:
Index: /code/branches/presentation2/src/libraries/core/ScopedSingletonManager.h
===================================================================
--- /code/branches/presentation2/src/libraries/core/ScopedSingletonManager.h	(revision 6182)
+++ /code/branches/presentation2/src/libraries/core/ScopedSingletonManager.h	(revision 6183)
@@ -55,11 +55,19 @@
 
             template<ScopeID::Value scope>
-            static void update(const Clock& time)
+            static void preUpdate(const Clock& time)
             {
                 assert(Scope<scope>::isActive());
                 for (ManagerMultiMap::iterator it = getManagersByScope().lower_bound(scope); it != getManagersByScope().upper_bound(scope); ++it)
-                    it->second->update(time);
+                    it->second->preUpdate(time);
             }
-            virtual void update(const Clock& time) = 0;
+            virtual void preUpdate(const Clock& time) = 0;
+            template<ScopeID::Value scope>
+            static void postUpdate(const Clock& time)
+            {
+                assert(Scope<scope>::isActive());
+                for (ManagerMultiMap::iterator it = getManagersByScope().lower_bound(scope); it != getManagersByScope().upper_bound(scope); ++it)
+                    it->second->postUpdate(time);
+            }
+            virtual void postUpdate(const Clock& time) = 0;
 
             static std::map<std::string, ScopedSingletonManager*>& getManagers();
@@ -113,9 +121,17 @@
 
         //! Called every frame by the ScopedSingletonManager
-        void update(const Clock& time)
-        {
-            assert(Scope<scope>::isActive());
-            // assuming T inherits Singleton<T>
-            singletonPtr_->updateSingleton(time);
+        void preUpdate(const Clock& time)
+        {
+            assert(Scope<scope>::isActive());
+            // assuming T inherits Singleton<T>
+            singletonPtr_->preUpdateSingleton(time);
+        }
+
+        //! Called every frame by the ScopedSingletonManager
+        void postUpdate(const Clock& time)
+        {
+            assert(Scope<scope>::isActive());
+            // assuming T inherits Singleton<T>
+            singletonPtr_->postUpdateSingleton(time);
         }
 
@@ -170,10 +186,19 @@
 
         //! Called every frame by the ScopedSingletonManager
-        void update(const Clock& time)
+        void preUpdate(const Clock& time)
         {
             assert(Scope<scope>::isActive());
             // assuming T inherits Singleton<T>
             if (singletonPtr_ != NULL)
-                singletonPtr_->updateSingleton(time);
+                singletonPtr_->preUpdateSingleton(time);
+        }
+
+        //! Called every frame by the ScopedSingletonManager
+        void postUpdate(const Clock& time)
+        {
+            assert(Scope<scope>::isActive());
+            // assuming T inherits Singleton<T>
+            if (singletonPtr_ != NULL)
+                singletonPtr_->postUpdateSingleton(time);
         }
 
Index: /code/branches/presentation2/src/libraries/core/TclThreadManager.cc
===================================================================
--- /code/branches/presentation2/src/libraries/core/TclThreadManager.cc	(revision 6182)
+++ /code/branches/presentation2/src/libraries/core/TclThreadManager.cc	(revision 6183)
@@ -122,5 +122,5 @@
         @brief The "main loop" of the TclThreadManager. Creates new threads if needed and handles queries and queued commands for the main interpreter.
     */
-    void TclThreadManager::update(const Clock& time)
+    void TclThreadManager::preUpdate(const Clock& time)
     {
         // Get the bundle of the main interpreter (0)
Index: /code/branches/presentation2/src/libraries/core/TclThreadManager.h
===================================================================
--- /code/branches/presentation2/src/libraries/core/TclThreadManager.h	(revision 6182)
+++ /code/branches/presentation2/src/libraries/core/TclThreadManager.h	(revision 6183)
@@ -66,5 +66,5 @@
             static void debug(const std::string& error);
 
-            void update(const Clock& time);
+            void preUpdate(const Clock& time);
 
             std::list<unsigned int> getThreadList() const;
Index: /code/branches/presentation2/src/libraries/core/input/InputManager.cc
===================================================================
--- /code/branches/presentation2/src/libraries/core/input/InputManager.cc	(revision 6182)
+++ /code/branches/presentation2/src/libraries/core/input/InputManager.cc	(revision 6183)
@@ -366,5 +366,5 @@
     // ############################################################
 
-    void InputManager::update(const Clock& time)
+    void InputManager::preUpdate(const Clock& time)
     {
         if (internalState_ & Bad)
@@ -466,5 +466,5 @@
     @brief
         Updates the currently active states (according to activeStates_) for each device.
-        Also, a list of all active states (no duplicates!) is compiled for the general update().
+        Also, a list of all active states (no duplicates!) is compiled for the general preUpdate().
     */
     void InputManager::updateActiveStates()
Index: /code/branches/presentation2/src/libraries/core/input/InputManager.h
===================================================================
--- /code/branches/presentation2/src/libraries/core/input/InputManager.h	(revision 6182)
+++ /code/branches/presentation2/src/libraries/core/input/InputManager.h	(revision 6183)
@@ -99,5 +99,5 @@
             was submitted while updating, the request will be postponed until the next update call.
         */
-        void update(const Clock& time);
+        void preUpdate(const Clock& time);
         //! Clears all input device buffers. This usually only includes the pressed button list.
         void clearBuffers();
@@ -108,5 +108,5 @@
             Reloads all the input devices. Use this method to initialise new joy sticks.
         @note
-            Only reloads immediately if the call stack doesn't include the update() method.
+            Only reloads immediately if the call stack doesn't include the preUpdate() method.
         */
         void reload();
@@ -157,5 +157,5 @@
         @remarks
             - You can't remove the internal states "empty", "calibrator" and "detector".
-            - The removal process is being postponed if InputManager::update() is currently running.
+            - The removal process is being postponed if InputManager::preUpdate() is currently running.
         */
         bool destroyState(const std::string& name);
Index: /code/branches/presentation2/src/libraries/util/Singleton.h
===================================================================
--- /code/branches/presentation2/src/libraries/util/Singleton.h	(revision 6182)
+++ /code/branches/presentation2/src/libraries/util/Singleton.h	(revision 6183)
@@ -56,7 +56,11 @@
 
         //! Update method called by ClassSingletonManager (if used)
-        void updateSingleton(const Clock& time) { static_cast<T*>(T::singletonPtr_s)->update(time); }
+        void preUpdateSingleton(const Clock& time) { static_cast<T*>(T::singletonPtr_s)->preUpdate(time); }
         //! Empty update method for the static polymorphism
-        void update(const Clock& time) { }
+        void preUpdate(const Clock& time) { }
+        //! Update method called by ClassSingletonManager (if used)
+        void postUpdateSingleton(const Clock& time) { static_cast<T*>(T::singletonPtr_s)->postUpdate(time); }
+        //! Empty update method for the static polymorphism
+        void postUpdate(const Clock& time) { }
 
     protected:
Index: /code/branches/presentation2/src/orxonox/overlays/InGameConsole.cc
===================================================================
--- /code/branches/presentation2/src/orxonox/overlays/InGameConsole.cc	(revision 6182)
+++ /code/branches/presentation2/src/orxonox/overlays/InGameConsole.cc	(revision 6183)
@@ -357,5 +357,5 @@
         @brief Used to control the actual scrolling and the cursor.
     */
-    void InGameConsole::update(const Clock& time)
+    void InGameConsole::preUpdate(const Clock& time)
     {
         if (this->scroll_ != 0)
Index: /code/branches/presentation2/src/orxonox/overlays/InGameConsole.h
===================================================================
--- /code/branches/presentation2/src/orxonox/overlays/InGameConsole.h	(revision 6182)
+++ /code/branches/presentation2/src/orxonox/overlays/InGameConsole.h	(revision 6183)
@@ -52,5 +52,5 @@
         void setConfigValues();
 
-        void update(const Clock& time);
+        void preUpdate(const Clock& time);
 
         static void openConsole();
Index: /code/branches/presentation2/src/orxonox/sound/SoundManager.cc
===================================================================
--- /code/branches/presentation2/src/orxonox/sound/SoundManager.cc	(revision 6182)
+++ /code/branches/presentation2/src/orxonox/sound/SoundManager.cc	(revision 6183)
@@ -102,5 +102,5 @@
     }
 
-    void SoundManager::update(const Clock& time)
+    void SoundManager::preUpdate(const Clock& time)
     {
         this->processCrossFading(time.getDeltaTime());
Index: /code/branches/presentation2/src/orxonox/sound/SoundManager.h
===================================================================
--- /code/branches/presentation2/src/orxonox/sound/SoundManager.h	(revision 6182)
+++ /code/branches/presentation2/src/orxonox/sound/SoundManager.h	(revision 6183)
@@ -51,5 +51,5 @@
         ~SoundManager();
 
-        void update(const Clock& time);
+        void preUpdate(const Clock& time);
         void setConfigValues();
 
