Index: branches/network/src/story_entities/campaign.cc
===================================================================
--- branches/network/src/story_entities/campaign.cc	(revision 6373)
+++ branches/network/src/story_entities/campaign.cc	(revision 6374)
@@ -25,27 +25,25 @@
 
 
-Campaign::Campaign ()
+/**
+ *  the constructor
+ * @param root the XML root element
+ *
+ * this constructor is always called in a XML context (loading procedure)
+ */
+Campaign::Campaign ( TiXmlElement* root)
 {
   this->setClassID(CL_CAMPAIGN, "Campaign");
   this->isInit = false;
-}
-
-Campaign::Campaign ( TiXmlElement* root)
-{
-  this->setClassID(CL_CAMPAIGN, "Campaign");
 
   PRINTF(4)("Loading Campaign...\n");
-
   assert( root != NULL);
 
-  this->isInit = false;
-
   this->loadParams(root);
-
-
-  //if( lastCreated != NULL)
-  //lastCreated->setStoryID( WORLD_ID_GAMEEND);
-}
-
+}
+
+
+/**
+ * the campaign destructor
+ */
 Campaign::~Campaign ()
 {}
@@ -70,8 +68,8 @@
 
   LoadParam(root, "identifier", this, Campaign, setStoryID)
-     .describe("A Unique Identifier for this Campaign");
-
-   LoadParamXML(root, "WorldList", this, Campaign, loadWorldListParams)
-      .describe("A List of Worlds to be loaded in this Campaign");
+  .describe("A Unique Identifier for this Campaign");
+
+  LoadParamXML(root, "WorldList", this, Campaign, loadWorldListParams)
+  .describe("A List of Worlds to be loaded in this Campaign");
 }
 
@@ -83,18 +81,19 @@
 void Campaign::loadWorldListParams(const TiXmlElement* root)
 {
-  if (root == NULL)
+  if( root == NULL)
     return;
 
   LOAD_PARAM_START_CYCLE(root, element);
   {
-    PRINTF(5)("Campaign: Constructor: adding a world\n");
     StoryEntity* created = (StoryEntity*) Factory::fabricate(element);
     if( created != NULL)
-    {
       this->addEntity( created);
-    }
+    PRINTF(3)("Campaign: Constructor: adding a world with name \"%s\" and id %i\n",
+              created->getName(), created->getStoryID());
   }
   LOAD_PARAM_END_CYCLE(element);
-}
+
+}
+
 
 /**
@@ -120,43 +119,40 @@
   this->currentEntity = se;
   while( se != NULL && this->running)
+  {
+    PRINTF(0)("Campaign is starting StoryEntity nr:%i\n", se->getStoryID());
+
+    se->init();
+    se->loadData();
+
+    se->preStart();
+    se->start();
+
+
+    int nextWorldID = se->getNextStoryID();
+
+    this->entities.remove(se);
+    delete se;
+
+    se = this->getStoryEntity(nextWorldID);
+    this->currentEntity = se;
+    if( ( nextWorldID == WORLD_ID_GAMEEND) || ( se == NULL) )
     {
-      PRINTF(0)("Starting new StoryEntity Nr:%i\n", se->getStoryID());
-
-      se->init();
-
-      //se->preLoad();
-      se->loadData();
-      //se->postLoad();
-
-
-      se->preStart();
-      se->start();
-
-      int nextWorldID = se->getNextStoryID();
-
-      this->entities.remove(se);
-      delete se;
-
-      //printf("Campaing::start() - got nextWorldID = %i\n", nextWorldID);
-      se = this->getStoryEntity(nextWorldID);
-      this->currentEntity = se;
-      if( ( nextWorldID == WORLD_ID_GAMEEND) || ( se == NULL) )
-        {
-          PRINTF(4)("Quitting campaing story loop\n");
-          if(se != NULL)
-            delete se;
-          return errorCode;
-        }
+      PRINTF(4)("Quitting campaing story loop\n");
+      if(se != NULL)
+        delete se;
+      return errorCode;
     }
-
-    /* clean up all world that have not been loaded and therefore are still in the world list  -
-       this probably does not belong into the start function. remove this later
-    */
-    list<StoryEntity*>::iterator it;
-    for(it = this->entities.begin(); it != entities.end(); it++)
-    {
-      delete (*it);
-    }
-    PRINTF(1)("There is no StoryEnity left to play, quitting\n");
+  }
+
+  /* clean up all world that have not been loaded and therefore are still in the world list  -
+     this probably does not belong into the start function. remove this later
+  */
+  list<StoryEntity*>::iterator it;
+  for(it = this->entities.begin(); it != entities.end(); it++)
+  {
+    delete (*it);
+  }
+
+  PRINTF(2)("There is no StoryEnity left to play, quitting\n");
 }
 
@@ -183,7 +179,7 @@
   this->running = false;
   if(this->currentEntity != NULL)
-    {
-      this->currentEntity->stop();
-    }
+  {
+    this->currentEntity->stop();
+  }
 }
 
