Index: code/trunk/src/libraries/core/Core.cc
===================================================================
--- code/trunk/src/libraries/core/Core.cc	(revision 7868)
+++ code/trunk/src/libraries/core/Core.cc	(revision 7870)
@@ -94,4 +94,6 @@
         , bGraphicsLoaded_(false)
         , bStartIOConsole_(true)
+        , lastLevelTimestamp_(0)
+        , ogreConfigTimestamp_(0)
     {
         // Set the hard coded fixed paths
@@ -221,4 +223,8 @@
         SetConfigValue(bStartIOConsole_, true)
             .description("Set to false if you don't want to use the IOConsole (for Lua debugging for instance)");
+        SetConfigValue(lastLevelTimestamp_, 0)
+            .description("Timestamp when the last level was started.");
+        SetConfigValue(ogreConfigTimestamp_, 0)
+            .description("Timestamp when the ogre config file was changed.");
     }
 
@@ -395,3 +401,13 @@
         }
     }
+
+    void Core::updateLastLevelTimestamp()
+    {
+        ModifyConfigValue(lastLevelTimestamp_, set, static_cast<long long>(time(NULL)));
+    }
+
+    void Core::updateOgreConfigTimestamp()
+    {
+        ModifyConfigValue(ogreConfigTimestamp_, set, static_cast<long long>(time(NULL)));
+    }
 }
Index: code/trunk/src/libraries/core/Core.h
===================================================================
--- code/trunk/src/libraries/core/Core.h	(revision 7868)
+++ code/trunk/src/libraries/core/Core.h	(revision 7870)
@@ -83,4 +83,12 @@
             void resetLanguage();
 
+            void updateLastLevelTimestamp();
+            inline long long getLastLevelTimestamp() const
+                { return this->lastLevelTimestamp_; }
+
+            void updateOgreConfigTimestamp();
+            inline long long getOgreConfigTimestamp() const
+                { return this->ogreConfigTimestamp_; }
+
         private:
             Core(const Core&); //!< Don't use (undefined symbol)
@@ -120,4 +128,6 @@
             bool                          bInitRandomNumberGenerator_; //!< If true, srand(time(0)) is called
             bool                          bStartIOConsole_;            //!< Set to false if you don't want to use the IOConsole
+            long long                     lastLevelTimestamp_;         ///< Timestamp when the last level was started
+            long long                     ogreConfigTimestamp_;        ///< Timestamp wehen the ogre config level was modified
 
             static Core*                  singletonPtr_s;
Index: code/trunk/src/libraries/core/GraphicsManager.cc
===================================================================
--- code/trunk/src/libraries/core/GraphicsManager.cc	(revision 7868)
+++ code/trunk/src/libraries/core/GraphicsManager.cc	(revision 7870)
@@ -54,4 +54,5 @@
 #include "ConfigValueIncludes.h"
 #include "CoreIncludes.h"
+#include "Core.h"
 #include "Game.h"
 #include "GameMode.h"
@@ -303,7 +304,11 @@
         CCOUT(4) << "Configuring Renderer" << std::endl;
 
-        if (!ogreRoot_->restoreConfig())
+        if (!ogreRoot_->restoreConfig() || Core::getInstance().getOgreConfigTimestamp() > Core::getInstance().getLastLevelTimestamp())
+        {
             if (!ogreRoot_->showConfigDialog())
                 ThrowException(InitialisationFailed, "OGRE graphics configuration dialogue canceled.");
+            else
+                Core::getInstance().updateOgreConfigTimestamp();
+        }
 
         CCOUT(4) << "Creating render window" << std::endl;
Index: code/trunk/src/orxonox/gamestates/GSLevel.cc
===================================================================
--- code/trunk/src/orxonox/gamestates/GSLevel.cc	(revision 7868)
+++ code/trunk/src/orxonox/gamestates/GSLevel.cc	(revision 7870)
@@ -36,4 +36,5 @@
 #include "core/input/InputState.h"
 #include "core/input/KeyBinderManager.h"
+#include "core/Core.h"
 #include "core/Game.h"
 #include "core/GameMode.h"
@@ -140,4 +141,6 @@
         startFile_ = new XMLFile(LevelManager::getInstance().getDefaultLevel());
         Loader::open(startFile_);
+
+        Core::getInstance().updateLastLevelTimestamp();
     }
 
