Index: code/branches/campaignHS15/data/levels/AITest.oxw
===================================================================
--- code/branches/campaignHS15/data/levels/AITest.oxw	(revision 10851)
+++ code/branches/campaignHS15/data/levels/AITest.oxw	(revision 10854)
@@ -67,7 +67,7 @@
       </templates>
       <controller>
-        <DivisionController team=0>
+        <DivisionController team=0 formationMode="finger4">
           <actionpoints>
-            <Actionpoint position="-1000,750,-500" action="FLY" />
+            <Actionpoint position="0,0,0" action="FLY" />
             <Actionpoint position="-1000,750,-500" action="ATTACK" enemy="ss3" />
             <Actionpoint position="-1000,750,-500" action="PROTECt" protect="fuck" />
@@ -76,23 +76,5 @@
       </controller>
     </SpaceShip>
-    <SpaceShip position="-2000, 1800, -1000" lookat="0,0,0" team=0>
-      <templates>
-        <Template link=spaceshipassff />
-      </templates>
-      <controller>
-        <WingmanController team=0>
-        </WingmanController>
-      </controller>
-    </SpaceShip>
-    <SpaceShip position="-2000, 2100, -1000" lookat="0,0,0" team=0>
-      <templates>
-        <Template link=spaceshipassff />
-      </templates>
-      <controller>
-        <WingmanController team=0>
-        </WingmanController>
-      </controller>
-    </SpaceShip>
-    <SpaceShip position="-2000, 2400, -1000" lookat="0,0,0" team=0>
+    <SpaceShip position="-2000, 1900, -1000" lookat="0,0,0" team=0>
       <templates>
         <Template link=spaceshipassff />
Index: code/branches/campaignHS15/src/orxonox/controllers/CommonController.cc
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/CommonController.cc	(revision 10851)
+++ code/branches/campaignHS15/src/orxonox/controllers/CommonController.cc	(revision 10854)
@@ -65,5 +65,5 @@
         this->squaredaccuracy_ = 10000;
         this->bFirstTick_ = true;
-        this->tolerance_ = 65;
+        this->tolerance_ = 50;
         this->action_ = Action::NONE;
         this->stopLookingAtTarget();
@@ -73,11 +73,5 @@
     CommonController::~CommonController() 
     {
-        for (size_t i = 0; i < this->actionpoints_.size(); ++i)
-        {
-            if(this->actionpoints_[i])
-                this->actionpoints_[i]->destroy();
-        }
-        this->parsedActionpoints_.clear();
-        this->actionpoints_.clear();
+       
     }
     void CommonController::tick(float dt)
@@ -492,5 +486,5 @@
                 }
             }
-            if (distance > 200 || (rotateX > -0.1 && rotateX < 0.1 && rotateY > -0.1 && rotateY < 0.1))
+            if (distance > this->tolerance_*1.5f || (rotateX > -0.01 && rotateX < 0.01 && rotateY > -0.01 && rotateY < 0.01))
                 this->getControllableEntity() ->moveFrontBack( SPEED * dt );
         }
@@ -746,5 +740,5 @@
         return 0;  
     }
-    bool CommonController::startAttackingEnemiesThatAreClose()
+    void CommonController::startAttackingEnemiesThatAreClose()
     {
         if (this->action_ != Action::FIGHT && this->action_ != Action::FIGHTALL)
@@ -761,9 +755,7 @@
                     this->parsedActionpoints_.push_back(p);
                     this->executeActionpoint();
-                    return true;
-                }
-            }
-        }
-        return false;
+                }
+            }
+        }
     }
 
@@ -783,5 +775,17 @@
             {
                 case Action::FIGHT:
-                {                
+                {
+                    std::string targetName = this->parsedActionpoints_.back().name;
+                    if (targetName == "")
+                    {
+                        break;
+                    }
+                    for (ObjectList<Pawn>::iterator itP = ObjectList<Pawn>::begin(); itP; ++itP)
+                    {
+                        if (CommonController::getName(*itP) == targetName)
+                        {
+                            this->setTarget (static_cast<ControllableEntity*>(*itP));
+                        }
+                    }          
                     break;
                 }
@@ -851,4 +855,12 @@
         }
     }
+    void CommonController::stayNearProtect()
+    {
+        Vector3* targetRelativePosition;
+        targetRelativePosition = new Vector3 (0, 300, 300);  
+        Vector3 targetAbsolutePosition = ((this->getProtect()->getWorldPosition()) + 
+            (this->getProtect()->getWorldOrientation()* (*targetRelativePosition)));
+        this->setTargetPosition(targetAbsolutePosition);
+    }
     void CommonController::nextActionpoint()
     {
@@ -859,3 +871,106 @@
         this->setAction(Action::NONE);
     }
