Index: code/branches/bindermFS16/data/gui/scripts/CampaignMenu.lua
===================================================================
--- code/branches/bindermFS16/data/gui/scripts/CampaignMenu.lua	(revision 11188)
+++ code/branches/bindermFS16/data/gui/scripts/CampaignMenu.lua	(revision 11191)
@@ -17,11 +17,6 @@
     P.updateButton(7, winMgr:getWindow("orxonox/Mission8Button"))
     P.updateButton(8, winMgr:getWindow("orxonox/Mission9Button"))
+end
 
-
---    if (P.getIndexOfLastFinishedMission() == orxonox.LevelManager:getInstance():getNumberOfCampaignMissions() - 1) then
---        local label = winMgr:getWindow("orxonox/CampaignMenuCongratulation")
---        label:setProperty("Visible","True")
---    end
-end
 
 function P.updateButton(index, button)
@@ -46,13 +41,4 @@
     end
 end
-
---function P.shouldDisplayButton(index)
---    local size = orxonox.LevelManager:getInstance():getNumberOfCampaignMissions()
---    return index < size
---end
-
---function P.shouldActivateButton(index) --checks if button should be activated or not
---    return index <= P.getIndexOfLastFinishedMission() + 1
---end
 
 function P.getIndexOfLastFinishedMission()
Index: code/branches/bindermFS16/src/orxonox/CMakeLists.txt
===================================================================
--- code/branches/bindermFS16/src/orxonox/CMakeLists.txt	(revision 11188)
+++ code/branches/bindermFS16/src/orxonox/CMakeLists.txt	(revision 11191)
@@ -62,5 +62,4 @@
     LevelInfo.h
     LevelManager.h
-    LevelStatus.h
     MoodManager.h
     controllers/HumanController.h
Index: code/branches/bindermFS16/src/orxonox/LevelManager.cc
===================================================================
--- code/branches/bindermFS16/src/orxonox/LevelManager.cc	(revision 11188)
+++ code/branches/bindermFS16/src/orxonox/LevelManager.cc	(revision 11191)
@@ -99,4 +99,5 @@
     void LevelManager::setConfigValues()
     {
+
         SetConfigValue(defaultLevelName_, "missionOne.oxw")
             .description("Sets the pre selection of the level in the main menu.");
@@ -105,7 +106,7 @@
         SetConfigValue(campaignMissions_,  std::vector<std::string>())
             .description("The list of missions in the campaign");
-        //SetConfigValue(test_,  std::vector<int>())
-         //   .description("The list of missions and their statuses");
-            
+        //std::vector<int> v (allLevelStatus_.size(),0);
+        //SetConfigValue(allLevelWon_, v)
+        //    .description("The list of all won missions");
     }
 
