Index: code/branches/storymodeHS14/src/orxonox/LevelManager.cc
===================================================================
--- code/branches/storymodeHS14/src/orxonox/LevelManager.cc	(revision 10251)
+++ code/branches/storymodeHS14/src/orxonox/LevelManager.cc	(revision 10253)
@@ -89,4 +89,16 @@
         SetConfigValue(defaultLevelName_, "missionOne.oxw")
             .description("Sets the pre selection of the level in the main menu.");
+        SetConfigValue(lastFinishedCampaignMission_,  "")
+            .description("The last finished mission of a campaign");
+        SetConfigValue(campaignMissions_,  std::vector<std::string>())
+            .description("The list of missions in the campaign");
+    }
+
+    /**
+     * @brief Stores the argument in the corresponding config value.
+     */
+    void LevelManager::setLastFinishedCampaignMission(const std::string& lastFinishedCampaignMission)
+    {
+        ModifyConfigValue(lastFinishedCampaignMission_, set, lastFinishedCampaignMission);
     }
 
Index: code/branches/storymodeHS14/src/orxonox/LevelManager.h
===================================================================
--- code/branches/storymodeHS14/src/orxonox/LevelManager.h	(revision 10251)
+++ code/branches/storymodeHS14/src/orxonox/LevelManager.h	(revision 10253)
@@ -91,4 +91,13 @@
             LevelInfoItem* getAvailableLevelListItem(unsigned int index); //!< Get the LevelInfoItem at the given index in the list of available Levels.
 
+            void setLastFinishedCampaignMission(const std::string& lastFinishedCampaignMission);
+            inline const std::string& getLastFinishedCampaignMission() const
+                { return this->lastFinishedCampaignMission_; }
+
+            inline unsigned int getNumberOfCampaignMissions()
+                { return this->campaignMissions_.size(); }
+            inline const std::string& getCampaignMission(unsigned int index)
+                { return this->campaignMissions_[index]; }
+
             /**
             @brief Get the instance of the LevelManager.
@@ -116,4 +125,6 @@
             // config values
             std::string defaultLevelName_;
+            std::string lastFinishedCampaignMission_;
+            std::vector<std::string> campaignMissions_;
 
             static LevelManager* singletonPtr_s;
Index: code/branches/storymodeHS14/src/orxonox/gametypes/Mission.cc
===================================================================
--- code/branches/storymodeHS14/src/orxonox/gametypes/Mission.cc	(revision 10251)
+++ code/branches/storymodeHS14/src/orxonox/gametypes/Mission.cc	(revision 10253)
@@ -36,11 +36,9 @@
 #include "core/CoreIncludes.h"
 #include "core/command/ConsoleCommand.h"
+#include "core/config/ConfigValueIncludes.h"
 #include "infos/PlayerInfo.h"
 #include "network/Host.h"
 #include "worldentities/pawns/Pawn.h"
-#include <iostream>
-#include <fstream>
-#include <string>
-#include <ios>
+#include "LevelManager.h"
 
 namespace orxonox
@@ -93,16 +91,4 @@
     }
 
-    std::string GenerateHelperString(int number)
-    {
-        std::string helperstring = "";
-        while (number > 1)
-        {
-            helperstring = helperstring + " ";
-            number = number - 1;
-        }
-        helperstring = helperstring + ".";
-        return helperstring;
-    }
-
     void Mission::end()
     {
@@ -112,35 +98,5 @@
             this->gtinfo_->sendAnnounceMessage("Mission accomplished!");
 
-            boost::filesystem::path filepath("campaign.txt");
-            std::fstream myfile;
-            myfile.open(filepath.string().c_str(), std::fstream::out);
-
-            std::string line;
-            std::string mission = this->getFilename();
-            int k = 58 - mission.length();
-            std::string helperstring = "";
-            if (myfile.is_open())
-            {
-                while (k > 1)
-                {
-                    helperstring = helperstring + " ";
-                    k = k - 1;
-                }
-                helperstring = helperstring + ".";
-                while (getline(myfile, line))
-                {
-                    if (line == mission + " 0" + helperstring)
-                    {
-                        long pos = (long) myfile.tellp();
-                        myfile.seekp(pos - 61);
-                        myfile << mission + " 1" + helperstring;
-                    }
-                }
-            } else {
-                orxout(internal_warning) << "failed to open campaign file" << endl;
-            }
-            myfile.flush();
-            myfile.clear();
-            myfile.close();
+            LevelManager::getInstance().setLastFinishedCampaignMission(this->getFilename());
         }
 
