Index: /branches/presentation/src/lib/collision_detection/aabb_tree_node.cc
===================================================================
--- /branches/presentation/src/lib/collision_detection/aabb_tree_node.cc	(revision 10770)
+++ /branches/presentation/src/lib/collision_detection/aabb_tree_node.cc	(revision 10771)
@@ -882,5 +882,5 @@
 
   /* DRAW SEPARATING PLANE */
-  if( drawMode & DRAW_SEPARATING_PLANE || drawMode & DRAW_ALL)
+  if( (drawMode & DRAW_SEPARATING_PLANE) || (drawMode & DRAW_ALL))
   {
     if( !(drawMode & DRAW_SINGLE && depth != 0))
Index: /branches/presentation/src/lib/collision_detection/obb_tree_node.cc
===================================================================
--- /branches/presentation/src/lib/collision_detection/obb_tree_node.cc	(revision 10770)
+++ /branches/presentation/src/lib/collision_detection/obb_tree_node.cc	(revision 10771)
@@ -782,5 +782,5 @@
 
   /* DRAW POLYGONS */
-  if( drawMode & DRAW_BV_POLYGON || drawMode & DRAW_ALL || drawMode & DRAW_BV_BLENDED)
+  if(( drawMode & DRAW_BV_POLYGON) || (drawMode & DRAW_ALL) || (drawMode & DRAW_BV_BLENDED))
   {
     if (top)
@@ -932,5 +932,5 @@
 
   /* DRAW SEPARATING PLANE */
-  if( drawMode & DRAW_SEPARATING_PLANE || drawMode & DRAW_ALL)
+  if( (drawMode & DRAW_SEPARATING_PLANE) || drawMode & DRAW_ALL)
   {
     if( !(drawMode & DRAW_SINGLE && depth != 0))
Index: /branches/presentation/src/lib/graphics/importer/static_model.cc
===================================================================
--- /branches/presentation/src/lib/graphics/importer/static_model.cc	(revision 10770)
+++ /branches/presentation/src/lib/graphics/importer/static_model.cc	(revision 10771)
@@ -211,9 +211,8 @@
     }
 
-//     printf("adding MP\n");
+
      this->addMountPoint( zAxis, yAxis, center, groupName);
-      // remove the group from the model list (mount points do not need to be drawn) 
-//      std::vector<StaticModelData::Group>::iterator tmpIt =  groupIt; 
-//      groupIt++; 
+     // remove the group from the model list (mount points do not need to be drawn) 
+     // remoing item iterates greoupIt!
      this->data->getGroups().erase(groupIt); 
   }
Index: /branches/presentation/src/util/hud.cc
===================================================================
--- /branches/presentation/src/util/hud.cc	(revision 10770)
+++ /branches/presentation/src/util/hud.cc	(revision 10771)
@@ -846,5 +846,5 @@
 	std::list<OrxGui::GLGuiEnergyWidgetVertical*>::iterator weaponWidget;
 	Vector2D pos = Vector2D(overlayWidth, 0.4*this->resY);
-	float largestWidgetSizeX = 0;
+// 	float largestWidgetSizeX = 0; //unused variable
 
  	for (weaponWidget = this->weaponsWidgetsPrim.begin(); weaponWidget != this->weaponsWidgetsPrim.end(); weaponWidget++)
Index: /branches/presentation/src/world_entities/projectiles/projectile_weapon.cc
===================================================================
--- /branches/presentation/src/world_entities/projectiles/projectile_weapon.cc	(revision 10770)
+++ /branches/presentation/src/world_entities/projectiles/projectile_weapon.cc	(revision 10771)
@@ -147,5 +147,5 @@
 }
 
-
+/*
 void ProjectileWeapon::collidesWith (WorldEntity* target, const Vector& location)
 {
@@ -154,5 +154,5 @@
   this->destroy(target);
 }
-
+*/
 
 
Index: /branches/presentation/src/world_entities/projectiles/projectile_weapon.h
===================================================================
--- /branches/presentation/src/world_entities/projectiles/projectile_weapon.h	(revision 10770)
+++ /branches/presentation/src/world_entities/projectiles/projectile_weapon.h	(revision 10771)
@@ -59,5 +59,5 @@
     virtual void destroy (WorldEntity* killer);
 
-    virtual void collidesWith (WorldEntity* target, const Vector& location);  //!< collision handler; used against SpaceShip as most target will be
+//    virtual void collidesWith (WorldEntity* target, const Vector& location);  //!< collision handler; used against SpaceShip as most target will be
 
 
Index: /branches/presentation/src/world_entities/projectiles/test_bullet.cc
===================================================================
--- /branches/presentation/src/world_entities/projectiles/test_bullet.cc	(revision 10770)
+++ /branches/presentation/src/world_entities/projectiles/test_bullet.cc	(revision 10771)
@@ -35,5 +35,5 @@
   this->registerObject(this, TestBullet::_objectList);
 
-  this->loadModel("models/projectiles/orx-rocket.obj", .3);
+  this->loadModel("models/projectiles/orx-rocket.obj", .6); // FIXME model no longer avaiable
 
   this->setMinEnergy(1);
@@ -170,5 +170,5 @@
   this->getAbsDir().matrix (matrix);
   glMultMatrixf((float*)matrix);
-  glScalef(2.0, 2.0, 2.0);
+//   glScalef(2.0, 2.0, 2.0); // no double rescale, changed size in modelloader
   this->getModel()->draw();
 
Index: /branches/presentation/src/world_entities/weapons/disruptor.cc
===================================================================
--- /branches/presentation/src/world_entities/weapons/disruptor.cc	(revision 10770)
+++ /branches/presentation/src/world_entities/weapons/disruptor.cc	(revision 10771)
@@ -55,14 +55,4 @@
 Disruptor::~Disruptor()
 {
-  for (int i = 0; i < this->getBarrels(); i++)
-  {
-   delete [] this->shootAnim[i];
-   delete [] this->objComp[i];
-  }
-  delete [] this->emissionPoint;
-
-   delete [] this->shootAnim;
-   delete [] this->objComp;
-
 }
 