+    void CommonController::action()
+    {
+        this->startAttackingEnemiesThatAreClose();
+        //No action -> pop one from stack
+        if (this->action_ == Action::NONE)
+        {
+            this->executeActionpoint();
+        }
+        //Action fightall -> fight till nobody alive
+        if (this->action_ == Action::FIGHTALL)
+        {
+            if (!this->hasTarget())
+            {
+                //----find a target----
+                ControllableEntity* newTarget = this->closestTarget();    
+                if (newTarget)
+                {
+                    this->setAction (Action::FIGHTALL, newTarget);
+                }
+                else
+                {
+                    this->nextActionpoint();
+                    return;
+                }
+            }
+            else if (this->hasTarget())
+            {
+
+            }
+        }
+        //Action fight -> fight as long as enemies in range
+        else if (this->action_ == Action::FIGHT)
+        {
+            if (!this->hasTarget())
+            {
+                //----find a target----
+                ControllableEntity* newTarget = this->closestTarget();    
+                if (newTarget && 
+                        CommonController::distance (this->getControllableEntity(), newTarget) < this->attackRange_)
+                {
+                    this->setAction (Action::FIGHT, newTarget);
+                }
+                else
+                {
+                    this->nextActionpoint();
+                    return;
+                }
+            }
+            else if (this->hasTarget())
+            {
+                //----fly in formation if far enough----
+                Vector3 diffVector = this->positionOfTarget_ - this->getControllableEntity()->getWorldPosition();         
+                    
+                if (diffVector.length() > this->attackRange_)
+                {
+                    ControllableEntity* newTarget = this->closestTarget();
+                    
+                    if (newTarget && 
+                        CommonController::distance (this->getControllableEntity(), newTarget) < this->attackRange_)
+                    {
+                        this->setAction (Action::FIGHT, newTarget);
+                    }
+                    else
+                    {
+                        this->nextActionpoint();
+                        return;
+                    }
+                }
+            }
+        }
+        else if (this->action_ == Action::FLY)
+        {
+            if (this->squaredDistanceToTarget() <= this->squaredaccuracy_)
+            {
+                this->nextActionpoint();   
+                return;
+            }
+        }
+        else if (this->action_ == Action::PROTECT)
+        {
+            if (!this->getProtect())
+            {
+                this->nextActionpoint(); 
+                return;
+            }
+            this->stayNearProtect();
+        }
+        else if (this->action_ == Action::ATTACK)
+        {   
+            if (!this->hasTarget())
+            {
+                this->nextActionpoint();
+                return;
+            }
+        }
+        if (this->hasTarget())
+        {
+            //----choose where to go----
+            this->maneuver();
+            //----fire if you can----
+            this->bShooting_ = this->canFire();                
+        }
+    }
 }
Index: code/branches/campaignHS15/src/orxonox/controllers/CommonController.h
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/CommonController.h	(revision 10851)
+++ code/branches/campaignHS15/src/orxonox/controllers/CommonController.h	(revision 10854)
@@ -41,4 +41,5 @@
 #include <algorithm>
 #include "worldentities/Actionpoint.h"
+#include "worldentities/pawns/SpaceShip.h"
 
 namespace orxonox
@@ -133,15 +134,8 @@
             //----[/Helper methods]----
 
-             //----[Actionpoint information]----
-
-                std::vector<WeakPtr<WorldEntity> > actionpoints_;
-                float squaredaccuracy_;
-                std::vector<Point > parsedActionpoints_;
-
-            //----[/Actionpoint information]----
-                //----[Actionpoint methods]----
-                void executeActionpoint();
-                void nextActionpoint();
-            //----[Actionpoint methods]----
+             
+                virtual void stayNearProtect();
+                virtual void action(); //<! action() is called in regular intervals managing the bot's behaviour.
+            
         protected:
             //----[Flying methods]----
@@ -180,5 +174,5 @@
                 void setClosestTarget();
                 Pawn* closestTarget();
-                bool startAttackingEnemiesThatAreClose();
+                void startAttackingEnemiesThatAreClose();
             //----[/Fighting methods]----            
             
@@ -203,5 +197,15 @@
             //----[/who-to-kill information]----
 
