Index: branches/powerups/src/world_entities/playable.cc
===================================================================
--- branches/powerups/src/world_entities/playable.cc	(revision 6474)
+++ branches/powerups/src/world_entities/playable.cc	(revision 6487)
@@ -21,4 +21,7 @@
 #include "player.h"
 #include "state.h"
+
+#include "power_ups/weapon_power_up.h"
+#include "power_ups/param_power_up.h"
 
 
@@ -141,4 +144,29 @@
 }
 
+bool Playable::pickup(PowerUp* powerUp)
+{
+  if(powerUp->isA(CL_WEAPON_POWER_UP)) {
+    Weapon* weapon = dynamic_cast<WeaponPowerUp*>(powerUp)->getWeapon();
+    WeaponManager* manager = this->getWeaponManager();
+    int slot = manager->getNextFreeSlot(0, weapon->getCapability());
+    if(slot >= 0) {
+      manager->addWeapon(weapon, 0, slot);
+      return true;
+    }
+  }
+  else if(powerUp->isA(CL_PARAM_POWER_UP)) {
+    ParamPowerUp* ppu = dynamic_cast<ParamPowerUp*>(powerUp);
+    switch(ppu->getType()) {
+      case POWERUP_PARAM_HEALTH:
+        this->addEnergy(ppu->getValue());
+        return true;
+      case POWERUP_PARAM_MAX_HEALTH:
+        this->setMaxEnergy(this->getMaxEnergy() + ppu->getValue());
+        return true;
+    }
+  }
+  return false;
+}
+
 /**
  * add an event to the event list of events this Playable can capture
Index: branches/powerups/src/world_entities/playable.h
===================================================================
--- branches/powerups/src/world_entities/playable.h	(revision 6474)
+++ branches/powerups/src/world_entities/playable.h	(revision 6487)
@@ -8,4 +8,5 @@
 
 #include "world_entity.h"
+#include "extendable.h"
 #include "event.h"
 #include <list>
@@ -21,5 +22,5 @@
  *
  */
-class Playable : public WorldEntity
+class Playable : public WorldEntity, public Extendable
 {
   public:
@@ -29,4 +30,6 @@
     virtual void enter()=0;
     virtual void leave()=0;
+
+    virtual bool pickup(PowerUp* powerUp);
 
     void addWeapon(Weapon* weapon, int configID = -1, int slotID = -1);
Index: branches/powerups/src/world_entities/power_ups/param_power_up.cc
===================================================================
--- branches/powerups/src/world_entities/power_ups/param_power_up.cc	(revision 6474)
+++ branches/powerups/src/world_entities/power_ups/param_power_up.cc	(revision 6487)
@@ -32,5 +32,8 @@
 
 const char* ParamPowerUp::paramTypes[] = {
-  "shield"
+  "shield",
+  "max-shield",
+  "health",
+  "max-health",
 };
 
@@ -77,5 +80,5 @@
 }
 