@@ -99,32 +89,9 @@
   this->setBarrels(1);
   this->setSegs(1);
-  this->activeBarrel = 0;
 
+  this->setEmissionPoint(Vector(1.672, 0.0, 0.0) * this->getScaling());
 
-
-  this->objComp = new PNode**[this->getBarrels()];
-  this->emissionPoint = new PNode*[this->getBarrels()];
-  this->shootAnim = new Animation3D**[this->getBarrels()];
-  for (int i = 0; i < this->getBarrels(); i++)
-  {
-    this->objComp[i] = new PNode* [this->getSegs()];
-    this->emissionPoint[i] = new PNode;
-    this->emissionPoint[i]->setParent(this);  //Parenting emissionPoint to Weapon
-    this->emissionPoint[i]->setName("EmissionPoint");
-    this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
-    this->shootAnim[i] = new Animation3D* [this->getSegs()];
-    for(int j = 0; j < this->getSegs(); j++)
-    {
-      this->objComp[i][j] = new PNode;
-      this->shootAnim[i][j] = new Animation3D(this->objComp[i][j]);
-      this->shootAnim[i][j]->setInfinity(ANIM_INF_CONSTANT);
-    }
-  }
-
-  this->emissionPoint[0]->setRelCoor(Vector(1.672, 0.0, 0.0) * this->getScaling());
-
-
-  this->shootAnim[0][0]->addKeyFrame(Vector(0.0, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
-  this->shootAnim[0][0]->addKeyFrame(Vector(-0.5, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.2, ANIM_LINEAR, ANIM_NULL);
+  this->getShootAnim(0, 0)->addKeyFrame(Vector(0.0, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
+  this->getShootAnim(0, 0)->addKeyFrame(Vector(-0.5, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.2, ANIM_LINEAR, ANIM_NULL);
 //   this->shootAnim[0][0]->addKeyFrame(Vector(0.0, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
 
@@ -158,10 +125,10 @@
   pj->setVelocity((tmp.getNormalized())*130 + VECTOR_RAND(1));
 
-  pj->setAbsCoor(this->emissionPoint[this->activeBarrel]->getAbsCoor());
+  pj->setAbsCoor(this->getEmissionPoint());
   pj->setAbsDir(this->getAbsDir());
   pj->activate();
 
 
-  this->shootAnim[0][0]->replay();
+  this->getShootAnim(0, 0)->replay();
 }
 
@@ -196,7 +163,8 @@
     // Barrel
     glPushMatrix();
-      glTranslatef(this->objComp[0][0]->getAbsCoor().x, this->objComp[0][0]->getAbsCoor().y, this->objComp[0][0]->getAbsCoor().z);
+      glTranslatef(this->getObjCompx(0,0), this->getObjCompy(0,0), this->getObjCompz(0,0));
       static_cast<StaticModel*>(this->getModel())->draw(0);
     glPopMatrix();
+
   glPopMatrix();
 }
Index: /branches/presentation/src/world_entities/weapons/disruptor.h
===================================================================
--- /branches/presentation/src/world_entities/weapons/disruptor.h	(revision 10770)
+++ /branches/presentation/src/world_entities/weapons/disruptor.h	(revision 10771)
@@ -34,11 +34,5 @@
 
   private:
-    PNode*** objComp;
-    Animation3D*** shootAnim;
-    PNode** emissionPoint;
 
-    int activeBarrel;
-
-//     int leftRight;
 };
 
Index: /branches/presentation/src/world_entities/weapons/heavy_blaster.cc
===================================================================
--- /branches/presentation/src/world_entities/weapons/heavy_blaster.cc	(revision 10770)
+++ /branches/presentation/src/world_entities/weapons/heavy_blaster.cc	(revision 10771)
@@ -30,6 +30,4 @@
 
 CREATE_FACTORY(HeavyBlaster);
-// ObjectListDefinition(HeavyBlaster);
-
 
 
@@ -37,8 +35,7 @@
  * Standard constructor
  */
-HeavyBlaster::HeavyBlaster (int leftRight)
+HeavyBlaster::HeavyBlaster (int leftRight = W_RIGHT)
  : Weapon()
 {
-//     this->registerObject(this, HeavyBlaster::_objectList);
 
     this->init(leftRight);
@@ -61,26 +58,4 @@
 HeavyBlaster::~HeavyBlaster()
 {
-  for (int i = 0; i < this->getBarrels(); i++)
-  {
-   delete [] this->shootAnim[i];
-   delete [] this->objComp[i];
-  }
-  delete [] this->emissionPoint;
-
-   delete [] this->shootAnim;
-   delete [] this->objComp;
-/*
-    for(int j = 0; j < this->getSegs(); j++)
-    {
-      delete this->shootAnim[i][j];
-      delete this->objComp[i][j];
-    }
-    delete this->shootAnim[i];
-    delete this->objComp[i];
-    delete this->emissionPoint[i];
-  }*/
-
-//  this->deconstr();
-     // model will be deleted from WorldEntity-destructor
 }
 
@@ -94,7 +69,4 @@
 
   this->leftRight = leftRight;
-  //this->registerObject(this, HeavyBlaster::_objectList);
-
-//  this->model = (Model*)ResourceManager::getInstance()->load("models/guns/test_gun.obj", OBJ, RP_CAMPAIGN);
 
   this->loadModel("models/guns/frag_cannon2.obj", .4);
@@ -108,5 +80,4 @@
   this->setEnergyMax(500);
   this->increaseEnergy(500);
-  //this->minCharge = 2;
 
   this->setActionSound(WA_SHOOT, "sounds/guns/laser.wav");
@@ -120,48 +91,27 @@
   this->setBarrels(3);
   this->setSegs(2);
-  this->activeBarrel = 0;
-
-
-
-  this->objComp = new PNode**[this->getBarrels()];
-  this->emissionPoint = new PNode*[this->getBarrels()];
-  this->shootAnim = new Animation3D**[this->getBarrels()];
-  for (int i = 0; i < this->getBarrels(); i++)
+
+
+  if (this->leftRight == W_LEFT)
   {
-    this->objComp[i] = new PNode* [this->getSegs()];
-    this->emissionPoint[i] = new PNode;
-    this->emissionPoint[i]->setParent(this);      //Parenting emissionPoint to Weapons
-    this->emissionPoint[i]->setName("EmissionPoint");
-    this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
-    this->shootAnim[i] = new Animation3D* [this->getSegs()];
-    for(int j = 0; j < this->getSegs(); j++)
-    {
-      this->objComp[i][j] = new PNode;
-      this->shootAnim[i][j] = new Animation3D(this->objComp[i][j]);
-      this->shootAnim[i][j]->setInfinity(ANIM_INF_CONSTANT);
-    }
-  }
-
-  if (this->leftRight == W_RIGHT)
-  {
-    this->emissionPoint[0]->setRelCoor(Vector(1.1, 0.14, 0.06));
-    this->emissionPoint[1]->setRelCoor(Vector(1.1, -.06, 0.14));
-    this->emissionPoint[2]->setRelCoor(Vector(1.1, 0.06, -.14));
+    this->setEmissionPoint(Vector(1.1, 0.14, -.06), 0);
+    this->setEmissionPoint(Vector(1.1, -.06, -.14), 1);
+    this->setEmissionPoint(Vector(1.1, 0.06, 0.14), 2);
   }
   else {
-    this->emissionPoint[0]->setRelCoor(Vector(1.1, 0.14, -.06));
-    this->emissionPoint[1]->setRelCoor(Vector(1.1, -.06, -.14));
-    this->emissionPoint[2]->setRelCoor(Vector(1.1, 0.06, 0.14));
+    this->setEmissionPoint(Vector(1.1, 0.14, 0.06), 0);
+    this->setEmissionPoint(Vector(1.1, -.06, 0.14), 1);
+    this->setEmissionPoint(Vector(1.1, 0.06, -.14), 2);
   }
 
 
   for (int i = 0; i < this->getBarrels(); i++){
-    this->shootAnim[i][0]->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.01, ANIM_LINEAR, ANIM_NULL);
-    this->shootAnim[i][0]->addKeyFrame(Vector(-0.3, 0.0, 0.0), Quaternion(), 0.9, ANIM_LINEAR, ANIM_NULL);
-    this->shootAnim[i][0]->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.5, ANIM_LINEAR, ANIM_NULL);
-
-    this->shootAnim[i][1]->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
-    this->shootAnim[i][1]->addKeyFrame(Vector(-0.4, 0.0, 0.0), Quaternion(), 1.2, ANIM_LINEAR, ANIM_NULL);
-    this->shootAnim[i][1]->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.2, ANIM_LINEAR, ANIM_NULL);
+    this->getShootAnim(i, 0)->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.01, ANIM_LINEAR, ANIM_NULL);
+    this->getShootAnim(i, 0)->addKeyFrame(Vector(-0.3, 0.0, 0.0), Quaternion(), 0.9, ANIM_LINEAR, ANIM_NULL);
+    this->getShootAnim(i, 0)->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.5, ANIM_LINEAR, ANIM_NULL);
+
+    this->getShootAnim(i, 1)->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
+    this->getShootAnim(i, 1)->addKeyFrame(Vector(-0.4, 0.0, 0.0), Quaternion(), 1.2, ANIM_LINEAR, ANIM_NULL);
+    this->getShootAnim(i, 1)->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.2, ANIM_LINEAR, ANIM_NULL);
   }
 
