Index: /code/trunk/src/core/BaseObject.cc
===================================================================
--- /code/trunk/src/core/BaseObject.cc	(revision 1557)
+++ /code/trunk/src/core/BaseObject.cc	(revision 1558)
@@ -46,10 +46,13 @@
     */
     BaseObject::BaseObject() :
-      bActive_(true),
-      bVisible_(true),
-      level_(0),
-      namespace_(0)
+        bInitialized_(false),
+        bActive_(true),
+        bVisible_(true),
+        level_(0),
+        namespace_(0)
     {
         RegisterRootObject(BaseObject);
+
+        this->bInitialized_ = true;
     }
 
Index: /code/trunk/src/core/BaseObject.h
===================================================================
--- /code/trunk/src/core/BaseObject.h	(revision 1557)
+++ /code/trunk/src/core/BaseObject.h	(revision 1558)
@@ -47,4 +47,6 @@
     class _CoreExport BaseObject : virtual public OrxonoxClass
     {
+        friend class WorldEntity;
+
         public:
             BaseObject();
@@ -52,4 +54,7 @@
             virtual void loadParams(TiXmlElement* xmlElem);
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+
+            /** @brief Returns if the object was initialized (passed the object registration). @return True was the object is initialized */
+            inline bool isInitialized() const { return this->bInitialized_; }
 
             /** @brief Sets the name of the object. @param name The name */
@@ -63,5 +68,5 @@
             inline void setActivity(bool bActive) { this->bActive_ = bActive; this->changedActivity(); }
             /** @brief Returns the state of the objects activity. @return The state of the activity */
-            inline const bool isActive() const { return this->bActive_; }
+            inline bool isActive() const { return this->bActive_; }
             /** @brief This function gets called if the activity of the object changes. */
             virtual void changedActivity() {}
@@ -70,5 +75,5 @@
             inline void setVisibility(bool bVisible) { this->bVisible_ = bVisible; this->changedVisibility(); }
             /** @brief Returns the state of the objects visibility. @return The state of the visibility */
-            inline const bool isVisible() const { return this->bVisible_; }
+            inline bool isVisible() const { return this->bVisible_; }
             /** @brief This function gets called if the visibility of the object changes. */
             virtual void changedVisibility() {}
@@ -90,4 +95,5 @@
         private:
             std::string name_;                          //!< The name of the object
+            bool bInitialized_;                         //!< True if the object was initialized (passed the object registration)
             bool bActive_;                              //!< True = the object is active
             bool bVisible_;                             //!< True = the object is visible
Index: /code/trunk/src/orxonox/OrxonoxPrereqs.h
===================================================================
--- /code/trunk/src/orxonox/OrxonoxPrereqs.h	(revision 1557)
+++ /code/trunk/src/orxonox/OrxonoxPrereqs.h	(revision 1558)
@@ -66,4 +66,5 @@
   // objects
   class Ambient;
+  class Backlight;
   class Camera;
   class Fighter;
Index: /code/trunk/src/orxonox/objects/BillboardProjectile.cc
===================================================================
--- /code/trunk/src/orxonox/objects/BillboardProjectile.cc	(revision 1557)
+++ /code/trunk/src/orxonox/objects/BillboardProjectile.cc	(revision 1558)
@@ -60,3 +60,9 @@
         this->billboard_.getBillboardSet()->getBillboard(0)->setColour(colour);
     }
+
+    void BillboardProjectile::changedVisibility()
+    {
+        Projectile::changedVisibility();
+        this->billboard_.setVisible(this->isVisible());
+    }
 }
Index: /code/trunk/src/orxonox/objects/BillboardProjectile.h
===================================================================
--- /code/trunk/src/orxonox/objects/BillboardProjectile.h	(revision 1557)
+++ /code/trunk/src/orxonox/objects/BillboardProjectile.h	(revision 1558)
@@ -43,5 +43,7 @@
             BillboardProjectile(SpaceShip* owner = 0);
             virtual ~BillboardProjectile();
+
             virtual void setColour(const ColourValue& colour);
+            virtual void changedVisibility();
 
         private:
Index: /code/trunk/src/orxonox/objects/Model.cc
===================================================================
--- /code/trunk/src/orxonox/objects/Model.cc	(revision 1557)
+++ /code/trunk/src/orxonox/objects/Model.cc	(revision 1558)
@@ -96,3 +96,9 @@
       registerVar(&meshSrc_, meshSrc_.length() + 1, network::STRING);
     }
+
+    void Model::changedVisibility()
+    {
+        WorldEntity::changedVisibility();
+        this->mesh_.setVisible(this->isVisible());
+    }
 }
Index: /code/trunk/src/orxonox/objects/Model.h
===================================================================
--- /code/trunk/src/orxonox/objects/Model.h	(revision 1557)
+++ /code/trunk/src/orxonox/objects/Model.h	(revision 1558)
@@ -44,4 +44,5 @@
             virtual ~Model();
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void changedVisibility();
             void setMesh(const std::string& meshname);
             virtual bool create();
Index: /code/trunk/src/orxonox/objects/ParticleProjectile.cc
===================================================================
--- /code/trunk/src/orxonox/objects/ParticleProjectile.cc	(revision 1557)
+++ /code/trunk/src/orxonox/objects/ParticleProjectile.cc	(revision 1558)
@@ -55,3 +55,9 @@
             delete this->particles_;
     }
+
+    void ParticleProjectile::changedVisibility()
+    {
+        BillboardProjectile::changedVisibility();
+        this->particles_->setEnabled(this->isVisible());
+    }
 }
Index: /code/trunk/src/orxonox/objects/ParticleProjectile.h
===================================================================
--- /code/trunk/src/orxonox/objects/ParticleProjectile.h	(revision 1557)
+++ /code/trunk/src/orxonox/objects/ParticleProjectile.h	(revision 1558)
@@ -43,4 +43,5 @@
             ParticleProjectile(SpaceShip* owner = 0);
             virtual ~ParticleProjectile();
+            virtual void changedVisibility();
 
         private:
Index: /code/trunk/src/orxonox/objects/Projectile.cc
===================================================================
--- /code/trunk/src/orxonox/objects/Projectile.cc	(revision 1557)
+++ /code/trunk/src/orxonox/objects/Projectile.cc	(revision 1558)
@@ -82,4 +82,7 @@
         WorldEntity::tick(dt);
 
+        if (!this->isActive())
+            return;
+
         float radius;
         for (Iterator<Model> it = ObjectList<Model>::start(); it; ++it)
Index: /code/trunk/src/orxonox/objects/RotatingProjectile.cc
===================================================================
--- /code/trunk/src/orxonox/objects/RotatingProjectile.cc	(revision 1557)
+++ /code/trunk/src/orxonox/objects/RotatingProjectile.cc	(revision 1558)
@@ -73,10 +73,20 @@
     void RotatingProjectile::tick(float dt)
     {
-        this->time_ += dt;
+        if (this->isActive())
+        {
+            this->time_ += dt;
 
-        this->rotatingNode1_->setPosition(0, 50 * sin(this->time_ * 20), 50 * cos(this->time_ * 20));
-        this->rotatingNode2_->setPosition(0, -50 * sin(this->time_ * 20), -50 * cos(this->time_ * 20));
+            this->rotatingNode1_->setPosition(0, 50 * sin(this->time_ * 20), 50 * cos(this->time_ * 20));
+            this->rotatingNode2_->setPosition(0, -50 * sin(this->time_ * 20), -50 * cos(this->time_ * 20));
+        }
 
         Projectile::tick(dt);
     }
+
+    void RotatingProjectile::changedVisibility()
+    {
+        BillboardProjectile::changedVisibility();
+        this->rotatingBillboard1_.setVisible(this->isVisible());
+        this->rotatingBillboard2_.setVisible(this->isVisible());
+    }
 }
