Index: /branches/spaceshipcontrol/src/story_entities/world.cc
===================================================================
--- /branches/spaceshipcontrol/src/story_entities/world.cc	(revision 5894)
+++ /branches/spaceshipcontrol/src/story_entities/world.cc	(revision 5895)
@@ -363,6 +363,5 @@
   {
     playable = dynamic_cast<Playable*>(playableList->front());
-    if (playable != NULL)
-      this->localPlayer->setControllable(playable);
+    this->localPlayer->setControllable(playable);
   }
 
Index: /branches/spaceshipcontrol/src/world_entities/playable.cc
===================================================================
--- /branches/spaceshipcontrol/src/world_entities/playable.cc	(revision 5894)
+++ /branches/spaceshipcontrol/src/world_entities/playable.cc	(revision 5895)
@@ -14,7 +14,8 @@
 */
 
-#include "weapons/weapon_manager.h"
 
 #include "playable.h"
+
+#include "weapons/weapon_manager.h"
 #include "event_handler.h"
 #include "player.h"
@@ -29,4 +30,10 @@
 {
   delete this->weaponMan;
+
+  if (this->currentPlayer)
+  {
+    PRINTF(2)("There is Still a Player subscribed to this Playable (%s::%s)\n", this->getClassName(), this->getName());
+
+  }
 }
 
@@ -36,4 +43,6 @@
   PRINTF(4)("PLAYABLE INIT\n");
   this->weaponMan = new WeaponManager(this);
+
+  this->currentPlayer = NULL;
 }
 
@@ -41,14 +50,22 @@
  * subscribe to all events the controllable needs
  */
-void Playable::subscribeEvents(Player* player)
+bool Playable::subscribePlayer(Player* player)
 {
-  /*EventHandler*/
-  EventHandler* evh = EventHandler::getInstance();
-  std::list<int>::iterator ev;
-  for (ev = this->events.begin(); ev != events.end(); ev++)
+  if (this->currentPlayer != NULL)
   {
-    evh->subscribe(player, ES_GAME, (*ev));
+    PRINTF(1)("Already registered Player:%s to this Playable (%s:%s)\n", this->currentPlayer->getName(), this->getClassName(), this->getName());
+    return false;
   }
+  else
+  {
+    this->currentPlayer = player;
+    /*EventHandler*/
+    EventHandler* evh = EventHandler::getInstance();
+    std::list<int>::iterator ev;
+    for (ev = this->events.begin(); ev != events.end(); ev++)
+      evh->subscribe(player, ES_GAME, (*ev));
 
+    return true;
+  }
 }
 
Index: /branches/spaceshipcontrol/src/world_entities/playable.h
===================================================================
--- /branches/spaceshipcontrol/src/world_entities/playable.h	(revision 5894)
+++ /branches/spaceshipcontrol/src/world_entities/playable.h	(revision 5895)
@@ -31,5 +31,6 @@
     inline WeaponManager* getWeaponManager() const { return this->weaponMan; };
 
-    void subscribeEvents(Player* player);
+    bool subscribePlayer(Player* player);
+
     virtual void process(const Event &event) {} //= 0;
     inline const std::list<int>& getEventList() { return this->events; };
@@ -37,4 +38,5 @@
   protected:
     void registerEvent(int eventType);
+    void unregisterEvent(int eventType);
 
   private:
Index: /branches/spaceshipcontrol/src/world_entities/player.cc
===================================================================
--- /branches/spaceshipcontrol/src/world_entities/player.cc	(revision 5894)
+++ /branches/spaceshipcontrol/src/world_entities/player.cc	(revision 5895)
@@ -61,17 +61,14 @@
 
 
-void Player::setControllable(Playable* controllalble)
+bool Player::setControllable(Playable* controllable)
 {
-
-  this->controllable = controllalble;
-  this->controllable->subscribeEvents(this);
-
+  if(controllable != NULL && controllable->subscribePlayer(this))
+  {
+      this->controllable = controllable;
+      return true;
+  }
+  else
+    return false;
 }
 
 
-
-Playable* Player::getControllable()
-{
-  return controllable;
-}
-
Index: /branches/spaceshipcontrol/src/world_entities/player.h
===================================================================
--- /branches/spaceshipcontrol/src/world_entities/player.h	(revision 5894)
+++ /branches/spaceshipcontrol/src/world_entities/player.h	(revision 5895)
@@ -31,11 +31,11 @@
     virtual void  process(const Event &event);
 
-    void          setControllable(Playable* controllalble);
+    bool          setControllable(Playable* controllalble);
     void          disconnectControllable();
-    Playable*     getControllable();
+    Playable*     getControllable() { return this->controllable; };
 
 
   private:
-    Playable* controllable;
+    Playable*          controllable;
 
 