-           
+            //----[Actionpoint information]----
+
+                std::vector<WeakPtr<WorldEntity> > actionpoints_;
+                float squaredaccuracy_;
+                std::vector<Point > parsedActionpoints_;
+
+            //----[/Actionpoint information]----
+            //----[Actionpoint methods]----
+                void executeActionpoint();
+                void nextActionpoint();
+            //----[Actionpoint methods]----
             //----["Private" variables]----
                 FormationMode::Value formationMode_;
Index: code/branches/campaignHS15/src/orxonox/controllers/DivisionController.cc
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/DivisionController.cc	(revision 10851)
+++ code/branches/campaignHS15/src/orxonox/controllers/DivisionController.cc	(revision 10854)
@@ -50,4 +50,15 @@
     DivisionController::~DivisionController()
     {
+        if (this->myFollower_)
+        {
+            this->myFollower_->takeActionpoints(this->parsedActionpoints_);
+        }
+        for (size_t i = 0; i < this->actionpoints_.size(); ++i)
+        {
+            if(this->actionpoints_[i])
+                this->actionpoints_[i]->destroy();
+        }
+        this->parsedActionpoints_.clear();
+        this->actionpoints_.clear();
     } 
 
@@ -65,202 +76,12 @@
     }
     void DivisionController::action()
