Index: code/branches/questsystem/src/orxonox/objects/AddQuest.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/AddQuest.cc	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/AddQuest.cc	(revision 2021)
@@ -27,5 +27,10 @@
  */
 
+#include <string>
+
 #include "core/CoreIncludes.h"
+
+#include "QuestManager.h"
+#include "Quest.h"
 #include "AddQuest.h"
 
@@ -33,4 +38,10 @@
 
     CreateFactory(AddQuest);
+
+
+    AddQuest::AddQuest() : ChangeQuestStatus()
+    {
+        
+    }
 
     /**
@@ -59,8 +70,8 @@
         The player the effect is invoked on.
     */
-    void AddQuest::invoke(Player & player)
+    void AddQuest::invoke(Player* player)
     {
-        Quest quest = QuestManager::findQuest(this->getQuestId());
-        quest.start(player);
+        Quest* quest = QuestManager::findQuest(this->getQuestId());
+        quest->start(player);
     }
 
Index: code/branches/questsystem/src/orxonox/objects/AddQuest.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/AddQuest.h	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/AddQuest.h	(revision 2021)
@@ -36,4 +36,6 @@
 namespace orxonox {
 
+    class Player; //Forward declaration, remove when fully integrated into the objecthirarchy.
+
     /**
     @brief
@@ -45,8 +47,9 @@
     {
 	public:
+            AddQuest();
 	    AddQuest(std::string questId);
 	    ~AddQuest();
 	    
-	    virtual void invoke(Player & player); //!< Invokes the effect.
+	    virtual void invoke(Player* player); //!< Invokes the effect.
     
     };
Index: code/branches/questsystem/src/orxonox/objects/AddQuestHint.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/AddQuestHint.cc	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/AddQuestHint.cc	(revision 2021)
@@ -28,4 +28,6 @@
 
 #include "core/CoreIncludes.h"
+
+#include "QuestManager.h"
 #include "AddQuestHint.h"
 
@@ -33,4 +35,9 @@
 
     CreateFactory(AddQuestHint);
+
+    AddQuestHint::AddQuestHint() : QuestEffect()
+    {
+        
+    }
 
     /**
@@ -60,8 +67,8 @@
         The player.
     */
-    void invoke(Player & player)
+    void AddQuestHint::invoke(Player* player)
     {
-        QuestHint hint = QuestManager::findHint(this->hintId_);
-        hint.activate(player);
+        QuestHint* hint = QuestManager::findHint(this->hintId_);
+        hint->activate(player);
     }
 }
