Index: code/trunk/src/orxonox/CMakeLists.txt
===================================================================
--- code/trunk/src/orxonox/CMakeLists.txt	(revision 2091)
+++ code/trunk/src/orxonox/CMakeLists.txt	(revision 2092)
@@ -68,4 +68,20 @@
   objects/worldentities/ParticleSpawner.cc
 #  objects/worldentities/Backlight.cc
+  
+  objects/quest/AddQuest.cc
+  objects/quest/AddQuestHint.cc
+  objects/quest/AddReward.cc
+  objects/quest/ChangeQuestStatus.cc
+  objects/quest/CompleteQuest.cc
+  objects/quest/FailQuest.cc
+  objects/quest/GlobalQuest.cc
+  objects/quest/LocalQuest.cc
+  objects/quest/Quest.cc
+  objects/quest/QuestDescription.cc
+  objects/quest/QuestEffect.cc
+  objects/quest/QuestHint.cc
+  objects/quest/QuestItem.cc
+  objects/quest/QuestManager.cc
+  objects/quest/Rewardable.cc
 
   objects/worldentities/triggers/Trigger.cc
Index: code/trunk/src/orxonox/objects/quest/AddQuest.cc
===================================================================
--- code/trunk/src/orxonox/objects/quest/AddQuest.cc	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/AddQuest.cc	(revision 2092)
@@ -41,23 +41,23 @@
 
 
-    AddQuest::AddQuest() : ChangeQuestStatus()
+    AddQuest::AddQuest(BaseObject* creator) : ChangeQuestStatus(creator)
     {
         RegisterObject(AddQuest);
     }
-    
+
     /**
     @brief
         Destructor.
-    */ 
+    */
     AddQuest::~AddQuest()
     {
     }
-    
+
     void AddQuest::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
         SUPER(AddQuest, XMLPort, xmlelement, mode);
-        
+
     }
