Index: /orxonox/trunk/src/defs/debug.h
===================================================================
--- /orxonox/trunk/src/defs/debug.h	(revision 3682)
+++ /orxonox/trunk/src/defs/debug.h	(revision 3683)
@@ -63,5 +63,5 @@
 #define DEBUG_MODULE_COMMAND_NODE       0
 #define DEBUG_MODULE_GRAPHICS           0
-#define DEBUG_MODULE_LOAD               4
+#define DEBUG_MODULE_LOAD               1
 
 #define DEBUG_MODULE_IMPORTER           0
Index: /orxonox/trunk/src/lib/coord/p_node.cc
===================================================================
--- /orxonox/trunk/src/lib/coord/p_node.cc	(revision 3682)
+++ /orxonox/trunk/src/lib/coord/p_node.cc	(revision 3683)
@@ -258,4 +258,39 @@
 
 /**
+   \brief shift coordinate (abs and rel)
+   \param shift vector
+
+   this function shifts the current coordinates about the vector shift. this is
+   usefull because from some place else you can:
+   PNode* someNode = ...;
+   Vector objectMovement = calculateShift();
+   someNode->shiftCoor(objectMovement);
+
+   elsewhere you would have to:
+   PNode* someNode = ...;
+   Vector objectMovement = calculateShift();
+   Vector currentCoor = someNode->getRelCoor();
+   Vector newCoor = currentCoor + objectMovement;
+   someNode->setRelCoor(newCoor);
+   
+   yea right... shorter...
+
+*/
+void PNode::shiftCoor (Vector shift)
+{
+  if( this->bAbsCoorChanged)
+    {
+      *this->absCoordinate = *this->absCoordinate + shift;
+    }
+  else 
+    {
+      *this->relCoordinate = *this->relCoordinate + shift;
+      this->bRelCoorChanged = true;
+    }
+}
+
+
+
+/**
    \brief get relative direction
    \returns relative direction to its parent
@@ -353,4 +388,29 @@
 */
 void PNode::shiftDir (Quaternion* shift)
+{}
+
+
+/**
+   \brief shift coordinate (abs and rel)
+   \param shift vector
+
+   this function shifts the current coordinates about the vector shift. this is
+   usefull because from some place else you can:
+   PNode* someNode = ...;
+   Quaternion objectMovement = calculateShift();
+   someNode->shiftCoor(objectMovement);
+
+   elsewhere you would have to:
+   PNode* someNode = ...;
+   Quaternion objectMovement = calculateShift();
+   Quaternion currentCoor = someNode->getRelCoor();
+   Quaternion newCoor = currentCoor + objectMovement;
+   someNode->setRelCoor(newCoor);
+   
+   yea right... shorter...
+
+   \todo implement this
+*/
+void PNode::shiftDir (Quaternion shift)
 {}
 
Index: /orxonox/trunk/src/lib/coord/p_node.h
===================================================================
--- /orxonox/trunk/src/lib/coord/p_node.h	(revision 3682)
+++ /orxonox/trunk/src/lib/coord/p_node.h	(revision 3683)
@@ -64,4 +64,5 @@
   void setAbsCoor (Vector absCoord);
   void shiftCoor (Vector* shift);
+  void shiftCoor (Vector shift);
   //void shiftCoor (Vector shift);
 
@@ -73,4 +74,5 @@
   void setAbsDir (Quaternion absDir);
   void shiftDir (Quaternion* shift);
+  void shiftDir (Quaternion shift);
 
   float getSpeed();
Index: /orxonox/trunk/src/world_entities/player.cc
===================================================================
--- /orxonox/trunk/src/world_entities/player.cc	(revision 3682)
+++ /orxonox/trunk/src/world_entities/player.cc	(revision 3683)
@@ -52,5 +52,5 @@
   acceleration = 10.0;
   //weapons:
-  Weapon* wp = new TestGun(this, new Vector(), new Quaternion);
+  Weapon* wp = new TestGun(this, new Vector(), new Quaternion());
   this->weapons->add(wp);
   this->activeWeapon = wp;  
