diff --git a/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc b/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc
index cd21ab4319d34c9016104d69f4440b31ec11740b..5c9562aaa353e0bf57c381c869cd27935fa447e9 100644
--- a/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc
+++ b/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc
@@ -151,6 +151,13 @@ namespace AMDiS {
 
     VecAssemblyBegin(petscRhsVec);
     VecAssemblyEnd(petscRhsVec);
+
+    if (removeRhsNullSpace) {
+      MatNullSpace sp;
+      MatNullSpaceCreate(PETSC_COMM_WORLD, PETSC_TRUE, 0, PETSC_NULL, &sp);
+      MatNullSpaceRemove(sp, petscRhsVec, PETSC_NULL);
+      MatNullSpaceDestroy(&sp);
+    }
   }
 
 
diff --git a/AMDiS/src/parallel/PetscSolverGlobalMatrix.h b/AMDiS/src/parallel/PetscSolverGlobalMatrix.h
index e53add03bdef23aef666ec1eccf9d3e5d31f59d6..4e60a9335bc78402529b3cb4c5447908cadd0345 100644
--- a/AMDiS/src/parallel/PetscSolverGlobalMatrix.h
+++ b/AMDiS/src/parallel/PetscSolverGlobalMatrix.h
@@ -88,11 +88,14 @@ namespace AMDiS {
 	o_nnz(NULL),
 	lastMeshNnz(0),
 	zeroStartVector(false),
-	alwaysCreateNnzStructure(false)
+	alwaysCreateNnzStructure(false),
+	removeRhsNullSpace(false)
     {
       Parameters::get("parallel->use zero start vector", zeroStartVector);
       Parameters::get("parallel->always create nnz structure", 
 		      alwaysCreateNnzStructure);
+      Parameters::get("parallel->remove rhs null space", 
+		      removeRhsNullSpace);
     }
 
     void fillPetscMatrix(Matrix<DOFMatrix*> *mat);
@@ -141,6 +144,9 @@ namespace AMDiS {
     /// Mapping from global DOF indices to global matrix indices under 
     /// consideration of possibly multiple components.
     DofToMatIndex dofToMatIndex;
+
+    /// If true, the constant null space is projected out of the RHS vector.
+    bool removeRhsNullSpace;
   };