Index: code/branches/campaignHS15/src/orxonox/controllers/ActionpointController.cc
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/ActionpointController.cc	(revision 10880)
+++ code/branches/campaignHS15/src/orxonox/controllers/ActionpointController.cc	(revision 10881)
@@ -364,5 +364,7 @@
             (this->getProtect()->getWorldOrientation()* (targetRelativePosition)));
         this->setTargetPosition(targetAbsolutePosition);
-        this->setTargetOrientation(this->getProtect()->getWorldOrientation());
+        this->actionCounter_ += this->actionCounter_ < 100000 ? 1 : -this->actionCounter_ ;
+        if (this->actionConter_ % 3 == 0)
+            this->setTargetOrientation(this->getProtect()->getWorldOrientation());
     }
     void ActionpointController::nextActionpoint()
Index: code/branches/campaignHS15/src/orxonox/controllers/DivisionController.cc
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/DivisionController.cc	(revision 10880)
+++ code/branches/campaignHS15/src/orxonox/controllers/DivisionController.cc	(revision 10881)
@@ -39,5 +39,5 @@
     {
         RegisterObject(DivisionController);
-        
+        this->actionCounter_ = 0;
         this->setFormationMode(FormationMode::DIAMOND);
         this->target_ = 0;
Index: code/branches/campaignHS15/src/orxonox/controllers/FlyingController.cc
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/FlyingController.cc	(revision 10880)
+++ code/branches/campaignHS15/src/orxonox/controllers/FlyingController.cc	(revision 10881)
@@ -38,5 +38,4 @@
     {
         this->rotationProgress_ = 0;
-        this->tickCounter_ = 0;
         this->spread_ = 200;
         this->tolerance_ = 80;
@@ -95,10 +94,9 @@
     {
         ControllableEntity* entity = this->getControllableEntity();
-        this->tickCounter_ += this->tickCounter_ < 100000 ? 1 : -this->tickCounter_ ;
 
         float distance = ( target - this->getControllableEntity() ->getPosition() ).length();
 
 
-        if ( distance > this->tolerance_ )
+        if ( distance >= this->tolerance_ )
         {
             Vector2 coord = get2DViewCoordinates
@@ -115,12 +113,10 @@
             if (distance > this->tolerance_*1.5f || (rotateX > -0.01 && rotateX < 0.01 && rotateY > -0.01 && rotateY < 0.01))
                 this->getControllableEntity() ->moveFrontBack( SPEED * dt );
-            if (this->tickCounter_ % 10 == 0 )
-                copyTargetOrientation( dt );
         }
         else
         {      
             bHasTargetPosition_ = false;
-            bHasTargetOrientation_ = false;
-        }
+        }
+        copyTargetOrientation(dt);
     }
     
@@ -136,15 +132,25 @@
        
         Quaternion myOrient = this->getControllableEntity()->getOrientation();
-        this->rotationProgress_ += 5*dt;
+        this->rotationProgress_ += dt;
 
         if (this->rotationProgress_ > 1)
         {
             this->rotationProgress_ = 0;
+            this->bHasTargetOrientation_ = false;
         }
         else
         {
+
             Quaternion delta = Quaternion::Slerp(rotationProgress_, myOrient, orient, true);
-      
+            
+            //rotate roll builds a Quaternion in roll method of WorldEntity, then it sets orientation.
+            //it is faster just to set orientation, plus that way there is no need in calculating the roll angle.
+            //On the downside, however, ship might also yaw and pitch, but this effect is neglectable, as we only call 
+            //copyOrientation after we move our ship, thus it doesn't affect ships's flying direction too much.
+            //If you don't like the code style, you are welcomed to uncomment the code below
+            //and comment out setOrientation part, it will work just fine, but it will also be a tiny bit slower.
+            //P.S. apperantly it did affect ship's direction and did so way too much.
             Matrix3 orientMatrix, myMatrix;
+
             delta.ToRotationMatrix(orientMatrix);
             myOrient.ToRotationMatrix (myMatrix);
@@ -153,6 +159,7 @@
             orientMatrix.ToEulerAnglesYXZ(yRad, pRad, rRad);
             myMatrix.ToEulerAnglesYXZ (yMy, pMy, rMy);
-            this->getControllableEntity()->rotateRoll (50.0f * dt*(rRad.valueRadians() - rMy.valueRadians()));
-            //this->getControllableEntity()->setOrientation(delta);
+
+            this->getControllableEntity()->rotateRoll ((rRad.valueRadians() - rMy.valueRadians())*ROTATEFACTOR*dt);
+            // this->getControllableEntity()->setOrientation(delta);
         }
         
Index: code/branches/campaignHS15/src/orxonox/controllers/FlyingController.h
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/FlyingController.h	(revision 10880)
+++ code/branches/campaignHS15/src/orxonox/controllers/FlyingController.h	(revision 10881)
@@ -83,5 +83,5 @@
           
             float rotationProgress_;
-            int tickCounter_;
+            int actionCounter_;
             bool bHasTargetPosition_;
             Vector3 targetPosition_;
Index: code/branches/campaignHS15/src/orxonox/controllers/SectionController.cc
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/SectionController.cc	(revision 10880)
+++ code/branches/campaignHS15/src/orxonox/controllers/SectionController.cc	(revision 10881)
@@ -98,7 +98,8 @@
             LeaderController* newDivisionLeader = findNewDivisionLeader();
             this->myDivisionLeader_ = newDivisionLeader;
+            //spread copyOrientation called equally among the division
             if (this->myDivisionLeader_)
             {
-
+                this->actionCounter_ = 8;
             }
         }