-    
+
     /**
     @brief
@@ -75,5 +75,5 @@
             return false;
         }
-    
+
         try
         {
@@ -89,5 +89,5 @@
             return false;
 	}
-	
+
 	return true;
     }
Index: code/trunk/src/orxonox/objects/quest/AddQuest.h
===================================================================
--- code/trunk/src/orxonox/objects/quest/AddQuest.h	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/AddQuest.h	(revision 2092)
@@ -48,11 +48,11 @@
     {
 	public:
-            AddQuest();
-	    ~AddQuest();
-	    
+            AddQuest(BaseObject* creator);
+	    virtual ~AddQuest();
+
 	    virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-	    
+
 	    virtual bool invoke(Player* player); //!< Invokes the effect.
-    
+
     };
 
Index: code/trunk/src/orxonox/objects/quest/AddQuestHint.cc
===================================================================
--- code/trunk/src/orxonox/objects/quest/AddQuestHint.cc	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/AddQuestHint.cc	(revision 2092)
@@ -38,9 +38,9 @@
     CreateFactory(AddQuestHint);
 
-    AddQuestHint::AddQuestHint() : QuestEffect()
+    AddQuestHint::AddQuestHint(BaseObject* creator) : QuestEffect(creator)
     {
-        
+        RegisterObject(AddQuestHint);
     }
-    
+
     /**
     @brief
@@ -50,11 +50,11 @@
     {
     }
-    
+
     void AddQuestHint::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
         SUPER(AddQuestHint, XMLPort, xmlelement, mode);
-        
+
         XMLPortParam(AddQuestHint, "hintId", setHintId, getHintId, xmlelement, mode);
-        
+
     }
 
@@ -98,7 +98,7 @@
 	   return false;
 	}
-	
+
 	return true;
-	
+
     }
 }
Index: code/trunk/src/orxonox/objects/quest/AddQuestHint.h
===================================================================
--- code/trunk/src/orxonox/objects/quest/AddQuestHint.h	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/AddQuestHint.h	(revision 2092)
@@ -47,18 +47,18 @@
     {
 	public:
-            AddQuestHint();
-	    ~AddQuestHint();
-	    
+            AddQuestHint(BaseObject* creator);
+	    virtual ~AddQuestHint();
+
 	    virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-	    
+
 	    virtual bool invoke(Player* player); //!< Invokes the effect.
-	    
+
 	private:
             std::string hintId_;
-            
+
             inline const std::string & getHintId(void) const
                 { return this->hintId_; }
 	    void setHintId(const std::string & id);
-    
+
     };
 
Index: code/trunk/src/orxonox/objects/quest/AddReward.cc
===================================================================
--- code/trunk/src/orxonox/objects/quest/AddReward.cc	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/AddReward.cc	(revision 2092)
@@ -32,12 +32,14 @@
 
 namespace orxonox {
-    
+
     CreateFactory(AddReward);
-    
-    AddReward::AddReward() : QuestEffect()
+
+    AddReward::AddReward(BaseObject* creator) : QuestEffect(creator)
     {
+        RegisterObject(AddReward);
+
         this->initialize();
     }
-    
+
     /**
     @brief
@@ -51,7 +53,7 @@
     {
         SUPER(AddReward, XMLPort, xmlelement, mode);
-        
+
         XMLPortObject(AddReward, Rewardable, "", addRewardable, getRewardables, xmlelement, mode);
-        
+
     }
 
@@ -64,5 +66,5 @@
         RegisterObject(AddReward);
     }
-    
+
     const Rewardable* AddReward::getRewardables(unsigned int index) const
     {
@@ -94,5 +96,5 @@
 	    check = check && (*reward)->reward(player);
 	}
-	
+
 	return check;
     }
Index: code/trunk/src/orxonox/objects/quest/AddReward.h
===================================================================
--- code/trunk/src/orxonox/objects/quest/AddReward.h	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/AddReward.h	(revision 2092)
@@ -49,20 +49,20 @@
     {
 	public:
-            AddReward();
-	    ~AddReward();
-	    
+            AddReward(BaseObject* creator);
+	    virtual ~AddReward();
+
 	    virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-	    
+
 	    virtual bool invoke(Player* player); //!< Invokes the effect.
-	    
+
 	private:
             std::list<Rewardable*> rewards_;
-	
+
             void initialize(void); //!< Initializes the object.
-	
+
             inline void addRewardable(Rewardable* reward)
                 { this->rewards_.push_back(reward); }
 	    const Rewardable* getRewardables(unsigned int index) const;
-    
+
     };
 
Index: code/trunk/src/orxonox/objects/quest/ChangeQuestStatus.cc
===================================================================
--- code/trunk/src/orxonox/objects/quest/ChangeQuestStatus.cc	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/ChangeQuestStatus.cc	(revision 2092)
@@ -34,5 +34,5 @@
 namespace orxonox {
 
-    ChangeQuestStatus::ChangeQuestStatus() : QuestEffect()
+    ChangeQuestStatus::ChangeQuestStatus(BaseObject* creator) : QuestEffect(creator)
     {
         RegisterObject(ChangeQuestStatus);
@@ -46,5 +46,5 @@
     {
     }
-    
+
     void ChangeQuestStatus::setQuestId(const std::string & id)
     {
@@ -56,9 +56,9 @@
         this->questId_ = id;
     }
-    
+
     void ChangeQuestStatus::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
         SUPER(ChangeQuestStatus, XMLPort, xmlelement, mode);
-        
+
         XMLPortParam(ChangeQuestStatus, "questId", setQuestId, getQuestId, xmlelement, mode);
     }
Index: code/trunk/src/orxonox/objects/quest/ChangeQuestStatus.h
===================================================================
--- code/trunk/src/orxonox/objects/quest/ChangeQuestStatus.h	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/ChangeQuestStatus.h	(revision 2092)
@@ -48,17 +48,17 @@
     {
 	public:
-            ChangeQuestStatus();
+            ChangeQuestStatus(BaseObject* creator);
 	    virtual ~ChangeQuestStatus();
-	    
+
 	    virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-	    
+
 	    virtual bool invoke(Player* player) = 0; //!< Invokes the effect.
-	    
+
 	protected:
             inline const std::string & getQuestId(void) const //!< Returns the quest id.
                 { return this->questId_; }
-	
+
             std::string questId_; //!< The id of the quest the status should be changed of.
-            
+
 	private:
 	    void setQuestId(const std::string & id);
Index: code/trunk/src/orxonox/objects/quest/CompleteQuest.cc
===================================================================
--- code/trunk/src/orxonox/objects/quest/CompleteQuest.cc	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/CompleteQuest.cc	(revision 2092)
@@ -38,9 +38,9 @@
     CreateFactory(CompleteQuest);
 
-    CompleteQuest::CompleteQuest() : ChangeQuestStatus()
+    CompleteQuest::CompleteQuest(BaseObject* creator) : ChangeQuestStatus(creator)
     {
         RegisterObject(CompleteQuest);
     }
-    
+
     /**
     @brief
@@ -50,10 +50,10 @@
     {
     }
-    
+
     void CompleteQuest::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
         SUPER(CompleteQuest, XMLPort, xmlelement, mode);
     }
-    
+
     /**
     @brief
@@ -71,5 +71,5 @@
             return false;
         }
-    
+
         try
         {
@@ -85,5 +85,5 @@
             return false;
 	}
-	
+
 	return true;
     }
Index: code/trunk/src/orxonox/objects/quest/CompleteQuest.h
===================================================================
--- code/trunk/src/orxonox/objects/quest/CompleteQuest.h	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/CompleteQuest.h	(revision 2092)
@@ -48,11 +48,11 @@
     {
 	public:
-            CompleteQuest();
-	    ~CompleteQuest();
-	    
+            CompleteQuest(BaseObject* creator);
+	    virtual ~CompleteQuest();
+
 	    virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-	    
+
 	    virtual bool invoke(Player* player); //!< Invokes the effect.
-    
+
     };
 
Index: code/trunk/src/orxonox/objects/quest/FailQuest.cc
===================================================================
--- code/trunk/src/orxonox/objects/quest/FailQuest.cc	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/FailQuest.cc	(revision 2092)
@@ -38,9 +38,9 @@
     CreateFactory(FailQuest);
 
-    FailQuest::FailQuest() : ChangeQuestStatus()
+    FailQuest::FailQuest(BaseObject* creator) : ChangeQuestStatus(creator)
     {
         RegisterObject(FailQuest);
     }
-    
+
     /**
     @brief
@@ -50,10 +50,10 @@
     {
     }
-    
+
     void FailQuest::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
         SUPER(FailQuest, XMLPort, xmlelement, mode);
     }
-    
+
     /**
     @brief
@@ -71,5 +71,5 @@
             return false;
         }
-    
+
         try
         {
@@ -85,5 +85,5 @@
             return false;
 	}
-	
+
 	return true;
     }
Index: code/trunk/src/orxonox/objects/quest/FailQuest.h
===================================================================
--- code/trunk/src/orxonox/objects/quest/FailQuest.h	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/FailQuest.h	(revision 2092)
@@ -48,11 +48,11 @@
     {
 	public:
-            FailQuest();
-	    ~FailQuest();
-	    
+            FailQuest(BaseObject* creator);
+	    virtual ~FailQuest();
+
 	    virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-	    
+
 	    virtual bool invoke(Player* player); //!< Invokes the effect.
-    
+
     };
 
Index: code/trunk/src/orxonox/objects/quest/GlobalQuest.cc
===================================================================
--- code/trunk/src/orxonox/objects/quest/GlobalQuest.cc	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/GlobalQuest.cc	(revision 2092)
@@ -40,9 +40,11 @@
         Constructor.
     */
