Index: /orxonox/trunk/src/glmenu/glmenu_imagescreen.cc
===================================================================
--- /orxonox/trunk/src/glmenu/glmenu_imagescreen.cc	(revision 4833)
+++ /orxonox/trunk/src/glmenu/glmenu_imagescreen.cc	(revision 4834)
@@ -184,6 +184,11 @@
 void GLMenuImageScreen::step ()
 {
-  this->currentValue++;
-  this->draw();
+  if (this->currentValue < this->maxValue)
+  {
+    this->currentValue++;
+    this->draw();
+  }
+  else
+    PRINTF(2)("ImageScreen-loadbar exceeds maximum value %d\n", this->maxValue);
 }
 
Index: /orxonox/trunk/src/lib/event/event_handler.h
===================================================================
--- /orxonox/trunk/src/lib/event/event_handler.h	(revision 4833)
+++ /orxonox/trunk/src/lib/event/event_handler.h	(revision 4834)
@@ -12,6 +12,7 @@
 #include "event_def.h"
 
+// FORWARD DECLARATION
 class EventListener;
-
+template <class T> class tList;
 
 //! The one Event Handler from Orxonox
Index: /orxonox/trunk/src/lib/event/key_mapper.cc
===================================================================
--- /orxonox/trunk/src/lib/event/key_mapper.cc	(revision 4833)
+++ /orxonox/trunk/src/lib/event/key_mapper.cc	(revision 4834)
@@ -57,15 +57,15 @@
 //! this is the mapping array from names to ids: enter all orxonox.conf keys here
 /** @todo use globals.h for this.... everything is done there for those Options,
- * and you do not have to care about The namings
+ * and you do not have to care about The namings, as they might change
  */
 orxKeyMapping map[] = {
-  {&KeyMapper::PEV_UP,                   "Up"},
-  {&KeyMapper::PEV_DOWN,                 "Down"},
-  {&KeyMapper::PEV_LEFT,                 "Left"},
-  {&KeyMapper::PEV_RIGHT,                "Right"},
+  {&KeyMapper::PEV_UP,                   CONFIG_NAME_PLAYER_UP},
+  {&KeyMapper::PEV_DOWN,                 CONFIG_NAME_PLAYER_DOWN},
+  {&KeyMapper::PEV_LEFT,                 CONFIG_NAME_PLAYER_LEFT},
+  {&KeyMapper::PEV_RIGHT,                CONFIG_NAME_PLAYER_RIGHT},
   {&KeyMapper::PEV_STRAFE_LEFT,          "StrafeLeft"},
   {&KeyMapper::PEV_STRAFE_RIGHT,         "StrafeRight"},
 
-  {&KeyMapper::PEV_FIRE1,                "Fire"},
+  {&KeyMapper::PEV_FIRE1,                CONFIG_NAME_PLAYER_FIRE},
   {&KeyMapper::PEV_FIRE1,                "Fire1"},
   {&KeyMapper::PEV_FIRE2,                "Fire2"},
@@ -74,16 +74,16 @@
 
 
-  {&KeyMapper::PEV_VIEW0,                "view0"},
-  {&KeyMapper::PEV_VIEW1,                "view1"},
-  {&KeyMapper::PEV_VIEW2,                "view2"},
-  {&KeyMapper::PEV_VIEW3,                "view3"},
-  {&KeyMapper::PEV_VIEW4,                "view4"},
-  {&KeyMapper::PEV_VIEW5,                "view5"},
-
-  {&KeyMapper::PEV_NEXT_WORLD,           "Next-World"},
-  {&KeyMapper::PEV_PREVIOUS_WORLD,       "Prev-World"},
-
-  {&KeyMapper::PEV_PAUSE,                "Pause"},
-  {&KeyMapper::PEV_QUIT,                 "Quit"},
+  {&KeyMapper::PEV_VIEW0,                CONFIG_NAME_VIEW0},
+  {&KeyMapper::PEV_VIEW1,                CONFIG_NAME_VIEW1},
+  {&KeyMapper::PEV_VIEW2,                CONFIG_NAME_VIEW2},
+  {&KeyMapper::PEV_VIEW3,                CONFIG_NAME_VIEW3},
+  {&KeyMapper::PEV_VIEW4,                CONFIG_NAME_VIEW4},
+  {&KeyMapper::PEV_VIEW5,                CONFIG_NAME_VIEW5},
+
+  {&KeyMapper::PEV_NEXT_WORLD,           CONFIG_NAME_NEXT_WORLD},
+  {&KeyMapper::PEV_PREVIOUS_WORLD,       CONFIG_NAME_PREV_WORLD},
+
+  {&KeyMapper::PEV_PAUSE,                CONFIG_NAME_PAUSE},
+  {&KeyMapper::PEV_QUIT,                 CONFIG_NAME_QUIT},
   {NULL, NULL}
 };
