Index: code/branches/AI_HS15/src/orxonox/controllers/CommonController.cc
===================================================================
--- code/branches/AI_HS15/src/orxonox/controllers/CommonController.cc	(revision 10799)
+++ code/branches/AI_HS15/src/orxonox/controllers/CommonController.cc	(revision 10800)
@@ -26,4 +26,5 @@
  *
  */
+//bug or feature? Press 4 control keys from {Q,W,E,A,S,D,C} at the same time or 3 keys from {Q,E,A,D}, spaceship goes in free fly mode
 #include "controllers/CommonController.h"
 #include "core/XMLPort.h"
@@ -45,6 +46,6 @@
 
     RegisterClass( CommonController );
-    float SPEED = 0.7f/0.02f;
-    float ROTATEFACTOR = 0.3f/0.02f;
+    float SPEED = 0.9f/0.02f;
+    float ROTATEFACTOR = 0.5f/0.02f;
 
     CommonController::CommonController( Context* context ): Controller( context )
@@ -132,5 +133,5 @@
                 ) );*/
             this->setPositionOfTarget( this->target_->getWorldPosition()  );
-            this->setOrientationOfTarget( this->target_->getControllableEntity() ->getOrientation() );
+            this->setOrientationOfTarget( this->target_->getOrientation() );
 
 
@@ -160,17 +161,16 @@
                 if ( bThisIsLookingAtTarget && bTargetIsLookingAtThis )
                 {
-                    //if this can make target overshoot
-                    if ( diffLength < 200 )
+                    //no way to dodge
+                    if ( diffLength < 400 )
                     {
                         Vector3* target = new Vector3 ( 0, -200, -200 );
-                        moveToPoint( 
-                            *target, 
-                            randomInRange( 45, 180 )
-                            );
+                        this->setTargetPosition( this->positionOfTarget_ );
+
+
                     }
                     //do scissors
                     else
                     {
-                        Vector3 target = ( diffUnit )* 150.0f
+                        Vector3 target = ( diffUnit )* 150.0f;
                         Vector3* randVector = new Vector3( 
                             randomInRange( -300, 300 ), 
@@ -178,11 +178,9 @@
                             randomInRange( -300, 300 ) 
                         );
-                        Vector3 projection = randVector.dotProduct( diffUnit )* diffUnit;
+                        Vector3 projection = randVector->dotProduct( diffUnit )* diffUnit;
                         *randVector -= projection;
-                        target += randVector;
-                        moveToPoint( 
-                            *target, 
-                            randomInRange( 45, 180 )
-                            );
+                        target += *randVector;
+                        this->setTargetPosition( this->getControllableEntity() ->getWorldPosition() + target );
+
                     }
                 }
@@ -202,4 +200,48 @@
                 }
             }
+            else
+            {
+                //if diff is insignificant
+                if ( bThisIsLookingAtTarget && bTargetIsLookingAtThis )
+                {
+                    //no way to dodge
+                    if ( diffLength < 400 )
+                    {
+                        Vector3* target = new Vector3 ( 0, -200, -200 );
+                        this->setTargetPosition( this->positionOfTarget_ );
+
+                    }
+                    //do scissors
+                    else
+                    {
+                        Vector3 target = ( diffUnit )* 150.0f;
+                        Vector3* randVector = new Vector3( 
+                            randomInRange( -300, 300 ), 
+                            randomInRange( -300, 300 ), 
+                            randomInRange( -300, 300 ) 
+                        );
+                        Vector3 projection = randVector->dotProduct( diffUnit )* diffUnit;
+                        *randVector -= projection;
+                        target += *randVector;
+                        this->setTargetPosition( this->getControllableEntity() ->getWorldPosition() + target );
+
+                    }
+                }
+                //target has advantage
+                else
+                {
+                    //if too close
+                    if ( diffLength < 300 )
+                    {
+                        this->setTargetPosition( this->getControllableEntity() ->getWorldPosition()  );
+                    }
+                    //move closer
+                    else
+                    {
+                        this->setTargetPosition( this->positionOfTarget_ - 0.6f*diffVector );
+                    }
+                }
+            }
+            this->bShooting_ = true;
            
         }
@@ -730,5 +772,5 @@
             return ( this->getControllableEntity() ->getPosition() .squaredDistance( this->targetPosition_ ) );
         else
-            return ( this->getControllableEntity() ->getPosition() .squaredDistance( this->target_->getPosition() ) );
+            return ( this->getControllableEntity() ->getPosition() .squaredDistance( this->positionOfTarget_ ) );
     }
     
@@ -738,5 +780,5 @@
             return false;
 
