Index: /trunk/src/story_entities/campaign.cc
===================================================================
--- /trunk/src/story_entities/campaign.cc	(revision 6151)
+++ /trunk/src/story_entities/campaign.cc	(revision 6152)
@@ -117,9 +117,9 @@
     {
       PRINTF(0)("Starting new StoryEntity Nr:%i\n", se->getStoryID());
-      se->displayLoadScreen();
       se->preLoad();
       se->load();
-      se->init();
-      se->releaseLoadScreen();
+      se->postLoad();
+
+      se->preStart();
       se->start();
       se->destroy();
Index: /trunk/src/story_entities/story_entity.cc
===================================================================
--- /trunk/src/story_entities/story_entity.cc	(revision 6151)
+++ /trunk/src/story_entities/story_entity.cc	(revision 6152)
@@ -73,120 +73,2 @@
   return this->nextStoryID;
 }
-
-
-/**
- *  stuff that will have to be initialized before load
-
-   this gives all storyentities the possibility to init stuff before the
-   load function, where all the stuff is been made ready for start
-*/
-ErrorMessage StoryEntity::preLoad()
-{}
-
-/**
-  *  loads the current entity
-
-    this is here to enable you loading maps into the entities. for all other actions you
-    should take the init() function.
-    load() is exec before init()
-*/
-ErrorMessage StoryEntity::load()
-{}
-
-
-/**
-  *  initialize the entity before use.
-  * @returns an error code if not able to apply.
-
-    After execution of this function, the Entity is ready to be played/executed,
-    this shifts the initialisation work before the execution - very important...
-    init() is exec shortly before start()
-*/
-ErrorMessage StoryEntity::init()
-{}
-
-
-/**
-  *  starts the entity with the choosen id. only for entities with lists.
-  * @param story id
-  * @returns error code if this action has caused a error
-
-    this simply starts the story with the id storyID. the story with the choosen id has
-    to be part of the current entity else, this doesn't make sense. this is used for
-    campaigns or the GameLoader, they have lists of Campaigns/Worlds with their own
-    storyID.
-*/
-ErrorMessage StoryEntity::start(int storyID)
-{}
-
-
-/**
-  *  starts the current entity
-  * @returns error code if this action has caused a error
-*/
-ErrorMessage StoryEntity::start()
-{}
-
-
-/**
-  *  pause the current entity
-  * @returns error code if this action has caused a error
-
-    this pauses the current entity or passes this call forth to the running entity.
-*/
-ErrorMessage StoryEntity::pause()
-{}
-
-
-/**
-  *  resumes a pause
-  * @returns error code if this action has caused a error
-
-    this resumess the current entity or passes this call forth to the running entity.
-*/
-ErrorMessage StoryEntity::resume()
-{}
-
-
-/**
-  *  stops the current entity
-  * @returns error code if this action has caused a error
-
-    ATTENTION: this function shouldn't call other functions, or if so, they must return
-    after finishing. If you ignore or forget to do so, the current entity is not able to
-    terminate and it will run in the background or the ressources can't be freed or even
-    worse: are freed and the program will end in a segmentation fault!
-    hehehe, all seen... :)
-*/
-ErrorMessage StoryEntity::stop()
-{}
-
-
-/**
-  *  destroys and cleans up the current entity.
-
-    this cleans up ressources before the deconstructor is called. for terminating
-    the entity please use the stop() function.
-*/
-ErrorMessage StoryEntity::destroy()
-{}
-
-
-/**
-  *  this displays the load screen
-
-    it will need some time to load maps or things like that. to inform the user about
-    progress and to just show him/her something for the eyes, put here this stuff
-*/
-void StoryEntity::displayLoadScreen()
-{}
-
-
-/**
-  *  undisplay the load screen
-
-    the load process has terminated, you now can release the load screen and start this
-    entity.
-*/
-void StoryEntity::releaseLoadScreen()
-{}
Index: /trunk/src/story_entities/story_entity.h
===================================================================
--- /trunk/src/story_entities/story_entity.h	(revision 6151)
+++ /trunk/src/story_entities/story_entity.h	(revision 6152)
@@ -19,20 +19,20 @@
   virtual ~StoryEntity ();
 
-  bool isInit;  //! if the entity is initialized, this has to be true
-  bool isPaused; //! is true if the entity is paused
 
-  virtual ErrorMessage preLoad();
-  virtual ErrorMessage load();
-  virtual ErrorMessage init();
-  virtual ErrorMessage start(int storyID);
-  virtual ErrorMessage start();
-  virtual ErrorMessage pause();
-  virtual ErrorMessage resume();
-  virtual ErrorMessage stop();
-  virtual ErrorMessage destroy();
+  // INIT AND LOAD //
+  virtual ErrorMessage preLoad() {};
+  virtual ErrorMessage load() {};
+  virtual ErrorMessage postLoad() {};
+  virtual ErrorMessage check() {};
 