@@ -192,5 +142,5 @@
   pj->setVelocity(this->getAbsDir().apply(Vector(1,0,0))*130 + VECTOR_RAND(1));
 
-  pj->setAbsCoor(this->emissionPoint[this->activeBarrel]->getAbsCoor());
+  pj->setAbsCoor(this->getEmissionPoint());
   pj->setAbsDir(this->getAbsDir());
   pj->activate();
@@ -198,8 +148,7 @@
   // initiate animation
   for (int i = 0; i < this->getSegs(); i++)
-    this->shootAnim[this->activeBarrel][i]->replay();
-
-  // switch barrel
-  this->activeBarrel = (this->activeBarrel + 1) % this->getBarrels();
+    this->getShootAnim(this->getActiveBarrel(), i)->replay(); // FIXME needs clean up
+
+  this->cycleBarrel();
 }
 
@@ -230,37 +179,37 @@
 
   if (this->leftRight == W_LEFT)
-    glScalef(1.0, 1.0, -1.0);
-
-  static_cast<StaticModel*>(this->getModel())->draw(6);
-
-  glPushMatrix();
-    glTranslatef (this->objComp[0][0]->getAbsCoor().x, this->objComp[0][0]->getAbsCoor().y, this->objComp[0][0]->getAbsCoor().z);
-    static_cast<StaticModel*>(this->getModel())->draw(2);
-  glPopMatrix();
-
-  glPushMatrix();
-    glTranslatef (this->objComp[1][0]->getAbsCoor().x, this->objComp[1][0]->getAbsCoor().y, this->objComp[1][0]->getAbsCoor().z);
-    static_cast<StaticModel*>(this->getModel())->draw(3);
-  glPopMatrix();
-
-  glPushMatrix();
-    glTranslatef (this->objComp[2][0]->getAbsCoor().x, this->objComp[2][0]->getAbsCoor().y, this->objComp[2][0]->getAbsCoor().z);
-    static_cast<StaticModel*>(this->getModel())->draw(1);
-  glPopMatrix();
-
-  glPushMatrix();
-    glTranslatef (this->objComp[0][1]->getAbsCoor().x, this->objComp[0][1]->getAbsCoor().y, this->objComp[0][1]->getAbsCoor().z);
-    static_cast<StaticModel*>(this->getModel())->draw(4);
-  glPopMatrix();
-
-  glPushMatrix();
-    glTranslatef (this->objComp[1][1]->getAbsCoor().x, this->objComp[1][1]->getAbsCoor().y, this->objComp[1][1]->getAbsCoor().z);
-    static_cast<StaticModel*>(this->getModel())->draw(5);
-  glPopMatrix();
-
-  glPushMatrix();
-    glTranslatef (this->objComp[2][1]->getAbsCoor().x, this->objComp[2][1]->getAbsCoor().y, this->objComp[2][1]->getAbsCoor().z);
-    static_cast<StaticModel*>(this->getModel())->draw(0);
-  glPopMatrix();
+    glScalef(1.0, 1.0, -1.0); //FIXME check weather this causes a slowdown...
+
+    static_cast<StaticModel*>(this->getModel())->draw(6);
+
+    glPushMatrix();
+      glTranslatef (this->getObjCompx(0,0), this->getObjCompy(0,0), this->getObjCompz(0,0));
+      static_cast<StaticModel*>(this->getModel())->draw(2);
+    glPopMatrix();
+
+    glPushMatrix();
+      glTranslatef (this->getObjCompx(1,0), this->getObjCompy(1,0), this->getObjCompz(1,0));
+      static_cast<StaticModel*>(this->getModel())->draw(3);
+    glPopMatrix();
+
+    glPushMatrix();
+      glTranslatef (this->getObjCompx(2,0), this->getObjCompy(2,0), this->getObjCompz(2,0));
+      static_cast<StaticModel*>(this->getModel())->draw(1);
+    glPopMatrix();
+
+    glPushMatrix();
+      glTranslatef (this->getObjCompx(0,1), this->getObjCompy(0,1), this->getObjCompz(0,1));
+      static_cast<StaticModel*>(this->getModel())->draw(4);
+    glPopMatrix();
+
+    glPushMatrix();
+      glTranslatef (this->getObjCompx(1,1), this->getObjCompy(1,1), this->getObjCompz(1,1));
+      static_cast<StaticModel*>(this->getModel())->draw(5);
+    glPopMatrix();
+
+    glPushMatrix();
+      glTranslatef (this->getObjCompx(2,1), this->getObjCompy(2,1), this->getObjCompz(2,1));
+      static_cast<StaticModel*>(this->getModel())->draw(0);
+    glPopMatrix();
 
   glPopMatrix();