@@ -170,6 +171,10 @@
                 (leaderPosition + (orient*WorldEntity::FRONT) * (leaderEntity->getVelocity().length()/5)
                  + (orient* (targetRelativePosition)));
-       
-            this->setAction (Action::FLY, targetAbsolutePosition, orient);
+            //let ship finish rotating. also don't call copyOrientation to often as it is a slow function.
+            if (this->actionCounter_ % 9 == 0 && !this->bHasTargetOrientation_)
+                this->setAction (Action::FLY, targetAbsolutePosition, orient);
+            else
+                this->setAction (Action::FLY, targetAbsolutePosition);
+
             if ((targetAbsolutePosition - myPosition).length() > this->tolerance_ * 1.5f)
             {
@@ -190,5 +195,6 @@
             }
         }
-     
+        this->actionCounter_ += this->actionCounter_ < 100000 ? 1 : -this->actionCounter_ ;
+
     }
 
Index: code/branches/campaignHS15/src/orxonox/controllers/WingmanController.cc
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/WingmanController.cc	(revision 10880)
+++ code/branches/campaignHS15/src/orxonox/controllers/WingmanController.cc	(revision 10881)
@@ -87,5 +87,9 @@
             if (this->myLeader_)
             {
-
+                //spread copyOrientation called equally among the division
+                if (this->myLeader_->getIdentifier()->getName() == "SectionController")
+                    this->actionCounter_ = 2;
+                else
+                    this->actionCounter_ = 5;
             }
         }
@@ -147,7 +151,9 @@
                 (leaderPosition + (orient*WorldEntity::FRONT) * (leaderEntity->getVelocity().length()/5)
                  + (orient* (targetRelativePosition)));
-       
-            this->setAction (Action::FLY, targetAbsolutePosition, orient);
-
+            //let ship finish rotating. also don't call copyOrientation to often as it is a slow function.
+            if (this->actionCounter_ % 9 == 0 && !this->bHasTargetOrientation_)
+                this->setAction (Action::FLY, targetAbsolutePosition, orient);
+            else
+                this->setAction (Action::FLY, targetAbsolutePosition);
             if ((targetAbsolutePosition - myPosition).length() > this->tolerance_ * 1.5f)
             {
@@ -168,5 +174,5 @@
             }
         }
-        
+        this->actionCounter_ += this->actionCounter_ < 100000 ? 1 : -this->actionCounter_ ;
     }
      
