Index: code/trunk/src/libraries/core/Event.cc
===================================================================
--- code/trunk/src/libraries/core/Event.cc	(revision 6857)
+++ code/trunk/src/libraries/core/Event.cc	(revision 6859)
@@ -59,5 +59,5 @@
         this->bProcessingEvent_ = true;
 
-        COUT(4) << "Processing event (EventState) : originator: " << event.originator_->getIdentifier()->getName() << " (&" << event.originator_ << "), activate: " << event.activate_ << ", name: " << event.name_ << ", statename: " << event.statename_ << ", object: " << object->getIdentifier()->getName() << " (&" << object << ")" << ", subclass: " << this->subclass_->getName() << ", (?): " << event.originator_->isA(this->subclass_) << "." << std::endl;
+        COUT(4) << "Processing event (EventState) : originator: " << event.originator_->getIdentifier()->getName() << " (&" << event.originator_ << "), activate: " << event.activate_ << ", name: " << event.name_ << ", statename: " << event.statename_ << ", object: " << object->getIdentifier()->getName() << " (&" << object << ")" << "." << std::endl;
         
         // check if the originator is an instance of the requested class
Index: code/trunk/src/modules/objects/triggers/MultiTrigger.cc
===================================================================
--- code/trunk/src/modules/objects/triggers/MultiTrigger.cc	(revision 6857)
+++ code/trunk/src/modules/objects/triggers/MultiTrigger.cc	(revision 6859)
@@ -71,4 +71,6 @@
         this->bInvertMode_ = false;
         this->mode_ = MultiTriggerMode::EventTriggerAND;
+
+        this->parentTrigger_ = NULL;
         
         this->targetMask_.exclude(Class(BaseObject));
@@ -165,5 +167,8 @@
                 }
                 else
+                {
+                    COUT(1) << "BUH" << std::endl;
                     delete state;
+                }
                 
                 queue->pop();
@@ -259,5 +264,9 @@
                         // Print some debug output if the state has changed.
                         if(bStateChanged)
+                        {
                             COUT(4) << "MultiTrigger '" << this->getName() << "' (&" << this << ") changed state. originator: " << state->originator->getIdentifier()->getName() << " (&" << state->originator << "), active: " << bActive << ", triggered: " << state->bTriggered << "." << std::endl;
+                            if(this->parentTrigger_ != NULL)
+                                this->parentTrigger_->activityChanged(state->originator);
+                        }
 
                         // If the MultiTrigger has exceeded its amount of activations and it doesn't stay active, it has to be destroyed,
@@ -386,4 +395,5 @@
         if (this != trigger && trigger != NULL)
             this->subTriggers_.insert(trigger);
+        trigger->addParentTrigger(this);
     }
 
@@ -423,39 +433,13 @@
     std::queue<MultiTriggerState*>* MultiTrigger::letTrigger(void)
     {
-        // Goes through all sub-triggers and gets the objects triggering them.
-        std::set<BaseObject*>* triggerers = new std::set<BaseObject*>();
-        std::set<BaseObject*>::iterator objIt;
-        for(std::set<MultiTrigger*>::iterator it = this->subTriggers_.begin(); it != this->subTriggers_.end(); it ++)
-        {
-            std::set<BaseObject*> set = (*it)->getActive();
-            for(objIt = set.begin(); objIt != set.end(); objIt++)
-            {
-                triggerers->insert(*objIt);
-            }
-        }
-
-        // Goes through all the triggerers of this trigger.
-        for(objIt = this->active_.begin(); objIt != this->active_.end(); objIt++)
-        {
-            triggerers->insert(*objIt);
-        }
-
-        // If no objects are triggering this MultiTrigger or the sub-triggers.
-        if(triggerers->size() == 0)
-            return NULL;
-
-        // Create a state for each object triggering this MultiTrigger or any of the sub-triggers and append it to the queue.
-        std::queue<MultiTriggerState*>* queue = new std::queue<MultiTriggerState*>();
-        MultiTriggerState* state = NULL;
-        for(std::set<BaseObject*>::iterator it = triggerers->begin(); it != triggerers->end(); it++)
-        {
-            state = new MultiTriggerState;
-            state->bTriggered = true;
-            state->originator = *it;
-            queue->push(state);
-        }
-        delete triggerers;
-
-        return queue;
+        return NULL;
+    }
+    
+    void MultiTrigger::activityChanged(BaseObject* originator)
+    {
+        MultiTriggerState* state = new MultiTriggerState;
+        state->bTriggered = (this->isTriggered(originator) & this->isModeTriggered(originator)) ^ this->bInvertMode_;
+        state->originator = originator;
+        this->addState(state);
     }
 
Index: code/trunk/src/modules/objects/triggers/MultiTrigger.h
===================================================================
--- code/trunk/src/modules/objects/triggers/MultiTrigger.h	(revision 6857)
+++ code/trunk/src/modules/objects/triggers/MultiTrigger.h	(revision 6859)
@@ -207,4 +207,6 @@
         protected:
             virtual std::queue<MultiTriggerState*>* letTrigger(void); //!< This method is called by the MultiTrigger to get information about new trigger events that need to be looked at.
+
+            void activityChanged(BaseObject* originator);
             
             bool isModeTriggered(BaseObject* triggerer = NULL); //!< Checks whetherx the MultiTrigger is triggered concerning it's sub-triggers.
@@ -213,4 +215,11 @@
             void fire(bool status, BaseObject* originator = NULL);  //!< Helper method. Creates an event for the given status and originator and fires it.
 
+            /**
+            @brief Adds the parent of a MultiTrigger.
+            @param parent A pointer to the parent MultiTrigger.
+            */
+            inline void addParentTrigger(MultiTrigger* parent)
+                { this->parentTrigger_ = parent; }
+            
             /**
             @brief Get the target mask used to identify the targets of this MultiTrigger.
@@ -257,4 +266,5 @@
             MultiTriggerMode::Value mode_; //!< The mode of the MultiTrigger.
 
+            MultiTrigger* parentTrigger_;
             std::set<MultiTrigger*> subTriggers_; //!< The sub-triggers of this MultiTrigger.
             
Index: code/trunk/src/modules/objects/triggers/MultiTriggerContainer.cc
===================================================================
--- code/trunk/src/modules/objects/triggers/MultiTriggerContainer.cc	(revision 6857)
+++ code/trunk/src/modules/objects/triggers/MultiTriggerContainer.cc	(revision 6859)
@@ -38,4 +38,6 @@
 namespace orxonox
 {
+
+    CreateUnloadableFactory(MultiTriggerContainer);
     
     /**
Index: code/trunk/src/modules/questsystem/QuestEffectBeacon.cc
===================================================================
--- code/trunk/src/modules/questsystem/QuestEffectBeacon.cc	(revision 6857)
+++ code/trunk/src/modules/questsystem/QuestEffectBeacon.cc	(revision 6859)
@@ -76,5 +76,5 @@
         XMLPortObject(QuestEffectBeacon, QuestEffect, "effects", addEffect, getEffect, xmlelement, mode);
 
-        XMLPortEventState(QuestEffectBeacon, BaseObject, "execute", execute, xmlelement, mode); //TODO: Change BaseObject to MultiTrigger as soon as MultiTrigger is the base of all triggers.
+        XMLPortEventSink(QuestEffectBeacon, BaseObject, "execute", execute, xmlelement, mode); //TODO: Change BaseObject to MultiTrigger as soon as MultiTrigger is the base of all triggers.
 
         COUT(3) << "New QuestEffectBeacon created." << std::endl;