Index: /branches/presentation/src/world_entities/weapons/heavy_blaster.h
===================================================================
--- /branches/presentation/src/world_entities/weapons/heavy_blaster.h	(revision 10770)
+++ /branches/presentation/src/world_entities/weapons/heavy_blaster.h	(revision 10771)
@@ -2,9 +2,5 @@
 #define HEAVY_BLASTER_H
 
-
 #include "weapon.h"
-
-#define    W_LEFT        0
-#define    W_RIGHT       1
 
 /**
@@ -34,9 +30,4 @@
 
   private:
-    PNode*** objComp;
-    Animation3D*** shootAnim;
-    PNode** emissionPoint;
-
-    int activeBarrel;
 
     int leftRight;
Index: /branches/presentation/src/world_entities/weapons/light_blaster.cc
===================================================================
--- /branches/presentation/src/world_entities/weapons/light_blaster.cc	(revision 10770)
+++ /branches/presentation/src/world_entities/weapons/light_blaster.cc	(revision 10771)
@@ -53,13 +53,4 @@
 {
 
-  for (int i = 0; i < this->getBarrels(); i++)
-  {
-   //delete [] this->shootAnim[i];
-   delete [] this->objComp[i];
-  }
-  delete [] this->emissionPoint;
-   //delete [] this->shootAnim;
-   delete [] this->objComp;
-
 }
 
@@ -93,28 +84,9 @@
 
   this->setBarrels(3);
-  this->setSegs(1);
-  this->activeBarrel = 0;
+  this->setSegs(1); //could be left out
 
-  this->objComp = new PNode**[this->getBarrels()];
-  this->emissionPoint = new PNode*[this->getBarrels()];
-//   this->shootAnim = new Animation3D**[this->getBarrels()];
-  for (int i = 0; i < this->getBarrels(); i++)
-  {
-    this->objComp[i] = new PNode* [this->getSegs()];
-    this->emissionPoint[i] = new PNode;
-    this->emissionPoint[i]->setParent(this);
-    this->emissionPoint[i]->setName("EmissionPoint");
-    this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
-    for(int j = 0; j < this->getSegs(); j++)
-    {
-      this->objComp[i][j] = new PNode;
-//       this->shootAnim[i][j] = new Animation3D(this->objComp[i][j]);
-//       this->shootAnim[i][j]->setInfinity(ANIM_INF_CONSTANT);
-    }
-  }
-
-  this->emissionPoint[0]->setRelCoor(Vector(2.2, 0.0, 0.1));
-  this->emissionPoint[1]->setRelCoor(Vector(2.2, -0.07, -0.05));
-  this->emissionPoint[2]->setRelCoor(Vector(2.2, 0.07, -0.05));
+  this->setEmissionPoint(Vector(2.2, 0.0, 0.1), 0);
+  this->setEmissionPoint(Vector(2.2, -0.07, -0.05), 1);
+  this->setEmissionPoint(Vector(2.2, 0.07, -0.05), 2);
 
 //   Animation3D* animation1 = this->getAnimation(WS_SHOOTING, this);
@@ -148,14 +120,10 @@
   pj->setVelocity(this->getAbsDir().apply(Vector(1,0,0))*180);
 
-  pj->setAbsCoor(this->emissionPoint[this->activeBarrel]->getAbsCoor());
+  pj->setAbsCoor(this->getEmissionPoint());
   pj->setAbsDir(this->getAbsDir());
 //   pj->toList(OM_GROUP_01_PROJ);
   pj->activate();
 
-//   for (int i = 0; i < this->getSegs(); i++)
-//     this->shootAnim[this->activeBarrel][i]->replay();
-
-  // switch barrel
-  this->activeBarrel = (this->activeBarrel + 1) % this->getBarrels();
+  this->cycleBarrel();
 }
 
Index: /branches/presentation/src/world_entities/weapons/light_blaster.h
===================================================================
--- /branches/presentation/src/world_entities/weapons/light_blaster.h	(revision 10770)
+++ /branches/presentation/src/world_entities/weapons/light_blaster.h	(revision 10771)
@@ -31,10 +31,5 @@
 
   private:
-    PNode*** objComp;
-    Animation3D*** shootAnim;
 
-    PNode** emissionPoint;
-
-    int activeBarrel;
 };
 
Index: /branches/presentation/src/world_entities/weapons/medium_blaster.cc
===================================================================
--- /branches/presentation/src/world_entities/weapons/medium_blaster.cc	(revision 10770)
+++ /branches/presentation/src/world_entities/weapons/medium_blaster.cc	(revision 10771)
@@ -54,10 +54,4 @@
 MediumBlaster::~MediumBlaster()
 {
-      // model will be deleted from WorldEntity-destructor
-  for (int i = 0; i < this->getBarrels(); i++)
-  {
-   delete [] this->shootAnim[i];
-  }
-  delete [] this->shootAnim;
 }
 
@@ -76,6 +70,6 @@
 
   this->setStateDuration(WS_RELOADING, 0);
-  this->setStateDuration(WS_ACTIVATING, .5); //.5);
-  this->setStateDuration(WS_DEACTIVATING, 1); // 1);
+  this->setStateDuration(WS_ACTIVATING, .5);
+  this->setStateDuration(WS_DEACTIVATING, 1);
 
   this->setEnergyMax(500);
@@ -94,33 +88,14 @@
   this->setBarrels(1);
   this->setSegs(2);
-  this->activeBarrel = 0;
 
-  this->objComp = new PNode**[this->getBarrels()];
-  this->emissionPoint = new PNode*[this->getBarrels()];
-  this->shootAnim = new Animation3D**[this->getBarrels()];
-  for (int i = 0; i < this->getBarrels(); i++)
-  {
-    this->objComp[i] = new PNode* [this->getSegs()];
-    this->emissionPoint[i] = new PNode;
-    this->emissionPoint[i]->setParent(this);  //Parenting emissionPoint to Weapon
-    this->emissionPoint[i]->setName("EmissionPoint");
-    this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
-    this->shootAnim[i] = new Animation3D* [this->getSegs()];
-    for(int j = 0; j < this->getSegs(); j++)
-    {
-      this->objComp[i][j] = new PNode;
-      this->shootAnim[i][j] = new Animation3D(this->objComp[i][j]);
-      this->shootAnim[i][j]->setInfinity(ANIM_INF_CONSTANT);
-    }
-  }
 
   for (int i = 0; i < this->getBarrels(); i++){
-    this->shootAnim[i][0]->addKeyFrame(Vector(0.0, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.04, ANIM_LINEAR, ANIM_NULL);
-    this->shootAnim[i][0]->addKeyFrame(Vector(-1.0, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.15, ANIM_LINEAR, ANIM_NULL);
-    this->shootAnim[i][0]->addKeyFrame(Vector(0.0, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.01, ANIM_LINEAR, ANIM_NULL);
+    this->getShootAnim(i, 0)->addKeyFrame(Vector(0.0, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.04, ANIM_LINEAR, ANIM_NULL);
+    this->getShootAnim(i, 0)->addKeyFrame(Vector(-1.0, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.15, ANIM_LINEAR, ANIM_NULL);
+    this->getShootAnim(i, 0)->addKeyFrame(Vector(0.0, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.01, ANIM_LINEAR, ANIM_NULL);
 
-    this->shootAnim[i][1]->addKeyFrame(Vector(0.0, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.04, ANIM_LINEAR, ANIM_NULL);
-    this->shootAnim[i][1]->addKeyFrame(Vector(.5, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.15, ANIM_LINEAR, ANIM_NULL);
-    this->shootAnim[i][1]->addKeyFrame(Vector(0.0, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.01, ANIM_LINEAR, ANIM_NULL);
+    this->getShootAnim(i, 1)->addKeyFrame(Vector(0.0, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.04, ANIM_LINEAR, ANIM_NULL);
+    this->getShootAnim(i, 1)->addKeyFrame(Vector(.5, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.15, ANIM_LINEAR, ANIM_NULL);
+    this->getShootAnim(i, 1)->addKeyFrame(Vector(0.0, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.01, ANIM_LINEAR, ANIM_NULL);
   }
 
@@ -131,5 +106,5 @@
   animation3->setInfinity(ANIM_INF_CONSTANT);
 
-  this->emissionPoint[0]->setRelCoor(Vector(3.9, 0.0, 0.0) * this->getScaling());
+  this->setEmissionPoint(Vector(3.9, 0.0, 0.0) * this->getScaling());
 
   animation2->addKeyFrame(Vector(0.0, -1.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
@@ -159,5 +134,5 @@
 
   for (int i = 0; i < this->getSegs(); i++)
-    this->shootAnim[this->activeBarrel][i]->replay();
+    this->getShootAnim(this->getActiveBarrel(), i)->replay(); // FIXME needs clean up
 }
 
@@ -187,10 +162,10 @@
 
   glPushMatrix();
-    glTranslatef (this->objComp[0][0]->getAbsCoor().x, this->objComp[0][0]->getAbsCoor().y, this->objComp[0][0]->getAbsCoor().z);
+    glTranslatef (this->getObjCompx(0,0), this->getObjCompy(0,0), this->getObjCompz(0,0));
     static_cast<StaticModel*>(this->getModel())->draw(1);
   glPopMatrix();
 
   glPushMatrix();
-    glTranslatef (this->objComp[0][1]->getAbsCoor().x, this->objComp[0][1]->getAbsCoor().y, this->objComp[0][1]->getAbsCoor().z);
+    glTranslatef (this->getObjCompx(0,1), this->getObjCompy(0,1), this->getObjCompz(0,1));
     static_cast<StaticModel*>(this->getModel())->draw(2);
   glPopMatrix();
Index: /branches/presentation/src/world_entities/weapons/medium_blaster.h
===================================================================
--- /branches/presentation/src/world_entities/weapons/medium_blaster.h	(revision 10770)
+++ /branches/presentation/src/world_entities/weapons/medium_blaster.h	(revision 10771)
@@ -31,9 +31,4 @@
 
   private:
-    PNode*** objComp;
-    Animation3D*** shootAnim;
-    PNode** emissionPoint;
-
-    int activeBarrel;
 
 };
Index: /branches/presentation/src/world_entities/weapons/nadion_laser.cc
===================================================================
--- /branches/presentation/src/world_entities/weapons/nadion_laser.cc	(revision 10770)
+++ /branches/presentation/src/world_entities/weapons/nadion_laser.cc	(revision 10771)
@@ -54,10 +54,4 @@
 NadionLaser::~NadionLaser()
 {
-  // model will be deleted from WorldEntity-destructor
-  for (int i = 0; i < this->getBarrels(); i++)
-  {
-   delete [] this->shootAnim[i];
-  }
-  delete [] this->shootAnim;
 }
 
@@ -92,28 +86,8 @@
 
 
-  this->setBarrels(1);
-  this->setSegs(1);
-  this->activeBarrel = 0;
+  this->setBarrels(1); // could be left out
+  this->setSegs(1);    // could be left out
 
-  this->objComp = new PNode**[this->getBarrels()];
-  this->emissionPoint = new PNode*[this->getBarrels()];
-  this->shootAnim = new Animation3D**[this->getBarrels()];
-  for (int i = 0; i < this->getBarrels(); i++)
-  {
-    this->objComp[i] = new PNode* [this->getSegs()];
-    this->emissionPoint[i] = new PNode;
-    this->emissionPoint[i]->setParent(this);  //Parenting emissionPoint to Weapon
-    this->emissionPoint[i]->setName("EmissionPoint");
-    this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
-    this->shootAnim[i] = new Animation3D* [this->getSegs()];
-    for(int j = 0; j < this->getSegs(); j++)
-    {
-      this->objComp[i][j] = new PNode;
-      this->shootAnim[i][j] = new Animation3D(this->objComp[i][j]);
-      this->shootAnim[i][j]->setInfinity(ANIM_INF_CONSTANT);
-    }
-  }
-
-  this->emissionPoint[0]->setRelCoor(Vector(1.680, 0.0, 0.0) * this->getScaling());
+  this->setEmissionPoint(Vector(1.680, 0.0, 0.0) * this->getScaling());
 
   Animation3D* animation2 = this->getAnimation(WS_ACTIVATING, this);
@@ -143,4 +117,5 @@
 
   Vector dir = (this->getDefaultTarget()->getAbsCoor() - this->getAbsCoor()).getNormalized();
+  //FIXME direction calculation is a mess, needs to be cleaned up
   // HACK direction AbsDir calulation 
   Vector up = dir.cross(VECTOR_RAND(1));
Index: /branches/presentation/src/world_entities/weapons/nadion_laser.h
===================================================================
--- /branches/presentation/src/world_entities/weapons/nadion_laser.h	(revision 10770)
+++ /branches/presentation/src/world_entities/weapons/nadion_laser.h	(revision 10771)
@@ -27,9 +27,4 @@
 
   private:
-    PNode*** objComp;
-    Animation3D*** shootAnim;
-    PNode** emissionPoint;
-
-    int activeBarrel;
 
 };
Index: /branches/presentation/src/world_entities/weapons/rf_cannon.cc
===================================================================
--- /branches/presentation/src/world_entities/weapons/rf_cannon.cc	(revision 10770)
+++ /branches/presentation/src/world_entities/weapons/rf_cannon.cc	(revision 10771)
@@ -55,9 +55,4 @@
 RFCannon::~RFCannon()
 {
-  for (int i = 0; i < this->getBarrels(); i++)
-    delete [] this->objComp[i];
-
-  delete [] this->emissionPoint;
-  delete [] this->objComp;
 }
 
@@ -91,23 +86,11 @@
   this->setBarrels(4);
   this->setSegs(1);
-  this->activeBarrel = (rand() % 4);
+  this->setActiveBarrel(rand() % 4);
 
-  this->objComp = new PNode**[this->getBarrels()];
-  this->emissionPoint = new PNode*[this->getBarrels()];
-  for (int i = 0; i < this->getBarrels(); i++) {
-    this->objComp[i] = new PNode* [this->getSegs()];
-    this->emissionPoint[i] = new PNode;
-    this->emissionPoint[i]->setParent(this);
-    this->emissionPoint[i]->setName("EmissionPoint");
-    this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
-    for(int j = 0; j < this->getSegs(); j++) {
-      this->objComp[i][j] = new PNode;
-    }
-  }
 
-  this->emissionPoint[0]->setRelCoor(Vector(4.1, 0.0, 0.75) * this->getScaling());
-  this->emissionPoint[1]->setRelCoor(Vector(4.1, 0.45, 0.0) * this->getScaling());
-  this->emissionPoint[2]->setRelCoor(Vector(4.1, 0.0, -0.75) * this->getScaling());
-  this->emissionPoint[3]->setRelCoor(Vector(4.1, -0.45, 0.0) * this->getScaling());
+  this->setEmissionPoint(Vector(4.1, 0.0, 0.75) * this->getScaling(), 0);
+  this->setEmissionPoint(Vector(4.1, 0.45, 0.0) * this->getScaling(), 1);
+  this->setEmissionPoint(Vector(4.1, 0.0, -0.75) * this->getScaling(), 2);
+  this->setEmissionPoint(Vector(4.1, -0.45, 0.0) * this->getScaling(), 3);
 
   Animation3D* animation2 = this->getAnimation(WS_ACTIVATING, this);
@@ -140,5 +123,6 @@
   pj->setVelocity(this->getParent()->getVelocity() + (tmp.getNormalized())*190);
 
-  pj->setAbsCoor(this->emissionPoint[this->activeBarrel]->getAbsCoor());
+  pj->setAbsCoor(this->getEmissionPoint());
+  //FIXME pj needs a absDir
 //   pj->setAbsDir(this->getAbsDir());
 //   pj->setAbsDir(Quaternion(tmp.getNormalized(), this->getParent()->getAbsDir().apply(Vector(0,1,0))));
@@ -146,5 +130,5 @@
   pj->activate();
 
-  this->activeBarrel = (this->activeBarrel + 1) % this->getBarrels();
+  this->cycleBarrel();
 }
 
Index: /branches/presentation/src/world_entities/weapons/rf_cannon.h
===================================================================
--- /branches/presentation/src/world_entities/weapons/rf_cannon.h	(revision 10770)
+++ /branches/presentation/src/world_entities/weapons/rf_cannon.h	(revision 10771)
@@ -29,10 +29,5 @@
 
   private:
-    PNode*** objComp;
-    Animation3D*** shootAnim;
 
-    PNode** emissionPoint;
-
-    int activeBarrel;
 };
 
Index: /branches/presentation/src/world_entities/weapons/test_gun.h
===================================================================
--- /branches/presentation/src/world_entities/weapons/test_gun.h	(revision 10770)
+++ /branches/presentation/src/world_entities/weapons/test_gun.h	(revision 10771)
@@ -31,6 +31,6 @@
  * @todo this will be reset with mirror X/Y/Z
  */