-    {        
-        if (this->startAttackingEnemiesThatAreClose())
-        {
-            Point p = { Action::FIGHT, "", Vector3::ZERO };
-            
-            if (this->myWingman_)
-            {
-                this->myWingman_->parsedActionpoints_.push_back(p);
-            }
-            if (this->myFollower_)
-            {
-                this->myFollower_->parsedActionpoints_.push_back(p);
-            }
-        }
-
-        if (this->action_ == Action::NONE)
-        {
-            this->executeActionpoint();
-        }
-        if (this->action_ == Action::FIGHT || this->action_ == Action::FIGHTALL)
-        {
-            if (!this->hasTarget())
-            {
-                //----find a target----
-                ControllableEntity* newTarget = this->closestTarget();
-                if (this->action_ == Action::FIGHT)
-                {
-                    if (newTarget && 
-                            CommonController::distance (this->getControllableEntity(), newTarget) < this->attackRange_)
-                    {
-                        this->setAction (Action::FIGHT, newTarget);
-                    }
-                    else
-                    {
-                        this->nextActionpoint();
-                        if (this->myWingman_)
-                        {
-                            this->myWingman_->nextActionpoint();
-                        }
-                        if (this->myFollower_)
-                        {
-                            this->myFollower_->nextActionpoint();
-                        }
-                        return;
-                    }
-                }
-                else if (this->action_ == Action::FIGHTALL)
-                {
-                    if (newTarget && newTarget->getController())
-                    {
-                        this->setAction (Action::FIGHTALL, newTarget);
-                    }
-                    else
-                    {
-                        this->nextActionpoint();
-                        if (this->myWingman_)
-                        {
-                            this->myWingman_->nextActionpoint();
-                        }
-                        if (this->myFollower_)
-                        {
-                            this->myFollower_->nextActionpoint();
-                        }
-                        return;
-                    }
-                }
-
-            }
-            else if (this->hasTarget())
-            {
-                //----fly in formation if far enough----
-                Vector3 diffVector = this->positionOfTarget_ - this->getControllableEntity()->getWorldPosition();         
-                    
-                if (diffVector.length() > this->attackRange_)
-                {
-                    if (this->action_ == Action::FIGHT)
-                    {
-                        this->nextActionpoint();
-                        if (this->myWingman_)
-                        {
-                            this->myWingman_->nextActionpoint();
-                        }
-                        if (this->myFollower_)
-                        {
-                            this->myFollower_->nextActionpoint();
-                        }
-                        return;
-                    }
-                    else
-                    {
-                        this->setTargetPositionOfWingman();
-                        this->setTargetPositionOfFollower();                    
-                    }
-                }
-                else
-                {
-                    //----wingmans shall support the fire of their leaders----
-                    if (this->myWingman_)
-                    {
-                        this->myWingman_->setAction (Action::FIGHT, this->target_);     
-                    }
-                    if (this->myFollower_)
-                    {
-                        this->myFollower_->setAction (Action::FIGHT);                                    
-                    }
-                }
-            }
-        }
-        else if (this->action_ == Action::FLY)
-        {
-            if (this->squaredDistanceToTarget() <= this->squaredaccuracy_)
-            {
-                this->nextActionpoint();
-                if (this->myWingman_)
-                {
-                    this->myWingman_->nextActionpoint();
-                }
-                if (this->myFollower_)
-                {
-                    this->myFollower_->nextActionpoint();
-                }
-                return;
-            }
-            this->setTargetPositionOfWingman();
-            this->setTargetPositionOfFollower();
-        }
-        else if (this->action_ == Action::PROTECT)
-        {
-            if (!this->getProtect())
-            {
-                this->nextActionpoint();
-                if (this->myWingman_)
-                {
-                    this->myWingman_->nextActionpoint();
-                }
-                if (this->myFollower_)
-                {
-                    this->myFollower_->nextActionpoint();
-                }
-                return;
-            }
-
-            Vector3* targetRelativePosition;
-                
-            targetRelativePosition = new Vector3 (0, 300, 300);  
- 
-            Vector3 targetAbsolutePosition = ((this->getProtect()->getWorldPosition()) + 
-                (this->getProtect()->getWorldOrientation()* (*targetRelativePosition)));
-            this->setTargetPosition(targetAbsolutePosition);
-            
-            this->setTargetPositionOfWingman();
-            this->setTargetPositionOfFollower();
-
-        }
-        else if (this->action_ == Action::ATTACK)
-        {   
-            if (!this->hasTarget())
-            {
-                this->nextActionpoint();
-                if (this->myWingman_)
-                {
-                    this->myWingman_->nextActionpoint();
-                }
-                if (this->myFollower_)
-                {
-                    this->myFollower_->nextActionpoint();
-                }
-                return;
-            }
-            //----fly in formation if far enough----
-            Vector3 diffVector = this->positionOfTarget_ - this->getControllableEntity()->getWorldPosition();         
-            if (diffVector.length() > this->attackRange_)
-            {
-                this->setTargetPositionOfWingman();
-                this->setTargetPositionOfFollower();                    
-            }
-            else
-            {
-                //----wingmans shall support the fire of their leaders----
-                if (this->myWingman_)
-                {
-                    this->myWingman_->setAction (Action::FIGHT, this->target_);     
-                }
-                if (this->myFollower_)
-                {
-                    this->myFollower_->setAction (Action::FIGHT);                                    
-                }
-            }          
-        }
-        if (this->hasTarget())
-        {
-            //----choose where to go----
-            this->maneuver();
-            //----fire if you can----
-            this->bShooting_ = this->canFire();                
-        }
+    {   
+        CommonController::action();
+        
     }
-    
+    void DivisionController::stayNearProtect()
+    {
+        CommonController::stayNearProtect();
+    }
     void DivisionController::setTargetPositionOfWingman()
     {
@@ -294,36 +115,5 @@
        
     }
-    void DivisionController::setTargetPositionOfFollower()
-    {
-        if (!this->myFollower_)
-            return;
-        this->myFollower_->setFormationMode(this->formationMode_);
-
-        Vector3* targetRelativePositionOfFollower;
-        switch (this->formationMode_){
-            case FormationMode::WALL:
-            {
-                targetRelativePositionOfFollower = new Vector3 (-400, 0, 0);   
-                break;
-            }
-            case FormationMode::FINGER4: 
-            {
-                targetRelativePositionOfFollower = new Vector3 (-400, 0, 200);   
-                break;
-            }
-            
-            case FormationMode::DIAMOND: 
-            {
-                targetRelativePositionOfFollower = new Vector3 (-400, 0, 200);                   
-                break;
-            }
-        }
-        Quaternion orient = this->getControllableEntity()->getWorldOrientation();
-        
-        Vector3 targetAbsolutePositionOfFollower = ((this->getControllableEntity()->getWorldPosition()) + 
-        (this->getControllableEntity()->getWorldOrientation()* (*targetRelativePositionOfFollower)));
-        
-        myFollower_->setAction ( Action::FLY, targetAbsolutePositionOfFollower, orient );       
-    }
+    
     bool DivisionController::setWingman(CommonController* cwingman)
     {
Index: code/branches/campaignHS15/src/orxonox/controllers/DivisionController.h
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/DivisionController.h	(revision 10851)
+++ code/branches/campaignHS15/src/orxonox/controllers/DivisionController.h	(revision 10854)
@@ -58,11 +58,12 @@
 
                 void setTargetPositionOfWingman();
-                void setTargetPositionOfFollower();
+                
             //----[/own functions]----
+            virtual void stayNearProtect();
 
         protected:
             //----action must only be managed by this----
             virtual void action(); //<! action() is called in regular intervals managing the bot's behaviour.
-	    
+
         private:
             //----private variables-----
Index: code/branches/campaignHS15/src/orxonox/controllers/LeaderController.cc
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/LeaderController.cc	(revision 10851)
+++ code/branches/campaignHS15/src/orxonox/controllers/LeaderController.cc	(revision 10854)
@@ -51,4 +51,12 @@
     {
     }
+    void LeaderController::takeActionpoints (std::vector<Point > vector)
+    {
+      this->parsedActionpoints_ = vector;
+      this->setAction (Action::NONE);
+      this->setTarget(0);
+      this->setTargetPosition (this->getControllableEntity()->getWorldPosition());
+      orxout(internal_error) << "Top action is " << this->parsedActionpoints_.back().action << endl;
+    }
 
 
Index: code/branches/campaignHS15/src/orxonox/controllers/LeaderController.h
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/LeaderController.h	(revision 10851)
+++ code/branches/campaignHS15/src/orxonox/controllers/LeaderController.h	(revision 10854)
@@ -53,5 +53,5 @@
                     { return true; }
             //----[/pseudo virtual methods]----
-
+                virtual void takeActionpoints (std::vector<Point > vector);
 
 
Index: code/branches/campaignHS15/src/orxonox/controllers/SectionController.cc
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/SectionController.cc	(revision 10851)
+++ code/branches/campaignHS15/src/orxonox/controllers/SectionController.cc	(revision 10854)
@@ -51,5 +51,11 @@
     SectionController::~SectionController()
     {
-       
+       for (size_t i = 0; i < this->actionpoints_.size(); ++i)
+        {
+            if(this->actionpoints_[i])
+                this->actionpoints_[i]->destroy();
+        }
+        this->parsedActionpoints_.clear();
+        this->actionpoints_.clear();
     }
     void SectionController::XMLPort(Element& xmlelement, XMLPort::Mode mode)
@@ -86,214 +92,75 @@
         if (!myDivisionLeader_)
         {
-            if (this->startAttackingEnemiesThatAreClose())
-            {
-                Point p = { Action::FIGHT, "", Vector3::ZERO };
-                
-                if (this->myWingman_)
+            CommonController::action();
+        }
+        else if (myDivisionLeader_)
+        {
+            switch (myDivisionLeader_->getAction())
+            {
+                // case Action::FLY:
+                // {
+                //     // Vector3 targetRelativePosition = getFormationPosition();
+                //     // Quaternion orient = 
+                //     //     this->myDivisionLeader_->getControllableEntity()->getWorldOrientation();
+                //     // Vector3 targetAbsolutePosition = 
+                //     //     ((this->myDivisionLeader_->getControllableEntity()->getWorldPosition()) + 
+                //     //         (orient* (targetRelativePosition)));
+                //     // this->setAction (Action::FLY, targetAbsolutePosition, orient);
+                //     break;
+                // }
+                // case Action::FIGHT:
+                // {
+
+                //     // this->setAction (Action::FLY, targetAbsolutePosition, orient);
+                //     break;
+                // }
+                default:
                 {
-                    this->myWingman_->parsedActionpoints_.push_back(p);
+                    ControllableEntity* myEntity = this->getControllableEntity();
+                    Vector3 myPosition = myEntity->getWorldPosition();
+                    if (!this->myDivisionLeader_)
+                    {
+                        return;
+                    }
+                    ControllableEntity* leaderEntity = this->myDivisionLeader_->getControllableEntity();
+                    Quaternion orient = leaderEntity->getWorldOrientation();
+                    Vector3 leaderPosition = leaderEntity->getWorldPosition();
+
+                    Vector3 targetRelativePosition = getFormationPosition();
+                    if (!this->myDivisionLeader_)
+                    {
+                        return;
+                    }
+                    Vector3 targetAbsolutePosition = 
+                        (leaderPosition + (orient*WorldEntity::FRONT) * (leaderEntity->getVelocity().length()/5)
+                         + (orient* (targetRelativePosition)));
+               
+                    this->setAction (Action::FLY, targetAbsolutePosition, orient);
+                    if ((targetAbsolutePosition - myPosition).length() > this->tolerance_ * 1.5f)
+                    {
+                        this->boostControl();
+                    }
+                    else
+                    {
+                       this->getControllableEntity()->boost(false);
+                    }
                 }
             }
-            if (this->action_ == Action::NONE)
-            {
-                this->executeActionpoint();
-            }
-            if (this->action_ == Action::FIGHT || this->action_ == Action::FIGHTALL)
-            {
-                if (!this->hasTarget())
-                {
-                    //----find a target----
-                    ControllableEntity* newTarget = this->closestTarget();
-                    if (this->action_ == Action::FIGHT)
-                    {
-                        if (newTarget && 
-                                CommonController::distance (this->getControllableEntity(), newTarget) < this->attackRange_)
-                        {
-                            this->setAction (Action::FIGHT, newTarget);
-                        }
-                        else
-                        {
-                            this->nextActionpoint();
-                            if (this->myWingman_)
-                            {
-                                this->myWingman_->nextActionpoint();
-                            }
-                
-                            return;
-                        }
-                    }
-                    else if (this->action_ == Action::FIGHTALL)
-                    {
-                        if (newTarget && newTarget->getController())
-                        {
-                            this->setAction (Action::FIGHTALL, newTarget);
-                        }
-                        else
-                        {
-                            this->nextActionpoint();
-                            if (this->myWingman_)
-                            {
-                                this->myWingman_->nextActionpoint();
-                            }
-                            return;
-                        }
-                    }
-
-                }
-                else if (this->hasTarget())
-                {
-                    //----fly in formation if far enough----
-                    Vector3 diffVector = this->positionOfTarget_ - this->getControllableEntity()->getWorldPosition();         
-                        
-                    if (diffVector.length() > this->attackRange_)
-                    {
-                        if (this->action_ == Action::FIGHT)
-                        {
-                            this->nextActionpoint();
-                            if (this->myWingman_)
-                            {
-                                this->myWingman_->nextActionpoint();
-                            }
-                            return;
-                        }
-                        else
-                        {
-                            this->setTargetPositionOfWingman();
-                        }
-                    }
-                    else
-                    {
-                        //----wingmans shall support the fire of their leaders----
-                        if (this->myWingman_)
-                        {
-                            this->myWingman_->setAction (Action::FIGHT, this->target_);     
-                        }
-                        
-                    }
-                }
-            }
-            else if (this->action_ == Action::FLY)
-            {
-                if (this->squaredDistanceToTarget() <= this->squaredaccuracy_)
-                {
-                    this->nextActionpoint();
-                    if (this->myWingman_)
-                    {
-                        this->myWingman_->nextActionpoint();
-                    }
-                    return;
-                }
-                this->setTargetPositionOfWingman();
-            }
-            else if (this->action_ == Action::PROTECT)
-            {
-                if (!this->getProtect())
-                {
-                    this->nextActionpoint();
-                    if (this->myWingman_)
-                    {
-                        this->myWingman_->nextActionpoint();
-                    }
-                    return;
-                }
-
-                Vector3* targetRelativePosition;
-                    
-                targetRelativePosition = new Vector3 (0, 300, 300);  
+        }
      
-                Vector3 targetAbsolutePosition = ((this->getProtect()->getWorldPosition()) + 
-                    (this->getProtect()->getWorldOrientation()* (*targetRelativePosition)));
-                this->setTargetPosition(targetAbsolutePosition);
-                
-                this->setTargetPositionOfWingman();
-
-            }
-            else if (this->action_ == Action::ATTACK)
-            {   
-                if (!this->hasTarget())
-                {
-                    this->nextActionpoint();
-                    if (this->myWingman_)
-                    {
-                        this->myWingman_->nextActionpoint();
-                    }
-                    return;
-                }
-                //----fly in formation if far enough----
-                Vector3 diffVector = this->positionOfTarget_ - this->getControllableEntity()->getWorldPosition();         
-                if (diffVector.length() > this->attackRange_)
-                {
-                    this->setTargetPositionOfWingman();
-                }
-                else
-                {
-                    //----wingmans shall support the fire of their leaders----
-                    if (this->myWingman_)
-                    {
-                        this->myWingman_->setAction (Action::FIGHT, this->target_);     
-                    }
-      
-                }          
-            }
-            if (this->hasTarget())
-            {
-                //----choose where to go----
-                this->maneuver();
-                //----fire if you can----
-                this->bShooting_ = this->canFire();                
-            }
-        }
-        //----If have leader----
-        else
-        {
-            //----action was set to fight----
-            if (this->action_ == Action::FIGHT)
-            {
-                if (!this->hasTarget())
-                {
-                    this->chooseTarget();
-                }
-                else
-                {
-                    //----fly in formation if far enough----
-                    Vector3 diffVector = this->positionOfTarget_ - this->getControllableEntity()->getWorldPosition();         
-                    if (diffVector.length() > this->attackRange_)
-                    {
-                        this->setTargetPositionOfWingman();
-                    }   
-                    else
-                    {
-                        //----wingmans shall support the fire of their leaders----
-                        if (this->myWingman_)
-                        {
-                            this->myWingman_->setAction (Action::FIGHT, this->target_);                    
-                        }
-                    }
-                }
-                if (this->hasTarget())
-                {
-                    //----choose where to go----
-                    this->maneuver();
-                    //----fire if you can----
-                    this->bShooting_ = this->canFire();                
-                }
-            }
-
-            //----action was set to fly----
-            else if (this->action_ == Action::FLY)
-            {
-                this->setTargetPositionOfWingman();
-                Pawn* newTarget = this->closestTarget();
-                if ( newTarget &&  this->distance (this->getControllableEntity(), 
-                                                    static_cast<ControllableEntity*>(newTarget)) <= this->attackRange_ )
-                {
-                    this->setAction (Action::FIGHT, static_cast<ControllableEntity*>(newTarget));
-                }
-            }       
-        }
-        if (this->bFirstAction_ && this->myDivisionLeader_)
-        {
-            this->parsedActionpoints_ = this->myDivisionLeader_->parsedActionpoints_;
-            this->bFirstAction_ = false;
+    }
+
+    void SectionController::boostControl()
+    {
+        SpaceShip* ship = orxonox_cast<SpaceShip*>(this->getControllableEntity());
+        if(ship == NULL) return;
+        if(ship->getBoostPower()*1.5f > ship->getInitialBoostPower() ) //upper limit ->boost
+        {
+
+            this->getControllableEntity()->boost(true);
+        }
+        else if(ship->getBoostPower()*4.0f < ship->getInitialBoostPower()) //lower limit ->do not boost
+        {
+           this->getControllableEntity()->boost(false);
         }
     }
@@ -303,5 +170,8 @@
     {
         //----If division leader fights, cover him by fighting emenies close to his target----
-        if (this->myDivisionLeader_->getAction() == Action::FIGHT)
+        Action::Value action = this->myDivisionLeader_->getAction();
+        
+        Pawn* target;
+        if (action == Action::FIGHT || action == Action::FIGHTALL || action == Action::ATTACK)
         {
             //----if he has a target----
@@ -327,5 +197,5 @@
                         {
                             foundTarget = true;
-                            this->setAction(Action::FIGHT, (*itP));
+                            target =  (*itP);
                             //orxout(internal_error) << "Found target" << endl;
                             break; 
@@ -335,5 +205,5 @@
                     if (!foundTarget)
                     {
-                        this->setAction(Action::FIGHT, this->myDivisionLeader_->getTarget());
+                        target = orxonox_cast<Pawn*>(this->myDivisionLeader_->getTarget());
                     }
                 }
@@ -341,5 +211,5 @@
                 else
                 {
-                    this->setAction(Action::FIGHT, this->myDivisionLeader_->getTarget());
+                    target = orxonox_cast<Pawn*>(this->myDivisionLeader_->getTarget());
                 }
             }
@@ -349,5 +219,33 @@
 
             }
+            this->setAction (Action::FIGHT, orxonox_cast<ControllableEntity*>(target));
+        }
+        else
+        {
         } 
+    }
+    Vector3 SectionController::getFormationPosition ()
+    {
+        this->setFormationMode( this->myDivisionLeader_->getFormationMode() );
+        Vector3* targetRelativePosition;
+        switch (this->formationMode_){
+            case FormationMode::WALL:
+            {
+                targetRelativePosition = new Vector3 (-400, 0, 0);   
+                break;
+            }
+            case FormationMode::FINGER4: 
+            {
+                targetRelativePosition = new Vector3 (-400, 0, 200);   
+                break;
+            }
+            
+            case FormationMode::DIAMOND: 
+            {
+                targetRelativePosition = new Vector3 (-400, 0, 200);                   
+                break;
+            }
+        }
+        return *targetRelativePosition;
     }
 
