Index: /orxonox/branches/particleEngine/src/lib/coord/p_node.h
===================================================================
--- /orxonox/branches/particleEngine/src/lib/coord/p_node.h	(revision 3957)
+++ /orxonox/branches/particleEngine/src/lib/coord/p_node.h	(revision 3958)
@@ -57,13 +57,13 @@
 
 
-  inline Vector getRelCoor () const { return this->relCoordinate; }
+  inline const Vector& getRelCoor () const { return this->relCoordinate; }
   void setRelCoor (const Vector& relCoord);
-  inline Vector getAbsCoor () const { return this->absCoordinate; }
+  inline const Vector& getAbsCoor () const { return this->absCoordinate; }
   void setAbsCoor (const Vector& absCoord);
   void shiftCoor (const Vector& shift);
 
-  inline Quaternion getRelDir () const { return this->relDirection; }
+  inline const Quaternion& getRelDir () const { return this->relDirection; }
   void setRelDir (const Quaternion& relDir);
-  inline Quaternion getAbsDir () const { return this->absDirection; }
+  inline const Quaternion& getAbsDir () const { return this->absDirection; }
   void setAbsDir (const Quaternion& absDir);
   void shiftDir (const Quaternion& shift);
Index: /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.cc
===================================================================
--- /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.cc	(revision 3957)
+++ /orxonox/branches/particleEngine/src/lib/graphics/particles/particle_emitter.cc	(revision 3958)
@@ -134,5 +134,5 @@
 	randDir.normalize();
 	randDir = (this->getAbsDir()*Quaternion(angle + randomAngle *((float)random()/RAND_MAX -.5), randDir)).apply(this->direction);
-	randDir = *randDir.getNormalized()*velocity + (this->getVelocity() * system->inheritSpeed);
+	randDir = randDir.getNormalized()*velocity + (this->getVelocity() * system->inheritSpeed);
 
 	system->addParticle(this->getAbsCoor(), randDir);
Index: /orxonox/branches/particleEngine/src/lib/math/vector.cc
===================================================================
--- /orxonox/branches/particleEngine/src/lib/math/vector.cc	(revision 3957)
+++ /orxonox/branches/particleEngine/src/lib/math/vector.cc	(revision 3958)
@@ -100,17 +100,17 @@
 */
 
-Vector* Vector::getNormalized()
+const Vector Vector::getNormalized()
 {
   float l = len();
   if(unlikely(l != 1.0))
     {
-      return this;
+      return *this;
     }
   else if(unlikely(l == 0.0))
     {
-      return 0;
+      return Vector();
     }
 
-  return new Vector(x / l, y /l, z / l);
+  return Vector(x / l, y /l, z / l);
 }
 
Index: /orxonox/branches/particleEngine/src/lib/math/vector.h
===================================================================
--- /orxonox/branches/particleEngine/src/lib/math/vector.h	(revision 3957)
+++ /orxonox/branches/particleEngine/src/lib/math/vector.h	(revision 3958)
@@ -31,10 +31,15 @@
 
   inline Vector operator+ (const Vector& v) const { return Vector(x + v.x, y + v.y, z + v.z); }
+  inline const Vector operator+= (const Vector& v) {this->x += v.x; this->y += v.y; this->z += v.z; return *this;}
   inline Vector operator- (const Vector& v) const { return Vector(x - v.x, y - v.y, z - v.z); }
+  inline const Vector operator-= (const Vector& v) {this->x -= v.x; this->y -= v.y; this->z -= v.z; return *this;}
   inline float operator* (const Vector& v) const { return x * v.x + y * v.y + z * v.z; }
+  inline const Vector operator*= (const Vector& v) {this->x *= v.x; this->y *= v.y; this->z *= v.z; return *this;}
   inline Vector operator* (float f) const { return Vector(x * f, y * f, z * f); }
+  inline const Vector operator*= (float f) {this->x *= f; this->y *= f; this->z *= f; return *this;}
   Vector operator/ (float f) const;
+  inline const Vector operator/= (float f) {this->x /= f; this->y /= f; this->z /= f; return *this;}
   float dot (const Vector& v) const;
-  inline Vector cross (const Vector& v) const {  return Vector(y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x ); }
+  inline Vector cross (const Vector& v) const { return Vector(y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x ); }
   void scale(const Vector& v);
   inline float len() const { return sqrt (x*x+y*y+z*z); }
@@ -50,5 +55,5 @@
 		      z = z / l; 
                     }
-  Vector* getNormalized();
+  const Vector getNormalized();
   Vector abs();
 