@@ -259,42 +255,15 @@
 StoryEntity* Campaign::getStoryEntity(int storyID)
 {
-  //printf("Campaing::getStoryEntity(%i) - getting next Entity\n", storyID);
   if( storyID == WORLD_ID_GAMEEND)
     return NULL;
 
-  /*
-  tList<StoryEntity>* l;
-  StoryEntity* entity = NULL;
-  l = this->entities->getNext();
-  while( l != NULL)
-    {
-      entity = l->getObject();
-      l = l->getNext();
-
-      int id = entity->getStoryID();
-      //printf("Campaing::getStoryEntity() - now looping, found entity nr=%i\n", id);
-      if(id == storyID)
-        {
-          //printf("Campaing::getStoryEntity() - yea, this is what we where looking for: %id\n");
-          return entity;
-        }
-
-    }
-  */
-
-
+  int id;
   list<StoryEntity*>::iterator it;
-  for (it = this->entities.begin(); it != this->entities.end(); it++)
-  {
-      int id = (*it)->getStoryID();
-      //printf("Campaing::getStoryEntity() - now looping, found entity nr=%i\n", id);
-      if(id == storyID)
-        {
-          //printf("Campaing::getStoryEntity() - yea, this is what we where looking for: %id\n");
-          return (*it);
-        }
-    }
-
-
+  for( it = this->entities.begin(); it != this->entities.end(); it++)
+  {
+    id = (*it)->getStoryID();
+    if( id == storyID)
+      return (*it);
+  }
 
   return NULL;
Index: branches/network/src/story_entities/campaign.h
===================================================================
--- branches/network/src/story_entities/campaign.h	(revision 6373)
+++ branches/network/src/story_entities/campaign.h	(revision 6374)
@@ -14,6 +14,5 @@
 
   public:
-    Campaign ();
-    Campaign ( TiXmlElement* root);
+    Campaign( TiXmlElement* root);
     virtual ~Campaign ();
 
@@ -48,3 +47,17 @@
 };
 
+
+
+class CampaignData : virtual public BaseObject
+{
+
+  public:
+    CampaignData();
+    virtual ~CampaignData();
+
+    void addStoryEntity(StoryEntity* se, int storyID = -1);
+
+    void getNextLevel();
+};
+
 #endif /* _CAMPAIGN_H */
Index: branches/network/src/story_entities/game_world.cc
===================================================================
--- branches/network/src/story_entities/game_world.cc	(revision 6373)
+++ branches/network/src/story_entities/game_world.cc	(revision 6374)
@@ -82,4 +82,5 @@
 
 GameWorld::GameWorld(const TiXmlElement* root)
+  : StoryEntity()
 {
   this->setClassID(CL_GAME_WORLD, "GameWorld");
@@ -97,6 +98,4 @@
 
   this->path = NULL;
-
-  this->loadParams(root);
 }
 
Index: branches/network/src/story_entities/single_player_world.cc
===================================================================
--- branches/network/src/story_entities/single_player_world.cc	(revision 6373)
+++ branches/network/src/story_entities/single_player_world.cc	(revision 6374)
@@ -38,4 +38,7 @@
   : GameWorld(root)
 {
+  this->setClassID(CL_SINGLE_PLAYER_WORLD, "SinglePlayerSinglePlayerWorld");
+  this->setName("SinglePlayerWorld uninitialized");
+
   this->loadParams(root);
 }
@@ -51,32 +54,4 @@
 {
   PRINTF(3)("SinglePlayerWorld::~SinglePlayerWorld() - deleting current world\n");
-}
-
-
-/**
- * initializes the world.
- * @param name the name of the world
- * @param worldID the ID of this world
- *
- * set all stuff here that is world generic and does not use to much memory
- * because the real init() function StoryEntity::init() will be called
- * shortly before start of the game.
- * since all worlds are initiated/referenced before they will be started.
- * NO LEVEL LOADING HERE - NEVER!
-*/
-void SinglePlayerWorld::constuctorInit(const char* name, int worldID)
-{
-  this->setClassID(CL_SINGLE_PLAYER_WORLD, "SinglePlayerSinglePlayerWorld");
-  this->setName(name);
-
-  this->gameTime = 0.0f;
-  this->setSpeed(1.0);
-  this->music = NULL;
-  this->shell = NULL;
-  this->localPlayer = NULL;
-  this->localCamera = NULL;
-
-  this->showPNodes = false;
-  this->showBV = false;
 }
 
Index: branches/network/src/story_entities/single_player_world.h
===================================================================
--- branches/network/src/story_entities/single_player_world.h	(revision 6373)
+++ branches/network/src/story_entities/single_player_world.h	(revision 6374)
@@ -28,5 +28,5 @@
 
   private:
-    void constuctorInit(const char* name, int worldID);
+
 };
 
Index: branches/network/src/story_entities/story_entity.h
===================================================================
--- branches/network/src/story_entities/story_entity.h	(revision 6373)
+++ branches/network/src/story_entities/story_entity.h	(revision 6374)
@@ -18,4 +18,6 @@
   StoryEntity ();
   virtual ~StoryEntity ();
+
+  void loadParams(const TiXmlElement* root);
 
   /* initialisation and loading */
@@ -47,5 +49,5 @@
   inline void setStoryID(int storyID) { this->storyID = storyID; }
   /** sets the story id of the current entity, this enables it to be identified in a  global context. @returns  the story id  */
-  inline int getStoryID() { this->storyID = storyID; }
+  inline int getStoryID() { return this->storyID; }
   /**  sets the id of the next story entity: StoryEntities can choose their following entity themselfs.
    * the entity id defined here  will be startet after this entity ends. this can be convenient if you