Index: /orxonox/trunk/src/lib/graphics/graphics_engine.cc
===================================================================
--- /orxonox/trunk/src/lib/graphics/graphics_engine.cc	(revision 4833)
+++ /orxonox/trunk/src/lib/graphics/graphics_engine.cc	(revision 4834)
@@ -325,9 +325,4 @@
   glDisable(GL_CULL_FACE);
   glDisable(GL_LIGHTING);  // will be set back when leaving 2D-mode
-  glEnable(GL_TEXTURE_2D);
-
-  /* This allows alpha blending of 2D textures with the scene */
-  glEnable(GL_BLEND);
-  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 
   glViewport(0, 0, screen->w, screen->h);
@@ -351,8 +346,8 @@
 void GraphicsEngine::leave2DMode()
 {
+  glMatrixMode(GL_PROJECTION);
+  glPopMatrix();
+
   glMatrixMode(GL_MODELVIEW);
-  glPopMatrix();
-
-  glMatrixMode(GL_PROJECTION);
   glPopMatrix();
 
@@ -444,11 +439,11 @@
       this->geTextCFPS = TextEngine::getInstance()->createText("fonts/arial_black.ttf", 15, TEXT_DYNAMIC, 0, 255, 0);
       this->geTextCFPS->setAlignment(TEXT_ALIGN_LEFT);
-      this->geTextCFPS->setPosition(5, 500);
+      this->geTextCFPS->setPosition(5, 5);
       this->geTextMaxFPS = TextEngine::getInstance()->createText("fonts/arial_black.ttf", 15, TEXT_DYNAMIC, 0, 255, 0);
       this->geTextMaxFPS->setAlignment(TEXT_ALIGN_LEFT);
-      this->geTextMaxFPS->setPosition(5, 530);
+      this->geTextMaxFPS->setPosition(5, 35);
       this->geTextMinFPS = TextEngine::getInstance()->createText("fonts/arial_black.ttf", 35, TEXT_DYNAMIC, 0, 255, 0);
       this->geTextMinFPS->setAlignment(TEXT_ALIGN_LEFT);
-      this->geTextMinFPS->setPosition(5, 560);
+      this->geTextMinFPS->setPosition(5, 65);
 #endif /* NO_TEXT */
     }
Index: /orxonox/trunk/src/lib/graphics/graphics_engine.h
===================================================================
--- /orxonox/trunk/src/lib/graphics/graphics_engine.h	(revision 4833)
+++ /orxonox/trunk/src/lib/graphics/graphics_engine.h	(revision 4834)
@@ -68,5 +68,5 @@
 
     /** \brief swaps the GL_BUFFERS */
-    static void swapBuffers() { SDL_GL_SwapBuffers(); };
+    inline static void swapBuffers() { SDL_GL_SwapBuffers(); };
 
     void process(const Event  &event);
Index: /orxonox/trunk/src/lib/graphics/importer/material.cc
===================================================================
--- /orxonox/trunk/src/lib/graphics/importer/material.cc	(revision 4833)
+++ /orxonox/trunk/src/lib/graphics/importer/material.cc	(revision 4834)
@@ -57,6 +57,11 @@
 {
   PRINTF(4)("delete Material %s.\n", this->getName());
+
   if (this->diffuseTexture)
     ResourceManager::getInstance()->unload(this->diffuseTexture);
+  if (this->ambientTexture)
+    ResourceManager::getInstance()->unload(this->ambientTexture);
+  if (this->specularTexture)
+    ResourceManager::getInstance()->unload(this->specularTexture);
 }
 
@@ -267,7 +272,10 @@
     ResourceManager::getInstance()->unload(this->diffuseTexture);
 
-  //! \todo check if RESOURCE MANAGER is availiable
-  //! \todo Textures from .mtl-file need special care.
-  this->diffuseTexture = (Texture*)ResourceManager::getInstance()->load(dMap, IMAGE);
+  //! @todo check if RESOURCE MANAGER is availiable
+  //! @todo Textures from .mtl-file need special care.
+  if (dMap!= NULL)
+    this->diffuseTexture = (Texture*)ResourceManager::getInstance()->load(dMap, IMAGE);
+  else
+    this->diffuseTexture = NULL;
 }
 
Index: /orxonox/trunk/src/lib/graphics/importer/model.cc
===================================================================
--- /orxonox/trunk/src/lib/graphics/importer/model.cc	(revision 4833)
+++ /orxonox/trunk/src/lib/graphics/importer/model.cc	(revision 4834)
@@ -159,4 +159,5 @@
 
   this->materialList = new tList<Material>;
+  this->materialsExtern = false;
 
   if (this->type == MODEL_VERTEX_ARRAY)
@@ -186,15 +187,18 @@
 
   // deleting the MaterialList
-  PRINTF(5)("Deleting Materials.\n");
-  tIterator<Material>* tmpIt = this->materialList->getIterator();
-  Material* material = tmpIt->nextElement();
-
-  //! \todo do we really have to delete this material??
-  while(material)
+  if (!this->materialsExtern)
+  {
+    PRINTF(5)("Deleting Materials.\n");
+
+    tIterator<Material>* tmpIt = this->materialList->getIterator();
+    Material* material = tmpIt->nextElement();
+  //! @todo do we really have to delete this material??
+    while(material)
     {
       delete material;
       material = tmpIt->nextElement();
     }
-  delete tmpIt;
+    delete tmpIt;
+  }
   delete materialList;
   delete this->pModelInfo;
@@ -356,5 +360,7 @@
 /**
    \brief finalizes an Model.
-   This funcion is needed, to delete all the Lists, and arrays that are no more needed because they are already imported into openGL. This will be applied at the end of the importing Process.
+ * This funcion is needed, to delete all the Lists, and arrays that are no more
+ * needed because they are already imported into openGL.
+ * This will be applied at the end of the importing Process.
 */
 bool Model::cleanup()
@@ -372,10 +378,13 @@
    \param material the Material to add
    \returns the added material
-
-   !! beware the Material will be deleted when the Model gets deleted
+ *
+ * this also tells this Model, that all the Materials are handled externally
+ * with this option set the Materials will not be deleted with the Model.
+ * !! -> NO MATERIALS GET DELETED WITH ONE CALL TO THIS FUNCTION !!
 */
 Material* Model::addMaterial(Material* material)
 {
   this->materialList->add(material);
+  this->materialsExtern = true;
   return material;
 }
Index: /orxonox/trunk/src/lib/graphics/importer/model.h
===================================================================
--- /orxonox/trunk/src/lib/graphics/importer/model.h	(revision 4833)
+++ /orxonox/trunk/src/lib/graphics/importer/model.h	(revision 4834)
@@ -190,4 +190,5 @@
 
   tList<Material>* materialList;    //!< A list for all the Materials in this Model
+  bool             materialsExtern; //!< If the materials given to this Object are extern.
 };
 
Index: /orxonox/trunk/src/lib/graphics/text_engine.cc
===================================================================
--- /orxonox/trunk/src/lib/graphics/text_engine.cc	(revision 4833)
+++ /orxonox/trunk/src/lib/graphics/text_engine.cc	(revision 4834)
@@ -919,4 +919,8 @@
   // entering 3D-mode
   GraphicsEngine::enter2DMode();
