Index: branches/gui/src/lib/event/event_def.h
===================================================================
--- branches/gui/src/lib/event/event_def.h	(revision 7864)
+++ branches/gui/src/lib/event/event_def.h	(revision 7866)
@@ -12,5 +12,4 @@
 #include "SDL/SDL_keysym.h"
 #endif
-#include "stdincl.h"
 
 
Index: branches/gui/src/lib/event/event_handler.cc
===================================================================
--- branches/gui/src/lib/event/event_handler.cc	(revision 7864)
+++ branches/gui/src/lib/event/event_handler.cc	(revision 7866)
@@ -171,21 +171,34 @@
    unsubscribe(EventListener* el, elState state) function
 */
-void EventHandler::unsubscribe(elState state, int eventType)
+void EventHandler::unsubscribe(EventListener* el, elState state, int eventType)
 {
   PRINTF(4)("Unsubscribing event type nr: %i\n", eventType);
   if (state == ES_ALL)
     for (unsigned int i = 0; i < ES_NUMBER; i++)
-      this->listeners[i][eventType].clear();
-  else
-    this->listeners[state][eventType].clear();
-}
-
-
-/**
- * unsubscribe all events from a specific listener
+    {
+      std::vector<EventListener*>::iterator listener =
+         std::find(this->listeners[i][eventType].begin(),
+                   this->listeners[i][eventType].end(),
+                   el);
+      if (listener != this->listeners[i][eventType].end())
+        this->listeners[i][eventType].erase(listener);
+    }
+  else
+  {
+    std::vector<EventListener*>::iterator listener =
+        std::find(this->listeners[state][eventType].begin(),
+                  this->listeners[state][eventType].end(),
+                  el);
+    if (listener != this->listeners[state][eventType].end())
+      this->listeners[state][eventType].erase(listener);
+  }
+}
+
+
+/**
+ * @brief unsubscribe all events from a specific listener
  * @param el: the listener that wants to unsubscribe itself
  * @param state: the state in which the events shall be unsubscribed
-
-*/
+ */
 void EventHandler::unsubscribe(EventListener* el, elState state)
 {
Index: branches/gui/src/lib/event/event_handler.h
===================================================================
--- branches/gui/src/lib/event/event_handler.h	(revision 7864)
+++ branches/gui/src/lib/event/event_handler.h	(revision 7866)
@@ -35,5 +35,5 @@
 
   void subscribe(EventListener* el, elState state, int eventType);
-  void unsubscribe(elState state, int eventType);
+  void unsubscribe(EventListener* el, elState state, int eventType);
   void unsubscribe(EventListener* el, elState state = ES_ALL);
   void flush(elState state);
Index: branches/gui/src/lib/event/event_listener.cc
===================================================================
--- branches/gui/src/lib/event/event_listener.cc	(revision 7864)
+++ branches/gui/src/lib/event/event_listener.cc	(revision 7866)
@@ -23,6 +23,6 @@
 
 /**
- *  standard constructor
-*/
+ * @brief standard constructor
+ */
 EventListener::EventListener ()
 {
@@ -32,6 +32,8 @@
 
 /**
- *  standard deconstructor
-*/
+ * @brief standard deconstructor
+ *
+ * Unsubscribes all Subscribed Events, of this EventListener.
+ */
 EventListener::~EventListener ()
 {
@@ -39,2 +41,35 @@
   EventHandler::getInstance()->unsubscribe(this, ES_ALL);
 }
+
+bool EventListener::isEventSubscribed(elState state, int eventType) const
+{
+  return EventHandler::getInstance()->isSubscribed(state, eventType);
+}
+
+
+/**
+ * @brief Subscribes an Events to this EventListener.
+ * @param state the state to subscribe to.
+ * @param eventType the Type of Event to subscribe.
+ */
+void EventListener::subscribeEvent(elState state, int eventType)
+{
+  EventHandler::getInstance()->subscribe(this, state, eventType);
+}
+
+
+/**
+ * @brief Unubscribes an Event from this EventListener.
+ * @param state the state to unsubscribe from.
+ * @param eventType the Type of Event to unsubscribe.
+ */
+void EventListener::unsubscribeEvent(elState state, int eventType)
+{
+  EventHandler::getInstance()->unsubscribe(this, state, eventType);
+}
+
+void EventListener::unsubscribeEvents(elState state)
+{
+  EventHandler::getInstance()->unsubscribe(this, state);
+}
+
Index: branches/gui/src/lib/event/event_listener.h
===================================================================
--- branches/gui/src/lib/event/event_listener.h	(revision 7864)
+++ branches/gui/src/lib/event/event_listener.h	(revision 7866)
@@ -9,4 +9,5 @@
 #include "base_object.h"
 #include "event.h"
+#include "event_def.h"
 
 //! A class for event listener
@@ -17,9 +18,16 @@
   virtual ~EventListener();
 
+  bool isEventSubscribed(elState state, int eventType) const;
+
+  void subscribeEvent(elState state, int eventType);
+  void unsubscribeEvent(elState state, int eventType);
+  void unsubscribeEvents(elState state = ES_ALL);
+
   /**
-   * abstract function that processes events from the handler
+   * @brief abstract function that processes events from the handler
    * @param event: the event
    */
   virtual void process(const Event &event) = 0;
+
 };
 
Index: branches/gui/src/lib/gui/gl_gui/glgui_handler.cc
===================================================================
--- branches/gui/src/lib/gui/gl_gui/glgui_handler.cc	(revision 7864)
+++ branches/gui/src/lib/gui/gl_gui/glgui_handler.cc	(revision 7866)
@@ -31,4 +31,6 @@
     this->setClassID(CL_GLGUI_HANDLER, "GLGuiHandler");
     this->setName("GLGuiHandler");
+
+    //this->subscribeEvent()
 
   }
Index: branches/gui/src/lib/gui/gl_gui/glgui_widget.h
===================================================================
--- branches/gui/src/lib/gui/gl_gui/glgui_widget.h	(revision 7864)
+++ branches/gui/src/lib/gui/gl_gui/glgui_widget.h	(revision 7866)
@@ -56,5 +56,16 @@
     bool focusOverWidget(float x, float y);
 
-    // if something was clickt on the GUI-widget.
+
+    virtual void update() {};
+    virtual void draw() const;
+
+    Material& backMaterial() { return this->backMat; };
+    const Material& backMaterial() const { return this->backMat; };
+
+    Material& frontMaterial() { return this->frontMat; };
+    const Material& frontMaterial() const { return this->frontMat; };
+
+  protected:
+        // if something was clickt on the GUI-widget.
     virtual void clicked(const Event& event) {};
     virtual void released(const Event& event) {};
@@ -65,11 +76,5 @@
     virtual void destroyed() {};
 
-    virtual void update() {};
-    virtual void draw() const;
 
-    Material& backMaterial() { return this->backMat; };
-    Material& frontMaterial() { return this->frontMat; };
-
-  protected:
     inline void startDraw() const { glPushMatrix(); glTranslatef(this->getAbsCoor2D().x, this->getAbsCoor2D().y, 0); };
     inline void endDraw() const { glPopMatrix(); };
Index: branches/gui/src/lib/shell/shell.cc
===================================================================
--- branches/gui/src/lib/shell/shell.cc	(revision 7864)
+++ branches/gui/src/lib/shell/shell.cc	(revision 7866)
@@ -65,9 +65,9 @@
 
     // EVENT-Handler subscription of '`' to all States.
-    EventHandler::getInstance()->subscribe(this, ES_ALL, SDLK_BACKQUOTE);
-    EventHandler::getInstance()->subscribe(this, ES_ALL, SDLK_F12);
-    EventHandler::getInstance()->subscribe(this, ES_SHELL, SDLK_PAGEUP);
-    EventHandler::getInstance()->subscribe(this, ES_SHELL, SDLK_PAGEDOWN);
-    EventHandler::getInstance()->subscribe(this, ES_SHELL, EV_VIDEO_RESIZE);
+    this->subscribeEvent(ES_ALL, SDLK_BACKQUOTE);
+    this->subscribeEvent(ES_ALL, SDLK_F12);
+    this->subscribeEvent(ES_SHELL, SDLK_PAGEUP);
+    this->subscribeEvent(ES_SHELL, SDLK_PAGEDOWN);
+    this->subscribeEvent(ES_SHELL, EV_VIDEO_RESIZE);
 
     // BUFFER
Index: branches/gui/src/lib/shell/shell_input.cc
===================================================================
--- branches/gui/src/lib/shell/shell_input.cc	(revision 7864)
+++ branches/gui/src/lib/shell/shell_input.cc	(revision 7866)
@@ -20,5 +20,4 @@
 #include "shell_command.h"
 #include "shell_command_class.h"
-#include "event_handler.h"
 
 #include "debug.h"
@@ -50,16 +49,15 @@
     this->setRepeatDelay(.3, .05);
 
-    // subscribe all keyboard commands to ES_SEHLL
-    EventHandler* evh = EventHandler::getInstance();
+    // subscribe all keyboard commands to ES_SHELL
     for (int i = 1; i < SDLK_LAST; i++)
     {
-      if (!evh->isSubscribed(ES_SHELL, i))
-        evh->subscribe(this, ES_SHELL, i);
+      if (!this->isEventSubscribed(ES_SHELL, i))
+        this->subscribeEvent(ES_SHELL, i);
     }
     // unsubscribe unused TODO improve.
-    evh->unsubscribe(ES_SHELL, SDLK_BACKQUOTE);
-    evh->unsubscribe(ES_SHELL, SDLK_F12);
-    evh->unsubscribe(ES_SHELL, SDLK_PAGEUP);
-    evh->unsubscribe(ES_SHELL, SDLK_PAGEDOWN);
+    this->unsubscribeEvent(ES_SHELL, SDLK_BACKQUOTE);
+    this->unsubscribeEvent(ES_SHELL, SDLK_F12);
+    this->unsubscribeEvent(ES_SHELL, SDLK_PAGEUP);
+    this->unsubscribeEvent(ES_SHELL, SDLK_PAGEDOWN);
 
   }
Index: branches/gui/src/story_entities/movie_loader.cc
===================================================================
--- branches/gui/src/story_entities/movie_loader.cc	(revision 7864)
+++ branches/gui/src/story_entities/movie_loader.cc	(revision 7866)
@@ -70,5 +70,5 @@
 ErrorMessage MovieLoader::unloadData()
 {
-  EventHandler::getInstance()->unsubscribe(this, ES_GAME);
+  this->unsubscribeEvents(ES_GAME);
 }
 
Index: branches/gui/src/story_entities/simple_game_menu.cc
===================================================================
--- branches/gui/src/story_entities/simple_game_menu.cc	(revision 7864)
+++ branches/gui/src/story_entities/simple_game_menu.cc	(revision 7866)
@@ -18,4 +18,6 @@
 
 #include "simple_game_menu.h"
+
+#include "event_handler.h"
 
 #include "state.h"
@@ -32,5 +34,4 @@
 #include "camera.h"
 
-#include "event_handler.h"
 #include "graphics_engine.h"
 #include "object_manager.h"
@@ -112,9 +113,9 @@
   GameWorld::init();
 
-  EventHandler::getInstance()->subscribe(this, ES_MENU, SDLK_UP);
-  EventHandler::getInstance()->subscribe(this, ES_MENU, SDLK_DOWN);
-  EventHandler::getInstance()->subscribe(this, ES_MENU, SDLK_RETURN);
-  EventHandler::getInstance()->subscribe(this, ES_MENU, SDLK_SPACE);
-  EventHandler::getInstance()->subscribe(this, ES_MENU, SDLK_ESCAPE);
+  this->subscribeEvent(ES_MENU, SDLK_UP);
+  this->subscribeEvent(ES_MENU, SDLK_DOWN);
+  this->subscribeEvent(ES_MENU, SDLK_RETURN);
+  this->subscribeEvent(ES_MENU, SDLK_SPACE);
+  this->subscribeEvent(ES_MENU, SDLK_ESCAPE);
 
   this->dataTank->localCamera->setRelCoor(this->cameraVector);
