diff --git a/src/quadarm_task_priority_ctrl.cpp b/src/quadarm_task_priority_ctrl.cpp
index 052ab852651485ca189b0b4ff1d1a48f246ebb64..5e3fcff43429b50698254410b0427fcfe7aa079d 100644
--- a/src/quadarm_task_priority_ctrl.cpp
+++ b/src/quadarm_task_priority_ctrl.cpp
@@ -211,30 +211,18 @@ void CQuadarm_Task_Priority_Ctrl::qa_control(){
 
   // TASK: Visual Servo _________________________________________
   
-  // Underactuated Quadrotor 
-  MatrixXd J1(8,4),J2(8,2),Jqa1(6,4+this->arm_.nj),Jqa2(6,2);
-
-  // 9 DOF Extracting wx and wy from quadrotor 
-  Jqa1.block(0,0,6,3) = this->Jqa_.block(0,0,6,3);
-  Jqa1.block(0,3,6,1+this->arm_.nj) = this->Jqa_.block(0,5,6,1+this->arm_.nj);
-  Jqa2 = this->Jqa_.block(0,3,6,2);
-  MatrixXd eye(4+this->arm_.nj,4+this->arm_.nj);
-  eye = MatrixXd::Identity(4+this->arm_.nj,4+this->arm_.nj);
-
-  // compute pseudo inverse 
-  //MatrixXd Jqa1_pseudo(4+this->arm_.nj,6);
-  //Jqa1_pseudo = calcPinv(Jqa1);
-  MatrixXd Jqa1_wpseudo(4+this->arm_.nj,6);
-  Jqa1_wpseudo = weight_jacvs_inverse(Jqa1);
-
-  MatrixXd sigmaVS = this->vel_.cam-Jqa2*this->ctrl_params_.v_rollpitch;
+  // task Jacobian and sigma
+  MatrixXd JVS,JVS_wpseudo,sigmaVS;
+  task_vs(JVS,JVS_wpseudo,sigmaVS);
 
-  this->ctrl_params_.vs_vel = Jqa1_wpseudo * sigmaVS;
+  // task velocity
+  this->ctrl_params_.vs_vel = JVS_wpseudo * sigmaVS;
 
   // TASK: CoG alignement ______________________________________
 
   // Null space projector
-  MatrixXd Nqa1 = (eye-(Jqa1_wpseudo*Jqa1));
+  MatrixXd eye = MatrixXd::Identity(4+this->arm_.nj,4+this->arm_.nj);
+  MatrixXd Nqa1 = (eye-(JVS_wpseudo*JVS));
   
   // task Jacobian and sigma
   MatrixXd JG,JG_pseudo,sigmaG;
@@ -249,14 +237,14 @@ void CQuadarm_Task_Priority_Ctrl::qa_control(){
   // Third control task (Joint limits) ________________________
   
   // Augmented null space projector from Augmented Jacobian
-  MatrixXd Jqa1_G = MatrixXd::Zero(Jqa1.rows()+JG.rows(),Jqa1.cols());
-  Jqa1_G.block(0,0,Jqa1.rows(),Jqa1.cols()) = Jqa1;
-  Jqa1_G.block(Jqa1.rows()-1,0,JG.rows(),JG.cols())=JG; 
+  MatrixXd JVS_G = MatrixXd::Zero(JVS.rows()+JG.rows(),JVS.cols());
+  JVS_G.block(0,0,JVS.rows(),JVS.cols()) = JVS;
+  JVS_G.block(JVS.rows()-1,0,JG.rows(),JG.cols())=JG; 
   MatrixXd Nqa1_G = MatrixXd::Zero(4+this->arm_.nj,4+this->arm_.nj);
-  MatrixXd Jqa1_G_pseudo = calcPinv(Jqa1_G);
+  MatrixXd JVS_G_pseudo = calcPinv(JVS_G);
   
   // Third task after secondary aligning CoG
-  Nqa1_G = (eye-(Jqa1_G_pseudo*Jqa1_G));
+  Nqa1_G = (eye-(JVS_G_pseudo*JVS_G));
   //Nqa1_G = Nqa1; // Third task as secondary
 
   // task Jacobian and sigma
@@ -298,9 +286,26 @@ void CQuadarm_Task_Priority_Ctrl::qa_control(){
   this->vel_.quadarm.block(0,0,3,1) = Vtotal.block(0,0,3,1);
   this->vel_.quadarm.block(5,0,1+this->arm_.nj,1) = Vtotal.block(3,0,1+this->arm_.nj,1);
 }
-void CQuadarm_Task_Priority_Ctrl::task_vs(MatrixXd& Jqa1,MatrixXd& Jqa1_wpseudo,MatrixXd& sigmaVS)
+void CQuadarm_Task_Priority_Ctrl::task_vs(MatrixXd& JVS,MatrixXd& JVS_pseudo,MatrixXd& sigmaVS)
 {
+  // Underactuated Quadrotor 
+  MatrixXd J1(8,4),J2(8,2),Jqa1(6,4+this->arm_.nj),Jqa2(6,2);
+
+  // 9 DOF Extracting wx and wy from quadrotor 
+  Jqa1.block(0,0,6,3) = this->Jqa_.block(0,0,6,3);
+  Jqa1.block(0,3,6,1+this->arm_.nj) = this->Jqa_.block(0,5,6,1+this->arm_.nj);
+  Jqa2 = this->Jqa_.block(0,3,6,2);
+  MatrixXd eye = MatrixXd::Identity(4+this->arm_.nj,4+this->arm_.nj);
+
+  // task jacobian
+  JVS = Jqa1;
+
+  // task jacobian pseudo inverse 
+  //JVS_pseudo = calcPinv(Jqa1);
+  JVS_pseudo = weight_jacvs_inverse(Jqa1);
 
+  // task velocity vector
+  sigmaVS = this->vel_.cam-Jqa2*this->ctrl_params_.v_rollpitch;
 }
 void CQuadarm_Task_Priority_Ctrl::task_infrad(MatrixXd& JIR,MatrixXd& JIR_pseudo,MatrixXd& sigmaIR)
 {
diff --git a/src/quadarm_task_priority_ctrl.h b/src/quadarm_task_priority_ctrl.h
index 4d88ba4c7797904c76224545b350f91e52d77ddb..0de288fe2bc651db522d5acb5575b3154d43ea4c 100644
--- a/src/quadarm_task_priority_ctrl.h
+++ b/src/quadarm_task_priority_ctrl.h
@@ -177,7 +177,7 @@ class CQuadarm_Task_Priority_Ctrl
     * Compute vector and jacobians of the task corresponding to the visual servoing. 
     *
     */ 
-    void task_vs(MatrixXd& Jqa1,MatrixXd& Jqa1_wpseudo,MatrixXd& sigmaVS);
+    void task_vs(MatrixXd& JVS,MatrixXd& JVS_pseudo,MatrixXd& sigmaVS);
 
     /**
     * \brief Task: Security inflation radius