Index: branches/playability/src/util/hud.cc
===================================================================
--- branches/playability/src/util/hud.cc	(revision 9964)
+++ branches/playability/src/util/hud.cc	(revision 9965)
@@ -45,4 +45,5 @@
   //this->setSize2D(
   this->weaponManager = NULL;
+  this->weaponManagerSecondary = NULL;
   this->energyWidget = NULL;
   this->shieldWidget = NULL;
@@ -118,5 +119,5 @@
 {}
 
-void Hud::setWeaponManager(WeaponManager* weaponMan)
+void Hud::setWeaponManager(WeaponManager* weaponMan, WeaponManager* weaponManSec)
 {
   if (this->weaponManager != NULL)
@@ -133,5 +134,19 @@
   }
 
+  if (this->weaponManagerSecondary != NULL)
+  {
+    for (unsigned int i = 0; i < this->weaponManagerSecondary->getSlotCount(); i++)
+    {
+      Weapon* weapon = this->weaponManagerSecondary->getWeapon(i);
+      if (weapon != NULL)
+      {
+        weapon->getEnergyWidget()->hide();
+        this->weaponsWidgets.remove(weapon->getEnergyWidget());
+      }
+    }
+  }
+
   this->weaponManager = weaponMan;
+  this->weaponManagerSecondary = weaponManSec;
 
   this->updateWeaponManager();
@@ -164,5 +179,22 @@
       }
     }
+
+  if (this->weaponManagerSecondary != NULL)
+    for (unsigned int i = 0; i < this->weaponManagerSecondary->getSlotCount(); i++)
+    {
+      Weapon* weapon = this->weaponManagerSecondary->getWeapon(i);
+      if (weapon != NULL)
+      {
+        //PRINTF(0)("WEAPON %s::%s in Slots\n", weapon->getClassCName(), weapon->getName());
+        weapon->getEnergyWidget()->show();
+        weapon->getEnergyWidget()->setBackgroundColor(Color(.8,.2,.11, 0.1));
+        weapon->getEnergyWidget()->setFrontColor(Color( .2,.5,.7,.6));
+        //      weapon->getEnergyWidget()->frontMaterial().setTransparency(.6);
+        this->weaponsWidgets.push_back(weapon->getEnergyWidget());
+      }
+    }
+
   this->updateResolution();
+
 }
 
Index: branches/playability/src/util/hud.h
===================================================================
--- branches/playability/src/util/hud.h	(revision 9964)
+++ branches/playability/src/util/hud.h	(revision 9965)
@@ -39,5 +39,5 @@
   void setShiledWidget(OrxGui::GLGuiWidget* widget);
   void setArmorWidget(OrxGui::GLGuiWidget* widget);
-  void setWeaponManager(WeaponManager* weaponMan);
+  void setWeaponManager(WeaponManager* weaponMan, WeaponManager* weaponManSec = NULL);
 
   void addWeaponWidget(OrxGui::GLGuiWidget* widget);
@@ -68,4 +68,5 @@
 
   WeaponManager*           weaponManager;
+  WeaponManager*           weaponManagerSecondary;
 
   std::list<OrxGui::GLGuiWidget*> weaponsWidgets; //!< WeaponWidgets will be displayed one after another
Index: branches/playability/src/world_entities/space_ships/space_ship.cc
===================================================================
--- branches/playability/src/world_entities/space_ships/space_ship.cc	(revision 9964)
+++ branches/playability/src/world_entities/space_ships/space_ship.cc	(revision 9965)
@@ -84,6 +84,5 @@
  */
 SpaceShip::SpaceShip(const std::string& fileName)
-    : primWeaponMan(this),
-    secWeaponMan(this),
+    : secWeaponMan(this),
     supportedPlaymodes(Playable::Full3D || Playable::Horizontal || Playable::Vertical),
     playmode(Playable::Full3D)
@@ -108,6 +107,5 @@
 */
 SpaceShip::SpaceShip(const TiXmlElement* root)
-    : primWeaponMan(this),
-    secWeaponMan(this),
+    : secWeaponMan(this),
     supportedPlaymodes(Playable::Full3D || Playable::Horizontal || Playable::Vertical),
     playmode(Playable::Full3D)