Index: /orxonox/trunk/src/world_entities/projectile.cc
===================================================================
--- /orxonox/trunk/src/world_entities/projectile.cc	(revision 3682)
+++ /orxonox/trunk/src/world_entities/projectile.cc	(revision 3683)
@@ -20,4 +20,5 @@
 
 #include "world_entity.h"
+#include "weapon.h"
 #include "null_parent.h"
 #include "model.h"
@@ -30,7 +31,8 @@
    \brief standard constructor
 */
-Projectile::Projectile () : WorldEntity()
+Projectile::Projectile (Weapon* weapon) : WorldEntity()
 {
   this->model = (Model*)ResourceManager::getInstance()->load("sphere", PRIM, RP_LEVEL);
+  this->weapon = weapon;
   this->flightDirection = NULL;
   this->currentLifeTime = 0.0f;
@@ -66,4 +68,5 @@
   Vector v(1, 0, 0);
   *this->flightDirection = flightDirection->apply(v);
+  this->flightDirection->normalize();
 }
 
@@ -86,5 +89,5 @@
 void Projectile::setSpeed(float speed)
 {
-  this->speed = speed;
+  this->speed = speed * 5;
   printf("Projectile::setting speed to: %f\n", this->speed);
 }
@@ -96,16 +99,11 @@
 void Projectile::tick (float time) 
 {
+  this->speed = this->weapon->getSpeed() * 5;  
+  this->shiftCoor(*this->flightDirection * this->speed * time);
+  printf("current speed is: %f\n", this->speed);
+
   this->currentLifeTime += time;
-  if( this->ttl < this->currentLifeTime)
-    {
-      *this->flightDirection = *this->flightDirection * this->speed * time;
-      this->shiftCoor(this->flightDirection);
-      this->flightDirection->debug();
-      return;
-    }
-  this->finalize();
-  //NullParent* np = NullParent::getInstance();
-  /* garbage colelction */
-  // \fix: there is no gc in this class, its all been done by GarbageCollector
+  if( this->ttl > this->currentLifeTime)
+    this->finalize();
 }
 
Index: /orxonox/trunk/src/world_entities/projectile.h
===================================================================
--- /orxonox/trunk/src/world_entities/projectile.h	(revision 3682)
+++ /orxonox/trunk/src/world_entities/projectile.h	(revision 3683)
@@ -10,4 +10,5 @@
 
 class Vector;
+class Weapon;
 
 class Projectile : public WorldEntity 
@@ -16,5 +17,5 @@
 
  public:
-  Projectile ();
+  Projectile (Weapon* weapon);
   virtual ~Projectile ();
 
@@ -35,4 +36,5 @@
   float ttl;                           //!< time to life, after this time, the projectile will garbage collect itself
   Vector* flightDirection;             //!< direction in which the shoot flights
+  Weapon* weapon;                      //!< weapon the shoot belongs to
   
 };
Index: /orxonox/trunk/src/world_entities/test_gun.cc
===================================================================
--- /orxonox/trunk/src/world_entities/test_gun.cc	(revision 3682)
+++ /orxonox/trunk/src/world_entities/test_gun.cc	(revision 3683)
@@ -41,5 +41,6 @@
 TestGun::TestGun (PNode* parent, Vector* coordinate, Quaternion* direction) 
   :  Weapon (parent, coordinate, direction) 
-{}
+{
+}
 
 
@@ -83,5 +84,5 @@
 {
   //printf("TestGun::fire() - firing weapon now ---------------------------\n");
-  Projectile* pj = new Projectile();
+  Projectile* pj = new Projectile(this);
 
   Vector* v = new Vector();
@@ -93,5 +94,5 @@
 
   pj->setFlightDirection(q);
-  //pj->setSpeed(this->getSpeed() * 0.025);
+  pj->setSpeed(this->getSpeed());
 
 