Index: code/branches/questsystem/src/orxonox/objects/AddQuestHint.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/AddQuestHint.h	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/AddQuestHint.h	(revision 2021)
@@ -36,4 +36,6 @@
 namespace orxonox {
 
+    class Player; //Forward declaration, remove when fully integrated into the objecthirarchy.
+
     /**
     @brief
@@ -45,8 +47,9 @@
     {
 	public:
+            AddQuestHint();
 	    AddQuestHint(std::string hintId);
 	    ~AddQuestHint();
 	    
-	    virtual void invoke(Player & player); //!< Invokes the effect.
+	    virtual void invoke(Player* player); //!< Invokes the effect.
 	    
 	private:
Index: code/branches/questsystem/src/orxonox/objects/AddReward.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/AddReward.cc	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/AddReward.cc	(revision 2021)
@@ -28,4 +28,5 @@
 
 #include "core/CoreIncludes.h"
+
 #include "AddReward.h"
 
@@ -33,4 +34,9 @@
     
     CreateFactory(AddReward);
+    
+    AddReward::AddReward() : QuestEffect()
+    {
+        
+    }
     
     /**
@@ -40,5 +46,5 @@
         A reward.
     */
-    AddReward::AddReward(Rewardable & reward)
+    AddReward::AddReward(Rewardable* reward) : QuestEffect()
     {
         this->initialize();
@@ -52,5 +58,5 @@
         A list of rewards.
     */
-    AddReward::AddReward(std::list<Rewardable> & rewards)
+    AddReward::AddReward(std::list<Rewardable*>* rewards) : QuestEffect()
     {
         this->initialize();
@@ -81,5 +87,5 @@
         The player.
     */
-    void AddReward::invoke(Player & player)
+    void AddReward::invoke(Player* player)
     {
         if ( this->rewards_ == NULL )
@@ -88,7 +94,7 @@
             return;
 	}
-        for ( std::list<Rewardable>::iterator = this->rewards_.begin(); reward != this->rewards_.end(); ++reward )
+        for ( std::list<Rewardable*>::iterator reward = this->rewards_->begin(); reward != this->rewards_->end(); ++reward )
 	{
-	    reward.reward(player);
+	    (*reward)->reward(player);
 	}
     }
Index: code/branches/questsystem/src/orxonox/objects/AddReward.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/AddReward.h	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/AddReward.h	(revision 2021)
@@ -32,8 +32,10 @@
 #include <list>
 
-#include "orxonox/quests/Rewardable.h"
+#include "Rewardable.h"
 #include "QuestEffect.h"
 
 namespace orxonox {
+
+    class Player; //Forward declaration, remove when fully integrated into the objecthirarchy.
 
     /**
@@ -46,18 +48,18 @@
     {
 	public:
-	    AddReward(Rewardable & reward);
-	    AddReward(std::list<Rewardable> & rewards);
+            AddReward();
+	    AddReward(Rewardable* reward);
+	    AddReward(std::list<Rewardable*>* rewards);
 	    ~AddReward();
 	    
-	    virtual void invoke(Player & player); //!< Invokes the effect.
+	    virtual void invoke(Player* player); //!< Invokes the effect.
 	    
 	private:
-	
-            std::list<Rewardable> rewards_;
+            std::list<Rewardable*>* rewards_;
 	
             void initialize(void); //!< Initializes the object.
 	
-            inline void addRewardable(const Rewardable & reward)
-                { this->rewards_.push_back(reward); }
+            inline void addRewardable(Rewardable* reward)
+                { this->rewards_->push_back(reward); }
     
     };
Index: code/branches/questsystem/src/orxonox/objects/ChangeQuestStatus.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/ChangeQuestStatus.cc	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/ChangeQuestStatus.cc	(revision 2021)
@@ -28,9 +28,13 @@
 
 #include "core/CoreIncludes.h"
+
 #include "ChangeQuestStatus.h"
 
 namespace orxonox {
 
-    CreateFactory(ChangeQuestStatus);
+    ChangeQuestStatus::ChangeQuestStatus() : QuestEffect()
+    {
+        
+    }
 
     /**
Index: code/branches/questsystem/src/orxonox/objects/ChangeQuestStatus.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/ChangeQuestStatus.h	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/ChangeQuestStatus.h	(revision 2021)
@@ -36,4 +36,6 @@
 namespace orxonox {
 
+    class Player; //Forward declaration, remove when fully integrated into the objecthirarchy.
+
     /**
     @brief
@@ -45,8 +47,9 @@
     {
 	public:
+            ChangeQuestStatus();
 	    ChangeQuestStatus(std::string questId);
 	    virtual ~ChangeQuestStatus();
 	    
-	    virtual void invoke(Player & player) = 0; //!< Invokes the effect.
+	    virtual void invoke(Player* player) = 0; //!< Invokes the effect.
 	    
 	protected:
Index: code/branches/questsystem/src/orxonox/objects/CompleteQuest.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/CompleteQuest.cc	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/CompleteQuest.cc	(revision 2021)
@@ -28,4 +28,7 @@
 
 #include "core/CoreIncludes.h"
+
+#include "QuestManager.h"
+#include "Quest.h"
 #include "CompleteQuest.h"
 
@@ -34,4 +37,9 @@
     CreateFactory(CompleteQuest);
 
+    CompleteQuest::CompleteQuest() : ChangeQuestStatus()
+    {
+        
+    }
+    
     /**
     @brief
@@ -59,8 +67,8 @@
         The player the effect is invoked on.
     */
-    void CompleteQuest::invoke(Player & player)
+    void CompleteQuest::invoke(Player* player)
     {
-        Quest quest = QuestManager::findQuest(this->getQuestId());
-        quest.complete(player);
+        Quest* quest = QuestManager::findQuest(this->getQuestId());
+        quest->complete(player);
     }
 
Index: code/branches/questsystem/src/orxonox/objects/CompleteQuest.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/CompleteQuest.h	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/CompleteQuest.h	(revision 2021)
@@ -36,4 +36,6 @@
 namespace orxonox {
 
+    class Player; //Forward declaration, remove when fully integrated into the objecthirarchy.
+
     /**
     @brief
@@ -45,8 +47,9 @@
     {
 	public:
+            CompleteQuest();
 	    CompleteQuest(std::string questId);
 	    ~CompleteQuest();
 	    
-	    virtual void invoke(Player & player); //!< Invokes the effect.
+	    virtual void invoke(Player* player); //!< Invokes the effect.
     
     };
Index: code/branches/questsystem/src/orxonox/objects/FailQuest.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/FailQuest.cc	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/FailQuest.cc	(revision 2021)
@@ -27,5 +27,8 @@
  */
 
-#include "core/CoreIncludes";
+#include "core/CoreIncludes.h"
+
+#include "QuestManager.h"
+#include "Quest.h"
 #include "FailQuest.h"
 
@@ -33,4 +36,9 @@
 
     CreateFactory(FailQuest);
+
+    FailQuest::FailQuest() : ChangeQuestStatus()
+    {
+        
+    }
 
     /**
@@ -59,8 +67,8 @@
         The player the effect is invoked on.
     */
-    void FailQuest::invoke(Player & player)
+    void FailQuest::invoke(Player* player)
     {
-        Quest quest = QuestManager::findQuest(this->getQuestId());
-        quest.fail(player);
+        Quest* quest = QuestManager::findQuest(this->getQuestId());
+        quest->fail(player);
     }
 
Index: code/branches/questsystem/src/orxonox/objects/FailQuest.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/FailQuest.h	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/FailQuest.h	(revision 2021)
@@ -36,4 +36,6 @@
 namespace orxonox {
 
+    class Player; //Forward declaration, remove when fully integrated into the objecthirarchy.
+
     /**
     @brief
@@ -45,8 +47,9 @@
     {
 	public:
+            FailQuest();
 	    FailQuest(std::string questId);
 	    ~FailQuest();
 	    
-	    virtual void invoke(Player & player); //!< Invokes the effect.
+	    virtual void invoke(Player* player); //!< Invokes the effect.
     
     };
Index: code/branches/questsystem/src/orxonox/objects/GlobalQuest.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/GlobalQuest.cc	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/GlobalQuest.cc	(revision 2021)
@@ -35,4 +35,9 @@
     CreateFactory(GlobalQuest);
 
+    GlobalQuest::GlobalQuest() : Quest()
+    {
+        
+    }
+
     /**
     @brief
@@ -45,5 +50,5 @@
         The description of the quest.
     */
-    GlobalQuest::GlobalQuest(std::string id, std::string title = "", std::string description = "") : Quest(id, title, description)
+    GlobalQuest::GlobalQuest(std::string id, std::string title, std::string description) : Quest(id, title, description)
     {
         RegisterObject(GlobalQuest);
@@ -67,5 +72,5 @@
         Returns true if the quest can be started, false if not.
     */
-    bool GlobalQuest::isStartable(const Player & player) const
+    bool GlobalQuest::isStartable(Player* player)
     {
         return this->isInactive(player) || this->isActive(player);
@@ -80,5 +85,5 @@
         Returns true if the quest can be failed, false if not.
     */
-    bool GlobalQuest::isFailable(const Player & player) const
+    bool GlobalQuest::isFailable(Player* player)
     {
         return this->isActive(player);
@@ -93,5 +98,5 @@
         Returns true if the quest can be completed, false if not.
     */
-    bool GlobalQuest::isCompletable(const Player & player) const
+    bool GlobalQuest::isCompletable(Player* player)
     {
         return this->isActive(player);
@@ -104,8 +109,9 @@
         The player.
     */
-    questStatus::Enum getStatus(const Player & player) const
+    questStatus::Enum GlobalQuest::getStatus(const Player* player)
     {
         //TDO: Does this really work???
-        if (this->players_.find(&player) != this->players_.end())
+        std::set<Player*>::const_iterator it = this->players_.find((Player*)(void*)player);
+        if (it != this->players_.end())
 	{
 	    return this->status_;
@@ -126,11 +132,13 @@
         The status to be set.
     */
-    void setStatus(const Player & player, const questStatus::Enum & status)
+    bool GlobalQuest::setStatus(Player* player, const questStatus::Enum & status)
     {
-        if (this->players_.find(&player) == this->players_.end()) //!< Player is not yet in the list.
+        std::set<Player*>::const_iterator it = this->players_.find(player);
+        if (it == this->players_.end()) //!< Player is not yet in the list.
 	{
-	    this->players_.insert(&player);
+	    this->players_.insert(player);
 	}
 	this->status_ = status;
+	return true;
     }
 
Index: code/branches/questsystem/src/orxonox/objects/GlobalQuest.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/GlobalQuest.h	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/GlobalQuest.h	(revision 2021)
@@ -36,4 +36,6 @@
 namespace orxonox {
 
+    class Player; //Forward declaration, remove when fully integrated into the objecthirarchy.
+
     /**
     @brief
@@ -46,14 +48,15 @@
     {
 	public:
+            GlobalQuest();
 	    GlobalQuest(std::string id, std::string title = "", std::string description = "");
-	    virtual ~GlobalQuest();
+	    ~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 bool isStartable(Player* player); //!< Checks whether the quest can be started.
+            virtual bool isFailable(Player* player); //!< Checks whether the quest can be failed.
+            virtual bool isCompletable(Player* player); //!< 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 bool setStatus(const Player & player, const questStatus::Enum & status); //!< Sets the status for a specific player.
+	    virtual questStatus::Enum getStatus(const Player* player); //!< Returns the status of the quest for a specific player.
+	    virtual bool setStatus(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 1996)
+++ code/branches/questsystem/src/orxonox/objects/LocalQuest.cc	(revision 2021)
@@ -35,4 +35,9 @@
     CreateFactory(LocalQuest);
 
+    LocalQuest::LocalQuest() : Quest()
+    {
+        
+    }
+
     /**
     @brief
@@ -45,5 +50,5 @@
         The description of the quest.
     */
-    LocalQuest::LocalQuest(std::string id, std::string title = "", std::string description = "") : Quest(id, title, description)
+    LocalQuest::LocalQuest(std::string id, std::string title, std::string description) : Quest(id, title, description)
     {
         RegisterObject(LocalQuest);
@@ -67,5 +72,5 @@
         Returns true if the quest can be started, false if not.
     */
-    bool LocalQuest::isStartable(const Player & player) const
+    bool LocalQuest::isStartable(Player* player)
     {
         return this->isInactive(player);
@@ -80,5 +85,5 @@
         Returns true if the quest can be failed, false if not.
     */
-    bool LocalQuest::isFailable(const Player & player) const
+    bool LocalQuest::isFailable(Player* player)
     {
         return this->isActive(player);
@@ -93,5 +98,5 @@
         Returns true if the quest can be completed, false if not.
     */
-    bool LocalQuest::isCompletable(const Player & player) const
+    bool LocalQuest::isCompletable(Player* player)
     {
         return this->isActive(player);
@@ -106,7 +111,7 @@
         Returns the status of the quest for the input player.
     */
-    virtual questStatus::Enum LocalQuest::getStatus(const Player & player) const
+    questStatus::Enum LocalQuest::getStatus(const Player* player)
     {
-        std::map<Player*, questStatus::Enum>::iterator it = this->playerStatus_.find(&player);
+        std::map<Player*, questStatus::Enum>::const_iterator it = this->playerStatus_.find((Player*)(void*)player); //Thx. to x3n for the (Player*)(void*) 'hack'.
 	if (it != this->playerStatus_.end())
 	{
@@ -124,7 +129,8 @@
         The status.
     */
-    virtual void LocalQuest::setStatus(const Player & player, const questStatus::Enum & status)
+    bool LocalQuest::setStatus(Player* player, const questStatus::Enum & status)
     {
-        this->playerStatus[&player] = status;
+        this->playerStatus_[player] = status;
+        return true;
     }
 
Index: code/branches/questsystem/src/orxonox/objects/LocalQuest.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/LocalQuest.h	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/LocalQuest.h	(revision 2021)
@@ -37,4 +37,6 @@
 namespace orxonox {
 
+    class Player; //Forward declaration, remove when fully integrated into the objecthirarchy.
+
     /**
     @brief
@@ -46,14 +48,15 @@
     {
 	public:
+            LocalQuest();
 	    LocalQuest(std::string id, std::string title = "", std::string description = "");
-	    virtual ~LocalQuest();
+	    ~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 bool isStartable(Player* player); //!< Checks whether the quest can be started.
+            virtual bool isFailable(Player* player); //!< Checks whether the quest can be failed.
+            virtual bool isCompletable(Player* player); //!< 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 questStatus::Enum getStatus(const Player* player); //!< Returns the status of the quest for a specific player.
+            virtual bool setStatus(Player* player, const questStatus::Enum & status); //!< Sets the status for a specific player.
                 
 	private:
Index: code/branches/questsystem/src/orxonox/objects/Quest.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/Quest.cc	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/Quest.cc	(revision 2021)
@@ -28,9 +28,13 @@
 
 #include "core/CoreIncludes.h"
+
 #include "Quest.h"
 
 namespace orxonox {
 
-    CreateFactory(Quest);
+    Quest::Quest() : QuestItem()
+    {
+        
+    }
 
     /**
@@ -44,5 +48,5 @@
         The description of the quest.
     */
-    Quest::Quest(std::string id, std::string title = "", std::string description = "") : QuestItem(id, title, description)
+    Quest::Quest(std::string id, std::string title, std::string description) : QuestItem(id, title, description)
     {
         initialize();
@@ -75,5 +79,5 @@
         A pointer to the quest to be set as parent quest.
     */
-    bool setParentQuest(Quest* quest)
+    bool Quest::setParentQuest(Quest* quest)
     {
         this->parentQuest_ = quest;
@@ -87,7 +91,7 @@
         A pointer to the quest to be set as sub quest.
     */
-    bool addSubQuest(Quest & quest)
+    bool Quest::addSubQuest(Quest* quest)
     {
-        this->subQuests_.push_back = quest;
+        this->subQuests_.push_back(quest);
         return true;
     }
@@ -99,10 +103,10 @@
         The hint that should be added to the list of hints.
     */
-    void Quest::addHint(QuestHint & hint)
+    void Quest::addHint(QuestHint* hint)
     {
         if ( hint != NULL )
         {
             this->hints_.push_back(hint);
-            hint.setQuest(this);
+            hint->setQuest(this);
 	}
         else
@@ -120,5 +124,5 @@
         Returns true if the quest could be started, false if not.
     */
-    bool Quest::start(const Player & player)
+    bool Quest::start(Player* player)
     {
         if(this->isStartable(player))
@@ -139,5 +143,5 @@
         Returns true if the quest could be failed, false if not.
     */
-    void Quest::fail(Player & player)
+    bool Quest::fail(Player* player)
     {
         if(this->isFailable(player))
@@ -159,5 +163,5 @@
         Returns true if the quest could be completed, false if not.
     */
-    void Quest::complete(Player & player)
+    bool Quest::complete(Player* player)
     {
         if(this->isCompletable(player))
Index: code/branches/questsystem/src/orxonox/objects/Quest.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/Quest.h	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/Quest.h	(revision 2021)
@@ -38,66 +38,4 @@
 #include "QuestEffect.h"
 
-namespace orxonox {
-
-    /**
-    @brief
-        Represents a quest in the game.
-        A quest has a sub
-        
-    @author
-        Damian 'Mozork' Frick
-    */
-    class Quest : public QuestItem
-    {
-	public:
-            Quest(std::string id, std::string title = "", std::string description = "");
-	    virtual ~Quest();
-    
-            inline Quest* getParentQuest(void) const //!< Returns the parent quest of the quest.
-                { return this->parentQuest_; }
-	    inline const std::list<Quest> & getSubQuest(void) const //!< Returns the list of sub quests.
-                { return this->subQuests_; }
-	    
-	    //TDO: Necessary? Shouldn't this be decided whilest creating the object?
-	    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; }
-	    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; }
-	    inline bool isFailed(const Player & player) const //!< Returns true if the quest status for the specific player is 'failed'.
-	       { return this->getStatus(player) == questStatus::failed; }
-	    inline bool isCompleted(const Player & player) const //!< Returns true if the quest status for the specific player is 'completed'.
-	       { return this->getStatus(player) == questStatus::completed; }
-                
-	    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.
-	    
-        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.
-            virtual void setStatus(const Player & player, const questStatus::Enum & status) = 0; //!< Changes the status for a specific player.
-            
-            Quest* parentQuest_; //!< Pointer to the parent quest.
-            std::list<Quest> subQuests_; //!< List of all the sub quests.
-            
-            std::list<QuestHint> hints_; //!< A list of all the hints tied to this quest.
-            
-            std::list<QuestEffect> failEffects_; //!< A list of all effects to be invoked, when the quest has been failed.
-            std::list<QuestEffect> completeEffects_; //!< A list of effects to be invoked, when the quest has been completed.
-
-    };
-
-}
-
 namespace questStatus
 {
@@ -113,3 +51,70 @@
 }
 
+namespace orxonox {
+
+    class Player; //Forward declaration, remove when fully integrated into the objecthirarchy.
+
+    /**
+    @brief
+        Represents a quest in the game.
+        A quest has a sub
+        
+    @author
+        Damian 'Mozork' Frick
+    */
+    class Quest : public QuestItem
+    {
+	public:
+            Quest();
+            Quest(std::string id, std::string title = "", std::string description = "");
+	    virtual ~Quest();
+    
+            inline Quest* getParentQuest(void) const //!< Returns the parent quest of the quest.
+                { return this->parentQuest_; }
+	    inline const std::list<Quest*> & getSubQuest(void) const //!< Returns the list of sub quests.
+                { return this->subQuests_; }
+	    
+	    //TDO: Necessary? Shouldn't this be decided whilest creating the object?
+	    //     Yes it absolutely should and will. Add these methods to protected then?
+	    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(Player* player) //!< Returns true if the quest status for the specific player is 'inactive'.
+	       { return this->getStatus(player) == questStatus::inactive; }
+	    inline bool isActive(Player* player) //!< Returns true if the quest status for the specific player is 'active'.
+	       { return this->getStatus(player) == questStatus::active; }
+	    inline bool isFailed(Player* player) //!< Returns true if the quest status for the specific player is 'failed'.
+	       { return this->getStatus(player) == questStatus::failed; }
+	    inline bool isCompleted(Player* player) //!< Returns true if the quest status for the specific player is 'completed'.
+	       { return this->getStatus(player) == questStatus::completed; }
+                
+	    bool start(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.
+	    
+        protected:
+            void initialize(void); //!< Initialized the object.
+            
+            virtual bool isStartable(Player* player) = 0; //!< Checks whether the quest can be started.
+            virtual bool isFailable(Player* player) = 0; //!< Checks whether the quest can be failed.
+            virtual bool isCompletable(Player* player) = 0; //!< Checks whether the quest can be completed.
+            
+            //TDO: Get the parameter const...
+            virtual questStatus::Enum getStatus(const Player* player) = 0; //!< Returns the status of the quest for a specific player.
+            virtual bool setStatus(Player* player, const questStatus::Enum & status) = 0; //!< Changes the status for a specific player.
+            
+            Quest* parentQuest_; //!< Pointer to the parent quest.
+            std::list<Quest*> subQuests_; //!< List of all the sub quests.
+            
+            std::list<QuestHint*> hints_; //!< A list of all the hints tied to this quest.
+            
+            std::list<QuestEffect*> failEffects_; //!< A list of all effects to be invoked, when the quest has been failed.
+            std::list<QuestEffect*> completeEffects_; //!< A list of effects to be invoked, when the quest has been completed.
+
+    };
+
+}
+
 #endif /* _Quest_H__ */
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 2021)
@@ -28,4 +28,5 @@
 
 #include "core/CoreIncludes.h"
+
 #include "QuestDescription.h"
 
@@ -34,5 +35,10 @@
     CreateFactory(QuestDescription);
     
-    QuestDescription(std::string title, std::string description = "") : BaseObject()
+    QuestDescription::QuestDescription() : BaseObject()
+    {
+        
+    }
+        
+    QuestDescription::QuestDescription(std::string title, std::string description) : BaseObject()
     {
         initialize();
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 2021)
@@ -46,4 +46,5 @@
     
 	public:
+            QuestDescription();
 	    QuestDescription(std::string title, std::string description = "");
 	    ~QuestDescription();
Index: code/branches/questsystem/src/orxonox/objects/QuestEffect.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/QuestEffect.cc	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/QuestEffect.cc	(revision 2021)
@@ -28,9 +28,8 @@
 
 #include "core/CoreIncludes.h"
+
 #include "QuestEffect.h"
 
 namespace orxonox {
-
-    CreateFactory(QuestEffect);
 
     /**
@@ -61,14 +60,9 @@
         A list of all the effects to be invoked.
     */
-    void QuestEffect::invokeEffects(Player & player, std::list<QuestEffect> & effects)
+    void QuestEffect::invokeEffects(Player* player, std::list<QuestEffect*> & effects)
     {
-        if ( effects == NULL )
-        {
-            COUT(5) << "NULL-QuestEffect list encountered." << std::endl;
-            return;
-	}
-        for ( std::list<QuestEffect>::iterator = effects.begin(); effect != effects.end(); ++effect )
+        for (std::list<QuestEffect*>::iterator effect = effects.begin(); effect != effects.end(); effect++)
 	{
-	    effect.invoke(player);
+	    (*effect)->invoke(player);
 	}
     }
Index: code/branches/questsystem/src/orxonox/objects/QuestEffect.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/QuestEffect.h	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/QuestEffect.h	(revision 2021)
@@ -32,7 +32,9 @@
 #include <list>
 
-#include "BaseObject.h"
+#include "core/BaseObject.h"
 
 namespace orxonox {
+
+    class Player; //Forward declaration, remove when fully integrated into the objecthirarchy.
 
     /**
@@ -48,6 +50,6 @@
 	    virtual ~QuestEffect();
 	    
-	    virtual void invoke(Player & player) = 0; //!< Invokes the effect.
-	    static void invokeEffects(Player & player, std::list<QuestEffect> & effects); //!< Invokes all effects in the list.
+	    virtual void invoke(Player* player) = 0; //!< Invokes the effect.
+	    static void invokeEffects(Player* player, std::list<QuestEffect*> & effects); //!< Invokes all effects in the list.
 	    
 	
Index: code/branches/questsystem/src/orxonox/objects/QuestHint.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/QuestHint.cc	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/QuestHint.cc	(revision 2021)
@@ -28,4 +28,6 @@
 
 #include "core/CoreIncludes.h"
+
+#include "Quest.h"
 #include "QuestHint.h"
 
@@ -33,4 +35,9 @@
 
     CreateFactory(QuestHint);
+
+    QuestHint::QuestHint() : QuestItem()
+    {
+        
+    }
 
     /**
@@ -44,5 +51,5 @@
         The description of the hint, resp. the hint itself.
     */
-    QuestHint::QuestHint(std::string id, std::string title = "", std::string description = "") : QuestItem(id, title, description)
+    QuestHint::QuestHint(std::string id, std::string title, std::string description) : QuestItem(id, title, description)
     {
         RegisterObject(QuestHint);
@@ -66,7 +73,7 @@
         Returns 
     */
-    bool QuestHint::isActive(const Player & player) const
+    bool QuestHint::isActive(Player* player)
     {
-        std::map<Player*, questHintStatus::Enum>::iterator it = this->playerStatus_.find(&player);
+        std::map<Player*, questHintStatus::Enum>::iterator it = this->playerStatus_.find(player);
 	if (it != this->playerStatus_.end())
 	{
@@ -76,9 +83,14 @@
     }
     
-    bool QuestHint::activate(const Player & player)
+    /**
+    @brief
+    @param player
+    @return
+    */
+    bool QuestHint::activate(Player* player)
     {
-        if(this->quest_->isActive(player) && !this->isActive())
+        if(this->quest_->isActive(player) && !(this->isActive(player)))
         {
-            this->playerStatus_[&player] = questHintStatus::active;
+            this->playerStatus_[player] = questHintStatus::active;
             return true;
         }
@@ -87,4 +99,9 @@
     }
 
+    /**
+    @brief
+    @param quest
+    @return
+    */
     void QuestHint::setQuest(Quest* quest)
     {
Index: code/branches/questsystem/src/orxonox/objects/QuestHint.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/QuestHint.h	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/QuestHint.h	(revision 2021)
@@ -34,9 +34,22 @@
 
 #include "QuestDescription.h"
-#include "Quest.h"
 #include "QuestItem.h"
+
+namespace questHintStatus
+{
+
+    enum Enum
+    {
+        inactive,
+        active
+    };
+
+}
 
 namespace orxonox
 {
+
+    class Player; //Forward declaration, remove when fully integrated into the objecthirarchy.
+    class Quest; //To avoid circual includes.
 
     /**
@@ -51,14 +64,15 @@
     
 	public:
+            QuestHint();
 	    QuestHint(std::string id, std::string title = "", std::string description = "");
 	    ~QuestHint();
 	    
-	    bool isActive(const Player & player) const; //!< Returns true if the hint is active for the input player.
+	    bool isActive(Player* player); //!< Returns true if the hint is active for the input player.
 	    
-	    bool activate(const Player & player); //!< Activates the hint for the input player.
+	    bool activate(Player* player); //!< Activates the hint for the input player.
 	    
 	    void setQuest(Quest* quest); //!< Sets the quest the hint belongs to.
 	    
-        private: 
+        private:
             
             Quest* quest_;
@@ -69,14 +83,3 @@
 }
 
-namespace questHintStatus
-{
-
-    enum Enum
-    {
-        inactive,
-        active
-    };
-
-}
-
 #endif /* _QuestHint_H__ */
Index: code/branches/questsystem/src/orxonox/objects/QuestItem.cc
===================================================================
--- code/branches/questsystem/src/orxonox/objects/QuestItem.cc	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/QuestItem.cc	(revision 2021)
@@ -35,4 +35,9 @@
     CreateFactory(QuestItem);
     
+    QuestItem::QuestItem() : BaseObject()
+    {
+        
+    }
+    
     /**
     @brief
@@ -45,5 +50,5 @@
         The description of this QuestItem. Has an empty string as default.
     */
-    QuestItem::QuestItem(std::string id, std::string title = "", std::string description = "") : BaseObject()
+    QuestItem::QuestItem(std::string id, std::string title, std::string description) : BaseObject()
     {
         this->initialize();
Index: code/branches/questsystem/src/orxonox/objects/QuestItem.h
===================================================================
--- code/branches/questsystem/src/orxonox/objects/QuestItem.h	(revision 1996)
+++ code/branches/questsystem/src/orxonox/objects/QuestItem.h	(revision 2021)
@@ -32,6 +32,6 @@
 #include <string>
 
-#include "orxonox/quests/QuestDescription.h"
-#include "BaseObject.h"
+#include "QuestDescription.h"
+#include "core/BaseObject.h"
 
 namespace orxonox {
@@ -49,4 +49,5 @@
     
 	public:
+            QuestItem();
 	    QuestItem(std::string id, std::string title = "", std::string description = "");
 	    virtual ~QuestItem();
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 2021)
@@ -28,10 +28,11 @@
 
 #include "core/CoreIncludes.h"
+
 #include "QuestManager.h"
 
 namespace orxonox {
 
-    std::map<std::string, Quest> QuestManager::questMap_;
-    std::map<std::string, QuestHint> QuestManager::hintMap_;
+    std::map<std::string, Quest*> QuestManager::questMap_;
+    std::map<std::string, QuestHint*> QuestManager::hintMap_;
 
     QuestManager::QuestManager() : BaseObject()
@@ -54,7 +55,7 @@
         Returns true if successful, false if not.
     */
-    bool QuestManager::registerQuest(Quest & quest)
+    bool QuestManager::registerQuest(Quest* quest)
     {
-        this->questMap_.insert ( pair<std::string,Quest>(quest.getId(),quest) );
+        this->questMap_.insert ( pair<std::string,Quest>(quest->getId(),quest) );
         return true;
     }
@@ -68,7 +69,7 @@
         Returns true if successful, false if not.
     */
-    bool QuestManager::registerHint(QuestHint & hint)
+    bool QuestManager::registerHint(QuestHint* hint)
     {
-        this->hintMap_.insert ( pair<std::string,Hint>(hint.getId(),hint) );
+        this->hintMap_.insert ( pair<std::string,Hint>(hint->getId(),hint) );
         return true;
     }
@@ -84,8 +85,8 @@
         Throw exceptions in case of errors.
     */
-    Quest & QuestManager::findQuest(const std::string & questId) const
+    Quest* QuestManager::findQuest(const std::string & questId)
     {
         Quest* quest;
-        std::map<std::string, Quest>::iterator it = this->questMap_.find(questId);
+        std::map<std::string, Quest*>::iterator it = this->questMap_.find(questId);
 	if (it != this->questMap_.end())
 	{
@@ -98,5 +99,5 @@
 	}
 	
-	return *quest;
+	return quest;
 
     }
@@ -112,8 +113,8 @@
         Throw exceptopns in case of errors.
     */
-    QuestHint & QuestManager::findHint(const std::string & hintId) const
+    QuestHint* QuestManager::findHint(const std::string & hintId) const
     {
         QuestHint* hint;
-        std::map<std::string, QuestHint>::iterator it = this->hintMap_.find(hintId);
+        std::map<std::string, QuestHint*>::iterator it = this->hintMap_.find(hintId);
 	if (it != this->hintMap_.end())
 	{
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 2021)
@@ -52,13 +52,13 @@
 	    ~QuestManager();
 	    
-	    static bool registerQuest(Quest & quest); //!< Registers a quest in the QuestManager.
-	    static bool registerHint(QuestHint & quest); //!< Registers a QuestHint in the 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.
+	    static Quest* findQuest(const std::string & questId); //!< Returns the quest with the input id.
+	    static QuestHint* findHint(const std::string & hintId); //!< Returns the QuestHint with the input id.
 	    	    
 	private:
-	    static std::map<std::string, Quest> questMap_;
-	    static std::map<std::string, QuestHint> hintMap_;
+	    static std::map<std::string, Quest*> questMap_;
+	    static std::map<std::string, QuestHint*> hintMap_;
     
     };
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 2021)
@@ -28,4 +28,5 @@
 
 #include "core/CoreIncludes.h"
+
 #include "Rewardable.h"
 
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 2021)
@@ -34,4 +34,6 @@
 namespace orxonox {
 
+    class Player; //Forward declaration, remove when fully integrated in objecthirarchy.
+
     /**
     @brief
@@ -47,5 +49,5 @@
 	    virtual ~Rewardable();
 	    
-	    virtual bool reward(Player & player) = 0; //!<Method to transcribe a rewardable object to the player.
+	    virtual bool reward(Player* player) = 0; //!<Method to transcribe a rewardable object to the player.
     
     };