Index: code/branches/campaignHS15/src/orxonox/controllers/SectionController.h
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/SectionController.h	(revision 10851)
+++ code/branches/campaignHS15/src/orxonox/controllers/SectionController.h	(revision 10854)
@@ -63,10 +63,11 @@
             //----action must only be managed by this----     
                 virtual void action(); //<! action() is called in regular intervals managing the bot's behaviour.
-
+                Vector3 getFormationPosition ();
+                void boostControl();
         private:
             //----private variables-----
                 Timer actionTimer_; //<! Regularly calls action().
                 bool bFirstAction_;
-            
+
 
     };
Index: code/branches/campaignHS15/src/orxonox/controllers/WingmanController.cc
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/WingmanController.cc	(revision 10851)
+++ code/branches/campaignHS15/src/orxonox/controllers/WingmanController.cc	(revision 10854)
@@ -48,5 +48,11 @@
     WingmanController::~WingmanController()
     {
-
+        for (size_t i = 0; i < this->actionpoints_.size(); ++i)
+        {
+            if(this->actionpoints_[i])
+                this->actionpoints_[i]->destroy();
+        }
+        this->parsedActionpoints_.clear();
+        this->actionpoints_.clear();
     }
   
@@ -86,130 +92,11 @@
         if (!this->myLeader_)
         {
-            bool b = this->startAttackingEnemiesThatAreClose();
+           CommonController::action();
+        }
+        else if (this->myLeader_)
+        {
 
-            if (this->action_ == Action::NONE)
-            {
-                this->executeActionpoint();
-            }
-            if (this->action_ == Action::FIGHT || this->action_ == Action::FIGHTALL)
-            {
-                if (!this->hasTarget())
-                {
-                    //----find a target----
-                    ControllableEntity* newTarget = this->closestTarget();
-                    if (this->action_ == Action::FIGHT)
-                    {
-                        if (newTarget && 
-                                CommonController::distance (this->getControllableEntity(), newTarget) < this->attackRange_)
-                        {
-                            this->setAction (Action::FIGHT, newTarget);
-                        }
-                        else
-                        {
-                            this->nextActionpoint();
-                            return;
-                        }
-                    }
-                    else if (this->action_ == Action::FIGHTALL)
-                    {
-                        if (newTarget && newTarget->getController())
-                        {
-                            this->setAction (Action::FIGHTALL, newTarget);
-                        }
-                        else
-                        {
-                            this->nextActionpoint();
-                            return;
-                        }
-                    }
-
-                }
-                else if (this->hasTarget())
-                {
-                    //----fly in formation if far enough----
-                    Vector3 diffVector = this->positionOfTarget_ - this->getControllableEntity()->getWorldPosition();         
-                        
-                    if (diffVector.length() > this->attackRange_)
-                    {
-                        if (this->action_ == Action::FIGHT)
-                        {
-                            this->nextActionpoint();
-                            return;
-                        }
-                    }
-                }
-            }
-            else if (this->action_ == Action::FLY)
-            {
-                if (this->squaredDistanceToTarget() <= this->squaredaccuracy_)
-                {
-                    this->nextActionpoint();
-                    return;
-                }
-            }
-            else if (this->action_ == Action::PROTECT)
-            {
-                if (!this->getProtect())
-                {
-                    this->nextActionpoint();
-                    return;
-                }
-
-                Vector3* targetRelativePosition;
-                    
-                targetRelativePosition = new Vector3 (0, 300, 300);  
-     
-                Vector3 targetAbsolutePosition = ((this->getProtect()->getWorldPosition()) + 
-                    (this->getProtect()->getWorldOrientation()* (*targetRelativePosition)));
-                this->setTargetPosition(targetAbsolutePosition);
-                
-
-            }
-            else if (this->action_ == Action::ATTACK)
-            {   
-                if (!this->hasTarget())
-                {
-                    this->nextActionpoint();
-                    return;
-                }
-                        
-            }
-            if (this->hasTarget())
-            {
-                //----choose where to go----
-                this->maneuver();
-                //----fire if you can----
-                this->bShooting_ = this->canFire();                
-            }
         }
-        else
-        {
-            //----action was set to fight----
-            if (this->action_ == Action::FIGHT)
-            {
-                //----If no leader found, attack someone----
-                if (!this->hasTarget())
-                {
-                    this->setClosestTarget(); 
-                }
-                if (this->hasTarget())
-                {
-                    //----choose where to go----
-                    this->maneuver();
-                    //----fire if you can----
-                    this->bShooting_ = this->canFire();                
-                }
-            }
-            //----action was set to fly, leader handles the logic----
-            else if (this->action_ == Action::FLY)
-            {
-
-            }
-        } 
-        if (this->bFirstAction_ && this->myLeader_)
-        {
-            this->parsedActionpoints_ = this->myLeader_->parsedActionpoints_;
-            this->bFirstAction_ = false;
-        }
+        
     }
      