-
-  virtual void displayLoadScreen();
-  virtual void releaseLoadScreen();
+  // RUNNING //
+  virtual ErrorMessage preStart() {};
+  virtual ErrorMessage start() = 0;
+  virtual ErrorMessage pause() = 0;
+  virtual ErrorMessage rewind() {};
+  virtual ErrorMessage suspend() {};
+  virtual ErrorMessage resume() = 0;
+  virtual ErrorMessage stop() = 0;
+  virtual ErrorMessage destroy() {};
 
   void setStoryID(int storyID);
@@ -42,8 +42,13 @@
   int getNextStoryID();
 
+  protected:
+    bool isInit;         //!< if the entity is initialized, this has to be true.
+    bool readyToRun;     //!< If the entity is ready to run -> post-check.
+    bool isPaused;       //!< is true if the entity is paused
+    bool isSuspended;    //!< if the Entity is suspended.
 
  private:
-  int storyID; //! this is the number of this entity, identifying it in a list/tree...
-  int nextStoryID; //! if this entity has finished, this entity shall be called
+  int storyID;           //!< this is the number of this entity, identifying it in a list/tree...
+  int nextStoryID;       //!< if this entity has finished, this entity shall be called
 };
 
Index: /trunk/src/story_entities/world.cc
===================================================================
--- /trunk/src/story_entities/world.cc	(revision 6151)
+++ /trunk/src/story_entities/world.cc	(revision 6152)
@@ -201,4 +201,5 @@
 
   GraphicsEngine::getInstance()->displayFPS(true);
+  this->displayLoadScreen();
 }
 
@@ -384,4 +385,9 @@
 }
 
+ErrorMessage World::postLoad()
+{
+  this->releaseLoadScreen();
+}
+
 
 /**
@@ -391,5 +397,5 @@
  * started
 */
-ErrorMessage World::init()
+ErrorMessage World::preStart()
 {
   this->bPause = false;
Index: /trunk/src/story_entities/world.h
===================================================================
--- /trunk/src/story_entities/world.h	(revision 6151)
+++ /trunk/src/story_entities/world.h	(revision 6152)
@@ -39,5 +39,7 @@
   virtual ErrorMessage preLoad();
   virtual ErrorMessage load ();
-  virtual ErrorMessage init ();
+  virtual ErrorMessage postLoad();
+
+  virtual ErrorMessage preStart();
   virtual ErrorMessage start ();
   virtual ErrorMessage stop ();
@@ -46,6 +48,6 @@
   virtual ErrorMessage destroy ();
 
-  virtual void displayLoadScreen();
-  virtual void releaseLoadScreen();
+  void displayLoadScreen();
+  void releaseLoadScreen();
 
   /* interface to world */
Index: /trunk/src/util/loading/game_loader.cc
===================================================================
--- /trunk/src/util/loading/game_loader.cc	(revision 6151)
+++ /trunk/src/util/loading/game_loader.cc	(revision 6152)
@@ -19,16 +19,12 @@
 
 #include "game_loader.h"
+#include "load_param.h"
 
 #include "shell_command.h"
 #include "campaign.h"
-#include "world.h"
-#include "orxonox.h"
-#include "camera.h"
-#include "vector.h"
+
 #include "resource_manager.h"
-#include "factory.h"
-#include "event.h"
+
 #include "event_handler.h"
-#include <string.h>
 
 
Index: /trunk/src/util/loading/game_loader.h
===================================================================
--- /trunk/src/util/loading/game_loader.h	(revision 6151)
+++ /trunk/src/util/loading/game_loader.h	(revision 6152)
@@ -27,18 +27,16 @@
 //! The GameLoader
 /**
-   The game loader loads all game date. this is performed in the following way:
-   1. Read the structure of campaings and worlds
-   2. Create the instances of the tree: here _ALL_ StoryEntities are created
-      also if they are not yet used. the worlds should load their data in
-      the StoryEntity::load() and StoryEntity::init() functions! NOWHERE ELSE!
-      Elsewhere, all the data will be allocated at the beginning... mess...
-   3. StoryEntities are load() and init() before they start
-   4. once the gamloader starts the game there will be a campaing starting a
-      world. this is done by callaing those StoryEntity::start()
+ *  The game loader loads all game date. this is performed in the following way:
+ * 1. Read the structure of campaings and worlds
+ * 2. Create the instances of the tree: here _ALL_ StoryEntities are created
+ *    also if they are not yet used. the worlds should load their data in
+ *    the StoryEntity::load() and StoryEntity::init() functions! NOWHERE ELSE!
+ *    Elsewhere, all the data will be allocated at the beginning... mess...
+ * 3. StoryEntities are load() and init() before they start
+ * 4. once the gamloader starts the game there will be a campaing starting a
+ *    world. this is done by callaing those StoryEntity::start()
 */
 class GameLoader : public EventListener
 {
-
-
  public:
   ~GameLoader ();
