Index: code/branches/core5/src/libraries/core/GUIManager.h
===================================================================
--- code/branches/core5/src/libraries/core/GUIManager.h	(revision 5922)
+++ code/branches/core5/src/libraries/core/GUIManager.h	(revision 5924)
@@ -102,5 +102,5 @@
         CEGUI::Logger*                       ceguiLogger_;      //!< CEGUI's logger to be able to log CEGUI errors in our log
         std::map<std::string, PlayerInfo*>   players_;          //!< Stores the player (owner) for each gui
-        Ogre::Camera*                        camera_;           //!< Camera used to render the scene with the GUI
+        Ogre::Camera*                        camera_;           //!< Camera used to render the scene with the 
 
         static GUIManager*                   singletonPtr_s;    //!< Singleton reference to GUIManager
Index: code/branches/core5/src/libraries/core/GraphicsManager.cc
===================================================================
--- code/branches/core5/src/libraries/core/GraphicsManager.cc	(revision 5922)
+++ code/branches/core5/src/libraries/core/GraphicsManager.cc	(revision 5924)
@@ -361,5 +361,6 @@
 
         // Render frame
-        ogreRoot_->_updateAllRenderTargets();
+        if( this->viewport_->getCamera() )
+            ogreRoot_->_updateAllRenderTargets();
 
         uint64_t timeAfterTick = time.getRealMicroseconds();
Index: code/branches/core5/src/modules/objects/Planet.cc
===================================================================
--- code/branches/core5/src/modules/objects/Planet.cc	(revision 5922)
+++ code/branches/core5/src/modules/objects/Planet.cc	(revision 5924)
@@ -47,5 +47,5 @@
      * @brief Constructor
      */
