Index: trunk/src/world_entities/playable.cc
===================================================================
--- trunk/src/world_entities/playable.cc	(revision 6972)
+++ trunk/src/world_entities/playable.cc	(revision 6973)
@@ -207,7 +207,5 @@
 {
   if(powerUp->isA(CL_WEAPON_POWER_UP)) {
-    Weapon* weapon = dynamic_cast<WeaponPowerUp*>(powerUp)->getWeapon();
-    WeaponManager* manager = this->getWeaponManager();
-    return manager->addWeapon(weapon);
+    return dynamic_cast<WeaponPowerUp*>(powerUp)->process(this->getWeaponManager());
   }
   else if(powerUp->isA(CL_PARAM_POWER_UP)) {
Index: trunk/src/world_entities/power_ups/power_up.cc
===================================================================
--- trunk/src/world_entities/power_ups/power_up.cc	(revision 6972)
+++ trunk/src/world_entities/power_ups/power_up.cc	(revision 6973)
@@ -21,5 +21,5 @@
 #include "primitive_model.h"
 
-#include "assert.h"
+#include "load_param.h"
 
 using namespace std;
@@ -29,5 +29,5 @@
   this->setClassID(CL_POWER_UP, "PowerUp");
 
-  this->respawnType = RESPAWN_NONE;
+  this->respawnType = RESPAWN_TIME;
   this->respawnStart = 10;
   this->model = NULL;
@@ -39,5 +39,5 @@
   this->buildObbTree( 4);
   this->sphereMaterial = new Material;
-  this->sphereMaterial->setTransparency(.1);
+  this->sphereMaterial->setTransparency(.8);
   this->sphereMaterial->setDiffuse(r, g, b);
   this->toList(OM_COMMON);
@@ -53,4 +53,6 @@
 {
   WorldEntity::loadParams(root);
+  LoadParam(root, "respawnType", this, PowerUp, setRespawnType);
+  LoadParam(root, "respawnTime", this, PowerUp, setRespawnTime);
 }
 
@@ -62,6 +64,13 @@
     if(dynamic_cast<Extendable*>(entity)->pickup(this))
     {
-      this->respawnTime = this->respawnStart;
-      this->toList(OM_DEAD_TICK);
+      switch(respawnType) {
+        case RESPAWN_NONE:
+          this->toList(OM_DEAD);
+          break;
+        case RESPAWN_TIME:
+          this->toList(OM_DEAD_TICK);
+          this->respawnTime = this->respawnStart;
+          break;
+      }
     }
   }
@@ -72,5 +81,4 @@
     this->respawnTime -= dt;
     if(this->respawnTime <= 0) {
-      this->respawn();
       this->toList(OM_COMMON);
     }
@@ -110,4 +118,8 @@
 }
 
+void PowerUp::setRespawnTime(const float respawnTime)
+{
+  this->respawnStart = respawnTime;
+}
 
 
Index: trunk/src/world_entities/power_ups/power_up.h
===================================================================
--- trunk/src/world_entities/power_ups/power_up.h	(revision 6972)
+++ trunk/src/world_entities/power_ups/power_up.h	(revision 6973)
@@ -26,4 +26,5 @@
   virtual void tick(float dt);
   void setRespawnType(const char* type);
+  void setRespawnTime(const float respawn);
 
   int       writeState(const byte* data, int length, int sender);
@@ -33,5 +34,4 @@
   PowerUp(float r, float g, float b);
   virtual ~PowerUp ();
-  virtual void respawn() {};
   Model* model;
 
Index: trunk/src/world_entities/power_ups/weapon_power_up.cc
===================================================================
--- trunk/src/world_entities/power_ups/weapon_power_up.cc	(revision 6972)
+++ trunk/src/world_entities/power_ups/weapon_power_up.cc	(revision 6973)
@@ -53,5 +53,4 @@
   this->setClassID(CL_WEAPON_POWER_UP, "WeaponPowerUp");
   this->weaponXML = NULL;
-  this->weaponID = CL_NULL;
   this->weapon = NULL;
 }
@@ -65,5 +64,5 @@
   {
     this->weaponXML = elem;
-    respawn();
+    newWeapon();
   }
   else
@@ -78,8 +77,19 @@
 }
 
-void WeaponPowerUp::respawn()
+bool WeaponPowerUp::process(WeaponManager* manager)
+{
+  if(manager->addWeapon(this->weapon)) {
+    newWeapon();
+  }
+  else {
+    manager->increaseAmmunition(this->weapon->getProjectileType(), this->weapon->getEnergy());
+  }
+  return true;
+}
+
+void WeaponPowerUp::newWeapon()
 {
   this->weapon = dynamic_cast<Weapon*>((weaponXML == NULL)
-      ? Factory::fabricate(static_cast<ClassID>(weaponID))
+      ? Factory::fabricate(static_cast<ClassID>(this->weapon->getLeafClassID()))
       : Factory::fabricate((TiXmlElement*)this->getXmlElem()->FirstChildElement("weapon")));
   this->model = this->weapon->getModel(0);
@@ -89,5 +99,4 @@
 {
   this->weapon = dynamic_cast<Weapon*>(Factory::fabricate(name));
-  this->weaponID = (ClassID)this->weapon->getLeafClassID();
   this->model = this->weapon->getModel(0);
 }
Index: trunk/src/world_entities/power_ups/weapon_power_up.h
===================================================================
--- trunk/src/world_entities/power_ups/weapon_power_up.h	(revision 6972)
+++ trunk/src/world_entities/power_ups/weapon_power_up.h	(revision 6973)
@@ -9,4 +9,5 @@
 #include "power_up.h"
 #include "weapons/weapon.h"
+#include "weapons/weapon_manager.h"
 
 /* FORWARD DEFINITION */
@@ -27,12 +28,11 @@
   virtual int readBytes(byte* data, int maxLength, int * reciever );
 
-protected:
-  virtual void respawn();
+  bool process(WeaponManager* manager);
 
 private:
   void init();
+  void newWeapon();
 private:
   Weapon* weapon;
-  ClassID weaponID;
   const TiXmlElement* weaponXML;
 