+  glEnable(GL_TEXTURE_2D);
+  glEnable(GL_BLEND);
+  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
   // drawing all the texts
   tIterator<Text>* textIterator = textList->getIterator();
Index: /orxonox/trunk/src/lib/particles/particle_engine.cc
===================================================================
--- /orxonox/trunk/src/lib/particles/particle_engine.cc	(revision 4833)
+++ /orxonox/trunk/src/lib/particles/particle_engine.cc	(revision 4834)
@@ -96,6 +96,4 @@
   }
 }
-
-
 
 /**
Index: /orxonox/trunk/src/story_entities/world.cc
===================================================================
--- /orxonox/trunk/src/story_entities/world.cc	(revision 4833)
+++ /orxonox/trunk/src/story_entities/world.cc	(revision 4834)
@@ -69,7 +69,4 @@
 #include "class_list.h"
 
-#include "crosshair.h"
-Crosshair* crosshair=NULL;
-
 
 using namespace std;
@@ -207,8 +204,4 @@
 
   ResourceManager::getInstance()->unloadAllByPriority(RP_LEVEL);
-
-
-
-  crosshair=NULL;
 }
 
@@ -242,6 +235,8 @@
   LoadParam<World>(root, "identifier", this, &World::setStoryID)
     .describe("Sets the StoryID of this world");
+
   LoadParam<World>(root, "nextid", this, &World::setNextStoryID)
     .describe("Sets the ID of the next world");
+
   LoadParam<World>(root, "path", this, &World::setPath)
     .describe("The Filename of this World (relative from the data-dir)");
@@ -278,7 +273,4 @@
 
   GraphicsEngine::getInstance()->displayFPS(true);
-
-  if (!crosshair)
-    crosshair = new Crosshair();
 }
 
@@ -859,5 +851,4 @@
   ParticleEngine::getInstance()->draw();
 
-  crosshair->draw();
 
   TextEngine::getInstance()->draw();
@@ -1055,6 +1046,4 @@
 
 
-      crosshair->tick(this->dtS);
-
       /** actualy the Graphics Engine should tick the world not the other way around...
          but since we like the things not too complicated we got it this way around
Index: /orxonox/trunk/src/util/loading/load_param.h
===================================================================
--- /orxonox/trunk/src/util/loading/load_param.h	(revision 4833)
+++ /orxonox/trunk/src/util/loading/load_param.h	(revision 4834)
@@ -34,10 +34,29 @@
 //! macro that makes it even more easy to load a Parameter
 /**
-   \param className the name of the class to load
-   \param parameterName the name of the parameter to load as written in the XML-file
-   \param function the function to call
-*/
+ * @param className the name of the class to load
+ * @param parameterName the name of the parameter to load as written in the XML-file
+ * @param function the function to call
+ */
 #define LOAD_PARAM(className, parameterName, paramFunction) \
         LoadParam<className>(root, #parameterName, this, &className::paramFunction)
+
+/**
+ * this Starts a Cycle in the Loading Process
+ * be aware, that in the cycle the first parameter of load_param should because
+ * called element, and that you must say true at the Fith parameter, or it will fail
+ * also you will have to close the Cycle again with LOAD_PARAM_END_CYCLE
+ */
+#define LOAD_PARAM_START_CYCLE   const TiXmlElement* element; \
+                                 element = root->FirstChildElement(); \
+                                 while( element != NULL) \
+                                  {
+/**
+ * closes a LoadParam Loop
+ * @see LOAD_PARAM_START_CYCLE
+ */
+#define LOAD_PARAM_END_CYCLE        element = element->NextSiblingElement(); \
+                                  }
+
+
 
 /**
Index: /orxonox/trunk/src/util/track/track_manager.cc
===================================================================
--- /orxonox/trunk/src/util/track/track_manager.cc	(revision 4833)
+++ /orxonox/trunk/src/util/track/track_manager.cc	(revision 4834)
@@ -394,13 +394,10 @@
    \param root the TiXmlElement to load the Data from
 */
-bool TrackManager::loadParams( TiXmlElement* root)
-{
-  TiXmlElement* element;
-  TiXmlNode* container;
+bool TrackManager::loadParams(const TiXmlElement* root)
+{
   double x, y, z, d;
 
-  element = root->FirstChildElement();
-  while( element != NULL)
-    {
+  LOAD_PARAM_START_CYCLE
+
       LoadParam<TrackManager>(element, "WorkOn", this, &TrackManager::workOnS, true)
         .describe("Selects a TrackElement (by name) to work on");
@@ -448,7 +445,5 @@
         }
       */
-      element = element->NextSiblingElement();
-    }
-
+      LOAD_PARAM_END_CYCLE;
 }
 
Index: /orxonox/trunk/src/util/track/track_manager.h
===================================================================
--- /orxonox/trunk/src/util/track/track_manager.h	(revision 4833)
+++ /orxonox/trunk/src/util/track/track_manager.h	(revision 4834)
@@ -139,5 +139,5 @@
   inline static TrackManager* getInstance() { if (!singletonRef) singletonRef = new TrackManager();  return singletonRef; };
 
-  bool loadParams(TiXmlElement* root);
+  bool loadParams(const TiXmlElement* root);
 
   // Methods to change the Path (initialisation)
Index: /orxonox/trunk/src/world_entities/player.cc
===================================================================
--- /orxonox/trunk/src/world_entities/player.cc	(revision 4833)
+++ /orxonox/trunk/src/world_entities/player.cc	(revision 4834)
@@ -54,5 +54,4 @@
 
   //weapons:
-  this->weaponMan = new WeaponManager();
   Weapon* wpRight = new TestGun(this, Vector(-2.6, 0.1, 3.0), Quaternion(), 0);
   Weapon* wpLeft = new TestGun(this, Vector(-2.6, 0.1, -3.0), Quaternion(), 1);
@@ -90,5 +89,4 @@
 
   //weapons:
-  this->weaponMan = new WeaponManager();
   Weapon* wpRight = new TestGun(this, Vector(-2.6, 0.1, 3.0), Quaternion(), 0);
   Weapon* wpLeft = new TestGun(this, Vector(-2.6, 0.1, -3.0), Quaternion(), 1);
@@ -114,4 +112,7 @@
   this->bWeaponChange = false;
   acceleration = 10.0;
+
+
+  this->weaponMan = new WeaponManager();
 }
 