-    GlobalQuest::GlobalQuest() : Quest()
+    GlobalQuest::GlobalQuest(BaseObject* creator) : Quest(creator)
     {
+        RegisterObject(GlobalQuest);
+
         this->initialize();
     }
-    
+
     /**
     @brief
@@ -51,7 +53,7 @@
     GlobalQuest::~GlobalQuest()
     {
-        
+
     }
-    
+
     void GlobalQuest::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
@@ -60,10 +62,10 @@
         COUT(3) << "New GlobalQuest {" << this->getId() << "} created." << std::endl;
     }
-    
+
     void GlobalQuest::initialize(void)
     {
         RegisterObject(GlobalQuest);
     }
-    
+
     /**
     @brief
@@ -80,5 +82,5 @@
         return this->isInactive(player) ||  this->isActive(player);
     }
-    
+
     /**
     @brief
@@ -96,5 +98,5 @@
 
     }
-    
+
     /**
     @brief
@@ -126,5 +128,5 @@
             ThrowException(Argument, "The input Player* is NULL.");
         }
-        
+
         //TDO: Does this really work???
         std::set<Player*>::const_iterator it = this->players_.find((Player*)(void*)player);
@@ -139,5 +141,5 @@
 
     }
-    
+
     /**
     @brief
@@ -157,5 +159,5 @@
             return false;
 	}
-        
+
         std::set<Player*>::const_iterator it = this->players_.find(player);
         if (it == this->players_.end()) //!< Player is not yet in the list.
Index: code/trunk/src/orxonox/objects/quest/GlobalQuest.h
===================================================================
--- code/trunk/src/orxonox/objects/quest/GlobalQuest.h	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/GlobalQuest.h	(revision 2092)
@@ -49,23 +49,23 @@
     {
 	public:
-            GlobalQuest();
-	    ~GlobalQuest();
-	    
+            GlobalQuest(BaseObject* creator);
+	    virtual ~GlobalQuest();
+
 	    virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-	    
+
 	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 bool setStatus(Player* player, const questStatus::Enum & status); //!< Sets the status for a specific player.
-	    
+
 	private:
             std::set<Player*> players_; //!< The set of players which possess this quest.
             questStatus::Enum status_; //!< The status of this quest.
-            
+
             void initialize(void);
-    
+
     };
 
Index: code/trunk/src/orxonox/objects/quest/LocalQuest.cc
===================================================================
--- code/trunk/src/orxonox/objects/quest/LocalQuest.cc	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/LocalQuest.cc	(revision 2092)
@@ -36,9 +36,11 @@
     CreateFactory(LocalQuest);
 
-    LocalQuest::LocalQuest() : Quest()
+    LocalQuest::LocalQuest(BaseObject* creator) : Quest(creator)
     {
+        RegisterObject(LocalQuest);
+
         this->initialize();
     }
-    
+
     /**
     @brief
@@ -47,7 +49,7 @@
     LocalQuest::~LocalQuest()
     {
-        
+
     }
-    
+
     void LocalQuest::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
@@ -56,10 +58,10 @@
         COUT(3) << "New LocalQuest {" << this->getId() << "} created." << std::endl;
     }
-    
+
     void LocalQuest::initialize(void)
     {
         RegisterObject(LocalQuest);
     }
-    
+
     /**
     @brief
@@ -76,5 +78,5 @@
         return this->isInactive(player);
     }
-    
+
     /**
     @brief
@@ -91,5 +93,5 @@
         return this->isActive(player);
     }
-    
+
     /**
     @brief
@@ -106,5 +108,5 @@
         return this->isActive(player);
     }
-    
+
     /**
     @brief
@@ -123,5 +125,5 @@
             ThrowException(Argument, "The input Player* is NULL.");
         }
-        
+
         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())
@@ -131,5 +133,5 @@
 	return questStatus::inactive;
     }
-    
+
     /**
     @brief
Index: code/trunk/src/orxonox/objects/quest/LocalQuest.h
===================================================================
--- code/trunk/src/orxonox/objects/quest/LocalQuest.h	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/LocalQuest.h	(revision 2092)
@@ -49,24 +49,24 @@
     {
 	public:
-            LocalQuest();
-	    ~LocalQuest();
-	    
+            LocalQuest(BaseObject* creator);
+	    virtual ~LocalQuest();
+
 	    virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-	    
+
 	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 bool setStatus(Player* player, const questStatus::Enum & status); //!< Sets the status for a specific player.
-                
+
 	private:
             std::map<Player*, questStatus::Enum> playerStatus_; //!< List of the status for each player, with the Player-pointer as key.
-            
+
             void initialize(void);
-    
+
     };
-    
+
 
 }
Index: code/trunk/src/orxonox/objects/quest/Quest.cc
===================================================================
--- code/trunk/src/orxonox/objects/quest/Quest.cc	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/Quest.cc	(revision 2092)
@@ -34,9 +34,11 @@
 namespace orxonox {
 
-    Quest::Quest() : QuestItem()
-    {
+    Quest::Quest(BaseObject* creator) : QuestItem(creator)
+    {
+        RegisterObject(Quest);
+
         this->initialize();
     }
-    
+
     /**
     @brief
@@ -45,19 +47,19 @@
     Quest::~Quest()
     {
-        
-    }
-    
+
+    }
+
     void Quest::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
         SUPER(Quest, XMLPort, xmlelement, mode);
-        
+
         XMLPortObject(Quest, Quest, "", addSubQuest, getSubQuests, xmlelement, mode);
         XMLPortObject(Quest, QuestHint, "", addHint, getHints, xmlelement, mode);
         XMLPortObject(Quest, QuestEffect, "fail-effects", addFailEffect, getFailEffects, xmlelement, mode);
         XMLPortObject(Quest, QuestEffect, "complete-effects", addCompleteEffect, getCompleteEffects, xmlelement, mode);
-        
+
         QuestManager::registerQuest(this); //Registers the quest with the QuestManager.
     }
-    
+
     /**
     @brief
@@ -67,5 +69,5 @@
     {
         RegisterObject(Quest);
-        
+
         this->parentQuest_ = NULL;
     }
@@ -86,11 +88,11 @@
             return false;
         }
-        
+
         this->parentQuest_ = quest;
-        
+
         COUT(3) << "Parent Quest {" << quest->getId() << "} was added to Quest {" << this->getId() << "}." << std::endl;
         return true;
     }
-    
+
     /**
     @brief
@@ -108,16 +110,16 @@
             return false;
         }
-        
+
         quest->setParentQuest(this);
         this->subQuests_.push_back(quest);
-        
+
         COUT(3) << "Sub Quest {" << quest->getId() << "} was added to Quest {" << this->getId() << "}." << std::endl;
         return true;
     }
-    
-    
-    /**
-    @brief
-        Adds a Hint to the list of hints 
+
+
+    /**
+    @brief
+        Adds a Hint to the list of hints
     @param hint
         The hint that should be added to the list of hints.
@@ -132,15 +134,15 @@
             return false;
         }
-        
+
 	this->hints_.push_back(hint);
 	hint->setQuest(this);
-	
+
 	COUT(3) << "QuestHint {" << hint->getId() << "} was added to Quest {" << this->getId() << "}." << std::endl;
 	return true;
     }
-    
-    /**
-    @brief
-        
+
+    /**
+    @brief
+
     */
     bool Quest::addFailEffect(QuestEffect* effect)
