Index: code/branches/gamecontent/src/orxonox/controllers/AIController.cc
===================================================================
--- code/branches/gamecontent/src/orxonox/controllers/AIController.cc	(revision 8909)
+++ code/branches/gamecontent/src/orxonox/controllers/AIController.cc	(revision 8923)
@@ -74,57 +74,5 @@
             }
 
-            // search enemy
-            random = rnd(maxrand);
-            if (random < (15 + botlevel_* 20) && (!this->target_))
-                this->searchNewTarget();
-
-            // forget enemy
-            random = rnd(maxrand);
-            if (random < ((1-botlevel_)*6) && (this->target_))
-                this->forgetTarget();
-
-            // next enemy
-            random = rnd(maxrand);
-            if (random < (botlevel_*20) && (this->target_))
-                this->searchNewTarget();
-
-            // fly somewhere
-            random = rnd(maxrand);
-            if (random < 50 && (!this->bHasTargetPosition_ && !this->target_))
-                this->searchRandomTargetPosition();
-
-            // stop flying
-            random = rnd(maxrand);
-            if (random < 10 && (this->bHasTargetPosition_ && !this->target_))
-                this->bHasTargetPosition_ = false;
-
-            // fly somewhere else
-            random = rnd(maxrand);
-            if (random < 30 && (this->bHasTargetPosition_ && !this->target_))
-                this->searchRandomTargetPosition();
-
-            // shoot
-            random = rnd(maxrand);
-            if (!(this->passive_) && random < (75 + botlevel_*25) && (this->target_ && !this->bShooting_))
-                this->bShooting_ = true;
-
-            // stop shooting
-            random = rnd(maxrand);
-            if (random < ((1 - botlevel_)*25) && (this->bShooting_))
-                this->bShooting_ = false;
-
-            // boost
-            random = rnd(maxrand);
-            if (random < botlevel_*100 )
-                this->boostControl();
-
-            // update Checkpoints
-            /*random = rnd(maxrand);
-            if (this->defaultWaypoint_ && random > (maxrand-10))
-                this->manageWaypoints();
-            else //if(random > maxrand-10) //CHECK USABILITY!!*/
-            if (this->waypoints_.size() == 0 )
-                this->manageWaypoints();
-
+            this->defaultBehaviour(maxrand);
         }
 
@@ -136,6 +84,4 @@
         if (this->state_ == MASTER)
         {
-
-
             this->commandSlaves();
 
@@ -170,58 +116,7 @@
                     this->searchNewMaster();
 
-                // search enemy
-                random = rnd(maxrand);
-                if (random < (botlevel_)*25 && (!this->target_))
-                    this->searchNewTarget();
-
-                // forget enemy
-                random = rnd(maxrand);
-                if (random < (1-botlevel_)*6 && (this->target_))
-                    this->forgetTarget();
-
-                // next enemy
-                random = rnd(maxrand);
-                if (random < 10 && (this->target_))
-                    this->searchNewTarget();
-
-                // fly somewhere
-                random = rnd(maxrand);
-                if (random < 50 && (!this->bHasTargetPosition_ && !this->target_))
-                    this->searchRandomTargetPosition();
-
-
-                // fly somewhere else
-                random = rnd(maxrand);
-                if (random < 30 && (this->bHasTargetPosition_ && !this->target_))
-                    this->searchRandomTargetPosition();
-
-                // shoot
-                random = rnd(maxrand);
-                if (!(this->passive_) && random < 25*(botlevel_)+1 && (this->target_ && !this->bShooting_))
-                {
-                    this->bShooting_ = true;
-                    this->forceFreeSlaves();
-                }
-
-                // stop shooting
-                random = rnd(maxrand);
-                if (random < ( (1- botlevel_)*25 ) && (this->bShooting_))
-                    this->bShooting_ = false;
-
-                // boost
-                random = rnd(maxrand);
-                if (random < botlevel_*100 )
-                    this->boostControl();
-
-                // update Checkpoints
-                /*random = rnd(maxrand);
-                if (this->defaultWaypoint_ && random > (maxrand-10))
-                    this->manageWaypoints();
-                else //if(random > maxrand-10) //CHECK USABILITY!!*/
-                if (this->waypoints_.size() == 0 )
-                    this->manageWaypoints();
+                this->defaultBehaviour(maxrand);
             }
         }
-
     }
 
