Index: code/branches/objecthierarchy/src/orxonox/tools/BillboardSet.cc
===================================================================
--- code/branches/objecthierarchy/src/orxonox/tools/BillboardSet.cc	(revision 2006)
+++ code/branches/objecthierarchy/src/orxonox/tools/BillboardSet.cc	(revision 2019)
@@ -31,5 +31,5 @@
 
 #include <sstream>
-
+#include <cassert>
 #include <OgreSceneManager.h>
 
@@ -46,44 +46,60 @@
     }
 
-    void BillboardSet::setBillboardSet(const std::string& file, int count)
+    void BillboardSet::setBillboardSet(Ogre::SceneManager* scenemanager, const std::string& file, int count)
     {
+        assert(scenemanager);
+
         std::ostringstream name;
         name << (BillboardSet::billboardSetCounter_s++);
-        this->billboardSet_ = GraphicsEngine::getInstance().getLevelSceneManager()->createBillboardSet("Billboard" + name.str(), count);
+        this->billboardSet_ = scenemanager->createBillboardSet("Billboard" + name.str(), count);
         this->billboardSet_->createBillboard(Vector3::ZERO);
         this->billboardSet_->setMaterialName(file);
+
+        this->scenemanager_ = scenemanager;
     }
 
-    void BillboardSet::setBillboardSet(const std::string& file, const ColourValue& colour, int count)
+    void BillboardSet::setBillboardSet(Ogre::SceneManager* scenemanager, const std::string& file, const ColourValue& colour, int count)
     {
+        assert(scenemanager);
+
         std::ostringstream name;
         name << (BillboardSet::billboardSetCounter_s++);
-        this->billboardSet_ = GraphicsEngine::getInstance().getLevelSceneManager()->createBillboardSet("Billboard" + name.str(), count);
+        this->billboardSet_ = scenemanager->createBillboardSet("Billboard" + name.str(), count);
         this->billboardSet_->createBillboard(Vector3::ZERO, colour);
         this->billboardSet_->setMaterialName(file);
+
+        this->scenemanager_ = scenemanager;
     }
 
-    void BillboardSet::setBillboardSet(const std::string& file, const Vector3& position, int count)
+    void BillboardSet::setBillboardSet(Ogre::SceneManager* scenemanager, const std::string& file, const Vector3& position, int count)
     {
+        assert(scenemanager);
+
         std::ostringstream name;
         name << (BillboardSet::billboardSetCounter_s++);
-        this->billboardSet_ = GraphicsEngine::getInstance().getLevelSceneManager()->createBillboardSet("Billboard" + name.str(), count);
+        this->billboardSet_ = scenemanager->createBillboardSet("Billboard" + name.str(), count);
         this->billboardSet_->createBillboard(position);
         this->billboardSet_->setMaterialName(file);
+
+        this->scenemanager_ = scenemanager;
     }
 
-    void BillboardSet::setBillboardSet(const std::string& file, const ColourValue& colour, const Vector3& position, int count)
+    void BillboardSet::setBillboardSet(Ogre::SceneManager* scenemanager, const std::string& file, const ColourValue& colour, const Vector3& position, int count)
     {
+        assert(scenemanager);
+
         std::ostringstream name;
         name << (BillboardSet::billboardSetCounter_s++);
-        this->billboardSet_ = GraphicsEngine::getInstance().getLevelSceneManager()->createBillboardSet("Billboard" + name.str(), count);
+        this->billboardSet_ = scenemanager->createBillboardSet("Billboard" + name.str(), count);
         this->billboardSet_->createBillboard(position, colour);
         this->billboardSet_->setMaterialName(file);
+
+        this->scenemanager_ = scenemanager;
     }
 
     BillboardSet::~BillboardSet()
     {
-        if (this->billboardSet_)
-            GraphicsEngine::getInstance().getLevelSceneManager()->destroyBillboardSet(this->billboardSet_);
+        if (this->billboardSet_ && this->scenemanager_)
+            this->scenemanager_->destroyBillboardSet(this->billboardSet_);
     }
 }
Index: code/branches/objecthierarchy/src/orxonox/tools/BillboardSet.h
===================================================================
--- code/branches/objecthierarchy/src/orxonox/tools/BillboardSet.h	(revision 2006)
+++ code/branches/objecthierarchy/src/orxonox/tools/BillboardSet.h	(revision 2019)
@@ -44,8 +44,8 @@
             BillboardSet();
             ~BillboardSet();
-            void setBillboardSet(const std::string& file, int count = 1);
-            void setBillboardSet(const std::string& file, const ColourValue& colour, int count = 1);
-            void setBillboardSet(const std::string& file, const Vector3& position, int count = 1);
-            void setBillboardSet(const std::string& file, const ColourValue& colour, const Vector3& position, int count = 1);
+            void setBillboardSet(Ogre::SceneManager* scenemanager, const std::string& file, int count = 1);
+            void setBillboardSet(Ogre::SceneManager* scenemanager, const std::string& file, const ColourValue& colour, int count = 1);
+            void setBillboardSet(Ogre::SceneManager* scenemanager, const std::string& file, const Vector3& position, int count = 1);
+            void setBillboardSet(Ogre::SceneManager* scenemanager, const std::string& file, const ColourValue& colour, const Vector3& position, int count = 1);
 
             inline Ogre::BillboardSet* getBillboardSet()
@@ -63,4 +63,5 @@
             static unsigned int billboardSetCounter_s;
             Ogre::BillboardSet* billboardSet_;
+            Ogre::SceneManager* scenemanager_;
     };
 }
Index: code/branches/objecthierarchy/src/orxonox/tools/Light.cc
===================================================================
--- code/branches/objecthierarchy/src/orxonox/tools/Light.cc	(revision 2006)
+++ code/branches/objecthierarchy/src/orxonox/tools/Light.cc	(revision 2019)
@@ -31,4 +31,5 @@
 
 #include <sstream>
+#include <cassert>
 
 #include <OgreSceneManager.h>
@@ -45,18 +46,22 @@
     }
 
-    void Light::setLight(Ogre::Light::LightTypes type, const ColourValue& diffuse, const ColourValue& specular)
+    void Light::setLight(Ogre::SceneManager* scenemanager, Ogre::Light::LightTypes type, const ColourValue& diffuse, const ColourValue& specular)
     {
+        assert(scenemanager);
+
         std::ostringstream name;
         name << (Light::lightCounter_s++);
-        this->light_ = GraphicsEngine::getInstance().getLevelSceneManager()->createLight("Light" + name.str());
+        this->light_ = scenemanager->createLight("Light" + name.str());
         this->light_->setType(type);
         this->light_->setDiffuseColour(diffuse);
         this->light_->setSpecularColour(specular);
+
+        this->scenemanager_ = scenemanager;
     }
 
     Light::~Light()
     {
-        if (this->light_)
-            GraphicsEngine::getInstance().getLevelSceneManager()->destroyLight(this->light_);
+        if (this->light_ && this->scenemanager_)
+            this->scenemanager_->destroyLight(this->light_);
     }
 }
Index: code/branches/objecthierarchy/src/orxonox/tools/Light.h
===================================================================
--- code/branches/objecthierarchy/src/orxonox/tools/Light.h	(revision 2006)
+++ code/branches/objecthierarchy/src/orxonox/tools/Light.h	(revision 2019)
@@ -45,5 +45,5 @@
             Light();
             ~Light();
-            void setLight(Ogre::Light::LightTypes type = Ogre::Light::LT_POINT, const ColourValue& diffuse = ColourValue(1.0, 1.0, 1.0), const ColourValue& specular = ColourValue(1.0, 1.0, 1.0));
+            void setLight(Ogre::SceneManager* scenemanager, Ogre::Light::LightTypes type = Ogre::Light::LT_POINT, const ColourValue& diffuse = ColourValue(1.0, 1.0, 1.0), const ColourValue& specular = ColourValue(1.0, 1.0, 1.0));
 
             inline Ogre::Light* getLight()
@@ -56,4 +56,5 @@
             static unsigned int lightCounter_s;
             Ogre::Light* light_;
+            Ogre::SceneManager* scenemanager_;
     };
 }
Index: code/branches/objecthierarchy/src/orxonox/tools/Mesh.cc
===================================================================
--- code/branches/objecthierarchy/src/orxonox/tools/Mesh.cc	(revision 2006)
+++ code/branches/objecthierarchy/src/orxonox/tools/Mesh.cc	(revision 2019)
@@ -32,4 +32,5 @@
 #include <sstream>
 #include <OgreSceneManager.h>
+#include <cassert>
 
 #include "core/Core.h"
@@ -50,24 +51,25 @@
     Mesh::~Mesh()
     {
-        if (this->entity_ && Core::showsGraphics())
-            GraphicsEngine::getInstance().getLevelSceneManager()->destroyEntity(this->entity_);
+        if (this->entity_ && this->scenemanager_)
+            this->scenemanager_->destroyEntity(this->entity_);
     }
 