-    Planet::Planet(BaseObject* creator) : MovableEntity(creator)
+    Planet::Planet(BaseObject* creator): MovableEntity(creator)
     {
         RegisterObject(Planet);
@@ -64,11 +64,11 @@
     void Planet::tick(float dt)
     {
-        if (!this->isVisible())
+        if(!this->isVisible())
             return;
 
         if (GameMode::showsGraphics())
         {
-            Camera* activeCamera = this->getScene()->getCameraManager()->getActiveCamera();
-            if (activeCamera)
+            Camera* activeCamera = CameraManager::getInstance().getActiveCamera();
+            if(activeCamera)
             {
                 float distance = this->getPosition().distance( activeCamera->getWorldPosition() );
Index: code/branches/core5/src/orxonox/CameraManager.cc
===================================================================
--- code/branches/core5/src/orxonox/CameraManager.cc	(revision 5922)
+++ code/branches/core5/src/orxonox/CameraManager.cc	(revision 5924)
@@ -38,4 +38,5 @@
 #include "core/GUIManager.h"
 #include "core/ObjectList.h"
+#include "core/ScopedSingletonManager.h"
 #include "tools/Shader.h"
 #include "graphics/Camera.h"
@@ -44,25 +45,20 @@
 namespace orxonox
 {
-    CameraManager::CameraManager(BaseObject* creator)
-        : BaseObject(creator)
-        , viewport_(GraphicsManager::getInstance().getViewport())
-        , fallbackCamera_(NULL)
+    CameraManager* CameraManager::singletonPtr_s = 0;
+    ManageScopedSingleton(CameraManager, ScopeID::Graphics, false);
+
+    CameraManager::CameraManager()
+        : viewport_(GraphicsManager::getInstance().getViewport())
     {
-        assert(GameMode::showsGraphics());
     }
 
     CameraManager::~CameraManager()
     {
-        for (std::list<Camera*>::iterator it = this->cameraList_.begin(); it != this->cameraList_.end();)
-            if ((*it)->camera_ == GUIManager::getInstance().getCamera())
-                GUIManager::getInstance().setCamera(NULL);
-
-        if (this->fallbackCamera_)
-            this->getScene()->getSceneManager()->destroyCamera(this->fallbackCamera_);
+        GUIManager::getInstance().setCamera(0);
     }
 
     Camera* CameraManager::getActiveCamera() const
     {
-        if (!this->cameraList_.empty())
+        if (this->cameraList_.size() > 0)
             return this->cameraList_.front();
         else
@@ -72,6 +68,9 @@
     void CameraManager::requestFocus(Camera* camera)
     {
+        if (!GameMode::showsGraphics())
+            assert(0);
+
         // notify old camera (if it exists)
-        if (!this->cameraList_.empty())
+        if (this->cameraList_.size() > 0)
             this->cameraList_.front()->removeFocus();
 
@@ -79,9 +78,7 @@
 
         // make sure we don't add it twice
-        for (std::list<Camera*>::iterator it = this->cameraList_.begin(); it != this->cameraList_.end();)
+        for (std::list<Camera*>::iterator it = this->cameraList_.begin(); it != this->cameraList_.end(); ++it)
             if ((*it) == camera)
-                this->cameraList_.erase(it++);
-            else
-                ++it;
+                return;
 
         // add to list
@@ -91,4 +88,7 @@
     void CameraManager::releaseFocus(Camera* camera)
     {
+        if (!GameMode::showsGraphics())
+            assert(0);
+
         // notify the cam of releasing the focus
         if (!this->cameraList_.empty() && this->cameraList_.front() == camera)
@@ -98,13 +98,6 @@
 
             // set new focus if possible
-            if (!this->cameraList_.empty())
+            if (this->cameraList_.size() > 0)
                 this->cameraList_.front()->setFocus();
-            else
-            {
-                // there are no more cameras, create a fallback
-                if (!this->fallbackCamera_)
-                    this->fallbackCamera_ = camera->getScene()->getSceneManager()->createCamera(getUniqueNumberString());
-                this->useCamera(this->fallbackCamera_);
-            }
         }
         else
Index: code/branches/core5/src/orxonox/CameraManager.h
===================================================================
--- code/branches/core5/src/orxonox/CameraManager.h	(revision 5922)
+++ code/branches/core5/src/orxonox/CameraManager.h	(revision 5924)
@@ -41,12 +41,15 @@
 #include <list>
 #include "util/OgreForwardRefs.h"
-#include "core/BaseObject.h"
+#include "util/Singleton.h"
+#include "core/OrxonoxClass.h"
+#include "core/SmartPtr.h"
 
 namespace orxonox
 {
-    class _OrxonoxExport CameraManager : public BaseObject
+    class _OrxonoxExport CameraManager : public Singleton<CameraManager>, public OrxonoxClass
     {
+            friend class Singleton<CameraManager>;
         public:
-            CameraManager(BaseObject* creator);
+            CameraManager();
             ~CameraManager();
 
@@ -58,4 +61,6 @@
             void useCamera(Ogre::Camera* camera);
 
+            static CameraManager* getInstancePtr() { return singletonPtr_s; }
+
         private:
             CameraManager(const CameraManager&); // don't use
@@ -63,5 +68,6 @@
             std::list<Camera*>    cameraList_;
             Ogre::Viewport*       viewport_;
-            Ogre::Camera*         fallbackCamera_;
+
+            static CameraManager* singletonPtr_s;
     };
 }
Index: code/branches/core5/src/orxonox/Scene.cc
===================================================================
--- code/branches/core5/src/orxonox/Scene.cc	(revision 5922)
+++ code/branches/core5/src/orxonox/Scene.cc	(revision 5924)
@@ -46,5 +46,4 @@
 #include "tools/BulletConversions.h"
 #include "Radar.h"
-#include "CameraManager.h"
 #include "worldentities/WorldEntity.h"
 
@@ -67,5 +66,4 @@
 
             this->radar_ = new Radar();
-            this->cameraManager_ = new CameraManager(this);
         }
         else
@@ -76,5 +74,4 @@
 
             this->radar_ = 0;
-            this->cameraManager_ = 0;
         }
 
@@ -98,10 +95,5 @@
         {
             if (GameMode::showsGraphics())
-            {
-                // Check whether we're still using this scene manager for the GUI
-                if (GUIManager::getInstance().getCamera() && GUIManager::getInstance().getCamera()->getSceneManager() == this->sceneManager_)
-                    GUIManager::getInstance().setCamera(NULL);
                 Ogre::Root::getSingleton().destroySceneManager(this->sceneManager_);
-            }
             else
                 delete this->sceneManager_;
@@ -109,7 +101,4 @@
             if (this->radar_)
                 this->radar_->destroy();
-
-            if (this->cameraManager_)
-                this->cameraManager_->destroy();
 
             this->setPhysicalWorld(false);
Index: code/branches/core5/src/orxonox/Scene.h
===================================================================
--- code/branches/core5/src/orxonox/Scene.h	(revision 5922)
+++ code/branches/core5/src/orxonox/Scene.h	(revision 5924)
@@ -73,7 +73,4 @@
             inline Radar* getRadar()
                 { return this->radar_; }
-
-            inline CameraManager* getCameraManager()
-                { return this->cameraManager_.get(); }
             
             inline virtual uint32_t getSceneID() const { return this->getObjectID(); }
@@ -100,5 +97,4 @@
             bool                     bShadows_;
             Radar*                   radar_;
-            SmartPtr<CameraManager>  cameraManager_;
 
 
Index: code/branches/core5/src/orxonox/graphics/Camera.cc
===================================================================
--- code/branches/core5/src/orxonox/graphics/Camera.cc	(revision 5922)
+++ code/branches/core5/src/orxonox/graphics/Camera.cc	(revision 5924)
@@ -38,5 +38,5 @@
 #include "core/CoreIncludes.h"
 #include "core/ConfigValueIncludes.h"
-#include "core/GameMode.h"
+#include "core/GUIManager.h"
 #include "Scene.h"
 #include "CameraManager.h"
@@ -50,6 +50,4 @@
         RegisterObject(Camera);
 
-        if (!GameMode::showsGraphics())
-            ThrowException(AbortLoading, "Can't create Camera, no graphics.");
         if (!this->getScene())
             ThrowException(AbortLoading, "Can't create Camera, no scene.");
@@ -78,4 +76,6 @@
         if (this->isInitialized())
         {
+            if( GUIManager::getInstance().getCamera() == this->camera_ )
+                GUIManager::getInstance().setCamera( NULL );
             this->releaseFocus();
 
@@ -120,10 +120,10 @@
     void Camera::requestFocus()
     {
-        this->getScene()->getCameraManager()->requestFocus(this);
+        CameraManager::getInstance().requestFocus(this);
     }
 
     void Camera::releaseFocus()
     {
-        this->getScene()->getCameraManager()->releaseFocus(this);
+        CameraManager::getInstance().releaseFocus(this);
     }
 
@@ -140,5 +140,5 @@
     {
         this->bHasFocus_ = true;
-        this->getScene()->getCameraManager()->useCamera(this->camera_);
+        CameraManager::getInstance().useCamera(this->camera_);
     }
 
