Index: /code/branches/ai2/src/orxonox/controllers/AIController.cc
===================================================================
--- /code/branches/ai2/src/orxonox/controllers/AIController.cc	(revision 8734)
+++ /code/branches/ai2/src/orxonox/controllers/AIController.cc	(revision 8735)
@@ -205,5 +205,10 @@
         if (!this->isActive())
             return;
-
+        if(this->bDeathFlag_)//If a bot died recently, make him check his weaponsystem.
+        {
+            this->bSetupWorked = false;
+            this->numberOfWeapons = 0;
+            this->resetDeathFlag();
+        }
         float random;
         float maxrand = 100.0f / ACTION_INTERVAL;
Index: /code/branches/ai2/src/orxonox/controllers/ArtificialController.cc
===================================================================
--- /code/branches/ai2/src/orxonox/controllers/ArtificialController.cc	(revision 8734)
+++ /code/branches/ai2/src/orxonox/controllers/ArtificialController.cc	(revision 8735)
@@ -90,5 +90,5 @@
         this->bSetupWorked = false;
         this->numberOfWeapons = 0;
-        this->botlevel_ = 1.0f;
+        this->botlevel_ = 0.5f;
         this->mode_ = DEFAULT;////Vector-implementation: mode_.push_back(DEFAULT);
         this->timeout_=0;
@@ -1043,13 +1043,13 @@
         else if(this->getControllableEntity()&&(numberOfWeapons>0)&&this->bShooting_ && this->isCloseAtTarget((1 + 2*botlevel_)*1000) && this->isLookingAtTarget(math::pi / 20.0f))
         {
-            if (this->isCloseAtTarget(130) &&(weapons[1]==1) )
+            if (this->isCloseAtTarget(130) &&weapons[1] )
             {//LENSFLARE: short range weapon     
                 this->getControllableEntity()->fire(1); //ai uses lens flare if they're close enough to the target
             }
-            else if((weapons[3]==3)&& this->isCloseAtTarget(400) /*&&projectiles[3]*/ )
+            else if(weapons[3]&& this->isCloseAtTarget(400) /*&&projectiles[3]*/ )
             {//ROCKET: mid range weapon
                 //TODO: How many rockets are available?
                 this->mode_ = ROCKET;//Vector-implementation: mode_.push_back(ROCKET);
-                this->getControllableEntity()->fire(3);//launch rocket BUG IS TRIGGERED HERE.
+                this->getControllableEntity()->fire(3);//launch rocket
                 if(this->getControllableEntity()&&this->target_)//after fire(3) getControllableEntity() refers to the rocket!
                 {
@@ -1064,5 +1064,5 @@
                 this->projectiles[3]-=1;//decrease ammo !!
             }
-            else if ((weapons[0]==0))//LASER: default weapon
+            else if (weapons[0])//LASER: default weapon
                 this->getControllableEntity()->fire(0);
         }
@@ -1083,22 +1083,24 @@
                     //const std::string wpn = getWeaponname(i, pawn); COUT(0)<<wpn<< std::endl;//Temporary debug info.
                     /*if(wpn=="")
-                        weapons[i]=-1;
+                        weapons[i]=false;
                     else if(wpn=="LaserMunition")//other munitiontypes are not defined yet :-(
-                        weapons[0]=0;
+                        weapons[0]=true;
                     else if(wpn=="FusionMunition")
-                        weapons[1]=1;
+                        weapons[1]=true;
                     else if(wpn=="TargetSeeking Rockets")
-                        weapons[2]=2;
-                    else if(wpn=="ROCKET")//TODO: insert right munition name
-                        weapons[3]=3;
+                        weapons[2]=true;
+                    else if(wpn=="RocketMunition")
+                        weapons[3]=true;
+                    else
+                        COUT(1)<< wpn << + << " has to be added in ArtificialController.cc as new weapon." << std::endl;
                     */
                     if(pawn->getWeaponSet(i)) //main part: find which weapons a pawn can use; hard coded at the moment!
                     {
-                        weapons[i]=i;
+                        weapons[i]=true;
                         projectiles[i]=1;//TODO: how to express infinite ammo? how to get data?? getWeaponmode(i)->getMunition()->getNumMunition(WeaponMode* user)
                           numberOfWeapons++;
                     }
                     else
-                        weapons[i]=-1;
+                        weapons[i]=-false;
                 }
                  //pawn->weaponSystem_->getMunition(SubclassIdentifier< Munition > *identifier)->getNumMunition (WeaponMode *user);