@@ -140,13 +138,21 @@
 
 
-  this->primWeaponMan.addWeapon( wpLeft, 1, 0);
-  this->primWeaponMan.addWeapon( wpRight, 1, 1);
-  this->secWeaponMan.addWeapon( cannon, 0, 6);
-
-  this->primWeaponMan.changeWeaponConfig(1);
+  this->weaponMan.addWeapon( wpLeft, 0, 0);
+  this->weaponMan.addWeapon( wpRight, 0, 1);
+  this->secWeaponMan.addWeapon( cannon, 0, 0);
+
+  this->weaponMan.changeWeaponConfig(0);
 
   wpRight->requestAction(WA_ACTIVATE);
   wpLeft->requestAction(WA_ACTIVATE);
   cannon->requestAction(WA_ACTIVATE);
+
+  this->curWeaponPrimary    = 0;
+  this->curWeaponSecondary  = 0;
+
+  Playable::weaponConfigChanged();
+
+  weaponEnergyRegen = 10;   // 10 einheiten pro Sekunde
+
   /*
   this->addWeapon(wpLeft, 1, 0);
@@ -159,5 +165,5 @@
   this->loadModel("models/ships/hoverglider_mainbody.obj");
 
-  bUp = bDown = bLeft = bRight = bAscend = bDescend = bRollL = bRollR = bPrimFire = bSecFire = false;
+  bUp = bDown = bLeft = bRight = bAscend = bDescend = bRollL = bRollR = bFire = bSecFire = false;
 
   xMouse = yMouse = 0;
@@ -178,4 +184,5 @@
   this->mouseDir = this->getAbsDir();
   this->pitchDir = this->getAbsDir();
+
 
   //   GLGuiButton* button = new GLGuiPushButton();
@@ -205,30 +212,27 @@
   registerEvent(EV_MOUSE_MOTION);
 
-  this->primWeaponMan.setSlotCount(6);
-
-  this->primWeaponMan.setSlotPosition(0, Vector(-2.6, .1, -3.0));
-  this->primWeaponMan.setSlotCapability(0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
-
-  this->primWeaponMan.setSlotPosition(1, Vector(-2.6, .1, 3.0));
-  this->primWeaponMan.setSlotCapability(1, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
-
-  this->primWeaponMan.setSlotPosition(2, Vector(-1.5, .5, -.5));
-  this->primWeaponMan.setSlotDirection(2, Quaternion(-M_PI_4*.5, Vector(1,0,0)));
-
-  this->primWeaponMan.setSlotPosition(3, Vector(-1.5, .5, .5));
-  this->primWeaponMan.setSlotDirection(3, Quaternion(M_PI_4*.5, Vector(1,0,0)));
-
-  this->primWeaponMan.setSlotPosition(4, Vector(-1.5, -.5, .5));
-  this->primWeaponMan.setSlotDirection(4, Quaternion(-M_PI_4*.5+M_PI, Vector(1,0,0)));
-
-  this->primWeaponMan.setSlotPosition(5, Vector(-1.5, -.5, -.5));
-  this->primWeaponMan.setSlotDirection(5, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0)));
-  //
-  this->primWeaponMan.setSlotPosition(6, Vector(-1, 0.0, 0));
-  this->primWeaponMan.setSlotCapability(6, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
+  this->weaponMan.setSlotCount(6);
+
+  this->weaponMan.setSlotPosition(0, Vector(-2.6, .1, -3.0));
+  this->weaponMan.setSlotCapability(0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
+
+  this->weaponMan.setSlotPosition(1, Vector(-2.6, .1, 3.0));
+  this->weaponMan.setSlotCapability(1, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
+
+  this->weaponMan.setSlotPosition(2, Vector(-1.5, .5, -.5));
+  this->weaponMan.setSlotDirection(2, Quaternion(-M_PI_4*.5, Vector(1,0,0)));
+
+  this->weaponMan.setSlotPosition(3, Vector(-1.5, .5, .5));
+  this->weaponMan.setSlotDirection(3, Quaternion(M_PI_4*.5, Vector(1,0,0)));
+
+  this->weaponMan.setSlotPosition(4, Vector(-1.5, -.5, .5));
+  this->weaponMan.setSlotDirection(4, Quaternion(-M_PI_4*.5+M_PI, Vector(1,0,0)));
+
+  this->weaponMan.setSlotPosition(5, Vector(-1.5, -.5, -.5));
+  this->weaponMan.setSlotDirection(5, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0)));
 
   this->secWeaponMan.setSlotCount(6);
 
-  this->secWeaponMan.setSlotPosition(0, Vector(2.6, -0.5, 0));
+  this->secWeaponMan.setSlotPosition(0, Vector(2.6, -2.5, 0));
   this->secWeaponMan.setSlotCapability(0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
 
@@ -247,7 +251,5 @@
   this->secWeaponMan.setSlotPosition(5, Vector(1.5, -.5, -.5));
   this->secWeaponMan.setSlotDirection(5, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0)));
-  //
-  this->secWeaponMan.setSlotPosition(6, Vector(1, 0.0, 0));
-  this->secWeaponMan.setSlotCapability(6, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
+
   //
   //   this->getWeaponManager().setSlotPosition(8, Vector(-2.5, -0.3, -2.0));
@@ -257,11 +259,11 @@
   //   this->getWeaponManager().setSlotDirection(9, Quaternion(+M_PI, Vector(1,0,0)));:
 
-  this->primWeaponMan.getFixedTarget()->setParent(this);
-  this->primWeaponMan.getFixedTarget()->setRelCoor(100000,0,0);
+  this->weaponMan.getFixedTarget()->setParent(this);
+  this->weaponMan.getFixedTarget()->setRelCoor(100000,0,0);
 
   this->secWeaponMan.getFixedTarget()->setParent(this);
   this->secWeaponMan.getFixedTarget()->setRelCoor(100000,0,0);
 
-  dynamic_cast<Element2D*>(this->primWeaponMan.getFixedTarget())->setVisibility( false);
+  dynamic_cast<Element2D*>(this->weaponMan.getFixedTarget())->setVisibility( false);
 
   this->burstEmitter = new DotEmitter(200, 0.0, .01);
@@ -315,5 +317,5 @@
 void SpaceShip::reset()
 {
-  bUp = bDown = bLeft = bRight = bAscend = bDescend = bRollL = bRollR = false;
+  bUp = bDown = bLeft = bRight = bAscend = bDescend = bRollL = bRollR = bFire = bSecFire = false;
 
   xMouse = yMouse = 0;
@@ -381,16 +383,18 @@
 
   // Own Tick Setup, as a different fire routine is used on the weapon manager
-  this->primWeaponMan.tick(time);
+  this->weaponMan.tick(time);
   this->secWeaponMan.tick(time);
 
-  if( this->bPrimFire)
-  {
-    this->primWeaponMan.fire();
+  if( this->bFire)
+  {
+    this->weaponMan.fire();
   }
   if( this->bSecFire)
   {
     this->secWeaponMan.fire();
-    this->bSecFire = !this->bSecFire;
-  }
+    this->bSecFire = !this->bSecFire;   // FIXME This currently is needed to prevent "echo fires" of a second rocket after its cooldown has passed
+  }
+
+  this->weaponRegen(time);
 
   if( ( xMouse != 0 || yMouse != 0 ) && this->getOwner() == SharedNetworkData::getInstance()->getHostID() )
@@ -572,5 +576,5 @@
     this->bSecFire = event.bPressed;
   else if( event.type == KeyMapper::PEV_FIRE1)
-    this->bPrimFire = event.bPressed;
+    this->bFire = event.bPressed;
   else if( event.type == EV_MOUSE_MOTION)
   {
@@ -639,2 +643,24 @@
   }
 }
+
+/**
+ * Weapon regeneration
+ * does not use any reactor capacity, as it wouldn't work in a consistent way.
+ */
+void SpaceShip::weaponRegen(float time)
+{
+  float energy  = ( this->reactorOutput * this->weaponEnergyShare + this->weaponEnergyRegen) * time;
+  Weapon* weapon;
+  for( int i=0; i < this->weaponMan.getSlotCount(); i++)
+  {
+    weapon = this->weaponMan.getWeapon(i);
+    if( weapon != NULL && weapon->isActive())
+    {
+      weapon->increaseEnergy( energy);
+      weapon->updateWidgets();
+    }
+
+  }
+  // weaponMan.increaseAmmunition( weapon, energy);
+  
+}
Index: branches/playability/src/world_entities/space_ships/space_ship.h
===================================================================
--- branches/playability/src/world_entities/space_ships/space_ship.h	(revision 9964)
+++ branches/playability/src/world_entities/space_ships/space_ship.h	(revision 9965)
@@ -48,4 +48,6 @@
     virtual void process(const Event &event);
 
+    inline WeaponManager getWeaponManagerSecondary() { return this->secWeaponMan; };
+
     //Functions for GUI
     inline float getShieldCur() { return this->shieldCur; };        //!< returns current shield value
@@ -68,9 +70,10 @@
     void regen(float time);  //!< handler for shield and electronic regeneration
 
-    WeaponManager         primWeaponMan;      //!< the primary weapon manager: managing a list of energy weapons to wepaon-slot mapping
+    void weaponRegen(float time);   //!< weapon energy regeneration
+
+    //WeaponManager         weaponMan;      //!< the primary weapon manager: managing a list of energy weapons to wepaon-slot mapping
     WeaponManager         secWeaponMan;       //!< the secondary weapon manager: managing a list of special weapons to weapon-slot mapping
     short                 supportedPlaymodes; //!< What Playmodes are Supported in this Playable.
     Playable::Playmode    playmode;           //!< The current playmode.
-    bool                  bPrimFire;
     bool                  bSecFire;
 
@@ -98,10 +101,10 @@
     int         weaponEnergyUsed;
     float       weaponEnergyShare;
+    float       weaponEnergyRegen;
     int         weaponSpecialSlot;  //!< number of special weapon slots
     int         weaponSpecialUsed;
 
-    int         reactorOutput;      //!< reactor output
-    int         reactorCapacity;    //!< reactor capacity
-
+    float       reactorOutput;      //!< reactor output 
+    float       reactorCapacity;    //!< reactor capacity
 
     int         curWeaponPrimary;   //!< current primary weapon config 