@@ -321,6 +216,7 @@
         {   //Vector-implementation: mode_.back() == ROCKET;
             if(controllable)
-            {
-                if(controllable->getRocket())//Check wether the bot is controlling the rocket and if the timeout is over.
+            {//Check wether the bot is controlling the rocket and if the timeout is over.
+                if(controllable->getIdentifier() == ClassByString("Rocket"))
+
                 {
                     this->follow();
@@ -342,3 +238,71 @@
     }
 
+    void AIController::defaultBehaviour(float maxrand)
+    {       float random;
+            // search enemy
+            random = rnd(maxrand);
+            if (random < (botlevel_* 100) && (!this->target_))
+                this->searchNewTarget();
+
+            // forget enemy
+            random = rnd(maxrand);
+            if (random < ((1-botlevel_)*20) && (this->target_))
+                this->forgetTarget();
+
+            // next enemy
+            random = rnd(maxrand);
+            if (random < (botlevel_*30) && (this->target_))
+                this->searchNewTarget();
+
+            // fly somewhere
+            random = rnd(maxrand);
+            if (random < 50 && (!this->bHasTargetPosition_ && !this->target_))
+                this->searchRandomTargetPosition();
+
+            // stop flying
+            random = rnd(maxrand);
+            if (random < 10 && (this->bHasTargetPosition_ && !this->target_))
+                this->bHasTargetPosition_ = false;
+
+            // fly somewhere else
+            random = rnd(maxrand);
+            if (random < 30 && (this->bHasTargetPosition_ && !this->target_))
+                this->searchRandomTargetPosition();
+
+            if (this->state_ == MASTER) // master: shoot
+            {
+                random = rnd(maxrand);
+                if (!(this->passive_) && random < (100*botlevel_) && (this->target_ && !this->bShooting_))
+                {
+                    this->bShooting_ = true;
+                    this->forceFreeSlaves();
+                }
+            }
+            else
+            {
+                // shoot
+                random = rnd(maxrand);
+                if (!(this->passive_) && random < (botlevel_*100) && (this->target_ && !this->bShooting_))
+                    this->bShooting_ = true;
+            }
+
+            // stop shooting
+            random = rnd(maxrand);
+            if (random < ((1 - botlevel_)*50) && (this->bShooting_))
+                this->bShooting_ = false;
+
+            // boost
+            random = rnd(maxrand);
+            if (random < botlevel_*50 )
+                this->boostControl();
+
+            // update Checkpoints
+            /*random = rnd(maxrand);
+            if (this->defaultWaypoint_ && random > (maxrand-10))
+                this->manageWaypoints();
+            else //if(random > maxrand-10) //CHECK USABILITY!!*/
+            if (this->waypoints_.size() == 0 )
+                this->manageWaypoints();
+    }
+
 }
Index: code/branches/gamecontent/src/orxonox/controllers/AIController.h
===================================================================
--- code/branches/gamecontent/src/orxonox/controllers/AIController.h	(revision 8909)
+++ code/branches/gamecontent/src/orxonox/controllers/AIController.h	(revision 8923)
@@ -44,13 +44,14 @@
             virtual ~AIController();
 
-            virtual void tick(float dt);
+            virtual void tick(float dt); //<! Carrying out the targets set in action().
 
         protected:
-            virtual void action();
+            virtual void action(); //<! action() is called in regular intervals managing the bot's behaviour ~ setting targets.
+            void defaultBehaviour(float maxrand); //<! Helper function for code reusage. Some concrete commands for a bot.
 
         private:
             static const float ACTION_INTERVAL;
 
-            Timer actionTimer_;
+            Timer actionTimer_; //<! Regularly calls action(). 
     };
 }
Index: code/branches/gamecontent/src/orxonox/controllers/ArtificialController.cc
===================================================================
--- code/branches/gamecontent/src/orxonox/controllers/ArtificialController.cc	(revision 8909)
+++ code/branches/gamecontent/src/orxonox/controllers/ArtificialController.cc	(revision 8923)
@@ -92,5 +92,5 @@
         this->target_.setCallback(createFunctor(&ArtificialController::targetDied, this));
         this->bSetupWorked = false;
-        this->botlevel_ = 0.2f;
+        this->botlevel_ = 0.5f;
         this->mode_ = DEFAULT;////Vector-implementation: mode_.push_back(DEFAULT);
         this->timeout_ = 0;
Index: code/branches/gamecontent/src/orxonox/gametypes/Mission.cc
===================================================================
--- code/branches/gamecontent/src/orxonox/gametypes/Mission.cc	(revision 8909)
+++ code/branches/gamecontent/src/orxonox/gametypes/Mission.cc	(revision 8923)
@@ -28,5 +28,6 @@
 
 #include "Mission.h"