Index: /code/branches/ai2/src/orxonox/controllers/ArtificialController.h
===================================================================
--- /code/branches/ai2/src/orxonox/controllers/ArtificialController.h	(revision 8734)
+++ /code/branches/ai2/src/orxonox/controllers/ArtificialController.h	(revision 8735)
@@ -149,6 +149,6 @@
 
             int numberOfWeapons; //< Used for weapon init function. Displayes number of weapons available for a bot.
-            int weapons[WeaponSystem::MAX_WEAPON_MODES];
-            int projectiles[WeaponSystem::MAX_WEAPON_MODES];
+            bool weapons[WeaponSystem::MAX_WEAPON_MODES]; //<! Displays if a weapon is available - managed by setupWeapons()
+            int projectiles[WeaponSystem::MAX_WEAPON_MODES]; //<! Displays amount of projectiles. - managed by setupWeapons()
             float botlevel_; //< Makes the level of a bot configurable.
             float timeout_; //< Timeout for rocket usage. (If a rocket misses, a bot should stop using it.)
@@ -156,10 +156,8 @@
             enum Mode {DEFAULT, ROCKET, DEFENCE, MOVING};//TODO; implement DEFENCE, MOVING modes
             Mode mode_; //TODO: replace single value with stack-like implementation: std::vector<Mode> mode_;
-            void setPreviousMode();
-
-        private:
-            void setupWeapons();
-            const std::string& getWeaponname(int i, Pawn* pawn);
-            bool bSetupWorked;
+            void setPreviousMode(); 
+            void setupWeapons(); //<! Defines which weapons are available for a bot. Is recalled whenever a bot was killed.
+            const std::string& getWeaponname(int i, Pawn* pawn); //<! Function that links a weapon's firemode to its name.
+            bool bSetupWorked; //<! If false, setupWeapons() is called.
     };
 }
Index: /code/branches/ai2/src/orxonox/controllers/Controller.cc
===================================================================
--- /code/branches/ai2/src/orxonox/controllers/Controller.cc	(revision 8734)
+++ /code/branches/ai2/src/orxonox/controllers/Controller.cc	(revision 8735)
@@ -42,4 +42,5 @@
         this->controllableEntity_ = 0;
         this->bGodMode_ = false;
+        this->bDeathFlag_ = false;
     }
 
Index: /code/branches/ai2/src/orxonox/controllers/Controller.h
===================================================================
--- /code/branches/ai2/src/orxonox/controllers/Controller.h	(revision 8734)
+++ /code/branches/ai2/src/orxonox/controllers/Controller.h	(revision 8735)
@@ -63,4 +63,8 @@
             inline ControllableEntity* getControllableEntity() const
                 { return this->controllableEntity_; }
+            inline void setDeathFlag()
+                { this->bDeathFlag_ = true; }
+            inline void resetDeathFlag()
+                { this->bDeathFlag_ = false; }
             virtual void changedControllableEntity() {}
 
@@ -79,4 +83,5 @@
             PlayerInfo* player_;
             ControllableEntity* controllableEntity_;
+            bool bDeathFlag_; //<! Signal, when a controlled entity died. Flag is set in Pawn.cc and used in AIController.
         private:
             bool bGodMode_;
Index: /code/branches/ai2/src/orxonox/worldentities/pawns/Pawn.cc
===================================================================
--- /code/branches/ai2/src/orxonox/worldentities/pawns/Pawn.cc	(revision 8734)
+++ /code/branches/ai2/src/orxonox/worldentities/pawns/Pawn.cc	(revision 8735)
@@ -304,4 +304,8 @@
         if (this->getGametype() && this->getGametype()->allowPawnDeath(this, this->lastHitOriginator_))
         {
+            if ( this->getController()&& (!this->isHumanShip_) ) //announce death to the ai
+            {
+                 this->getController()->setDeathFlag();
+            }
             // Set bAlive_ to false and wait for PawnManager to do the destruction
             this->bAlive_ = false;