Index: branches/playability/src/world_entities/weapons/weapon.h
===================================================================
--- branches/playability/src/world_entities/weapons/weapon.h	(revision 9964)
+++ branches/playability/src/world_entities/weapons/weapon.h	(revision 9965)
@@ -169,4 +169,6 @@
     bool check() const;
     void debug() const;
+
+    void updateWidgets();
 
   protected:
@@ -200,5 +202,5 @@
     inline void enterState(WeaponState state);
 
-    void updateWidgets();
+    
 
   private:
Index: branches/playability/src/world_entities/weapons/weapon_manager.cc
===================================================================
--- branches/playability/src/world_entities/weapons/weapon_manager.cc	(revision 9964)
+++ branches/playability/src/world_entities/weapons/weapon_manager.cc	(revision 9965)
@@ -317,9 +317,9 @@
 
 /**
- * @brief does the same as the funtion inclreaseAmmunition, added four your convenience
+ * @brief does the same as the funtion increaseAmmunition, added four your convenience
  * @param weapon, the Weapon to read the ammo-info about.
  * @param ammo how much ammo to add.
  */
-float WeaponManager::inclreaseAmmunition(const Weapon* weapon, float ammo)
+float WeaponManager::increaseAmmunition(const Weapon* weapon, float ammo)
 {
   assert (weapon != NULL);
Index: branches/playability/src/world_entities/weapons/weapon_manager.h
===================================================================
--- branches/playability/src/world_entities/weapons/weapon_manager.h	(revision 9964)
+++ branches/playability/src/world_entities/weapons/weapon_manager.h	(revision 9965)
@@ -91,5 +91,5 @@
 
     float increaseAmmunition(const ClassID& projectileType, float ammo);
-    float inclreaseAmmunition(const Weapon* weapon, float ammo);
+    float increaseAmmunition(const Weapon* weapon, float ammo);
 
     /** @returns a fixed target namely the Crosshair's 3D position */