@@ -151,14 +153,14 @@
             return false;
         }
-        
+
         this->failEffects_.push_back(effect);
-        
+
         COUT(3) << "A FailEffect was added to Quest {" << this->getId() << "}." << std::endl;
         return true;
     }
-    
-    /**
-    @brief
-        
+
+    /**
+    @brief
+
     */
     bool Quest::addCompleteEffect(QuestEffect* effect)
@@ -169,14 +171,14 @@
             return false;
         }
-        
+
         this->completeEffects_.push_back(effect);
-        
+
         COUT(3) << "A CompleteEffect was added to Quest {" << this->getId() << "}." << std::endl;
         return true;
     }
-    
-    /**
-    @brief
-        
+
+    /**
+    @brief
+
     */
     const Quest* Quest::getParentQuest(void)
@@ -184,8 +186,8 @@
         return this->parentQuest_;
     }
-    
-    /**
-    @brief
-        
+
+    /**
+    @brief
+
     */
     const Quest* Quest::getSubQuests(unsigned int index) const
@@ -202,8 +204,8 @@
         return NULL;
     }
-    
-    /**
-    @brief
-        
+
+    /**
+    @brief
+
     */
     const QuestHint* Quest::getHints(unsigned int index) const
@@ -220,8 +222,8 @@
         return NULL;
     }