Index: /orxonox/trunk/src/world_entities/player.h
===================================================================
--- /orxonox/trunk/src/world_entities/player.h	(revision 4833)
+++ /orxonox/trunk/src/world_entities/player.h	(revision 4834)
@@ -75,5 +75,4 @@
 
     Crosshair*  crosshair; //!< the crosshair of the player
-
 };
 
Index: /orxonox/trunk/src/world_entities/weapons/crosshair.cc
===================================================================
--- /orxonox/trunk/src/world_entities/weapons/crosshair.cc	(revision 4833)
+++ /orxonox/trunk/src/world_entities/weapons/crosshair.cc	(revision 4834)
@@ -43,5 +43,4 @@
 }
 
-
 /**
  * destroys a Crosshair
@@ -68,5 +67,5 @@
 
   this->rotation = 0;
-  this->rotationSpeed = 5;
+  this->setRotationSpeed(5);
   this->setSize(GraphicsEngine::getInstance()->getResolutionX()/10.0);
 
@@ -155,56 +154,11 @@
 void Crosshair::tick(float dt)
 {
+  // let the crosshair rotate
   this->rotation += dt * rotationSpeed;
 
 
-
-}
-
-/**
- * draws the crosshair
- */
-void Crosshair::draw()
-{
-  /*
-  const PNode* camera = State::getInstance()->getCamera();  //!< \todo MUST be different
-  Vector cameraPos = camera->getAbsCoor();
-  Vector cameraTargetPos = State::getInstance()->getCameraTarget()->getAbsCoor();
-  Vector view = cameraTargetPos - cameraPos;
-  Vector up = Vector(0, 1, 0);
-  up = camera->getAbsDir().apply(up);
-  Vector h = up.cross(view);
-  Vector v = h.cross(view);
-  h.normalize();
-  v.normalize();
-
-  float px = (position2D[0]-GraphicsEngine::getInstance()->getResolutionX()/2)*.05;
-  float py = -(position2D[1]-GraphicsEngine::getInstance()->getResolutionY()/2)*.05;
-
-  glBegin(GL_TRIANGLES);
-  glVertex3f(cameraTargetPos.x - h.x*px - v.x*py,
-  cameraTargetPos.y - h.y*px - v.y*py,
-  cameraTargetPos.z - h.z*px - v.z*py);
-
-  glVertex3f(cameraTargetPos.x - h.x*(px+1) - v.x*py,
-  cameraTargetPos.y - h.y*(px+1) - v.y*py,
-  cameraTargetPos.z - h.z*(px+1) - v.z*py);
-
-  glVertex3f(cameraTargetPos.x - h.x*px - v.x*(py+1),
-  cameraTargetPos.y - h.y*px - v.y*(py+1),
-  cameraTargetPos.z - h.z*px - v.z*(py+1));
-
-  glEnd();
-
-  */
-
-
-  GraphicsEngine::storeMatrices();
-
-///  float z;
-//   glReadPixels ((int)position2D[0], GraphicsEngine::getInstance()->getResolutionY()-(int)position2D[1]-1, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &z);
-
-
-  //cout << z <<"  "<< scale << "  "  << bias<< endl;
-
+  float z;
+  glReadPixels ((int)position2D[0], GraphicsEngine::getInstance()->getResolutionY()-(int)position2D[1]-1, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &z);
+  //cout << z << endl;
 
   GLdouble objX, objY, objZ;
@@ -221,4 +175,17 @@
   this->setAbsCoor(objX, objY, objZ);
 
+
+}
+
+/**
+ * draws the crosshair
+ */
+void Crosshair::draw()
+{
+  GraphicsEngine::storeMatrices();
+
+
+
+
 //   glBegin(GL_TRIANGLES);
 //   glColor3f(1,0,0);
@@ -228,4 +195,5 @@
 //   glEnd();
 
+  this->debugDraw();
 
   GraphicsEngine::enter2DMode();
@@ -253,20 +221,5 @@
   glVertex2f(size, size);
   glEnd();
-  /*
-  glBegin(GL_QUADS);
-  {
-    glColor4f(1,0,0,1);
-    glVertex2f(position2D[0]-10, position2D[1]-10);
-    glVertex2f(position2D[0]+10, position2D[1]-10);
-    glVertex2f(position2D[0]+10, position2D[1]+10);
-    glVertex2f(position2D[0]-10, position2D[1]+10);
-
-    //     glVertex2f(pos[0]-10, pos[1]-10);
-    //     glVertex2f(pos[0]-10, pos[1]+10);
-    //     glVertex2f(pos[0]+10, pos[1]+10);
-    //     glVertex2f(pos[0]+10, pos[1]-10);
-  }
-  glEnd();
-  */
+
   GraphicsEngine::leave2DMode();
 }