@@ -253,5 +254,5 @@
 ErrorMessage SimpleGameMenu::unloadData()
 {
-  EventHandler::getInstance()->unsubscribe(this, ES_MENU);
+  this->unsubscribeEvents(ES_MENU);
 
   std::vector<MenuLayer>::iterator mit;
Index: branches/gui/src/world_entities/camera.cc
===================================================================
--- branches/gui/src/world_entities/camera.cc	(revision 7864)
+++ branches/gui/src/world_entities/camera.cc	(revision 7866)
@@ -31,10 +31,10 @@
   this->target = new CameraTarget();
 
-  EventHandler::getInstance()->subscribe(this, ES_GAME, KeyMapper::PEV_VIEW0);
-  EventHandler::getInstance()->subscribe(this, ES_GAME, KeyMapper::PEV_VIEW1);
-  EventHandler::getInstance()->subscribe(this, ES_GAME, KeyMapper::PEV_VIEW2);
-  EventHandler::getInstance()->subscribe(this, ES_GAME, KeyMapper::PEV_VIEW3);
-  EventHandler::getInstance()->subscribe(this, ES_GAME, KeyMapper::PEV_VIEW4);
-  EventHandler::getInstance()->subscribe(this, ES_GAME, KeyMapper::PEV_VIEW5);
+  this->subscribeEvent(ES_GAME, KeyMapper::PEV_VIEW0);
+  this->subscribeEvent(ES_GAME, KeyMapper::PEV_VIEW1);
+  this->subscribeEvent(ES_GAME, KeyMapper::PEV_VIEW2);
+  this->subscribeEvent(ES_GAME, KeyMapper::PEV_VIEW3);
+  this->subscribeEvent(ES_GAME, KeyMapper::PEV_VIEW4);
+  this->subscribeEvent(ES_GAME, KeyMapper::PEV_VIEW5);
 
   this->setFovy(90);
Index: branches/gui/src/world_entities/playable.cc
===================================================================
--- branches/gui/src/world_entities/playable.cc	(revision 7864)
+++ branches/gui/src/world_entities/playable.cc	(revision 7866)
@@ -16,5 +16,6 @@
 
 #include "playable.h"
-#include "event_handler.h"
+
+#include "key_mapper.h"
 
 #include "player.h"
@@ -225,8 +226,7 @@
 
     // unsubscibe all events.
-    EventHandler* evh = EventHandler::getInstance();
     std::vector<int>::iterator ev;
     for (ev = this->events.begin(); ev != events.end(); ev++)
-      evh->unsubscribe( ES_GAME, (*ev));
+      player->unsubscribeEvent(ES_GAME, (*ev));
 
     // leave the entity
@@ -251,8 +251,7 @@
 
     /*EventHandler*/
-    EventHandler* evh = EventHandler::getInstance();
     std::vector<int>::iterator ev;
     for (ev = this->events.begin(); ev != events.end(); ev++)
-      evh->subscribe(player, ES_GAME, (*ev));
+      player->subscribeEvent(ES_GAME, (*ev));
 
     this->enter();
@@ -440,5 +439,5 @@
 
   if (this->currentPlayer != NULL)
-    EventHandler::getInstance()->subscribe(this->currentPlayer, ES_GAME, eventType);
+    this->currentPlayer->subscribeEvent(ES_GAME, eventType);
 }
 
@@ -453,5 +452,5 @@
 
   if (this->currentPlayer != NULL)
-    EventHandler::getInstance()->unsubscribe(ES_GAME, eventType);
+    this->currentPlayer->unsubscribeEvent(ES_GAME, eventType);
 }
 
Index: branches/gui/src/world_entities/player.cc
===================================================================
--- branches/gui/src/world_entities/player.cc	(revision 7864)
+++ branches/gui/src/world_entities/player.cc	(revision 7866)
@@ -40,5 +40,5 @@
   this->hud.show();
 
-  EventHandler::getInstance()->subscribe(this, ES_GAME, KeyMapper::PEV_CHANGE_SHIP);
+  this->subscribeEvent(ES_GAME, KeyMapper::PEV_CHANGE_SHIP);
 }
 
Index: branches/gui/src/world_entities/weapons/crosshair.cc
===================================================================
--- branches/gui/src/world_entities/weapons/crosshair.cc	(revision 7864)
+++ branches/gui/src/world_entities/weapons/crosshair.cc	(revision 7866)
@@ -65,5 +65,5 @@
   this->material = new Material;
 
-  //EventHandler::getInstance()->subscribe(this, ES_GAME, EV_MOUSE_MOTION);
+  //this->subscribeEvent(ES_GAME, EV_MOUSE_MOTION);
 
   // center the mouse on the screen, and also hide the cursors