-    
-    /**
-    @brief
-        
+
+    /**
+    @brief
+
     */
     const QuestEffect* Quest::getFailEffects(unsigned int index) const
@@ -238,8 +240,8 @@
         return NULL;
     }
-    
-    /**
-    @brief
-        
+
+    /**
+    @brief
+
     */
     const QuestEffect* Quest::getCompleteEffects(unsigned int index) const
@@ -256,5 +258,5 @@
         return NULL;
     }
-    
+
     /**
     @brief
@@ -271,5 +273,5 @@
         return this->getStatus(player) == questStatus::inactive;
     }
-    
+
     /**
     @brief
@@ -287,5 +289,5 @@
         return this->getStatus(player) == questStatus::active;
     }
-    
+
     /**
     @brief
@@ -302,5 +304,5 @@
         return this->getStatus(player) == questStatus::failed;
     }
-    
+
     /**
     @brief
@@ -317,5 +319,5 @@
         return this->getStatus(player) == questStatus::completed;
     }
-    
+
     /**
     @brief
@@ -336,5 +338,5 @@
         return false;
     }
-    
+
     /**
     @brief
@@ -356,5 +358,5 @@
         return false;
     }
-    
+
     /**
     @brief
Index: code/trunk/src/orxonox/objects/quest/Quest.h
===================================================================
--- code/trunk/src/orxonox/objects/quest/Quest.h	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/Quest.h	(revision 2092)
@@ -67,30 +67,30 @@
     {
 	public:
-            Quest();
+            Quest(BaseObject* creator);
 	    virtual ~Quest();
-	    
+
 	    virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-    
+
             inline Quest* getParentQuest(void) const //!< Returns the parent quest of the quest.
                 { return this->parentQuest_; }
 	    inline const std::list<Quest*> & getSubQuestList(void) const //!< Returns the list of sub quests.
                 { return this->subQuests_; }
-	    
+
 	    bool isInactive(const Player* player) const; //!< Returns true if the quest status for the specific player is 'inactive'.
 	    bool isActive(const Player* player) const; //!< Returns true if the quest status for the specific player is 'active'.
 	    bool isFailed(const Player* player) const; //!< Returns true if the quest status for the specific player is 'failed'.
 	    bool isCompleted(const Player* player) const; //!< Returns true if the quest status for the specific player is 'completed'.
-                
+
 	    bool start(Player* player); //!< Sets a quest to active.
 	    bool fail(Player* player); //!< Fails the quest.
 	    bool complete(Player* player); //!< Completes the quest.
-	    
+
         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.
-            
+
             bool setParentQuest(Quest* quest); //!< Sets the parent quest of the quest.
 	    bool addSubQuest(Quest* quest); //!< Adds a sub quest to the quest.
@@ -98,5 +98,5 @@
 	    bool addFailEffect(QuestEffect* effect);
 	    bool addCompleteEffect(QuestEffect* effect);
-	    
+
 	    const Quest* getParentQuest(void);
 	    const Quest* getSubQuests(unsigned int index) const;
@@ -104,13 +104,13 @@
 	    const QuestEffect* getFailEffects(unsigned int index) const;
 	    const QuestEffect* getCompleteEffects(unsigned int index) const;
-            
+
             virtual questStatus::Enum getStatus(const Player* player) const = 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.
Index: code/trunk/src/orxonox/objects/quest/QuestDescription.cc
===================================================================
--- code/trunk/src/orxonox/objects/quest/QuestDescription.cc	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/QuestDescription.cc	(revision 2092)
@@ -34,25 +34,27 @@
 
     CreateFactory(QuestDescription);
-    
-    QuestDescription::QuestDescription() : BaseObject()
+
+    QuestDescription::QuestDescription(BaseObject* creator) : BaseObject(creator)
     {
+        RegisterObject(QuestDescription);
+
         this->initialize();
     }
-    
+
     QuestDescription::~QuestDescription()
     {
-        
+
     }
-    
+
     void QuestDescription::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
         SUPER(QuestDescription, XMLPort, xmlelement, mode);
-    
+
         XMLPortParam(QuestDescription, "title", setTitle, getTitle, xmlelement, mode);
         XMLPortParam(QuestDescription, "description", setDescription, getDescription, xmlelement, mode);
-        
+
         COUT(3) << "New QuestDescription with title '" << this->getTitle() << "' created." << std::endl;
     }
-    
+
     /**
     @brief
Index: code/trunk/src/orxonox/objects/quest/QuestDescription.h
===================================================================
--- code/trunk/src/orxonox/objects/quest/QuestDescription.h	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/QuestDescription.h	(revision 2092)
@@ -45,27 +45,27 @@
     */
     class QuestDescription : public BaseObject {
-    
+
 	public:
-            QuestDescription();
-	    ~QuestDescription();
-	    
+            QuestDescription(BaseObject* creator);
+	    virtual ~QuestDescription();
+
 	    virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-	    
+
 	    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);