Index: /code/trunk/src/orxonox/objects/RotatingProjectile.h
===================================================================
--- /code/trunk/src/orxonox/objects/RotatingProjectile.h	(revision 1557)
+++ /code/trunk/src/orxonox/objects/RotatingProjectile.h	(revision 1558)
@@ -15,4 +15,5 @@
             void setConfigValues();
             virtual void tick(float dt);
+            virtual void changedVisibility();
 
         private:
Index: /code/trunk/src/orxonox/objects/Skybox.cc
===================================================================
--- /code/trunk/src/orxonox/objects/Skybox.cc	(revision 1557)
+++ /code/trunk/src/orxonox/objects/Skybox.cc	(revision 1558)
@@ -54,24 +54,14 @@
     }
 
-    void Skybox::loadParams(TiXmlElement* xmlElem)
+    void Skybox::setSkybox(const std::string& skyboxname)
     {
-    	if (xmlElem->Attribute("src"))
-    	{
-    		skyboxSrc_ = xmlElem->Attribute("src");
-        this->create();
+    	GraphicsEngine::getSingleton().getSceneManager()->setSkyBox(true, skyboxname);
+    }
 
-	    	COUT(4) << "Loader: Set skybox: "<< skyboxSrc_ << std::endl << std::endl;
-    	}
-   }
+    void Skybox::setSkyboxSrc(const std::string& src)
+    {
+        this->skyboxSrc_ = src;
+    }
 