-#define    W_LEFT        0
-#define    W_RIGHT       1
+// #define    W_LEFT        0
+// #define    W_RIGHT       1
 
 
Index: /branches/presentation/src/world_entities/weapons/weapon.cc
===================================================================
--- /branches/presentation/src/world_entities/weapons/weapon.cc	(revision 10770)
+++ /branches/presentation/src/world_entities/weapons/weapon.cc	(revision 10771)
@@ -62,4 +62,14 @@
   if (OrxSound::SoundSource::objectList().exists(this->soundSource))
     delete this->soundSource;
+
+//   for (int i = 0; i < MAX_BARRELS; i++)
+//   {
+//    delete [] this->shootAnim[i];
+//    delete [] this->objComp[i];
+//   }
+//   delete [] this->emissionPoint;
+//   delete [] this->shootAnim;
+//   delete [] this->objComp;
+
 }
 
@@ -121,20 +131,24 @@
   this->soundSource = new OrxSound::SoundSource(this);       //< Every Weapon has exacty one SoundSource
 
-  this->barrels = 1;
+  this->barrels = 1;  // just to have an initial value
   this->segs = 1;
+  this->activeBarrel = 0;
 
   this->preferedSide = -1;
   this->preferedSlot = -1;
-
-  this->shootAnim = new Animation3D**[this->getBarrels()];
-  for (int i = 0; i < this->getBarrels(); i++)
-    this->shootAnim[i] = new Animation3D* [this->getSegs()];
-
-  this->emissionPoint = new PNode*[this->barrels];
-  for(int i = 0; i < this->barrels; i++){
+  this->side = -1;
+
+  //!< forward initialisation of animation and emissionpoints
+  for (int i = 0; i < MAX_BARRELS; i++){
     this->emissionPoint[i] = new PNode;
     this->emissionPoint[i]->setParent(this);  //Parenting emissionPoint to Weapons
     this->emissionPoint[i]->setName("EmissionPoint");
     this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
+    for(int j = 0; j < MAX_SEGMENTS; j++)
+    {
+      this->objComp[i][j] = new PNode;
+      this->shootAnim[i][j] = new Animation3D(this->objComp[i][j]);
+      this->shootAnim[i][j]->setInfinity(ANIM_INF_CONSTANT);
+    }
   }
 
@@ -149,5 +163,5 @@
   this->maxCharge = 1.0;                           //< The maximum charge is also one unit.
 
-  this->energy = 10;                               //< The secondary Buffer (before we have to reload)
+  this->energy = 10.0;                               //< The secondary Buffer (before we have to reload)
   this->energyMax = 10.0;                          //< How much energy can be carried
   this->capability = WTYPE_ALL;                    //< The Weapon has all capabilities @see W_Capability.
@@ -176,7 +190,4 @@
   LoadParam(root, "slot", this, Weapon, setPreferedSlot)
   .describe("slot this weapon will be added");
-/*
-  LoadParam(root, "emission-point", this, Weapon, setEmissionPoint)
-  .describe("Sets the Point of emission of this weapon (1: EmmsionVector; 2: EmissionPoint)");*/
 
   LoadParam(root, "state-duration", this, Weapon, setStateDuration)
@@ -274,4 +285,5 @@
  * sets the emissionPoint's relative position from the Weapon
  * @param point the Point relative to the mass-point of the Weapon
+ * @param barrel (optional) define a specific barrel, default = 0
  */
 void Weapon::setEmissionPoint(const Vector& point, int barrel)
@@ -280,8 +292,8 @@
 }
 
-void Weapon::setEmissionPoint(const Vector& point)
-{
-  this->emissionPoint[0]->setRelCoor(point);
-}
+// void Weapon::setEmissionPoint(const Vector& point)
+// {
+//   this->emissionPoint[0]->setRelCoor(point);
+// }
 
 /**
Index: /branches/presentation/src/world_entities/weapons/weapon.h
===================================================================
--- /branches/presentation/src/world_entities/weapons/weapon.h	(revision 10770)
+++ /branches/presentation/src/world_entities/weapons/weapon.h	(revision 10771)
@@ -20,4 +20,10 @@
 
 #include "sound_buffer.h"
+
+#define MAX_SEGMENTS 3
+#define MAX_BARRELS 4
+
+#define    W_LEFT        0
+#define    W_RIGHT       1
 
 // FORWARD DECLARATION
@@ -129,12 +135,12 @@
     // EMISSION
     /** keeping old functions*/
-    void setEmissionPoint(const Vector& point, int barrel);
-    void setEmissionPoint(const Vector& point);
+    void setEmissionPoint(const Vector& point, int barrel = 0);
+//     void setEmissionPoint(const Vector& point);
     /** @see void setEmissionPoint(const Vector& point); */
-    inline void setEmissionPoint(float x, float y, float z, int barrel) { this->setEmissionPoint(Vector(x, y, z), barrel); };
-    inline void setEmissionPoint(float x, float y, float z) { this->setEmissionPoint(Vector(x, y, z)); };
+    inline void setEmissionPoint(float x, float y, float z, int barrel = 0) { this->setEmissionPoint(Vector(x, y, z), barrel); };
+//     inline void setEmissionPoint(float x, float y, float z) { this->setEmissionPoint(Vector(x, y, z)); };
     /** @returns the absolute Position of the EmissionPoint */
     inline const Vector& getEmissionPoint(int barrel) const { return this->emissionPoint[barrel]->getAbsCoor(); };