-            
+
             inline void setTitle(const std::string & title) //!< Sets the title.
                 { this->title_ = title; }
 	    inline void setDescription(const std::string & description) //!< Sets the description text.
                 { this->description_ = description; }
-		
+
             std::string title_; //!< The title.
             std::string description_; //!< The description.
-    
+
     };
 
Index: code/trunk/src/orxonox/objects/quest/QuestEffect.cc
===================================================================
--- code/trunk/src/orxonox/objects/quest/QuestEffect.cc	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/QuestEffect.cc	(revision 2092)
@@ -38,9 +38,9 @@
         Is not meant to be invoked directly, since this is only an interface.
     */
-    QuestEffect::QuestEffect() : BaseObject()
+    QuestEffect::QuestEffect(BaseObject* creator) : BaseObject(creator)
     {
         RegisterObject(QuestEffect);
     }
-    
+
     /**
     @brief
@@ -49,7 +49,7 @@
     QuestEffect::~QuestEffect()
     {
-        
+
     }
-    
+
     /**
     @brief
@@ -65,5 +65,5 @@
     {
         bool check = true;
-        
+
         for (std::list<QuestEffect*>::iterator effect = effects.begin(); effect != effects.end(); effect++)
 	{
Index: code/trunk/src/orxonox/objects/quest/QuestEffect.h
===================================================================
--- code/trunk/src/orxonox/objects/quest/QuestEffect.h	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/QuestEffect.h	(revision 2092)
@@ -47,11 +47,11 @@
     {
 	public:
-            QuestEffect();
+            QuestEffect(BaseObject* creator);
 	    virtual ~QuestEffect();
-	    
+
 	    virtual bool invoke(Player* player) = 0; //!< Invokes the effect.
 	    static bool invokeEffects(Player* player, std::list<QuestEffect*> & effects); //!< Invokes all effects in the list.
-	    
-	
+
+
     };
 
Index: code/trunk/src/orxonox/objects/quest/QuestHint.cc
===================================================================
--- code/trunk/src/orxonox/objects/quest/QuestHint.cc	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/QuestHint.cc	(revision 2092)
@@ -41,9 +41,11 @@
         Constructor.
     */
-    QuestHint::QuestHint() : QuestItem()
+    QuestHint::QuestHint(BaseObject* creator) : QuestItem(creator)
     {
+        RegisterObject(QuestHint);
+
         this->initialize();
     }
