Index: code/branches/FICN/src/orxonox/objects/CMakeLists.txt
===================================================================
--- code/branches/FICN/src/orxonox/objects/CMakeLists.txt	(revision 640)
+++ code/branches/FICN/src/orxonox/objects/CMakeLists.txt	(revision 643)
@@ -20,4 +20,5 @@
   BillboardSet.cc
   Light.cc
+  Projectile.cc
   weapon_system/ammunition_dump.cc
   weapon_system/barrel_gun.cc
Index: code/branches/FICN/src/orxonox/objects/Projectile.cc
===================================================================
--- code/branches/FICN/src/orxonox/objects/Projectile.cc	(revision 643)
+++ code/branches/FICN/src/orxonox/objects/Projectile.cc	(revision 643)
@@ -0,0 +1,40 @@
+#include "Projectile.h"
+#include "../core/CoreIncludes.h"
+
+namespace orxonox
+{
+    CreateFactory(Projectile);
+
+    Projectile::Projectile(SpaceShip* owner)
+    {
+        RegisterObject(Projectile);
+
+        this->owner_ = owner;
+
+        SetConfigValue(lifetime_, 10.0);
+        SetConfigValue(speed_, 2000.0);
+
+        this->billboard_.setBillboardSet("Examples/Flare", ColourValue(1.0, 1.0, 0.5), 1);
+        this->attachObject(this->billboard_.getBillboardSet());
+        this->scale(0.5);
+
+        if (this->owner_)
+        {
+            this->setStatic(false);
+            this->setOrientation(this->owner_->getOrientation());
+            this->setPosition(this->owner_->getPosition());
+            this->setVelocity(Vector3(1, 0, 0) * this->speed_);
+        }
+
+        this->destroyTimer_.setTimer(this->lifetime_, false, this, &Projectile::destroyObject);
+    }
+
+    Projectile::~Projectile()
+    {
+    }
+
+    void Projectile::destroyObject()
+    {
+        delete this;
+    }
+}
Index: code/branches/FICN/src/orxonox/objects/Projectile.h
===================================================================
--- code/branches/FICN/src/orxonox/objects/Projectile.h	(revision 643)
+++ code/branches/FICN/src/orxonox/objects/Projectile.h	(revision 643)
@@ -0,0 +1,27 @@
+#ifndef _Projectile_H__
+#define _Projectile_H__
+
+#include "WorldEntity.h"
+#include "BillboardSet.h"
+#include "SpaceShip.h"
+#include "Timer.h"
+
+namespace orxonox
+{
+    class Projectile : public WorldEntity
+    {
+        public:
+            Projectile(SpaceShip* owner = 0);
+            ~Projectile();
+            void destroyObject();
+
+        private:
+            SpaceShip* owner_;
+            BillboardSet billboard_;
+            float speed_;
+            float lifetime_;
+            Timer<Projectile> destroyTimer_;
+    };
+}
+
+#endif
Index: code/branches/FICN/src/orxonox/objects/SpaceShip.cc
===================================================================
--- code/branches/FICN/src/orxonox/objects/SpaceShip.cc	(revision 640)
+++ code/branches/FICN/src/orxonox/objects/SpaceShip.cc	(revision 643)
@@ -27,4 +27,5 @@
 
 #include "SpaceShip.h"
+#include "Projectile.h"
 
 #include "../../tinyxml/tinyxml.h"
@@ -45,6 +46,8 @@
 
         SetConfigValue(bInvertMouse_, true);
+        SetConfigValue(reloadTime_, 0.1);
 
         this->setMouseEventCallback_ = false;
+        this->bMousePressed_ = false;
 
         this->tt_ = 0;
@@ -52,4 +55,6 @@
         this->greenNode_ = 0;
         this->blinkTime_ = 0;
+
+        this->timeToReload_ = 0;
 
         this->moveForward_ = 0;
@@ -201,4 +206,16 @@
     }
 