-   void Skybox::setSkybox(const std::string& skyboxname)
-   {
-    	GraphicsEngine::getSingleton().getSceneManager()->setSkyBox(true, skyboxname);
-   }
-
-   void Skybox::setSkyboxSrc(const std::string& src){
-     skyboxSrc_ = src;
-   }
-   
     /**
         @brief XML loading and saving.
@@ -87,13 +77,20 @@
         create();
     }
-    
-    bool Skybox::create(){
-      this->setSkybox(skyboxSrc_);
-      return Synchronisable::create();
+
+    bool Skybox::create()
+    {
+        this->setSkybox(this->skyboxSrc_);
+        return Synchronisable::create();
     }
-    
-    void Skybox::registerAllVariables(){
-      registerVar(&skyboxSrc_, skyboxSrc_.length()+1 ,network::STRING);
+
+    void Skybox::registerAllVariables()
+    {
+        registerVar(&skyboxSrc_, skyboxSrc_.length()+1 ,network::STRING);
     }
-    
+
+    void Skybox::changedVisibility()
+    {
+        BaseObject::changedVisibility();
+        GraphicsEngine::getSingleton().getSceneManager()->setSkyBox(this->isVisible(), this->skyboxSrc_);
+    }
 }
Index: /code/trunk/src/orxonox/objects/Skybox.h
===================================================================
--- /code/trunk/src/orxonox/objects/Skybox.h	(revision 1557)
+++ /code/trunk/src/orxonox/objects/Skybox.h	(revision 1558)
@@ -43,8 +43,8 @@
             virtual ~Skybox();
 
-            void loadParams(TiXmlElement* xmlElem);
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void changedVisibility();
             void setSkybox(const std::string& skyboxname);
-            
+
             virtual bool create();
             void registerAllVariables();
Index: /code/trunk/src/orxonox/objects/SpaceShip.cc
===================================================================
--- /code/trunk/src/orxonox/objects/SpaceShip.cc	(revision 1557)
+++ /code/trunk/src/orxonox/objects/SpaceShip.cc	(revision 1558)
@@ -251,4 +251,28 @@
     }
 
+    void SpaceShip::changedVisibility()
+    {
+        Model::changedVisibility();
+
+        this->tt1_->setEnabled(this->isVisible());
+        this->tt2_->setEnabled(this->isVisible());
+        this->redBillboard_.setVisible(this->isVisible());
+        this->greenBillboard_.setVisible(this->isVisible());
+        this->crosshairNear_.setVisible(this->isVisible());
+        this->crosshairFar_.setVisible(this->isVisible());
+    }
+
+    void SpaceShip::changedActivity()
+    {
+        Model::changedActivity();
+
+        this->tt1_->setEnabled(this->isVisible());
+        this->tt2_->setEnabled(this->isVisible());
+        this->redBillboard_.setVisible(this->isVisible());
+        this->greenBillboard_.setVisible(this->isVisible());
+        this->crosshairNear_.setVisible(this->isVisible());
+        this->crosshairFar_.setVisible(this->isVisible());
+    }
+
     void SpaceShip::setCamera(const std::string& camera)
     {
@@ -347,4 +371,7 @@
     void SpaceShip::tick(float dt)
     {
+        if (!this->isActive())
+            return;
+
         currentDir_ = getOrientation()*initialDir_;
 		currentOrth_ = getOrientation()*initialOrth_;
Index: /code/trunk/src/orxonox/objects/SpaceShip.h
===================================================================
--- /code/trunk/src/orxonox/objects/SpaceShip.h	(revision 1557)
+++ /code/trunk/src/orxonox/objects/SpaceShip.h	(revision 1558)
@@ -53,4 +53,6 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
             virtual void tick(float dt);
+            virtual void changedVisibility();
+            virtual void changedActivity();
 
             void setCamera(const std::string& camera = "");
Index: /code/trunk/src/orxonox/objects/SpaceShipAI.cc
===================================================================
--- /code/trunk/src/orxonox/objects/SpaceShipAI.cc	(revision 1557)
+++ /code/trunk/src/orxonox/objects/SpaceShipAI.cc	(revision 1558)
@@ -208,4 +208,7 @@
     void SpaceShipAI::tick(float dt)
     {
+        if (!this->isActive())
+            return;
+
         if (this->target_)
             this->aimAtTarget();
Index: /code/trunk/src/orxonox/objects/WorldEntity.cc
===================================================================
--- /code/trunk/src/orxonox/objects/WorldEntity.cc	(revision 1557)
+++ /code/trunk/src/orxonox/objects/WorldEntity.cc	(revision 1558)
@@ -80,5 +80,5 @@
     void WorldEntity::tick(float dt)
     {
-        if (!this->bStatic_)
+        if (!this->bStatic_ && this->isActive())
         {
 //             COUT(4) << "acceleration: " << this->acceleration_ << " velocity: " << this->velocity_ << std::endl;
@@ -132,4 +132,7 @@
     void WorldEntity::registerAllVariables()
     {
+      // register inheritec variables from BaseObject
+      registerVar( (void*) &(this->bActive_), sizeof(this->bActive_), network::DATA, 0x3);
+      registerVar( (void*) &(this->bVisible_), sizeof(this->bVisible_), network::DATA, 0x3);
       // register coordinates
       registerVar( (void*) &(this->getPosition().x), sizeof(this->getPosition().x), network::DATA, 0x3);
Index: /code/trunk/src/orxonox/tools/BillboardSet.h
===================================================================
--- /code/trunk/src/orxonox/tools/BillboardSet.h	(revision 1557)
+++ /code/trunk/src/orxonox/tools/BillboardSet.h	(revision 1558)
@@ -33,6 +33,6 @@
 
 #include <string>
+#include <OgreBillboardSet.h>
 
-#include <OgreBillboardSet.h>
 #include "util/Math.h"
 
@@ -52,4 +52,9 @@
                 { return this->billboardSet_->getName(); }
 
+            inline void setVisible(bool visible)
+                { this->billboardSet_->setVisible(visible); }
+            inline bool getVisible() const
+                { return this->billboardSet_->getVisible(); }
+
         private:
             static unsigned int billboardSetCounter_s;
Index: /code/trunk/src/orxonox/tools/Mesh.h
===================================================================
--- /code/trunk/src/orxonox/tools/Mesh.h	(revision 1557)
+++ /code/trunk/src/orxonox/tools/Mesh.h	(revision 1558)
@@ -51,4 +51,9 @@
                 { return this->entity_->getName(); }
 
+            inline void setVisible(bool visible)
+                { this->entity_->setVisible(visible); }
+            inline bool getVisible() const
+                { return this->entity_->getVisible(); }
+
         private:
             static unsigned int meshCounter_s;