-    
+
     /**
     @brief
@@ -52,20 +54,20 @@
     QuestHint::~QuestHint()
     {
-        
+
     }
-    
+
     void QuestHint::initialize(void)
     {
         RegisterObject(QuestHint);
     }
-    
+
     void QuestHint::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
 	SUPER(QuestHint, XMLPort, xmlelement, mode);
-	
+
 	COUT(3) << "New QuestHint {" << this->getId() << "} created." << std::endl;
     }
 
-    
+
     /**
     @brief
@@ -85,5 +87,5 @@
             return false;
         }
-        
+
         std::map<Player*, questHintStatus::Enum>::iterator it = this->playerStatus_.find(player);
 	if (it != this->playerStatus_.end())
@@ -93,5 +95,5 @@
 	return questStatus::inactive;
     }
-    
+
     /**
     @brief
@@ -134,5 +136,5 @@
             return false;
         }
-        
+
         this->quest_ = quest;
         return true;
Index: code/trunk/src/orxonox/objects/quest/QuestHint.h
===================================================================
--- code/trunk/src/orxonox/objects/quest/QuestHint.h	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/QuestHint.h	(revision 2092)
@@ -26,5 +26,5 @@
  *
  */
- 
+
 #ifndef _QuestHint_H__
 #define _QuestHint_H__
@@ -64,27 +64,27 @@
     class QuestHint : public QuestItem
     {
-    
+
 	public:
-            QuestHint();
-	    ~QuestHint();
-	    
+            QuestHint(BaseObject* creator);
+	    virtual ~QuestHint();
+
 	    virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-	    
+
 	    bool isActive(Player* player); //!< Returns true if the hint is active for the input player.
-	    
+
 	    bool activate(Player* player); //!< Activates the hint for the input player.
-	    
+
 	    bool setQuest(Quest* quest); //!< Sets the quest the hint belongs to.
-	    
+
 	    inline Quest* getQuest(void)
 	       { return this->quest_; }
-	    
+
         private:
-            
+
             void initialize(void);
-            
+
             Quest* quest_; //!< The quest the hint belongs to.
             std::map<Player*, questHintStatus::Enum> playerStatus_; //!< List of the status for each player, with the Player-pointer as key.
-    
+
     };
 
