diff --git a/AMDiS/src/parallel/GlobalMatrixSolver.cc b/AMDiS/src/parallel/GlobalMatrixSolver.cc
index 22823ca902e987960d8142ac224c49543bc68668..66336ba9ec624e3e34c060ae4f89262342a8ea44 100644
--- a/AMDiS/src/parallel/GlobalMatrixSolver.cc
+++ b/AMDiS/src/parallel/GlobalMatrixSolver.cc
@@ -4,7 +4,7 @@
 #include "DOFVector.h"
 #include "Debug.h"
 #include "SystemVector.h"
-#include "VtkWriter.h"
+
 #include "petscksp.h"
 
 namespace AMDiS {
@@ -283,10 +283,10 @@ namespace AMDiS {
 	      // Traverse all non zero entries in this row.
 	      for (icursor_type icursor = begin<nz>(cursor), 
 		     icend = end<nz>(cursor); icursor != icend; ++icursor) {
-		if (value(*icursor) != 0.0) {
-		  int petscColIdx = 
-		    meshDistributor->mapLocalToGlobal(col(*icursor)) * nComponents + j;
+		int petscColIdx = 
+		  meshDistributor->mapLocalToGlobal(col(*icursor)) * nComponents + j;
 
+		if (value(*icursor) != 0.0 || petscRowIdx == petscColIdx) {
 		  // The row DOF is a rank DOF, if also the column is a rank DOF, 
 		  // increment the d_nnz values for this row, otherwise the o_nnz value.
 		  if (petscColIdx >= meshDistributor->getRstart() * nComponents && 
@@ -445,6 +445,9 @@ namespace AMDiS {
     MatAssemblyBegin(petscMatrix, MAT_FINAL_ASSEMBLY);
     MatAssemblyEnd(petscMatrix, MAT_FINAL_ASSEMBLY);
 
+#if (DEBUG != 0)
+    INFO(info, 8)("Fill petsc matrix 3 needed %.5f seconds\n", TIME_USED(first, clock()));
+#endif
 
     // === Transfer values from DOF vector to the PETSc vector. ===