-//#inclued "TeamGametype.h"
+//#include "TeamGametype.h"
+#include "items/Engine.h"
 
 #include "core/CoreIncludes.h"
@@ -70,5 +71,6 @@
         Gametype::start();
 
-
+        /*for (ObjectList<Engine>::iterator it = ObjectList<Engine>::begin(); it != ObjectList<Engine>::end(); ++it)
+            it->setActive(false); // works -> @sr :*/
         this->gtinfo_->sendAnnounceMessage("Your mission has started!");
     }
Index: code/branches/gamecontent/src/orxonox/gametypes/Mission.h
===================================================================
--- code/branches/gamecontent/src/orxonox/gametypes/Mission.h	(revision 8909)
+++ code/branches/gamecontent/src/orxonox/gametypes/Mission.h	(revision 8923)
@@ -49,5 +49,5 @@
             inline void setLives(unsigned int amount)
                 {this->lives_ = amount;}
-	    inline unsigned int getLives()
+            inline unsigned int getLives()
                 {return this->lives_;}
 
Index: code/branches/gamecontent/src/orxonox/gametypes/TeamGametype.cc
===================================================================
--- code/branches/gamecontent/src/orxonox/gametypes/TeamGametype.cc	(revision 8909)
+++ code/branches/gamecontent/src/orxonox/gametypes/TeamGametype.cc	(revision 8923)
@@ -44,4 +44,5 @@
 
         this->teams_ = 2;
+        this->allowFriendlyFire_ = false;
 
         this->setConfigValues();
@@ -104,16 +105,16 @@
 
     bool TeamGametype::allowPawnHit(Pawn* victim, Pawn* originator)
-    {
-        return (!this->pawnsAreInTheSameTeam(victim, originator) || !originator);
+    {// hit allowed: if victim & originator are foes or if originator doesnot exist or if friendlyfire is allowed 
+        return (!this->pawnsAreInTheSameTeam(victim, originator) || !originator || this->allowFriendlyFire_);
     }
 
     bool TeamGametype::allowPawnDamage(Pawn* victim, Pawn* originator)
     {
-        return (!this->pawnsAreInTheSameTeam(victim, originator) || !originator);
+        return (!this->pawnsAreInTheSameTeam(victim, originator) || !originator || this->allowFriendlyFire_);
     }
 
     bool TeamGametype::allowPawnDeath(Pawn* victim, Pawn* originator)
     {
-        return (!this->pawnsAreInTheSameTeam(victim, originator) || !originator);
+        return (!this->pawnsAreInTheSameTeam(victim, originator) || !originator || this->allowFriendlyFire_);
     }
 
Index: code/branches/gamecontent/src/orxonox/gametypes/TeamGametype.h
===================================================================
--- code/branches/gamecontent/src/orxonox/gametypes/TeamGametype.h	(revision 8909)
+++ code/branches/gamecontent/src/orxonox/gametypes/TeamGametype.h	(revision 8923)
@@ -65,4 +65,5 @@
             bool pawnsAreInTheSameTeam(Pawn* pawn1, Pawn* pawn2);
 
+            bool allowFriendlyFire_; //<! friendlyfire is per default switched off: friendlyFire_ = false;
             std::map<PlayerInfo*, int> teamnumbers_;
             std::vector<ColourValue> teamcolours_;
Index: code/branches/gamecontent/src/orxonox/worldentities/ControllableEntity.cc
===================================================================
--- code/branches/gamecontent/src/orxonox/worldentities/ControllableEntity.cc	(revision 8909)
+++ code/branches/gamecontent/src/orxonox/worldentities/ControllableEntity.cc	(revision 8923)
@@ -74,5 +74,4 @@
         this->bMouseLook_ = false;
         this->mouseLookSpeed_ = 200;
-        this->bIsRocket_ = false;
 
         this->server_position_         = Vector3::ZERO;
Index: code/branches/gamecontent/src/orxonox/worldentities/ControllableEntity.h
===================================================================
--- code/branches/gamecontent/src/orxonox/worldentities/ControllableEntity.h	(revision 8909)
+++ code/branches/gamecontent/src/orxonox/worldentities/ControllableEntity.h	(revision 8923)
@@ -163,6 +163,4 @@
                 { return this->target_.get(); }
             void setTargetInternal( uint32_t targetID );
-            inline bool getRocket() const
-                { return this-> bIsRocket_; }
 
         protected:
@@ -183,5 +181,4 @@
 
             Ogre::SceneNode* cameraPositionRootNode_;
-            bool bIsRocket_; //Workaround to see, if the controllable entity is a Rocket.
 
         private:
