diff --git a/AMDiS/src/parallel/CheckerPartitioner.cc b/AMDiS/src/parallel/CheckerPartitioner.cc
index 4d8c747c6e31b426608223984d21ec97b15ee6ae..5142e61a0c5cb73e13effcb82016e3c650c7dbeb 100644
--- a/AMDiS/src/parallel/CheckerPartitioner.cc
+++ b/AMDiS/src/parallel/CheckerPartitioner.cc
@@ -152,10 +152,19 @@ namespace AMDiS {
       case 4:
 	// tetrahedron-stripes
 
+	elInRank = elStripeInRank[elIndex];
+
+#if 0
 	{
+
+	  int nStripes = elInStripe.size();
+	  int elsPerStripe = elInStripe[0].size();  
+	  int procPerStripe = mpiSize / nStripes;
+	  TEST_EXIT(mpiSize % nStripes == 0)("Should not happen!\n");
+	  
 	  int inStripe = -1;
 	  int stripePos = -1;
-	  for (int stripe = 0; stripe < elInStripe.size(); stripe++) {
+	  for (int stripe = 0; stripe < nStripes; stripe++) {
 	    for (int pos = 0; pos < elInStripe[stripe].size(); pos++) {
 	      if (elInStripe[stripe][pos] == elIndex) {
 		inStripe = stripe;
@@ -171,6 +180,7 @@ namespace AMDiS {
 
 	  elInRank = inStripe;
 	}
+#endif
 
 	break;
 
@@ -197,6 +207,7 @@ namespace AMDiS {
     FUNCNAME("CheckerPartitioner::createTetrahedronStripes()");
 
     vector<vector<MacroElement*> > stripes;
+    vector<vector<int> > elInStripe;
 
     int nElements = 0;
     TraverseStack stack;
@@ -300,6 +311,32 @@ namespace AMDiS {
     }
 
     TEST_EXIT(testElementCounter == nElements)("Should not happen!\n");
+
+    int elsPerStripe = stripes[0].size();
+    for (int i = 0; i < stripes.size(); i++) {
+      TEST_EXIT(stripes[i].size() == elsPerStripe)
+	("Should not happen!\n");
+    }
+
+
+    // === Computing mapping from macro element indices to ranks ===
+
+    int nStripes = elInStripe.size();
+    int procPerStripe = mpiSize / nStripes;
+    int elsPerRank = elsPerStripe / procPerStripe;
+    TEST_EXIT(mpiSize % nStripes == 0)("Should not happen!\n");
+    TEST_EXIT(elsPerStripe % procPerStripe == 0)("Should not happen!\n");
+
+    elStripeInRank.clear();
+
+    int rankCount = 0;
+    for (int i = 0; i < nStripes; i++) {
+      for (int j = 0; j < procPerStripe; j++) {
+	for (int k = 0; k < elsPerRank; k++)
+	  elStripeInRank[elInStripe[i][j * elsPerRank + k]] = rankCount;
+	rankCount++;
+      }
+    }
   }
 
 }
diff --git a/AMDiS/src/parallel/CheckerPartitioner.h b/AMDiS/src/parallel/CheckerPartitioner.h
index f1c4809a04cbaa9d4e61f2f222abd371672ef2e0..4933e8a1a4e0869cbcd9a365480c84be0ed0852b 100644
--- a/AMDiS/src/parallel/CheckerPartitioner.h
+++ b/AMDiS/src/parallel/CheckerPartitioner.h
@@ -65,7 +65,7 @@ namespace AMDiS {
     int mode;
 
     /// Only used in mode 4.
-    vector<vector<int> > elInStripe;
+    map<int, int> elStripeInRank;
 
     bool multilevel;
   };
diff --git a/AMDiS/src/parallel/MeshDistributor.cc b/AMDiS/src/parallel/MeshDistributor.cc
index fbdd1794b5f28be5cf86ac37a055775dfa34e61c..ba828905265565f3d5756270b9b2868061eb035c 100644
--- a/AMDiS/src/parallel/MeshDistributor.cc
+++ b/AMDiS/src/parallel/MeshDistributor.cc
@@ -1392,7 +1392,7 @@ namespace AMDiS {
 #else
     int writePartMesh = 0;
 #endif
-    Parameters::get("dbg->write part mesh", writePartMesh);
+    Parameters::get("parallel->debug->write part mesh", writePartMesh);
     if (writePartMesh > 0 && repartitioningCounter == 0)
       ParallelDebug::writePartitioningFile(debugOutputDir + "partitioning", 
 					   repartitioningCounter, 
diff --git a/AMDiS/src/parallel/PetscSolverFeti.cc b/AMDiS/src/parallel/PetscSolverFeti.cc
index 3941b7a6e9cc6daa5e6a0c66708328fe6ebb183d..0e698b69eb983edc5afd72fc4ab5e296695507f2 100644
--- a/AMDiS/src/parallel/PetscSolverFeti.cc
+++ b/AMDiS/src/parallel/PetscSolverFeti.cc
@@ -352,6 +352,8 @@ namespace AMDiS {
 	    (fabs(c[0] - 12.5) < e && fabs(c[1] - 12.5) < e)) {
 	  MSG("PRIMAL COORD %f %f\n", c[0], c[1]);
 	  primals.insert(**it);
+	} else {
+	  MSG("OMMIT SOME PRIMAL!\n");
 	}
       }
     }