-    inline const Vector& getEmissionPoint() const { return this->emissionPoint[0]->getAbsCoor(); };
+    inline const Vector& getEmissionPoint() const { return this->emissionPoint[this->activeBarrel]->getAbsCoor(); };
 
 
@@ -182,10 +188,13 @@
     inline void setBarrels(int barrels) { this->barrels = barrels; };
     inline void setSegs(int segs) { this->segs = segs; };
-
-//     inline Animation3D* getShootAnim(int barrel, int seg) { return this->shootAnim[barrel][seg]; };
-//     inline void setShootAnim(int barrel, int seg, PNode* component) { this->shootAnim[barrel][seg] = this->getAnimation(barrel, seg, component); };
+    inline void setActiveBarrel(int ab) {this->activeBarrel = ab; };
+    inline int getActiveBarrel() { return this->activeBarrel; };
+    inline void cycleBarrel() { this->activeBarrel = (this->activeBarrel + 1) % this->barrels; };
+
+    Animation3D* getShootAnim(int barrel, int seg) { return this->shootAnim[barrel][seg]; };
+//     void setShootAnim(int barrel, int seg, PNode* component) { this->shootAnim[barrel][seg] = this->getAnimation(barrel, seg, component); };
 
 //     void init2();
-    void deconstr();
+//     void deconstr();
 
     inline int getPreferedSide() { return this->preferedSide; }