-void ParamPowerUp::setValue(int value)
+void ParamPowerUp::setValue(float value)
 {
   this->value = value;
@@ -84,5 +87,5 @@
 void ParamPowerUp::setType(const char* type)
 {
-  for(int i = 0; i < PARAM_size; ++i) {
+  for(int i = 0; i < POWERUP_PARAM_size; ++i) {
     if(strcmp(type, paramTypes[i]) == 0) {
       this->type = (EnumParamPowerUpType)i;
@@ -92,15 +95,15 @@
 }
 
-void ParamPowerUp::setMaxValue(int value)
+void ParamPowerUp::setMaxValue(float value)
 {
   this->max_value = value;
 }
 
-void ParamPowerUp::setMinValue(int value)
+void ParamPowerUp::setMinValue(float value)
 {
   this->min_value = value;
 }
 
-int ParamPowerUp::getValue()
+float ParamPowerUp::getValue()
 {
   return this->value;
@@ -116,5 +119,5 @@
   if(this->min_value != this->max_value)
   {
-    value = this->min_value + (int)(rand() * (this->max_value - this->min_value));
+    this->value = this->min_value + rand() * (this->max_value - this->min_value);
   }
 }
@@ -132,10 +135,10 @@
   SYNCHELP_READ_INT( i );
   this->type = (EnumParamPowerUpType)i;
-  SYNCHELP_READ_INT( this->value );
+  SYNCHELP_READ_FLOAT( this->value );
 
   if ( this->value != 0 )
   {
-    SYNCHELP_READ_INT( this->min_value );
-    SYNCHELP_READ_INT( this->max_value );
+    SYNCHELP_READ_FLOAT( this->min_value );
+    SYNCHELP_READ_FLOAT( this->max_value );
   }
 
@@ -164,10 +167,10 @@
     int i = this->type;
     SYNCHELP_WRITE_INT( i );
-    SYNCHELP_WRITE_INT( this->value );
+    SYNCHELP_WRITE_FLOAT( this->value );
 
     if ( this->value != 0 )
     {
-      SYNCHELP_WRITE_INT( this->min_value );
-      SYNCHELP_WRITE_INT( this->max_value );
+      SYNCHELP_WRITE_FLOAT( this->min_value );
+      SYNCHELP_WRITE_FLOAT( this->max_value );
     }
 
Index: branches/powerups/src/world_entities/power_ups/param_power_up.h
===================================================================
--- branches/powerups/src/world_entities/power_ups/param_power_up.h	(revision 6474)
+++ branches/powerups/src/world_entities/power_ups/param_power_up.h	(revision 6487)
@@ -12,6 +12,9 @@
 
 typedef enum EnumParamPowerUpType {
-  PARAM_SHIELD,
-  PARAM_size
+  POWERUP_PARAM_SHIELD,
+  POWERUP_PARAM_MAX_SHIELD,
+  POWERUP_PARAM_HEALTH,
+  POWERUP_PARAM_MAX_HEALTH,
+  POWERUP_PARAM_size
 } EnumParamPowerUpType;
 
@@ -23,10 +26,10 @@
   virtual ~ParamPowerUp ();
 
-  void setValue(int value);
-  void setMaxValue(int value);
-  void setMinValue(int value);
+  void setValue(float value);
+  void setMaxValue(float value);
+  void setMinValue(float value);
   void setType(const char* type);
   EnumParamPowerUpType getType();
-  int getValue();
+  float getValue();
 
   virtual int writeBytes(const byte* data, int length, int sender);
@@ -43,7 +46,7 @@
   static const char* paramTypes[];
   EnumParamPowerUpType type;
-  int value;
-  int max_value;
-  int min_value;
+  float value;
+  float max_value;
+  float min_value;
 };
 
Index: branches/powerups/src/world_entities/power_ups/power_up.cc
===================================================================
--- branches/powerups/src/world_entities/power_ups/power_up.cc	(revision 6474)
+++ branches/powerups/src/world_entities/power_ups/power_up.cc	(revision 6487)
@@ -65,8 +65,9 @@
 void PowerUp::draw() const
 {
-  glMatrixMode(GL_MODELVIEW);
+  this->sphereMaterial->select();
+  WorldEntity::draw();
+  /*glMatrixMode(GL_MODELVIEW);
   glPushMatrix();
 
-  /* translate */
   glTranslatef (this->getAbsCoor ().x,
                 this->getAbsCoor ().y,
@@ -78,5 +79,5 @@
    this->getModel(0)->draw();
 
-   glPopMatrix();
+  glPopMatrix();*/
 }
 
Index: branches/powerups/src/world_entities/space_ships/space_ship.cc
===================================================================
--- branches/powerups/src/world_entities/space_ships/space_ship.cc	(revision 6474)
+++ branches/powerups/src/world_entities/space_ships/space_ship.cc	(revision 6487)
@@ -452,28 +452,4 @@
 }
 
-/**
- *
- */
-bool SpaceShip::pickup(PowerUp* powerUp)
-{
-  if(powerUp->isA(CL_WEAPON_POWER_UP)) {
-    Weapon* weapon = dynamic_cast<WeaponPowerUp*>(powerUp)->getWeapon();
-    WeaponManager* manager = this->getWeaponManager();
-    int slot = manager->getNextFreeSlot(0, weapon->getCapability());
-    if(slot >= 0) {
-      manager->addWeapon(weapon, 0, slot);
-      return true;
-    }
-  }
-  else if(powerUp->isA(CL_PARAM_POWER_UP)) {
-    ParamPowerUp* ppu = dynamic_cast<ParamPowerUp*>(powerUp);
-    switch(ppu->getType()) {
-      case PARAM_SHIELD:
-        break;
-    }
-  }
-  return false;
-}
-
 #include "weapons/aiming_turret.h"
 // FIXME THIS MIGHT BE CONSIDERED EITHER A FEATURE, OR A BUG
Index: branches/powerups/src/world_entities/space_ships/space_ship.h
===================================================================
--- branches/powerups/src/world_entities/space_ships/space_ship.h	(revision 6474)
+++ branches/powerups/src/world_entities/space_ships/space_ship.h	(revision 6487)
@@ -15,5 +15,5 @@
 class Event;
 
-class SpaceShip : public Playable, public Extendable
+class SpaceShip : public Playable
 {
 
@@ -39,5 +39,4 @@
 
     virtual void process(const Event &event);
-    bool pickup(PowerUp* powerUp);
 
     virtual int       writeBytes(const byte* data, int length, int sender);
