Index: trunk/src/story_entities/simple_game_menu.cc
===================================================================
--- trunk/src/story_entities/simple_game_menu.cc	(revision 6836)
+++ trunk/src/story_entities/simple_game_menu.cc	(revision 6837)
@@ -56,4 +56,5 @@
   this->cameraVector = Vector(50.0, 0.0, 0.0);
   this->menuLayer.push_back(new MenuLayer());
+  this->layerIndex = 0;
 
   this->loadParams(root);
@@ -216,36 +217,80 @@
 void SimpleGameMenu::process(const Event &event)
 {
-  if( event.type == SDLK_RETURN)
+  if( this->layerIndex == 0)
   {
-    if( this->menuSelected == this->menuQuitGame)
-    {
-      this->setNextStoryID(WORLD_ID_GAMEEND);
-      this->stop();
-    }
-    if( this->menuSelected == this->menuStartGame)
-    {
-      this->stop();
+    if( event.type == SDLK_RETURN && event.bPressed == true)
+    {
+      if( this->menuSelected == this->menuQuitGame)
+      {
+        this->setNextStoryID(WORLD_ID_GAMEEND);
+        this->stop();
+      }
+      if( this->menuSelected == this->menuStartGame)
+      {
+        //this->stop();
+        // switch to first submenu
+        if( this->menuLayer[1] == NULL)
+        {
+          PRINTF(1)("Haven't got any Story Entities to play!\n");
+          return;
+        }
+
+        this->switchMenuLayer(this->layerIndex, 1);
+
+      }
+    }
+    else if( event.type == SDLK_DOWN && event.bPressed == true)
+    {
+//     ImageEntity*
+      if(this->menuSelectedIndex < (this->menuLayer[this->layerIndex]->menuList.size() - 1))
+      {
+        this->menuSelected = this->menuLayer[this->layerIndex]->menuList[++this->menuSelectedIndex];
+        this->menuSelector->setAbsCoor(this->menuSelected->getAbsCoor());
+      }
+    }
+    else if( event.type == SDLK_UP && event.bPressed == true)
+    {
+      if(this->menuSelectedIndex > 0)
+      {
+        this->menuSelected = this->menuLayer[this->layerIndex]->menuList[--this->menuSelectedIndex];
+        this->menuSelector->setAbsCoor(this->menuSelected->getAbsCoor());
+      }
     }
   }
-  else if( event.type == SDLK_DOWN && event.bPressed == true)
+  else if( this->layerIndex == 1)
   {
-//     ImageEntity*
-    if(this->menuSelectedIndex < (this->menuLayer[0]->menuList.size() - 1))
-    {
-      this->menuSelected = this->menuLayer[0]->menuList[++this->menuSelectedIndex];
-      this->menuSelector->setAbsCoor(this->menuSelected->getAbsCoor());
-    }
+
   }
-  else if( event.type == SDLK_UP && event.bPressed == true)
+}
+
+
+/**
+ *  switches to from one meny layer to an other
+ * @param layer1 from layer
+ * @param layer2 to layer
+ */
+void SimpleGameMenu::switchMenuLayer(int layer1, int layer2)
+{
+  // wrong sizes
+  if(layer1 >= this->menuLayer.size() || layer2 >= this->menuLayer.size())
+    return;
+
+
+  PRINTF(0)("Removing layer %i\n", layer1);
+  std::vector<ImageEntity*>::iterator it;
+  // fade old menu
+  for( it = this->menuLayer[layer1]->menuList.begin(); it != this->menuLayer[layer1]->menuList.end(); it++ )
   {
-    if(this->menuSelectedIndex > 0)
-    {
-      this->menuSelected = this->menuLayer[0]->menuList[--this->menuSelectedIndex];
-      this->menuSelector->setAbsCoor(this->menuSelected->getAbsCoor());
-    }
+    (*it)->setAbsCoor(Vector(-100, -100, -100));
   }
-}
-
-
+
+
+  PRINTF(0)("Showing layer %i\n", layer1);
+  // beam here the new menu
+  for( it = this->menuLayer[layer2]->menuList.begin(); it != this->menuLayer[layer2]->menuList.end(); it++ )
+  {}
+
+  this->layerIndex = layer2;
+}
 
 
Index: trunk/src/story_entities/simple_game_menu.h
===================================================================
--- trunk/src/story_entities/simple_game_menu.h	(revision 6836)
+++ trunk/src/story_entities/simple_game_menu.h	(revision 6837)
@@ -63,4 +63,5 @@
   private:
     void animateScene(float dt);
+    void switchMenuLayer(int layer1, int layer2);
 
 
@@ -68,4 +69,5 @@
     std::vector<MenuLayer*>           menuLayer;                       //!< the menu layer
     MenuLayer*                        selectedLayer;                   //!< the selected menu layer
+    int                               layerIndex;
 
     //std::vector<ImageEntity*>         menuList;                        //!< the list of the menu items
Index: trunk/src/story_entities/story_entity.cc
===================================================================
--- trunk/src/story_entities/story_entity.cc	(revision 6836)
+++ trunk/src/story_entities/story_entity.cc	(revision 6837)
@@ -40,4 +40,5 @@
 
   this->storyID = -1;
+  this->name = NULL;
   this->nextStoryID = WORLD_ID_GAMEEND;
 }
@@ -68,4 +69,8 @@
       .describe("Sets the name of this StoryEntity");
 
+  LoadParam(root, "description", this, StoryEntity, setDescription)
+      .describe("Sets the description of this StoryEntity");
+
+
   PRINTF(4)("Loaded StoryEntity specific stuff\n");
 }
Index: trunk/src/story_entities/story_entity.h
===================================================================
--- trunk/src/story_entities/story_entity.h	(revision 6836)
+++ trunk/src/story_entities/story_entity.h	(revision 6837)
@@ -71,16 +71,21 @@
   /** @returns the name of this StoryEntity */
   inline const char* getName() { return this->name; }
+  /** sets the descroption of this StoryEntity @param name name */
+  inline void setDescription(const char* description) { this->description = description; }
+  /** @returns the description of this StoryEntity */
+  inline const char* getDescription() { return this->description; }
 
 
   protected:
-    bool isInit;         //!< if the entity is initialized, this has to be true.
-    bool isRunning;      //!< is true if the entity is running
-    bool isPaused;       //!< is true if the entity is paused
+    bool isInit;            //!< if the entity is initialized, this has to be true.
+    bool isRunning;         //!< is true if the entity is running
+    bool isPaused;          //!< is true if the entity is paused
 
 
  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
-    const char* name;      //!< name of this StoryEntity
+    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
+    const char* name;       //!< name of this StoryEntity
+    const char* description;//!< the description of the StoryEntity
 };
 