@@ -185,4 +186,5 @@
     void LevelManager::activateNextLevel()
     {
+
         if (this->levels_.size() > 0)
         {
@@ -358,5 +360,5 @@
                 allLevelStatus_[i].activated=1;
                 std::vector<int> nextLevels=allLevelStatus_[i].nextLevels;
-                for(unsigned int j=i+1;j<allLevelStatus_.size();j++)
+                for(unsigned int j=0;j<allLevelStatus_.size();j++)
                 {
                     allLevelStatus_[j].activated=nextLevels[j];
@@ -366,49 +368,66 @@
     }
 
-    //updates the won variable of the corresponding LevelStatus in allLevelStatus_
+
     void LevelManager::setLevelStatus(const std::string& LevelWon)
     {
-        ModifyConfigValue(lastWonMission_, set, LevelWon);  
-    }
-
-
-    //build up allLevelStatus
+        
+            
+        ModifyConfigValue(lastWonMission_, set, LevelWon);
+
+        std::vector<int> v (allLevelStatus_.size(),0);
+        for(unsigned int i = 0;i<allLevelStatus_.size();i++)
+        {
+            if(allLevelStatus_[i].won)
+                v[i] =1;
+        }
+
+        SetConfigValue(allLevelWon_, v)
+            .description("The list of all won missions");
+
+            for (unsigned int i = 0; i < allLevelWon_.size(); ++i)
+            {
+                ModifyConfigValue(allLevelWon_[i], set, v[i]);
+            }
+
+    }
+
+
+    //build up allLevelStatus_
     //has to be done once per game (not per level)
-    //all connections between the levels are saved in here
+    //all connections between the levels are saved in the allLevelStatus_
+    //also the won variable of the LevelStatus is set to the corresponding allLevelWon_ value
     void LevelManager::buildallLevelStatus()
     {
-        LevelStatus* level = new LevelStatus(this->getContext());
-
-        /*LevelStatus level;
-        allLevelStatus_.assign (campaignMissions_.size(),level);
+        LevelStatus* level=new LevelStatus(this->getContext());
+        allLevelStatus_.assign (campaignMissions_.size(),*level);
         allLevelStatus_[0].activated=1;
-        //allLevelStatus_[0].won=true;
-
-
-        allLevelStatus_[0].nextLevels.push_back(1);
-        allLevelStatus_[0].nextLevels.push_back(1);
-        allLevelStatus_[0].nextLevels.push_back(0);
-        allLevelStatus_[0].nextLevels.push_back(0);
-        allLevelStatus_[0].nextLevels.push_back(0);
-        allLevelStatus_[0].nextLevels.push_back(0);
-        allLevelStatus_[0].nextLevels.push_back(0);
-
-        allLevelStatus_[1].nextLevels.push_back(1);
-        allLevelStatus_[1].nextLevels.push_back(2);
-        allLevelStatus_[1].nextLevels.push_back(1);
-        allLevelStatus_[1].nextLevels.push_back(0);
-        allLevelStatus_[1].nextLevels.push_back(0);
-        allLevelStatus_[1].nextLevels.push_back(0);
-        allLevelStatus_[1].nextLevels.push_back(0);
-
-        allLevelStatus_[2].nextLevels.push_back(2);
-        allLevelStatus_[2].nextLevels.push_back(1);
-        allLevelStatus_[2].nextLevels.push_back(0);
-        allLevelStatus_[2].nextLevels.push_back(0);
-        allLevelStatus_[2].nextLevels.push_back(1);
-        allLevelStatus_[2].nextLevels.push_back(0);
-        allLevelStatus_[2].nextLevels.push_back(0);*/
-
-
+
+
+        std::vector<int> v={1,1,1,0,0,0,0,0,0};
+        allLevelStatus_[0].nextLevels=v;
+
+        v={1,1,2,1,0,0,0,0,0};
+        allLevelStatus_[1].nextLevels=v;
+
+        v={1,2,1,0,1,0,0,0,0};
+        allLevelStatus_[2].nextLevels=v;
+
+        v={1,1,2,1,0,1,1,0,0};
+        allLevelStatus_[3].nextLevels=v;
+
+        v={1,2,1,0,1,0,0,1,1};
+        allLevelStatus_[4].nextLevels=v;
+
+        v={1,1,2,1,0,1,2,0,0};
+        allLevelStatus_[5].nextLevels=v;
+
+        v={1,1,2,1,0,2,1,0,0};
+        allLevelStatus_[6].nextLevels=v;
+
+        v={1,2,1,0,1,0,0,1,2};
+        allLevelStatus_[7].nextLevels=v;
+
+        v={1,2,1,0,1,0,0,2,1};
+        allLevelStatus_[8].nextLevels=v;
 
     }
Index: code/branches/bindermFS16/src/orxonox/LevelManager.h
===================================================================
--- code/branches/bindermFS16/src/orxonox/LevelManager.h	(revision 11188)
+++ code/branches/bindermFS16/src/orxonox/LevelManager.h	(revision 11191)
@@ -24,4 +24,5 @@
  *   Co-authors:
  *      Damian 'Mozork' Frick
+ *      Matthias Binder
  *
  */
@@ -147,5 +148,5 @@
             std::string lastWonMission_;
             std::vector<std::string> campaignMissions_;
-            std::vector<int> test_;
+            std::vector<int> allLevelWon_;
             std::vector<LevelStatus> allLevelStatus_;
 
Index: code/branches/bindermFS16/src/orxonox/LevelStatus.h
===================================================================
--- code/branches/bindermFS16/src/orxonox/LevelStatus.h	(revision 11188)
+++ code/branches/bindermFS16/src/orxonox/LevelStatus.h	(revision 11191)
@@ -21,15 +21,9 @@
  *
  *   Author:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      Damian 'Mozork' Frick
+ *      Matthias Binder
  *
  */
 
-/**
-    @file LevelManager.h
-    @brief Definition of the LevelManager singleton.
-    @ingroup Orxonox
-*/
+
 #ifndef _LevelStatus_H__
 #define _LevelStatus_H__
@@ -52,4 +46,12 @@
 {
 
+    /**
+    @brief
+        LevelStatus:
+        In the LevelStatus class all necessary information off a mission in the campaign can be saved.
+        It is only used in the LevelManager to steer the campaign menu. It is now possible to have a treelike campaign menu structure.
+        
+    */
+
 
     class _OrxonoxExport LevelStatus : public BaseObject
@@ -60,5 +62,5 @@
         
         bool won;                           //if the Level is won or not
-        std::vector<int> nextLevels;        //in this vector at the index i is saved if the ith level should be activated =1, visible but not activated =2, or not activated =0
+        std::vector<int> nextLevels;        //if this Level is won, the ith element of this vector shows, what to do with the other leves
         int activated;                      //0 not activated, 1 activated, 2 visible
     };
Index: code/branches/bindermFS16/src/orxonox/gametypes/Mission.h
===================================================================
--- code/branches/bindermFS16/src/orxonox/gametypes/Mission.h	(revision 11188)
+++ code/branches/bindermFS16/src/orxonox/gametypes/Mission.h	(revision 11191)
@@ -45,5 +45,5 @@
 
             virtual void start() override;
-            virtual void end() override;
+            virtual void end() override;  //checks if the mission was accomplished and sends the name of the won mission to the LevelManager
             virtual void setTeams();
             virtual void addBots(unsigned int amount) override{} //<! overwrite function in order to bypass the addbots command
