diff --git a/AMDiS/src/parallel/PetscSolverFeti.cc b/AMDiS/src/parallel/PetscSolverFeti.cc
index 007056ef4bfa17405a7201d50909dc318b834767..eb1d365a1d5f7a7b741f1df80f98cf3676dfc7eb 100644
--- a/AMDiS/src/parallel/PetscSolverFeti.cc
+++ b/AMDiS/src/parallel/PetscSolverFeti.cc
@@ -2036,7 +2036,29 @@ namespace AMDiS {
       VecAXPY(tmp_primal0, -1.0, tmp_primal1);
     }
 
-    KSPSolve(ksp_schur_primal, tmp_primal0, tmp_primal0);
+    if (augmentedLagrange == false) {
+      KSPSolve(ksp_schur_primal, tmp_primal0, tmp_primal0);
+    } else {
+      Vec tmp_mu;
+      MatGetVecs(mat_augmented_lagrange, PETSC_NULL, &tmp_mu);
+      
+      MatMult(mat_lagrange, tmp_b1, tmp_lagrange);
+      MatMult(mat_augmented_lagrange, tmp_lagrange, tmp_mu);
+      VecScale(tmp_mu, -1.0);
+      
+      Vec vec_array[2] = {tmp_primal0, tmp_mu};
+      Vec vec_nest;
+      VecCreateNest(PETSC_COMM_WORLD, 2, PETSC_NULL, vec_array, &vec_nest);	
+
+      KSPSolve(ksp_schur_primal, vec_nest, vec_nest);
+
+      MatMultTranspose(mat_augmented_lagrange, tmp_mu, tmp_lagrange);
+      MatMultTranspose(mat_lagrange, tmp_lagrange, tmp_b1);
+      VecAXPY(tmp_b0, -1.0, tmp_b1);
+
+      VecDestroy(&tmp_mu);
+      VecDestroy(&vec_nest);
+    }
 
     // === Solve for u_b. ===