Index: orxonox/trunk/src/lib/particles/particle_system.cc
===================================================================
--- orxonox/trunk/src/lib/particles/particle_system.cc	(revision 4826)
+++ orxonox/trunk/src/lib/particles/particle_system.cc	(revision 4827)
@@ -412,7 +412,7 @@
           //! \todo implement a faster code for the look-at Camera algorithm.
 
-        const PNode* camera = State::getInstance()->getCamera();  //!< \todo MUST be different
+        const PNode* camera = State::getCamera();  //!< \todo MUST be different
         Vector cameraPos = camera->getAbsCoor();
-        Vector cameraTargetPos = State::getInstance()->getCameraTarget()->getAbsCoor();
+        Vector cameraTargetPos = State::getCameraTarget()->getAbsCoor();
         Vector view = cameraTargetPos - cameraPos;
         Vector up = Vector(0, 1, 0);
Index: orxonox/trunk/src/orxonox.cc
===================================================================
--- orxonox/trunk/src/orxonox.cc	(revision 4826)
+++ orxonox/trunk/src/orxonox.cc	(revision 4827)
@@ -43,5 +43,4 @@
 #include "garbage_collector.h"
 
-#include "state.h"
 #include "event.h"
 #include "factory.h"
@@ -90,5 +89,4 @@
   delete GameLoader::getInstance();
   delete SoundEngine::getInstance();
-  delete State::getInstance();
   delete CDEngine::getInstance();
   delete GarbageCollector::getInstance();
Index: orxonox/trunk/src/story_entities/world.cc
===================================================================
--- orxonox/trunk/src/story_entities/world.cc	(revision 4826)
+++ orxonox/trunk/src/story_entities/world.cc	(revision 4827)
@@ -135,5 +135,5 @@
   if( this->worldIsInitialized)
     return this->worldReference->getEntities();
-  PRINT(1)("Someone tried to use the WorldInterface before it has been initizlized! this can result in SEGFAULTs!\n");
+  PRINT(1)("tried to use the WorldInterface before it has been initizlized! this can result in SEGFAULTs!\n");
   return NULL;
 }
@@ -222,5 +222,5 @@
   //strcpy(this->worldName, name);
   this->debugWorldNr = worldID;
-  this->entities = new tList<WorldEntity>();
+  State::setWorldEntityList(this->entities = new tList<WorldEntity>());
   this->cycle = 0;
 
@@ -244,39 +244,4 @@
   if (!crosshair)
     crosshair = new Crosshair();
-
-  /*
-  // identifier
-  string = grabParameter( root, "identifier");
-  if( string == NULL || sscanf(string, "%d", &id) != 1)
-  {
-  PRINTF0("World is missing a proper 'identifier'\n");
-  this->setStoryID( -1);
-  }
-  else setStoryID( id);
-
-  // next id
-  string = grabParameter( root, "nextid");
-  if( string == NULL || sscanf(string, "%d", &id) != 1)
-  {
-  PRINTF0("World is missing a proper 'nextid'\n");
-  this->setStoryID( -1);
-  }
-  else setNextStoryID( id);
-
-
-  // path
-  string = grabParameter( root, "path");
-  if( string == NULL)
-  {
-  PRINTF0("World is missing a proper 'path'\n");
-  this->setPath( NULL);
-  }
-  else
-  {
-  name = new char[strlen(string + 2)];
-  strcpy( name, string);
-  this->setPath( name);
-  }
-  */
 }
 
@@ -304,5 +269,5 @@
   this->localCamera->setName ("Camera");
 
-  State::getInstance()->setCamera(this->localCamera, this->localCamera->getTarget());
+  State::setCamera(this->localCamera, this->localCamera->getTarget());
 
   GraphicsEngine::getInstance()->displayFPS(true);
Index: orxonox/trunk/src/util/state.cc
===================================================================
--- orxonox/trunk/src/util/state.cc	(revision 4826)
+++ orxonox/trunk/src/util/state.cc	(revision 4827)
@@ -25,29 +25,9 @@
 
 
-/**
-   \brief standard constructor
-*/
-State::State ()
-{
-   this->setClassID(CL_STATE, "State");
-   this->setName("State");
 
-   this->camera = NULL;
-   this->cameraTarget = NULL;
-}
+const PNode* State::camera = NULL;
+const PNode* State::cameraTarget = NULL;
 
-/**
-   \brief the singleton reference to this class
-*/
-State* State::singletonRef = NULL;
-
-/**
-   \brief standard deconstructor
-*/
-State::~State ()
-{
-  State::singletonRef = NULL;
-
-}
+tList<WorldEntity>* State::worldEntityList = NULL;
 
 /**
@@ -56,5 +36,5 @@
 void State::setCamera(const PNode* camera, const PNode* cameraTarget)
 {
-  this->camera = camera;
-  this->cameraTarget = cameraTarget;
+  State::camera = camera;
+  State::cameraTarget = cameraTarget;
 }
Index: orxonox/trunk/src/util/state.h
===================================================================
--- orxonox/trunk/src/util/state.h	(revision 4826)
+++ orxonox/trunk/src/util/state.h	(revision 4827)
@@ -11,4 +11,6 @@
 // FORWARD DEFINITION
 class PNode;
+class WorldEntity;
+template<class T> class tList;
 
 //! A Singleton class, that handles some states about orxonox's objects
@@ -16,21 +18,25 @@
 
  public:
-  /** \returns a Pointer to the only object of this Class */
-  inline static State* getInstance() { if (!singletonRef) singletonRef = new State();  return singletonRef; };
+  // CAMERA //
+  /** @param camera the PNode to the Camera, @param cameraTarget the PNode to the Camera's target */
+  static void setCamera(const PNode* camera, const PNode* cameraTarget);
+  /** @returns a Pointer to the PNode of the Camera */
+  static inline const PNode* getCamera() { return State::camera; };
+  /** @returns a Pointer to the CameraTarget */
+  static inline const PNode* getCameraTarget() { return State::cameraTarget; };
 
-  virtual ~State();
-
-  void setCamera(const PNode* camera, const PNode* cameraTarget);
-  /** \returns a Pointer to the PNode of the Camera */
-  const PNode* getCamera() const { return this->camera; };
-  /** \returns a Pointer to the CameraTarget */
-  const PNode* getCameraTarget() const { return this->cameraTarget; };
+  // WORLD_ENTITY_LIST //
+  /** @param worldEntityList The World's List of WorldEntities */
+  static inline void setWorldEntityList(tList<WorldEntity>* worldEntityList) { State::worldEntityList = worldEntityList; };
+  /** @returns the List of WorldEntities */
+  static inline tList<WorldEntity>* getWorldEntityList() { return State::worldEntityList; };
 
  private:
   State();
-  static State*       singletonRef;       //!< a reference to this class
 
-  const PNode*        camera;             //!< A reference to the camera
-  const PNode*        cameraTarget;       //!< a reference to the cameraTarget
+  static const PNode*           camera;             //!< A reference to the camera
+  static const PNode*           cameraTarget;       //!< a reference to the cameraTarget
+
+  static tList<WorldEntity>*    worldEntityList;    //!< The List of the worldEntities
 };
 
Index: orxonox/trunk/src/world_entities/weapons/test_gun.h
===================================================================
--- orxonox/trunk/src/world_entities/weapons/test_gun.h	(revision 4826)
+++ orxonox/trunk/src/world_entities/weapons/test_gun.h	(revision 4827)
@@ -1,3 +1,3 @@
-/*! 
+/*!
     \file weapon.h
     \brief a weapon that a player can use
@@ -12,10 +12,10 @@
      o slowdown-factor: this is a factor d: exp(-d*x), d is element of all positive R. it determines how fast the firing-rate will slow down. if no slowdown: d=0, the bigger d is, the faster the weapon will slow down!
      o energy-consumption: this determines the energy that has to be used to produce this projectile = costs per projectile
-    
+
     Furthermore there are some other attributes, that will help to represent a firing
     weapon in this world:
      o sound file/ressource: this is a pointer to the sound-file/ressource. however it may be represented
      o shooting animation
-     
+
 */
 
@@ -36,19 +36,30 @@
   friend class World;
 
- public:
-  TestGun (PNode* parent, const Vector& coordinate, const Quaternion& direction, int leftRight);
-  virtual ~TestGun ();
+  public:
+    TestGun (PNode* parent, const Vector& coordinate, const Quaternion& direction, int leftRight);
+    virtual ~TestGun ();
 
-  virtual void activate();
-  virtual void deactivate();
+    virtual void activate();
+    virtual void deactivate();
 
-  virtual void fire();
-  virtual void hit (WorldEntity* weapon, Vector* loc);
-  virtual void destroy();
-  
-  virtual void tick(float time);
-  virtual void weaponIdle();
-  virtual void draw();
+    virtual void fire();
+    virtual void hit (WorldEntity* weapon, Vector* loc);
+    virtual void destroy();
 
+    virtual void tick(float time);
+    virtual void weaponIdle();
+    virtual void draw();
+
+  private:
+    Animation3D* animation1;
+    Animation3D* animation2;
+    Animation3D* animation3;
+
+    PNode* objectComponent1;         //<! the gun is made of multiple parts, these PNodes represent their location and orientation
+    PNode* objectComponent2;
+    PNode* objectComponent3;
+
+    Vector projectileOffset;
+    int leftRight;   // this will become an enum
 
 
Index: orxonox/trunk/src/world_entities/weapons/weapon.cc
===================================================================
--- orxonox/trunk/src/world_entities/weapons/weapon.cc	(revision 4826)
+++ orxonox/trunk/src/world_entities/weapons/weapon.cc	(revision 4827)
@@ -17,8 +17,5 @@
 #include "weapon_manager.h"
 #include "weapon.h"
-#include "stdincl.h"
-#include "world_entity.h"
 #include "vector.h"
-#include "model.h"
 #include "projectile.h"
 #include "list.h"
@@ -31,5 +28,4 @@
 */
 Weapon::Weapon (PNode* parent, const Vector& coordinate, const Quaternion& direction)
-  : WorldEntity()
 {
   parent->addChild(this, PNODE_ALL);
@@ -38,12 +34,4 @@
   WorldInterface* wi = WorldInterface::getInstance();
   this->worldEntities = wi->getEntityList();
-
-  this->objectComponent1 = NULL;
-  this->objectComponent2 = NULL;
-  this->objectComponent3 = NULL;
-
-  this->animation1 = NULL;
-  this->animation2 = NULL;
-  this->animation3 = NULL;
 }
 