Index: /orxonox/trunk/src/world_entities/weapons/weapon.cc
===================================================================
--- /orxonox/trunk/src/world_entities/weapons/weapon.cc	(revision 4833)
+++ /orxonox/trunk/src/world_entities/weapons/weapon.cc	(revision 4834)
@@ -16,8 +16,9 @@
 
 #include "weapon.h"
-#include "weapon_manager.h"
 
+#include "projectile.h"
+
+#include "load_param.h"
 #include "vector.h"
-#include "projectile.h"
 #include "list.h"
 #include "state.h"
Index: /orxonox/trunk/src/world_entities/weapons/weapon_manager.cc
===================================================================
--- /orxonox/trunk/src/world_entities/weapons/weapon_manager.cc	(revision 4833)
+++ /orxonox/trunk/src/world_entities/weapons/weapon_manager.cc	(revision 4834)
@@ -19,5 +19,8 @@
 #include "weapon_manager.h"
 #include "weapon.h"
-
+#include "crosshair.h"
+
+#include "load_param.h"
+#include "factory.h"
 #include "vector.h"
 #include "list.h"
@@ -53,6 +56,12 @@
       this->configs[i].slots[j] = NULL;
   }
-}
-
+
+  // crosshair being a PNode it must not be deleted (this is because PNodes delete themselves.)
+  //delete this->crosshair;
+}
+
+/**
+ * initializes the WeaponManager
+ */
 void WeaponManager::init()
 {
@@ -66,5 +75,50 @@
   }
   this->currConfID = W_CONFIG0;
