Index: code/branches/modularships/src/orxonox/items/PartDestructionEvent.cc
===================================================================
--- code/branches/modularships/src/orxonox/items/PartDestructionEvent.cc	(revision 10055)
+++ code/branches/modularships/src/orxonox/items/PartDestructionEvent.cc	(revision 10058)
@@ -83,6 +83,4 @@
     void PartDestructionEvent::execute()
     {
-        orxout() << "Executing PartDestructionEvent " << this->getName() << endl;
-
         // Do not execute if this event is invalid
         if(!isValid())
@@ -109,4 +107,7 @@
                 this->parent_->getParent()->setBoostPowerRate(operate(this->parent_->getParent()->getBoostPowerRate()));
                 break;
+            case rotationthrust:
+                this->parent_->getParent()->setRotationThrust(operate(this->parent_->getParent()->getRotationThrust()));
+                break;
             default:
                 break;
@@ -120,21 +121,28 @@
             switch (this->targetParam_) {
             case null:
-                for(unsigned int i = 0; i < this->parent_->getParent()->getEngineList().size(); i++) // FIXME: (noep) segfault on .size()
-                {
-                    if(this->parent_->getParent()->getEngine(i)->getName() == this->targetName_)
-                    {
-                        orxout() << "engine found" << endl;
-                        this->parent_->getParent()->removeEngine(this->parent_->getParent()->getEngine(i));
-                        break;
-                    }
-                }
+                this->parent_->getParent()->removeEngine(this->parent_->getParent()->getEngineByName(targetName_));
                 break;
             case boostfactor:
-                for(unsigned int i = 0; i < this->parent_->getParent()->getEngineList().size(); i++)
-                {
-                    if(this->parent_->getParent()->getEngine(i)->getName() == this->targetName_)
-                        this->parent_->getParent()->getEngine(i)->setBoostFactor(operate(this->parent_->getParent()->getEngine(i)->getBoostFactor()));
-                    break;
-                }
+                this->parent_->getParent()->getEngineByName(targetName_)->setBoostFactor(operate(this->parent_->getParent()->getEngineByName(targetName_)->getBoostFactor()));
+                break;
+            case speedfront:
+                this->parent_->getParent()->getEngineByName(targetName_)->setMaxSpeedFront(operate(this->parent_->getParent()->getEngineByName(targetName_)->getMaxSpeedFront()));
+                break;
+            case accelerationfront:
+                this->parent_->getParent()->getEngineByName(targetName_)->setAccelerationFront(operate(this->parent_->getParent()->getEngineByName(targetName_)->getAccelerationFront()));
+                break;
+            default:
+                break;
+            }
+            this->setValid(false);
+            return;
+        }
+
+        if (this->targetType_ == "part")
+        {
+            switch (this->targetParam_) {
+            case null:
+                this->parent_->getParent()->getShipPartByName(targetName_)->setEventExecution(false);
+                this->parent_->getParent()->killShipPart(targetName_);
                 break;
             default:
@@ -159,5 +167,5 @@
     void PartDestructionEvent::setTargetType(std::string type)
     {
-        if ((type == "ship") || (type == "engine") || (type == "weapon"))
+        if ((type == "ship") || (type == "engine") || (type == "weapon") || (type == "part"))
         {
             this->targetType_ = type;
@@ -166,5 +174,5 @@
 
         // Error, if invalid target-type was entered.
-        orxout(internal_warning) << "\"" << type << "\" is not a valid target-type for a PartDestructionEvent. Valid types are: ship engine weapon" << endl;
+        orxout(internal_warning) << "\"" << type << "\" is not a valid target-type for a PartDestructionEvent. Valid types are: ship engine weapon part" << endl;
         this->setValid(false);
         return;
@@ -229,5 +237,5 @@
         // weapon:
 
-        // ship: shieldhealth (maxshieldhealth shieldabsorption shieldrechargerate) boostpower boostpowerrate
+        // ship: shieldhealth (maxshieldhealth shieldabsorption shieldrechargerate) boostpower boostpowerrate rotationthrust
         if (this->targetType_ == "ship")
         {
@@ -247,6 +255,23 @@
                 return;
             }
-
-            orxout(internal_warning) << "\"" << param << "\" is not a valid target-param for a PartDestructionEvent with target-type \"ship\". Valid types are: shieldhealth maxshieldhealth shieldabsorption shieldrechargerate boostpower boostpowerrate" << endl;
+            if (param == "rotationthrust")
+            {
+                this->targetParam_ = rotationthrust;
+                return;
+            }
+
+            orxout(internal_warning) << "\"" << param << "\" is not a valid target-param for a PartDestructionEvent with target-type \"ship\". Valid types are: shieldhealth maxshieldhealth shieldabsorption shieldrechargerate boostpower boostpowerrate rotationthrust" << endl;
+            return;
+        }
+
+        if (this->targetType_ == "part")
+        {
+            if (param == "NULL")
+            {
+                this->targetParam_ = null;
+                return;
+            }
+
+            orxout(internal_warning) << "\"" << param << "\" is not a valid target-param for a PartDestructionEvent with target-type \"part\". Valid types are: NULL (set operation to \"destroy\")" << endl;
             return;
         }
@@ -265,5 +290,5 @@
     {
         // * + - destroy
-        if ((operation == "*") || (operation == "+") || (operation == "-") || (operation == "destroy"))
+        if ((operation == "*") || (operation == "+") || (operation == "-") || (operation == "set") || (operation == "destroy"))
         {
             this->operation_ = operation;
@@ -271,5 +296,5 @@
         }
         this->operation_ = "NULL";
-        orxout(internal_warning) << "\"" << operation << "\" is not a valid operation for a PartDestructionEvent. Valid operations are: * + - destroy" << endl;
+        orxout(internal_warning) << "\"" << operation << "\" is not a valid operation for a PartDestructionEvent. Valid operations are: * + - set destroy" << endl;
     }
 
@@ -292,5 +317,7 @@
         The value which should be modified
     @return
-        Returns the product / sum / difference of input and configured value, or 0 if the operation is "destroy"
+        Returns the product / sum / difference of input and configured value,
+        the configured value if the operation is "set",
+        or 0 if the operation is "destroy"
     */
     float PartDestructionEvent::operate(float input)
@@ -302,4 +329,6 @@
         if (this->operation_ == "-")
             return input - this->value_;
+        if (this->operation_ == "set")
+            return this->value_;
         if (this->operation_ == "destroy")
         {
Index: code/branches/modularships/src/orxonox/items/PartDestructionEvent.h
===================================================================
--- code/branches/modularships/src/orxonox/items/PartDestructionEvent.h	(revision 10055)
+++ code/branches/modularships/src/orxonox/items/PartDestructionEvent.h	(revision 10058)
@@ -90,4 +90,5 @@
                 boostpower,         // Amount of available boost
                 boostpowerrate,     // Recharge-rate of boost
+                rotationthrust,
                 boostfactor,
                 speedfront,
Index: code/branches/modularships/src/orxonox/items/ShipPart.cc
===================================================================
--- code/branches/modularships/src/orxonox/items/ShipPart.cc	(revision 10055)
+++ code/branches/modularships/src/orxonox/items/ShipPart.cc	(revision 10058)
@@ -52,4 +52,5 @@
         RegisterObject(ShipPart);
         this->setAlive(true);
+        this->setEventExecution(true);
     }
 
@@ -103,9 +104,11 @@
         this->setAlive(false);
 
-        // Execute all destruction events
-        for (unsigned int i = 0; i < this->eventList_.size(); i++)
-        {
-            orxout() << "executing" << endl;
-            this->getDestructionEvent(i)->execute();
+        if(eventExecution_)
+        {
+            // Execute all destruction events
+            for (unsigned int i = 0; i < this->eventList_.size(); i++)
+            {
+                this->getDestructionEvent(i)->execute();
+            }
         }
 
Index: code/branches/modularships/src/orxonox/items/ShipPart.h
===================================================================
--- code/branches/modularships/src/orxonox/items/ShipPart.h	(revision 10055)
+++ code/branches/modularships/src/orxonox/items/ShipPart.h	(revision 10058)
@@ -78,4 +78,9 @@
                 { return this->alive_; }
 
+            inline void setEventExecution(bool var)
+                { this->eventExecution_ = var; }
+            inline bool isEventExecution()
+                { return this->eventExecution_; }
+
             virtual void setHealth(float health);
             inline void addHealth(float health)
@@ -114,4 +119,5 @@
 
             bool alive_;
+            bool eventExecution_;
 
 
