Index: code/trunk/src/orxonox/Settings.cc
===================================================================
--- code/trunk/src/orxonox/Settings.cc	(revision 1896)
+++ code/trunk/src/orxonox/Settings.cc	(revision 1907)
@@ -51,4 +51,5 @@
         : bShowsGraphics_(false)
         , bHasServer_(false)
+        , bIsClient_(false)
     {
         RegisterRootObject(Settings);
Index: code/trunk/src/orxonox/Settings.h
===================================================================
--- code/trunk/src/orxonox/Settings.h	(revision 1896)
+++ code/trunk/src/orxonox/Settings.h	(revision 1907)
@@ -52,4 +52,5 @@
         friend class GSGraphics;
         friend class GSServer;
+        friend class GSClient;
         friend class GSDedicated;
 
@@ -63,4 +64,5 @@
         static bool showsGraphics() { assert(singletonRef_s); return singletonRef_s->bShowsGraphics_; }
         static bool hasServer()     { assert(singletonRef_s); return singletonRef_s->bHasServer_; }
+        static bool isClient()      { assert(singletonRef_s); return singletonRef_s->bIsClient_; }
 
     private:
@@ -68,4 +70,5 @@
         static void setShowsGraphics(bool val) { assert(singletonRef_s); singletonRef_s->bShowsGraphics_ = val; }
         static void setHasServer    (bool val) { assert(singletonRef_s); singletonRef_s->bHasServer_     = val; }
+        static void setIsClient     (bool val) { assert(singletonRef_s); singletonRef_s->bIsClient_      = val; }
 
         Settings();
@@ -81,4 +84,5 @@
         bool bShowsGraphics_;                                  //!< global variable that tells whether to show graphics
         bool bHasServer_;                                      //!< global variable that tells whether this is a server
+        bool bIsClient_;
 
         std::string dataPath_;                                 //!< Path to the game data
Index: code/trunk/src/orxonox/gamestates/GSClient.cc
===================================================================
--- code/trunk/src/orxonox/gamestates/GSClient.cc	(revision 1896)
+++ code/trunk/src/orxonox/gamestates/GSClient.cc	(revision 1907)
@@ -33,4 +33,5 @@
 #include "core/CommandLine.h"
 #include "network/Client.h"
+#include "Settings.h"
 
 namespace orxonox
@@ -50,4 +51,6 @@
     void GSClient::enter()
     {
+        Settings::_getInstance().bIsClient_ = true;
+
         GSLevel::enter();
 
@@ -77,4 +80,6 @@
 
         GSLevel::leave();
+
+        Settings::_getInstance().bIsClient_ = false;
     }
 
Index: code/trunk/src/orxonox/gamestates/GSServer.cc
===================================================================
--- code/trunk/src/orxonox/gamestates/GSServer.cc	(revision 1896)
+++ code/trunk/src/orxonox/gamestates/GSServer.cc	(revision 1907)
@@ -83,8 +83,7 @@
         this->server_->close();
         delete this->server_;
+        Settings::_getInstance().bHasServer_ = false;
 
         GSLevel::leave();
-
-        Settings::_getInstance().bHasServer_ = false;
     }
 
Index: code/trunk/src/orxonox/objects/Backlight.cc
===================================================================
--- code/trunk/src/orxonox/objects/Backlight.cc	(revision 1896)
+++ code/trunk/src/orxonox/objects/Backlight.cc	(revision 1907)
@@ -53,21 +53,33 @@
         this->traillength_ = 1;
 
-        this->getNode()->setInheritScale(false);
+        this->configure(maxspeed, brakingtime, scale);
+    }
+    
+    bool Backlight::create(){
+      if(!WorldEntity::create())
+        return false;
+      
+      this->getNode()->setInheritScale(false);
 
-        this->billboard_.setBillboardSet("Flares/backlightflare");
-        this->attachObject(this->billboard_.getBillboardSet());
+      this->billboard_.setBillboardSet("Flares/backlightflare");
+      this->attachObject(this->billboard_.getBillboardSet());
 
-        this->ribbonTrail_ = GraphicsEngine::getInstance().getLevelSceneManager()->createRibbonTrail(this->getName() + "RibbonTrail");
-        this->ribbonTrailNode_ = GraphicsEngine::getInstance().getLevelSceneManager()->getRootSceneNode()->createChildSceneNode(this->getName() + "RibbonTrailNode");
-        this->ribbonTrailNode_->attachObject(this->ribbonTrail_);
-        this->ribbonTrail_->addNode(this->getNode());
+      this->ribbonTrail_ = GraphicsEngine::getInstance().getLevelSceneManager()->createRibbonTrail(this->getName() + "RibbonTrail");
+      this->ribbonTrailNode_ = GraphicsEngine::getInstance().getLevelSceneManager()->getRootSceneNode()->createChildSceneNode(this->getName() + "RibbonTrailNode");
+      this->ribbonTrailNode_->attachObject(this->ribbonTrail_);
+      this->ribbonTrail_->addNode(this->getNode());
 
-        this->configure(maxspeed, brakingtime, scale);
 
-        this->ribbonTrail_->setTrailLength(this->maxTraillength_);
-        this->ribbonTrail_->setMaterialName("Trail/backlighttrail");
+      this->ribbonTrail_->setTrailLength(this->maxTraillength_);
+      this->ribbonTrail_->setMaterialName("Trail/backlighttrail");
 
         //this->setTimeFactor(Orxonox::getInstance().getTimeFactor());
-        this->setTimeFactor(1.0f);
+      this->setTimeFactor(1.0f);
+      
+      this->ribbonTrail_->setMaxChainElements(this->maxTrailsegments_);
+      this->ribbonTrail_->setTrailLength(this->traillength_ = 2 * this->maxTrailsegments_);
+      this->ribbonTrail_->setInitialWidth(0, this->width_ * this->getScale());
+      this->ribbonTrail_->setWidthChange(0, this->width_ * this->getScale() / this->maxLifeTime_ * Backlight::timeFactor_s);
+      return true;
     }
 
@@ -100,4 +112,11 @@
     {
         this->ribbonTrail_->setColourChange(0, ColourValue(0, 0, 0, this->maxTraillength_ / this->traillength_ / this->maxLifeTime_ * Backlight::timeFactor_s));
+    }
+    
+    
+    void Backlight::XMLPort(Element& xmlelement, XMLPort::Mode mode){
+      SUPER(Backlight, XMLPort, xmlelement, mode);
+      
+      Backlight::create();
     }
 
@@ -136,12 +155,8 @@
         this->maxTraillength_ = this->maxLifeTime_ * maxspeed;
         this->maxTrailsegments_ = (size_t)(this->maxTraillength_ / this->trailSegmentLength_);
-        this->ribbonTrail_->setMaxChainElements(this->maxTrailsegments_);
-        this->ribbonTrail_->setTrailLength(this->traillength_ = 2 * this->maxTrailsegments_);
 
         this->brakefactor_ = this->maxLifeTime_ / brakingtime;
 
         this->scale(scale);
-        this->ribbonTrail_->setInitialWidth(0, this->width_ * scale);
-        this->ribbonTrail_->setWidthChange(0, this->width_ * scale / this->maxLifeTime_ * Backlight::timeFactor_s);
     }
 
Index: code/trunk/src/orxonox/objects/Backlight.h
===================================================================
--- code/trunk/src/orxonox/objects/Backlight.h	(revision 1896)
+++ code/trunk/src/orxonox/objects/Backlight.h	(revision 1907)
@@ -45,6 +45,8 @@
 
             void setConfigValues();
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
             virtual void tick(float dt);
             virtual void changedVisibility();
+            virtual bool create();
 
             void setColour(const ColourValue& colour);
Index: code/trunk/src/orxonox/objects/BillboardProjectile.cc
===================================================================
--- code/trunk/src/orxonox/objects/BillboardProjectile.cc	(revision 1896)
+++ code/trunk/src/orxonox/objects/BillboardProjectile.cc	(revision 1907)
@@ -42,10 +42,7 @@
         RegisterObject(BillboardProjectile);
 
-        if (this->owner_)
-        {
-            this->billboard_.setBillboardSet("Examples/Flare", ColourValue(1.0, 1.0, 0.5), 1);
-            this->attachObject(this->billboard_.getBillboardSet());
-            this->scale(0.5);
-        }
+        this->billboard_.setBillboardSet("Examples/Flare", ColourValue(1.0, 1.0, 0.5), 1);
+        this->attachObject(this->billboard_.getBillboardSet());
+        this->scale(0.5);
     }
 
Index: code/trunk/src/orxonox/objects/Model.cc
===================================================================
--- code/trunk/src/orxonox/objects/Model.cc	(revision 1896)
+++ code/trunk/src/orxonox/objects/Model.cc	(revision 1907)
@@ -46,5 +46,5 @@
 
     /**
-     * 
+     * @brief Constructor
      */
     Model::Model()
@@ -54,4 +54,7 @@
     }
 
+    /**
+     * @brief Destructor
+     */
     Model::~Model()
     {
@@ -86,5 +89,5 @@
       }
       if(this->isExactlyA(Class(Model)))
-        setObjectFrequency(300); //sync all 10 seconds (this only applies to asteroids and other isExactlyA(Model)
+        setObjectFrequency(300); //sync all 10 seconds (this only applies to asteroids and other isExactlyA(Model)'s
       return true;
     }
Index: code/trunk/src/orxonox/objects/ParticleProjectile.cc
===================================================================
--- code/trunk/src/orxonox/objects/ParticleProjectile.cc	(revision 1896)
+++ code/trunk/src/orxonox/objects/ParticleProjectile.cc	(revision 1907)
@@ -42,15 +42,14 @@
         RegisterObject(ParticleProjectile);
 
+        this->particles_ = new ParticleInterface("Orxonox/shot2", LODParticle::normal);
+        this->particles_->addToSceneNode(this->getNode());
+        this->particles_->setKeepParticlesInLocalSpace(true);
         if (this->owner_)
         {
-            this->particles_ = new ParticleInterface("Orxonox/shot2", LODParticle::normal);
-            this->particles_->addToSceneNode(this->getNode());
-            this->particles_->getAllEmitters()->setDirection(-this->owner_->getInitialDir());
-            this->particles_->setKeepParticlesInLocalSpace(true);
         }
-        else
-        {
-            this->particles_ = 0;
-        }
+//        else
+//        {
+//            this->particles_ = 0;
+//        }
 
         this->setConfigValues();
@@ -73,3 +72,10 @@
         this->particles_->setEnabled(this->isVisible());
     }
+    
+    bool ParticleProjectile::create(){
+      if(!Projectile::create())
+        return false;
+      this->particles_->getAllEmitters()->setDirection(-this->getOrientation()*Vector3(1,0,0));
+      return true;
+    }
 }
Index: code/trunk/src/orxonox/objects/ParticleProjectile.h
===================================================================
--- code/trunk/src/orxonox/objects/ParticleProjectile.h	(revision 1896)
+++ code/trunk/src/orxonox/objects/ParticleProjectile.h	(revision 1907)
@@ -45,4 +45,6 @@
             virtual void changedVisibility();
             void setConfigValues();
+            
+            virtual bool create();
 
         private:
Index: code/trunk/src/orxonox/objects/Projectile.cc
===================================================================
--- code/trunk/src/orxonox/objects/Projectile.cc	(revision 1896)
+++ code/trunk/src/orxonox/objects/Projectile.cc	(revision 1907)
@@ -41,4 +41,5 @@
 #include "ParticleSpawner.h"
 #include "Model.h"
+#include "Settings.h"
 
 namespace orxonox
@@ -56,13 +57,14 @@
         this->setStatic(false);
         this->translate(Vector3(55, 0, 0), Ogre::Node::TS_LOCAL);
-
+        
         if (this->owner_)
         {
+            this->setOrientation(this->owner_->getOrientation());
             this->setPosition(this->owner_->getPosition());
-            this->setOrientation(this->owner_->getOrientation());
             this->setVelocity(this->owner_->getInitialDir() * this->speed_);
         }
 
-        this->destroyTimer_.setTimer(this->lifetime_, false, this, createExecutor(createFunctor(&Projectile::destroyObject)));
+        if(!orxonox::Settings::isClient()) //only if not on client
+          this->destroyTimer_.setTimer(this->lifetime_, false, this, createExecutor(createFunctor(&Projectile::destroyObject)));
     }
 
@@ -122,3 +124,7 @@
         delete this;
     }
+    
+    bool Projectile::create(){
+      return WorldEntity::create();
+    }
 }
Index: code/trunk/src/orxonox/objects/Projectile.h
===================================================================
--- code/trunk/src/orxonox/objects/Projectile.h	(revision 1896)
+++ code/trunk/src/orxonox/objects/Projectile.h	(revision 1907)
@@ -45,4 +45,6 @@
             void destroyObject();
             virtual void tick(float dt);
+            
+            virtual bool create();
 
             static float getSpeed()
Index: code/trunk/src/orxonox/objects/SpaceShip.cc
===================================================================
--- code/trunk/src/orxonox/objects/SpaceShip.cc	(revision 1896)
+++ code/trunk/src/orxonox/objects/SpaceShip.cc	(revision 1907)
@@ -78,5 +78,5 @@
       for(it = ObjectList<SpaceShip>::begin(); it; ++it){
 	assert(it->isA(Class(SpaceShip)));
-        if( (it)->myShip_ || (network::Host::running() && network::Host::getShipID()==(it)->objectID) ){
+        if( (it)->myShip_ || (network::Host::running() && network::Host::getShipID()==(it)->getObjectID()) ){
 //	  COUT(1) << "^^^^^^^^^^ myShip_:" << *it << " classname: " << (*it)->getIdentifier()->getName() << " objectid: " << (*it)->objectID << std::endl;
           return *it;
@@ -173,18 +173,16 @@
         if (!myShip_)
         {
-            if (network::Host::running())
-                //COUT(3) << "this id: " << this->objectID << " myShipID: " << network::Host::getShipID() << std::endl;
-                if (network::Host::running() && objectID == network::Host::getShipID())
-                {
-                    if (!network::Host::isServer())
-                        setObjectMode(0x3);
-                    myShip_ = true;
-                }
-        }
-        else
-            this->setRadarObjectColour(this->getProjectileColour());
-        assert(Model::create());
-        this->init();
-        return true;
+            if (network::Host::running() && getObjectID() == network::Host::getShipID())
+            {
+                if (!network::Host::isServer())
+                    setObjectMode(0x3);
+                myShip_ = true;
+            }
+            else
+                this->setRadarObjectColour(this->getProjectileColour());
+      }
+      Model::create();
+      this->init();
+      return true;
     }
 
@@ -258,17 +256,20 @@
 
             // START CREATING ADDITIONAL EFFECTS
-            /*this->backlight_ = new Backlight(this->maxSpeed_, 0.8);
-            this->attachObject(this->backlight_);
-            this->backlight_->setPosition(-2.35, 0, 0.2);
-            this->backlight_->setColour(this->getProjectileColour());
-
-            this->smoke_ = new ParticleSpawner();
-            this->smoke_->setParticle("Orxonox/smoke5", LODParticle::normal, 0, 0, 3);
-            this->attachObject(this->smoke_);
-
-            this->fire_ = new ParticleSpawner();
-            this->fire_->setParticle("Orxonox/fire3", LODParticle::normal, 0, 0, 1);
-            this->attachObject(this->fire_);
-            */
+            if(!network::Host::running()){
+              this->backlight_ = new Backlight(this->maxSpeed_, 0.8);
+              this->backlight_->create();
+              this->attachObject(this->backlight_);
+              this->backlight_->setPosition(-2.35, 0, 0.2);
+              this->backlight_->setColour(this->getProjectileColour());
+  
+              this->smoke_ = new ParticleSpawner();
+              this->smoke_->setParticle("Orxonox/smoke5", LODParticle::normal, 0, 0, 3);
+              this->attachObject(this->smoke_);
+  
+              this->fire_ = new ParticleSpawner();
+              this->fire_->setParticle("Orxonox/fire3", LODParticle::normal, 0, 0, 1);
+              this->attachObject(this->fire_);
+            }
+            
             // END CREATING ADDITIONAL EFFECTS
 
@@ -374,13 +375,13 @@
       //if(!network::Host::running() || network::Host::getShipID()==objectID){ //TODO: check this
       if(myShip_){
-        COUT(4) << "requesting focus for camera" << std::endl;
+        COUT(5) << "requesting focus for camera" << std::endl;
         //CameraHandler::getInstance()->requestFocus(cam_);
         if(this->isExactlyA(Class(SpaceShip))){
           getFocus();
-          COUT(4) << "getting focus for obj id: " << objectID << std::endl;
+          COUT(4) << "getting focus for obj id: " << getObjectID() << std::endl;
         }else
-          COUT(4) << "not getting focus (not exactly spaceship) for obj id: " << objectID << std::endl;
+          COUT(5) << "not getting focus (not exactly spaceship) for obj id: " << getObjectID() << std::endl;
       }else
-        COUT(4) << "not getting focus (not my ship) for obj id: " << objectID << std::endl;
+        COUT(5) << "not getting focus (not my ship) for obj id: " << getObjectID() << std::endl;
     }
 
@@ -478,5 +479,5 @@
             projectile->setColour(this->getProjectileColour());
             projectile->create();
-            if (projectile->classID == 0)
+            if (projectile->getClassID() == 0)
             {
               COUT(3) << "generated projectile with classid 0" <<  std::endl; // TODO: remove this output
@@ -573,5 +574,5 @@
         }
 
-        COUT(5) << "steering our ship: " << objectID << std::endl;
+        COUT(5) << "steering our ship: " << getObjectID() << std::endl;
         this->acceleration_.x = 0;
         this->acceleration_.y = 0;