-
+  this->crosshair = new Crosshair();
+}
+
+/**
+ *
+ * @param root the XML-element to load from
+ */
+void WeaponManager::loadParams(const TiXmlElement* root)
+{
+  static_cast<BaseObject*>(this)->loadParams(root);
+
+  LoadParam<WeaponManager>(root, "slot-count", this, &WeaponManager::setSlotCount)
+      .describe("how many slots(cannons) the WeaponManager can handle");
+
+  LOAD_PARAM_START_CYCLE;
+
+  LoadParam<WeaponManager>(root, "Weapons", this, &WeaponManager::loadWeapons)
+      .describe("loads Weapons");
+      // LoadParam<WeaponManager>(root, "Weapon", this, &WeaponManager::addWeapon);
+
+  LOAD_PARAM_END_CYCLE;
+}
+
+/**
+ * loads a Weapon onto the WeaponManager
+ * @param root the XML-element to load the Weapons from
+ */
+void WeaponManager::loadWeapons(const TiXmlElement* root)
+{
+  LOAD_PARAM_START_CYCLE;
+
+  Weapon* newWeapon = dynamic_cast<Weapon*>(Factory::getFirst()->fabricate(element));
+
+
+
+  LOAD_PARAM_END_CYCLE;
+}
+
+
+/**
+ * sets the number of Slots the WeaponManager has
+ * @param nrOfSlots the number of slots
+ */
+void WeaponManager::setSlotCount(int nrOfSlots)
+{
+  this->nrOfSlots = nrOfSlots;
 }
 
@@ -100,5 +154,7 @@
 }
 
-
+/**
+ * removes a Weapon from the WeaponManager
+ */
 void WeaponManager::removeWeapon(Weapon* weapon, int configID)
 {
@@ -163,4 +219,5 @@
     if( firingWeapon != NULL) firingWeapon->fire();
   }
+  this->crosshair->setRotationSpeed(-500);
 }
 
@@ -178,4 +235,7 @@
     if( w != NULL) w->tick(dt);
   }
+
+  crosshair->tick(dt);
+  crosshair->setRotationSpeed(5);
 }
 
@@ -193,4 +253,5 @@
       w->draw();
   }
+  crosshair->draw();
 }
 
Index: /orxonox/trunk/src/world_entities/weapons/weapon_manager.h
===================================================================
--- /orxonox/trunk/src/world_entities/weapons/weapon_manager.h	(revision 4833)
+++ /orxonox/trunk/src/world_entities/weapons/weapon_manager.h	(revision 4834)
@@ -32,4 +32,5 @@
 // FORWARD DECLARATION
 class Weapon;
+class Crosshair;
 
 #define    W_MAX_SLOTS       8
@@ -71,4 +72,7 @@
     void init();
     void loadParams(const TiXmlElement* root);
+    void loadWeapons(const TiXmlElement* root);
+
+    void setSlotCount(int nrOfSlots);
 
     void addWeapon(Weapon* weapon, int configID = W_CONFIG0, int slotID = W_FREE_SLOT);
@@ -81,4 +85,6 @@
 
   private:
+    Crosshair*            crosshair;               //!< an aim.
+
     int                   nrOfSlots;               //<! number of weapon slots a ship has
     int                   currConfID;              //<! the currently selected config