@@ -194,4 +203,8 @@
     inline void setEnergyWidgetInitialized(bool b) {this->isEnergyWidgetInitialized = b;};
 
+    inline const Vector& getObjComp(int barrel, int seg) const { return this->objComp[barrel][seg]->getAbsCoor(); };
+    inline const float getObjCompx(int barrel, int seg) const { return this->objComp[barrel][seg]->getAbsCoor().x; };
+    inline const float getObjCompy(int barrel, int seg) const { return this->objComp[barrel][seg]->getAbsCoor().y; };
+    inline const float getObjCompz(int barrel, int seg) const { return this->objComp[barrel][seg]->getAbsCoor().z; };
 
   protected:
@@ -264,5 +277,5 @@
     OrxSound::SoundBuffer  soundBuffers[WA_ACTION_COUNT];   //!< SoundBuffers for all actions @see WeaponAction.
 
-    PNode**                emissionPoint;                   //!< The point, where the projectiles are emitted. (this is coppled with the Weapon by default)
+    PNode*                 emissionPoint[MAX_BARRELS];                   //!< The point, where the projectiles are emitted. (this is coppled with the Weapon by default)
 
     bool                   hideInactive;                    //!< Hides the Weapon if it is inactive
@@ -272,10 +285,13 @@
     FastFactory*           projectileFactory;               //!< A factory, that produces and handles the projectiles.
 
-    int                    barrels;                         //!< # of barrels
-    int                    segs;                             //!< # of segments, one barrel has
-    Animation3D***         shootAnim;
+    int                    barrels;                         //!< # of barrels (max 4)
+    int                    segs;                            //!< # of segments, one barrel has (max 3)
+    int                    activeBarrel;
+    Animation3D*           shootAnim[MAX_BARRELS][MAX_SEGMENTS];
+    PNode*                 objComp[MAX_BARRELS][MAX_SEGMENTS];
 
     int                    preferedSlot;                    //!< prefered slot to add
     int                    preferedSide;                    //!< prefered side (left/right) to be added
+    int                    side;                            //!< describes left/right orientation of the weapon.
 
   };
Index: /branches/presentation/src/world_entities/world_entity.cc
===================================================================
--- /branches/presentation/src/world_entities/world_entity.cc	(revision 10770)
+++ /branches/presentation/src/world_entities/world_entity.cc	(revision 10771)
@@ -54,6 +54,6 @@
 
 SHELL_COMMAND(model, WorldEntity, loadModel)
-->describe("sets the Model of the WorldEntity")
-->defaultValues("models/ships/fighter.obj", 1.0f);
+  ->describe("sets the Model of the WorldEntity")
+  ->defaultValues("models/ships/fighter.obj", 1.0f);
 
 SHELL_COMMAND(debugEntity, WorldEntity, debugWE);