Index: orxonox/trunk/src/world_entities/weapons/weapon.h
===================================================================
--- orxonox/trunk/src/world_entities/weapons/weapon.h	(revision 4826)
+++ orxonox/trunk/src/world_entities/weapons/weapon.h	(revision 4827)
@@ -1,5 +1,5 @@
 /*!
     \file weapon.h
-    \brief a weapon that a player can use
+    \brief a weapon that a  can use
 
 
@@ -42,11 +42,16 @@
 // } WeaponSoundType;
 
+
+//! An enumerator defining the States of a Weapon
 typedef enum {
-  W_NONE,
-  W_SHOOT,
-  W_RELOAD,
-  W_ACTIVATING,
-  W_DEACTIVATE,
-  W_IDLE,
+  W_NONE          =    0,    //!< No State at all (if set, there is something wrong, or the weapon is not yet availiable)
+  W_SHOOT         =    1,    //!< The State of the Shooting
+  W_RELOAD        =    2,    //!< The State of the Reloading
+  W_ACTIVATING    =    3,    //!< The State in which the weapon gets activated
+  W_DEACTIVATING  =    4,    //!< The State in which the weapon gets deactivated
+  W_INACTIVE      =    5,    //!< The State where the weapon is inactive (unable to shoot)
+  W_IDLE          =    6,    //!< The State where the weapon is idle
+
+  W_STATES_COUNT  =    6     //!< This must match the count of the enumerations (without W_NONE)
 } WeaponState;
 
@@ -56,8 +61,9 @@
 #define    W_RIGHT       1
 
-
-
-
-
+//! An abstract class, that describes weapons
+/**
+ * This is used as a container for all the different kinds of weapons that may exist
+ * Animations/Sounds/etc. will be handled in the Extensions of this class.
+ */
 class Weapon : public WorldEntity
 {
@@ -84,31 +90,12 @@
 
 
-  /**
-     \brief sets a weapons idle time
-     \param idle time in ms
+  /** @param idle time in ms  */
+  inline void setWeaponIdleTime(float idleTime) { this->idleTime = idleTime; };
+  /** @returns idle time in ms */
+  inline float getWeaponIdleTime() const { return this->idleTime; };
+  /** @return true if idletime is elapsed else otherwise */
+  inline bool hasWeaponIdleTimeElapsed() const { return (this->localTime>this->idleTime)?true:false; };
 
-     a weapon idle time is the time spend after a shoot until the weapon can
-     shoot again
-  */
-  inline void setWeaponIdleTime(float time) { this->idleTime = time; }
-  /**
-     \brief gets the weapon idle time
-     \returns idle time in ms
-   */
-  inline float getWeaponIdleTime() const { return this->idleTime;}
-  /**
-     \brief checks if the idle time is elapsed
-     \return true if time is elapsed
-
-     a weapon idle time is the time spend after a shoot until the weapon can
-   shoot again
-  */
-  inline bool hasWeaponIdleTimeElapsed() const { return (this->localTime>this->idleTime)?true:false; }
-
-  /**
-     \brief fires the weapon
-
-     this is called from the player.cc, when fire-button is been pushed
-  */
+  /** @brief fires the weapon */
   virtual void fire() = 0;
   virtual void hit (WorldEntity* weapon, Vector* loc);
@@ -120,27 +107,17 @@
 
  protected:
-  tList<WorldEntity>* worldEntities;
-  float localTime;                 //<! this is the local time. important for shooting attributes like frequency
-  float idleTime;                  //<! the time a weapon needs before it can shoot again. eg. shooting frequency or actication/deactivateion delay
-  float slowDownFactor;            //<! if the shooting frequency is a linear function of time...
+  tList<WorldEntity>*  worldEntities;
 
-  PNode* objectComponent1;         //<! the gun is made of multiple parts, these PNodes represent their location and orientation
-  PNode* objectComponent2;
-  PNode* objectComponent3;
+  float                localTime;                 //<! this is the local time. important for shooting attributes like frequency
+  float                idleTime;                  //<! the time a weapon needs before it can shoot again. eg. shooting frequency or actication/deactivateion delay
+  float                slowDownFactor;            //<! if the shooting frequency is a linear function of time...
 
-  Animation3D* animation1;
-  Animation3D* animation2;
-  Animation3D* animation3;
-
-  Vector projectileOffset;
-  int leftRight;   // this will become an enum
-
-  SoundBuffer* fireSound;
-  SoundSource* weaponSource;
+  SoundBuffer*         fireSound;
+  SoundSource*         weaponSource;
 
 
  private:
-  bool enabled;                    //<! states if the weapon is enabled or not
-  Projectile* projectile;          //<! the projectile used for this weapon
+  bool                 enabled;                    //<! states if the weapon is enabled or not
+  Projectile*          projectile;          //<! the projectile used for this weapon
   //WeaponSound sound;
 };