Index: code/trunk/src/orxonox/objects/quest/QuestItem.cc
===================================================================
--- code/trunk/src/orxonox/objects/quest/QuestItem.cc	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/QuestItem.cc	(revision 2092)
@@ -32,10 +32,12 @@
 
 namespace orxonox {
-    
-    QuestItem::QuestItem() : BaseObject()
+
+    QuestItem::QuestItem(BaseObject* creator) : BaseObject(creator)
     {
+        RegisterObject(QuestItem);
+
         this->initialize();
     }
-    
+
     /**
     @brief
@@ -44,11 +46,11 @@
     QuestItem::~QuestItem()
     {
-        
+
     }
-    
+
     void QuestItem::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
         SUPER(QuestItem, XMLPort, xmlelement, mode);
-        
+
         XMLPortParam(QuestItem, "id", setId, getId, xmlelement, mode);
         //Doesn't getDescription have to be of type getDescription(unsigned int) ?
@@ -58,5 +60,5 @@
     }
 
-    
+
     /**
     @brief
@@ -67,8 +69,8 @@
     {
         RegisterObject(QuestItem);
-        
+
         this->id_ = "";
     }
-    
+
     void QuestItem::setId(const std::string & id)
     {
@@ -80,5 +82,5 @@
         this->id_ = id;
     }
-    
+
     //const QuestDescription* QuestItem::getDescription(unsigned int index) const //!< Returns the description of the QuestItem.
     //{
@@ -87,5 +89,5 @@
     //    return this->description_;
     //}
-    
+
     /**
     @brief
Index: code/trunk/src/orxonox/objects/quest/QuestItem.h
===================================================================
--- code/trunk/src/orxonox/objects/quest/QuestItem.h	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/QuestItem.h	(revision 2092)
@@ -26,5 +26,5 @@
  *
  */
- 
+
 #ifndef _QuestItem_H__
 #define _QuestItem_H__
@@ -38,5 +38,5 @@
 namespace orxonox {
 
-    
+
     /**
     @brief
@@ -48,11 +48,11 @@
     class QuestItem : public BaseObject
     {
-    
+
 	public:
-            QuestItem();
+            QuestItem(BaseObject* creator);
 	    virtual ~QuestItem();
-	    
+
 	    virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-	    
+
 	    inline const std::string & getId(void) const //!< Returns the id of this quest.
                 { return this->id_; }
@@ -60,18 +60,18 @@
                 { return this->description_; }
 	    //const QuestDescription* getDescription(unsigned int index) const; //!< Returns the description of the QuestItem.
-                
+
 	    static bool isId(const std::string & id); //!< Checks whether a given id is valid.
-	    
+
 	protected:
 	    void setId(const std::string & id);
 	    inline void setDescription(QuestDescription* description)
                 { this->description_ = description; }
-	    
+
 	private:
 	    std::string id_; //!< Identifier. Should be of GUID form: http://en.wikipedia.org/wiki/Globally_Unique_Identifier#Basic_structure
 	    QuestDescription* description_; //!< The description of the QuestItem.
-	    
+
 	    void initialize(void); //!< Initializes the object.
-    
+
     };
 
Index: code/trunk/src/orxonox/objects/quest/QuestManager.cc
===================================================================
--- code/trunk/src/orxonox/objects/quest/QuestManager.cc	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/QuestManager.cc	(revision 2092)
@@ -37,13 +37,13 @@
     std::map<std::string, QuestHint*> QuestManager::hintMap_;
 
-    QuestManager::QuestManager() : BaseObject()
+    QuestManager::QuestManager(BaseObject* creator) : BaseObject(creator)
     {
         RegisterObject(QuestManager);
     }
-    
-    
+
+
     QuestManager::~QuestManager()
     {
-        
+
     }
 
@@ -63,8 +63,8 @@
             return false;
 	}
-	
+
         std::pair<std::map<std::string, Quest*>::iterator,bool> ret;
         ret = questMap_.insert( std::pair<std::string,Quest*>(quest->getId(),quest) );
-        
+
         if(ret.second)
         {
@@ -78,5 +78,5 @@
 	}
     }
-    
+
     /**
     @brief
@@ -94,8 +94,8 @@
             return false;
         }
-        
+
         std::pair<std::map<std::string, QuestHint*>::iterator,bool> ret;
         ret = hintMap_.insert ( std::pair<std::string,QuestHint*>(hint->getId(),hint) );
-        
+
         if(ret.second)
         {
@@ -109,5 +109,5 @@
 	}
     }
-    
+
     /**
     @brief
@@ -127,5 +127,5 @@
             ThrowException(Argument, "Invalid questId.");
 	}
-	
+
         Quest* quest;
         std::map<std::string, Quest*>::iterator it = questMap_.find(questId);
@@ -139,9 +139,9 @@
 	   COUT(2) << "The quest with id {" << questId << "} is nowhere to be found." << std::endl;
 	}
-	
+
 	return quest;
 
     }
-    
+
     /**
     @brief
@@ -161,5 +161,5 @@
             ThrowException(Argument, "Invalid hintId.");
 	}
-	
+
         QuestHint* hint;
         std::map<std::string, QuestHint*>::iterator it = hintMap_.find(hintId);
@@ -173,9 +173,9 @@
 	   COUT(2) << "The hint with id {" << hintId << "} is nowhere to be found." << std::endl;
 	}
-	
+
 	return hint;
 
     }
-    
+
 
 }
Index: code/trunk/src/orxonox/objects/quest/QuestManager.h
===================================================================
--- code/trunk/src/orxonox/objects/quest/QuestManager.h	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/QuestManager.h	(revision 2092)
@@ -48,19 +48,19 @@
     class QuestManager : public BaseObject
     {
-    
+
 	public:
-	    QuestManager();
-	    ~QuestManager();
-	    
+	    QuestManager(BaseObject* creator);
+	    virtual ~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); //!< 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_; //!< All quests registered by their id's.
 	    static std::map<std::string, QuestHint*> hintMap_; //!< All hints registered by their id's.
-    
+
     };
 
Index: code/trunk/src/orxonox/objects/quest/Rewardable.cc
===================================================================
--- code/trunk/src/orxonox/objects/quest/Rewardable.cc	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/Rewardable.cc	(revision 2092)
@@ -33,11 +33,11 @@
 namespace orxonox {
 
-    
-    Rewardable::Rewardable() : BaseObject()
+
+    Rewardable::Rewardable(BaseObject* creator) : BaseObject(creator)
     {
         RegisterObject(Rewardable);
     }
-    
-    
+
+
     Rewardable::~Rewardable()
     {
Index: code/trunk/src/orxonox/objects/quest/Rewardable.h
===================================================================
--- code/trunk/src/orxonox/objects/quest/Rewardable.h	(revision 2091)
+++ code/trunk/src/orxonox/objects/quest/Rewardable.h	(revision 2092)
@@ -44,11 +44,11 @@
     class Rewardable : public BaseObject
     {
-    
+
 	public:
-	    Rewardable();
+	    Rewardable(BaseObject* creator);
 	    virtual ~Rewardable();
-	    
+
 	    virtual bool reward(Player* player) = 0; //!<Method to transcribe a rewardable object to the player.
-    
+
     };
 
