Index: code/branches/presentationHS14merge/src/orxonox/LevelManager.cc
===================================================================
--- code/branches/presentationHS14merge/src/orxonox/LevelManager.cc	(revision 10222)
+++ code/branches/presentationHS14merge/src/orxonox/LevelManager.cc	(revision 10255)
@@ -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/presentationHS14merge/src/orxonox/LevelManager.h
===================================================================
--- code/branches/presentationHS14merge/src/orxonox/LevelManager.h	(revision 10222)
+++ code/branches/presentationHS14merge/src/orxonox/LevelManager.h	(revision 10255)
@@ -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/presentationHS14merge/src/orxonox/gametypes/Mission.cc
===================================================================
--- code/branches/presentationHS14merge/src/orxonox/gametypes/Mission.cc	(revision 10222)
+++ code/branches/presentationHS14merge/src/orxonox/gametypes/Mission.cc	(revision 10255)
@@ -28,4 +28,5 @@
 
 #include "Mission.h"
+
 #include "items/Engine.h"
 #include "controllers/ArtificialController.h"
@@ -36,5 +37,5 @@
 #include "network/Host.h"
 #include "worldentities/pawns/Pawn.h"
-
+#include "LevelManager.h"
 
 namespace orxonox
@@ -70,5 +71,5 @@
     void Mission::pawnKilled(Pawn* victim, Pawn* killer)
     {
-        if (victim && victim->getPlayer() && victim->getPlayer()->isHumanPlayer() )
+        if (victim && victim->getPlayer() && victim->getPlayer()->isHumanPlayer())
         {
             this->lives_--;
@@ -87,17 +88,23 @@
     {
         if (this->missionAccomplished_ && !this->gtinfo_->hasEnded())
+        {
             this->gtinfo_->sendAnnounceMessage("Mission accomplished!");
+
+            LevelManager::getInstance().setLastFinishedCampaignMission(this->getFilename());
+        }
         else if (!this->gtinfo_->hasEnded())
             this->gtinfo_->sendAnnounceMessage("Mission failed!");
+
         Gametype::end();
     }
 
     void Mission::setTeams()
-    {//Set pawn-colours
+    { //Set pawn-colours
         for (ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it != ObjectList<Pawn>::end(); ++it)
         {
             Pawn* pawn = static_cast<Pawn*>(*it);
-            if(!pawn) continue;
-                this->setDefaultObjectColour(pawn);
+            if (!pawn)
+                continue;
+            this->setDefaultObjectColour(pawn);
         }
     }
@@ -105,18 +112,16 @@
     {
         for (ObjectList<Mission>::iterator it = ObjectList<Mission>::begin(); it != ObjectList<Mission>::end(); ++it)
-        {//TODO: make sure that only the desired mission is ended !! This is a dirty HACK, that would end ALL missions!
+        { //TODO: make sure that only the desired mission is ended !! This is a dirty HACK, that would end ALL missions!
             it->setMissionAccomplished(accomplished);
             it->end();
         }
     }
-    
+
     void Mission::setLivesWrapper(unsigned int amount)
     {
         for (ObjectList<Mission>::iterator it = ObjectList<Mission>::begin(); it != ObjectList<Mission>::end(); ++it)
-        {//TODO: make sure that only the desired mission is ended !! This is a dirty HACK, that would affect ALL missions!
+        { //TODO: make sure that only the desired mission is ended !! This is a dirty HACK, that would affect ALL missions!
             it->setLives(amount);
         }
     }
-
-
 }
