Index: code/branches/questsystem/src/orxonox/objects/AddQuest.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/AddQuest.cc	(revision 1995)
+++ code/branches/questsystem/src/orxonox/objects/AddQuest.cc	(revision 1996)
@@ -59,5 +59,5 @@
         The player the effect is invoked on.
     */
-    virtual void AddQuest::invoke(Player & player)
+    void AddQuest::invoke(Player & player)
     {
         Quest quest = QuestManager::findQuest(this->getQuestId());
Index: code/branches/questsystem/src/orxonox/objects/AddQuestHint.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/AddQuestHint.cc	(revision 1995)
+++ code/branches/questsystem/src/orxonox/objects/AddQuestHint.cc	(revision 1996)
@@ -60,5 +60,5 @@
         The player.
     */
-    virtual void invoke(Player & player)
+    void invoke(Player & player)
     {
         QuestHint hint = QuestManager::findHint(this->hintId_);
Index: code/branches/questsystem/src/orxonox/objects/AddReward.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/AddReward.cc	(revision 1995)
+++ code/branches/questsystem/src/orxonox/objects/AddReward.cc	(revision 1996)
@@ -81,5 +81,5 @@
         The player.
     */
-    virtual void AddReward::invoke(Player & player)
+    void AddReward::invoke(Player & player)
     {
         if ( this->rewards_ == NULL )
Index: code/branches/questsystem/src/orxonox/objects/ChangeQuestStatus.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/ChangeQuestStatus.h	(revision 1995)
+++ code/branches/questsystem/src/orxonox/objects/ChangeQuestStatus.h	(revision 1996)
@@ -46,5 +46,5 @@
 	public:
 	    ChangeQuestStatus(std::string questId);
-	    ~ChangeQuestStatus();
+	    virtual ~ChangeQuestStatus();
 	    
 	    virtual void invoke(Player & player) = 0; //!< Invokes the effect.
Index: code/branches/questsystem/src/orxonox/objects/CompleteQuest.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/CompleteQuest.cc	(revision 1995)
+++ code/branches/questsystem/src/orxonox/objects/CompleteQuest.cc	(revision 1996)
@@ -59,5 +59,5 @@
         The player the effect is invoked on.
     */
-    virtual void CompleteQuest::invoke(Player & player)
+    void CompleteQuest::invoke(Player & player)
     {
         Quest quest = QuestManager::findQuest(this->getQuestId());
Index: code/branches/questsystem/src/orxonox/objects/FailQuest.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/FailQuest.cc	(revision 1995)
+++ code/branches/questsystem/src/orxonox/objects/FailQuest.cc	(revision 1996)
@@ -59,5 +59,5 @@
         The player the effect is invoked on.
     */
-    virtual void FailQuest::invoke(Player & player)
+    void FailQuest::invoke(Player & player)
     {
         Quest quest = QuestManager::findQuest(this->getQuestId());
Index: code/branches/questsystem/src/orxonox/objects/GlobalQuest.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/GlobalQuest.cc	(revision 1995)
+++ code/branches/questsystem/src/orxonox/objects/GlobalQuest.cc	(revision 1996)
@@ -58,4 +58,43 @@
         
     }
+    
+    /**
+    @brief
+        Checks whether the quest can be started.
+    @param player
+        The player for whom is to be checked.
+    @return
+        Returns true if the quest can be started, false if not.
+    */
+    bool GlobalQuest::isStartable(const Player & player) const
+    {
+        return this->isInactive(player) || this->isActive(player);
+    }
+    
+    /**
+    @brief
+        Checks whether the quest can be failed.
+    @param player
+        The player for whom is to be checked.
+    @return
+        Returns true if the quest can be failed, false if not.
+    */
+    bool GlobalQuest::isFailable(const Player & player) const
+    {
+        return this->isActive(player);
+    }
+    
+    /**
+    @brief
+        Checks whether the quest can be completed.
+    @param player
+        The player for whom is to be checked.
+    @return
+        Returns true if the quest can be completed, false if not.
+    */
+    bool GlobalQuest::isCompletable(const Player & player) const
+    {
+        return this->isActive(player);
+    }
 
     /**
@@ -65,5 +104,5 @@
         The player.
     */
-    virtual questStatus::Enum getStatus(const Player & player) const
+    questStatus::Enum getStatus(const Player & player) const
     {
         //TDO: Does this really work???
@@ -87,8 +126,13 @@
         The status to be set.
     */
-    virtual void setStatus(const Player & player, const questStatus::Enum & status)
+    void setStatus(const Player & player, const questStatus::Enum & status)
     {
-        //TDO: Implement.
+        if (this->players_.find(&player) == this->players_.end()) //!< Player is not yet in the list.
+	{
+	    this->players_.insert(&player);
+	}
+	this->status_ = status;
     }
 
+
 }
Index: code/branches/questsystem/src/orxonox/objects/GlobalQuest.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/GlobalQuest.h	(revision 1995)
+++ code/branches/questsystem/src/orxonox/objects/GlobalQuest.h	(revision 1996)
@@ -47,9 +47,13 @@
 	public:
 	    GlobalQuest(std::string id, std::string title = "", std::string description = "");
-	    ~GlobalQuest();
+	    virtual ~GlobalQuest();
 	    
 	protected:
+            virtual bool isStartable(const Player & player) const; //!< Checks whether the quest can be started.
+            virtual bool isFailable(const Player & player) const; //!< Checks whether the quest can be failed.
+            virtual bool isCompletable(const Player & player) const; //!< Checks whether the quest can be completed.
+	
 	    virtual questStatus::Enum getStatus(const Player & player) const; //!< Returns the status of the quest for a specific player.
-	    virtual void setStatus(const Player & player, const questStatus::Enum & status); //!< Sets the status for a specific player.
+	    virtual bool setStatus(const Player & player, const questStatus::Enum & status); //!< Sets the status for a specific player.
 	    
 	private:
Index: code/branches/questsystem/src/orxonox/objects/LocalQuest.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/LocalQuest.cc	(revision 1995)
+++ code/branches/questsystem/src/orxonox/objects/LocalQuest.cc	(revision 1996)
@@ -61,11 +61,57 @@
     /**
     @brief
+        Checks whether the quest can be started.
+    @param player
+        The player for whom is to be checked.
+    @return
+        Returns true if the quest can be started, false if not.
+    */
+    bool LocalQuest::isStartable(const Player & player) const
+    {
+        return this->isInactive(player);
+    }
+    
+    /**
+    @brief
+        Checks whether the quest can be failed.
+    @param player
+        The player for whom is to be checked.
+    @return
+        Returns true if the quest can be failed, false if not.
+    */
+    bool LocalQuest::isFailable(const Player & player) const
+    {
+        return this->isActive(player);
+    }
+    
+    /**
+    @brief
+        Checks whether the quest can be completed.
+    @param player
+        The player for whom is to be checked.
+    @return
+        Returns true if the quest can be completed, false if not.
+    */
+    bool LocalQuest::isCompletable(const Player & player) const
+    {
+        return this->isActive(player);
+    }
+    
+    /**
+    @brief
         Returns the status of the quest for a specific player.
     @param player
-        The player 
+        The player.
+    @return
+        Returns the status of the quest for the input player.
     */
-    virtual int LocalQuest::getStatus(const Player & player) const
+    virtual questStatus::Enum LocalQuest::getStatus(const Player & player) const
     {
-        //TDO: Implenet.
+        std::map<Player*, questStatus::Enum>::iterator it = this->playerStatus_.find(&player);
+	if (it != this->playerStatus_.end())
+	{
+	    return it->second;
+	}
+	return questStatus::inactive;
     }
     
@@ -80,5 +126,5 @@
     virtual void LocalQuest::setStatus(const Player & player, const questStatus::Enum & status)
     {
-        //TDO: Implement.
+        this->playerStatus[&player] = status;
     }
 
Index: code/branches/questsystem/src/orxonox/objects/LocalQuest.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/LocalQuest.h	(revision 1995)
+++ code/branches/questsystem/src/orxonox/objects/LocalQuest.h	(revision 1996)
@@ -30,4 +30,5 @@
 #define _LocalQuest_H__
 
+#include <map>
 #include <string>
 
@@ -46,15 +47,19 @@
 	public:
 	    LocalQuest(std::string id, std::string title = "", std::string description = "");
-	    ~LocalQuest();
+	    virtual ~LocalQuest();
 	    
 	protected:
+            virtual bool isStartable(const Player & player) const; //!< Checks whether the quest can be started.
+            virtual bool isFailable(const Player & player) const; //!< Checks whether the quest can be failed.
+            virtual bool isCompletable(const Player & player) const; //!< Checks whether the quest can be completed.
+	
             virtual questStatus::Enum getStatus(const Player & player) const; //!< Returns the status of the quest for a specific player.
             virtual void setStatus(const Player & player, const questStatus::Enum & status); //!< Sets the status for a specific player.
                 
 	private:
-            //TDO: List of Players and the status of the quest fo them.
-            questStatus::Enum status_; //!< The status of the quest.
+            std::map<Player*, questStatus::Enum> playerStatus_;
     
     };
+    
 
 }
Index: code/branches/questsystem/src/orxonox/objects/Quest.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/Quest.cc	(revision 1995)
+++ code/branches/questsystem/src/orxonox/objects/Quest.cc	(revision 1996)
@@ -71,4 +71,28 @@
     /**
     @brief
+        Sets the parent quest of the quest.
+    @param quest
+        A pointer to the quest to be set as parent quest.
+    */
+    bool setParentQuest(Quest* quest)
+    {
+        this->parentQuest_ = quest;
+        return true;
+    }
+    
+    /**
+    @brief
+        Adds a sub quest to the quest.
+    @param quest
+        A pointer to the quest to be set as sub quest.
+    */
+    bool addSubQuest(Quest & quest)
+    {
+        this->subQuests_.push_back = quest;
+        return true;
+    }
+
+    /**
+    @brief
         Adds a Hint to the list of hints 
     @param hint
@@ -93,15 +117,16 @@
     @param player
         The player.
+    @return
+        Returns true if the quest could be started, false if not.
     */
-    void Quest::start(const Player & player)
+    bool Quest::start(const Player & player)
     {
-        if(this->isInactive(player))
+        if(this->isStartable(player))
         {
             this->setStatus(player, questStatus::active);
+            return true;
         }
-        else
-        {
-            COUT(2) << "A non-inactive quest was trying to be started." << std::endl;
-        }
+        COUT(2) << "A non-startable quest was trying to be started." << std::endl;
+        return false;
     }
     
@@ -111,16 +136,17 @@
     @param player
         The player.
+    @return
+        Returns true if the quest could be failed, false if not.
     */
     void Quest::fail(Player & player)
     {
-        if(this->isActive(player))
+        if(this->isFailable(player))
         {
             this->setStatus(player, questStatus::failed);
             QuestEffect::invokeEffects(player, this->failEffects_);
+            return true;
         }
-        else
-        {
-            COUT(2) << "A non-pending quest was trying to be failed." << std::endl;
-        }
+        COUT(2) << "A non-failable quest was trying to be failed." << std::endl;
+        return false;
     }
     
@@ -130,16 +156,17 @@
     @param player
         The player.
+    @return
+        Returns true if the quest could be completed, false if not.
     */
     void Quest::complete(Player & player)
     {
-        if(this->isActive(player))
+        if(this->isCompletable(player))
         {
             this->setStatus(player, questStatus::completed);
             QuestEffect::invokeEffects(player, this->completeEffects_);
+            return true;
         }
-        else
-        {
-            COUT(2) << "A non-pending quest was trying to be completed." << std::endl;
-        }
+        COUT(2) << "A non-completable quest was trying to be completed." << std::endl;
+        return false;
     }
 
Index: code/branches/questsystem/src/orxonox/objects/Quest.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/Quest.h	(revision 1995)
+++ code/branches/questsystem/src/orxonox/objects/Quest.h	(revision 1996)
@@ -33,5 +33,5 @@
 #include <string>
 
-#include "orxonox/quests/QuestDescription.h"
+#include "QuestDescription.h"
 #include "QuestItem.h"
 #include "QuestHint.h"
@@ -52,5 +52,5 @@
 	public:
             Quest(std::string id, std::string title = "", std::string description = "");
-	    ~Quest();
+	    virtual ~Quest();
     
             inline Quest* getParentQuest(void) const //!< Returns the parent quest of the quest.
@@ -60,11 +60,9 @@
 	    
 	    //TDO: Necessary? Shouldn't this be decided whilest creating the object?
-	    inline void setParentQuest(Quest* quest) //!< Sets the parent quest of the quest.
-                { this->parentQuest_ = quest; }
-	    inline void addSubQuest(Quest & quest) //!< Adds a sub quest to the quest.
-                { this->subQuests_.push_back = quest; }
+	    bool setParentQuest(Quest* quest); //!< Sets the parent quest of the quest.
+	    bool addSubQuest(Quest & quest); //!< Adds a sub quest to the quest.
 	    
 	    inline bool isInactive(const Player & player) const //!< Returns true if the quest status for the specific player is 'inactive'.
-	       { return this->getStatus(player) != questStatus::inactive; }
+	       { return this->getStatus(player) == questStatus::inactive; }
 	    inline bool isActive(const Player & player) const //!< Returns true if the quest status for the specific player is 'active'.
 	       { return this->getStatus(player) == questStatus::active; }
@@ -74,7 +72,7 @@
 	       { return this->getStatus(player) == questStatus::completed; }
                 
-	    void start(const Player & player); //!< Sets a quest to pending.
-	    void fail(Player & player); //!< Fails the quest.
-	    void complete(Player & player); //!< Completes the quest.
+	    bool start(const Player & player); //!< Sets a quest to active.
+	    bool fail(Player & player); //!< Fails the quest.
+	    bool complete(Player & player); //!< Completes the quest.
                 
             void addHint(QuestHint & hint); //!< Add a hint to the list of hints.
@@ -82,4 +80,8 @@
         protected:
             void initialize(void); //!< Initialized the object.
+            
+            virtual bool isStartable(const Player & player) const = 0; //!< Checks whether the quest can be started.
+            virtual bool isFailable(const Player & player) const = 0; //!< Checks whether the quest can be failed.
+            virtual bool isCompletable(const Player & player) const = 0; //!< Checks whether the quest can be completed.
             
             virtual questStatus::Enum getStatus(const Player & player) const = 0; //!< Returns the status of the quest for a specific player.
Index: code/branches/questsystem/src/orxonox/objects/QuestDescription.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/QuestDescription.cc	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/QuestDescription.cc	(revision 1996)
@@ -0,0 +1,58 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Damian 'Mozork' Frick
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "core/CoreIncludes.h"
+#include "QuestDescription.h"
+
+namespace orxonox {
+
+    CreateFactory(QuestDescription);
+    
+    QuestDescription(std::string title, std::string description = "") : BaseObject()
+    {
+        initialize();
+        this->title_ = title;
+        this->description_ = description;
+    }
+    
+    QuestDescription::~QuestDescription()
+    {
+        
+    }
+    
+    /**
+    @brief
+        Initializes the object. Has to be called first in every constructor of this class.
+    */
+    void QuestDescription::initialize(void)
+    {
+        RegisterObject(QuestDescription);
+    }
+
+
+}
Index: code/branches/questsystem/src/orxonox/objects/QuestDescription.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/QuestDescription.h	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/QuestDescription.h	(revision 1996)
@@ -0,0 +1,66 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Damian 'Mozork' Frick
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#ifndef _QuestDescription_H__
+#define _QuestDescription_H__
+
+#include <string>
+
+#include "core/BaseObject.h"
+
+namespace orxonox {
+
+    /**
+    @brief
+        This class is a description of a QuestItem.
+        It holds a title and a description.
+    @author
+        Damian 'Mozork' Frick
+    */
+    class QuestDescription : public BaseObject {
+    
+	public:
+	    QuestDescription(std::string title, std::string description = "");
+	    ~QuestDescription();
+	    
+	    inline const std::string & getTitle(void) const //!< Returns the title.
+                { return this->title_; }
+	    inline const std::string & getDescription(void) const //!< Returns the description text.
+                { return this->description_; }
+	    
+	private:
+            void initialize(void);
+		
+            std::string title_;
+            std::string description_;
+    
+    };
+
+}
+
+#endif /* _QuestDescription_H__ */
Index: code/branches/questsystem/src/orxonox/objects/QuestEffect.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/QuestEffect.cc	(revision 1995)
+++ code/branches/questsystem/src/orxonox/objects/QuestEffect.cc	(revision 1996)
@@ -61,5 +61,5 @@
         A list of all the effects to be invoked.
     */
-    static void QuestEffect::invokeEffects(Player & player, std::list<QuestEffect> & effects)
+    void QuestEffect::invokeEffects(Player & player, std::list<QuestEffect> & effects)
     {
         if ( effects == NULL )
Index: code/branches/questsystem/src/orxonox/objects/QuestEffect.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/QuestEffect.h	(revision 1995)
+++ code/branches/questsystem/src/orxonox/objects/QuestEffect.h	(revision 1996)
@@ -46,5 +46,5 @@
 	public:
             QuestEffect();
-	    ~QuestEffect();
+	    virtual ~QuestEffect();
 	    
 	    virtual void invoke(Player & player) = 0; //!< Invokes the effect.
Index: code/branches/questsystem/src/orxonox/objects/QuestHint.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/QuestHint.cc	(revision 1995)
+++ code/branches/questsystem/src/orxonox/objects/QuestHint.cc	(revision 1996)
@@ -58,19 +58,31 @@
     }
     
+    /**
+    @brief
+        Checks whether the hint is active for a specific player.
+    @param player
+        The player.
+    @return
+        Returns 
+    */
     bool QuestHint::isActive(const Player & player) const
     {
-        //TDO: Implement.
+        std::map<Player*, questHintStatus::Enum>::iterator it = this->playerStatus_.find(&player);
+	if (it != this->playerStatus_.end())
+	{
+	    return it->second;
+	}
+	return questStatus::inactive;
     }
     
-    void QuestHint::activate(const Player & player)
+    bool QuestHint::activate(const Player & player)
     {
-        if(this->quest_->isActive(player))
+        if(this->quest_->isActive(player) && !this->isActive())
         {
-            //TDO: Implement.
+            this->playerStatus_[&player] = questHintStatus::active;
+            return true;
         }
-        else
-        {
-            COUT(2) << "A hint of a non-active quest was trying to get activated." << std::endl;
-        }
+	COUT(2) << "A hint of a non-active quest was trying to get activated." << std::endl;
+	return false;
     }
 
Index: code/branches/questsystem/src/orxonox/objects/QuestHint.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/QuestHint.h	(revision 1995)
+++ code/branches/questsystem/src/orxonox/objects/QuestHint.h	(revision 1996)
@@ -30,7 +30,8 @@
 #define _QuestHint_H__
 
+#include <map>
 #include <string>
 
-#include "orxonox/quests/QuestDescription.h"
+#include "QuestDescription.h"
 #include "Quest.h"
 #include "QuestItem.h"
@@ -55,5 +56,5 @@
 	    bool isActive(const Player & player) const; //!< Returns true if the hint is active for the input player.
 	    
-	    void activate(const Player & player); //!< Activates the hint for the input player.
+	    bool activate(const Player & player); //!< Activates the hint for the input player.
 	    
 	    void setQuest(Quest* quest); //!< Sets the quest the hint belongs to.
@@ -62,5 +63,5 @@
             
             Quest* quest_;
-            //TDO: questHint statuslist.
+            std::map<Player*, questHintStatus::Enum> playerStatus_;
     
     };
Index: code/branches/questsystem/src/orxonox/objects/QuestItem.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/QuestItem.h	(revision 1995)
+++ code/branches/questsystem/src/orxonox/objects/QuestItem.h	(revision 1996)
@@ -50,5 +50,5 @@
 	public:
 	    QuestItem(std::string id, std::string title = "", std::string description = "");
-	    ~QuestItem();
+	    virtual ~QuestItem();
 	    
 	    inline std::string getId(void) const //!< Returns the id of this quest.
Index: code/branches/questsystem/src/orxonox/objects/QuestManager.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/QuestManager.cc	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/QuestManager.cc	(revision 1996)
@@ -0,0 +1,133 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Damian 'Mozork' Frick
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "core/CoreIncludes.h"
+#include "QuestManager.h"
+
+namespace orxonox {
+
+    std::map<std::string, Quest> QuestManager::questMap_;
+    std::map<std::string, QuestHint> QuestManager::hintMap_;
+
+    QuestManager::QuestManager() : BaseObject()
+    {
+        RegisterObject(QuestManager);
+    }
+    
+    
+    QuestManager::~QuestManager()
+    {
+        
+    }
+
+    /**
+    @brief
+        Registers a quest with the QuestManager to make it globally accessable.
+    @param quest
+        The quest that is to be registered.
+    @return
+        Returns true if successful, false if not.
+    */
+    bool QuestManager::registerQuest(Quest & quest)
+    {
+        this->questMap_.insert ( pair<std::string,Quest>(quest.getId(),quest) );
+        return true;
+    }
+    
+    /**
+    @brief
+        Registers a QuestHint with the QuestManager to make it globally accessable.
+    @param hint
+        The QuestHint to be registered.
+    @return
+        Returns true if successful, false if not.
+    */
+    bool QuestManager::registerHint(QuestHint & hint)
+    {
+        this->hintMap_.insert ( pair<std::string,Hint>(hint.getId(),hint) );
+        return true;
+    }
+    
+    /**
+    @brief
+        Finds a quest with the given id.
+    @param questId
+        The id of the quest sought for.
+    @return
+        Returns a reference to the quest with the input id.
+    @todo
+        Throw exceptions in case of errors.
+    */
+    Quest & QuestManager::findQuest(const std::string & questId) const
+    {
+        Quest* quest;
+        std::map<std::string, Quest>::iterator it = this->questMap_.find(questId);
+	if (it != this->questMap_.end())
+	{
+	    quest = &(it->second);
+	}
+	else
+	{
+	   quest = NULL;
+	   COUT(2) << "The quest with id {" << questId << "} is nowhere to be found." << std::endl;
+	}
+	
+	return *quest;
+
+    }
+    
+    /**
+    @brief
+        Finds a hint with the given id.
+    @param hintId
+        The id of the hint sought for.
+    @return
+        Returns a reference to the hint with the input id.
+    @todo
+        Throw exceptopns in case of errors.
+    */
+    QuestHint & QuestManager::findHint(const std::string & hintId) const
+    {
+        QuestHint* hint;
+        std::map<std::string, QuestHint>::iterator it = this->hintMap_.find(hintId);
+	if (it != this->hintMap_.end())
+	{
+	    hint = &(it->second);
+	}
+	else
+	{
+	   hint = NULL;
+	   COUT(2) << "The hint with id {" << hintId << "} is nowhere to be found." << std::endl;
+	}
+	
+	return hint;
+
+    }
+    
+
+}
Index: code/branches/questsystem/src/orxonox/objects/QuestManager.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/QuestManager.h	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/QuestManager.h	(revision 1996)
@@ -0,0 +1,68 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Damian 'Mozork' Frick
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#ifndef _QuestManager_H__
+#define _QuestManager_H__
+
+#include <map>
+#include <string>
+
+#include "core/BaseObject.h"
+#include "Quest.h"
+#include "QuestHint.h"
+
+namespace orxonox {
+
+    /**
+    @brief
+        Manages quests, by making them globally accessable.
+    @author
+        Damian 'Mozork' Frick
+    */
+    class QuestManager : public BaseObject
+    {
+    
+	public:
+	    QuestManager();
+	    ~QuestManager();
+	    
+	    static bool registerQuest(Quest & quest); //!< Registers a quest in the QuestManager.
+	    static bool registerHint(QuestHint & quest); //!< Registers a QuestHint in the QuestManager.
+	    
+	    static Quest & findQuest(const std::string & questId) const; //!< Returns the quest with the input id.
+	    static QuestHint & findHint(const std::string & hintId) const; //!< Returns the QuestHint with the input id.
+	    	    
+	private:
+	    static std::map<std::string, Quest> questMap_;
+	    static std::map<std::string, QuestHint> hintMap_;
+    
+    };
+
+}
+
+#endif /* _QuestManager_H__ */
Index: code/branches/questsystem/src/orxonox/objects/Rewardable.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/Rewardable.cc	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/Rewardable.cc	(revision 1996)
@@ -0,0 +1,47 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Damian 'Mozork' Frick
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "core/CoreIncludes.h"
+#include "Rewardable.h"
+
+namespace orxonox {
+
+    CreateFactory(Rewardable);
+
+    Rewardable::Rewardable() : BaseObject()
+    {
+        RegisterObject(Rewardable);
+    }
+    
+    
+    Rewardable::~Rewardable()
+    {
+    }
+
+
+}
Index: code/branches/questsystem/src/orxonox/objects/Rewardable.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/Rewardable.h	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/Rewardable.h	(revision 1996)
@@ -0,0 +1,55 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Damian 'Mozork' Frick
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#ifndef _Rewardable_H__
+#define _Rewardable_H__
+
+#include "core/BaseObject.h"
+
+namespace orxonox {
+
+    /**
+    @brief
+        Rewardable is an Interface, that can be implemented by any object to enable it to be given as reward to a player through QuestEffects.
+    @author
+        Damian 'Mozork' Frick
+    */
+    class Rewardable : public BaseObject
+    {
+    
+	public:
+	    Rewardable();
+	    virtual ~Rewardable();
+	    
+	    virtual bool reward(Player & player) = 0; //!<Method to transcribe a rewardable object to the player.
+    
+    };
+
+}
+
+#endif /* _Rewardable_H__ */