-    void Mesh::setMeshSource(const std::string& meshsource)
+    void Mesh::setMeshSource(Ogre::SceneManager* scenemanager, const std::string& meshsource)
     {
-        if (Core::showsGraphics())
+        assert(scenemanager);
+
+        this->scenemanager_ = scenemanager;
+
+        if (this->entity_)
+            this->scenemanager_->destroyEntity(this->entity_);
+
+        try
         {
-            if (this->entity_)
-                GraphicsEngine::getInstance().getLevelSceneManager()->destroyEntity(this->entity_);
-
-            try
-            {
-                this->entity_ = GraphicsEngine::getInstance().getLevelSceneManager()->createEntity("Mesh" + convertToString(Mesh::meshCounter_s++), meshsource);
-                this->entity_->setCastShadows(this->bCastShadows_);
-            }
-            catch (...)
-            {
-                COUT(1) << "Error: Couln't load mesh \"" << meshsource << "\"" << std::endl;
-            }
+            this->entity_ = this->scenemanager_->createEntity("Mesh" + convertToString(Mesh::meshCounter_s++), meshsource);
+            this->entity_->setCastShadows(this->bCastShadows_);
+        }
+        catch (...)
+        {
+            COUT(1) << "Error: Couln't load mesh \"" << meshsource << "\"" << std::endl;
         }
     }
@@ -85,5 +87,5 @@
             return this->entity_->getName();
         else
-            return blankString;
+            return BLANKSTRING;
     }
 
Index: code/branches/objecthierarchy/src/orxonox/tools/Mesh.h
===================================================================
--- code/branches/objecthierarchy/src/orxonox/tools/Mesh.h	(revision 2006)
+++ code/branches/objecthierarchy/src/orxonox/tools/Mesh.h	(revision 2019)
@@ -43,5 +43,5 @@
             ~Mesh();
 
-            void setMeshSource(const std::string& file);
+            void setMeshSource(Ogre::SceneManager* scenemanager, const std::string& file);
 
             inline Ogre::Entity* getEntity()
@@ -61,4 +61,5 @@
             Ogre::Entity* entity_;
             bool bCastShadows_;
+            Ogre::SceneManager* scenemanager_;
     };
 }
Index: code/branches/objecthierarchy/src/orxonox/tools/ParticleInterface.cc
===================================================================
--- code/branches/objecthierarchy/src/orxonox/tools/ParticleInterface.cc	(revision 2006)
+++ code/branches/objecthierarchy/src/orxonox/tools/ParticleInterface.cc	(revision 2019)
@@ -37,4 +37,5 @@
 #include <OgreParticleEmitter.h>
 #include <OgreSceneManager.h>
+#include <cassert>
 
 #include "GraphicsEngine.h"
@@ -47,12 +48,15 @@
   ParticleInterface* ParticleInterface::currentParticleInterface_s = 0;
 
-  ParticleInterface::ParticleInterface(const std::string& templateName, LODParticle::LOD detaillevel)
+  ParticleInterface::ParticleInterface(Ogre::SceneManager* scenemanager, const std::string& templateName, LODParticle::LOD detaillevel)
   {
     RegisterRootObject(ParticleInterface);
 
+    assert(scenemanager);
+
+    this->scenemanager_ = scenemanager;
     this->sceneNode_ = 0;
     this->bEnabled_ = true;
     this->detaillevel_ = (unsigned int)detaillevel;
-    this->particleSystem_ = GraphicsEngine::getInstance().getLevelSceneManager()->createParticleSystem("particles" + getConvertedValue<unsigned int, std::string>(ParticleInterface::counter_s++), templateName);
+    this->particleSystem_ = this->scenemanager_->createParticleSystem("particles" + getConvertedValue<unsigned int, std::string>(ParticleInterface::counter_s++), templateName);
     //this->particleSystem_->setSpeedFactor(Orxonox::getInstance().getTimeFactor());
     this->particleSystem_->setSpeedFactor(1.0f);
@@ -72,5 +76,5 @@
   {
     this->particleSystem_->removeAllEmitters();
-    GraphicsEngine::getInstance().getLevelSceneManager()->destroyParticleSystem(particleSystem_);
+    this->scenemanager_->destroyParticleSystem(particleSystem_);
   }
 
Index: code/branches/objecthierarchy/src/orxonox/tools/ParticleInterface.h
===================================================================
--- code/branches/objecthierarchy/src/orxonox/tools/ParticleInterface.h	(revision 2006)
+++ code/branches/objecthierarchy/src/orxonox/tools/ParticleInterface.h	(revision 2019)
@@ -48,5 +48,5 @@
   {
     public:
-      ParticleInterface(const std::string& templateName, LODParticle::LOD detaillevel);
+      ParticleInterface(Ogre::SceneManager* scenemanager, const std::string& templateName, LODParticle::LOD detaillevel);
       ~ParticleInterface();
 
@@ -92,4 +92,5 @@
       bool bEnabled_;
       unsigned int detaillevel_;                            //!< Detail level of this particle effect (0: off, 1: low, 2: normal, 3: high)
+      Ogre::SceneManager* scenemanager_;
   };
 }