-        return ( getAngle( this->getControllableEntity() ->getPosition() , this->getControllableEntity() ->getOrientation()  * WorldEntity::FRONT, this->targetPosition_ ) < angle );
+        return ( getAngle( this->getControllableEntity() ->getPosition() , this->getControllableEntity() ->getOrientation()  * WorldEntity::FRONT, this->positionOfTarget_ ) < angle );
     }
 
@@ -744,4 +786,6 @@
     {
         float squaredDistance = squaredDistanceToTarget();
+        this->setPositionOfTarget( this->target_->getPosition() );
+
         if ( this->bShooting_ && squaredDistance < 9000000 && squaredDistance > 10000 && this->isLookingAtTarget( math::pi /( 0.0002f*squaredDistance )) )
         {
@@ -760,6 +804,6 @@
         static const float hardcoded_projectile_speed = 750;
 
-        this->targetPosition_ = getPredictedPosition( this->getControllableEntity() ->getWorldPosition() , hardcoded_projectile_speed, this->target_->getWorldPosition() , this->target_->getVelocity() );
-        this->bHasTargetPosition_ = ( this->targetPosition_ != Vector3::ZERO );
+        this->positionOfTarget_ = getPredictedPosition( this->getControllableEntity() ->getWorldPosition() , hardcoded_projectile_speed, this->target_->getWorldPosition() , this->target_->getVelocity() );
+        this->bHasPositionOfTarget_ = ( this->positionOfTarget_ != Vector3::ZERO );
 
         Pawn* pawn = orxonox_cast<Pawn*>( this->getControllableEntity() );
@@ -767,5 +811,5 @@
         if ( pawn )
             //pawn->setAimPosition( this->getControllableEntity() ->getWorldPosition()  + 4000*( this->getControllableEntity() ->getOrientation()  * WorldEntity::FRONT ));
-            pawn->setAimPosition( this->targetPosition_ );
+            pawn->setAimPosition( this->positionOfTarget_ );
     
         this->getControllableEntity() ->fire( 0 );
Index: code/branches/AI_HS15/src/orxonox/controllers/CommonController.h
===================================================================
--- code/branches/AI_HS15/src/orxonox/controllers/CommonController.h	(revision 10799)
+++ code/branches/AI_HS15/src/orxonox/controllers/CommonController.h	(revision 10800)
@@ -83,5 +83,5 @@
         static const float hardcoded_projectile_speed = 750;
 
-            static const float ACTION_INTERVAL = 1.0f;
+            static const float ACTION_INTERVAL = 2.0f;
 
 
@@ -167,5 +167,5 @@
             WeakPtr<ControllableEntity> objectiveTarget_;
 
-
+            void maneuver();
             void chooseManeuverType();
             void gunsD();
Index: code/branches/AI_HS15/src/orxonox/controllers/DivisionController.cc
===================================================================
--- code/branches/AI_HS15/src/orxonox/controllers/DivisionController.cc	(revision 10799)
+++ code/branches/AI_HS15/src/orxonox/controllers/DivisionController.cc	(revision 10800)
@@ -69,9 +69,9 @@
         }*/
         
-       /* if (this->bHasTargetPosition_)
-        {
-            this->moveToTargetPosition();
-        }*/
-        if (executingMoveToPoint_)
+        if (this->bHasTargetPosition_)
+        {
+            this->moveToTargetPosition(dt);
+        }
+       /* if (executingMoveToPoint_)
         {
             executingMoveToPoint_ = !this->moveAndRoll(dt);
@@ -89,7 +89,7 @@
                 Vector3 diffVector = this->positionOfTarget_ - this->getControllableEntity()->getWorldPosition();
                 float diffLength = diffVector.length();
-               /* Quaternion rotationToTarget = (this->getControllableEntity()->getOrientation() * WorldEntity::FRONT).getRotationTo(diffVector);
+                Quaternion rotationToTarget = (this->getControllableEntity()->getOrientation() * WorldEntity::FRONT).getRotationTo(diffVector);
                 Vector3* targetPosition = new Vector3 ( 0, 0, -200 );
-                Vector3 target = rotationToTarget * (*targetPosition);*/
+                Vector3 target = rotationToTarget * (*targetPosition);
                 if (diffLength > 200)
                     this->setTargetPosition( this->positionOfTarget_ - 0.6f*diffVector);
@@ -106,6 +106,6 @@
                 this->moveAndRoll(dt);
             }
-        }
-        if (this->bShooting_)
+        }*/
+        if (this->bShooting_ && this->canFire())
             doFire();
         SUPER(DivisionController, tick, dt);
@@ -135,4 +135,6 @@
         }*/
         //this->chooseManeuverType();
+                    this->maneuver();
+
         switch (this->maneuverType_)
         {