+    bool SpaceShip::mousePressed(const OIS::MouseEvent &e, OIS::MouseButtonID id)
+    {
+        this->bMousePressed_ = true;
+
+        return true;
+    }
+
+    bool SpaceShip::mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id)
+    {
+        this->bMousePressed_ = false;
+    }
+
     void SpaceShip::tick(float dt)
     {
@@ -221,4 +238,15 @@
             this->redNode_->setScale(redScale, redScale, redScale);
             this->greenNode_->setScale(greenScale, greenScale, greenScale);
+        }
+
+        if (this->timeToReload_ > 0)
+            this->timeToReload_ -= dt;
+        else
+            this->timeToReload_ = 0;
+
+        if (this->bMousePressed_ && this->timeToReload_ <= 0)
+        {
+            Projectile* proj = new Projectile(this);
+            this->timeToReload_ = this->reloadTime_;
         }
 
Index: code/branches/FICN/src/orxonox/objects/SpaceShip.h
===================================================================
--- code/branches/FICN/src/orxonox/objects/SpaceShip.h	(revision 640)
+++ code/branches/FICN/src/orxonox/objects/SpaceShip.h	(revision 643)
@@ -36,6 +36,6 @@
             void maxSpeedLoopRightLeft(float maxSpeedLoopRightLeft);
             bool mouseMoved(const OIS::MouseEvent &e);
-            bool mousePressed(const OIS::MouseEvent &e, OIS::MouseButtonID id) { return true; }
-            bool mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id) { return true; }
+            bool mousePressed(const OIS::MouseEvent &e, OIS::MouseButtonID id);
+            bool mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id);
 
 
@@ -43,4 +43,5 @@
             bool bInvertMouse_;
             bool setMouseEventCallback_;
+            bool bMousePressed_;
 
             particle::ParticleInterface *tt_;
@@ -51,4 +52,7 @@
             Ogre::SceneNode* greenNode_;
             float blinkTime_;
+
+            float timeToReload_;
+            float reloadTime_;
 
             float moveForward_;
Index: code/branches/FICN/src/orxonox/objects/WorldEntity.cc
===================================================================
--- code/branches/FICN/src/orxonox/objects/WorldEntity.cc	(revision 640)
+++ code/branches/FICN/src/orxonox/objects/WorldEntity.cc	(revision 643)
@@ -75,5 +75,5 @@
         {
             this->velocity_ += (dt * this->acceleration_);
-            this->translate(dt * this->velocity_);
+            this->translate(dt * this->velocity_, Ogre::Node::TS_LOCAL);
 
             this->rotationRate_ += (dt * this->momentum_);
@@ -151,5 +151,5 @@
 
         create();
-        
+
     }
 
@@ -158,5 +158,5 @@
       return true;
     }
-    
+
     void WorldEntity::registerAllVariables()
     {
Index: code/branches/FICN/src/orxonox/objects/WorldEntity.h
===================================================================
--- code/branches/FICN/src/orxonox/objects/WorldEntity.h	(revision 640)
+++ code/branches/FICN/src/orxonox/objects/WorldEntity.h	(revision 643)
@@ -23,5 +23,5 @@
       virtual void loadParams(TiXmlElement* xmlElem);
       bool create();
-      
+
       inline Ogre::SceneNode* getNode()
           { return this->node_; }
@@ -53,4 +53,8 @@
           { this->node_->roll(angle, relativeTo); }
 
+      inline const Ogre::Quaternion& getOrientation()
+        { return this->node_->getOrientation(); }
+      inline void setOrientation(const Ogre::Quaternion& quat)
+        { this->node_->setOrientation(quat); }
       inline void rotate(const Vector3 &axis, const Radian &angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
         { this->node_->rotate(axis, angle, relativeTo); }
@@ -59,6 +63,4 @@
       inline void setDirection(const Vector3 &vec, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL, const Vector3 &localDirectionVector=Vector3::NEGATIVE_UNIT_Z)
         { this->node_->setDirection(vec, relativeTo, localDirectionVector); }
-      inline void setOrientation(const Ogre::Quaternion quat)
-        { this->node_->setOrientation(quat); }
       inline void lookAt(const Vector3 &targetPoint, Ogre::Node::TransformSpace relativeTo, const Vector3 &localDirectionVector=Vector3::NEGATIVE_UNIT_Z)
         { this->node_->lookAt(targetPoint, relativeTo, localDirectionVector); }
@@ -122,6 +124,4 @@
       inline const Radian& getMomentum() const
           { return this->momentum_; }
-      inline const Ogre::Quaternion& getOrientation()
-          { return this->node_->getOrientation(); }
 
       inline void setStatic(bool bStatic)
